From 316cb6834c08b95939a91892706a212cf1f4dcba Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 1 May 2023 16:44:36 +0200 Subject: [PATCH 01/18] move document picker --- .../src/backoffice/documents/documents/components/index.ts | 1 + .../input-document-picker/input-document-picker.element.ts | 7 +++---- .../input-document-picker/input-document-picker.stories.ts | 0 .../input-document-picker/input-document-picker.test.ts | 0 .../src/backoffice/documents/documents/manifests.ts | 2 ++ .../documents/property-editors}/Umbraco.ContentPicker.ts | 0 .../property-editors}/document-picker/manifests.ts | 0 .../property-editor-ui-document-picker.element.ts | 3 +-- .../property-editor-ui-document-picker.stories.ts | 0 .../documents/documents/property-editors/manifests.ts | 5 +++++ .../src/backoffice/documents/index.ts | 2 ++ .../workspace/workspace-package-builder.element.ts | 4 +--- .../src/backoffice/shared/components/index.ts | 2 +- .../backoffice/shared/property-editors/models/manifests.ts | 2 -- .../backoffice/shared/property-editors/uis/manifests.ts | 2 -- .../users/users/workspace/user-workspace.element.ts | 2 +- 16 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => documents/documents}/components/input-document-picker/input-document-picker.element.ts (95%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => documents/documents}/components/input-document-picker/input-document-picker.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => documents/documents}/components/input-document-picker/input-document-picker.test.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared/property-editors/models => documents/documents/property-editors}/Umbraco.ContentPicker.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared/property-editors/uis => documents/documents/property-editors}/document-picker/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared/property-editors/uis => documents/documents/property-editors}/document-picker/property-editor-ui-document-picker.element.ts (89%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared/property-editors/uis => documents/documents/property-editors}/document-picker/property-editor-ui-document-picker.stories.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/index.ts new file mode 100644 index 0000000000..942241a3f0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/index.ts @@ -0,0 +1 @@ +export * from './input-document-picker/input-document-picker.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.element.ts similarity index 95% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.element.ts index cd909d40be..de5803d280 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.element.ts @@ -3,8 +3,8 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, property, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; -import { UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from '../../../documents/documents/repository/document.tree.store'; -import type { UmbDocumentTreeStore } from '../../../documents/documents/repository/document.tree.store'; +import { UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from '../../repository/document.tree.store'; +import type { UmbDocumentTreeStore } from '../../repository/document.tree.store'; import { UmbModalContext, UMB_MODAL_CONTEXT_TOKEN, @@ -17,7 +17,6 @@ import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-a @customElement('umb-input-document-picker') export class UmbInputDocumentPickerElement extends FormControlMixin(UmbLitElement) { - /** * This is a minimum amount of selected items in this input. * @type {number} @@ -167,7 +166,7 @@ export class UmbInputDocumentPickerElement extends FormControlMixin(UmbLitElemen `; } - + static styles = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.test.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-picker/input-document-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/components/input-document-picker/input-document-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/manifests.ts index 61718098ac..b06012c704 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/manifests.ts @@ -6,6 +6,7 @@ import { manifests as workspaceManifests } from './workspace/manifests'; import { manifests as entityActionManifests } from './entity-actions/manifests'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests'; import { manifests as modalManifests } from './modals/manifests'; +import { manifests as propertyEditorManifests } from './property-editors/manifests'; export const manifests = [ ...collectionManifests, @@ -16,4 +17,5 @@ export const manifests = [ ...entityActionManifests, ...entityBulkActionManifests, ...modalManifests, + ...propertyEditorManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/models/Umbraco.ContentPicker.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/Umbraco.ContentPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/models/Umbraco.ContentPicker.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/Umbraco.ContentPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/manifests.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/property-editor-ui-document-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts similarity index 89% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/property-editor-ui-document-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts index 9953c982f3..6015028fd2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/property-editor-ui-document-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts @@ -1,9 +1,8 @@ import { html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; -import type { UmbInputDocumentPickerElement } from '../../../components/input-document-picker/input-document-picker.element'; +import type { UmbInputDocumentPickerElement } from '../../components/input-document-picker/input-document-picker.element'; import { UmbPropertyEditorExtensionElement } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import '../../../components/input-document-picker/input-document-picker.element'; import type { DataTypePropertyPresentationModel } from '@umbraco-cms/backoffice/backend-api'; @customElement('umb-property-editor-ui-document-picker') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/property-editor-ui-document-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/document-picker/property-editor-ui-document-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/manifests.ts new file mode 100644 index 0000000000..cd880422cb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/property-editors/manifests.ts @@ -0,0 +1,5 @@ +import { manifest as documentPickerUI } from './document-picker/manifests'; +import { manifest as contentPicker } from './Umbraco.ContentPicker'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extensions-registry'; + +export const manifests: Array = [documentPickerUI, contentPicker]; 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 482ad3dab6..14ef9c69f0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts @@ -6,6 +6,8 @@ import { manifests as documentTypeManifests } from './document-types/manifests'; import { manifests as documentManifests } from './documents/manifests'; import type { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; +import './documents/components'; + export const manifests = [ ...dashboardManifests, ...contentSectionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts index cf6287835e..569cb7fefc 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts @@ -3,7 +3,7 @@ import { UUIBooleanInputEvent, UUIInputElement, UUIInputEvent } from '@umbraco-u import { css, html, nothing } from 'lit'; import { customElement, property, query, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; -import { UmbInputDocumentPickerElement } from '../../../shared/components/input-document-picker/input-document-picker.element'; +import { UmbInputDocumentPickerElement } from '../../../documents/documents/components/input-document-picker/input-document-picker.element'; import { UmbInputMediaPickerElement } from '../../../shared/components/input-media-picker/input-media-picker.element'; import { UmbInputLanguagePickerElement } from '../../../shared/components/input-language-picker/input-language-picker.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -13,8 +13,6 @@ import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco @customElement('umb-workspace-package-builder') export class UmbWorkspacePackageBuilderElement extends UmbLitElement { - - @property() entityId?: string; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index 4c492cdd6e..d976dc0d27 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -23,7 +23,7 @@ import './extension-slot/extension-slot.element'; import './input-checkbox-list/input-checkbox-list.element'; import './input-color-picker/input-color-picker.element'; import './input-culture-select/input-culture-select.element'; -import './input-document-picker/input-document-picker.element'; +import '../../documents/documents/components/input-document-picker/input-document-picker.element'; import './input-document-type-picker/input-document-type-picker.element'; import './input-eye-dropper/input-eye-dropper.element'; import './input-language-picker/input-language-picker.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/models/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/models/manifests.ts index d86bba6e68..413e0b4f65 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/models/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/models/manifests.ts @@ -1,6 +1,5 @@ import { manifest as colorPicker } from './Umbraco.ColorPicker'; import { manifest as eyeDropper } from './Umbraco.ColorPicker.EyeDropper'; -import { manifest as contentPicker } from './Umbraco.ContentPicker'; import { manifest as json } from './Umbraco.JSON'; import { manifest as multiUrlPicker } from './Umbraco.MultiUrlPicker'; import { manifest as multiNodeTreePicker } from './Umbraco.MultiNodeTreePicker'; @@ -35,7 +34,6 @@ import type { ManifestPropertyEditorModel } from '@umbraco-cms/backoffice/extens export const manifests: Array = [ colorPicker, eyeDropper, - contentPicker, dateTime, emailAddress, json, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/manifests.ts index e8aed7a381..8ee7084153 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/manifests.ts @@ -1,5 +1,4 @@ import { manifest as colorPicker } from './color-picker/manifests'; -import { manifest as documentPicker } from './document-picker/manifests'; import { manifest as datePicker } from './date-picker/manifests'; import { manifest as eyeDropper } from './eye-dropper/manifests'; import { manifest as multiUrlPicker } from './multi-url-picker/manifests'; @@ -36,7 +35,6 @@ import type { ManifestPropertyEditorUI } from '@umbraco-cms/backoffice/extension export const manifests: Array = [ colorPicker, - documentPicker, datePicker, eyeDropper, multiUrlPicker, 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 864cf1c6c4..a734f9d1c0 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 @@ -7,7 +7,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; import '../../../shared/components/input-user-group/input-user-group.element'; -import '../../../shared/property-editors/uis/document-picker/property-editor-ui-document-picker.element'; +import '../../../documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element'; import '../../../shared/components/workspace/workspace-editor/workspace-editor.element'; @customElement('umb-user-workspace') From 76f90a3189bd8d097df37f238a59c1d9878866ff Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 1 May 2023 18:05:36 +0200 Subject: [PATCH 02/18] move document type input --- .../backoffice/documents/document-types/components/index.ts | 1 + .../input-document-type-picker.element.ts | 6 ++---- .../document-type-workspace-view-structure.element.ts | 2 +- src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts | 1 + .../src/backoffice/shared/components/index.ts | 2 -- 5 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => documents/document-types}/components/input-document-type-picker/input-document-type-picker.element.ts (98%) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/index.ts new file mode 100644 index 0000000000..528d05ed97 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/index.ts @@ -0,0 +1 @@ +import './input-document-type-picker/input-document-type-picker.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-type-picker/input-document-type-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/input-document-type-picker/input-document-type-picker.element.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-type-picker/input-document-type-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/input-document-type-picker/input-document-type-picker.element.ts index c752e736a2..72e51ab375 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-document-type-picker/input-document-type-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/components/input-document-type-picker/input-document-type-picker.element.ts @@ -6,7 +6,7 @@ import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; import { UmbDocumentTypeTreeStore, UMB_DOCUMENT_TYPE_TREE_STORE_CONTEXT_TOKEN, -} from '../../../documents/document-types/repository/document-type.tree.store'; +} from '../../repository/document-type.tree.store'; import { UmbModalContext, UMB_MODAL_CONTEXT_TOKEN, @@ -19,8 +19,6 @@ import { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; @customElement('umb-input-document-type-picker') export class UmbInputDocumentTypePickerElement extends FormControlMixin(UmbLitElement) { - - // TODO: do we need both selectedIds and value? If we just use value we follow the same pattern as native form controls. private _selectedIds: Array = []; @property({ type: Array }) @@ -124,7 +122,7 @@ export class UmbInputDocumentTypePickerElement extends FormControlMixin(UmbLitEl `; } - + static styles = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts index ae722f1530..4bbe7d0049 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts @@ -3,7 +3,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import type { UUIToggleElement } from '@umbraco-ui/uui'; import { UmbDocumentTypeWorkspaceContext } from '../../document-type-workspace.context'; -import type { UmbInputDocumentTypePickerElement } from '../../../../../../backoffice/shared/components/input-document-type-picker/input-document-type-picker.element'; +import type { UmbInputDocumentTypePickerElement } from '../../../components/input-document-type-picker/input-document-type-picker.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; import { UmbWorkspaceEditorViewExtensionElement } from '@umbraco-cms/backoffice/extensions-registry'; 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 14ef9c69f0..41a1c74df1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/index.ts @@ -6,6 +6,7 @@ import { manifests as documentTypeManifests } from './document-types/manifests'; import { manifests as documentManifests } from './documents/manifests'; import type { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; +import './document-types/components'; import './documents/components'; export const manifests = [ diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index d976dc0d27..5efe8592e1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -23,8 +23,6 @@ import './extension-slot/extension-slot.element'; import './input-checkbox-list/input-checkbox-list.element'; import './input-color-picker/input-color-picker.element'; import './input-culture-select/input-culture-select.element'; -import '../../documents/documents/components/input-document-picker/input-document-picker.element'; -import './input-document-type-picker/input-document-type-picker.element'; import './input-eye-dropper/input-eye-dropper.element'; import './input-language-picker/input-language-picker.element'; import './input-media-picker/input-media-picker.element'; From 77d25abe62bef06080bd6c574bd3d7eacbdb0a22 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 1 May 2023 18:29:19 +0200 Subject: [PATCH 03/18] move donut chart --- .../logviewer}/components/donut-chart/donut-chart.element.ts | 0 .../logviewer}/components/donut-chart/donut-chart.stories.ts | 0 .../logviewer}/components/donut-chart/donut-slice.element.ts | 0 .../logviewer}/components/donut-chart/index.ts | 0 .../src/backoffice/settings/logviewer/components/index.ts | 1 + .../src/backoffice/shared/components/index.ts | 1 - 6 files changed, 1 insertion(+), 1 deletion(-) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/logviewer}/components/donut-chart/donut-chart.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/logviewer}/components/donut-chart/donut-chart.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/logviewer}/components/donut-chart/donut-slice.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/logviewer}/components/donut-chart/index.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/donut-chart.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/donut-chart.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/donut-chart.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-chart.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/donut-chart.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-slice.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/donut-slice.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/donut-slice.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/donut-slice.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/donut-chart/index.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/donut-chart/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/index.ts new file mode 100644 index 0000000000..621c86386a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/components/index.ts @@ -0,0 +1 @@ +import './donut-chart'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index 5efe8592e1..1a1cd99a01 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -16,7 +16,6 @@ import './collection/collection.element'; import './collection/collection-toolbar.element'; import './collection/collection-selection-actions.element'; import './debug/debug.element'; -import './donut-chart'; import './dropdown/dropdown.element'; import './empty-state/empty-state.element'; import './extension-slot/extension-slot.element'; From a2e429fe5445ca1918777d2193d2bfa2b6e2ef56 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 1 May 2023 20:31:45 +0200 Subject: [PATCH 04/18] move culture input --- .../src/backoffice/settings/cultures/components/index.ts | 1 + .../input-culture-select/input-culture-select.element.ts | 6 ++---- .../input-culture-select/input-culture-select.stories.ts | 0 src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts | 2 ++ .../details/language-details-workspace-view.element.ts | 2 +- .../src/backoffice/shared/components/index.ts | 1 - 6 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/cultures}/components/input-culture-select/input-culture-select.element.ts (96%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/cultures}/components/input-culture-select/input-culture-select.stories.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/index.ts new file mode 100644 index 0000000000..235415ae22 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/index.ts @@ -0,0 +1 @@ +import './input-culture-select/input-culture-select.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-culture-select/input-culture-select.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/input-culture-select/input-culture-select.element.ts similarity index 96% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-culture-select/input-culture-select.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/input-culture-select/input-culture-select.element.ts index 5eab4086e0..e0ec732806 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-culture-select/input-culture-select.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/input-culture-select/input-culture-select.element.ts @@ -5,15 +5,13 @@ import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; import { ifDefined } from 'lit/directives/if-defined.js'; import { repeat } from 'lit/directives/repeat.js'; import { UUIComboboxElement, UUIComboboxEvent } from '@umbraco-ui/uui'; -import { UmbCultureRepository } from '../../../settings/cultures/repository/culture.repository'; +import { UmbCultureRepository } from '../../repository/culture.repository'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/events'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { CultureReponseModel } from '@umbraco-cms/backoffice/backend-api'; @customElement('umb-input-culture-select') export class UmbInputCultureSelectElement extends FormControlMixin(UmbLitElement) { - - /** * Disables the input * @type {boolean} @@ -104,7 +102,7 @@ export class UmbInputCultureSelectElement extends FormControlMixin(UmbLitElement `} `; } - + static styles = [UUITextStyles, css``]; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-culture-select/input-culture-select.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/input-culture-select/input-culture-select.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-culture-select/input-culture-select.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/cultures/components/input-culture-select/input-culture-select.stories.ts 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 90fbaf506b..d83a4816a0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts @@ -15,6 +15,8 @@ import { import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api'; import type { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; +import './cultures/components'; + export const manifests = [ ...settingsSectionManifests, ...settingsMenuManifests, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts index 00705baa9e..e337caf69d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts @@ -4,7 +4,7 @@ import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { UmbLanguageWorkspaceContext } from '../../language-workspace.context'; -import { UmbInputCultureSelectElement } from '../../../../../../shared/components/input-culture-select/input-culture-select.element'; +import { UmbInputCultureSelectElement } from '../../../../../cultures/components/input-culture-select/input-culture-select.element'; import { UmbInputLanguagePickerElement } from '../../../../../../shared/components/input-language-picker/input-language-picker.element'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/events'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index 1a1cd99a01..ef53c719d2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -21,7 +21,6 @@ import './empty-state/empty-state.element'; import './extension-slot/extension-slot.element'; import './input-checkbox-list/input-checkbox-list.element'; import './input-color-picker/input-color-picker.element'; -import './input-culture-select/input-culture-select.element'; import './input-eye-dropper/input-eye-dropper.element'; import './input-language-picker/input-language-picker.element'; import './input-media-picker/input-media-picker.element'; From 6b5a1a3185fde3c2fb963e65d4ac1eb0098be9bf Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 10:33:16 +0200 Subject: [PATCH 05/18] Feature: Allow picking of Tree Root (#669) * include manifest in local variable name * this is run when the alias is changed * add manifest to variable * add TODO * update tree repo interface to get a tree root * simplify * return data type tree root * add request root method to tree context * render tree directly in tree menu item * render root in tree element * map has children to model * set root to custom type * add requestTreeRoot method to all repos that implement a treeRepository * avalanche of type updates * allow null (root) in pickers * allow tree item extension for multiple "entity" types * get tree root items if getChildren receives null * add tree root model * update tree root data * allow entity action to be applied to multiple entity types * allow move and copy to root * selection in picker can include null * temp typescript fix * add support for hiding the tree root * fix file system trees get root items * clean up * update move/copy mock db logic * allow create action on data type root * restrict data type entity actions on specific entity types * temp add action to all entities * temp typescript hack * Update tree-item.model.ts --------- Co-authored-by: Nathan Woulfe --- .../models/entity-action.model.ts | 2 +- .../models/tree-item.model.ts | 2 +- .../token/data-type-picker-modal.token.ts | 4 +- .../token/document-picker-modal.token.ts | 4 +- .../token/document-type-picker-modal.token.ts | 2 +- .../modal/token/media-picker-modal.token.ts | 2 +- .../token/template-picker-modal.token.ts | 4 +- .../libs/models/index.ts | 15 ++ .../data-source/copy-data-source.interface.ts | 2 +- .../data-source/move-data-source.interface.ts | 2 +- .../data-source/tree-data-source.interface.ts | 12 +- .../repository/tree-repository.interface.ts | 41 +++-- .../libs/store/entity-tree-store.ts | 2 +- .../libs/store/file-system-tree.store.ts | 4 +- .../repository/document-type.repository.ts | 31 +++- .../sources/document-type.tree.server.data.ts | 22 +-- .../document-types/tree/manifests.ts | 2 +- ...t-type-workspace-view-templates.element.ts | 3 +- .../documents/entity-actions/manifests.ts | 24 +-- .../menu-item/document-menu-item.element.ts | 2 +- .../document-picker-modal.element.ts | 4 +- .../document-type-picker-modal.element.ts | 10 +- .../repository/document.repository.ts | 25 +++- .../sources/document.tree.server.data.ts | 22 +-- .../documents/documents/tree/manifests.ts | 2 +- .../media-types/entity-actions/manifests.ts | 10 +- .../repository/media-type.repository.ts | 23 ++- .../sources/media-type.tree.server.data.ts | 22 +-- .../media/media-types/tree/manifests.ts | 2 +- .../media/media/entity-actions/manifests.ts | 2 +- .../menu-item/media-menu-item.element.ts | 2 +- .../media-picker-modal.element.ts | 10 +- .../media/repository/media.repository.ts | 34 ++++- .../sources/media.tree.server.data.ts | 22 +-- .../backoffice/media/media/tree/manifests.ts | 2 +- .../member-groups/entity-actions/manifests.ts | 2 +- .../repository/member-group.repository.ts | 20 ++- .../members/member-groups/tree/manifests.ts | 2 +- .../member-types/entity-actions/manifests.ts | 2 +- .../repository/member-type.repository.ts | 23 ++- .../sources/member-type.tree.server.data.ts | 5 +- .../members/member-types/tree/manifests.ts | 2 +- .../members/entity-actions/manifests.ts | 2 +- .../members/repository/member.repository.ts | 18 ++- .../members/members/tree/manifests.ts | 2 +- .../entity-actions/copy/manifests.ts | 2 +- .../entity-actions/create/manifests.ts | 5 +- .../data-types/entity-actions/manifests.ts | 8 +- .../entity-actions/move/manifests.ts | 2 +- .../backoffice/settings/data-types/index.ts | 2 + .../data-type-picker-modal.element.ts | 6 +- .../repository/data-type.repository.ts | 53 +++++-- .../sources/data-type-copy.server.data.ts | 4 +- .../sources/data-type-move.server.data.ts | 7 +- .../sources/data-type.tree.server.data.ts | 22 ++- .../settings/data-types/tree/manifests.ts | 2 +- .../backoffice/settings/data-types/types.ts | 7 + .../languages/entity-actions/manifests.ts | 2 +- .../repository/relation-type.repository.ts | 23 ++- .../settings/relation-types/tree/manifests.ts | 2 +- .../entity-action-list.element.ts | 2 +- .../input-template/input-template.element.ts | 6 +- .../menu-item-base/menu-item-base.element.ts | 6 +- .../section-sidebar-context-menu.element.ts | 6 +- .../section-sidebar.context.ts | 6 +- .../tree-item-base/tree-item-base.context.ts | 42 +++--- .../tree-item-base/tree-item-base.element.ts | 6 +- .../tree/tree-item.context.interface.ts | 22 +-- .../tree/tree-item/tree-item.element.ts | 15 +- .../tree-menu-item/tree-menu-item.element.ts | 31 +--- .../shared/components/tree/tree.context.ts | 134 +++++++++++------ .../shared/components/tree/tree.element.ts | 140 ++++++++---------- .../link-picker/link-picker-modal.element.ts | 4 +- .../template-picker-modal.element.ts | 2 +- .../file-system-tree-item.context.ts | 1 - .../sources/stylesheet.tree.server.data.ts | 34 +++-- .../repository/stylesheet.repository.ts | 25 +++- .../templating/stylesheets/tree/manifests.ts | 2 +- .../templates/entity-actions/manifests.ts | 4 +- .../sources/template.tree.server.data.ts | 22 +-- .../repository/template.repository.ts | 45 +++--- .../templating/templates/tree/manifests.ts | 2 +- .../workspace/template-workspace.context.ts | 2 +- .../import/import-dictionary-modal.element.ts | 2 + .../dictionary/entity-actions/manifests.ts | 12 +- .../menu-item/dictionary-menu-item.element.ts | 2 +- .../repository/dictionary.repository.ts | 23 ++- .../sources/dictionary.tree.server.data.ts | 22 +-- .../translation/dictionary/tree/manifests.ts | 2 +- .../src/core/mocks/data/entity.data.ts | 29 ++-- .../src/core/mocks/data/template.data.ts | 4 +- .../src/core/mocks/data/utils.ts | 7 +- .../core/mocks/domains/template.handlers.ts | 6 +- .../src/stories/extending/entity-actions.mdx | 2 +- 94 files changed, 761 insertions(+), 508 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/types.ts diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/entity-action.model.ts index 3c2dd26ecb..f46fb6510c 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/entity-action.model.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/entity-action.model.ts @@ -47,5 +47,5 @@ export interface MetaEntityAction { } export interface ConditionsEntityAction { - entityType: string; + entityTypes: Array; } diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/tree-item.model.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/tree-item.model.ts index 7f327014a0..472d1605a5 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/tree-item.model.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/models/tree-item.model.ts @@ -7,5 +7,5 @@ export interface ManifestTreeItem extends ManifestElement; } diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/data-type-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/data-type-picker-modal.token.ts index 51d90eb871..2297e7e023 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/data-type-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/data-type-picker-modal.token.ts @@ -1,12 +1,12 @@ import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbDataTypePickerModalData { - selection?: Array; + selection?: Array; multiple?: boolean; } export interface UmbDataTypePickerModalResult { - selection: Array; + selection: Array; } export const UMB_DATA_TYPE_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/document-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/document-picker-modal.token.ts index 133318c692..5209f34110 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/document-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/document-picker-modal.token.ts @@ -2,11 +2,11 @@ import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbDocumentPickerModalData { multiple?: boolean; - selection?: Array; + selection?: Array; } export interface UmbDocumentPickerModalResult { - selection: Array; + selection: Array; } export const UMB_DOCUMENT_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/document-type-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/document-type-picker-modal.token.ts index d0c16dfc68..6b2d0a6341 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/document-type-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/document-type-picker-modal.token.ts @@ -6,7 +6,7 @@ export interface UmbDocumentTypePickerModalData { } export interface UmbDocumentTypePickerModalResult { - selection: Array; + selection: Array; } export const UMB_DOCUMENT_TYPE_PICKER_MODAL = new UmbModalToken< diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/media-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/media-picker-modal.token.ts index 94607575c4..7e25303f88 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/media-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/media-picker-modal.token.ts @@ -6,7 +6,7 @@ export interface UmbMediaPickerModalData { } export interface UmbMediaPickerModalResult { - selection: Array; + selection: Array; } export const UMB_MEDIA_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/template-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/template-picker-modal.token.ts index a4660816e9..8f9b122a69 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/template-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/template-picker-modal.token.ts @@ -2,11 +2,11 @@ import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbTemplatePickerModalData { multiple: boolean; - selection: string[]; + selection: Array; } export interface UmbTemplatePickerModalResult { - selection: string[] | undefined; + selection: Array; } export const UMB_TEMPLATE_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/libs/models/index.ts b/src/Umbraco.Web.UI.Client/libs/models/index.ts index d370269599..4b16ebba15 100644 --- a/src/Umbraco.Web.UI.Client/libs/models/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/models/index.ts @@ -114,3 +114,18 @@ export interface UmbFilterModel { take?: number; filter?: string; } + +export interface UmbTreeRootModel { + type: string; + name: string; + hasChildren: boolean; + icon?: string; +} + +export interface UmbTreeRootEntityModel extends UmbTreeRootModel { + id: string | null; +} + +export interface UmbTreeRootFileSystemModel extends UmbTreeRootModel { + path: string | null; +} diff --git a/src/Umbraco.Web.UI.Client/libs/repository/data-source/copy-data-source.interface.ts b/src/Umbraco.Web.UI.Client/libs/repository/data-source/copy-data-source.interface.ts index b9d41d7971..f2477be161 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/data-source/copy-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/data-source/copy-data-source.interface.ts @@ -1,5 +1,5 @@ import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; export interface UmbCopyDataSource { - copy(unique: string, targetUnique: string): Promise>; + copy(unique: string, targetUnique: string | null): Promise>; } diff --git a/src/Umbraco.Web.UI.Client/libs/repository/data-source/move-data-source.interface.ts b/src/Umbraco.Web.UI.Client/libs/repository/data-source/move-data-source.interface.ts index c0639e31ce..e0ac7ce1d7 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/data-source/move-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/data-source/move-data-source.interface.ts @@ -1,5 +1,5 @@ import type { UmbDataSourceErrorResponse } from '@umbraco-cms/backoffice/repository'; export interface UmbMoveDataSource { - move(unique: string, targetUnique: string): Promise; + move(unique: string, targetUnique: string | null): Promise; } diff --git a/src/Umbraco.Web.UI.Client/libs/repository/data-source/tree-data-source.interface.ts b/src/Umbraco.Web.UI.Client/libs/repository/data-source/tree-data-source.interface.ts index 52f623e13b..3865b21650 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/data-source/tree-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/data-source/tree-data-source.interface.ts @@ -1,9 +1,9 @@ -import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; - -export interface UmbTreeDataSource { - getRootItems(): Promise>; - getChildrenOf(parentUnique: string): Promise>; +import type { UmbPagedData } from '../tree-repository.interface'; +import type { DataSourceResponse } from './data-source-response.interface'; +export interface UmbTreeDataSource> { + getRootItems(): Promise>; + getChildrenOf(parentUnique: string | null): Promise>; // TODO: remove this when all repositories are migrated to the new items interface - getItems(unique: Array): Promise>>; + getItems(unique: Array): Promise>>; } diff --git a/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts b/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts index 17ddc1a2d4..c267d1730a 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts @@ -1,33 +1,44 @@ import type { Observable } from 'rxjs'; -import { ProblemDetailsModel } from '@umbraco-cms/backoffice/backend-api'; +import { ProblemDetailsModel, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbTreeRootEntityModel, UmbTreeRootModel } from '@umbraco-cms/backoffice/models'; export interface UmbPagedData { total: number; items: Array; } -export interface UmbTreeRepository> { - requestRootTreeItems: () => Promise<{ - data: PagedItemType | undefined; - error: ProblemDetailsModel | undefined; - asObservable?: () => Observable; +export interface UmbTreeRepository< + TreeItemType extends TreeItemPresentationModel, + TreeRootType extends UmbTreeRootModel = UmbTreeRootEntityModel +> { + requestTreeRoot: () => Promise<{ + data?: TreeRootType; + error?: ProblemDetailsModel; }>; + + requestRootTreeItems: () => Promise<{ + data?: UmbPagedData; + error?: ProblemDetailsModel; + asObservable?: () => Observable; + }>; + requestTreeItemsOf: (parentUnique: string | null) => Promise<{ - data: PagedItemType | undefined; - error: ProblemDetailsModel | undefined; - asObservable?: () => Observable; + data?: UmbPagedData; + error?: ProblemDetailsModel; + asObservable?: () => Observable; }>; // TODO: remove this when all repositories are migrated to the new interface items interface requestItemsLegacy?: (uniques: string[]) => Promise<{ - data: Array | undefined; - error: ProblemDetailsModel | undefined; - asObservable?: () => Observable; + data?: Array; + error?: ProblemDetailsModel; + asObservable?: () => Observable; }>; - rootTreeItems: () => Promise>; - treeItemsOf: (parentUnique: string | null) => Promise>; + rootTreeItems: () => Promise>; + + treeItemsOf: (parentUnique: string | null) => Promise>; // TODO: remove this when all repositories are migrated to the new items interface - itemsLegacy?: (uniques: string[]) => Promise>; + itemsLegacy?: (uniques: string[]) => Promise>; } diff --git a/src/Umbraco.Web.UI.Client/libs/store/entity-tree-store.ts b/src/Umbraco.Web.UI.Client/libs/store/entity-tree-store.ts index fb032ac309..2de0ac6d25 100644 --- a/src/Umbraco.Web.UI.Client/libs/store/entity-tree-store.ts +++ b/src/Umbraco.Web.UI.Client/libs/store/entity-tree-store.ts @@ -39,7 +39,7 @@ export class UmbEntityTreeStore * @return {*} * @memberof UmbEntityTreeStore */ - items(ids: Array) { + items(ids: Array) { return this._data.getObservablePart((items) => items.filter((item) => ids.includes(item.id ?? ''))); } } diff --git a/src/Umbraco.Web.UI.Client/libs/store/file-system-tree.store.ts b/src/Umbraco.Web.UI.Client/libs/store/file-system-tree.store.ts index 68c9352ce5..d8294f911d 100644 --- a/src/Umbraco.Web.UI.Client/libs/store/file-system-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/libs/store/file-system-tree.store.ts @@ -30,7 +30,9 @@ export class UmbFileSystemTreeStore * @memberof UmbFileSystemTreeStore */ childrenOf(parentPath: string | null) { - return this._data.getObservablePart((items) => items.filter((item) => item.path?.startsWith(parentPath + '/'))); + return this._data.getObservablePart((items) => + items.filter((item) => item.path?.startsWith(parentPath + '/') || parentPath === null) + ); } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/document-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/document-type.repository.ts index 72e2b8d47d..aa74883c45 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/document-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/document-type.repository.ts @@ -5,12 +5,18 @@ import { UmbDocumentTypeStore, UMB_DOCUMENT_TYPE_STORE_CONTEXT_TOKEN } from './d import type { UmbTreeDataSource, UmbTreeRepository, UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; -import { DocumentTypeResponseModel, FolderTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { + DocumentTypeResponseModel, + EntityTreeItemResponseModel, + FolderTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; type ItemType = DocumentTypeResponseModel; -export class UmbDocumentTypeRepository implements UmbTreeRepository, UmbDetailRepository { +export class UmbDocumentTypeRepository + implements UmbTreeRepository, UmbDetailRepository +{ #init!: Promise; #host: UmbControllerHostElement; @@ -48,6 +54,20 @@ export class UmbDocumentTypeRepository implements UmbTreeRepository, U // TODO: Trash // TODO: Move + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'document-type-root', + name: 'Document Types', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -62,10 +82,7 @@ export class UmbDocumentTypeRepository implements UmbTreeRepository, U async requestTreeItemsOf(parentId: string | null) { await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); const { data, error } = await this.#treeSource.getChildrenOf(parentId); @@ -106,7 +123,7 @@ export class UmbDocumentTypeRepository implements UmbTreeRepository, U // DETAILS: async createScaffold(parentId: string | null) { - if (!parentId) throw new Error('Parent id is missing'); + if (parentId === undefined) throw new Error('Parent id is missing'); await this.#init; return this.#detailDataSource.createScaffold(parentId); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts index 93061d3d91..d67e33dea5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts @@ -66,16 +66,20 @@ export class UmbDocumentTypeTreeServerDataSource implements UmbTreeDataSource { * @memberof UmbDocumentTypeTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - DocumentTypeResource.getTreeDocumentTypeChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + DocumentTypeResource.getTreeDocumentTypeChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/tree/manifests.ts index 5a5ccaa08d..2f2bf1fd5b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/tree/manifests.ts @@ -16,7 +16,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.DocumentType', name: 'Document Type Tree Item', conditions: { - entityType: 'document-type', + entityTypes: ['document-type-root', 'document-type'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts index ffc8c93c8f..6d1ddf5349 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts @@ -44,7 +44,8 @@ export class UmbDocumentTypeWorkspaceViewTemplatesElement console.log('change', e); // save new allowed ids const input = e.target as UmbInputTemplateElement; - this.#workspaceContext?.setAllowedTemplateIds(input.selectedIds); + const idsWithoutRoot = input.selectedIds.filter((id) => id !== null) as Array; + this.#workspaceContext?.setAllowedTemplateIds(idsWithoutRoot); this.#workspaceContext?.setDefaultTemplateId(input.defaultId); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/manifests.ts index ab2d9ac5b8..e6832c79db 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/manifests.ts @@ -30,7 +30,7 @@ const entityActions: Array = [ api: UmbCreateDocumentEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -45,7 +45,7 @@ const entityActions: Array = [ api: UmbTrashEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -60,7 +60,7 @@ const entityActions: Array = [ api: UmbCreateDocumentBlueprintEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -75,7 +75,7 @@ const entityActions: Array = [ api: UmbMoveEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -90,7 +90,7 @@ const entityActions: Array = [ api: UmbCopyEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -105,7 +105,7 @@ const entityActions: Array = [ api: UmbSortChildrenOfEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -120,7 +120,7 @@ const entityActions: Array = [ api: UmbDocumentCultureAndHostnamesEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -134,7 +134,7 @@ const entityActions: Array = [ api: UmbDocumentPermissionsEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -148,7 +148,7 @@ const entityActions: Array = [ api: UmbDocumentPublicAccessEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -162,7 +162,7 @@ const entityActions: Array = [ api: UmbPublishDocumentEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -176,7 +176,7 @@ const entityActions: Array = [ api: UmbUnpublishDocumentEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -190,7 +190,7 @@ const entityActions: Array = [ api: UmbRollbackDocumentEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/menu-item/document-menu-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/menu-item/document-menu-item.element.ts index 07d94f6a1f..74197d3c8e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/menu-item/document-menu-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/menu-item/document-menu-item.element.ts @@ -5,7 +5,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-document-menu-item') export class UmbDocumentMenuItemElement extends UmbLitElement { render() { - return html``; + return html``; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-picker/document-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-picker/document-picker-modal.element.ts index f56e5a3eb6..268169db65 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-picker/document-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-picker/document-picker-modal.element.ts @@ -11,10 +11,8 @@ export class UmbDocumentPickerModalElement extends UmbModalBaseElement< UmbDocumentPickerModalData, UmbDocumentPickerModalResult > { - - @state() - _selection: Array = []; + _selection: Array = []; @state() _multiple = true; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-type-picker/document-type-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-type-picker/document-type-picker-modal.element.ts index 32a32bb1f0..aca2946ea2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-type-picker/document-type-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/modals/document-type-picker/document-type-picker-modal.element.ts @@ -11,10 +11,8 @@ export class UmbDocumentTypePickerModalElement extends UmbModalBaseElement< UmbDocumentTypePickerModalData, UmbDocumentTypePickerModalResult > { - - @state() - _selection: Array = []; + _selection: Array = []; @state() _multiple = true; @@ -28,8 +26,7 @@ export class UmbDocumentTypePickerModalElement extends UmbModalBaseElement< private _handleSelectionChange(e: CustomEvent) { e.stopPropagation(); const element = e.target as UmbTreeElement; - //TODO: Should multiple property be implemented here or be passed down into umb-tree? - this._selection = this._multiple ? element.selection : [element.selection[element.selection.length - 1]]; + this._selection = element.selection; } private _submit() { @@ -50,7 +47,8 @@ export class UmbDocumentTypePickerModalElement extends UmbModalBaseElement< alias="Umb.Tree.DocumentTypes" @selected=${this._handleSelectionChange} .selection=${this._selection} - selectable> + selectable + ?multiple=${this._multiple}>
diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts index 019ee03128..092a42980d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts @@ -9,12 +9,15 @@ import { DocumentResponseModel, CreateDocumentRequestModel, UpdateDocumentRequestModel, + DocumentTreeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; type ItemType = DocumentResponseModel; -export class UmbDocumentRepository implements UmbTreeRepository, UmbDetailRepository { +export class UmbDocumentRepository + implements UmbTreeRepository, UmbDetailRepository +{ #init!: Promise; #host: UmbControllerHostElement; @@ -52,6 +55,21 @@ export class UmbDocumentRepository implements UmbTreeRepository, UmbDe // TODO: Trash // TODO: Move + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'document-root', + name: 'Documents', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -66,10 +84,7 @@ export class UmbDocumentRepository implements UmbTreeRepository, UmbDe async requestTreeItemsOf(parentId: string | null) { await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); const { data, error } = await this.#treeSource.getChildrenOf(parentId); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts index 74320f4691..7b599e17a8 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts @@ -66,16 +66,20 @@ export class UmbDocumentTreeServerDataSource implements UmbTreeDataSource { * @memberof UmbDocumentTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - DocumentResource.getTreeDocumentChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + DocumentResource.getTreeDocumentChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts index a5dbe90321..306b2da976 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts @@ -18,7 +18,7 @@ const treeItem: ManifestTreeItem = { name: 'Document Tree Item', loader: () => import('./tree-item/document-tree-item.element'), conditions: { - entityType: 'document', + entityTypes: ['document-root', 'document'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/entity-actions/manifests.ts index 0535ffc768..6ad213af98 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/entity-actions/manifests.ts @@ -20,7 +20,7 @@ const entityActions: Array = [ api: UmbCreateMediaTypeEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -35,7 +35,7 @@ const entityActions: Array = [ api: UmbMoveEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -50,7 +50,7 @@ const entityActions: Array = [ api: UmbCopyEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -65,7 +65,7 @@ const entityActions: Array = [ api: UmbDeleteEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -80,7 +80,7 @@ const entityActions: Array = [ api: UmbReloadMediaTypeEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts index 16b649f19b..dda6267aa8 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts @@ -7,8 +7,9 @@ import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import { UmbTreeRepository, UmbTreeDataSource } from '@umbraco-cms/backoffice/repository'; +import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbMediaTypeRepository implements UmbTreeRepository { +export class UmbMediaTypeRepository implements UmbTreeRepository { #init!: Promise; #host: UmbControllerHostElement; @@ -43,6 +44,21 @@ export class UmbMediaTypeRepository implements UmbTreeRepository { ]); } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'media-type-root', + name: 'Media Types', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -57,10 +73,7 @@ export class UmbMediaTypeRepository implements UmbTreeRepository { async requestTreeItemsOf(parentId: string | null) { await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); const { data, error } = await this.#treeSource.getChildrenOf(parentId); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts index f1b9e18602..a362697054 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts @@ -37,16 +37,20 @@ export class UmbMediaTypeTreeServerDataSource implements UmbTreeDataSource { * @memberof UmbMediaTypeTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - MediaTypeResource.getTreeMediaTypeChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + MediaTypeResource.getTreeMediaTypeChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/tree/manifests.ts index fff9c37137..3b77179828 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/tree/manifests.ts @@ -16,7 +16,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.MediaType', name: 'Media Type Tree Item', conditions: { - entityType: 'media-type', + entityTypes: ['media-type-root', 'media-type'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/entity-actions/manifests.ts index c8b4e44629..8f407cf171 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/entity-actions/manifests.ts @@ -14,7 +14,7 @@ const entityActions: Array = [ repositoryAlias: MEDIA_REPOSITORY_ALIAS, }, conditions: { - entityType: 'media', + entityTypes: ['media'], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/menu-item/media-menu-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/menu-item/media-menu-item.element.ts index 6a4157ece4..c69525c8b6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/menu-item/media-menu-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/menu-item/media-menu-item.element.ts @@ -5,7 +5,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-media-menu-item') export class UmbMediaMenuItemElement extends UmbLitElement { render() { - return html``; + return html``; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/modals/media-picker/media-picker-modal.element.ts index 3cac92aec2..a2f4d1ba4c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/modals/media-picker/media-picker-modal.element.ts @@ -10,10 +10,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< UmbMediaPickerModalData, UmbMediaPickerModalResult > { - - @state() - _selection: Array = []; + _selection: Array = []; @state() _multiple = true; @@ -27,8 +25,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< private _handleSelectionChange(e: CustomEvent) { e.stopPropagation(); const element = e.target as UmbTreeElement; - //TODO: Should multiple property be implemented here or be passed down into umb-tree? - this._selection = this._multiple ? element.selection : [element.selection[element.selection.length - 1]]; + this._selection = element.selection; } private _submit() { @@ -49,7 +46,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< alias="Umb.Tree.Media" @selected=${this._handleSelectionChange} .selection=${this._selection} - selectable> + selectable + ?multiple=${this._multiple}>
diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/media.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/media.repository.ts index 4440fe2046..45a2899437 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/media.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/media.repository.ts @@ -6,14 +6,20 @@ import { UmbMediaDetailServerDataSource } from './sources/media.detail.server.da import type { UmbTreeRepository, UmbTreeDataSource } from '@umbraco-cms/backoffice/repository'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; -import { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { + CreateMediaRequestModel, + EntityTreeItemResponseModel, + UpdateMediaRequestModel, +} from '@umbraco-cms/backoffice/backend-api'; import { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; type ItemDetailType = MediaDetails; export class UmbMediaRepository - implements UmbTreeRepository, UmbDetailRepository + implements + UmbTreeRepository, + UmbDetailRepository { #host: UmbControllerHostElement; @@ -63,6 +69,21 @@ export class UmbMediaRepository } } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'media-root', + name: 'Media', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -77,10 +98,7 @@ export class UmbMediaRepository async requestTreeItemsOf(parentId: string | null) { await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); const { data, error } = await this.#treeSource.getChildrenOf(parentId); @@ -121,7 +139,7 @@ export class UmbMediaRepository // DETAILS: async createScaffold(parentId: string | null) { - if (!parentId) throw new Error('Parent id is missing'); + if (parentId === undefined) throw new Error('Parent id is missing'); await this.#init; return this.#detailDataSource.createScaffold(parentId); } @@ -220,7 +238,7 @@ export class UmbMediaRepository alert('implement trash'); } - async move(ids: Array, destination: string) { + async move(ids: Array, destination: string | null) { // TODO: use backend cli when available. const res = await fetch('/umbraco/management/api/v1/media/move', { method: 'POST', diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/sources/media.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/sources/media.tree.server.data.ts index c13e0effc8..00a80617a0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/sources/media.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/repository/sources/media.tree.server.data.ts @@ -66,16 +66,20 @@ export class UmbMediaTreeServerDataSource implements UmbTreeDataSource { * @memberof UmbMediaTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - MediaResource.getTreeMediaChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + MediaResource.getTreeMediaChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/tree/manifests.ts index b66042c3ba..7f6d2e9ee2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/tree/manifests.ts @@ -18,7 +18,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.Media', name: 'Media Tree Item', conditions: { - entityType: 'media', + entityTypes: ['media-root', 'media'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts index 90bd62d4f2..9d6f24660e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/entity-actions/manifests.ts @@ -14,7 +14,7 @@ const entityActions: Array = [ repositoryAlias: MEMBER_GROUP_REPOSITORY_ALIAS, }, conditions: { - entityType: 'member-group', + entityTypes: ['member-group'], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts index fec1899830..a0c0c3075c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts @@ -7,9 +7,12 @@ import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import type { UmbTreeDataSource, UmbDetailRepository, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; +import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; // TODO => Update type when backend updated -export class UmbMemberGroupRepository implements UmbTreeRepository, UmbDetailRepository { +export class UmbMemberGroupRepository + implements UmbTreeRepository, UmbDetailRepository +{ #init!: Promise; #host: UmbControllerHostElement; @@ -41,6 +44,21 @@ export class UmbMemberGroupRepository implements UmbTreeRepository, UmbDetailRep }); } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'member-group-root', + name: 'Member Groups', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts index 5d379a3782..14b1109cb4 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/tree/manifests.ts @@ -19,7 +19,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.MemberGroup', name: 'Member Group Tree Item', conditions: { - entityType: 'member-group', + entityTypes: ['member-group-root', 'member-group'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/entity-actions/manifests.ts index db52c2c7a8..4f38d477b6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/entity-actions/manifests.ts @@ -18,7 +18,7 @@ const entityActions: Array = [ api: UmbDeleteEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts index 3129798500..44274b0d07 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts @@ -7,10 +7,11 @@ import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-ap import { UmbTreeDataSource, UmbDetailRepository, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import type { MemberTypeDetails } from '@umbraco-cms/backoffice/models'; +import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; // TODO => use correct type when available type ItemType = any; -type TreeItemType = any; +type TreeItemType = EntityTreeItemResponseModel; export class UmbMemberTypeRepository implements UmbTreeRepository, UmbDetailRepository { #init!: Promise; @@ -47,6 +48,21 @@ export class UmbMemberTypeRepository implements UmbTreeRepository, ]); } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'member-type-root', + name: 'Member Types', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -61,10 +77,7 @@ export class UmbMemberTypeRepository implements UmbTreeRepository, async requestTreeItemsOf(parentId: string | null) { await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); const { data, error } = await this.#treeSource.getChildrenOf(parentId); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts index f5e135b31b..d1395b7e62 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts @@ -37,10 +37,7 @@ export class UmbMemberTypeTreeServerDataSource implements UmbTreeDataSource { * @memberof UmbMemberTypeTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } - + if (parentId === undefined) throw new Error('Parent id is missing'); return { error: new ApiError({} as any, {} as any, 'Not implemented for Member Type') }; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/tree/manifests.ts index 6781a419f4..7a23f9a6ef 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/tree/manifests.ts @@ -18,7 +18,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.MemberType', name: 'Member Type Tree Item', conditions: { - entityType: 'member-type', + entityTypes: ['member-type-root', 'member-type'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/entity-actions/manifests.ts index 9f2f9a28b2..8413fe7d22 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/entity-actions/manifests.ts @@ -14,7 +14,7 @@ const entityActions: Array = [ repositoryAlias: MEMBER_REPOSITORY_ALIAS, }, conditions: { - entityType: 'member', + entityTypes: ['member'], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.repository.ts index 9f20156cc8..ab19046099 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.repository.ts @@ -5,7 +5,7 @@ import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import type { UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; -export class UmbMemberRepository implements UmbTreeRepository { +export class UmbMemberRepository implements UmbTreeRepository { #host: UmbControllerHostElement; #dataSource: UmbMemberTreeServerDataSource; #treeStore?: UmbMemberTreeStore; @@ -40,6 +40,22 @@ export class UmbMemberRepository implements UmbTreeRepository { } } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + parentId: null, + type: 'member-root', + name: 'Members', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/manifests.ts index e30a124927..decc69aecf 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/tree/manifests.ts @@ -17,7 +17,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.Member', name: 'Member Tree Item', conditions: { - entityType: 'member', + entityTypes: ['member-root', 'member'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/copy/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/copy/manifests.ts index 726637162b..a2a35bcb32 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/copy/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/copy/manifests.ts @@ -16,7 +16,7 @@ const entityActions: Array = [ api: UmbCopyDataTypeEntityAction, }, conditions: { - entityType: DATA_TYPE_ENTITY_TYPE, + entityTypes: [DATA_TYPE_ENTITY_TYPE], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/create/manifests.ts index 4603e3f25f..daf6fc69bd 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/create/manifests.ts @@ -1,3 +1,4 @@ +import { DATA_TYPE_ENTITY_TYPE, DATA_TYPE_FOLDER_ENTITY_TYPE, DATA_TYPE_ROOT_ENTITY_TYPE } from '../..'; import { DATA_TYPE_REPOSITORY_ALIAS } from '../../repository/manifests'; import { UmbCreateDataTypeEntityAction } from './create.action'; import { ManifestTypes } from '@umbraco-cms/backoffice/extensions-registry'; @@ -10,12 +11,12 @@ const entityActions: Array = [ weight: 1000, meta: { icon: 'umb:add', - label: 'Create', + label: 'Create...', repositoryAlias: DATA_TYPE_REPOSITORY_ALIAS, api: UmbCreateDataTypeEntityAction, }, conditions: { - entityType: 'data-type', + entityTypes: [DATA_TYPE_ENTITY_TYPE, DATA_TYPE_ROOT_ENTITY_TYPE, DATA_TYPE_FOLDER_ENTITY_TYPE], }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/manifests.ts index 64d90c4142..ab03c43bef 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/manifests.ts @@ -1,4 +1,4 @@ -import { DATA_TYPE_ENTITY_TYPE } from '..'; +import { DATA_TYPE_FOLDER_ENTITY_TYPE, DATA_TYPE_ENTITY_TYPE } from '..'; import { DATA_TYPE_REPOSITORY_ALIAS } from '../repository/manifests'; import { manifests as createManifests } from './create/manifests'; import { manifests as moveManifests } from './move/manifests'; @@ -24,7 +24,7 @@ const entityActions: Array = [ api: UmbDeleteEntityAction, }, conditions: { - entityType: DATA_TYPE_ENTITY_TYPE, + entityTypes: [DATA_TYPE_ENTITY_TYPE], }, }, { @@ -39,7 +39,7 @@ const entityActions: Array = [ api: UmbDeleteFolderEntityAction, }, conditions: { - entityType: DATA_TYPE_ENTITY_TYPE, + entityTypes: [DATA_TYPE_ENTITY_TYPE, DATA_TYPE_FOLDER_ENTITY_TYPE], }, }, { @@ -54,7 +54,7 @@ const entityActions: Array = [ api: UmbFolderUpdateEntityAction, }, conditions: { - entityType: DATA_TYPE_ENTITY_TYPE, + entityTypes: [DATA_TYPE_ENTITY_TYPE, DATA_TYPE_FOLDER_ENTITY_TYPE], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/move/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/move/manifests.ts index 5e7ff4e7c6..b51a3e6698 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/move/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/entity-actions/move/manifests.ts @@ -16,7 +16,7 @@ const entityActions: Array = [ api: UmbMoveDataTypeEntityAction, }, conditions: { - entityType: DATA_TYPE_ENTITY_TYPE, + entityTypes: [DATA_TYPE_ENTITY_TYPE], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/index.ts index 44cb2b0223..6d3be16e23 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/index.ts @@ -1,3 +1,5 @@ import './components'; +export const DATA_TYPE_ROOT_ENTITY_TYPE = 'data-type-root'; export const DATA_TYPE_ENTITY_TYPE = 'data-type'; +export const DATA_TYPE_FOLDER_ENTITY_TYPE = 'data-type-folder'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/modal/data-type-picker/data-type-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/modal/data-type-picker/data-type-picker-modal.element.ts index b72d549d08..1f3f620f78 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/modal/data-type-picker/data-type-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/modal/data-type-picker/data-type-picker-modal.element.ts @@ -12,8 +12,6 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; // TODO: make use of UmbPickerLayoutBase @customElement('umb-data-type-picker-modal') export class UmbDataTypePickerModalElement extends UmbLitElement { - - @property({ attribute: false }) modalHandler?: UmbModalHandler; @@ -21,7 +19,7 @@ export class UmbDataTypePickerModalElement extends UmbLitElement { data?: UmbDataTypePickerModalData; @state() - _selection: Array = []; + _selection: Array = []; @state() _multiple = false; @@ -64,7 +62,7 @@ export class UmbDataTypePickerModalElement extends UmbLitElement { `; } - + static styles = [UUITextStyles, css``]; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/data-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/data-type.repository.ts index 3025554863..17a043968a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/data-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/data-type.repository.ts @@ -1,3 +1,4 @@ +import { DATA_TYPE_ROOT_ENTITY_TYPE } from '..'; import { UmbDataTypeTreeServerDataSource } from './sources/data-type.tree.server.data'; import { UmbDataTypeMoveServerDataSource } from './sources/data-type-move.server.data'; import { UmbDataTypeStore, UMB_DATA_TYPE_STORE_CONTEXT_TOKEN } from './data-type.store'; @@ -14,6 +15,12 @@ import type { UmbFolderRepository, UmbMoveRepository, UmbCopyRepository, + UmbTreeDataSource, + UmbDataSource, + UmbFolderDataSource, + UmbItemDataSource, + UmbMoveDataSource, + UmbCopyDataSource, } from '@umbraco-cms/backoffice/repository'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; @@ -31,7 +38,7 @@ export class UmbDataTypeRepository implements UmbItemRepository, UmbTreeRepository, - UmbDetailRepository, + UmbDetailRepository, UmbFolderRepository, UmbMoveRepository, UmbCopyRepository @@ -40,12 +47,12 @@ export class UmbDataTypeRepository #host: UmbControllerHostElement; - #treeSource: UmbDataTypeTreeServerDataSource; - #detailSource: UmbDataTypeServerDataSource; - #folderSource: UmbDataTypeFolderServerDataSource; - #itemSource: UmbDataTypeItemServerDataSource; - #moveSource: UmbDataTypeMoveServerDataSource; - #copySource: UmbDataTypeCopyServerDataSource; + #treeSource: UmbTreeDataSource; + #detailSource: UmbDataSource; + #folderSource: UmbFolderDataSource; + #itemSource: UmbItemDataSource; + #moveSource: UmbMoveDataSource; + #copySource: UmbCopyDataSource; #detailStore?: UmbDataTypeStore; #treeStore?: UmbDataTypeTreeStore; @@ -84,6 +91,20 @@ export class UmbDataTypeRepository } // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: DATA_TYPE_ROOT_ENTITY_TYPE, + name: 'Data Types', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -97,8 +118,8 @@ export class UmbDataTypeRepository } async requestTreeItemsOf(parentId: string | null) { - if (!parentId) throw new Error('Parent id is missing'); await this.#init; + if (parentId === undefined) throw new Error('Parent id is missing'); const { data, error } = await this.#treeSource.getChildrenOf(parentId); @@ -286,14 +307,17 @@ export class UmbDataTypeRepository } // Actions - async move(id: string, targetId: string) { + async move(id: string, targetId: string | null) { await this.#init; const { error } = await this.#moveSource.move(id, targetId); if (!error) { // TODO: Be aware about this responsibility. this.#treeStore?.updateItem(id, { parentId: targetId }); - this.#treeStore?.updateItem(targetId, { hasChildren: true }); + // only update the target if its not the root + if (targetId) { + this.#treeStore?.updateItem(targetId, { hasChildren: true }); + } const notification = { data: { message: `Data type moved` } }; this.#notificationContext?.peek('positive', notification); @@ -302,7 +326,7 @@ export class UmbDataTypeRepository return { error }; } - async copy(id: string, targetId: string) { + async copy(id: string, targetId: string | null) { await this.#init; const { data: dataTypeCopyId, error } = await this.#copySource.copy(id, targetId); if (error) return { error }; @@ -310,8 +334,13 @@ export class UmbDataTypeRepository if (dataTypeCopyId) { const { data: dataTypeCopy } = await this.requestById(dataTypeCopyId); if (!dataTypeCopy) throw new Error('Could not find copied data type'); + + // TODO: Be aware about this responsibility. this.#treeStore?.appendItems([dataTypeCopy]); - this.#treeStore?.updateItem(targetId, { hasChildren: true }); + // only update the target if its not the root + if (targetId) { + this.#treeStore?.updateItem(targetId, { hasChildren: true }); + } const notification = { data: { message: `Data type copied` } }; this.#notificationContext?.peek('positive', notification); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-copy.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-copy.server.data.ts index d322063e48..4cf0be1784 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-copy.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-copy.server.data.ts @@ -26,9 +26,9 @@ export class UmbDataTypeCopyServerDataSource implements UmbCopyDataSource { * @return {*} * @memberof UmbDataTypeCopyServerDataSource */ - async copy(id: string, targetId: string) { + async copy(id: string, targetId: string | null) { if (!id) throw new Error('Id is missing'); - if (!targetId) throw new Error('Target Id is missing'); + if (targetId === undefined) throw new Error('Target Id is missing'); return tryExecuteAndNotify( this.#host, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-move.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-move.server.data.ts index c6759d7676..5f564079db 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-move.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type-move.server.data.ts @@ -22,13 +22,14 @@ export class UmbDataTypeMoveServerDataSource implements UmbMoveDataSource { /** * Move an item for the given id to the target id - * @param {Array} id + * @param {string} id + * @param {(string | null)} targetId * @return {*} * @memberof UmbDataTypeMoveServerDataSource */ - async move(id: string, targetId: string) { + async move(id: string, targetId: string | null) { if (!id) throw new Error('Id is missing'); - if (!targetId) throw new Error('Target Id is missing'); + if (targetId === undefined) throw new Error('Target Id is missing'); return tryExecuteAndNotify( this.#host, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts index f1da0afaa9..9fe7b5ea13 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts @@ -32,19 +32,25 @@ export class UmbDataTypeTreeServerDataSource implements UmbTreeDataSource { /** * Fetches the children of a given parent id from the server - * @param {(string | null)} parentId + * @param {(string)} parentId * @return {*} * @memberof UmbDataTypeTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) throw new Error('Parent id is missing'); + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - DataTypeResource.getTreeDataTypeChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + DataTypeResource.getTreeDataTypeChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/tree/manifests.ts index 49c0a602a4..c75132e6d1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/tree/manifests.ts @@ -16,7 +16,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.DataType', name: 'Data Type Tree Item', conditions: { - entityType: 'data-type', + entityTypes: ['data-type-root', 'data-type'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/types.ts new file mode 100644 index 0000000000..636a67cc81 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/types.ts @@ -0,0 +1,7 @@ +// Temp file for data type types + +import { DataTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface UmbDataTypeModel extends Omit { + type: 'data-type' | 'data-type-folder' | 'data-type-root'; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/entity-actions/manifests.ts index c917cfb11b..f93dc19f63 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/entity-actions/manifests.ts @@ -16,7 +16,7 @@ const entityActions: Array = [ api: UmbDeleteEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/relation-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/relation-type.repository.ts index 8433f6c883..83da40eb18 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/relation-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/relation-type.repository.ts @@ -16,7 +16,7 @@ import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco export class UmbRelationTypeRepository implements UmbTreeRepository, - UmbDetailRepository + UmbDetailRepository { #init!: Promise; @@ -55,6 +55,21 @@ export class UmbRelationTypeRepository // TODO: Trash // TODO: Move + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'relation-type-root', + name: 'Relation Types', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -99,12 +114,8 @@ export class UmbRelationTypeRepository // DETAILS: async createScaffold(parentId: string | null) { + if (parentId === undefined) throw new Error('Parent id is missing'); await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } - return this.#detailDataSource.createScaffold(parentId); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/tree/manifests.ts index 42dc1f26cf..4c2ae6d48c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/tree/manifests.ts @@ -16,7 +16,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.RelationType', name: 'Relation Type Tree Item', conditions: { - entityType: 'relation-type', + entityTypes: ['relation-type-root', 'relation-type'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/entity-action/entity-action-list.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/entity-action/entity-action-list.element.ts index 3ea2640821..bdea077ecc 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/entity-action/entity-action-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/entity-action/entity-action-list.element.ts @@ -32,7 +32,7 @@ class UmbEntityActionListElement extends UmbLitElement { this.observe( umbExtensionsRegistry.extensionsOfType('entityAction').pipe( map((extensions) => { - return extensions.filter((extension) => extension.conditions.entityType === this.entityType); + return extensions.filter((extension) => extension.conditions.entityTypes.includes(this.entityType)); }) ), (actions) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts index 4fd0164550..89dcd5fd64 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts @@ -51,12 +51,12 @@ export class UmbInputTemplateElement extends FormControlMixin(UmbLitElement) { @property({ type: String, attribute: 'min-message' }) maxMessage = 'This field exceeds the allowed amount of items'; - _selectedIds: Array = []; - @property({ type: Array }) + _selectedIds: Array = []; + @property({ type: Array }) public get selectedIds() { return this._selectedIds; } - public set selectedIds(newKeys: Array) { + public set selectedIds(newKeys: Array) { this._selectedIds = newKeys; this.#observePickedTemplates(); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts index 62d89eb5a1..ccb44351e5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts @@ -15,8 +15,6 @@ import { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; @customElement('umb-menu-item-base') export class UmbMenuItemBaseElement extends UmbLitElement { - - private _entityType?: string; @property({ type: String, attribute: 'entity-type' }) public get entityType() { @@ -65,7 +63,7 @@ export class UmbMenuItemBaseElement extends UmbLitElement { this.#actionObserver = this.observe( umbExtensionsRegistry .extensionsOfType('entityAction') - .pipe(map((actions) => actions.filter((action) => action.conditions.entityType === this.entityType))), + .pipe(map((actions) => actions.filter((action) => action.conditions.entityTypes.includes(this.entityType!)))), (actions) => { this._hasActions = actions.length > 0; }, @@ -116,7 +114,7 @@ export class UmbMenuItemBaseElement extends UmbLitElement { : nothing} `; } - + static styles = [UUITextStyles, css``]; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts index ba649a06bb..fff6c340a3 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts @@ -10,8 +10,6 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-section-sidebar-context-menu') export class UmbSectionSidebarContextMenuElement extends UmbLitElement { - - #sectionSidebarContext?: UmbSectionSidebarContext; @state() @@ -21,7 +19,7 @@ export class UmbSectionSidebarContextMenuElement extends UmbLitElement { private _entityType?: string; @state() - private _unique?: string; + private _unique?: string | null; @state() private _headline?: string; @@ -76,7 +74,7 @@ export class UmbSectionSidebarContextMenuElement extends UmbLitElement {
` : nothing; } - + static styles = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.context.ts index 8185a4f502..8bebb7f272 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.context.ts @@ -10,7 +10,7 @@ export class UmbSectionSidebarContext { #entityType = new UmbStringState(undefined); entityType = this.#entityType.asObservable(); - #unique = new UmbStringState(undefined); + #unique = new UmbStringState(undefined); unique = this.#unique.asObservable(); #headline = new UmbStringState(undefined); @@ -20,14 +20,14 @@ export class UmbSectionSidebarContext { this.#host = host; } - toggleContextMenu(entityType: string, unique: string | undefined, headline: string) { + toggleContextMenu(entityType: string, unique: string | null | undefined, headline: string) { console.log('open for ', entityType, unique, headline); this.openContextMenu(entityType, unique, headline); } // TODO: we wont get notified about tree item name changes because we don't have a subscription // we need to figure out how we best can handle this when we only know the entity and unique id - openContextMenu(entityType: string, unique: string | undefined, headline: string) { + openContextMenu(entityType: string, unique: string | null | undefined, headline: string) { this.#entityType.next(entityType); this.#unique.next(unique); this.#headline.next(headline); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts index 9c81962047..3ae5a626d6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts @@ -23,16 +23,18 @@ import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import type { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; // add type for unique function -export type UmbTreeItemUniqueFunction = (x: T) => string | null | undefined; +export type UmbTreeItemUniqueFunction = ( + x: TreeItemType +) => string | null | undefined; -export class UmbTreeItemContextBase - implements UmbTreeItemContext +export class UmbTreeItemContextBase + implements UmbTreeItemContext { public host: UmbControllerHostElement; - public unique?: string; + public unique?: string | null; public type?: string; - #treeItem = new UmbDeepState(undefined); + #treeItem = new UmbDeepState(undefined); treeItem = this.#treeItem.asObservable(); #hasChildren = new UmbBooleanState(false); @@ -56,27 +58,28 @@ export class UmbTreeItemContextBase; #sectionContext?: UmbSectionContext; #sectionSidebarContext?: UmbSectionSidebarContext; - #getUniqueFunction: UmbTreeItemUniqueFunction; + #getUniqueFunction: UmbTreeItemUniqueFunction; #actionObserver?: UmbObserverController; - constructor(host: UmbControllerHostElement, getUniqueFunction: UmbTreeItemUniqueFunction) { + constructor(host: UmbControllerHostElement, getUniqueFunction: UmbTreeItemUniqueFunction) { this.host = host; this.#getUniqueFunction = getUniqueFunction; this.#consumeContexts(); new UmbContextProviderController(host, UMB_TREE_ITEM_CONTEXT_TOKEN, this); } - public setTreeItem(treeItem: T | undefined) { + public setTreeItem(treeItem: TreeItemType | undefined) { if (!treeItem) { this.#treeItem.next(undefined); return; } const unique = this.#getUniqueFunction(treeItem); - if (!unique) throw new Error('Could not create tree item context, unique key is missing'); + // Only check for undefined. The tree root has null as unique + if (unique === undefined) throw new Error('Could not create tree item context, unique key is missing'); this.unique = unique; if (!treeItem.type) throw new Error('Could not create tree item context, tree item type is missing'); @@ -88,7 +91,7 @@ export class UmbTreeItemContextBase { + new UmbContextConsumerController(this.host, 'umbTreeContext', (treeContext: UmbTreeContextBase) => { this.treeContext = treeContext; this.#observeIsSelectable(); this.#observeIsSelected(); @@ -143,7 +146,7 @@ export class UmbTreeItemContextBase { if (!pathname) return; if (!this.type) throw new Error('Cant construct path, entity type is missing'); - if (!this.unique) throw new Error('Cant construct path, unique is missing'); - + if (this.unique === undefined) throw new Error('Cant construct path, unique is missing'); const path = this.constructPath(pathname, this.type, this.unique); this.#path.next(path); }); @@ -174,7 +176,7 @@ export class UmbTreeItemContextBase actions.filter((action) => action.conditions.entityType === this.type))), + .pipe(map((actions) => actions.filter((action) => action.conditions.entityTypes.includes(this.type!)))), (actions) => { this.#hasActions.next(actions.length > 0); } @@ -182,9 +184,9 @@ export class UmbTreeItemContextBase('UmbTreeItemContext'); +export const UMB_TREE_ITEM_CONTEXT_TOKEN = new UmbContextToken>('UmbTreeItemContext'); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.element.ts index 1337e52ae1..ec0c2f70c5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.element.ts @@ -10,8 +10,6 @@ import { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; @customElement('umb-tree-item-base') export class UmbTreeItemBaseElement extends UmbLitElement { - - @state() private _item?: TreeItemPresentationModel; @@ -39,7 +37,7 @@ export class UmbTreeItemBaseElement extends UmbLitElement { @state() private _iconSlotHasChildren = false; - #treeItemContext?: UmbTreeItemContext; + #treeItemContext?: UmbTreeItemContext; constructor() { super(); @@ -159,7 +157,7 @@ export class UmbTreeItemBaseElement extends UmbLitElement { : ''} `; } - + static styles = [UUITextStyles, css``]; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.context.interface.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.context.interface.ts index 7809c8ad23..76d0211f29 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item.context.interface.ts @@ -1,19 +1,13 @@ import type { Observable } from 'rxjs'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import type { ProblemDetailsModel, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbPagedData } from '@umbraco-cms/backoffice/repository'; -// TODO: temp type. Add paged response type to the repository interface -interface PagedResponse { - total: number; - items: Array; -} - -export interface UmbTreeItemContext { +export interface UmbTreeItemContext { host: UmbControllerHostElement; - unique?: string; + unique?: string | null; type?: string; - - treeItem: Observable; + treeItem: Observable; hasChildren: Observable; isLoading: Observable; isSelectable: Observable; @@ -22,11 +16,11 @@ export interface UmbTreeItemContext; path: Observable; - setTreeItem(treeItem: T | undefined): void; + setTreeItem(treeItem: TreeItemType | undefined): void; requestChildren(): Promise<{ - data: PagedResponse | undefined; - error: ProblemDetailsModel | undefined; - asObservable?: () => Observable; + data?: UmbPagedData | undefined; + error?: ProblemDetailsModel | undefined; + asObservable?: () => Observable; }>; toggleContextMenu(): void; select(): void; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item/tree-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item/tree-item.element.ts index c7e981c62f..4dd9b27a6f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item/tree-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item/tree-item.element.ts @@ -7,8 +7,6 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-tree-item') export class UmbTreeItemElement extends UmbLitElement { - - @property({ type: Object, attribute: false }) item?: TreeItemPresentationModel; @@ -16,13 +14,20 @@ export class UmbTreeItemElement extends UmbLitElement { if (!this.item) return nothing; return html` manifests.conditions.entityType === this.item?.type} + .filter=${(manifests: ManifestTreeItem) => manifests.conditions.entityTypes.includes(this.item!.type!)} .props=${{ item: this.item, }}>`; } - - static styles = [UUITextStyles, css``]; + + static styles = [ + UUITextStyles, + css` + :host { + display: block; + } + `, + ]; } declare global { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-menu-item/tree-menu-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-menu-item/tree-menu-item.element.ts index 39d2a9ea28..ddb0a7a1cd 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-menu-item/tree-menu-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-menu-item/tree-menu-item.element.ts @@ -1,7 +1,5 @@ import { html, nothing } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; -import { ifDefined } from 'lit/directives/if-defined.js'; -import { UUIMenuItemEvent } from '@umbraco-ui/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { @@ -25,38 +23,11 @@ umbExtensionsRegistry.register(manifest); @customElement('umb-menu-item-tree') export class UmbMenuItemTreeElement extends UmbLitElement implements UmbMenuItemExtensionElement { - @state() - private _renderTree = false; - - private _onShowChildren(event: UUIMenuItemEvent) { - event.stopPropagation(); - this._renderTree = true; - } - - private _onHideChildren(event: UUIMenuItemEvent) { - event.stopPropagation(); - this._renderTree = false; - } - @property({ type: Object }) manifest?: ManifestMenuItemTreeKind; - // TODO: check if root has children before settings the has-children attribute - // TODO: how do we want to cache the tree? (do we want to rerender every time the user opens the tree)? render() { - return this.manifest - ? html` - - ${this._renderTree ? html`` : nothing} - - ` - : ''; + return this.manifest ? html` ` : nothing; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.context.ts index cc720084d3..f9102ef0bd 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree.context.ts @@ -1,23 +1,32 @@ -import type { Observable } from 'rxjs'; -import { UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; +import { Observable, map } from 'rxjs'; +import { UmbPagedData, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; import type { ManifestTree } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbBooleanState, UmbArrayState, UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { createExtensionClass, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; +import { ProblemDetailsModel, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api'; -export interface UmbTreeContext { - tree: ManifestTree; +// TODO: update interface +export interface UmbTreeContext { readonly selectable: Observable; - readonly selection: Observable>; + readonly selection: Observable>; setSelectable(value: boolean): void; setMultiple(value: boolean): void; - setSelection(value: Array): void; - select(id: string): void; + setSelection(value: Array): void; + select(unique: string | null): void; + deselect(unique: string | null): void; + requestChildrenOf: (parentUnique: string | null) => Promise<{ + data?: UmbPagedData; + error?: ProblemDetailsModel; + asObservable?: () => Observable; + }>; } -export class UmbTreeContextBase implements UmbTreeContext { - host: UmbControllerHostElement; - public tree: ManifestTree; +export class UmbTreeContextBase + implements UmbTreeContext +{ + public host: UmbControllerHostElement; #selectable = new UmbBooleanState(false); public readonly selectable = this.#selectable.asObservable(); @@ -25,10 +34,13 @@ export class UmbTreeContextBase implements UmbTreeContext { #multiple = new UmbBooleanState(false); public readonly multiple = this.#multiple.asObservable(); - #selection = new UmbArrayState(>[]); + #selection = new UmbArrayState(>[]); public readonly selection = this.#selection.asObservable(); - repository?: UmbTreeRepository; + #treeAlias?: string; + repository?: UmbTreeRepository; + + #treeManifestObserver?: UmbObserverController; #initResolver?: () => void; #initialized = false; @@ -37,28 +49,9 @@ export class UmbTreeContextBase implements UmbTreeContext { this.#initialized ? resolve() : (this.#initResolver = resolve); }); - constructor(host: UmbControllerHostElement, tree: ManifestTree) { + constructor(host: UmbControllerHostElement) { this.host = host; - this.tree = tree; - - const repositoryAlias = this.tree.meta.repositoryAlias; - if (!repositoryAlias) throw new Error('Tree must have a repository alias.'); - - new UmbObserverController( - this.host, - umbExtensionsRegistry.getByTypeAndAlias('repository', this.tree.meta.repositoryAlias), - async (repositoryManifest) => { - if (!repositoryManifest) return; - - try { - const result = await createExtensionClass(repositoryManifest, [this.host]); - this.repository = result; - this.#checkIfInitialized(); - } catch (error) { - throw new Error('Could not create repository with alias: ' + repositoryAlias + ''); - } - } - ); + new UmbContextProviderController(host, 'umbTreeContext', this); } // TODO: find a generic way to do this @@ -69,6 +62,19 @@ export class UmbTreeContextBase implements UmbTreeContext { } } + public async setTreeAlias(treeAlias?: string) { + if (this.#treeAlias === treeAlias) return; + this.#treeAlias = treeAlias; + + if (treeAlias) { + this.#observeTreeManifest(); + } + } + + public getTreeAlias() { + return this.#treeAlias; + } + public setSelectable(value: boolean) { this.#selectable.next(value); } @@ -85,7 +91,7 @@ export class UmbTreeContextBase implements UmbTreeContext { return this.#multiple.getValue(); } - public setSelection(value: Array) { + public setSelection(value: Array) { if (!value) return; this.#selection.next(value); } @@ -94,15 +100,22 @@ export class UmbTreeContextBase implements UmbTreeContext { return this.#selection.getValue(); } - public select(id: string) { + public select(unique: string | null) { if (!this.getSelectable()) return; - const newSelection = this.getMultiple() ? [...this.getSelection(), id] : [id]; + const newSelection = this.getMultiple() ? [...this.getSelection(), unique] : [unique]; this.#selection.next(newSelection); + this.host.dispatchEvent(new CustomEvent('selected')); } - public deselect(id: string) { - const newSelection = this.getSelection().filter((x) => x !== id); + public deselect(unique: string | null) { + const newSelection = this.getSelection().filter((x) => x !== unique); this.#selection.next(newSelection); + this.host.dispatchEvent(new CustomEvent('selected')); + } + + public async requestTreeRoot() { + await this.#init; + return this.repository!.requestTreeRoot(); } public async requestRootItems() { @@ -110,9 +123,10 @@ export class UmbTreeContextBase implements UmbTreeContext { return this.repository!.requestRootTreeItems(); } - public async requestChildrenOf(parentId: string | null) { + public async requestChildrenOf(parentUnique: string | null) { await this.#init; - return this.repository!.requestTreeItemsOf(parentId); + if (parentUnique === undefined) throw new Error('Parent unique cannot be undefined.'); + return this.repository!.requestTreeItemsOf(parentUnique); } public async rootItems() { @@ -120,8 +134,44 @@ export class UmbTreeContextBase implements UmbTreeContext { return this.repository!.rootTreeItems(); } - public async childrenOf(parentId: string | null) { + public async childrenOf(parentUnique: string | null) { await this.#init; - return this.repository!.treeItemsOf(parentId); + return this.repository!.treeItemsOf(parentUnique); + } + + #observeTreeManifest() { + this.#treeManifestObserver?.destroy(); + + this.#treeManifestObserver = new UmbObserverController( + this.host, + umbExtensionsRegistry + .extensionsOfType('tree') + .pipe(map((treeManifests) => treeManifests.find((treeManifest) => treeManifest.alias === this.#treeAlias))), + async (treeManifest) => { + if (!treeManifest) return; + this.#observeRepository(treeManifest); + } + ); + } + + #observeRepository(treeManifest: ManifestTree) { + const repositoryAlias = treeManifest.meta.repositoryAlias; + if (!repositoryAlias) throw new Error('Tree must have a repository alias.'); + + new UmbObserverController( + this.host, + umbExtensionsRegistry.getByTypeAndAlias('repository', treeManifest.meta.repositoryAlias), + async (repositoryManifest) => { + if (!repositoryManifest) return; + + try { + const result = await createExtensionClass>(repositoryManifest, [this.host]); + this.repository = result; + this.#checkIfInitialized(); + } catch (error) { + throw new Error('Could not create repository with alias: ' + repositoryAlias + ''); + } + } + ); } } 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 e50d1e7930..304fc8d38e 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 @@ -1,12 +1,10 @@ -import { html } from 'lit'; +import { html, nothing } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; -import { map } from 'rxjs'; import { repeat } from 'lit/directives/repeat.js'; import { UmbTreeContextBase } from './tree.context'; -import type { ManifestTree } from '@umbraco-cms/backoffice/extensions-registry'; -import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; import './tree-item/tree-item.element'; import './tree-item-base/tree-item-base.element'; @@ -15,122 +13,104 @@ import './context-menu/tree-context-menu.service'; @customElement('umb-tree') export class UmbTreeElement extends UmbLitElement { - private _alias = ''; @property({ type: String, reflect: true }) get alias() { - return this._alias; + return this.#treeContext.getTreeAlias(); } set alias(newVal) { - const oldVal = this._alias; - this._alias = newVal; - this.requestUpdate('alias', oldVal); - this._observeTree(); + this.#treeContext.setTreeAlias(newVal); } - private _selectable = false; @property({ type: Boolean, reflect: true }) get selectable() { - return this._selectable; + return this.#treeContext.getSelectable(); } set selectable(newVal) { - const oldVal = this._selectable; - this._selectable = newVal; - this.requestUpdate('selectable', oldVal); - this._treeContext?.setSelectable(newVal); + this.#treeContext.setSelectable(newVal); } - private _selection: Array = []; @property({ type: Array }) get selection() { - return this._selection; + return this.#treeContext.getSelection(); } - set selection(newVal: Array) { - const oldVal = this._selection; - this._selection = newVal; - this.requestUpdate('selection', oldVal); - this._treeContext?.setSelection(newVal); + set selection(newVal) { + this.#treeContext?.setSelection(newVal); } - private _multiple = false; @property({ type: Boolean, reflect: true }) get multiple() { - return this._multiple; + return this.#treeContext.getMultiple(); } set multiple(newVal) { - const oldVal = this._multiple; - this._multiple = newVal; - this.requestUpdate('multiple', oldVal); - this._treeContext?.setMultiple(newVal); + this.#treeContext.setMultiple(newVal); + } + + // TODO: what is the best name for this functionatliy? + private _hideTreeRoot = false; + @property({ type: Boolean, attribute: 'hide-tree-root' }) + get hideTreeRoot() { + return this._hideTreeRoot; + } + set hideTreeRoot(newVal: boolean) { + const oldVal = this._hideTreeRoot; + this._hideTreeRoot = newVal; + if (newVal === true) { + this.#observeRootItems(); + } + + this.requestUpdate('hideTreeRoot', oldVal); } @state() - private _tree?: ManifestTree; + private _items: TreeItemPresentationModel[] = []; @state() - private _items: EntityTreeItemResponseModel[] = []; + private _treeRoot?: TreeItemPresentationModel; - private _treeContext?: UmbTreeContextBase; + #treeContext = new UmbTreeContextBase(this); - protected firstUpdated(): void { - this._observeTree(); + #rootItemsObserver?: UmbObserverController>; + + connectedCallback(): void { + super.connectedCallback(); + this.#requestTreeRoot(); } - private _observeTree() { - if (!this.alias) return; + async #requestTreeRoot() { + if (!this.#treeContext?.requestTreeRoot) throw new Error('Tree does not support root'); - this.observe( - umbExtensionsRegistry - .extensionsOfType('tree') - .pipe(map((trees) => trees.find((tree) => tree.alias === this.alias))), - async (tree) => { - if (this._tree?.alias === tree?.alias) return; - - this._tree = tree; - this.#provideTreeContext(); - } - ); + const { data } = await this.#treeContext.requestTreeRoot(); + this._treeRoot = data; } - #provideTreeContext() { - if (!this._tree || this._treeContext) return; + async #observeRootItems() { + if (!this.#treeContext?.requestRootItems) throw new Error('Tree does not support root items'); + this.#rootItemsObserver?.destroy(); - // TODO: if a new tree comes around, which is different, then we should clean up and re provide. - this._treeContext = new UmbTreeContextBase(this, this._tree); - this._treeContext.setSelectable(this.selectable); - this._treeContext.setSelection(this.selection); - this._treeContext.setMultiple(this.multiple); + const { asObservable } = await this.#treeContext.requestRootItems(); - this.#observeSelection(); - this.#observeTreeRoot(); - - this.provideContext('umbTreeContext', this._treeContext); - } - - async #observeTreeRoot() { - if (!this._treeContext?.requestRootItems) return; - - this._treeContext.requestRootItems(); - - this.observe(await this._treeContext.rootItems(), (rootItems) => { - this._items = rootItems; - }); - } - - #observeSelection() { - if (!this._treeContext) return; - - this.observe(this._treeContext.selection, (selection) => { - if (this._selection === selection) return; - this._selection = selection; - this.dispatchEvent(new CustomEvent('selected')); - }); + if (asObservable) { + this.#rootItemsObserver = this.observe(asObservable(), (rootItems) => { + this._items = rootItems; + this.requestUpdate(); + }); + } } render() { + return html` ${this.#renderTreeRoot()} ${this.#renderRootItems()}`; + } + + #renderTreeRoot() { + if (this.hideTreeRoot || this._treeRoot === undefined) return nothing; + return html` `; + } + + #renderRootItems() { + if (this._items?.length === 0) return nothing; return html` ${repeat( this._items, - // TODO: add getUnique to a repository interface (item, index) => index, (item) => html`` )} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/modals/link-picker/link-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/modals/link-picker/link-picker-modal.element.ts index df4510682f..a9d87472ff 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/modals/link-picker/link-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/modals/link-picker/link-picker-modal.element.ts @@ -14,8 +14,6 @@ import { buildUdi, getKeyFromUdi } from '@umbraco-cms/backoffice/utils'; @customElement('umb-link-picker-modal') export class UmbLinkPickerModalElement extends UmbModalBaseElement { - - @state() _selectedKey?: string; @@ -73,6 +71,8 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement { @state() - _selection: Array = []; + _selection: Array = []; @state() _multiple = true; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/components/file-system-tree-item/file-system-tree-item.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/components/file-system-tree-item/file-system-tree-item.context.ts index 670d5d6be4..8427d1929c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/components/file-system-tree-item/file-system-tree-item.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/components/file-system-tree-item/file-system-tree-item.context.ts @@ -3,7 +3,6 @@ import { urlFriendlyPathFromServerFilePath } from '../../utils'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { FileSystemTreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; -// TODO get unique method from an entity repository static method export class UmbFileSystemTreeItemContext extends UmbTreeItemContextBase { constructor(host: UmbControllerHostElement) { super(host, (x: FileSystemTreeItemPresentationModel) => x.path); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts index 5b7674f6df..ad3f393974 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts @@ -1,8 +1,4 @@ -import { - FileSystemTreeItemPresentationModel, - PagedFileSystemTreeItemPresentationModel, - StylesheetResource, -} from '@umbraco-cms/backoffice/backend-api'; +import { FileSystemTreeItemPresentationModel, StylesheetResource } from '@umbraco-cms/backoffice/backend-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { UmbTreeDataSource } from '@umbraco-cms/backoffice/repository'; @@ -13,9 +9,7 @@ import { UmbTreeDataSource } from '@umbraco-cms/backoffice/repository'; * @class UmbStylesheetTreeServerDataSource * @implements {UmbTreeDataSource} */ -export class UmbStylesheetTreeServerDataSource - implements UmbTreeDataSource -{ +export class UmbStylesheetTreeServerDataSource implements UmbTreeDataSource { #host: UmbControllerHostElement; /** @@ -38,17 +32,25 @@ export class UmbStylesheetTreeServerDataSource /** * Fetches the children of a given stylesheet path from the server - * @param {(string | undefined)} path + * @param {(string | null)} path * @return {*} * @memberof UmbStylesheetTreeServerDataSource */ - async getChildrenOf(path: string | undefined) { - return tryExecuteAndNotify( - this.#host, - StylesheetResource.getTreeStylesheetChildren({ - path, - }) - ); + async getChildrenOf(path: string | null) { + if (path === undefined) throw new Error('Path is missing'); + + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (path === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + StylesheetResource.getTreeStylesheetChildren({ + path, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts index 6660a94e1d..f1a29007ce 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts @@ -5,13 +5,11 @@ import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; -import { - FileSystemTreeItemPresentationModel, - PagedFileSystemTreeItemPresentationModel, -} from '@umbraco-cms/backoffice/backend-api'; +import { FileSystemTreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbTreeRootFileSystemModel } from '@umbraco-cms/backoffice/models'; export class UmbStylesheetRepository - implements UmbTreeRepository + implements UmbTreeRepository { #host; #dataSource; @@ -50,6 +48,21 @@ export class UmbStylesheetRepository } } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + path: null, + type: 'stylesheet-root', + name: 'Stylesheets', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -63,7 +76,7 @@ export class UmbStylesheetRepository } async requestTreeItemsOf(path: string | null) { - if (!path) throw new Error('Cannot request tree item with missing path'); + if (path === undefined) throw new Error('Cannot request tree item with missing path'); await this.#init; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/tree/manifests.ts index c93536bd70..6c16725a5d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/tree/manifests.ts @@ -20,7 +20,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.Stylesheet', name: 'Stylesheet Tree Item', conditions: { - entityType: STYLESHEET_ENTITY_TYPE, + entityTypes: ['stylesheet-root', STYLESHEET_ENTITY_TYPE], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/entity-actions/manifests.ts index a85363c686..05e8bd364f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/entity-actions/manifests.ts @@ -15,7 +15,7 @@ const entityActions: Array = [ repositoryAlias: TEMPLATE_REPOSITORY_ALIAS, }, conditions: { - entityType: 'template', + entityTypes: ['template'], }, }, { @@ -29,7 +29,7 @@ const entityActions: Array = [ repositoryAlias: TEMPLATE_REPOSITORY_ALIAS, }, conditions: { - entityType: 'template', + entityTypes: ['template'], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts index d3c96eda1a..20e8726e78 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts @@ -37,16 +37,20 @@ export class UmbTemplateTreeServerDataSource implements TemplateTreeDataSource { * @memberof UmbTemplateTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - TemplateResource.getTreeTemplateChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + TemplateResource.getTreeTemplateChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts index c4cbd48566..ece426ed55 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts @@ -2,26 +2,32 @@ import { UmbTemplateDetailServerDataSource } from './sources/template.detail.ser import { UmbTemplateTreeServerDataSource } from './sources/template.tree.server.data'; import { UmbTemplateStore, UMB_TEMPLATE_STORE_CONTEXT_TOKEN } from './template.store'; import { UmbTemplateTreeStore, UMB_TEMPLATE_TREE_STORE_CONTEXT_TOKEN } from './template.tree.store'; -import type { UmbDetailRepository, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; +import type { + UmbDataSource, + UmbDetailRepository, + UmbTreeDataSource, + UmbTreeRepository, +} from '@umbraco-cms/backoffice/repository'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { CreateTemplateRequestModel, + EntityTreeItemResponseModel, TemplateResponseModel, UpdateTemplateRequestModel, } from '@umbraco-cms/backoffice/backend-api'; export class UmbTemplateRepository implements - UmbTreeRepository, - UmbDetailRepository + UmbTreeRepository, + UmbDetailRepository { #init; #host: UmbControllerHostElement; - #treeDataSource: UmbTemplateTreeServerDataSource; - #detailDataSource: UmbTemplateDetailServerDataSource; + #treeDataSource: UmbTreeDataSource; + #detailDataSource: UmbDataSource; #treeStore?: UmbTemplateTreeStore; #store?: UmbTemplateStore; @@ -51,6 +57,19 @@ export class UmbTemplateRepository } // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'template-root', + name: 'Templates', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } async requestRootTreeItems() { await this.#init; @@ -65,12 +84,9 @@ export class UmbTemplateRepository } async requestTreeItemsOf(parentId: string | null) { + if (parentId === undefined) throw new Error('Parent id is missing'); await this.#init; - if (!parentId) { - throw new Error('Parent id is missing'); - } - const { data, error } = await this.#treeDataSource.getChildrenOf(parentId); if (data) { @@ -102,7 +118,7 @@ export class UmbTemplateRepository return this.#treeStore!.childrenOf(parentId); } - async itemsLegacy(ids: Array) { + async itemsLegacy(ids: Array) { await this.#init; return this.#treeStore!.items(ids); } @@ -110,14 +126,9 @@ export class UmbTemplateRepository // DETAILS: async createScaffold(parentId: string | null) { + if (parentId === undefined) throw new Error('Parent id is missing'); await this.#init; - - if (!parentId) { - throw new Error('Parent id is missing'); - } - - // TODO: add parent id to create scaffold - return this.#detailDataSource.createScaffold(); + return this.#detailDataSource.createScaffold(parentId); } async requestById(id: string) { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/tree/manifests.ts index 466a222f9d..9227519e44 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/tree/manifests.ts @@ -16,7 +16,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.Template', name: 'Template Tree Item', conditions: { - entityType: 'template', + entityTypes: ['template-root', 'template'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts index 89983e09f5..4c034d9f1f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts @@ -50,7 +50,7 @@ export class UmbTemplateWorkspaceContext extends UmbWorkspaceContext diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/manifests.ts index fc79433c06..298a7d48fa 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/manifests.ts @@ -22,7 +22,7 @@ const entityActions: Array = [ api: UmbCreateDictionaryEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -37,7 +37,7 @@ const entityActions: Array = [ api: UmbMoveEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -52,7 +52,7 @@ const entityActions: Array = [ api: UmbExportDictionaryEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -67,7 +67,7 @@ const entityActions: Array = [ api: UmbImportDictionaryEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -82,7 +82,7 @@ const entityActions: Array = [ api: UmbReloadDictionaryEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, { @@ -97,7 +97,7 @@ const entityActions: Array = [ api: UmbDeleteEntityAction, }, conditions: { - entityType, + entityTypes: [entityType], }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/menu-item/dictionary-menu-item.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/menu-item/dictionary-menu-item.element.ts index e12c1f7865..b3af10f851 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/menu-item/dictionary-menu-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/menu-item/dictionary-menu-item.element.ts @@ -5,7 +5,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-dictionary-menu-item') export class UmbDictionaryMenuItemElement extends UmbLitElement { render() { - return html``; + return html``; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/dictionary.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/dictionary.repository.ts index 204653d4c0..a0888476de 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/dictionary.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/dictionary.repository.ts @@ -8,6 +8,7 @@ import { UmbTreeDataSource, UmbDetailRepository, UmbTreeRepository } from '@umbr import { CreateDictionaryItemRequestModel, DictionaryOverviewResponseModel, + EntityTreeItemResponseModel, ImportDictionaryRequestModel, UpdateDictionaryItemRequestModel, } from '@umbraco-cms/backoffice/backend-api'; @@ -15,7 +16,7 @@ import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco export class UmbDictionaryRepository implements - UmbTreeRepository, + UmbTreeRepository, UmbDetailRepository< CreateDictionaryItemRequestModel, any, @@ -57,6 +58,21 @@ export class UmbDictionaryRepository ]); } + // TREE: + async requestTreeRoot() { + await this.#init; + + const data = { + id: null, + type: 'dictionary-root', + name: 'Dictionary', + icon: 'umb:folder', + hasChildren: true, + }; + + return { data }; + } + async requestRootTreeItems() { await this.#init; @@ -70,12 +86,9 @@ export class UmbDictionaryRepository } async requestTreeItemsOf(parentId: string | null) { + if (parentId === undefined) throw new Error('Parent id is missing'); await this.#init; - if (!parentId) { - throw new Error('Parent id is missing'); - } - const { data, error } = await this.#treeSource.getChildrenOf(parentId); if (data) { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts index 58a3a71d71..4a3ee66d11 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts @@ -37,16 +37,20 @@ export class UmbDictionaryTreeServerDataSource implements UmbTreeDataSource { * @memberof UmbDictionaryTreeServerDataSource */ async getChildrenOf(parentId: string | null) { - if (!parentId) { - throw new Error('Parent id is missing'); - } + if (parentId === undefined) throw new Error('Parent id is missing'); - return tryExecuteAndNotify( - this.#host, - DictionaryResource.getTreeDictionaryChildren({ - parentId, - }) - ); + /* TODO: should we make getRootItems() internal + so it only is a server concern that there are two endpoints? */ + if (parentId === null) { + return this.getRootItems(); + } else { + return tryExecuteAndNotify( + this.#host, + DictionaryResource.getTreeDictionaryChildren({ + parentId, + }) + ); + } } /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/tree/manifests.ts index dcfeba9411..53c551380b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/tree/manifests.ts @@ -16,7 +16,7 @@ const treeItem: ManifestTreeItem = { alias: 'Umb.TreeItem.DictionaryItem', name: 'Dictionary Item Tree Item', conditions: { - entityType: 'dictionary-item', + entityTypes: ['dictionary-root', 'dictionary-item'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts index fbe98cc14f..a8a2fbd01a 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts @@ -44,26 +44,32 @@ export class UmbEntityData extends UmbData { return saveItem; } - move(ids: Array, destinationKey: string) { - const destinationItem = this.getById(destinationKey); - if (!destinationItem) throw new Error(`Destination item with key ${destinationKey} not found`); + move(ids: Array, destinationId: string | null) { + if (destinationId === undefined) throw new Error('Destination Id is missing'); + + if (destinationId !== null) { + const destinationItem = this.getById(destinationId); + if (!destinationItem) throw new Error(`Destination item with key ${destinationId} not found`); + } const items = this.getByIds(ids); const movedItems = items.map((item) => { return { ...item, - parentId: destinationKey, + parentId: destinationId, }; }); movedItems.forEach((movedItem) => this.updateData(movedItem)); - destinationItem.hasChildren = true; - this.updateData(destinationItem); } - copy(ids: Array, destinationKey: string) { - const destinationItem = this.getById(destinationKey); - if (!destinationItem) throw new Error(`Destination item with key ${destinationKey} not found`); + copy(ids: Array, destinationId: string | null) { + if (destinationId === undefined) throw new Error('Destination Id is missing'); + + if (destinationId !== null) { + const destinationItem = this.getById(destinationId); + if (!destinationItem) throw new Error(`Destination item with key ${destinationId} not found`); + } // TODO: Notice we don't add numbers to the 'copy' name. const items = this.getByIds(ids); @@ -72,16 +78,13 @@ export class UmbEntityData extends UmbData { ...item, name: item.name + ' Copy', id: UmbId.new(), - parentId: destinationKey, + parentId: destinationId, }; }); copyItems.forEach((copyItem) => this.insert(copyItem)); const newIds = copyItems.map((item) => item.id); - destinationItem.hasChildren = true; - this.updateData(destinationItem); - return newIds; } diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts index 44e767b23b..99fbbf8c20 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts @@ -5,8 +5,8 @@ import { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel, TemplateResponseModel, - TemplateModelBaseModel, TemplateScaffoldResponseModel, + CreateTemplateRequestModel, } from '@umbraco-cms/backoffice/backend-api'; type TemplateDBItem = TemplateResponseModel & EntityTreeItemResponseModel; @@ -98,7 +98,7 @@ class UmbTemplateData extends UmbEntityData { }; } - create(templateData: TemplateModelBaseModel) { + create(templateData: CreateTemplateRequestModel) { const template = { $type: '', id: UmbId.new(), diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/utils.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/utils.ts index 527d5c6304..c8d4d90e76 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/utils.ts @@ -8,6 +8,7 @@ import type { DocumentResponseModel, FileSystemTreeItemPresentationModel, } from '@umbraco-cms/backoffice/backend-api'; +import { template } from 'lodash-es'; export const createEntityTreeItem = (item: any): EntityTreeItemResponseModel => { return { @@ -64,7 +65,11 @@ export const createDocumentTypeTreeItem = (item: DocumentTypeResponseModel): Doc export const createFileSystemTreeItem = (item: any): FileSystemTreeItemPresentationModel => { return { - ...createFolderTreeItem(item), + name: item.name, + type: item.type, + icon: item.icon, + hasChildren: item.hasChildren, path: item.path, + isFolder: item.isFolder, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts index 55e73ea95b..735673a0a4 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts @@ -1,7 +1,7 @@ import { rest } from 'msw'; import { umbTemplateData } from '../data/template.data'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; -import { TemplateModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import { CreateTemplateRequestModel, UpdateTemplateRequestModel } from '@umbraco-cms/backoffice/backend-api'; // TODO: add schema export const handlers = [ @@ -42,7 +42,7 @@ export const handlers = [ return res(ctx.status(200), ctx.json(response)); }), - rest.put(umbracoPath('/template/:id'), async (req, res, ctx) => { + rest.put(umbracoPath('/template/:id'), async (req, res, ctx) => { const id = req.params.id as string; const data = await req.json(); if (!id) return; @@ -51,7 +51,7 @@ export const handlers = [ return res(ctx.status(200)); }), - rest.post(umbracoPath('/template'), async (req, res, ctx) => { + rest.post(umbracoPath('/template'), async (req, res, ctx) => { const data = await req.json(); if (!data) return; diff --git a/src/Umbraco.Web.UI.Client/src/stories/extending/entity-actions.mdx b/src/Umbraco.Web.UI.Client/src/stories/extending/entity-actions.mdx index eb9fe3121d..6d814db657 100644 --- a/src/Umbraco.Web.UI.Client/src/stories/extending/entity-actions.mdx +++ b/src/Umbraco.Web.UI.Client/src/stories/extending/entity-actions.mdx @@ -70,7 +70,7 @@ const manifest = { api: MyEntityAction, }, conditions: { - entityType: 'my-entity', + entityTypes: ['my-entity'], }, }; From 5a98aff39dfd259ffa2fd4c9aa1d12a02c36df01 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 10:34:09 +0200 Subject: [PATCH 06/18] Chore: Move workspace context (#675) * move workspace context * Update document-type-workspace.context.ts * fix duplicate import --- .../libs/workspace/context/index.ts | 1 + .../workspace/context}/workspace-context.ts | 2 +- .../workspace/document-type-workspace.context.ts | 5 ++--- .../documents/workspace/document-workspace.context.ts | 4 ++-- .../workspace/media-type-workspace.context.ts | 3 +-- .../media/media/workspace/media-workspace.context.ts | 3 +-- .../workspace/member-group-workspace.context.ts | 3 +-- .../workspace/member-type-workspace.context.ts | 3 +-- .../members/workspace/member-workspace.context.ts | 3 +-- .../data-types/workspace/data-type-workspace.context.ts | 3 +-- .../workspace/language/language-workspace.context.ts | 3 +-- .../workspace/relation-type-workspace.context.ts | 4 +--- .../workspace/stylesheet-workspace.context.ts | 2 +- .../templates/workspace/template-workspace.context.ts | 2 +- .../dictionary/workspace/dictionary-workspace.context.ts | 3 +-- .../workspace/user-group-workspace.context.ts | 3 +-- .../users/users/workspace/user-workspace.context.ts | 9 ++------- 17 files changed, 20 insertions(+), 36 deletions(-) rename src/Umbraco.Web.UI.Client/{src/backoffice/shared/components/workspace/workspace-context => libs/workspace/context}/workspace-context.ts (94%) diff --git a/src/Umbraco.Web.UI.Client/libs/workspace/context/index.ts b/src/Umbraco.Web.UI.Client/libs/workspace/context/index.ts index 8bcfcfdd5c..b41a1dc655 100644 --- a/src/Umbraco.Web.UI.Client/libs/workspace/context/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/workspace/context/index.ts @@ -1,2 +1,3 @@ export * from './workspace-context.interface'; export * from './workspace-entity-context.interface'; +export * from './workspace-context'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-context.ts b/src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts similarity index 94% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-context.ts rename to src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts index 05d6a77a39..91d1f863c7 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-context/workspace-context.ts +++ b/src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts @@ -1,4 +1,4 @@ -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface } from './workspace-entity-context.interface'; import { UmbContextProviderController, UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts index 778677df4f..a5021b4e79 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.context.ts @@ -1,7 +1,6 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; -import { UmbDocumentTypeRepository } from '../repository/document-type.repository'; import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbDocumentTypeRepository } from '../repository/document-type.repository'; +import { UmbWorkspaceContext, UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; import type { ContentTypeCompositionModel, ContentTypeSortModel, 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 7bffb71342..f49171eded 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 @@ -1,10 +1,10 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; +import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; import { UmbDocumentRepository } from '../repository/document.repository'; import { UmbDocumentTypeRepository } from '../../document-types/repository/document-type.repository'; import { UmbWorkspaceVariableEntityContextInterface } from '../../../shared/components/workspace/workspace-context/workspace-variable-entity-context.interface'; import { UmbVariantId } from '../../../shared/variants/variant-id.class'; import { UmbWorkspaceSplitViewManager } from '../../../shared/components/workspace/workspace-context/workspace-split-view-manager.class'; -import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; +import { UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { CreateDocumentRequestModel, DocumentResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { partialUpdateFrozenArray, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts index 921a41b6b1..642a52ce13 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts @@ -1,6 +1,5 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbMediaTypeRepository } from '../repository/media-type.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts index 9e50b63768..01d8d3059c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.context.ts @@ -1,7 +1,6 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbMediaRepository } from '../repository/media.repository'; import type { MediaDetails } from '../'; -import type { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts index bf8f38eb1e..fee370fcf1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts @@ -1,6 +1,5 @@ -import { UmbWorkspaceContext } from '../../../../backoffice/shared/components/workspace/workspace-context/workspace-context'; import { UmbMemberGroupRepository } from '../repository/member-group.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.context.ts index 9acaa2b9f7..69c6112466 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.context.ts @@ -1,6 +1,5 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbMemberTypeRepository } from '../repository/member-type.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts index 3edd6f8b1e..3bdc4b5402 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts @@ -1,6 +1,5 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbMemberRepository } from '../repository/member.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { MemberDetails } from '@umbraco-cms/backoffice/models'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.context.ts index 33d7922fc0..43edc09928 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.context.ts @@ -1,6 +1,5 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbDataTypeRepository } from '../repository/data-type.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { DataTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { appendToFrozenArray, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.context.ts index 388c828199..c9ad452414 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.context.ts @@ -1,6 +1,5 @@ import { UmbLanguageRepository } from '../../repository/language.repository'; -import { UmbWorkspaceContext } from '../../../../shared/components/workspace/workspace-context/workspace-context'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { ApiError, LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.context.ts index 3c87efd4c2..6d88f815d3 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.context.ts @@ -1,8 +1,6 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbRelationTypeRepository } from '../repository/relation-type.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { RelationTypeBaseModel, RelationTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; - import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.context.ts index e92b3f643f..5423c4c8f5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.context.ts @@ -1,6 +1,6 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbStylesheetRepository } from '../repository/stylesheet.repository'; import { StylesheetDetails } from '..'; +import { UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts index 4c034d9f1f..1f4acaf4d3 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/workspace/template-workspace.context.ts @@ -1,5 +1,5 @@ import { UmbTemplateRepository } from '../repository/template.repository'; -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; +import { UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { createObservablePart, UmbDeepState } from '@umbraco-cms/backoffice/observable-api'; import { TemplateResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.context.ts index 3a1115d880..370726393b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.context.ts @@ -1,6 +1,5 @@ import { UmbDictionaryRepository } from '../repository/dictionary.repository'; -import { UmbWorkspaceContext } from '../../../../backoffice/shared/components/workspace/workspace-context/workspace-context'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { DictionaryItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts index 19a5fe183b..56d90dbb55 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts @@ -1,8 +1,7 @@ import { UmbEntityWorkspaceManager } from '../../../shared/components/workspace/workspace-context/entity-manager-controller'; -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UMB_USER_GROUP_STORE_CONTEXT_TOKEN } from '../repository/user-group.store'; import { UmbUserGroupRepository } from '../repository/user-group.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.context.ts index b305057f64..9af006a7fb 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.context.ts @@ -1,12 +1,7 @@ -import { UmbWorkspaceContext } from '../../../shared/components/workspace/workspace-context/workspace-context'; import { UmbUserRepository } from '../repository/user.repository'; -import { UmbEntityWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; -import { - UpdateUserGroupRequestModel, - UpdateUserRequestModel, - UserResponseModel, -} from '@umbraco-cms/backoffice/backend-api'; +import { UpdateUserRequestModel, UserResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; export class UmbUserWorkspaceContext From 1a63b34fc05cee3f5f1a0436ae1e47f00ef7004f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 10:47:29 +0200 Subject: [PATCH 07/18] Feature: Section lib (#678) create section lib --- src/Umbraco.Web.UI.Client/libs/section/index.ts | 2 ++ .../shared/components => libs}/section/section.context.ts | 2 +- .../section/sidebar}/section-sidebar.context.ts | 0 .../components/backoffice-frame/backoffice-main.element.ts | 2 +- .../menu/menu-item-base/menu-item-base.element.ts | 5 +++-- .../section-sidebar-context-menu.element.ts | 5 +---- .../section/section-sidebar/section-sidebar.element.ts | 6 ++---- .../section/section-views/section-views.element.ts | 2 +- .../tree/tree-item-base/tree-item-base.context.ts | 7 ++----- .../dictionary/entity-actions/create/create.action.ts | 5 +---- src/Umbraco.Web.UI.Client/tsconfig.json | 1 + src/Umbraco.Web.UI.Client/web-test-runner.config.mjs | 1 + 12 files changed, 16 insertions(+), 22 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/libs/section/index.ts rename src/Umbraco.Web.UI.Client/{src/backoffice/shared/components => libs}/section/section.context.ts (92%) rename src/Umbraco.Web.UI.Client/{src/backoffice/shared/components/section/section-sidebar => libs/section/sidebar}/section-sidebar.context.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/libs/section/index.ts b/src/Umbraco.Web.UI.Client/libs/section/index.ts new file mode 100644 index 0000000000..637a13e6c1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/section/index.ts @@ -0,0 +1,2 @@ +export * from './sidebar/section-sidebar.context'; +export * from './section.context'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.context.ts b/src/Umbraco.Web.UI.Client/libs/section/section.context.ts similarity index 92% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.context.ts rename to src/Umbraco.Web.UI.Client/libs/section/section.context.ts index 628062ceb0..805092697b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.context.ts +++ b/src/Umbraco.Web.UI.Client/libs/section/section.context.ts @@ -1,6 +1,6 @@ import type { ManifestSection } from '@umbraco-cms/backoffice/extensions-registry'; import type { Entity } from '@umbraco-cms/backoffice/models'; -import { UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export type ActiveTreeItemType = Entity | undefined; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.context.ts b/src/Umbraco.Web.UI.Client/libs/section/sidebar/section-sidebar.context.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.context.ts rename to src/Umbraco.Web.UI.Client/libs/section/sidebar/section-sidebar.context.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts index d7667182d5..be22b5eeca 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts @@ -2,7 +2,7 @@ import { defineElement } from '@umbraco-ui/uui-base/lib/registration'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { state } from 'lit/decorators.js'; -import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section/section.context'; +import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/section'; import { UmbBackofficeContext, UMB_BACKOFFICE_CONTEXT_TOKEN } from './backoffice.context'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; import type { UmbRouterSlotChangeEvent } from '@umbraco-cms/internal/router'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts index ccb44351e5..13a845878e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/menu/menu-item-base/menu-item-base.element.ts @@ -3,11 +3,12 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, property, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { map } from 'rxjs'; -import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../../section/section.context'; import { UmbSectionSidebarContext, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN, -} from '../../section/section-sidebar/section-sidebar.context'; + UmbSectionContext, + UMB_SECTION_CONTEXT_TOKEN, +} from '@umbraco-cms/backoffice/section'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { ManifestEntityAction } from '@umbraco-cms/backoffice/extensions-registry'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts index fff6c340a3..da011111ce 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar-context-menu/section-sidebar-context-menu.element.ts @@ -2,10 +2,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; -import { - UmbSectionSidebarContext, - UMB_SECTION_SIDEBAR_CONTEXT_TOKEN, -} from '../section-sidebar/section-sidebar.context'; +import { UmbSectionSidebarContext, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/section'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-section-sidebar-context-menu') diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.element.ts index 1c68f2e5ff..3b4795cc0c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-sidebar/section-sidebar.element.ts @@ -1,7 +1,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement } from 'lit/decorators.js'; -import { UmbSectionSidebarContext, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN } from './section-sidebar.context'; +import { UmbSectionSidebarContext, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/section'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import '../../tree/context-menu/tree-context-menu.service'; @@ -9,8 +9,6 @@ import '../section-sidebar-context-menu/section-sidebar-context-menu.element'; @customElement('umb-section-sidebar') export class UmbSectionSidebarElement extends UmbLitElement { - - #sectionSidebarContext = new UmbSectionSidebarContext(this); constructor() { @@ -27,7 +25,7 @@ export class UmbSectionSidebarElement extends UmbLitElement { `; } - + static styles = [ UUITextStyles, css` 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 81b12d7fe9..f9d8e825f1 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 @@ -2,7 +2,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html, nothing } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { map, of } from 'rxjs'; -import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section.context'; +import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/section'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import type { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts index 3ae5a626d6..d3a7bafd82 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/tree/tree-item-base/tree-item-base.context.ts @@ -1,9 +1,6 @@ import { map } from 'rxjs'; -import { - UmbSectionSidebarContext, - UMB_SECTION_SIDEBAR_CONTEXT_TOKEN, -} from '../../section/section-sidebar/section-sidebar.context'; -import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../../section/section.context'; +import { UMB_SECTION_CONTEXT_TOKEN, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/section'; +import type { UmbSectionContext, UmbSectionSidebarContext } from '@umbraco-cms/backoffice/section'; import { UmbTreeContextBase } from '../tree.context'; import { UmbTreeItemContext } from '../tree-item.context.interface'; import { ManifestEntityAction } from '@umbraco-cms/backoffice/extensions-registry'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/create/create.action.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/create/create.action.ts index 34bb2459bf..60a2802039 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/create/create.action.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/entity-actions/create/create.action.ts @@ -1,9 +1,6 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; +import { UmbSectionSidebarContext, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/section'; import { UmbDictionaryRepository } from '../../repository/dictionary.repository'; -import { - UmbSectionSidebarContext, - UMB_SECTION_SIDEBAR_CONTEXT_TOKEN, -} from '../../../../../backoffice/shared/components/section/section-sidebar/section-sidebar.context'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index b671e95bed..525b98b901 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -44,6 +44,7 @@ "@umbraco-cms/backoffice/picker-input": ["libs/picker-input"], "@umbraco-cms/backoffice/id": ["libs/id"], "@umbraco-cms/backoffice/collection": ["libs/collection"], + "@umbraco-cms/backoffice/section": ["libs/section"], "@umbraco-cms/internal/lit-element": ["src/core/lit-element"], "@umbraco-cms/internal/modal": ["src/core/modal"], "@umbraco-cms/internal/router": ["src/core/router"], 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 0b10a7d1a2..54f0fbbeae 100644 --- a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs +++ b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs @@ -60,6 +60,7 @@ export default { '@umbraco-cms/backoffice/picker-input': './libs/picker-input/index.ts', '@umbraco-cms/backoffice/id': './libs/id/index.ts', '@umbraco-cms/backoffice/collection': './libs/collection/index.ts', + '@umbraco-cms/backoffice/section': './libs/section/index.ts', '@umbraco-cms/internal/lit-element': './src/core/lit-element/index.ts', '@umbraco-cms/internal/modal': './src/core/modal/index.ts', '@umbraco-cms/internal/router': './src/core/router/index.ts', From f7f2da7659cc3c8f0cc563daa6c94924ab7536ba Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 11:04:52 +0200 Subject: [PATCH 08/18] Chore: Cleanup of Generic models lib (#681) * move collection filter model to collection lib * move temp member type details * move temp user group details model * move user details model out of models lib * move document blue print out of models * fix import paths * use relative import paths * move member details out of models * move more models out of core models file * fix import path * Prefix * remove entity type * add null check * typescript fixes * move tree interfaces to tree lib * fix import order --------- Co-authored-by: Nathan Woulfe --- .../collection-filter-model.interface.ts | 5 + .../libs/collection/collection.context.ts | 4 +- .../libs/collection/index.ts | 1 + .../token/entity-workspace-context.token.ts | 4 +- .../libs/modal/modal.interfaces.ts | 4 +- .../token/user-group-picker-modal.token.ts | 12 +- .../libs/models/index.ts | 119 +----------------- .../repository/tree-repository.interface.ts | 2 +- .../libs/section/section.context.ts | 3 - src/Umbraco.Web.UI.Client/libs/tree/index.ts | 14 +++ .../workspace/context/workspace-context.ts | 4 +- .../document-blueprint.detail.store.ts | 2 +- .../documents/document-blueprints/types.ts | 11 ++ .../repository/media-type.detail.store.ts | 2 +- .../repository/media-type.repository.ts | 2 +- .../sources/media-type.detail.server.data.ts | 2 +- ...edia-type.details.server.data.interface.ts | 2 +- .../src/backoffice/media/media-types/types.ts | 7 ++ .../workspace/media-type-workspace.context.ts | 2 +- .../repository/member-group.repository.ts | 2 +- .../repository/member-group.store.ts | 2 +- .../member-group.detail.server.data.ts | 2 +- .../backoffice/members/member-groups/types.ts | 5 + .../member-group-workspace-edit.element.ts | 4 +- .../member-group-workspace.context.ts | 2 +- ...orkspace-view-member-group-info.element.ts | 6 +- .../repository/member-type.repository.ts | 2 +- .../repository/member-type.store.ts | 2 +- .../sources/member-type.detail.server.data.ts | 2 +- .../backoffice/members/member-types/types.ts | 7 ++ .../members/members/member.detail.store.ts | 4 +- .../members/repository/member.store.ts | 2 +- .../src/backoffice/members/members/types.ts | 5 + .../workspace/member-workspace.context.ts | 2 +- ...installed-packages-section-view.element.ts | 2 +- .../packages/repository/package.store.ts | 2 +- .../src/backoffice/packages/types.ts | 9 ++ .../input-color-picker.element.ts | 8 +- .../input-list-base/input-list-base.ts | 4 +- ...property-editor-ui-color-picker.element.ts | 6 +- .../repository/stylesheet.repository.ts | 2 +- .../current-user-header-app.element.ts | 8 +- .../users/current-user/current-user.store.ts | 4 +- .../current-user-modal.element.ts | 4 +- .../backoffice/users/current-user/types.ts | 22 ++++ .../user-profile-app-profile.element.ts | 4 +- .../src/backoffice/users/index.ts | 1 + .../users/user-groups/components/index.ts | 1 + .../input-user-group.element.ts | 20 ++- .../input-user-group.stories.ts | 0 .../input-user-group/input-user-group.test.ts | 0 .../src/backoffice/users/user-groups/index.ts | 1 + .../user-group-picker-modal.element.ts | 4 +- .../repository/user-group.store.ts | 13 +- .../src/backoffice/users/user-groups/types.ts | 13 ++ .../user-group-workspace-edit.element.ts | 2 +- .../workspace/user-group-workspace.context.ts | 2 +- .../workspace-view-user-groups.element.ts | 8 +- .../user-table-collection-view.element.ts | 6 +- .../create-user/create-user-modal.element.ts | 2 +- .../invite-user/invite-user-modal.element.ts | 2 +- .../src/backoffice/users/users/types.ts | 1 + .../workspace/user-workspace-edit.element.ts | 3 +- .../users/workspace/user-workspace.element.ts | 2 +- .../src/core/mocks/data/data-type.data.ts | 15 ++- .../mocks/data/document-blueprint.data.ts | 2 +- .../src/core/mocks/data/entity-tree.data.ts | 52 ++++++++ .../src/core/mocks/data/entity.data.ts | 70 +++-------- .../src/core/mocks/data/media-type.data.ts | 2 +- .../src/core/mocks/data/media.data.ts | 7 ++ .../src/core/mocks/data/member-group.data.ts | 2 +- .../src/core/mocks/data/member-type.data.ts | 2 +- .../src/core/mocks/data/member.data.ts | 2 +- .../src/core/mocks/data/user-groups.data.ts | 12 +- .../core/mocks/domains/manifests.handlers.ts | 2 +- .../mocks/domains/user-groups.handlers.ts | 10 +- .../src/core/mocks/domains/users.handlers.ts | 84 ------------- .../core/modal/modal-element-picker-base.ts | 23 ++-- src/Umbraco.Web.UI.Client/tsconfig.json | 4 + .../web-test-runner.config.mjs | 4 + 80 files changed, 297 insertions(+), 403 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/libs/collection/collection-filter-model.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/tree/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/members/members/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/packages/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => users/user-groups}/components/input-user-group/input-user-group.element.ts (86%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => users/user-groups}/components/input-user-group/input-user-group.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => users/user-groups}/components/input-user-group/input-user-group.test.ts (100%) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/types.ts create mode 100644 src/Umbraco.Web.UI.Client/src/core/mocks/data/entity-tree.data.ts diff --git a/src/Umbraco.Web.UI.Client/libs/collection/collection-filter-model.interface.ts b/src/Umbraco.Web.UI.Client/libs/collection/collection-filter-model.interface.ts new file mode 100644 index 0000000000..4f3c2f915b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/collection/collection-filter-model.interface.ts @@ -0,0 +1,5 @@ +export interface UmbCollectionFilterModel { + skip?: number; + take?: number; + filter?: string; +} diff --git a/src/Umbraco.Web.UI.Client/libs/collection/collection.context.ts b/src/Umbraco.Web.UI.Client/libs/collection/collection.context.ts index 6f0ae47adc..7c50ee9451 100644 --- a/src/Umbraco.Web.UI.Client/libs/collection/collection.context.ts +++ b/src/Umbraco.Web.UI.Client/libs/collection/collection.context.ts @@ -8,10 +8,10 @@ import { } from '@umbraco-cms/backoffice/observable-api'; import { umbExtensionsRegistry, createExtensionClass } from '@umbraco-cms/backoffice/extensions-api'; import { UmbCollectionRepository } from '@umbraco-cms/backoffice/repository'; -import type { UmbFilterModel } from '@umbraco-cms/backoffice/models'; +import type { UmbCollectionFilterModel } from '@umbraco-cms/backoffice/collection'; // TODO: Clean up the need for store as Media has switched to use Repositories(repository). -export class UmbCollectionContext { +export class UmbCollectionContext { private _host: UmbControllerHostElement; private _entityType: string | null; diff --git a/src/Umbraco.Web.UI.Client/libs/collection/index.ts b/src/Umbraco.Web.UI.Client/libs/collection/index.ts index 7dc5e58379..764134199c 100644 --- a/src/Umbraco.Web.UI.Client/libs/collection/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/collection/index.ts @@ -1 +1,2 @@ export * from './collection.context'; +export * from './collection-filter-model.interface'; diff --git a/src/Umbraco.Web.UI.Client/libs/context-api/token/entity-workspace-context.token.ts b/src/Umbraco.Web.UI.Client/libs/context-api/token/entity-workspace-context.token.ts index 52a66be29b..b112693baf 100644 --- a/src/Umbraco.Web.UI.Client/libs/context-api/token/entity-workspace-context.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/context-api/token/entity-workspace-context.token.ts @@ -1,7 +1,7 @@ import { UmbEntityWorkspaceContextInterface } from '../../workspace/context/workspace-entity-context.interface'; import { UmbContextToken } from './context-token'; -import type { BaseEntity } from '@umbraco-cms/backoffice/models'; +import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; -export const UMB_ENTITY_WORKSPACE_CONTEXT = new UmbContextToken>( +export const UMB_ENTITY_WORKSPACE_CONTEXT = new UmbContextToken>( 'UmbEntityWorkspaceContext' ); diff --git a/src/Umbraco.Web.UI.Client/libs/modal/modal.interfaces.ts b/src/Umbraco.Web.UI.Client/libs/modal/modal.interfaces.ts index a31868a946..bcc2f9ad6d 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/modal.interfaces.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/modal.interfaces.ts @@ -1,9 +1,9 @@ export interface UmbPickerModalData { multiple: boolean; - selection: Array; + selection: Array; filter?: (item: T) => boolean; } export interface UmbPickerModalResult { - selection: Array; + selection: Array; } diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/user-group-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/user-group-picker-modal.token.ts index 4264345e24..f378843285 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/user-group-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/user-group-picker-modal.token.ts @@ -1,10 +1,6 @@ -import type { UserDetails } from '@umbraco-cms/backoffice/models'; import { UmbModalToken, UmbPickerModalData } from '@umbraco-cms/backoffice/modal'; -export const UMB_USER_GROUP_PICKER_MODAL = new UmbModalToken>( - 'Umb.Modal.UserGroupPicker', - { - type: 'sidebar', - size: 'small', - } -); +export const UMB_USER_GROUP_PICKER_MODAL = new UmbModalToken>('Umb.Modal.UserGroupPicker', { + type: 'sidebar', + size: 'small', +}); diff --git a/src/Umbraco.Web.UI.Client/libs/models/index.ts b/src/Umbraco.Web.UI.Client/libs/models/index.ts index 4b16ebba15..d2fccc54c2 100644 --- a/src/Umbraco.Web.UI.Client/libs/models/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/models/index.ts @@ -1,131 +1,16 @@ -import type { - EntityTreeItemResponseModel, - FolderTreeItemResponseModel, - PackageManifestResponseModel, -} from '@umbraco-cms/backoffice/backend-api'; - // eslint-disable-next-line @typescript-eslint/no-explicit-any export type HTMLElementConstructor = new (...args: any[]) => T; // eslint-disable-next-line @typescript-eslint/no-explicit-any export type ClassConstructor = new (...args: any[]) => T; -// Users -// TODO: would the right name be Node? as entity is just something with a Key. But node is something in a content structure, aka. with hasChildren and parentId. -export interface Entity { - id: string; - name: string; - icon: string; - type: string; - hasChildren: boolean; - parentId: string | null; -} - /** Tried to find a common base of our entities — used by Entity Workspace Context */ -export type BaseEntity = { +export type UmbEntityBase = { id?: string; - //alias?: string; name?: string; - //icon?: string; - //properties?: Array; }; -export interface UserEntity extends Entity { - type: 'user'; -} - -export type UserStatus = 'enabled' | 'inactive' | 'invited' | 'disabled'; -export interface UserDetails extends UserEntity { - email: string; - status: UserStatus; - language: string; - lastLoginDate?: string; - lastLockoutDate?: string; - lastPasswordChangeDate?: string; - updateDate: string; - createDate: string; - failedLoginAttempts: number; - userGroups: Array; - contentStartNodes: Array; - mediaStartNodes: Array; -} - -export interface UserGroupEntity extends Entity { - type: 'user-group'; -} - -export interface UserGroupDetails extends UserGroupEntity { - sections: Array; - contentStartNode?: string; - mediaStartNode?: string; - permissions: Array; -} - -// TODO: Make sure Entity Type/interface. -export interface MemberTypeDetails extends EntityTreeItemResponseModel { - id: string; // TODO: Remove this when the backend is fixed - alias: string; - properties: []; -} - -// Media Types - -export interface MediaTypeDetails extends FolderTreeItemResponseModel { - id: string; // TODO: Remove this when the backend is fixed - alias: string; - properties: []; -} - -// Member Groups -export interface MemberGroupDetails extends EntityTreeItemResponseModel { - id: string; // TODO: Remove this when the backend is fixed -} - -export interface MemberDetails extends EntityTreeItemResponseModel { - id: string; // TODO: Remove this when the backend is fixed -} - -// Document Blueprint -export interface DocumentBlueprintDetails { - id: string; - name: string; - type: 'document-blueprint'; - properties: Array; - data: Array; - icon: string; - documentTypeKey: string; -} - -export interface SwatchDetails { +export interface UmbSwatchDetails { label: string; value: string; } - -export type UmbPackage = PackageManifestResponseModel; - -export type PackageManifestResponse = UmbPackage[]; - -export type UmbPackageWithMigrationStatus = UmbPackage & { - hasPendingMigrations: boolean; -}; - -export interface UmbFilterModel { - skip?: number; - take?: number; - filter?: string; -} - -export interface UmbTreeRootModel { - type: string; - name: string; - hasChildren: boolean; - icon?: string; -} - -export interface UmbTreeRootEntityModel extends UmbTreeRootModel { - id: string | null; -} - -export interface UmbTreeRootFileSystemModel extends UmbTreeRootModel { - path: string | null; -} diff --git a/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts b/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts index c267d1730a..edb3221f33 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/tree-repository.interface.ts @@ -1,6 +1,6 @@ import type { Observable } from 'rxjs'; +import type { UmbTreeRootEntityModel, UmbTreeRootModel } from '@umbraco-cms/backoffice/tree'; import { ProblemDetailsModel, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbTreeRootEntityModel, UmbTreeRootModel } from '@umbraco-cms/backoffice/models'; export interface UmbPagedData { total: number; diff --git a/src/Umbraco.Web.UI.Client/libs/section/section.context.ts b/src/Umbraco.Web.UI.Client/libs/section/section.context.ts index 805092697b..1102488443 100644 --- a/src/Umbraco.Web.UI.Client/libs/section/section.context.ts +++ b/src/Umbraco.Web.UI.Client/libs/section/section.context.ts @@ -1,10 +1,7 @@ import type { ManifestSection } from '@umbraco-cms/backoffice/extensions-registry'; -import type { Entity } from '@umbraco-cms/backoffice/models'; import { UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -export type ActiveTreeItemType = Entity | undefined; - export class UmbSectionContext { #manifestAlias = new UmbStringState(undefined); #manifestPathname = new UmbStringState(undefined); diff --git a/src/Umbraco.Web.UI.Client/libs/tree/index.ts b/src/Umbraco.Web.UI.Client/libs/tree/index.ts new file mode 100644 index 0000000000..dcf04e2366 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/tree/index.ts @@ -0,0 +1,14 @@ +export interface UmbTreeRootModel { + type: string; + name: string; + hasChildren: boolean; + icon?: string; +} + +export interface UmbTreeRootEntityModel extends UmbTreeRootModel { + id: string | null; +} + +export interface UmbTreeRootFileSystemModel extends UmbTreeRootModel { + path: string | null; +} diff --git a/src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts b/src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts index 91d1f863c7..f3113768f9 100644 --- a/src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts +++ b/src/Umbraco.Web.UI.Client/libs/workspace/context/workspace-context.ts @@ -2,14 +2,14 @@ import { UmbEntityWorkspaceContextInterface } from './workspace-entity-context.i import { UmbContextProviderController, UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; -import type { BaseEntity } from '@umbraco-cms/backoffice/models'; +import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; /* TODO: We need to figure out if we like to keep using same alias for all workspace contexts. If so we need to align on a interface that all of these implements. otherwise consumers cant trust the workspace-context. */ -export abstract class UmbWorkspaceContext +export abstract class UmbWorkspaceContext implements UmbEntityWorkspaceContextInterface { public host: UmbControllerHostElement; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/document-blueprint.detail.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/document-blueprint.detail.store.ts index d7efe4701c..60379060ea 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/document-blueprint.detail.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/document-blueprint.detail.store.ts @@ -1,4 +1,4 @@ -import type { DocumentBlueprintDetails } from '@umbraco-cms/backoffice/models'; +import type { DocumentBlueprintDetails } from './types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/types.ts new file mode 100644 index 0000000000..6a7b8c2fbb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-blueprints/types.ts @@ -0,0 +1,11 @@ +// Document Blueprint + +export interface DocumentBlueprintDetails { + id: string; + name: string; + type: 'document-blueprint'; + properties: Array; + data: Array; + icon: string; + documentTypeKey: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.detail.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.detail.store.ts index e258ca33cf..0cb76d18c8 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.detail.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.detail.store.ts @@ -1,8 +1,8 @@ +import type { MediaTypeDetails } from '../types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; /** * @export diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts index dda6267aa8..6ba912bb89 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/media-type.repository.ts @@ -1,10 +1,10 @@ +import type { MediaTypeDetails } from '../types'; import { UmbMediaTypeTreeStore, UMB_MEDIA_TYPE_TREE_STORE_CONTEXT_TOKEN } from './media-type.tree.store'; import { UmbMediaTypeDetailServerDataSource } from './sources/media-type.detail.server.data'; import { UmbMediaTypeStore, UMB_MEDIA_TYPE_STORE_CONTEXT_TOKEN } from './media-type.detail.store'; import { UmbMediaTypeTreeServerDataSource } from './sources/media-type.tree.server.data'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; -import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import { UmbTreeRepository, UmbTreeDataSource } from '@umbraco-cms/backoffice/repository'; import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.detail.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.detail.server.data.ts index c305dde0c0..c577ea6ec3 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.detail.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.detail.server.data.ts @@ -1,6 +1,6 @@ +import type { MediaTypeDetails } from '../../types'; import { MediaTypeDetailDataSource } from './media-type.details.server.data.interface'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; -import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.details.server.data.interface.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.details.server.data.interface.ts index 7da7f1a9b2..535592c31b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.details.server.data.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.details.server.data.interface.ts @@ -1,4 +1,4 @@ -import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; +import type { MediaTypeDetails } from '../../types'; import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; // TODO => Use models when they exist diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/types.ts new file mode 100644 index 0000000000..85e668234e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/types.ts @@ -0,0 +1,7 @@ +import { FolderTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface MediaTypeDetails extends FolderTreeItemResponseModel { + id: string; // TODO: Remove this when the backend is fixed + alias: string; + properties: []; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts index 642a52ce13..2e579bca20 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.context.ts @@ -1,8 +1,8 @@ import { UmbMediaTypeRepository } from '../repository/media-type.repository'; +import type { MediaTypeDetails } from '../types'; import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; -import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; type EntityType = MediaTypeDetails; export class UmbWorkspaceMediaTypeContext diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts index a0c0c3075c..7d19336711 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.repository.ts @@ -1,3 +1,4 @@ +import type { MemberGroupDetails } from '../types'; import { UmbMemberGroupTreeStore, UMB_MEMBER_GROUP_TREE_STORE_CONTEXT_TOKEN } from './member-group.tree.store'; import { UmbMemberGroupDetailServerDataSource } from './sources/member-group.detail.server.data'; import { UmbMemberGroupStore, UMB_MEMBER_GROUP_STORE_CONTEXT_TOKEN } from './member-group.store'; @@ -5,7 +6,6 @@ import { UmbMemberGroupTreeServerDataSource } from './sources/member-group.tree. import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import type { UmbTreeDataSource, UmbDetailRepository, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.store.ts index f5175b7168..029486ae40 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/member-group.store.ts @@ -1,4 +1,4 @@ -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; +import type { MemberGroupDetails } from '../types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.detail.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.detail.server.data.ts index 89c7ee4775..a0c862a2c5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.detail.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.detail.server.data.ts @@ -1,6 +1,6 @@ +import type { MemberGroupDetails } from '../../types'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import { UmbDataSource } from '@umbraco-cms/backoffice/repository'; /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/types.ts new file mode 100644 index 0000000000..9fc89986e2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/types.ts @@ -0,0 +1,5 @@ +import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface MemberGroupDetails extends EntityTreeItemResponseModel { + id: string; // TODO: Remove this when the backend is fixed +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace-edit.element.ts index 1d87666038..964bf53538 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace-edit.element.ts @@ -2,9 +2,9 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UUIInputElement, UUIInputEvent } from '@umbraco-ui/uui'; +import type { MemberGroupDetails } from '../types'; import { UmbWorkspaceMemberGroupContext } from './member-group-workspace.context'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; /** @@ -13,8 +13,6 @@ import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-ap */ @customElement('umb-member-group-workspace-edit') export class UmbMemberGroupWorkspaceEditElement extends UmbLitElement { - - #workspaceContext?: UmbWorkspaceMemberGroupContext; @state() diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts index fee370fcf1..612695ce0d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.context.ts @@ -1,6 +1,6 @@ import { UmbMemberGroupRepository } from '../repository/member-group.repository'; +import type { MemberGroupDetails } from '../types'; import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/views/info/workspace-view-member-group-info.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/views/info/workspace-view-member-group-info.element.ts index 121ffa67f4..7ef7baa0c9 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/views/info/workspace-view-member-group-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/views/info/workspace-view-member-group-info.element.ts @@ -2,14 +2,12 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbWorkspaceMemberGroupContext } from '../../member-group-workspace.context'; -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; +import type { MemberGroupDetails } from '../../../types'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; @customElement('umb-workspace-view-member-group-info') export class UmbWorkspaceViewMemberGroupInfoElement extends UmbLitElement { - - @state() private _memberGroup?: MemberGroupDetails; @@ -58,7 +56,7 @@ export class UmbWorkspaceViewMemberGroupInfoElement extends UmbLitElement { render() { return html` ${this._renderMemberGroupInfo()}${this._renderGeneralInfo()} `; } - + static styles = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts index 44274b0d07..9cf1b99e2c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.repository.ts @@ -1,3 +1,4 @@ +import type { MemberTypeDetails } from '../types'; import { UmbMemberTypeTreeServerDataSource } from './sources/member-type.tree.server.data'; import { UmbMemberTypeTreeStore, UMB_MEMBER_TYPE_TREE_STORE_CONTEXT_TOKEN } from './member-type.tree.store'; import { UmbMemberTypeStore, UMB_MEMBER_TYPE_STORE_CONTEXT_TOKEN } from './member-type.store'; @@ -6,7 +7,6 @@ import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { UmbTreeDataSource, UmbDetailRepository, UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; -import type { MemberTypeDetails } from '@umbraco-cms/backoffice/models'; import { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; // TODO => use correct type when available diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.store.ts index 6c7e895e6a..a5b1edd2bc 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/member-type.store.ts @@ -1,8 +1,8 @@ +import type { MemberTypeDetails } from '../types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -import type { MemberTypeDetails } from '@umbraco-cms/backoffice/models'; /** * @export diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.detail.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.detail.server.data.ts index 2359904e2e..657864c8ec 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.detail.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.detail.server.data.ts @@ -1,6 +1,6 @@ +import type { MemberTypeDetails } from '../../types'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { MemberTypeDetails } from '@umbraco-cms/backoffice/models'; import { UmbDataSource } from '@umbraco-cms/backoffice/repository'; /** diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/types.ts new file mode 100644 index 0000000000..7171aa0b4a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/types.ts @@ -0,0 +1,7 @@ +import type { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface MemberTypeDetails extends EntityTreeItemResponseModel { + id: string; // TODO: Remove this when the backend is fixed + alias: string; + properties: []; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/member.detail.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/member.detail.store.ts index 95520e4d2b..77f778d939 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/member.detail.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/member.detail.store.ts @@ -1,6 +1,6 @@ import { Observable } from 'rxjs'; import { umbMemberData } from '../../../core/mocks/data/member.data'; -import type { MemberDetails, MemberGroupDetails } from '@umbraco-cms/backoffice/models'; +import type { MemberDetails } from './types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbArrayState, createObservablePart } from '@umbraco-cms/backoffice/observable-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; @@ -27,7 +27,7 @@ export class UmbMemberStore extends UmbStoreBase implements UmbEntityDetailStore * @return {*} {(Observable)} * @memberof UmbMemberStore */ - getByKey(id: string): Observable { + getByKey(id: string): Observable { // tryExecuteAndNotify(this.host, MemberResource.getMemberByKey({ id })).then(({ data }) => { // if (data) {} // this.#data.appendOne(data); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.store.ts index 49a7339a76..2cbad03734 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/repository/member.store.ts @@ -1,8 +1,8 @@ +import type { MemberDetails } from '../types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -import type { MemberDetails } from '@umbraco-cms/backoffice/models'; /** * @export diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/types.ts new file mode 100644 index 0000000000..f4b03017ed --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/types.ts @@ -0,0 +1,5 @@ +import type { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface MemberDetails extends EntityTreeItemResponseModel { + id: string; // TODO: Remove this when the backend is fixed +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts index 3bdc4b5402..701d5e66f6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.context.ts @@ -1,6 +1,6 @@ import { UmbMemberRepository } from '../repository/member.repository'; +import type { MemberDetails } from '../types'; import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import type { MemberDetails } from '@umbraco-cms/backoffice/models'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; export class UmbMemberWorkspaceContext 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 87b152a156..0851bf17c6 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 @@ -4,8 +4,8 @@ import { repeat } from 'lit/directives/repeat.js'; import { combineLatest } from 'rxjs'; import { UUITextStyles } from '@umbraco-ui/uui-css'; import { UmbPackageRepository } from '../../../repository/package.repository'; +import type { UmbPackageWithMigrationStatus } from '../../../types'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { UmbPackageWithMigrationStatus } from '@umbraco-cms/backoffice/models'; import './installed-packages-section-view-item.element'; import { UmbSectionViewExtensionElement } from '@umbraco-cms/backoffice/extensions-registry'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/package.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/package.store.ts index 13a9ce6aa9..7a7cf0ff19 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/package.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/repository/package.store.ts @@ -1,8 +1,8 @@ import { ReplaySubject } from 'rxjs'; +import type { UmbPackage } from '../types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; -import type { UmbPackage } from '@umbraco-cms/backoffice/models'; import type { PackageMigrationStatusResponseModel } from '@umbraco-cms/backoffice/backend-api'; import type { ManifestBase } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/types.ts new file mode 100644 index 0000000000..7fc91fa1ee --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/types.ts @@ -0,0 +1,9 @@ +import { PackageManifestResponseModel } from '@umbraco-cms/backoffice/backend-api'; + +export type UmbPackage = PackageManifestResponseModel; + +export type PackageManifestResponse = UmbPackage[]; + +export type UmbPackageWithMigrationStatus = UmbPackage & { + hasPendingMigrations: boolean; +}; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-color-picker/input-color-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-color-picker/input-color-picker.element.ts index 0c4d71f981..8546bcf864 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-color-picker/input-color-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-color-picker/input-color-picker.element.ts @@ -4,7 +4,7 @@ import { customElement, property } from 'lit/decorators.js'; import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; import { UUIColorSwatchesEvent } from '@umbraco-ui/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { SwatchDetails } from '@umbraco-cms/backoffice/models'; +import type { UmbSwatchDetails } from '@umbraco-cms/backoffice/models'; /* * This wraps the UUI library uui-color-swatches component @@ -12,13 +12,11 @@ import type { SwatchDetails } from '@umbraco-cms/backoffice/models'; */ @customElement('umb-input-color-picker') export class UmbInputColorPickerElement extends FormControlMixin(UmbLitElement) { - - @property({ type: Boolean }) showLabels = false; @property() - swatches?: SwatchDetails[]; + swatches?: UmbSwatchDetails[]; constructor() { super(); @@ -48,7 +46,7 @@ export class UmbInputColorPickerElement extends FormControlMixin(UmbLitElement) .showLabel=${this.showLabels}>`; })}`; } - + static styles = [UUITextStyles]; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-list-base/input-list-base.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-list-base/input-list-base.ts index 2128b126e5..8d5208dc37 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-list-base/input-list-base.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-list-base/input-list-base.ts @@ -45,13 +45,13 @@ export class UmbInputListBaseElement extends UmbLitElement { modalHandler?.onSubmit().then((data: UmbPickerModalData) => { if (data) { - this.value = data.selection; + this.value = data.selection.filter((id) => id !== null && id !== undefined) as Array; this.selectionUpdated(); } }); } - protected removeFromSelection(id: string) { + protected removeFromSelection(id?: string | null) { this.value = this.value.filter((k) => k !== id); this.selectionUpdated(); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/color-picker/property-editor-ui-color-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/color-picker/property-editor-ui-color-picker.element.ts index d860a60012..354b032f7c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/color-picker/property-editor-ui-color-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/color-picker/property-editor-ui-color-picker.element.ts @@ -5,15 +5,13 @@ import { UUIColorSwatchesEvent } from '@umbraco-ui/uui'; import { UmbPropertyEditorExtensionElement } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { DataTypePropertyPresentationModel } from '@umbraco-cms/backoffice/backend-api'; -import type { SwatchDetails } from '@umbraco-cms/backoffice/models'; +import type { UmbSwatchDetails } from '@umbraco-cms/backoffice/models'; /** * @element umb-property-editor-ui-color-picker */ @customElement('umb-property-editor-ui-color-picker') export class UmbPropertyEditorUIColorPickerElement extends UmbLitElement implements UmbPropertyEditorExtensionElement { - - @property() value = ''; @@ -21,7 +19,7 @@ export class UmbPropertyEditorUIColorPickerElement extends UmbLitElement impleme private _showLabels = false; @state() - private _swatches: SwatchDetails[] = []; + private _swatches: UmbSwatchDetails[] = []; @property({ type: Array, attribute: false }) public set config(config: Array) { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts index f1a29007ce..4795b97862 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/stylesheet.repository.ts @@ -6,7 +6,7 @@ import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { UmbTreeRepository } from '@umbraco-cms/backoffice/repository'; import { FileSystemTreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbTreeRootFileSystemModel } from '@umbraco-cms/backoffice/models'; +import type { UmbTreeRootFileSystemModel } from '@umbraco-cms/backoffice/tree'; export class UmbStylesheetRepository implements UmbTreeRepository diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user-header-app.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user-header-app.element.ts index 2462854ed5..b0d44f1d4e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user-header-app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user-header-app.element.ts @@ -1,17 +1,15 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, CSSResultGroup, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; +import type { UmbLoggedInUser } from './types'; import { UmbCurrentUserStore, UMB_CURRENT_USER_STORE_CONTEXT_TOKEN } from './current-user.store'; -import type { UserDetails } from '@umbraco-cms/backoffice/models'; import { UmbModalContext, UMB_MODAL_CONTEXT_TOKEN, UMB_CURRENT_USER_MODAL } from '@umbraco-cms/backoffice/modal'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-current-user-header-app') export class UmbCurrentUserHeaderAppElement extends UmbLitElement { - - @state() - private _currentUser?: UserDetails; + private _currentUser?: UmbLoggedInUser; private _currentUserStore?: UmbCurrentUserStore; private _modalContext?: UmbModalContext; @@ -48,7 +46,7 @@ export class UmbCurrentUserHeaderAppElement extends UmbLitElement { `; } - + static styles: CSSResultGroup = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user.store.ts index e693f62bc0..53665ae826 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/current-user.store.ts @@ -1,10 +1,10 @@ -import type { UserDetails } from '@umbraco-cms/backoffice/models'; +import type { UmbLoggedInUser } from './types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; export const UMB_CURRENT_USER_STORE_CONTEXT_TOKEN = new UmbContextToken('UmbCurrentUserStore'); export class UmbCurrentUserStore { - #currentUser = new UmbObjectState(undefined); + #currentUser = new UmbObjectState(undefined); public readonly currentUser = this.#currentUser.asObservable(); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/modals/current-user/current-user-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/modals/current-user/current-user-modal.element.ts index 7e1a194704..cd0cc5a770 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/modals/current-user/current-user-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/modals/current-user/current-user-modal.element.ts @@ -2,8 +2,8 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, CSSResultGroup, html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { UmbCurrentUserStore, UMB_CURRENT_USER_STORE_CONTEXT_TOKEN } from '../../current-user.store'; +import type { UmbLoggedInUser } from '../../types'; import { UmbModalHandler } from '@umbraco-cms/backoffice/modal'; -import type { UserDetails } from '@umbraco-cms/backoffice/models'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-current-user-modal') @@ -12,7 +12,7 @@ export class UmbCurrentUserModalElement extends UmbLitElement { modalHandler?: UmbModalHandler; @state() - private _currentUser?: UserDetails; + private _currentUser?: UmbLoggedInUser; private _currentUserStore?: UmbCurrentUserStore; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/types.ts new file mode 100644 index 0000000000..adfe453bf4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/types.ts @@ -0,0 +1,22 @@ +import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; + +export interface UserEntity extends UmbEntityBase { + type: 'user'; +} + +export type UserStatus = 'enabled' | 'inactive' | 'invited' | 'disabled'; + +export interface UmbLoggedInUser extends UserEntity { + email: string; + status: UserStatus; + language: string; + lastLoginDate?: string; + lastLockoutDate?: string; + lastPasswordChangeDate?: string; + updateDate: string; + createDate: string; + failedLoginAttempts: number; + userGroups: Array; + contentStartNodes: Array; + mediaStartNodes: Array; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-profile.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-profile.element.ts index c13879a26b..09273f5e23 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-profile.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-profile.element.ts @@ -2,14 +2,14 @@ import { css, html } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import { UmbCurrentUserStore, UMB_CURRENT_USER_STORE_CONTEXT_TOKEN } from '../current-user.store'; +import type { UmbLoggedInUser } from '../types'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { UserDetails } from '@umbraco-cms/backoffice/models'; import { UmbModalContext, UMB_CHANGE_PASSWORD_MODAL, UMB_MODAL_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/modal'; @customElement('umb-user-profile-app-profile') export class UmbUserProfileAppProfileElement extends UmbLitElement { @state() - private _currentUser?: UserDetails; + private _currentUser?: UmbLoggedInUser; private _modalContext?: UmbModalContext; private _currentUserStore?: UmbCurrentUserStore; 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 5beff8aad8..9d0e895e00 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts @@ -12,6 +12,7 @@ import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-ap import { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; import './users/components'; +import './user-groups/components'; export const manifests = [...userGroupManifests, ...userManifests, ...userSectionManifests, ...currentUserManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/index.ts new file mode 100644 index 0000000000..b32058e232 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/index.ts @@ -0,0 +1 @@ +import './input-user-group/input-user-group.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.element.ts similarity index 86% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.element.ts index 42ffca8e87..1be3bf4334 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.element.ts @@ -1,19 +1,13 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { UmbInputListBaseElement } from '../input-list-base/input-list-base'; -import { - UmbUserGroupStore, - UMB_USER_GROUP_STORE_CONTEXT_TOKEN, -} from '../../../users/user-groups/repository/user-group.store'; - +import { UmbInputListBaseElement } from '../../../../shared/components/input-list-base/input-list-base'; +import { UmbUserGroupStore, UMB_USER_GROUP_STORE_CONTEXT_TOKEN } from '../../repository/user-group.store'; +import type { UserGroupEntity } from '../../types'; import { UMB_USER_GROUP_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; -import type { UserGroupEntity } from '@umbraco-cms/backoffice/models'; @customElement('umb-input-user-group') export class UmbInputPickerUserGroupElement extends UmbInputListBaseElement { - - @state() private _userGroups: Array = []; @@ -24,10 +18,11 @@ export class UmbInputPickerUserGroupElement extends UmbInputListBaseElement { this.pickerToken = UMB_USER_GROUP_PICKER_MODAL; this.consumeContext(UMB_USER_GROUP_STORE_CONTEXT_TOKEN, (usersContext) => { this._userGroupStore = usersContext; - this._observeUserGroups(); + //this._observeUserGroups(); }); } + /* private _observeUserGroups() { if (this.value.length > 0 && this._userGroupStore) { this.observe(this._userGroupStore.getByKeys(this.value), (userGroups) => (this._userGroups = userGroups)); @@ -35,9 +30,10 @@ export class UmbInputPickerUserGroupElement extends UmbInputListBaseElement { this._userGroups = []; } } + */ selectionUpdated() { - this._observeUserGroups(); + //this._observeUserGroups(); this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true })); } @@ -65,7 +61,7 @@ export class UmbInputPickerUserGroupElement extends UmbInputListBaseElement { renderContent() { return html`${this._renderUserGroupList()}`; } - + static styles = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.test.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-user-group/input-user-group.test.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/input-user-group.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/index.ts new file mode 100644 index 0000000000..fcb073fefc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/index.ts @@ -0,0 +1 @@ +export * from './types'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/modals/user-group-picker/user-group-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/modals/user-group-picker/user-group-picker-modal.element.ts index 537d541997..6e1d3d7518 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/modals/user-group-picker/user-group-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/modals/user-group-picker/user-group-picker-modal.element.ts @@ -2,13 +2,11 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbUserGroupStore, UMB_USER_GROUP_STORE_CONTEXT_TOKEN } from '../../repository/user-group.store'; +import type { UserGroupDetails } from '../../types'; import { UmbModalElementPickerBase } from '@umbraco-cms/internal/modal'; -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; @customElement('umb-user-group-picker-modal') export class UmbUserGroupPickerModalElement extends UmbModalElementPickerBase { - - @state() private _userGroups: Array = []; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.store.ts index b3eb6f3cd6..7405847d81 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.store.ts @@ -1,4 +1,4 @@ -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; +import type { UserGroupDetails } from '../types'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; @@ -61,17 +61,6 @@ export class UmbUserGroupStore extends UmbStoreBase implements UmbEntityDetailSt return this.#groups.getObservablePart((userGroups) => userGroups.find((userGroup) => userGroup.id === id)); } - getByKeys(ids: Array) { - const params = ids.map((id) => `id=${id}`).join('&'); - fetch(`/umbraco/backoffice/user-groups/getByKeys?${params}`) - .then((res) => res.json()) - .then((data) => { - this.#groups.append(data); - }); - - return this.#groups.getObservablePart((items) => items.filter((node) => ids.includes(node.id))); - } - async save(userGroups: Array) { // TODO: use Fetcher API. diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/types.ts new file mode 100644 index 0000000000..fea9946242 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/types.ts @@ -0,0 +1,13 @@ +import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; + +export interface UserGroupEntity extends UmbEntityBase { + type: 'user-group'; + icon?: string; +} + +export interface UserGroupDetails extends UserGroupEntity { + sections: Array; + contentStartNode?: string; + mediaStartNode?: string; + permissions: Array; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace-edit.element.ts index edce7b010c..d1de9a921c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace-edit.element.ts @@ -4,8 +4,8 @@ import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import { UmbUserStore } from '../../users/repository/user.store'; +import type { UserGroupDetails } from '../types'; import { UmbUserGroupWorkspaceContext } from './user-group-workspace.context'; -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import '../../users/components/user-input/user-input.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts index 56d90dbb55..92dad94830 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.context.ts @@ -1,8 +1,8 @@ import { UmbEntityWorkspaceManager } from '../../../shared/components/workspace/workspace-context/entity-manager-controller'; import { UMB_USER_GROUP_STORE_CONTEXT_TOKEN } from '../repository/user-group.store'; import { UmbUserGroupRepository } from '../repository/user-group.repository'; +import type { UserGroupDetails } from '../types'; import { UmbEntityWorkspaceContextInterface, UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; export class UmbUserGroupWorkspaceContext diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/workspace-view-user-groups.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/workspace-view-user-groups.element.ts index 352ab18080..74b879f4a2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/workspace-view-user-groups.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/workspace-view-user-groups.element.ts @@ -1,7 +1,6 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; - import { UmbTableColumn, UmbTableConfig, @@ -12,12 +11,11 @@ import { UmbTableSelectedEvent, } from '../../../shared/components/table'; import { UmbUserGroupStore, UMB_USER_GROUP_STORE_CONTEXT_TOKEN } from '../repository/user-group.store'; - -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; +import type { UserGroupDetails } from '../types'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import './user-group-table-name-column-layout.element'; //import '../../user-section/views/user-groups/user-group-table-sections-column-layout.element'; -import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-workspace-view-user-groups') export class UmbWorkspaceViewUserGroupsElement extends UmbLitElement { @@ -80,7 +78,7 @@ export class UmbWorkspaceViewUserGroupsElement extends UmbLitElement { private _createTableItems(userGroups: Array) { this._tableItems = userGroups.map((userGroup) => { return { - id: userGroup.id, + id: userGroup.id || '', icon: userGroup.icon, data: [ { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/collection/views/table/user-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/collection/views/table/user-table-collection-view.element.ts index 4220f02a3e..4be59d080d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/collection/views/table/user-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/collection/views/table/user-table-collection-view.element.ts @@ -15,13 +15,13 @@ import { UMB_USER_GROUP_STORE_CONTEXT_TOKEN, } from '../../../../user-groups/repository/user-group.store'; import { UmbUserCollectionContext } from '../../user-collection.context'; +import type { UserGroupEntity } from '@umbraco-cms/backoffice/user-group'; import { UMB_COLLECTION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/collection'; -import type { UserGroupEntity } from '@umbraco-cms/backoffice/models'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; +import { UserResponseModel } from '@umbraco-cms/backoffice/backend-api'; import './column-layouts/name/user-table-name-column-layout.element'; import './column-layouts/status/user-table-status-column-layout.element'; -import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { UserResponseModel } from '@umbraco-cms/backoffice/backend-api'; @customElement('umb-user-table-collection-view') export class UmbUserTableCollectionViewElement extends UmbLitElement { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/create-user/create-user-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/create-user/create-user-modal.element.ts index 17f8ee41dc..8a9fa369ef 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/create-user/create-user-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/create-user/create-user-modal.element.ts @@ -3,7 +3,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, query, state } from 'lit/decorators.js'; import { UUIInputPasswordElement } from '@umbraco-ui/uui'; import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from '../../repository/user.store'; -import { UmbInputPickerUserGroupElement } from '../../../../shared/components/input-user-group/input-user-group.element'; +import { UmbInputPickerUserGroupElement } from '../../../user-groups/components/input-user-group/input-user-group.element'; import { UmbUserRepository } from '../../repository/user.repository'; import { UmbModalBaseElement } from '@umbraco-cms/internal/modal'; import { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/invite-user/invite-user-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/invite-user/invite-user-modal.element.ts index 463df6e6fe..5b06bd1c61 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/invite-user/invite-user-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/modals/invite-user/invite-user-modal.element.ts @@ -1,7 +1,7 @@ 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 '../../../../shared/components/input-user-group/input-user-group.element'; +import { UmbInputPickerUserGroupElement } from '../../../user-groups/components/input-user-group/input-user-group.element'; import { UmbUserRepository } from '../../repository/user.repository'; import { UmbModalBaseElement } from '@umbraco-cms/internal/modal'; import type { UserResponseModel } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/types.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/types.ts index 47d72404da..9b2b8e7db6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/types.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/types.ts @@ -8,6 +8,7 @@ import type { UserResponseModel, UserStateModel, } from '@umbraco-cms/backoffice/backend-api'; + import { UmbDataSource, UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; export interface UmbCreateUserResponseModel { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts index e3c58b2162..1e9feab4b0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts @@ -10,7 +10,6 @@ import { getLookAndColorFromUserStatus } from '../../utils'; import { UmbUserWorkspaceContext } from './user-workspace.context'; import { UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/modal'; import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; -import type { UserDetails } from '@umbraco-cms/backoffice/models'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; @@ -19,7 +18,7 @@ import { UserResponseModel, UserStateModel } from '@umbraco-cms/backoffice/backe @customElement('umb-user-workspace-edit') export class UmbUserWorkspaceEditElement extends UmbLitElement { @state() - private _currentUser?: UserDetails; + private _currentUser?: any; @state() private _user?: UserResponseModel; 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 864cf1c6c4..ed7e94f68b 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,7 +6,7 @@ import { UmbUserWorkspaceEditElement } from './user-workspace-edit.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; -import '../../../shared/components/input-user-group/input-user-group.element'; +import '../../user-groups/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-editor/workspace-editor.element'; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/data-type.data.ts index 404e42482b..88fc3f752c 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/data-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/data-type.data.ts @@ -1,3 +1,4 @@ +import { UmbEntityTreeData } from './entity-tree.data'; import { UmbEntityData } from './entity.data'; import { createFolderTreeItem } from './utils'; import type { @@ -611,11 +612,9 @@ const createDataTypeItem = (item: DataTypeResponseModel | FolderTreeItemResponse }; }; -// Temp mocked database -// TODO: all properties are optional in the server schema. I don't think this is correct. -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore class UmbDataTypeData extends UmbEntityData { + #tree = new UmbEntityTreeData(this); + constructor() { super(data); } @@ -655,6 +654,14 @@ class UmbDataTypeData extends UmbEntityData item.id !== id); } + + copy(ids: Array, destinationKey: string) { + return this.#tree.copy(ids, destinationKey); + } + + move(ids: Array, destinationKey: string) { + return this.#tree.move(ids, destinationKey); + } } export const umbDataTypeData = new UmbDataTypeData(); diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/document-blueprint.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/document-blueprint.data.ts index 9ac544bffd..e56f700499 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/document-blueprint.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/document-blueprint.data.ts @@ -1,5 +1,5 @@ +import type { DocumentBlueprintDetails } from '../../../backoffice/documents/document-blueprints/types'; import { UmbEntityData } from './entity.data'; -import type { DocumentBlueprintDetails } from '@umbraco-cms/backoffice/models'; export const data: Array = [ { diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity-tree.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity-tree.data.ts new file mode 100644 index 0000000000..d309faa09c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity-tree.data.ts @@ -0,0 +1,52 @@ +import { UmbEntityData } from './entity.data'; +import { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbId } from '@umbraco-cms/backoffice/id'; + +export class UmbEntityTreeData { + #detailDatabase: UmbEntityData; + + constructor(detailDatabase: UmbEntityData) { + this.#detailDatabase = detailDatabase; + } + + move(ids: Array, destinationKey: string) { + const destinationItem = this.#detailDatabase.getById(destinationKey); + if (!destinationItem) throw new Error(`Destination item with key ${destinationKey} not found`); + + const items = this.#detailDatabase.getByIds(ids); + const movedItems = items.map((item) => { + return { + ...item, + parentId: destinationKey, + }; + }); + + movedItems.forEach((movedItem) => this.#detailDatabase.updateData(movedItem)); + destinationItem.hasChildren = true; + this.#detailDatabase.updateData(destinationItem); + } + + copy(ids: Array, destinationKey: string) { + const destinationItem = this.#detailDatabase.getById(destinationKey); + if (!destinationItem) throw new Error(`Destination item with key ${destinationKey} not found`); + + // TODO: Notice we don't add numbers to the 'copy' name. + const items = this.#detailDatabase.getByIds(ids); + const copyItems = items.map((item) => { + return { + ...item, + name: item.name + ' Copy', + id: UmbId.new(), + parentId: destinationKey, + }; + }); + + copyItems.forEach((copyItem) => this.#detailDatabase.insert(copyItem)); + const newIds = copyItems.map((item) => item.id); + + destinationItem.hasChildren = true; + this.#detailDatabase.updateData(destinationItem); + + return newIds; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts index a8a2fbd01a..04fb1771b5 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/entity.data.ts @@ -1,9 +1,8 @@ import { UmbData } from './data'; -import { UmbId } from '@umbraco-cms/backoffice/id'; -import type { Entity } from '@umbraco-cms/backoffice/models'; +import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; // Temp mocked database -export class UmbEntityData extends UmbData { +export class UmbEntityData extends UmbData { constructor(data: Array) { super(data); } @@ -17,7 +16,10 @@ export class UmbEntityData extends UmbData { } getByIds(ids: Array) { - return this.data.filter((item) => ids.includes(item.id)); + return this.data.filter((item) => { + if (!item.id) throw new Error('Item has no id'); + ids.includes(item.id); + }); } insert(item: T) { @@ -44,50 +46,6 @@ export class UmbEntityData extends UmbData { return saveItem; } - move(ids: Array, destinationId: string | null) { - if (destinationId === undefined) throw new Error('Destination Id is missing'); - - if (destinationId !== null) { - const destinationItem = this.getById(destinationId); - if (!destinationItem) throw new Error(`Destination item with key ${destinationId} not found`); - } - - const items = this.getByIds(ids); - const movedItems = items.map((item) => { - return { - ...item, - parentId: destinationId, - }; - }); - - movedItems.forEach((movedItem) => this.updateData(movedItem)); - } - - copy(ids: Array, destinationId: string | null) { - if (destinationId === undefined) throw new Error('Destination Id is missing'); - - if (destinationId !== null) { - const destinationItem = this.getById(destinationId); - if (!destinationItem) throw new Error(`Destination item with key ${destinationId} not found`); - } - - // TODO: Notice we don't add numbers to the 'copy' name. - const items = this.getByIds(ids); - const copyItems = items.map((item) => { - return { - ...item, - name: item.name + ' Copy', - id: UmbId.new(), - parentId: destinationId, - }; - }); - - copyItems.forEach((copyItem) => this.insert(copyItem)); - const newIds = copyItems.map((item) => item.id); - - return newIds; - } - trash(ids: Array) { const trashedItems: Array = []; @@ -108,12 +66,22 @@ export class UmbEntityData extends UmbData { } delete(ids: Array) { - const deletedKeys = this.data.filter((item) => ids.includes(item.id)).map((item) => item.id); - this.data = this.data.filter((item) => ids.indexOf(item.id) === -1); + const deletedKeys = this.data + .filter((item) => { + if (!item.id) throw new Error('Item has no id'); + ids.includes(item.id); + }) + .map((item) => item.id); + + this.data = this.data.filter((item) => { + if (!item.id) throw new Error('Item has no id'); + ids.indexOf(item.id) === -1; + }); + return deletedKeys; } - protected updateData(updateItem: T) { + updateData(updateItem: T) { const itemIndex = this.data.findIndex((item) => item.id === updateItem.id); const item = this.data[itemIndex]; if (!item) return; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/media-type.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/media-type.data.ts index 601f5fc6c3..eaccc78edc 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/media-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/media-type.data.ts @@ -1,7 +1,7 @@ +import type { MediaTypeDetails } from '../../../backoffice/media/media-types/types'; import { UmbEntityData } from './entity.data'; import { createFolderTreeItem } from './utils'; import { FolderTreeItemResponseModel, PagedFolderTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import type { MediaTypeDetails } from '@umbraco-cms/backoffice/models'; export const data: Array = [ { diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/media.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/media.data.ts index 31a930b596..6f3b164b50 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/media.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/media.data.ts @@ -1,4 +1,5 @@ import type { MediaDetails } from '../../../backoffice/media/media'; +import { UmbEntityTreeData } from './entity-tree.data'; import { UmbEntityData } from './entity.data'; import { createContentTreeItem } from './utils'; import { ContentTreeItemResponseModel, PagedContentTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; @@ -203,6 +204,8 @@ export const data: Array = [ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore class UmbMediaData extends UmbEntityData { + #tree = new UmbEntityTreeData(this); + constructor() { super(data); } @@ -225,6 +228,10 @@ class UmbMediaData extends UmbEntityData { const items = this.data.filter((item) => ids.includes(item.id)); return items.map((item) => createContentTreeItem(item)); } + + move(ids: Array, destinationKey: string) { + return this.#tree.move(ids, destinationKey); + } } export const umbMediaData = new UmbMediaData(); diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-group.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-group.data.ts index db2d57d5e7..4e6cf68fd2 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-group.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-group.data.ts @@ -1,6 +1,6 @@ +import type { MemberGroupDetails } from '../../../backoffice/members/member-groups/types'; import { UmbEntityData } from './entity.data'; import { createEntityTreeItem } from './utils'; -import type { MemberGroupDetails } from '@umbraco-cms/backoffice/models'; import { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; export const data: Array = [ diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-type.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-type.data.ts index 7200916cb4..f7723023e8 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/member-type.data.ts @@ -1,7 +1,7 @@ +import type { MemberTypeDetails } from '../../../backoffice/members/member-types/types'; import { UmbData } from './data'; import { createEntityTreeItem } from './utils'; import { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import type { MemberTypeDetails } from '@umbraco-cms/backoffice/models'; export const data: Array = [ { diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/member.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/member.data.ts index 75faed9860..c5fb176e97 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/member.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/member.data.ts @@ -1,6 +1,6 @@ +import type { MemberDetails } from '../../../backoffice/members/members/types'; import { UmbEntityData } from './entity.data'; import { createEntityTreeItem } from './utils'; -import type { MemberDetails } from '@umbraco-cms/backoffice/models'; import type { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel, diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/user-groups.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/user-groups.data.ts index 3c4b99b1ca..16e8feb45a 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/data/user-groups.data.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/user-groups.data.ts @@ -1,5 +1,5 @@ +import type { UserGroupDetails } from '../../../backoffice/users/user-groups/types'; import { UmbEntityData } from './entity.data'; -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; // Temp mocked database class UmbUserGroupsData extends UmbEntityData { @@ -17,9 +17,7 @@ export const data: Array = [ id: 'c630d49e-4e7b-42ea-b2bc-edc0edacb6b1', name: 'Administrators', icon: 'umb:medal', - parentId: '', type: 'user-group', - hasChildren: false, sections: [ 'Umb.Section.Users', 'Umb.Section.Packages', @@ -34,9 +32,7 @@ export const data: Array = [ id: '9a9ad4e9-3b5b-4fe7-b0d9-e301b9675949', name: 'Workspaces', icon: 'umb:tools', - parentId: '', type: 'user-group', - hasChildren: false, sections: ['Umb.Section.Members', 'Umb.Section.Media'], permissions: [], contentStartNode: '74e4008a-ea4f-4793-b924-15e02fd380d1', @@ -45,9 +41,7 @@ export const data: Array = [ id: 'b847398a-6875-4d7a-9f6d-231256b81471', name: 'Sensitive Data', icon: 'umb:lock', - parentId: '', type: 'user-group', - hasChildren: false, sections: ['Umb.Section.Settings', 'Umb.Section.Members', 'Umb.Section.Media', 'Umb.Section.Content'], permissions: [], contentStartNode: 'cdd30288-2d1c-41b4-89a9-61647b4a10d5', @@ -56,9 +50,7 @@ export const data: Array = [ id: '2668f09b-320c-48a7-a78a-95047026ec0e', name: 'Translators', icon: 'umb:globe', - parentId: '', type: 'user-group', - hasChildren: false, sections: ['Umb.Section.Packages', 'Umb.Section.Settings'], permissions: [], contentStartNode: 'cdd30288-2d1c-41b4-89a9-61647b4a10d5', @@ -67,9 +59,7 @@ export const data: Array = [ id: '397f3a8b-4ca3-4b01-9dd3-94e5c9eaa9b2', name: 'Writers', icon: 'umb:edit', - parentId: '', type: 'user-group', - hasChildren: false, sections: ['Umb.Section.Content'], permissions: [], }, diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/manifests.handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/manifests.handlers.ts index 543329b7b5..21844a3a4e 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/manifests.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/manifests.handlers.ts @@ -1,7 +1,7 @@ import { rest } from 'msw'; +import type { PackageManifestResponse } from '../../../backoffice/packages/types'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; -import type { PackageManifestResponse } from '@umbraco-cms/backoffice/models'; export const manifestDevelopmentHandler = rest.get(umbracoPath('/package/manifest'), (_req, res, ctx) => { return res( diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/user-groups.handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/user-groups.handlers.ts index 929979ba43..e007de0b70 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/user-groups.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/user-groups.handlers.ts @@ -1,6 +1,6 @@ import { rest } from 'msw'; import { umbUserGroupsData } from '../data/user-groups.data'; -import type { UserGroupDetails } from '@umbraco-cms/backoffice/models'; +import type { UserGroupDetails } from '../../../backoffice/users/user-groups/types'; export const handlers = [ rest.get('/umbraco/backoffice/user-groups/list/items', (req, res, ctx) => { @@ -23,14 +23,6 @@ export const handlers = [ return res(ctx.status(200), ctx.json(userGroup)); }), - rest.get('/umbraco/backoffice/user-groups/getByKeys', (req, res, ctx) => { - const ids = req.url.searchParams.getAll('id'); - if (ids.length === 0) return; - const userGroups = umbUserGroupsData.getByIds(ids); - - return res(ctx.status(200), ctx.json(userGroups)); - }), - rest.post>('/umbraco/backoffice/user-groups/save', async (req, res, ctx) => { const data = await req.json(); if (!data) return; diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/users.handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/users.handlers.ts index 6bc524c5f7..fe909257f7 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/users.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/users.handlers.ts @@ -28,88 +28,4 @@ export const handlers = [ return res(ctx.status(200), ctx.json(saved)); }), - - // rest.get('/umbraco/backoffice/users/getByKeys', (req, res, ctx) => { - // const ids = req.url.searchParams.getAll('id'); - // if (ids.length === 0) return; - // const users = umbUsersData.getByIds(ids); - - // return res(ctx.status(200), ctx.json(users)); - // }), - - // rest.post('/umbraco/backoffice/users/save', async (req, res, ctx) => { - // const data = await req.json(); - // if (!data) return; - - // const saved = umbUsersData.save(data); - - // console.log('saved', saved); - - // return res(ctx.status(200), ctx.json(saved)); - // }), - - // rest.post('/umbraco/backoffice/users/invite', async (req, res, ctx) => { - // const data = await req.json(); - // if (!data) return; - - // const newUser: UserDetails = { - // id: uuidv4(), - // name: data.name, - // email: data.email, - // status: 'invited', - // language: 'en', - // updateDate: new Date().toISOString(), - // createDate: new Date().toISOString(), - // failedLoginAttempts: 0, - // parentId: '', - // hasChildren: false, - // type: 'user', - // icon: 'umb:icon-user', - // userGroups: data.userGroups, - // contentStartNodes: [], - // mediaStartNodes: [], - // }; - - // const invited = umbUsersData.save(newUser); - - // console.log('invited', invited); - - // return res(ctx.status(200), ctx.json(invited)); - // }), - - // rest.post>('/umbraco/backoffice/users/enable', async (req, res, ctx) => { - // const data = await req.json(); - // if (!data) return; - - // const enabledKeys = umbUsersData.enable(data); - - // return res(ctx.status(200), ctx.json(enabledKeys)); - // }), - - // rest.post>('/umbraco/backoffice/users/disable', async (req, res, ctx) => { - // const data = await req.json(); - // if (!data) return; - - // const enabledKeys = umbUsersData.disable(data); - - // return res(ctx.status(200), ctx.json(enabledKeys)); - // }), - - // rest.post>('/umbraco/backoffice/users/updateUserGroup', async (req, res, ctx) => { - // const data = await req.json(); - // if (!data) return; - - // const userKeys = umbUsersData.updateUserGroup(data.userKeys, data.userGroupKey); - - // return res(ctx.status(200), ctx.json(userKeys)); - // }), - - // rest.post>('/umbraco/backoffice/users/delete', async (req, res, ctx) => { - // const data = await req.json(); - // if (!data) return; - - // const deletedKeys = umbUsersData.delete(data); - - // return res(ctx.status(200), ctx.json(deletedKeys)); - // }), ]; diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/modal-element-picker-base.ts b/src/Umbraco.Web.UI.Client/src/core/modal/modal-element-picker-base.ts index 1cb4cacec2..111ddccd08 100644 --- a/src/Umbraco.Web.UI.Client/src/core/modal/modal-element-picker-base.ts +++ b/src/Umbraco.Web.UI.Client/src/core/modal/modal-element-picker-base.ts @@ -6,7 +6,7 @@ import { UmbPickerModalData, UmbPickerModalResult } from '@umbraco-cms/backoffic // So we don't have to extend an element to get basic picker/selection logic export class UmbModalElementPickerBase extends UmbModalBaseElement, UmbPickerModalResult> { @property() - selection: Array = []; + selection: Array = []; connectedCallback(): void { super.connectedCallback(); @@ -21,28 +21,31 @@ export class UmbModalElementPickerBase extends UmbModalBaseElement selectedKey !== key); + if (this.isSelected(id)) { + this.selection = this.selection.filter((selectedKey) => selectedKey !== id); } else { - this.selection.push(key); + this.selection.push(id); } } else { - this.selection = [key]; + this.selection = [id]; } this.requestUpdate('_selection'); } - isSelected(key: string): boolean { - return this.selection.includes(key); + isSelected(id?: string | null): boolean { + if (id === undefined) throw new Error('No Id provided'); + return this.selection.includes(id); } } diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index 525b98b901..8ec155f04a 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -44,7 +44,11 @@ "@umbraco-cms/backoffice/picker-input": ["libs/picker-input"], "@umbraco-cms/backoffice/id": ["libs/id"], "@umbraco-cms/backoffice/collection": ["libs/collection"], + "@umbraco-cms/backoffice/tree": ["libs/tree"], "@umbraco-cms/backoffice/section": ["libs/section"], + + "@umbraco-cms/backoffice/user-group": ["src/backoffice/users/user-groups"], + "@umbraco-cms/internal/lit-element": ["src/core/lit-element"], "@umbraco-cms/internal/modal": ["src/core/modal"], "@umbraco-cms/internal/router": ["src/core/router"], 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 54f0fbbeae..4e33441cf3 100644 --- a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs +++ b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs @@ -60,7 +60,11 @@ export default { '@umbraco-cms/backoffice/picker-input': './libs/picker-input/index.ts', '@umbraco-cms/backoffice/id': './libs/id/index.ts', '@umbraco-cms/backoffice/collection': './libs/collection/index.ts', + '@umbraco-cms/backoffice/tree': './libs/tree/index.ts', '@umbraco-cms/backoffice/section': './libs/section/index.ts', + + '@umbraco-cms/backoffice/user-group': './src/backoffice/users/user-groups/index.ts', + '@umbraco-cms/internal/lit-element': './src/core/lit-element/index.ts', '@umbraco-cms/internal/modal': './src/core/modal/index.ts', '@umbraco-cms/internal/router': './src/core/router/index.ts', From af3acfaf5e69391124a219d5392db5805a1e3aae Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 14:56:56 +0200 Subject: [PATCH 09/18] move language input --- .../workspace/workspace-package-builder.element.ts | 2 +- src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts | 1 + .../src/backoffice/settings/languages/components/index.ts | 1 + .../input-language-picker/input-language-picker.context.ts | 0 .../input-language-picker/input-language-picker.element.ts | 0 .../input-language-picker/input-language-picker.stories.ts | 0 .../views/details/language-details-workspace-view.element.ts | 5 +++-- .../src/backoffice/shared/components/index.ts | 1 - 8 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/languages}/components/input-language-picker/input-language-picker.context.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/languages}/components/input-language-picker/input-language-picker.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => settings/languages}/components/input-language-picker/input-language-picker.stories.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts index 569cb7fefc..128b87f286 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts @@ -5,7 +5,7 @@ import { customElement, property, query, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { UmbInputDocumentPickerElement } from '../../../documents/documents/components/input-document-picker/input-document-picker.element'; import { UmbInputMediaPickerElement } from '../../../shared/components/input-media-picker/input-media-picker.element'; -import { UmbInputLanguagePickerElement } from '../../../shared/components/input-language-picker/input-language-picker.element'; +import { UmbInputLanguagePickerElement } from '../../../settings/languages/components/input-language-picker/input-language-picker.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { PackageDefinitionResponseModel, PackageResource } from '@umbraco-cms/backoffice/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; 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 d83a4816a0..95f2a0e190 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts @@ -16,6 +16,7 @@ import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-ap import type { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; import './cultures/components'; +import './languages/components'; export const manifests = [ ...settingsSectionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/index.ts new file mode 100644 index 0000000000..575cd228ad --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/index.ts @@ -0,0 +1 @@ +import './input-language-picker/input-language-picker.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/input-language-picker/input-language-picker.context.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.context.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/input-language-picker/input-language-picker.context.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/input-language-picker/input-language-picker.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/input-language-picker/input-language-picker.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/input-language-picker/input-language-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-language-picker/input-language-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/components/input-language-picker/input-language-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts index e337caf69d..02dab4273d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/views/details/language-details-workspace-view.element.ts @@ -4,8 +4,9 @@ import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { UmbLanguageWorkspaceContext } from '../../language-workspace.context'; -import { UmbInputCultureSelectElement } from '../../../../../cultures/components/input-culture-select/input-culture-select.element'; -import { UmbInputLanguagePickerElement } from '../../../../../../shared/components/input-language-picker/input-language-picker.element'; +// TODO: set up import alias for these modules +import type { UmbInputCultureSelectElement } from '../../../../../cultures/components/input-culture-select/input-culture-select.element'; +import type { UmbInputLanguagePickerElement } from '../../../../components/input-language-picker/input-language-picker.element'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/events'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index ef53c719d2..abccad9216 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -22,7 +22,6 @@ import './extension-slot/extension-slot.element'; import './input-checkbox-list/input-checkbox-list.element'; import './input-color-picker/input-color-picker.element'; import './input-eye-dropper/input-eye-dropper.element'; -import './input-language-picker/input-language-picker.element'; import './input-media-picker/input-media-picker.element'; import './input-multi-url-picker/input-multi-url-picker.element'; import './input-slider/input-slider.element'; From c6b912fc0c8b2f6251248b5652066b735e7ef8c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 20:11:55 +0200 Subject: [PATCH 10/18] Bump rollup from 3.21.0 to 3.21.2 (#686) Bumps [rollup](https://github.com/rollup/rollup) from 3.21.0 to 3.21.2. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v3.21.0...v3.21.2) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Umbraco.Web.UI.Client/package-lock.json | 14 +++++++------- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index b3bb745a5f..0b49fdfcfd 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -63,7 +63,7 @@ "prettier": "2.8.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "rollup": "^3.10.0", + "rollup": "^3.21.2", "rollup-plugin-dts": "^5.2.0", "rollup-plugin-esbuild": "^5.0.0", "rollup-plugin-url": "^3.0.1", @@ -16007,9 +16007,9 @@ } }, "node_modules/rollup": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.0.tgz", - "integrity": "sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==", + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.2.tgz", + "integrity": "sha512-c4vC+JZ3bbF4Kqq2TtM7zSKtSyMybFOjqmomFax3xpfYaPZDZ4iz8NMIuBRMjnXOcKYozw7bC6vhJjiWD6JpzQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -30613,9 +30613,9 @@ } }, "rollup": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.0.tgz", - "integrity": "sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==", + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.2.tgz", + "integrity": "sha512-c4vC+JZ3bbF4Kqq2TtM7zSKtSyMybFOjqmomFax3xpfYaPZDZ4iz8NMIuBRMjnXOcKYozw7bC6vhJjiWD6JpzQ==", "dev": true, "requires": { "fsevents": "~2.3.2" diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index ddca66df84..204d8c7fe1 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -115,7 +115,7 @@ "prettier": "2.8.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "rollup": "^3.10.0", + "rollup": "^3.21.2", "rollup-plugin-dts": "^5.2.0", "rollup-plugin-esbuild": "^5.0.0", "rollup-plugin-url": "^3.0.1", From 994ae8393cfacf46f751bf7f2fea1ea3e021e81f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 20:13:11 +0200 Subject: [PATCH 11/18] Bump @typescript-eslint/eslint-plugin from 5.59.1 to 5.59.2 (#682) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.59.1 to 5.59.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.59.2/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Umbraco.Web.UI.Client/package-lock.json | 405 ++++++++++++++++++-- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 371 insertions(+), 36 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 0b49fdfcfd..efb7894557 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -38,7 +38,7 @@ "@types/lodash-es": "^4.17.6", "@types/mocha": "^10.0.0", "@types/uuid": "^9.0.0", - "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/eslint-plugin": "^5.59.2", "@typescript-eslint/parser": "^5.57.0", "@web/dev-server-esbuild": "^0.3.3", "@web/dev-server-import-maps": "^0.0.7", @@ -5462,15 +5462,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz", - "integrity": "sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz", + "integrity": "sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/type-utils": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/type-utils": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -5495,6 +5495,53 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5573,13 +5620,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz", - "integrity": "sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz", + "integrity": "sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/typescript-estree": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -5599,6 +5646,96 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/types": { "version": "5.59.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.1.tgz", @@ -5673,17 +5810,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz", - "integrity": "sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz", + "integrity": "sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/typescript-estree": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -5698,6 +5835,80 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -22508,15 +22719,15 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz", - "integrity": "sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz", + "integrity": "sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/type-utils": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/type-utils": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -22525,6 +22736,32 @@ "tsutils": "^3.21.0" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" + } + }, + "@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -22574,15 +22811,72 @@ } }, "@typescript-eslint/type-utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz", - "integrity": "sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz", + "integrity": "sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.59.1", - "@typescript-eslint/utils": "5.59.1", + "@typescript-eslint/typescript-estree": "5.59.2", + "@typescript-eslint/utils": "5.59.2", "debug": "^4.3.4", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "@typescript-eslint/types": { @@ -22633,21 +22927,62 @@ } }, "@typescript-eslint/utils": { - "version": "5.59.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz", - "integrity": "sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA==", + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz", + "integrity": "sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.1", - "@typescript-eslint/types": "5.59.1", - "@typescript-eslint/typescript-estree": "5.59.1", + "@typescript-eslint/scope-manager": "5.59.2", + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/typescript-estree": "5.59.2", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz", + "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2" + } + }, + "@typescript-eslint/types": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz", + "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz", + "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "@typescript-eslint/visitor-keys": "5.59.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz", + "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 204d8c7fe1..eaf013c409 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -90,7 +90,7 @@ "@types/lodash-es": "^4.17.6", "@types/mocha": "^10.0.0", "@types/uuid": "^9.0.0", - "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/eslint-plugin": "^5.59.2", "@typescript-eslint/parser": "^5.57.0", "@web/dev-server-esbuild": "^0.3.3", "@web/dev-server-import-maps": "^0.0.7", From cab47e8c38715e66f68e2e9f8cb03f9252ddc02a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 20:14:00 +0200 Subject: [PATCH 12/18] Bump @web/test-runner-playwright from 0.9.0 to 0.10.0 (#683) Bumps [@web/test-runner-playwright](https://github.com/modernweb-dev/web/tree/HEAD/packages/test-runner-playwright) from 0.9.0 to 0.10.0. - [Release notes](https://github.com/modernweb-dev/web/releases) - [Changelog](https://github.com/modernweb-dev/web/blob/master/packages/test-runner-playwright/CHANGELOG.md) - [Commits](https://github.com/modernweb-dev/web/commits/@web/test-runner-playwright@0.10.0/packages/test-runner-playwright) --- updated-dependencies: - dependency-name: "@web/test-runner-playwright" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Umbraco.Web.UI.Client/package-lock.json | 303 +++++++++++++++++++- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 292 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index efb7894557..9cfa1db72c 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -44,7 +44,7 @@ "@web/dev-server-import-maps": "^0.0.7", "@web/dev-server-rollup": "^0.3.21", "@web/test-runner": "^0.15.0", - "@web/test-runner-playwright": "^0.9.0", + "@web/test-runner-playwright": "^0.10.0", "babel-loader": "^9.1.2", "eslint": "^8.32.0", "eslint-config-prettier": "^8.8.0", @@ -7443,17 +7443,172 @@ "dev": true }, "node_modules/@web/test-runner-playwright": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.9.0.tgz", - "integrity": "sha512-RhWkz1CY3KThHoX89yZ/gz9wDSPujxd2wMWNxqhov4y/XDI+0TS44TWKBfWXnuvlQFZPi8JFT7KibCo3pb/Mcg==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.10.0.tgz", + "integrity": "sha512-30AFGe7glWV1vKlkeW3aPdQgfLNNeiEDCiskIqqMosJGdIAx+1HuzAoMj+fBk9hREhQI9Q6xvvhJVsM9ZI/zcQ==", "dev": true, "dependencies": { - "@web/test-runner-core": "^0.10.20", - "@web/test-runner-coverage-v8": "^0.5.0", + "@web/test-runner-core": "^0.11.0", + "@web/test-runner-coverage-v8": "^0.6.0", "playwright": "^1.22.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/@web/test-runner-coverage-v8": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.6.1.tgz", + "integrity": "sha512-kqIC2iR5QgpwVU0rmOjknRyMmRbj+LNTEomBP50ycYfOEPDC0SWhUolfSh4Nb5eC+LVUm4zGxN5LsnBwB6d0xg==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.11.0", + "istanbul-lib-coverage": "^3.0.0", + "lru-cache": "^8.0.4", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@web/test-runner-playwright/node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "node_modules/@web/test-runner-playwright/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner-playwright/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner-playwright/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@web/test-runner/node_modules/convert-source-map": { @@ -24355,14 +24510,138 @@ } }, "@web/test-runner-playwright": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.9.0.tgz", - "integrity": "sha512-RhWkz1CY3KThHoX89yZ/gz9wDSPujxd2wMWNxqhov4y/XDI+0TS44TWKBfWXnuvlQFZPi8JFT7KibCo3pb/Mcg==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.10.0.tgz", + "integrity": "sha512-30AFGe7glWV1vKlkeW3aPdQgfLNNeiEDCiskIqqMosJGdIAx+1HuzAoMj+fBk9hREhQI9Q6xvvhJVsM9ZI/zcQ==", "dev": true, "requires": { - "@web/test-runner-core": "^0.10.20", - "@web/test-runner-coverage-v8": "^0.5.0", + "@web/test-runner-core": "^0.11.0", + "@web/test-runner-coverage-v8": "^0.6.0", "playwright": "^1.22.2" + }, + "dependencies": { + "@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "requires": { + "errorstacks": "^2.2.0" + } + }, + "@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + } + }, + "@web/test-runner-coverage-v8": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.6.1.tgz", + "integrity": "sha512-kqIC2iR5QgpwVU0rmOjknRyMmRbj+LNTEomBP50ycYfOEPDC0SWhUolfSh4Nb5eC+LVUm4zGxN5LsnBwB6d0xg==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.11.0", + "istanbul-lib-coverage": "^3.0.0", + "lru-cache": "^8.0.4", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^9.0.1" + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true + } } }, "@xmldom/xmldom": { diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index eaf013c409..fbe1065b47 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -96,7 +96,7 @@ "@web/dev-server-import-maps": "^0.0.7", "@web/dev-server-rollup": "^0.3.21", "@web/test-runner": "^0.15.0", - "@web/test-runner-playwright": "^0.9.0", + "@web/test-runner-playwright": "^0.10.0", "babel-loader": "^9.1.2", "eslint": "^8.32.0", "eslint-config-prettier": "^8.8.0", From 948974acef21a622d6e07e312a95e1b60c6075cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 18:21:44 +0000 Subject: [PATCH 13/18] Bump vite from 4.3.1 to 4.3.3 (#685) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.3.1 to 4.3.3. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v4.3.3/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Umbraco.Web.UI.Client/package-lock.json | 22 ++++++++++----------- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 9cfa1db72c..3f2b2dc62a 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -71,7 +71,7 @@ "tiny-glob": "^0.2.9", "typescript": "^5.0.3", "typescript-json-schema": "^0.55.0", - "vite": "^4.3.1", + "vite": "^4.3.3", "vite-plugin-static-copy": "^0.14.0", "vite-tsconfig-paths": "^4.2.0", "web-component-analyzer": "^2.0.0-next.4" @@ -18324,14 +18324,14 @@ } }, "node_modules/vite": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.1.tgz", - "integrity": "sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==", "dev": true, "dependencies": { "esbuild": "^0.17.5", - "postcss": "^8.4.21", - "rollup": "^3.20.2" + "postcss": "^8.4.23", + "rollup": "^3.21.0" }, "bin": { "vite": "bin/vite.js" @@ -32710,15 +32710,15 @@ "dev": true }, "vite": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.1.tgz", - "integrity": "sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==", "dev": true, "requires": { "esbuild": "^0.17.5", "fsevents": "~2.3.2", - "postcss": "^8.4.21", - "rollup": "^3.20.2" + "postcss": "^8.4.23", + "rollup": "^3.21.0" } }, "vite-plugin-static-copy": { diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index fbe1065b47..79cf8823cf 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -123,7 +123,7 @@ "tiny-glob": "^0.2.9", "typescript": "^5.0.3", "typescript-json-schema": "^0.55.0", - "vite": "^4.3.1", + "vite": "^4.3.3", "vite-plugin-static-copy": "^0.14.0", "vite-tsconfig-paths": "^4.2.0", "web-component-analyzer": "^2.0.0-next.4" From 8dd26a649c580c21cd34a8bd8dd09512a0a7df46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 18:28:21 +0000 Subject: [PATCH 14/18] Bump @web/test-runner from 0.15.3 to 0.16.1 (#684) Bumps [@web/test-runner](https://github.com/modernweb-dev/web/tree/HEAD/packages/test-runner) from 0.15.3 to 0.16.1. - [Release notes](https://github.com/modernweb-dev/web/releases) - [Changelog](https://github.com/modernweb-dev/web/blob/master/packages/test-runner/CHANGELOG.md) - [Commits](https://github.com/modernweb-dev/web/commits/@web/test-runner@0.16.1/packages/test-runner) --- updated-dependencies: - dependency-name: "@web/test-runner" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mads Rasmussen --- src/Umbraco.Web.UI.Client/package-lock.json | 1203 +++++++++++++++---- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 978 insertions(+), 227 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 3f2b2dc62a..1db6b16736 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -43,7 +43,7 @@ "@web/dev-server-esbuild": "^0.3.3", "@web/dev-server-import-maps": "^0.0.7", "@web/dev-server-rollup": "^0.3.21", - "@web/test-runner": "^0.15.0", + "@web/test-runner": "^0.16.1", "@web/test-runner-playwright": "^0.10.0", "babel-loader": "^9.1.2", "eslint": "^8.32.0", @@ -6749,15 +6749,15 @@ } }, "node_modules/@web/config-loader": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.2.1.tgz", + "integrity": "sha512-cQvTYA5lWLyyO8/R2aOReiudLa8r0LFHvMNYCwSAjzvrghb+AHxaW3BJWP9ORx6OaDcI7g5X8OATA81LSJce4A==", "dev": true, "dependencies": { "semver": "^7.3.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=16.0.0" } }, "node_modules/@web/config-loader/node_modules/lru-cache": { @@ -6794,16 +6794,16 @@ "dev": true }, "node_modules/@web/dev-server": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.38.tgz", - "integrity": "sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.2.1.tgz", + "integrity": "sha512-gIiED5tzMv+0fHFMfxzNTPGyrkYQbSpOlM7mfOUh7b1Qftw4rj8l/vfAIUHUNlqLUh4MqFhwcvtzj7dg05h9qA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.4.1", - "@web/dev-server-rollup": "^0.4.1", + "@web/config-loader": "^0.2.1", + "@web/dev-server-core": "^0.5.1", + "@web/dev-server-rollup": "^0.5.0", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", @@ -6819,7 +6819,7 @@ "web-dev-server": "dist/bin.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=16.0.0" } }, "node_modules/@web/dev-server-core": { @@ -7191,79 +7191,69 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@web/dev-server/node_modules/@rollup/plugin-node-resolve": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", - "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "node_modules/@web/dev-server/node_modules/@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" }, "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@web/dev-server/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@web/dev-server/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@web/dev-server/node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" + "node": ">=16.0.0" } }, "node_modules/@web/dev-server/node_modules/@web/dev-server-rollup": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.4.1.tgz", - "integrity": "sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.5.0.tgz", + "integrity": "sha512-5bdMynXaNqY2+zDLk0FNQSqGpAazewTVZV8zUBnz790RxayYeITIWQLpBA6pnKZWEBQsh9ITbXoK2a4AVm9xSQ==", "dev": true, "dependencies": { - "@rollup/plugin-node-resolve": "^13.0.4", - "@web/dev-server-core": "^0.4.1", + "@rollup/plugin-node-resolve": "^15.0.1", + "@web/dev-server-core": "^0.5.0", "nanocolors": "^0.2.1", "parse5": "^6.0.1", - "rollup": "^2.67.0", + "rollup": "^3.15.0", "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@web/dev-server/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "node_modules/@web/dev-server/node_modules/@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/dev-server/node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", "dev": true }, "node_modules/@web/dev-server/node_modules/ip": { @@ -7272,19 +7262,34 @@ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, - "node_modules/@web/dev-server/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "node_modules/@web/dev-server/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, "engines": { - "node": ">=10.0.0" + "node": ">=16.14" + } + }, + "node_modules/@web/dev-server/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@web/parse5-utils": { @@ -7301,18 +7306,18 @@ } }, "node_modules/@web/test-runner": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.15.3.tgz", - "integrity": "sha512-unwBymuQpI8yc/129K9H0aIzLIIQFrr2/mhdcIWFeZjjw5X3TJh57p5NFOA76nhlBSjFHyu0U0FXw9uOzXUCuQ==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.16.1.tgz", + "integrity": "sha512-vXq9l31tddF/LfIqoycjyJBdmxAnYBaxfjAbuTvN603y8Rtnf6RzRtpJ18WWmVfTmNoVL4C40V4MZNcp4VIZkQ==", "dev": true, "dependencies": { - "@web/browser-logs": "^0.2.6", - "@web/config-loader": "^0.1.3", - "@web/dev-server": "^0.1.38", - "@web/test-runner-chrome": "^0.12.1", - "@web/test-runner-commands": "^0.6.6", - "@web/test-runner-core": "^0.10.29", - "@web/test-runner-mocha": "^0.7.5", + "@web/browser-logs": "^0.3.1", + "@web/config-loader": "^0.2.1", + "@web/dev-server": "^0.2.1", + "@web/test-runner-chrome": "^0.13.0", + "@web/test-runner-commands": "^0.7.0", + "@web/test-runner-core": "^0.11.1", + "@web/test-runner-mocha": "^0.8.1", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", @@ -7328,22 +7333,177 @@ "wtr": "dist/bin.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" } }, "node_modules/@web/test-runner-chrome": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.12.1.tgz", - "integrity": "sha512-QxzinqYHelZQpMHAuc5TYyWVhtHUEGhL3m1p2U+mTTTWrZYX3D0s6Q0oL2+XYT1dsja5sd71h7yiBTb9ctkKOg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.13.0.tgz", + "integrity": "sha512-kC2fZPG+PbOb0WiTw1xZV7AhA9xXDf9rkDjKjaTlgynQoPC5e53nG1isTQ5iUpULGa/21SW3h4gRGJWN6cVEDA==", "dev": true, "dependencies": { - "@web/test-runner-core": "^0.10.29", - "@web/test-runner-coverage-v8": "^0.5.0", + "@web/test-runner-core": "^0.11.0", + "@web/test-runner-coverage-v8": "^0.6.0", "chrome-launcher": "^0.15.0", "puppeteer-core": "^19.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/test-runner-coverage-v8": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.6.1.tgz", + "integrity": "sha512-kqIC2iR5QgpwVU0rmOjknRyMmRbj+LNTEomBP50ycYfOEPDC0SWhUolfSh4Nb5eC+LVUm4zGxN5LsnBwB6d0xg==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.11.0", + "istanbul-lib-coverage": "^3.0.0", + "lru-cache": "^8.0.4", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@web/test-runner-chrome/node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "node_modules/@web/test-runner-chrome/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner-chrome/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@web/test-runner-commands": { @@ -7408,40 +7568,158 @@ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, - "node_modules/@web/test-runner-coverage-v8": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.5.0.tgz", - "integrity": "sha512-4eZs5K4JG7zqWEhVSO8utlscjbVScV7K6JVwoWWcObFTGAaBMbDVzwGRimyNSzvmfTdIO/Arze4CeUUfCl4iLQ==", - "dev": true, - "dependencies": { - "@web/test-runner-core": "^0.10.20", - "istanbul-lib-coverage": "^3.0.0", - "picomatch": "^2.2.2", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@web/test-runner-mocha": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", - "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.8.1.tgz", + "integrity": "sha512-CfYNZBbUSBiPNKkbF/dhxayecLCYZnu3g4cfgpfgmvLewlVOO6gNxaPt2c1/QhZutzTvXcMlsmaoWyk08F+V6A==", "dev": true, "dependencies": { - "@types/mocha": "^8.2.0", - "@web/test-runner-core": "^0.10.20" + "@types/mocha": "^10.0.1", + "@web/test-runner-core": "^0.11.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" } }, - "node_modules/@web/test-runner-mocha/node_modules/@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "node_modules/@web/test-runner-mocha/node_modules/@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/@web/test-runner-mocha/node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "node_modules/@web/test-runner-mocha/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner-mocha/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@web/test-runner-playwright": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.10.0.tgz", @@ -7611,12 +7889,158 @@ } } }, + "node_modules/@web/test-runner/node_modules/@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/test-runner-commands": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.7.0.tgz", + "integrity": "sha512-3aXeGrkynOdJ5jgZu5ZslcWmWuPVY9/HNdWDUqPyNePG08PKmLV9Ij342ODDL6OVsxF5dvYn1312PhDqu5AQNw==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.11.0", + "mkdirp": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@web/test-runner/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/@web/test-runner/node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "node_modules/@web/test-runner/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.7.tgz", @@ -15729,9 +16153,9 @@ } }, "node_modules/puppeteer-core": { - "version": "19.11.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.0.tgz", - "integrity": "sha512-UBlwpyTEKcaOt7bIWWhlhIXDlFbR1wVBcxpMibBhImwagkwDB8ld8ehT5dOdfKIcCHjxXzVEaMtgDKzfwcf7Rg==", + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", "dev": true, "dependencies": { "@puppeteer/browsers": "0.5.0", @@ -23961,9 +24385,9 @@ } }, "@web/config-loader": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.2.1.tgz", + "integrity": "sha512-cQvTYA5lWLyyO8/R2aOReiudLa8r0LFHvMNYCwSAjzvrghb+AHxaW3BJWP9ORx6OaDcI7g5X8OATA81LSJce4A==", "dev": true, "requires": { "semver": "^7.3.4" @@ -23996,16 +24420,16 @@ } }, "@web/dev-server": { - "version": "0.1.38", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.38.tgz", - "integrity": "sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.2.1.tgz", + "integrity": "sha512-gIiED5tzMv+0fHFMfxzNTPGyrkYQbSpOlM7mfOUh7b1Qftw4rj8l/vfAIUHUNlqLUh4MqFhwcvtzj7dg05h9qA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.4.1", - "@web/dev-server-rollup": "^0.4.1", + "@web/config-loader": "^0.2.1", + "@web/dev-server-core": "^0.5.1", + "@web/dev-server-rollup": "^0.5.0", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", @@ -24017,64 +24441,60 @@ "portfinder": "^1.0.32" }, "dependencies": { - "@rollup/plugin-node-resolve": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", - "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" } }, "@web/dev-server-rollup": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.4.1.tgz", - "integrity": "sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.5.0.tgz", + "integrity": "sha512-5bdMynXaNqY2+zDLk0FNQSqGpAazewTVZV8zUBnz790RxayYeITIWQLpBA6pnKZWEBQsh9ITbXoK2a4AVm9xSQ==", "dev": true, "requires": { - "@rollup/plugin-node-resolve": "^13.0.4", - "@web/dev-server-core": "^0.4.1", + "@rollup/plugin-node-resolve": "^15.0.1", + "@web/dev-server-core": "^0.5.0", "nanocolors": "^0.2.1", "parse5": "^6.0.1", - "rollup": "^2.67.0", + "rollup": "^3.15.0", "whatwg-url": "^11.0.0" } }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", "dev": true }, "ip": { @@ -24083,14 +24503,17 @@ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } + "lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true } } }, @@ -24378,18 +24801,18 @@ } }, "@web/test-runner": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.15.3.tgz", - "integrity": "sha512-unwBymuQpI8yc/129K9H0aIzLIIQFrr2/mhdcIWFeZjjw5X3TJh57p5NFOA76nhlBSjFHyu0U0FXw9uOzXUCuQ==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.16.1.tgz", + "integrity": "sha512-vXq9l31tddF/LfIqoycjyJBdmxAnYBaxfjAbuTvN603y8Rtnf6RzRtpJ18WWmVfTmNoVL4C40V4MZNcp4VIZkQ==", "dev": true, "requires": { - "@web/browser-logs": "^0.2.6", - "@web/config-loader": "^0.1.3", - "@web/dev-server": "^0.1.38", - "@web/test-runner-chrome": "^0.12.1", - "@web/test-runner-commands": "^0.6.6", - "@web/test-runner-core": "^0.10.29", - "@web/test-runner-mocha": "^0.7.5", + "@web/browser-logs": "^0.3.1", + "@web/config-loader": "^0.2.1", + "@web/dev-server": "^0.2.1", + "@web/test-runner-chrome": "^0.13.0", + "@web/test-runner-commands": "^0.7.0", + "@web/test-runner-core": "^0.11.1", + "@web/test-runner-mocha": "^0.8.1", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", @@ -24401,24 +24824,261 @@ "source-map": "^0.7.3" }, "dependencies": { + "@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "requires": { + "errorstacks": "^2.2.0" + } + }, + "@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "@web/test-runner-commands": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.7.0.tgz", + "integrity": "sha512-3aXeGrkynOdJ5jgZu5ZslcWmWuPVY9/HNdWDUqPyNePG08PKmLV9Ij342ODDL6OVsxF5dvYn1312PhDqu5AQNw==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.11.0", + "mkdirp": "^1.0.4" + } + }, + "@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + } + }, "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true + }, + "es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true } } }, "@web/test-runner-chrome": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.12.1.tgz", - "integrity": "sha512-QxzinqYHelZQpMHAuc5TYyWVhtHUEGhL3m1p2U+mTTTWrZYX3D0s6Q0oL2+XYT1dsja5sd71h7yiBTb9ctkKOg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.13.0.tgz", + "integrity": "sha512-kC2fZPG+PbOb0WiTw1xZV7AhA9xXDf9rkDjKjaTlgynQoPC5e53nG1isTQ5iUpULGa/21SW3h4gRGJWN6cVEDA==", "dev": true, "requires": { - "@web/test-runner-core": "^0.10.29", - "@web/test-runner-coverage-v8": "^0.5.0", + "@web/test-runner-core": "^0.11.0", + "@web/test-runner-coverage-v8": "^0.6.0", "chrome-launcher": "^0.15.0", "puppeteer-core": "^19.8.1" + }, + "dependencies": { + "@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "requires": { + "errorstacks": "^2.2.0" + } + }, + "@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + } + }, + "@web/test-runner-coverage-v8": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.6.1.tgz", + "integrity": "sha512-kqIC2iR5QgpwVU0rmOjknRyMmRbj+LNTEomBP50ycYfOEPDC0SWhUolfSh4Nb5eC+LVUm4zGxN5LsnBwB6d0xg==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.11.0", + "istanbul-lib-coverage": "^3.0.0", + "lru-cache": "^8.0.4", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^9.0.1" + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true + } } }, "@web/test-runner-commands": { @@ -24479,32 +25139,123 @@ } } }, - "@web/test-runner-coverage-v8": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.5.0.tgz", - "integrity": "sha512-4eZs5K4JG7zqWEhVSO8utlscjbVScV7K6JVwoWWcObFTGAaBMbDVzwGRimyNSzvmfTdIO/Arze4CeUUfCl4iLQ==", - "dev": true, - "requires": { - "@web/test-runner-core": "^0.10.20", - "istanbul-lib-coverage": "^3.0.0", - "picomatch": "^2.2.2", - "v8-to-istanbul": "^9.0.1" - } - }, "@web/test-runner-mocha": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", - "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.8.1.tgz", + "integrity": "sha512-CfYNZBbUSBiPNKkbF/dhxayecLCYZnu3g4cfgpfgmvLewlVOO6gNxaPt2c1/QhZutzTvXcMlsmaoWyk08F+V6A==", "dev": true, "requires": { - "@types/mocha": "^8.2.0", - "@web/test-runner-core": "^0.10.20" + "@types/mocha": "^10.0.1", + "@web/test-runner-core": "^0.11.1" }, "dependencies": { - "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "@web/browser-logs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.3.1.tgz", + "integrity": "sha512-zt7KvGZzHQgULw2cQkX3v9Yo8b6X+ualFJKJ+6so652LyNcoUis8tzHIF4zbcJzXKsZ7knZPasmc/2in+Cw+WQ==", + "dev": true, + "requires": { + "errorstacks": "^2.2.0" + } + }, + "@web/dev-server-core": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.5.1.tgz", + "integrity": "sha512-pXgb4bjDmPIaIQT9luixTSqTvRQxttUEzSKOZqLNl6pVgrl4n47ZtmZte936G2tM7nHmpT+oaMDDtCM0CgbQNQ==", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.0.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/parse5-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.0.0.tgz", + "integrity": "sha512-9pxjAg1k0Ie3t4gTQr/nmoTrvq6wmP40MNPwaetaN+jPc328MpO+WzmEApvJOW65v7lamjlvYFDsdvG8Lrd87Q==", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "@web/test-runner-core": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.11.1.tgz", + "integrity": "sha512-4Jt7BcmBXXYCCs/k71SFqKFUTYDSEFak4IaubFIyDohnlkyeun8tF+YBZoK8W/7/kPNozzvJC68O9Nr44Q5KXg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.3.1", + "@web/dev-server-core": "^0.5.1", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true } } @@ -30753,9 +31504,9 @@ "dev": true }, "puppeteer-core": { - "version": "19.11.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.0.tgz", - "integrity": "sha512-UBlwpyTEKcaOt7bIWWhlhIXDlFbR1wVBcxpMibBhImwagkwDB8ld8ehT5dOdfKIcCHjxXzVEaMtgDKzfwcf7Rg==", + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", "dev": true, "requires": { "@puppeteer/browsers": "0.5.0", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 79cf8823cf..4f760cdb3f 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -95,7 +95,7 @@ "@web/dev-server-esbuild": "^0.3.3", "@web/dev-server-import-maps": "^0.0.7", "@web/dev-server-rollup": "^0.3.21", - "@web/test-runner": "^0.15.0", + "@web/test-runner": "^0.16.1", "@web/test-runner-playwright": "^0.10.0", "babel-loader": "^9.1.2", "eslint": "^8.32.0", From b4a60803ad24a664305a07d564f51ce35793cd03 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 20:50:29 +0200 Subject: [PATCH 15/18] move template related components --- .../templates/document-type-workspace-view-templates.element.ts | 2 +- .../src/backoffice/shared/components/index.ts | 2 -- src/Umbraco.Web.UI.Client/src/backoffice/templating/index.ts | 1 + .../src/backoffice/templating/templates/components/index.ts | 2 ++ .../components/input-template/input-template.element.ts | 2 +- .../components/template-card/template-card.element.ts | 0 .../components/template-card/template-card.stories.ts | 0 7 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => templating/templates}/components/input-template/input-template.element.ts (98%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => templating/templates}/components/template-card/template-card.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => templating/templates}/components/template-card/template-card.stories.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts index 6d1ddf5349..0cef004782 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.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 { UmbDocumentTypeWorkspaceContext } from '../../document-type-workspace.context'; -import type { UmbInputTemplateElement } from '../../../../../../backoffice/shared/components/input-template/input-template.element'; +import type { UmbInputTemplateElement } from '../../../../../templating/templates/components/input-template/input-template.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; import { UmbWorkspaceEditorViewExtensionElement } from '@umbraco-cms/backoffice/extensions-registry'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index abccad9216..57c6dead8d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -27,7 +27,6 @@ import './input-multi-url-picker/input-multi-url-picker.element'; import './input-slider/input-slider.element'; import './input-toggle/input-toggle.element'; import './input-upload-field/input-upload-field.element'; -import './input-template/input-template.element'; import './property-type-based-property/property-type-based-property.element'; import './ref-property-editor-ui/ref-property-editor-ui.element'; import './section/section-main/section-main.element'; @@ -58,7 +57,6 @@ import './workspace/workspace-action-menu/workspace-action-menu.element'; import './variant-selector/variant-selector.element.ts'; -import './template-card/template-card.element'; import './code-editor'; import './tooltip-menu/tooltip-menu.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/index.ts index 05598373d2..5d4a400fda 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/index.ts @@ -4,6 +4,7 @@ import { manifests as stylesheetManifests } from './stylesheets/manifests'; import type { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; import './components'; +import './templates/components'; export const manifests = [...menuManifests, ...templateManifests, ...stylesheetManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/index.ts new file mode 100644 index 0000000000..72cfc03eee --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/index.ts @@ -0,0 +1,2 @@ +import './template-card/template-card.element'; +import './input-template/input-template.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/input-template/input-template.element.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/input-template/input-template.element.ts index 89dcd5fd64..fed7292124 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-template/input-template.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/input-template/input-template.element.ts @@ -3,7 +3,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, property, state } from 'lit/decorators.js'; import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; import { UmbTemplateCardElement } from '../template-card/template-card.element'; -import { UmbTemplateRepository } from '../../../templating/templates/repository/template.repository'; +import { UmbTemplateRepository } from '../../repository/template.repository'; import { UMB_TEMPLATE_PICKER_MODAL, UMB_TEMPLATE_MODAL, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/template-card/template-card.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/template-card/template-card.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/template-card/template-card.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/template-card/template-card.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/template-card/template-card.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/template-card/template-card.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/template-card/template-card.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/components/template-card/template-card.stories.ts From f84e0f92799bdab1e20d3f07a6813d69d55ab1f9 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 20:58:16 +0200 Subject: [PATCH 16/18] move media related components to media module --- .../src/backoffice/media/media/components/index.ts | 1 + .../input-media-picker/input-media-picker.element.ts | 6 ++---- .../input-media-picker/input-media-picker.stories.ts | 0 .../input-media-picker/input-media-picker.test.ts | 0 .../workspace/workspace-package-builder.element.ts | 7 ++++--- .../src/backoffice/shared/components/index.ts | 1 - .../property-editor-ui-media-picker.element.ts | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/index.ts rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => media/media}/components/input-media-picker/input-media-picker.element.ts (98%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => media/media}/components/input-media-picker/input-media-picker.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{shared => media/media}/components/input-media-picker/input-media-picker.test.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/index.ts new file mode 100644 index 0000000000..9186c4a7d0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/index.ts @@ -0,0 +1 @@ +import './input-media-picker/input-media-picker.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.element.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.element.ts index 8ee9138b5f..4c66716703 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.element.ts @@ -3,7 +3,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, property, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; -import { UmbMediaRepository } from '../../../media/media/repository/media.repository'; +import { UmbMediaRepository } from '../../repository/media.repository'; import { UmbModalContext, UMB_MODAL_CONTEXT_TOKEN, @@ -16,8 +16,6 @@ import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-a @customElement('umb-input-media-picker') export class UmbInputMediaPickerElement extends FormControlMixin(UmbLitElement) { - - /** * This is a minimum amount of selected items in this input. * @type {number} @@ -184,7 +182,7 @@ export class UmbInputMediaPickerElement extends FormControlMixin(UmbLitElement) `; //TODO: } - + static styles = [ UUITextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.test.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-media-picker/input-media-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/media/media/components/input-media-picker/input-media-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts index 128b87f286..94afd03b7a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-builder/workspace/workspace-package-builder.element.ts @@ -3,9 +3,10 @@ import { UUIBooleanInputEvent, UUIInputElement, UUIInputEvent } from '@umbraco-u import { css, html, nothing } from 'lit'; import { customElement, property, query, state } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; -import { UmbInputDocumentPickerElement } from '../../../documents/documents/components/input-document-picker/input-document-picker.element'; -import { UmbInputMediaPickerElement } from '../../../shared/components/input-media-picker/input-media-picker.element'; -import { UmbInputLanguagePickerElement } from '../../../settings/languages/components/input-language-picker/input-language-picker.element'; +// TODO: update to module imports when ready +import type { UmbInputDocumentPickerElement } from '../../../documents/documents/components/input-document-picker/input-document-picker.element'; +import type { UmbInputMediaPickerElement } from '../../../media/media/components/input-media-picker/input-media-picker.element'; +import type { UmbInputLanguagePickerElement } from '../../../settings/languages/components/input-language-picker/input-language-picker.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { PackageDefinitionResponseModel, PackageResource } from '@umbraco-cms/backoffice/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts index 57c6dead8d..947a28c566 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/index.ts @@ -22,7 +22,6 @@ import './extension-slot/extension-slot.element'; import './input-checkbox-list/input-checkbox-list.element'; import './input-color-picker/input-color-picker.element'; import './input-eye-dropper/input-eye-dropper.element'; -import './input-media-picker/input-media-picker.element'; import './input-multi-url-picker/input-multi-url-picker.element'; import './input-slider/input-slider.element'; import './input-toggle/input-toggle.element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/media-picker/property-editor-ui-media-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/media-picker/property-editor-ui-media-picker.element.ts index a50c76f135..1e02b68ff6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/media-picker/property-editor-ui-media-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/media-picker/property-editor-ui-media-picker.element.ts @@ -1,6 +1,6 @@ import { html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; -import { UmbInputMediaPickerElement } from '../../../../../backoffice/shared/components/input-media-picker/input-media-picker.element'; +import { UmbInputMediaPickerElement } from '../../../../media/media/components/input-media-picker/input-media-picker.element'; import { UmbPropertyEditorExtensionElement } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { DataTypePropertyPresentationModel } from '@umbraco-cms/backoffice/backend-api'; From 9717fd8a973e629d4e0ab057c93cd3e5d1967954 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 2 May 2023 21:32:49 +0200 Subject: [PATCH 17/18] move examine dashboard into search package --- .../libs/modal/modal.context.ts | 2 +- .../dashboard-examine-management.element.ts | 0 .../dashboard-examine-management.stories.ts | 0 .../modal-views/fields-settings.element.ts | 0 .../modal-views/fields-viewer.element.ts | 0 .../views/section-view-examine-indexers.ts | 0 .../views/section-view-examine-overview.ts | 0 .../views/section-view-examine-searchers.ts | 0 .../src/backoffice/search/index.ts | 1 + .../src/backoffice/search/manifests.ts | 22 ++++++++++++++++++- .../src/backoffice/search/modals/manifests.ts | 12 ---------- .../search-modal.element.ts | 0 .../settings/dashboards/manifests.ts | 17 +------------- 13 files changed, 24 insertions(+), 30 deletions(-) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/dashboard-examine-management.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/dashboard-examine-management.stories.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/views/modal-views/fields-settings.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/views/modal-views/fields-viewer.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/views/section-view-examine-indexers.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/views/section-view-examine-overview.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{settings/dashboards/examine-management => search/examine-management-dashboard}/views/section-view-examine-searchers.ts (100%) delete mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/search/modals/manifests.ts rename src/Umbraco.Web.UI.Client/src/backoffice/search/{modals/search => search-modal}/search-modal.element.ts (100%) diff --git a/src/Umbraco.Web.UI.Client/libs/modal/modal.context.ts b/src/Umbraco.Web.UI.Client/libs/modal/modal.context.ts index 1d58c827df..2f874ca487 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/modal.context.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/modal.context.ts @@ -1,5 +1,5 @@ // TODO: remove this import when the search hack is removed -import '../../src/backoffice/search/modals/search/search-modal.element'; +import '../../src/backoffice/search/search-modal/search-modal.element'; import type { UUIModalDialogElement, UUIModalSidebarSize } from '@umbraco-ui/uui'; import { BehaviorSubject } from 'rxjs'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/dashboard-examine-management.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/dashboard-examine-management.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.stories.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/dashboard-examine-management.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.stories.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/dashboard-examine-management.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/modal-views/fields-settings.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/modal-views/fields-settings.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/modal-views/fields-settings.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/modal-views/fields-settings.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/modal-views/fields-viewer.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/modal-views/fields-viewer.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/modal-views/fields-viewer.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/modal-views/fields-viewer.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/section-view-examine-indexers.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/section-view-examine-indexers.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/section-view-examine-indexers.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/section-view-examine-indexers.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/section-view-examine-overview.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/section-view-examine-overview.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/section-view-examine-overview.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/section-view-examine-overview.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/section-view-examine-searchers.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/section-view-examine-searchers.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/views/section-view-examine-searchers.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/examine-management-dashboard/views/section-view-examine-searchers.ts 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 49613bb9ed..e6506e9d76 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/search/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/search/index.ts @@ -1,4 +1,5 @@ import { manifests as searchManifests } from '../search/manifests'; + import type { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; export const manifests = [...searchManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/search/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/manifests.ts index adc42d3da1..c7c827ab26 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/search/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/search/manifests.ts @@ -13,7 +13,27 @@ const headerApps: Array = [ pathname: 'search', }, }, - + { + type: 'modal', + alias: 'Umb.Modal.Search', + name: 'Search Modal', + loader: () => import('./search-modal/search-modal.element'), + }, + { + type: 'dashboard', + alias: 'Umb.Dashboard.ExamineManagement', + name: 'Examine Management Dashboard', + elementName: 'umb-dashboard-examine-management', + loader: () => import('./examine-management-dashboard/dashboard-examine-management.element'), + weight: 400, + meta: { + label: 'Examine Management', + pathname: 'examine-management', + }, + conditions: { + sections: ['Umb.Section.Settings'], + }, + }, { type: 'headerApp', kind: 'button', diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/search/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/modals/manifests.ts deleted file mode 100644 index e90acac916..0000000000 --- a/src/Umbraco.Web.UI.Client/src/backoffice/search/modals/manifests.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extensions-registry'; - -const modals: Array = [ - { - type: 'modal', - alias: 'Umb.Modal.Search', - name: 'Search Modal', - loader: () => import('./search/search-modal.element'), - }, -]; - -export const manifests = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/search/modals/search/search-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/search/search-modal/search-modal.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/search/modals/search/search-modal.element.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/search/search-modal/search-modal.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/manifests.ts index a3227bd94e..3f336c9820 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/manifests.ts @@ -16,21 +16,6 @@ const dashboards: Array = [ sections: ['Umb.Section.Settings'], }, }, - { - type: 'dashboard', - alias: 'Umb.Dashboard.ExamineManagement', - name: 'Examine Management Dashboard', - elementName: 'umb-dashboard-examine-management', - loader: () => import('./examine-management/dashboard-examine-management.element'), - weight: 400, - meta: { - label: 'Examine Management', - pathname: 'examine-management', - }, - conditions: { - sections: ['Umb.Section.Settings'], - }, - }, { type: 'dashboard', alias: 'Umb.Dashboard.ModelsBuilder', @@ -113,7 +98,7 @@ const modals: Array = [ type: 'modal', alias: 'Umb.Modal.ExamineFieldsSettings', name: 'Examine Field Settings Modal', - loader: () => import('./examine-management/views/modal-views/fields-settings.element'), + loader: () => import('../../search/examine-management-dashboard/views/modal-views/fields-settings.element'), }, ]; From 116e4c5524b3e7469b5d80b5b637c1b3321201d3 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 3 May 2023 07:31:29 +0200 Subject: [PATCH 18/18] Chore: Move themes folder into settings package (#674) Move themes folder into settings --- src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts | 2 +- .../src/backoffice/{ => settings}/themes/manifests.ts | 0 .../src/backoffice/{ => settings}/themes/theme.context.ts | 0 .../backoffice/{ => settings}/themes/themes/dark.theme.css | 0 .../{ => settings}/themes/themes/high-contrast.theme.css | 0 .../shared/components/code-editor/code-editor.element.ts | 6 ++---- .../user-profile-apps/user-profile-app-themes.element.ts | 6 ++---- 7 files changed, 5 insertions(+), 9 deletions(-) rename src/Umbraco.Web.UI.Client/src/backoffice/{ => settings}/themes/manifests.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{ => settings}/themes/theme.context.ts (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{ => settings}/themes/themes/dark.theme.css (100%) rename src/Umbraco.Web.UI.Client/src/backoffice/{ => settings}/themes/themes/high-contrast.theme.css (100%) 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 90fbaf506b..c45b9c029a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/index.ts @@ -1,4 +1,4 @@ -import { UmbThemeContext } from '../themes/theme.context'; +import { UmbThemeContext } from './themes/theme.context'; import { manifests as settingsSectionManifests } from './section.manifests'; import { manifests as settingsMenuManifests } from './menu.manifests'; import { manifests as dashboardManifests } from './dashboards/manifests'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/themes/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/themes/manifests.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/themes/theme.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/theme.context.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/themes/theme.context.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/theme.context.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/themes/themes/dark.theme.css b/src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/themes/dark.theme.css similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/themes/themes/dark.theme.css rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/themes/dark.theme.css diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/themes/themes/high-contrast.theme.css b/src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/themes/high-contrast.theme.css similarity index 100% rename from src/Umbraco.Web.UI.Client/src/backoffice/themes/themes/high-contrast.theme.css rename to src/Umbraco.Web.UI.Client/src/backoffice/settings/themes/themes/high-contrast.theme.css diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/code-editor/code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/code-editor/code-editor.element.ts index 4a0a93652a..8aae312e80 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/code-editor/code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/code-editor/code-editor.element.ts @@ -1,7 +1,7 @@ import { css, html, PropertyValues } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { createRef, Ref, ref } from 'lit/directives/ref.js'; -import { UMB_THEME_CONTEXT_TOKEN } from '../../../themes/theme.context'; +import { UMB_THEME_CONTEXT_TOKEN } from '../../../settings/themes/theme.context'; import { UmbCodeEditorController } from './code-editor.controller'; import { CodeEditorLanguage, CodeEditorTheme, UmbCodeEditorHost } from './code-editor.model'; import { monacoEditorStyles, monacoJumpingCursorHack } from './styles'; @@ -22,8 +22,6 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; */ @customElement('umb-code-editor') export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditorHost { - - private containerRef: Ref = createRef(); get container() { @@ -146,7 +144,7 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor render() { return html`
`; } - + static styles = [ monacoEditorStyles, monacoJumpingCursorHack, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-themes.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-themes.element.ts index 4a7bd4e318..48de0499f0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-themes.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/current-user/user-profile-apps/user-profile-app-themes.element.ts @@ -2,15 +2,13 @@ import { css, html } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import { UUISelectEvent } from '@umbraco-ui/uui'; -import { UmbThemeContext, UMB_THEME_CONTEXT_TOKEN } from '../../../themes/theme.context'; +import { UmbThemeContext, UMB_THEME_CONTEXT_TOKEN } from '../../../settings/themes/theme.context'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { ManifestTheme } from '@umbraco-cms/backoffice/extensions-registry'; @customElement('umb-user-profile-app-themes') export class UmbUserProfileAppThemesElement extends UmbLitElement { - - #themeService?: UmbThemeContext; @state() @@ -55,7 +53,7 @@ export class UmbUserProfileAppThemesElement extends UmbLitElement { .options=${this.#options}> `; } - + static styles = [ UUITextStyles, css`