From a42d0e7b6fcba543ac0e054ef646c1cfc256bf2f Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Wed, 25 Jan 2023 14:01:26 +0100 Subject: [PATCH] merge --- src/Umbraco.Web.UI.Client/.gitignore | 8 +- src/Umbraco.Web.UI.Client/.storybook/main.js | 2 +- .../.storybook/preview.js | 8 +- src/Umbraco.Web.UI.Client/e2e/login.spec.ts | 17 --- .../libs/element/context-provider.element.ts | 13 +- .../libs/extensions-api/index.ts | 4 + .../libs/extensions-registry/index.ts | 3 - .../libs/observable-api/array-state.ts | 55 ++++---- .../libs/observable-api/object-state.ts | 10 +- .../libs/store/store-base.ts | 9 +- src/Umbraco.Web.UI.Client/package.json | 6 +- src/Umbraco.Web.UI.Client/public/login.jpeg | Bin 30678 -> 0 bytes src/Umbraco.Web.UI.Client/src/app.ts | 9 +- .../src/auth/auth-layout.element.ts | 72 ---------- src/Umbraco.Web.UI.Client/src/auth/auth.ts | 4 - .../input-user-group.element.ts | 99 -------------- .../input-user-group/input-user-group.test.ts | 19 --- .../input-user/input-user.element.ts | 94 ------------- .../components/input-user/input-user.test.ts | 19 --- .../external-login-provider-test.element.ts | 41 ------ .../external-login-provider-test2.element.ts | 54 -------- .../external-login-providers/manifests.ts | 29 ---- src/Umbraco.Web.UI.Client/src/auth/index.ts | 14 -- .../src/auth/login/login.element.ts | 124 ------------------ .../src/auth/login/login.test.ts | 19 --- .../src/auth/utils.test.ts | 22 ---- src/Umbraco.Web.UI.Client/src/auth/utils.ts | 16 --- .../workspace/document-workspace.context.ts | 4 +- .../src/backoffice/documents/index.ts | 4 +- .../src/backoffice/media/index.ts | 3 +- .../src/backoffice/members/index.ts | 4 +- .../src/backoffice/packages/index.ts | 3 +- .../created-packages-section-view.element.ts | 2 +- ...installed-packages-section-view.element.ts | 2 +- .../packages-installed-item.element.ts | 2 +- .../src/backoffice/search/index.ts | 3 +- .../data-type-workspace-view-edit.element.ts | 2 +- .../extension-root-workspace.element.ts | 2 +- .../src/backoffice/settings/index.ts | 5 +- .../collection/collection-toolbar.element.ts | 2 +- .../shared/collection/collection.element.ts | 2 +- .../backoffice-frame/backoffice.context.ts | 7 +- .../extension-slot/extension-slot.element.ts | 2 +- .../extension-slot/extension-slot.test.ts | 53 +++----- .../input-section/input-section.element.ts | 2 +- .../section-dashboards.element.ts | 14 +- .../section-views/section-views.element.ts | 2 +- .../components/section/section.element.ts | 2 +- ...e-context-menu-page-action-list.element.ts | 2 +- .../components/tree/tree-item.element.ts | 2 +- .../shared/components/tree/tree.element.ts | 2 +- .../workspace-property.element.ts | 2 +- .../workspace-content.context.ts | 4 +- .../workspace-layout.element.ts | 21 ++- .../src/backoffice/shared/index.ts | 3 +- .../property-action-menu.element.ts | 61 ++++----- .../property-editor-config.element.ts | 34 +++-- .../src/backoffice/translation/index.ts | 2 +- .../src/backoffice/users/index.ts | 4 +- .../workspace/user-group-workspace.element.ts | 10 +- .../user-section/section-users.element.ts | 2 +- ...up-table-sections-column-layout.element.ts | 2 +- .../grid/workspace-view-users-grid.element.ts | 2 +- ...user-table-status-column-layout.element.ts | 2 +- .../views/users/section-view-users.element.ts | 2 +- .../workspace-view-users-create.element.ts | 6 +- .../workspace-view-users-invite.element.ts | 6 +- .../users/workspace/user-workspace.element.ts | 4 +- .../src/core/css/custom-properties.css | 3 - .../picker-layout-section.element.ts | 2 +- ...ayout-property-editor-ui-picker.element.ts | 2 +- .../src/core/test-utils/chai.ts | 3 - .../src/core/test-utils/index.ts | 1 - .../src/core/utils/baseUrl.ts | 10 -- .../src/core/utils/index.ts | 2 - .../src/core/utils/umbraco-path.ts | 4 - src/Umbraco.Web.UI.Client/tsconfig.json | 8 +- .../web-test-runner.config.mjs | 9 +- 78 files changed, 221 insertions(+), 888 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/e2e/login.spec.ts delete mode 100644 src/Umbraco.Web.UI.Client/public/login.jpeg delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/auth-layout.element.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/auth.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.element.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.test.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.element.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.test.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test.element.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test2.element.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/external-login-providers/manifests.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/login/login.element.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/login/login.test.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/utils.test.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/auth/utils.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/core/css/custom-properties.css delete mode 100644 src/Umbraco.Web.UI.Client/src/core/test-utils/chai.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/core/test-utils/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/core/utils/baseUrl.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/core/utils/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/core/utils/umbraco-path.ts diff --git a/src/Umbraco.Web.UI.Client/.gitignore b/src/Umbraco.Web.UI.Client/.gitignore index def38d0c92..203142b8ae 100644 --- a/src/Umbraco.Web.UI.Client/.gitignore +++ b/src/Umbraco.Web.UI.Client/.gitignore @@ -15,7 +15,7 @@ types *.tgz ## testing -/coverage/ +coverage/ # Editor directories and files .vscode/* @@ -32,9 +32,9 @@ types # eslint .eslintcache -/test-results/ -/playwright-report/ -/playwright/.cache/ +test-results/ +playwright-report/ +playwright/.cache/ # storybook storybook-static/ diff --git a/src/Umbraco.Web.UI.Client/.storybook/main.js b/src/Umbraco.Web.UI.Client/.storybook/main.js index 41f0022362..8d47e61583 100644 --- a/src/Umbraco.Web.UI.Client/.storybook/main.js +++ b/src/Umbraco.Web.UI.Client/.storybook/main.js @@ -2,7 +2,7 @@ const tsconfigPaths = require('vite-tsconfig-paths').default; const { mergeConfig } = require('vite'); module.exports = { - stories: ['../@(src|libs)/**/*.stories.@(js|jsx|ts|tsx|mdx)'], + stories: ['../@(src|libs|apps)/**/*.stories.@(js|jsx|ts|tsx|mdx)'], addons: ['@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-a11y'], framework: '@storybook/web-components', features: { diff --git a/src/Umbraco.Web.UI.Client/.storybook/preview.js b/src/Umbraco.Web.UI.Client/.storybook/preview.js index 10c6daa7b0..9e30c4c31a 100644 --- a/src/Umbraco.Web.UI.Client/.storybook/preview.js +++ b/src/Umbraco.Web.UI.Client/.storybook/preview.js @@ -1,5 +1,5 @@ -import '../src/core/css/custom-properties.css'; import '@umbraco-ui/uui-css/dist/uui-css.css'; +import '../libs/css/custom-properties.css'; import '@umbraco-ui/uui'; import '@umbraco-ui/uui-modal'; @@ -23,7 +23,7 @@ import { UmbModalService } from '../src/core/modal'; // TODO: Fix storybook manifest registrations. -import { umbExtensionsRegistry } from '../libs/extensions-registry'; +import { umbExtensionsRegistry } from '../libs/extensions-api'; import '../src/backoffice/shared/components/backoffice-frame/backoffice-notification-container.element'; import '../libs/element/context-provider.element'; @@ -55,11 +55,11 @@ customElements.define('umb-storybook', UmbStoryBookElement); const storybookProvider = (story) => html` ${story()} `; const dataTypeStoreProvider = (story) => html` - ${story()} + new UmbDataTypeDetailStore(host)}>${story()} `; const documentTypeStoreProvider = (story) => html` - new UmbDocumentTypeDetailStore(host)} >${story()} `; diff --git a/src/Umbraco.Web.UI.Client/e2e/login.spec.ts b/src/Umbraco.Web.UI.Client/e2e/login.spec.ts deleted file mode 100644 index 2b0598fa92..0000000000 --- a/src/Umbraco.Web.UI.Client/e2e/login.spec.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { expect, test } from './test'; - -test('login', async ({ page }) => { - // Go to /login - await page.goto('/login'); - - // Fill input[name="email"] - await page.locator('input[name="email"]').fill('test@umbraco.com'); - - // Fill input[name="password"] - await page.locator('input[name="password"]').fill('test123456'); - - // Click [aria-label="Login"] - await page.locator('[aria-label="Login"]').click(); - - await expect(page).toHaveURL(`/section/content/dashboard/welcome`); -}); diff --git a/src/Umbraco.Web.UI.Client/libs/element/context-provider.element.ts b/src/Umbraco.Web.UI.Client/libs/element/context-provider.element.ts index 7155397b84..9d04a92ab2 100644 --- a/src/Umbraco.Web.UI.Client/libs/element/context-provider.element.ts +++ b/src/Umbraco.Web.UI.Client/libs/element/context-provider.element.ts @@ -1,9 +1,18 @@ import { html } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { UmbLitElement } from './lit-element.element'; +import type { UmbControllerHostInterface } from '@umbraco-cms/controller'; @customElement('umb-context-provider') export class UmbContextProviderElement extends UmbLitElement { + + /** + * The value to provide to the context. + * @required + */ + @property({ type: Object, attribute: false }) + create?: (host:UmbControllerHostInterface) => unknown; + /** * The value to provide to the context. * @required @@ -23,7 +32,9 @@ export class UmbContextProviderElement extends UmbLitElement { if (!this.key) { throw new Error('The key property is required.'); } - if (!this.value) { + if (this.create) { + this.value = this.create(this); + } else if (!this.value) { throw new Error('The value property is required.'); } this.provideContext(this.key, this.value); diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-api/index.ts b/src/Umbraco.Web.UI.Client/libs/extensions-api/index.ts index 56e697161e..bd0c6626ca 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-api/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-api/index.ts @@ -1,3 +1,5 @@ +import { UmbExtensionRegistry } from './registry/extension.registry'; + export * from './registry/extension.registry'; export * from './create-extension-element.function'; export * from './has-default-export.function'; @@ -6,3 +8,5 @@ export * from './is-manifest-elementable-type.function'; export * from './is-manifest-js-type.function'; export * from './is-manifest-loader-type.function'; export * from './load-extension.function'; + +export const umbExtensionsRegistry = new UmbExtensionRegistry(); diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/index.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/index.ts index 2d31a26ce3..e9644dae47 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-registry/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/index.ts @@ -1,4 +1 @@ -import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api'; - export * from './models'; -export const umbExtensionsRegistry = new UmbExtensionRegistry(); diff --git a/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts b/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts index e24fcb66c4..303e3b3874 100644 --- a/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts +++ b/src/Umbraco.Web.UI.Client/libs/observable-api/array-state.ts @@ -1,5 +1,5 @@ import { DeepState } from "./deep-state"; -import { appendToFrozenArray } from "./append-to-frozen-array.method"; +import { pushToUniqueArray } from "./push-to-unique-array.method"; /** * @export @@ -21,15 +21,15 @@ export class ArrayState extends DeepState { /** * @method append * @param {unknown} unique - The unique value to remove. - * @returns ArrayState + * @return {ArrayState} Reference to it self. * @description - Remove some new data of this Subject. * @example Example remove entry with key '1' * const data = [ * { key: 1, value: 'foo'}, * { key: 2, value: 'bar'} * ]; - * const mySubject = new ArrayState(data, (x) => x.key); - * mySubject.remove([1]); + * const myState = new ArrayState(data, (x) => x.key); + * myState.remove([1]); */ remove(uniques: unknown[]) { let next = this.getValue(); @@ -51,7 +51,7 @@ export class ArrayState extends DeepState { /** * @method filter * @param {unknown} filterMethod - The unique value to remove. - * @returns ArrayState + * @return {ArrayState} Reference to it self. * @description - Remove some new data of this Subject. * @example Example remove entry with key '1' * const data = [ @@ -59,8 +59,8 @@ export class ArrayState extends DeepState { * { key: 2, value: 'bar'}, * { key: 3, value: 'poo'} * ]; - * const mySubject = new ArrayState(data, (x) => x.key); - * mySubject.filter((entry) => entry.key !== 1); + * const myState = new ArrayState(data, (x) => x.key); + * myState.filter((entry) => entry.key !== 1); * * Result: * [ @@ -75,48 +75,55 @@ export class ArrayState extends DeepState { } /** - * @method append - * @param {Partial} partialData - A object containing some of the data for this Subject. - * @returns ArrayState + * @method appendOne + * @param {T} entry - new data to be added in this Subject. + * @return {ArrayState} Reference to it self. * @description - Append some new data to this Subject. * @example Example append some data. * const data = [ * { key: 1, value: 'foo'}, * { key: 2, value: 'bar'} * ]; - * const mySubject = new ArrayState(data); - * mySubject.append({ key: 1, value: 'replaced-foo'}); + * const myState = new ArrayState(data); + * myState.append({ key: 1, value: 'replaced-foo'}); */ appendOne(entry: T) { - this.next(appendToFrozenArray(this.getValue(), entry, this._getUnique)) + const next = [...this.getValue()]; + if(this._getUnique) { + pushToUniqueArray(next, entry, this._getUnique); + } else { + next.push(entry); + } + this.next(next); return this; } /** * @method append * @param {T[]} entries - A array of new data to be added in this Subject. - * @returns ArrayState + * @return {ArrayState} Reference to it self. * @description - Append some new data to this Subject, if it compares to existing data it will replace it. * @example Example append some data. * const data = [ * { key: 1, value: 'foo'}, * { key: 2, value: 'bar'} * ]; - * const mySubject = new ArrayState(data); - * mySubject.append([ + * const myState = new ArrayState(data); + * myState.append([ * { key: 1, value: 'replaced-foo'}, * { key: 3, value: 'another-bla'} * ]); */ append(entries: T[]) { - // TODO: stop calling appendOne for each but make sure to handle this in one. - entries.forEach(x => this.appendOne(x)) - - /* - const unFrozenDataSet = [...this.getValue()]; - - this.next(unFrozenDataSet); - */ + if(this._getUnique) { + const next = [...this.getValue()]; + entries.forEach(entry => { + pushToUniqueArray(next, entry, this._getUnique!); + }); + this.next(next); + } else { + this.next([...this.getValue(), ...entries]); + } return this; } } diff --git a/src/Umbraco.Web.UI.Client/libs/observable-api/object-state.ts b/src/Umbraco.Web.UI.Client/libs/observable-api/object-state.ts index 5175616f20..e726a075bb 100644 --- a/src/Umbraco.Web.UI.Client/libs/observable-api/object-state.ts +++ b/src/Umbraco.Web.UI.Client/libs/observable-api/object-state.ts @@ -12,15 +12,17 @@ import { DeepState } from "./deep-state"; export class ObjectState extends DeepState { /** - * @method append - * @param {Partial} partialData - A object containing some of the data for this Subject. + * @method update + * @param {Partial} partialData - A object containing some of the data to update in this Subject. * @description - Append some new data to this Object. + * @return {ObjectState} Reference to it self. * @example Example append some data. * const data = {key: 'myKey', value: 'myInitialValue'}; - * const mySubject = new ObjectState(data) - * mySubject.append({value: 'myNewValue'}) + * const myState = new ObjectState(data); + * myState.update({value: 'myNewValue'}); */ update(partialData: Partial) { this.next({ ...this.getValue(), ...partialData }); + return this; } } diff --git a/src/Umbraco.Web.UI.Client/libs/store/store-base.ts b/src/Umbraco.Web.UI.Client/libs/store/store-base.ts index 97430508ce..0c640fe58e 100644 --- a/src/Umbraco.Web.UI.Client/libs/store/store-base.ts +++ b/src/Umbraco.Web.UI.Client/libs/store/store-base.ts @@ -1,11 +1,8 @@ -import { UmbContextProviderController } from "../context-api/provide/context-provider.controller"; -import { UmbControllerHostInterface } from "../controller/controller-host.mixin"; +import { UmbContextProviderController } from '@umbraco-cms/context-api'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; export class UmbStoreBase { - - - constructor (protected _host: UmbControllerHostInterface, public readonly storeAlias: string) { + constructor(protected _host: UmbControllerHostInterface, public readonly storeAlias: string) { new UmbContextProviderController(_host, storeAlias, this); } - } diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 3c8815594c..cb8786d6e5 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -34,8 +34,10 @@ "preview": "vite preview --open", "test": "web-test-runner --coverage", "test:watch": "web-test-runner --watch", - "test:e2e": "npx playwright test", - "lint": "eslint src libs e2e", + "auth:test:e2e": "npx playwright test --config apps/auth/", + "backoffice:test:e2e": "npx playwright test", + "test:e2e": "npm run auth:test:e2e && npm run backoffice:test:e2e", + "lint": "eslint src apps libs e2e", "lint:fix": "npm run lint -- --fix", "format": "prettier 'src/**/*.ts'", "format:fix": "npm run format -- --write", diff --git a/src/Umbraco.Web.UI.Client/public/login.jpeg b/src/Umbraco.Web.UI.Client/public/login.jpeg deleted file mode 100644 index 412cd17865c1b847affa4f0c2abc74645f678187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30678 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 diff --git a/src/Umbraco.Web.UI.Client/src/app.ts b/src/Umbraco.Web.UI.Client/src/app.ts index 386294ca18..1b27d767ff 100644 --- a/src/Umbraco.Web.UI.Client/src/app.ts +++ b/src/Umbraco.Web.UI.Client/src/app.ts @@ -1,5 +1,5 @@ import '@umbraco-ui/uui-css/dist/uui-css.css'; -import './core/css/custom-properties.css'; +import '@umbraco-cms/css'; // TODO: remove these imports when they are part of UUI import '@umbraco-ui/uui-color-swatch'; @@ -10,7 +10,6 @@ import '@umbraco-ui/uui-modal-dialog'; import '@umbraco-ui/uui-modal-sidebar'; import 'element-internals-polyfill'; import 'router-slot'; -import './auth'; import type { Guard, IRoute } from 'router-slot/model'; @@ -42,11 +41,7 @@ export class UmbApp extends UmbLitElement { private umbracoUrl?: string; @state() - private _routes: IRoute[] = [ - { - path: 'login', - component: () => import('./auth/login/login.element'), - }, + private _routes: IRoute[] = [ { path: 'install', component: () => import('./installer/installer.element'), diff --git a/src/Umbraco.Web.UI.Client/src/auth/auth-layout.element.ts b/src/Umbraco.Web.UI.Client/src/auth/auth-layout.element.ts deleted file mode 100644 index 068b36878b..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/auth-layout.element.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { css, CSSResultGroup, html, LitElement } from 'lit'; -import { customElement } from 'lit/decorators.js'; - -@customElement('umb-auth-layout') -export class UmbAuthLayout extends LitElement { - static styles: CSSResultGroup = [ - css` - #background { - position: fixed; - overflow: hidden; - background-position: 50%; - background-repeat: no-repeat; - background-size: cover; - background-image: url('login.jpeg'); - width: 100vw; - height: 100vh; - } - - #logo { - position: fixed; - top: var(--uui-size-space-5); - left: var(--uui-size-space-5); - height: 30px; - } - - #logo img { - height: 100%; - } - - #container { - position: relative; - display: flex; - align-items: center; - justify-content: center; - width: 100vw; - height: 100vh; - } - - #box { - width: 500px; - padding: var(--uui-size-space-6) var(--uui-size-space-5) var(--uui-size-space-5) var(--uui-size-space-5); - } - - #email, - #password { - width: 100%; - } - `, - ]; - - render() { - return html` -
- - - -
- - - -
- `; - } -} - -declare global { - interface HTMLElementTagNameMap { - 'umb-auth-layout': UmbAuthLayout; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/auth.ts b/src/Umbraco.Web.UI.Client/src/auth/auth.ts deleted file mode 100644 index f1965e558e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/auth.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default function() { - sessionStorage.setItem('is-authenticated', 'true'); - history.replaceState(null, '', 'section'); -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.element.ts b/src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.element.ts deleted file mode 100644 index 0f0eed532c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.element.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { UUITextStyles } from '@umbraco-ui/uui-css'; -import { css, html, nothing } from 'lit'; -import { customElement, state } from 'lit/decorators.js'; -import { UmbInputListBase } from '../../../backoffice/shared/components/input-list-base/input-list-base'; -import { - UmbUserGroupStore, - UMB_USER_GROUP_STORE_CONTEXT_TOKEN, -} from '../../../backoffice/users/user-groups/user-group.store'; -import type { UserGroupEntity } from '@umbraco-cms/models'; - -@customElement('umb-input-user-group') -export class UmbInputPickerUserGroupElement extends UmbInputListBase { - static styles = [ - UUITextStyles, - css` - :host { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - } - #user-group-list { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - } - .user-group { - display: flex; - align-items: center; - gap: var(--uui-size-space-2); - } - .user-group div { - display: flex; - align-items: center; - gap: var(--uui-size-4); - } - .user-group uui-button { - margin-left: auto; - } - `, - ]; - - @state() - private _userGroups: Array = []; - - private _userGroupStore?: UmbUserGroupStore; - - connectedCallback(): void { - super.connectedCallback(); - this.pickerLayout = 'umb-picker-layout-user-group'; - this.consumeContext(UMB_USER_GROUP_STORE_CONTEXT_TOKEN, (usersContext) => { - this._userGroupStore = usersContext; - this._observeUserGroups(); - }); - } - - private _observeUserGroups() { - if (this.value.length > 0 && this._userGroupStore) { - this.observe(this._userGroupStore.getByKeys(this.value), (userGroups) => (this._userGroups = userGroups)); - } else { - this._userGroups = []; - } - } - - selectionUpdated() { - this._observeUserGroups(); - this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true })); - } - - private _renderUserGroupList() { - if (this._userGroups.length === 0) return nothing; - - return html`
- ${this._userGroups.map( - (userGroup) => html` -
-
- - ${userGroup.name} -
- this.removeFromSelection(userGroup.key)} - label="remove" - color="danger"> -
- ` - )} -
`; - } - - renderContent() { - return html`${this._renderUserGroupList()}`; - } -} - -declare global { - interface HTMLElementTagNameMap { - 'umb-input-user-group': UmbInputPickerUserGroupElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.test.ts b/src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.test.ts deleted file mode 100644 index 20550a4780..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/components/input-user-group/input-user-group.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect, fixture, html } from '@open-wc/testing'; -//TODO: Test has been commented out while we figure out how to setup import maps for the test environment -// import { UmbPickerUserGroupElement } from './picker-user-group.element'; -// import { defaultA11yConfig } from '@umbraco-cms/test-utils'; - -// describe('UmbPickerLayoutUserGroupElement', () => { -// let element: UmbPickerUserGroupElement; -// beforeEach(async () => { -// element = await fixture(html``); -// }); - -// it('is defined with its own instance', () => { -// expect(element).to.be.instanceOf(UmbPickerUserGroupElement); -// }); - -// it('passes the a11y audit', async () => { -// await expect(element).shadowDom.to.be.accessible(defaultA11yConfig); -// }); -// }); diff --git a/src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.element.ts b/src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.element.ts deleted file mode 100644 index d1cde6e11c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.element.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { UUITextStyles } from '@umbraco-ui/uui-css'; -import { css, html, nothing, PropertyValueMap } from 'lit'; -import { customElement, state } from 'lit/decorators.js'; -import { UmbInputListBase } from '../../../backoffice/shared/components/input-list-base/input-list-base'; -import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from '../../../backoffice/users/users/user.store'; -import type { UserEntity } from '@umbraco-cms/models'; - -@customElement('umb-input-user') -export class UmbPickerUserElement extends UmbInputListBase { - static styles = [ - UUITextStyles, - css` - :host { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - } - #user-list { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - } - .user { - display: flex; - align-items: center; - gap: var(--uui-size-space-2); - } - .user uui-button { - margin-left: auto; - } - `, - ]; - - @state() - private _users: Array = []; - - private _userStore?: UmbUserStore; - - connectedCallback(): void { - super.connectedCallback(); - this.pickerLayout = 'umb-picker-layout-user'; - this.consumeContext(UMB_USER_STORE_CONTEXT_TOKEN, (userStore) => { - this._userStore = userStore; - this._observeUser(); - }); - } - - protected updated(_changedProperties: PropertyValueMap | Map): void { - super.updated(_changedProperties); - if (_changedProperties.has('value')) { - this._observeUser(); // TODO: This works, but it makes the value change twice. - } - } - - private _observeUser() { - if (!this._userStore) return; - - // TODO: Fix type mismatch: - this.observe>(this._userStore.getByKeys(this.value), (users) => { - this._users = users; - }); - } - - selectionUpdated() { - this._observeUser(); - this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true })); - } - - private _renderUserList() { - if (this._users.length === 0) return nothing; - - return html`
- ${this._users.map( - (user) => html` -
- -
${user.name}
- this.removeFromSelection(user.key)} label="remove" color="danger"> -
- ` - )} -
`; - } - - renderContent() { - return html`${this._renderUserList()}`; - } -} - -declare global { - interface HTMLElementTagNameMap { - 'umb-input-user': UmbPickerUserElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.test.ts b/src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.test.ts deleted file mode 100644 index 483a865475..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/components/input-user/input-user.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect, fixture, html } from '@open-wc/testing'; -//TODO: Test has been commented out while we figure out how to setup import maps for the test environment -// import { UmbPickerUserElement } from './picker-user.element'; -// import { defaultA11yConfig } from '@umbraco-cms/test-utils'; - -// describe('UmbPickerUserElement', () => { -// let element: UmbPickerUserElement; -// beforeEach(async () => { -// element = await fixture(html``); -// }); - -// it('is defined with its own instance', () => { -// expect(element).to.be.instanceOf(UmbPickerUserElement); -// }); - -// it('passes the a11y audit', async () => { -// await expect(element).shadowDom.to.be.accessible(defaultA11yConfig); -// }); -// }); diff --git a/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test.element.ts b/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test.element.ts deleted file mode 100644 index e9a3ccb26c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test.element.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { css, html } from 'lit'; -import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; -import { customElement } from 'lit/decorators.js'; -import { UmbLitElement } from '@umbraco-cms/element'; - -@customElement('umb-external-login-provider-test') -export class UmbExternalLoginProviderTestElement extends UmbLitElement { - static styles = [ - UUITextStyles, - css` - :host { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - padding: var(--uui-size-space-5); - border: 1px solid var(--uui-color-border); - background: var(--uui-color-surface-alt); - border-radius: var(--uui-border-radius); - } - p { - margin: 0; - } - `, - ]; - - render() { - return html` - Custom External Login Provider -

This is an example of a custom external login provider using the external login provider extension point

- - `; - } -} - -export default UmbExternalLoginProviderTestElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-external-login-provider-test': UmbExternalLoginProviderTestElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test2.element.ts b/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test2.element.ts deleted file mode 100644 index a9ed172f2b..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/external-login-provider-test2.element.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { css, html } from 'lit'; -import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; -import { customElement } from 'lit/decorators.js'; -import { UmbLitElement } from '@umbraco-cms/element'; - -@customElement('umb-external-login-provider-test2') -export class UmbExternalLoginProviderTest2Element extends UmbLitElement { - static styles = [ - UUITextStyles, - css` - :host { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - padding: var(--uui-size-space-5); - border: 1px solid var(--uui-color-border); - background: var(--uui-color-surface-alt); - border-radius: var(--uui-border-radius); - } - p { - margin: 0; - } - uui-input { - width: 100%; - } - `, - ]; - - render() { - return html` - Another Custom External Login Provider -

This is an example of another custom external login provider

- - Email - - - - `; - } -} - -export default UmbExternalLoginProviderTest2Element; - -declare global { - interface HTMLElementTagNameMap { - 'umb-external-login-provider-test2': UmbExternalLoginProviderTest2Element; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/manifests.ts b/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/manifests.ts deleted file mode 100644 index 2e780045be..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/external-login-providers/manifests.ts +++ /dev/null @@ -1,29 +0,0 @@ -// TODO: could these be renamed as login providers? -import type { ManifestExternalLoginProvider } from '@umbraco-cms/models'; - -export const manifests: Array = [ - { - type: 'externalLoginProvider', - alias: 'Umb.ExternalLoginProvider.Test', - name: 'Test External Login Provider', - elementName: 'umb-external-login-provider-test', - loader: () => import('./external-login-provider-test.element'), - weight: 2, - meta: { - label: 'Test External Login Provider', - pathname: 'test/test/test', - }, - }, - { - type: 'externalLoginProvider', - alias: 'Umb.ExternalLoginProvider.Test2', - name: 'Test External Login Provider 2', - elementName: 'umb-external-login-provider-test2', - loader: () => import('./external-login-provider-test2.element'), - weight: 1, - meta: { - label: 'Test External Login Provider 2', - pathname: 'test/test/test', - }, - }, -]; diff --git a/src/Umbraco.Web.UI.Client/src/auth/index.ts b/src/Umbraco.Web.UI.Client/src/auth/index.ts deleted file mode 100644 index 05973f455a..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { manifests as externalLoginProviders } from './external-login-providers/manifests'; - -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; - -const registerExtensions = (manifests: Array) => { - manifests.forEach((manifest) => { - if (umbExtensionsRegistry.isRegistered(manifest.alias)) return; - umbExtensionsRegistry.register(manifest); - }); -}; - -registerExtensions([ - ...externalLoginProviders, -]); diff --git a/src/Umbraco.Web.UI.Client/src/auth/login/login.element.ts b/src/Umbraco.Web.UI.Client/src/auth/login/login.element.ts deleted file mode 100644 index c2549c83c3..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/login/login.element.ts +++ /dev/null @@ -1,124 +0,0 @@ -import '../auth-layout.element'; - -import { UUITextStyles } from '@umbraco-ui/uui-css'; -import { css, CSSResultGroup, html, LitElement } from 'lit'; -import { customElement, state } from 'lit/decorators.js'; -import { ifDefined } from 'lit/directives/if-defined.js'; -import { query } from 'router-slot'; - -@customElement('umb-login') -export default class UmbLogin extends LitElement { - static styles: CSSResultGroup = [ - UUITextStyles, - css` - #email, - #password { - width: 100%; - } - `, - ]; - - @state() - private _loggingIn = false; - - private _handleSubmit = (e: SubmitEvent) => { - e.preventDefault(); - - const form = e.target as HTMLFormElement; - if (!form) return; - - const isValid = form.checkValidity(); - if (!isValid) return; - - const formData = new FormData(form); - - const username = formData.get('email') as string; - const password = formData.get('password') as string; - const persist = formData.has('persist'); - - this._login(username, password, persist); - }; - - private async _login(username: string, password: string, persist: boolean) { - // TODO: Move login to new login app - this._loggingIn = true; - - try { - this._loggingIn = false; - let { redirectTo } = query(); - if (!redirectTo) { - redirectTo = 'section'; - } - sessionStorage.setItem('is-authenticated', 'true'); - history.pushState(null, '', redirectTo); - } catch (error) { - console.log(error); - this._loggingIn = false; - } - } - - private _greetings: Array = [ - 'Happy super Sunday', - 'Happy marvelous Monday', - 'Happy tubular Tuesday', - 'Happy wonderful Wednesday', - 'Happy thunderous Thursday', - 'Happy funky Friday', - 'Happy Saturday', - ]; - - @state() - private _greeting: string = this._greetings[new Date().getDay()]; - - render() { - return html` - -
-

${this._greeting}

- -
- - Email - - - - - Password - - - - - Remember me - - - - -
-
-
-
- `; - } -} - -declare global { - interface HTMLElementTagNameMap { - 'umb-login': UmbLogin; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/auth/login/login.test.ts b/src/Umbraco.Web.UI.Client/src/auth/login/login.test.ts deleted file mode 100644 index d937ffba1e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/login/login.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect, fixture, html } from '@open-wc/testing'; -import UmbLogin from './login.element'; -import { defaultA11yConfig } from '@umbraco-cms/test-utils'; - -describe('UmbLogin', () => { - let element: UmbLogin; - - beforeEach(async () => { - element = await fixture(html``); - }); - - it('is defined with its own instance', () => { - expect(element).to.be.instanceOf(UmbLogin); - }); - - it('passes the a11y audit', async () => { - await expect(element).to.be.accessible(defaultA11yConfig); - }); -}); diff --git a/src/Umbraco.Web.UI.Client/src/auth/utils.test.ts b/src/Umbraco.Web.UI.Client/src/auth/utils.test.ts deleted file mode 100644 index 8639f81945..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/utils.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { expect } from '@open-wc/testing'; -import type { UserStatus } from '@umbraco-cms/models'; -import { InterfaceColor, InterfaceLook } from '@umbraco-ui/uui-base/lib/types'; - -import { getTagLookAndColor } from './utils'; - -describe('UmbUserExtensions', () => { - it('returns correct look and color from a status string', () => { - const testCases: { status: UserStatus; look: InterfaceLook; color: InterfaceColor }[] = [ - { status: 'enabled', look: 'primary', color: 'positive' }, - { status: 'inactive', look: 'primary', color: 'warning' }, - { status: 'invited', look: 'primary', color: 'warning' }, - { status: 'disabled', look: 'primary', color: 'danger' }, - ]; - - testCases.forEach((testCase) => { - const { look, color } = getTagLookAndColor(testCase.status); - expect(look).to.equal(testCase.look); - expect(color).to.equal(testCase.color); - }); - }); -}); diff --git a/src/Umbraco.Web.UI.Client/src/auth/utils.ts b/src/Umbraco.Web.UI.Client/src/auth/utils.ts deleted file mode 100644 index c798404481..0000000000 --- a/src/Umbraco.Web.UI.Client/src/auth/utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { UserStatus } from '@umbraco-cms/models'; -import { InterfaceColor, InterfaceLook } from '@umbraco-ui/uui-base/lib/types'; - -export const getTagLookAndColor = (status: UserStatus): { look: InterfaceLook; color: InterfaceColor } => { - switch ((status || '').toLowerCase()) { - case 'invited': - case 'inactive': - return { look: 'primary', color: 'warning' }; - case 'enabled': - return { look: 'primary', color: 'positive' }; - case 'disabled': - return { look: 'primary', color: 'danger' }; - default: - return { look: 'secondary', color: 'default' }; - } -}; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts index b76b29f580..3f89ad1f4b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.context.ts @@ -46,9 +46,9 @@ export class UmbWorkspaceDocumentContext extends UmbWorkspaceContentContext x.alias); + const newDataSet = appendToFrozenArray(this._data.getValue().data, entry, x => x.alias); - this.update({data: newDataSet}); + this._data.update({data: newDataSet}); } /* diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts index 7ae0c80300..4c63eb521f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts @@ -1,11 +1,11 @@ - import { manifests as dashboardManifests } from './dashboards/manifests'; import { manifests as contentSectionManifests } from './section.manifests'; import { manifests as documentBlueprintManifests } from './document-blueprints/manifests'; import { manifests as documentTypeManifests } from './document-types/manifests'; import { manifests as documentManifests } from './documents/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/index.ts index ee31b89a7e..2ee56ad17b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/index.ts @@ -2,7 +2,8 @@ import { manifests as mediaSectionManifests } from './section.manifests'; import { manifests as mediaManifests } from './media/manifests'; import { manifests as mediaTypesManifests } from './media-types/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/index.ts index 2117c43085..4ffc37485b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/index.ts @@ -2,7 +2,9 @@ import { manifests as memberSectionManifests } from './section.manifests'; import { manifests as memberGroupManifests } from './member-groups/manifests'; import { manifests as memberTypeManifests } from './member-types/manifests'; import { manifests as memberManifests } from './members/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; + +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/index.ts index 2dbd35d36e..7a1e274f75 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/index.ts @@ -2,7 +2,8 @@ import { manifests as packageBuilderManifests } from './package-builder/manifest import { manifests as packageRepoManifests } from './package-repo/manifests'; import { manifests as packageSectionManifests } from './package-section/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts index 77cb8cb4d3..04925967b7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts @@ -3,7 +3,7 @@ import { customElement, state } from 'lit/decorators.js'; import { IRoute, IRoutingInfo } from 'router-slot'; import type { ManifestWorkspace } from '@umbraco-cms/models'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; @customElement('umb-created-packages-section-view') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/installed-packages-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/installed-packages-section-view.element.ts index e0f485e060..d5e7bfd180 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/installed-packages-section-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/installed-packages-section-view.element.ts @@ -3,7 +3,7 @@ import { customElement, state } from 'lit/decorators.js'; import { IRoute, IRoutingInfo } from 'router-slot'; import type { ManifestWorkspace } from '@umbraco-cms/models'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; @customElement('umb-installed-packages-section-view') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/packages-installed-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/packages-installed-item.element.ts index 445c521893..0e80b2b45f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/packages-installed-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/installed/packages-installed-item.element.ts @@ -5,7 +5,7 @@ import { firstValueFrom, map } from 'rxjs'; import { UmbModalService, UMB_MODAL_SERVICE_CONTEXT_TOKEN } from '../../../../../core/modal'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import type { ManifestPackageView } from '@umbraco-cms/models'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/search/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/index.ts index ee0be23f76..01360ce456 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/search/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/search/index.ts @@ -1,6 +1,7 @@ import { manifests as searchManifests } from '../search/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/views/edit/data-type-workspace-view-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/views/edit/data-type-workspace-view-edit.element.ts index 3ad679fa59..15555d9fee 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/views/edit/data-type-workspace-view-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/views/edit/data-type-workspace-view-edit.element.ts @@ -5,7 +5,7 @@ import { UmbModalService, UMB_MODAL_SERVICE_CONTEXT_TOKEN } from '../../../../.. import { UmbWorkspaceDataTypeContext } from '../../data-type-workspace.context'; import { UmbLitElement } from '@umbraco-cms/element'; import type { DataTypeDetails } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import '../../../../../shared/property-editors/shared/property-editor-config/property-editor-config.element'; import '../../../../../shared/components/ref-property-editor-ui/ref-property-editor-ui.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/extensions/workspace/extension-root-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/extensions/workspace/extension-root-workspace.element.ts index 557c5f01e3..4fa338ebae 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/extensions/workspace/extension-root-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/extensions/workspace/extension-root-workspace.element.ts @@ -1,7 +1,7 @@ import { html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { isManifestElementNameType } from '@umbraco-cms/extensions-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import type { ManifestBase } from '@umbraco-cms/models'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts index 7c60e09fb9..de60d18c58 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts @@ -5,7 +5,8 @@ import { manifests as extensionManifests } from './extensions/manifests'; import { manifests as languageManifests } from './languages/manifests'; import { manifests as logviewerManifests } from './logviewer/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { @@ -20,5 +21,5 @@ registerExtensions([ ...dataTypeManifests, ...extensionManifests, ...languageManifests, - ...logviewerManifests + ...logviewerManifests, ]); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection-toolbar.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection-toolbar.element.ts index fedfed7109..a3e6fcaa28 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection-toolbar.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection-toolbar.element.ts @@ -5,7 +5,7 @@ import { map } from 'rxjs'; import { TooltipMenuItem } from '../components/tooltip-menu'; import '../components/tooltip-menu/tooltip-menu.element'; import type { ManifestCollectionView } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; @customElement('umb-collection-toolbar') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts index 2a75c95f73..54d24df995 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts @@ -7,7 +7,7 @@ import './collection-toolbar.element'; import { UmbCollectionContext, UMB_COLLECTION_CONTEXT_TOKEN } from './collection.context'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; import type { ManifestCollectionView, MediaDetails } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; import type { UmbObserverController } from '@umbraco-cms/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice.context.ts index 818ab52d68..f6a6ce4c24 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice.context.ts @@ -1,10 +1,8 @@ -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbContextToken } from '@umbraco-cms/context-api'; import { StringState } from '@umbraco-cms/observable-api'; export class UmbBackofficeContext { - - #activeSectionAlias = new StringState(undefined); public readonly activeSectionAlias = this.#activeSectionAlias.asObservable(); @@ -17,12 +15,9 @@ export class UmbBackofficeContext { return umbExtensionsRegistry.extensionsOfType('section'); } - public setActiveSectionAlias(alias: string) { this.#activeSectionAlias.next(alias); } - } - export const UMB_BACKOFFICE_CONTEXT_TOKEN = new UmbContextToken('UmbBackofficeContext'); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.element.ts index 04f4385abc..1f343618c7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.element.ts @@ -3,7 +3,7 @@ import type { TemplateResult } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { map } from 'rxjs'; import { repeat } from 'lit/directives/repeat.js'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { createExtensionElement, isManifestElementableType } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.test.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.test.ts index d29223e7e2..6fac7fe693 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.test.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/extension-slot/extension-slot.test.ts @@ -1,29 +1,23 @@ -import { expect, fixture, html } from '@open-wc/testing'; -import { ManifestDashboard, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; -import { defaultA11yConfig } from '@umbraco-cms/test-utils'; import { customElement } from 'lit/decorators.js'; +import { expect, fixture, html } from '@open-wc/testing'; import { InitializedExtension, UmbExtensionSlotElement } from './extension-slot.element'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestDashboard } from '@umbraco-cms/extensions-registry'; +import { defaultA11yConfig } from '@umbraco-cms/test-utils'; @customElement('test-extension-slot-manifest-element') -class MyExtensionSlotManifestElement extends HTMLElement { - -} +class MyExtensionSlotManifestElement extends HTMLElement {} function sleep(ms: number) { - return new Promise(resolve => setTimeout(resolve, ms)); + return new Promise((resolve) => setTimeout(resolve, ms)); } describe('UmbExtensionSlotElement', () => { - - - let element: UmbExtensionSlotElement; + let element: UmbExtensionSlotElement; describe('general', () => { - beforeEach(async () => { - element = await fixture( - html`` - ); + element = await fixture(html``); }); it('is defined with its own instance', () => { @@ -49,12 +43,8 @@ describe('UmbExtensionSlotElement', () => { }); }); - - describe('rendering', () => { - beforeEach(async () => { - umbExtensionsRegistry.register({ type: 'dashboard', alias: 'unit-test-ext-slot-element-manifest', @@ -62,10 +52,9 @@ describe('UmbExtensionSlotElement', () => { elementName: 'test-extension-slot-manifest-element', meta: { sections: ['test'], - pathname: 'test/test' - } + pathname: 'test/test', + }, }); - }); afterEach(async () => { @@ -73,32 +62,30 @@ describe('UmbExtensionSlotElement', () => { }); it('renders a manifest element', async () => { - element = await fixture( - html` x.alias === 'unit-test-ext-slot-element-manifest'}>` + html` x.alias === 'unit-test-ext-slot-element-manifest'}>` ); - await sleep(0); + await sleep(0); expect(element.shadowRoot!.firstElementChild).to.be.instanceOf(MyExtensionSlotManifestElement); }); it('use the render method', async () => { - element = await fixture( - html` - x.alias === 'unit-test-ext-slot-element-manifest'} - .renderMethod=${(manifest: InitializedExtension) => html`${manifest.component}`}> - ` + html` x.alias === 'unit-test-ext-slot-element-manifest'} + .renderMethod=${(manifest: InitializedExtension) => html`${manifest.component}`}> + ` ); - await sleep(0); + await sleep(0); expect(element.shadowRoot!.firstElementChild?.nodeName).to.be.equal('BLA'); expect(element.shadowRoot!.firstElementChild?.firstElementChild).to.be.instanceOf(MyExtensionSlotManifestElement); }); }); - }); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-section/input-section.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-section/input-section.element.ts index 8d26ad21e2..70192a1689 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-section/input-section.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-section/input-section.element.ts @@ -3,7 +3,7 @@ import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbInputListBase } from '../input-list-base/input-list-base'; import type { ManifestSection } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; @customElement('umb-input-section') export class UmbInputPickerSectionElement extends UmbInputListBase { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-dashboards/section-dashboards.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-dashboards/section-dashboards.element.ts index 013f082bd8..7660f44778 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-dashboards/section-dashboards.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-dashboards/section-dashboards.element.ts @@ -5,12 +5,8 @@ import { IRoutingInfo } from 'router-slot'; import { first, map } from 'rxjs'; import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section.context'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; -import type { - ManifestDashboard, - ManifestDashboardCollection, - ManifestWithMeta, -} from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import type { ManifestDashboard, ManifestDashboardCollection, ManifestWithMeta } from '@umbraco-cms/models'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; @customElement('umb-section-dashboards') @@ -22,7 +18,6 @@ export class UmbSectionDashboardsElement extends UmbLitElement { display: flex; flex-direction: column; height: 100%; - width: 100%; } #tabs { @@ -32,15 +27,12 @@ export class UmbSectionDashboardsElement extends UmbLitElement { #scroll-container { flex: 1; - height: 100%; - padding: var(--uui-size-space-6) var(--uui-size-space-5); } #router-slot { - width: 100%; box-sizing: border-box; display: block; - padding:var(--uui-size-5); + padding: var(--uui-size-5); } `, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts index cca976d6a2..fe8129400f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts @@ -4,7 +4,7 @@ import { customElement, state } from 'lit/decorators.js'; import { map, of } from 'rxjs'; import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section.context'; import type { ManifestSectionView } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; import { UmbObserverController } from '@umbraco-cms/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts index 4349c462a6..c60b1e147d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts @@ -7,7 +7,7 @@ import type { UmbWorkspaceEntityElement } from '../workspace/workspace-entity-el import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from './section.context'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; import type { ManifestSectionView, ManifestWorkspace, ManifestSidebarMenuItem } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; import './section-sidebar-menu/section-sidebar-menu.element.ts'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/context-menu/tree-context-menu-page-action-list.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/context-menu/tree-context-menu-page-action-list.element.ts index 8fa31cac09..b3c6a9ba7c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/context-menu/tree-context-menu-page-action-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/context-menu/tree-context-menu-page-action-list.element.ts @@ -3,8 +3,8 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import { map } from 'rxjs'; import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../../section/section.context'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import type { Entity, ManifestTreeItemAction } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; import { UmbLitElement } from '@umbraco-cms/element'; @customElement('umb-tree-context-menu-page-action-list') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.element.ts index 3b638b09bb..6ee43fcd8d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.element.ts @@ -13,7 +13,7 @@ import { import type { Entity } from '@umbraco-cms/models'; import type { UmbTreeStore } from '@umbraco-cms/store'; import { UmbLitElement } from '@umbraco-cms/element'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; @customElement('umb-tree-item') export class UmbTreeItem extends UmbLitElement { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.element.ts index 4e20274084..ecb978bd32 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.element.ts @@ -4,7 +4,7 @@ import { map } from 'rxjs'; import { repeat } from 'lit-html/directives/repeat.js'; import { UmbTreeContextBase } from './tree.context'; import type { Entity, ManifestTree } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbTreeStore } from '@umbraco-cms/store'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts index 8a8945effb..f1059664b9 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace-property/workspace-property.element.ts @@ -4,7 +4,7 @@ import { customElement, property, state } from 'lit/decorators.js'; import { ifDefined } from 'lit-html/directives/if-defined.js'; import { UmbWorkspacePropertyContext } from './workspace-property.context'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import type { DataTypePropertyData, ManifestPropertyEditorUI, ManifestTypes } from '@umbraco-cms/models'; import '../../property-actions/shared/property-action-menu/property-action-menu.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-content/workspace-content.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-content/workspace-content.context.ts index 76852a829f..b55c24255e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-content/workspace-content.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-content/workspace-content.context.ts @@ -2,7 +2,7 @@ import { v4 as uuidv4 } from 'uuid'; import { UmbNotificationService, UMB_NOTIFICATION_SERVICE_CONTEXT_TOKEN, UmbNotificationDefaultData } from '@umbraco-cms/notification'; import { UmbControllerHostInterface } from '@umbraco-cms/controller'; import { UmbContextConsumerController, UmbContextProviderController } from '@umbraco-cms/context-api'; -import { DeepState, UmbObserverController, createObservablePart } from '@umbraco-cms/observable-api'; +import { ObjectState, UmbObserverController, createObservablePart } from '@umbraco-cms/observable-api'; import { UmbContentStore } from '@umbraco-cms/store'; import type { ContentTreeItem } from '@umbraco-cms/backend-api'; @@ -33,7 +33,7 @@ export abstract class UmbWorkspaceContentContext< constructor(host: UmbControllerHostInterface, defaultData: ContentTypeType, storeAlias: string, entityType: string) { this._host = host; - this._data = new DeepState(defaultData); + this._data = new ObjectState(defaultData); this.data = this._data.asObservable(); this.name = createObservablePart(this._data, (data) => data.name); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts index 72917fb40d..2f2bce50dc 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts @@ -5,8 +5,12 @@ import { IRoutingInfo, RouterSlot } from 'router-slot'; import { map } from 'rxjs'; import { createExtensionElement } from '@umbraco-cms/extensions-api'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; -import type { ManifestWorkspaceAction, ManifestWorkspaceView, ManifestWorkspaceViewCollection } from '@umbraco-cms/models'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import type { + ManifestWorkspaceAction, + ManifestWorkspaceView, + ManifestWorkspaceViewCollection, +} from '@umbraco-cms/models'; import '../../body-layout/body-layout.element'; import '../../extension-slot/extension-slot.element'; @@ -46,7 +50,7 @@ export class UmbWorkspaceLayout extends UmbLitElement { } router-slot { height: 100%; - flex:0; + flex: 0; } umb-extension-slot[slot='actions'] { @@ -93,11 +97,7 @@ export class UmbWorkspaceLayout extends UmbLitElement { this.observe( umbExtensionsRegistry .extensionsOfTypes(['workspaceView', 'workspaceViewCollection']) - .pipe( - map((extensions) => - extensions.filter((extension) => (extension).meta.workspaces.includes(this.alias)) - ) - ), + .pipe(map((extensions) => extensions.filter((extension) => extension.meta.workspaces.includes(this.alias)))), (workspaceViews) => { this._workspaceViews = workspaceViews; this._createRoutes(); @@ -106,11 +106,9 @@ export class UmbWorkspaceLayout extends UmbLitElement { } private async _createRoutes() { - this._routes = []; if (this._workspaceViews.length > 0) { - this._routes = this._workspaceViews.map((view) => { return { path: `view/${view.meta.pathname}`, @@ -188,7 +186,8 @@ export class UmbWorkspaceLayout extends UmbLitElement { extension.meta.workspaces.includes(this.alias)}> + .filter=${(extension: ManifestWorkspaceAction) => + extension.meta.workspaces.includes(this.alias)}> `; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/index.ts index ac5b04cbdd..a714adc802 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/index.ts @@ -6,7 +6,8 @@ import { manifests as propertyEditorUIManifests } from './property-editors/uis/m import { manifests as collectionBulkActionManifests } from './collection/bulk-actions/manifests'; import { manifests as collectionViewManifests } from './collection/views/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-actions/shared/property-action-menu/property-action-menu.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-actions/shared/property-action-menu/property-action-menu.element.ts index 6898826005..8988fad47c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-actions/shared/property-action-menu/property-action-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-actions/shared/property-action-menu/property-action-menu.element.ts @@ -4,7 +4,7 @@ import { map } from 'rxjs'; import { UUITextStyles } from '@umbraco-ui/uui'; import { UmbPropertyActionMenuContext } from './property-action-menu.context'; import type { ManifestPropertyAction } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import '../property-action/property-action.element'; import { UmbLitElement } from '@umbraco-cms/element'; @@ -41,8 +41,6 @@ export class UmbPropertyActionMenuElement extends UmbLitElement { `, ]; - - // TODO: we need to investigate context api vs values props and events @property() public value?: string; @@ -78,16 +76,11 @@ export class UmbPropertyActionMenuElement extends UmbLitElement { private _observeActions(alias: string) { this._actionsObserver?.destroy(); this._actionsObserver = this.observe( - umbExtensionsRegistry - .extensionsOfType('propertyAction') - .pipe( - map((propertyActions) => { - return propertyActions.filter((propertyAction) => - propertyAction.meta.propertyEditors.includes(alias) - ) - } - ) - ), + umbExtensionsRegistry.extensionsOfType('propertyAction').pipe( + map((propertyActions) => { + return propertyActions.filter((propertyAction) => propertyAction.meta.propertyEditors.includes(alias)); + }) + ), (manifests) => { this._actions = manifests; } @@ -104,28 +97,28 @@ export class UmbPropertyActionMenuElement extends UmbLitElement { } render() { - return (this._actions.length > 0) ? - html` - - - - + return this._actions.length > 0 + ? html` + + + + - - - ` + + + ` : ''; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/shared/property-editor-config/property-editor-config.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/shared/property-editor-config/property-editor-config.element.ts index 216e33b789..90894acd9d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/shared/property-editor-config/property-editor-config.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/shared/property-editor-config/property-editor-config.element.ts @@ -3,7 +3,7 @@ import { customElement, property, state } from 'lit/decorators.js'; import { ifDefined } from 'lit-html/directives/if-defined.js'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import type { PropertyEditorConfigDefaultData, PropertyEditorConfigProperty } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import '../../../components/workspace-property/workspace-property.element'; import { UmbLitElement } from '@umbraco-cms/element'; @@ -58,24 +58,30 @@ export class UmbPropertyEditorConfigElement extends UmbLitElement { private _observePropertyEditorUIConfig() { if (!this._propertyEditorUIAlias) return; - this.observe(umbExtensionsRegistry.getByTypeAndAlias('propertyEditorUI', this.propertyEditorUIAlias), (manifest) => { - this._observePropertyEditorModelConfig(manifest?.meta.propertyEditorModel); - this._propertyEditorUIConfigProperties = manifest?.meta.config?.properties || []; - this._propertyEditorUIConfigDefaultData = manifest?.meta.config?.defaultData || []; - this._mergeConfigProperties(); - this._mergeConfigDefaultData(); - }); + this.observe( + umbExtensionsRegistry.getByTypeAndAlias('propertyEditorUI', this.propertyEditorUIAlias), + (manifest) => { + this._observePropertyEditorModelConfig(manifest?.meta.propertyEditorModel); + this._propertyEditorUIConfigProperties = manifest?.meta.config?.properties || []; + this._propertyEditorUIConfigDefaultData = manifest?.meta.config?.defaultData || []; + this._mergeConfigProperties(); + this._mergeConfigDefaultData(); + } + ); } private _observePropertyEditorModelConfig(propertyEditorModelAlias?: string) { if (!propertyEditorModelAlias) return; - this.observe(umbExtensionsRegistry.getByTypeAndAlias('propertyEditorModel', propertyEditorModelAlias), (manifest) => { - this._propertyEditorModelConfigProperties = manifest?.meta.config?.properties || []; - this._propertyEditorModelConfigDefaultData = manifest?.meta.config?.defaultData || []; - this._mergeConfigProperties(); - this._mergeConfigDefaultData(); - }); + this.observe( + umbExtensionsRegistry.getByTypeAndAlias('propertyEditorModel', propertyEditorModelAlias), + (manifest) => { + this._propertyEditorModelConfigProperties = manifest?.meta.config?.properties || []; + this._propertyEditorModelConfigDefaultData = manifest?.meta.config?.defaultData || []; + this._mergeConfigProperties(); + this._mergeConfigDefaultData(); + } + ); } private _mergeConfigProperties() { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/index.ts index f24674cbe7..669dd79c55 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/index.ts @@ -1,7 +1,7 @@ import { manifests as translationSectionManifests } from './section.manifest'; import { manifests as dictionaryManifests } from './dictionary/manifests'; import type { ManifestTypes } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts index b8fb838d74..e799a8eff7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts @@ -2,7 +2,9 @@ import { manifests as userGroupManifests } from './user-groups/manifests'; import { manifests as userManifests } from './users/manifests'; import { manifests as userSectionManifests } from './user-section/manifests'; import { manifests as currentUserManifests } from './current-user/manifests'; -import { ManifestTypes, umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; + +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; +import { ManifestTypes } from '@umbraco-cms/extensions-registry'; const registerExtensions = (manifests: Array) => { manifests.forEach((manifest) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts index 0d3633cc10..12af723b84 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts @@ -4,15 +4,15 @@ import { css, html, nothing } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import { distinctUntilChanged } from 'rxjs'; +import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from '../../../users/users/user.store'; +import { UmbWorkspaceEntityElement } from '../../../shared/components/workspace/workspace-entity-element.interface'; import { UmbWorkspaceUserGroupContext } from './user-group-workspace.context'; import type { ManifestWorkspaceAction, UserGroupDetails } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; -import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from 'src/backoffice/users/users/user.store'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; -import '../../../../auth/components/input-user/input-user.element'; -import '../../../../backoffice/shared/components/input-section/input-section.element'; +import '../../../shared/components/input-user/input-user.element'; +import '../../../shared/components/input-section/input-section.element'; import { UmbLitElement } from '@umbraco-cms/element'; -import { UmbWorkspaceEntityElement } from 'src/backoffice/shared/components/workspace/workspace-entity-element.interface'; @customElement('umb-user-group-workspace') export class UmbUserGroupWorkspaceElement extends UmbLitElement implements UmbWorkspaceEntityElement { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/section-users.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/section-users.element.ts index d3e84c8521..a96c131930 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/section-users.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/section-users.element.ts @@ -1,6 +1,6 @@ import { html, LitElement } from 'lit'; import { customElement } from 'lit/decorators.js'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import type { ManifestSectionView } from '@umbraco-cms/models'; @customElement('umb-users-section') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/user-groups/user-group-table-sections-column-layout.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/user-groups/user-group-table-sections-column-layout.element.ts index 905a72a6aa..d63199aba5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/user-groups/user-group-table-sections-column-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/user-groups/user-group-table-sections-column-layout.element.ts @@ -1,6 +1,6 @@ import { html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbTableItem } from 'src/backoffice/shared/components/table'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/grid/workspace-view-users-grid.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/grid/workspace-view-users-grid.element.ts index 45f52c2d8b..a7c3b4115c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/grid/workspace-view-users-grid.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/grid/workspace-view-users-grid.element.ts @@ -4,8 +4,8 @@ import { customElement, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import { ifDefined } from 'lit-html/directives/if-defined.js'; import type { UmbSectionViewUsersElement } from '../../section-view-users.element'; -import { getTagLookAndColor } from '../../../../../../../auth/utils'; import { UmbUserGroupStore, UMB_USER_GROUP_STORE_CONTEXT_TOKEN } from '../../../../../user-groups/user-group.store'; +import { getTagLookAndColor } from '@umbraco-cms/utils'; import type { UserDetails, UserEntity, UserGroupEntity } from '@umbraco-cms/models'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/table/column-layouts/status/user-table-status-column-layout.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/table/column-layouts/status/user-table-status-column-layout.element.ts index 2b8ce26d92..385f5b6de8 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/table/column-layouts/status/user-table-status-column-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/list-view-layouts/table/column-layouts/status/user-table-status-column-layout.element.ts @@ -1,6 +1,6 @@ import { html, LitElement, nothing } from 'lit'; import { customElement, property } from 'lit/decorators.js'; -import { getTagLookAndColor } from '../../../../../../../../../auth/utils'; +import { getTagLookAndColor } from '@umbraco-cms/utils'; @customElement('umb-user-table-status-column-layout') export class UmbUserTableStatusColumnLayoutElement extends LitElement { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts index bcd4f3f8ad..1aaff75e64 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts @@ -2,7 +2,7 @@ import { css, html } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import type { IRoute, IRoutingInfo } from 'router-slot'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import './list-view-layouts/table/workspace-view-users-table.element'; import './list-view-layouts/grid/workspace-view-users-grid.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-create.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-create.element.ts index 6d8dbc9544..f7bf81b98b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-create.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-create.element.ts @@ -2,15 +2,15 @@ import { css, html, nothing } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, query, state } from 'lit/decorators.js'; import { UUIInputPasswordElement } from '@umbraco-ui/uui'; -import { UmbInputPickerUserGroupElement } from 'src/auth/components/input-user-group/input-user-group.element'; +import { UmbInputPickerUserGroupElement } from '../../../../shared/components/input-user-group/input-user-group.element'; +import { UmbModalLayoutElement } from '../../../../../core/modal'; +import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from '../../../users/user.store'; import type { UserDetails } from '@umbraco-cms/models'; import { UmbNotificationDefaultData, UmbNotificationService, UMB_NOTIFICATION_SERVICE_CONTEXT_TOKEN, } from '@umbraco-cms/notification'; -import { UmbModalLayoutElement } from 'src/core/modal'; -import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from 'src/backoffice/users/users/user.store'; export type UsersViewType = 'list' | 'grid'; @customElement('umb-workspace-view-users-create') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-invite.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-invite.element.ts index 4a7ac4465b..6a5e16aca7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-invite.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-invite.element.ts @@ -1,10 +1,10 @@ import { css, html, nothing } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, query, state } from 'lit/decorators.js'; -import { UmbInputPickerUserGroupElement } from 'src/auth/components/input-user-group/input-user-group.element'; +import { UmbInputPickerUserGroupElement } from '../../../../shared/components/input-user-group/input-user-group.element'; +import { UmbModalLayoutElement } from '../../../../../core/modal'; +import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from '../../../users/user.store'; import type { UserDetails } from '@umbraco-cms/models'; -import { UmbModalLayoutElement } from 'src/core/modal'; -import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from 'src/backoffice/users/users/user.store'; export type UsersViewType = 'list' | 'grid'; @customElement('umb-workspace-view-users-invite') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts index f74cfba113..cb7f0f9d33 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts @@ -6,15 +6,15 @@ import { ifDefined } from 'lit/directives/if-defined.js'; import { repeat } from 'lit/directives/repeat.js'; import { distinctUntilChanged } from 'rxjs'; -import { getTagLookAndColor } from '../../../../auth/utils'; import { UmbCurrentUserStore, UMB_CURRENT_USER_STORE_CONTEXT_TOKEN } from '../../current-user/current-user.store'; import type { UmbModalService } from '../../../../core/modal'; import type { UmbWorkspaceEntityElement } from '../../../shared/components/workspace/workspace-entity-element.interface'; import { UmbWorkspaceUserContext } from './user-workspace.context'; +import { getTagLookAndColor } from '@umbraco-cms/utils'; import type { UserDetails } from '@umbraco-cms/models'; -import '../../../../auth/components/input-user-group/input-user-group.element'; +import '../../../shared/components/input-user-group/input-user-group.element'; import '../../../shared/property-editors/uis/document-picker/property-editor-ui-document-picker.element'; import '../../../shared/components/workspace/workspace-layout/workspace-layout.element'; import { UmbLitElement } from '@umbraco-cms/element'; diff --git a/src/Umbraco.Web.UI.Client/src/core/css/custom-properties.css b/src/Umbraco.Web.UI.Client/src/core/css/custom-properties.css deleted file mode 100644 index 4f728ed1fd..0000000000 --- a/src/Umbraco.Web.UI.Client/src/core/css/custom-properties.css +++ /dev/null @@ -1,3 +0,0 @@ -:root { - --uui-color-positive: #1c874c; -} diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/picker-section/picker-layout-section.element.ts b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/picker-section/picker-layout-section.element.ts index 303bec8507..6b2db6d328 100644 --- a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/picker-section/picker-layout-section.element.ts +++ b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/picker-section/picker-layout-section.element.ts @@ -2,7 +2,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbModalLayoutPickerBase } from '../modal-layout-picker-base'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import type { ManifestSection } from '@umbraco-cms/models'; @customElement('umb-picker-layout-section') diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/property-editor-ui-picker/modal-layout-property-editor-ui-picker.element.ts b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/property-editor-ui-picker/modal-layout-property-editor-ui-picker.element.ts index fc1a76799d..c5004b4497 100644 --- a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/property-editor-ui-picker/modal-layout-property-editor-ui-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/property-editor-ui-picker/modal-layout-property-editor-ui-picker.element.ts @@ -6,7 +6,7 @@ import { groupBy } from 'lodash-es'; import type { UUIInputEvent } from '@umbraco-ui/uui'; import type { UmbModalHandler } from '../../modal-handler'; import type { ManifestPropertyEditorUI } from '@umbraco-cms/models'; -import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry'; +import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api'; import { UmbLitElement } from '@umbraco-cms/element'; export interface UmbModalPropertyEditorUIPickerData { diff --git a/src/Umbraco.Web.UI.Client/src/core/test-utils/chai.ts b/src/Umbraco.Web.UI.Client/src/core/test-utils/chai.ts deleted file mode 100644 index fc83ba86e8..0000000000 --- a/src/Umbraco.Web.UI.Client/src/core/test-utils/chai.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const defaultA11yConfig = { - ignoredRules: [], -}; diff --git a/src/Umbraco.Web.UI.Client/src/core/test-utils/index.ts b/src/Umbraco.Web.UI.Client/src/core/test-utils/index.ts deleted file mode 100644 index 0d2296cc1c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/core/test-utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './chai'; diff --git a/src/Umbraco.Web.UI.Client/src/core/utils/baseUrl.ts b/src/Umbraco.Web.UI.Client/src/core/utils/baseUrl.ts deleted file mode 100644 index f1c058923d..0000000000 --- a/src/Umbraco.Web.UI.Client/src/core/utils/baseUrl.ts +++ /dev/null @@ -1,10 +0,0 @@ -export function baseUrl(): string { - if (typeof document !== 'undefined') { - const baseElems = document.getElementsByTagName('base'); - if (baseElems.length && baseElems[0].hasAttribute('href')) { - return baseElems[0].href.slice(0, -1); - } - } - - return ''; -} diff --git a/src/Umbraco.Web.UI.Client/src/core/utils/index.ts b/src/Umbraco.Web.UI.Client/src/core/utils/index.ts deleted file mode 100644 index 1224e0ec12..0000000000 --- a/src/Umbraco.Web.UI.Client/src/core/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './baseUrl'; -export * from './umbraco-path'; diff --git a/src/Umbraco.Web.UI.Client/src/core/utils/umbraco-path.ts b/src/Umbraco.Web.UI.Client/src/core/utils/umbraco-path.ts deleted file mode 100644 index 5e0043d3b2..0000000000 --- a/src/Umbraco.Web.UI.Client/src/core/utils/umbraco-path.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Path } from 'msw'; -export function umbracoPath(path: string): Path { - return `/umbraco/management/api/v1${path}`; -} diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index e82a3ad7e7..3a3e9d3560 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -20,6 +20,8 @@ "resolveJsonModule": true, "baseUrl": ".", "paths": { + "@umbraco-cms/css": ["libs/css/custom-properties.css"], + "@umbraco-cms/modal": ["src/core/modal"], "@umbraco-cms/models": ["libs/models"], "@umbraco-cms/backend-api": ["libs/backend-api"], "@umbraco-cms/context-api": ["libs/context-api"], @@ -29,15 +31,15 @@ "@umbraco-cms/extensions-registry": ["libs/extensions-registry"], "@umbraco-cms/notification": ["libs/notification"], "@umbraco-cms/observable-api": ["libs/observable-api"], - "@umbraco-cms/utils": ["src/core/utils"], - "@umbraco-cms/test-utils": ["src/core/test-utils"], + "@umbraco-cms/utils": ["libs/utils"], + "@umbraco-cms/test-utils": ["libs/test-utils"], "@umbraco-cms/resources": ["libs/resources"], "@umbraco-cms/store": ["libs/store"], "@umbraco-cms/components/*": ["src/backoffice/components/*"], "@umbraco-cms/sections/*": ["src/backoffice/sections/*"] } }, - "include": ["src/**/*.ts", "libs/**/*.ts", "e2e/**/*.ts"], + "include": ["src/**/*.ts", "apps/**/*.ts", "libs/**/*.ts", "e2e/**/*.ts"], "references": [ { "path": "./tsconfig.node.json" diff --git a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs index 3c4fbd61f3..69c726e3a3 100644 --- a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs +++ b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs @@ -4,7 +4,7 @@ import { importMapsPlugin } from '@web/dev-server-import-maps'; export default { nodeResolve: true, - files: ['src/**/*.test.ts', 'libs/**/*.test.ts'], + files: ['src/**/*.test.ts', 'apps/**/*.test.ts', 'libs/**/*.test.ts'], plugins: [ esbuildPlugin({ ts: true, target: 'auto', json: true }), importMapsPlugin({ @@ -12,6 +12,7 @@ export default { importMap: { imports: { 'src/': './src/', + '@umbraco-cms/css': './libs/css/custom-properties.css', '@umbraco-cms/models': './libs/models/index.ts', '@umbraco-cms/backend-api': './libs/backend-api/index.ts', '@umbraco-cms/context-api': './libs/context-api/index.ts', @@ -22,8 +23,8 @@ export default { '@umbraco-cms/notification': './libs/notification/index.ts', '@umbraco-cms/observable-api': './libs/observable-api/index.ts', '@umbraco-cms/store': './libs/store/index.ts', - '@umbraco-cms/utils': './src/core/utils/index.ts', - '@umbraco-cms/test-utils': './src/core/test-utils/index.ts', + '@umbraco-cms/utils': './libs/utils/index.ts', + '@umbraco-cms/test-utils': './libs/test-utils/index.ts', '@umbraco-cms/resources': './libs/resources/index.ts' }, }, @@ -47,7 +48,7 @@ export default { Umbraco - +