From 252366f7cff454ecd96ae396e83e117c311618bf Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Thu, 15 Feb 2024 00:33:53 +0100 Subject: [PATCH 001/132] Add code editor --- .../mocks/data/data-type/data-type.data.ts | 20 ++++++++++ .../uis/code-editor/manifests.ts | 30 ++++++++++++++ .../property-editor-ui-code-editor.element.ts | 40 +++++++++++++++++++ .../property-editor-ui-code-editor.stories.ts | 15 +++++++ .../core/property-editor/uis/manifests.ts | 2 + 5 files changed, 107 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts index 3087789c13..23ef24a31a 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts @@ -456,6 +456,26 @@ export const data: Array = [ }, ], }, + { + name: 'Code Editor', + id: 'dt-codeEditor', + parent: null, + editorAlias: 'Umbraco.CodeEditor', + editorUiAlias: 'Umb.PropertyEditorUi.CodeEditor', + hasChildren: false, + isFolder: false, + values: [ + { + alias: 'language', + value: { + 0: { sortOrder: 1, value: 'Razor' }, + 1: { sortOrder: 2, value: 'HTML' }, + 2: { sortOrder: 3, value: 'CSS' }, + 3: { sortOrder: 4, value: 'JavaScript' }, + }, + }, + ], + }, { name: 'Markdown Editor', id: 'dt-markdownEditor', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts new file mode 100644 index 0000000000..9c7efaac80 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts @@ -0,0 +1,30 @@ +import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: ManifestPropertyEditorUi = { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.CodeEditor', + name: 'Code Editor Property Editor UI', + element: () => import('./property-editor-ui-code-editor.element.js'), + meta: { + label: 'Code Editor', + propertyEditorSchemaAlias: 'Umbraco.CodeEditor', + icon: 'icon-code', + group: 'common', + settings: { + properties: [ + { + alias: 'language', + label: 'Language', + description: 'Select the programming language.', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Dropdown', + config: [ + { + alias: 'items', + value: ['Razor', 'HTML', 'CSS', 'JavaScript'], + }, + ], + }, + ], + }, + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts new file mode 100644 index 0000000000..be24db95e6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts @@ -0,0 +1,40 @@ +import { css, html, customElement, property, state, ifDefined, styleMap } from '@umbraco-cms/backoffice/external/lit'; +//import type { UUICodeEditorElement } from '@umbraco-cms/backoffice/external/uui'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; + +@customElement('umb-property-editor-ui-code-editor') +export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implements UmbPropertyEditorUiElement { + @property() + value = ''; + + @state() + private _language?: string; + + @property({ attribute: false }) + public set config(config: UmbPropertyEditorConfigCollection | undefined) { + this._language = config?.getValueByAlias('language'); + } + + #onInput(event: Event) { + //this.value = (event.target as UmbCodeEditorElement).code as string; + this.dispatchEvent(new CustomEvent('property-value-change')); + } + + render() { + return html``; + } +} + +export default UmbPropertyEditorUICodeEditorElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-property-editor-ui-code-editor': UmbPropertyEditorUICodeEditorElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.stories.ts new file mode 100644 index 0000000000..0c211a4357 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.stories.ts @@ -0,0 +1,15 @@ +import type { Meta, Story } from '@storybook/web-components'; +import type { UmbPropertyEditorUICodeEditorElement } from './property-editor-ui-code-editor.element.js'; +import { html } from '@umbraco-cms/backoffice/external/lit'; + +import './property-editor-ui-code-editor.element.js'; + +export default { + title: 'Property Editor UIs/Code Editor', + component: 'umb-property-editor-ui-code-editor', + id: 'umb-property-editor-ui-code-editor', +} as Meta; + +export const AAAOverview: Story = () => + html` `; +AAAOverview.storyName = 'Overview'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts index b6fc6c9caf..689a9bc550 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts @@ -1,4 +1,5 @@ import { manifest as checkboxList } from './checkbox-list/manifests.js'; +import { manifest as codeEditor } from './code-editor/manifests.js'; import { manifest as colorEditor } from './color-swatches-editor/manifests.js'; import { manifest as colorPicker } from './color-picker/manifests.js'; import { manifest as datePicker } from './date-picker/manifests.js'; @@ -30,6 +31,7 @@ import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension export const manifests: Array = [ checkboxList, + codeEditor, colorEditor, colorPicker, datePicker, From c2d7bceb5d9537a3d1d40478e18142c9be539277 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Thu, 15 Feb 2024 01:05:08 +0100 Subject: [PATCH 002/132] Add dummy data --- .../src/mocks/data/document/document.data.ts | 32 +++++++++++++++++++ .../property-editor-ui-code-editor.element.ts | 11 +++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts index f0ae2b9b88..b0251d41d5 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts @@ -47,6 +47,38 @@ export const data: Array = [ `, }, }, + { + alias: 'codeEditor', + culture: null, + segment: null, + value: ` +

Lorem ipsum dolor sit amet consectetuer adipiscing elit

+
    +
  • Lorem ipsum dolor sit amet consectetuer.
  • +
  • Aenean commodo ligula eget dolor.
  • +
  • Aenean massa cum sociis natoque penatibus.
  • +
+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing + elit. Aenean commodo ligula eget dolor. +

+

+

+ Lorem ipsum dolor sit amet, consectetuer + adipiscing elit. Aenean commodo ligula eget dolor. + Aenean massa strong. Cum sociis + natoque penatibus et magnis dis parturient montes, + nascetur ridiculus mus. Donec quam felis, ultricies + nec, pellentesque eu, pretium quis, sem. Nulla consequat + massa quis enim. Donec pede justo, fringilla vel, + aliquet nec, vulputate eget, arcu. In em + enim justo, rhoncus ut, imperdiet a, venenatis vitae, + justo. Nullam link + dictum felis eu pede mollis pretium. +
+

+ `, + }, { alias: 'email', culture: null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts index be24db95e6..127b3c62ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts @@ -1,5 +1,6 @@ import { css, html, customElement, property, state, ifDefined, styleMap } from '@umbraco-cms/backoffice/external/lit'; -//import type { UUICodeEditorElement } from '@umbraco-cms/backoffice/external/uui'; +import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor'; +import type { UmbCodeEditorController, UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @@ -9,8 +10,11 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen @property() value = ''; + //@query('umb-code-editor') + _codeEditor?: UmbCodeEditorElement; + @state() - private _language?: string; + private _language?: string = 'HTML'; @property({ attribute: false }) public set config(config: UmbPropertyEditorConfigCollection | undefined) { @@ -18,7 +22,8 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen } #onInput(event: Event) { - //this.value = (event.target as UmbCodeEditorElement).code as string; + this.value = (event.target as UmbCodeEditorElement).code as string; + //this.value = this.#editor?.monacoEditor?.getValue() ?? ''; this.dispatchEvent(new CustomEvent('property-value-change')); } From 5adafc1d66a8a9e8c317dbd1667d6794fa5877c1 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Thu, 15 Feb 2024 08:24:57 +0100 Subject: [PATCH 003/132] Add input code editor --- .../components/input-code-editor/index.ts | 1 + .../input-code-editor.element.ts | 627 ++++++++++++++++++ .../input-code-editor.stories.ts | 16 + 3 files changed, 644 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/index.ts new file mode 100644 index 0000000000..70028de684 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/index.ts @@ -0,0 +1 @@ +export * from './input-code-editor.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts new file mode 100644 index 0000000000..00055d8f54 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts @@ -0,0 +1,627 @@ +import { DOMPurify } from '@umbraco-cms/backoffice/external/dompurify'; +import { marked } from '@umbraco-cms/backoffice/external/marked'; +import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor'; +import type { UmbCodeEditorController, UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; +import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; +import { css, html, customElement, query, property, unsafeHTML, when } from '@umbraco-cms/backoffice/external/lit'; +import { FormControlMixin, type UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; +import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { + UMB_LINK_PICKER_MODAL, + UMB_MEDIA_TREE_PICKER_MODAL, + UMB_MODAL_MANAGER_CONTEXT, +} from '@umbraco-cms/backoffice/modal'; +import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; + +/** + * @element umb-input-code-editor + * @fires change - when the value of the input changes + */ + +@customElement('umb-input-code-editor') +export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { + protected getFormElement() { + return this._codeEditor; + } + + // TODO: Make actions be able to handle multiple selection + + @property({ type: Boolean }) + preview: boolean = false; + + @property() + overlaySize?: UUIModalSidebarSize; + + #isCodeEditorReady = new UmbBooleanState(false); + #editor?: UmbCodeEditorController; + + @query('umb-code-editor') + _codeEditor?: UmbCodeEditorElement; + + private _modalContext?: UmbModalManagerContext; + + private serverUrl?: string; + + constructor() { + super(); + this.#loadCodeEditor(); + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => { + this._modalContext = instance; + }); + this.consumeContext(UMB_APP_CONTEXT, (instance) => { + this.serverUrl = instance.getServerUrl(); + }); + } + + async #loadCodeEditor() { + try { + await loadCodeEditor(); + + this.#editor = this._codeEditor?.editor; + + this.#editor?.updateOptions({ + lineNumbers: false, + minimap: false, + folding: false, + }); // Prefer to update options before showing the editor, to avoid seeing the changes in the UI. + + this.#isCodeEditorReady.setValue(true); + this.#loadActions(); + } catch (error) { + console.error(error); + } + } + + async #loadActions() { + //Note: UI Buttons have the keybindings hardcoded in its title. If you change the keybindings here, please update the render as well. + this.#editor?.monacoEditor?.addAction({ + label: 'Add Heading H1', + id: 'h1', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit1], + run: () => this._insertAtCurrentLine('# '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Heading H2', + id: 'h2', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit2], + run: () => this._insertAtCurrentLine('## '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Heading H3', + id: 'h3', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit3], + run: () => this._insertAtCurrentLine('### '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Heading H4', + id: 'h4', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit4], + run: () => this._insertAtCurrentLine('#### '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Heading H5', + id: 'h5', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit5], + run: () => this._insertAtCurrentLine('##### '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Heading H6', + id: 'h6', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit6], + run: () => this._insertAtCurrentLine('###### '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Bold Text', + id: 'b', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyB], + run: () => this._insertBetweenSelection('**', '**', 'Your Bold Text'), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Italic Text', + id: 'i', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyI], + run: () => this._insertBetweenSelection('*', '*', 'Your Italic Text'), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Quote', + id: 'q', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Period], + run: () => this._insertQuote(), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Ordered List', + id: 'ol', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit7], + run: () => this._insertAtCurrentLine('1. '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Unordered List', + id: 'ul', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit8], + run: () => this._insertAtCurrentLine('- '), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Code', + id: 'code', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyE], + run: () => this._insertBetweenSelection('`', '`', 'Code'), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Fenced Code', + id: 'fenced-code', + run: () => this._insertBetweenSelection('```', '```', 'Code'), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Line', + id: 'line', + run: () => this._insertLine(), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Link', + id: 'link', + keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK], + run: () => this._insertLink(), + }); + this.#editor?.monacoEditor?.addAction({ + label: 'Add Image', + id: 'image', + //keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyJ], // What keybinding would be good for image? + run: () => this._insertMedia(), + // TODO: Update when media picker is complete. + }); + } + + private _focusEditor(): void { + // If we press one of the action buttons manually (which is outside the editor), we need to focus the editor again. + this.#editor?.monacoEditor?.focus(); + } + + private _insertLink() { + const selection = this.#editor?.getSelections()[0]; + if (!selection || !this._modalContext) return; + + const selectedValue = this.#editor?.getValueInRange(selection); + + this._focusEditor(); // Focus before opening modal + const modalContext = this._modalContext.open(UMB_LINK_PICKER_MODAL, { + data: { + index: null, + config: { overlaySize: this.overlaySize }, + }, + value: { + link: { name: selectedValue }, + }, + }); + + modalContext + ?.onSubmit() + .then((value) => { + if (!value) return; + + const name = this.localize.term('general_name'); + const url = this.localize.term('general_url'); + + this.#editor?.monacoEditor?.executeEdits('', [ + { range: selection, text: `[${value.link.name || name}](${value.link.url || url})` }, + ]); + + if (!value.link.name) { + this.#editor?.select({ + startColumn: selection.startColumn + 1, + endColumn: selection.startColumn + 1 + name.length, + endLineNumber: selection.startLineNumber, + startLineNumber: selection.startLineNumber, + }); + } else if (!value.link.url) { + this.#editor?.select({ + startColumn: selection.startColumn + 3 + value.link.name.length, + endColumn: selection.startColumn + 3 + value.link.name.length + url.length, + endLineNumber: selection.startLineNumber, + startLineNumber: selection.startLineNumber, + }); + } + }) + .catch(() => undefined) + .finally(() => this._focusEditor()); + } + + private _insertMedia() { + const selection = this.#editor?.getSelections()[0]; + if (!selection) return; + + const alt = this.#editor?.getValueInRange(selection) || 'alt text'; + + this._focusEditor(); // Focus before opening modal, otherwise cannot regain focus back after modal + const modalContext = this._modalContext?.open(UMB_MEDIA_TREE_PICKER_MODAL); + + modalContext + ?.onSubmit() + .then((value) => { + if (!value) return; + const imgUrl = value.selection[0]; + this.#editor?.monacoEditor?.executeEdits('', [ + //TODO: Get the correct media URL + { + range: selection, + text: `![${alt}](${imgUrl ? `${this.serverUrl}'/media/'${imgUrl}` : 'URL'})`, + }, + ]); + this.#editor?.select({ + startColumn: selection.startColumn + 2, + endColumn: selection.startColumn + alt.length + 2, // +2 because of ![ + endLineNumber: selection.startLineNumber, + startLineNumber: selection.startLineNumber, + }); + }) + .catch(() => undefined) + .finally(() => this._focusEditor()); + } + + private _insertLine() { + const selection = this.#editor?.getSelections()[0]; + if (!selection) return; + + const endColumn = this.#editor?.monacoModel?.getLineMaxColumn(selection.endLineNumber) ?? 1; + + if (endColumn === 1) { + this.#editor?.insertAtPosition('---\n', { + lineNumber: selection.endLineNumber, + column: 1, + }); + } else { + this.#editor?.insertAtPosition('\n\n---\n', { + lineNumber: selection.endLineNumber, + column: endColumn, + }); + } + this._focusEditor(); + } + + private _insertBetweenSelection(startValue: string, endValue: string, placeholder?: string) { + this._focusEditor(); + const selection = this.#editor?.getSelections()[0]; + if (!selection) return; + + const selectedValue = this.#editor?.getValueInRange({ + startLineNumber: selection.startLineNumber, + endLineNumber: selection.endLineNumber, + startColumn: selection.startColumn - startValue.length, + endColumn: selection.endColumn + endValue.length, + }); + + if ( + selectedValue?.startsWith(startValue) && + selectedValue.endsWith(endValue) && + selectedValue.length > startValue.length + endValue.length + ) { + //Cancel previous insert + this.#editor?.select({ ...selection, startColumn: selection.startColumn + startValue.length }); + this.#editor?.monacoEditor?.executeEdits('', [ + { + range: { + startColumn: selection.startColumn - startValue.length, + startLineNumber: selection.startLineNumber, + endColumn: selection.startColumn, + endLineNumber: selection.startLineNumber, + }, + text: '', + }, + { + range: { + startColumn: selection.endColumn + startValue.length, + startLineNumber: selection.startLineNumber, + endColumn: selection.endColumn, + endLineNumber: selection.startLineNumber, + }, + text: '', + }, + ]); + } else { + // Insert + this.#editor?.insertAtPosition(startValue, { + lineNumber: selection.startLineNumber, + column: selection.startColumn, + }); + this.#editor?.insertAtPosition(endValue, { + lineNumber: selection.endLineNumber, + column: selection.endColumn + startValue.length, + }); + + this.#editor?.select({ + startLineNumber: selection.startLineNumber, + endLineNumber: selection.endLineNumber, + startColumn: selection.startColumn + startValue.length, + endColumn: selection.endColumn + startValue.length, + }); + } + + // if no text were selected when action fired + if (selection.startColumn === selection.endColumn && selection.startLineNumber === selection.endLineNumber) { + if (placeholder) { + this.#editor?.insertAtPosition(placeholder, { + lineNumber: selection.startLineNumber, + column: selection.startColumn + startValue.length, + }); + } + + this.#editor?.select({ + startLineNumber: selection.startLineNumber, + endLineNumber: selection.endLineNumber, + startColumn: selection.startColumn + startValue.length, + endColumn: selection.startColumn + startValue.length + (placeholder?.length ?? 0), + }); + } + } + + private _insertAtCurrentLine(value: string) { + this._focusEditor(); + const selection = this.#editor?.getSelections()[0]; + if (!selection) return; + + const previousLineValue = this.#editor?.getValueInRange({ + ...selection, + startLineNumber: selection.startLineNumber - 1, + }); + const lineValue = this.#editor?.getValueInRange({ ...selection, startColumn: 1 }); + + // Regex: check if the line starts with a positive number followed by dot and a space + if (lineValue?.startsWith(value) || lineValue?.match(/^[1-9]\d*\.\s.*/)) { + // Cancel previous insert + this.#editor?.monacoEditor?.executeEdits('', [ + { + range: { + startColumn: 1, + startLineNumber: selection.startLineNumber, + endColumn: 1 + value.length, + endLineNumber: selection.startLineNumber, + }, + text: '', + }, + ]); + } else if (value.match(/^[1-9]\d*\.\s.*/) && previousLineValue?.match(/^[1-9]\d*\.\s.*/)) { + // Check if the PREVIOUS line starts with a positive number followed by dot and a space. If yes, get that number. + const previousNumber = parseInt(previousLineValue, 10); + this.#editor?.insertAtPosition(`${previousNumber + 1}. `, { + lineNumber: selection.startLineNumber, + column: 1, + }); + } else { + // Insert + this.#editor?.insertAtPosition(value, { + lineNumber: selection.startLineNumber, + column: 1, + }); + } + } + + private _insertQuote() { + const selection = this.#editor?.getSelections()[0]; + if (!selection) return; + + let index = selection.startLineNumber; + for (index; index <= selection.endLineNumber; index++) { + const line = this.#editor?.getValueInRange({ + startLineNumber: index, + endLineNumber: index, + startColumn: 1, + endColumn: 3, + }); + if (!line?.startsWith('> ')) { + this.#editor?.insertAtPosition('> ', { + lineNumber: index, + column: 1, + }); + } + } + this._focusEditor(); + } + + private _renderBasicActions() { + return html`
+ this.#editor?.monacoEditor?.getAction('h1')?.run()}> + H + + this.#editor?.monacoEditor?.getAction('b')?.run()}> + B + + this.#editor?.monacoEditor?.getAction('i')?.run()}> + I + +
+
+ this.#editor?.monacoEditor?.getAction('q')?.run()}> + + + this.#editor?.monacoEditor?.getAction('ol')?.run()}> + + + this.#editor?.monacoEditor?.getAction('ul')?.run()}> + + +
+
+ this.#editor?.monacoEditor?.getAction('code')?.run()}> + + + this.#editor?.monacoEditor?.getAction('line')?.run()}> + + + this.#editor?.monacoEditor?.getAction('link')?.run()}> + + + this.#editor?.monacoEditor?.getAction('image')?.run()}> + + +
+
+ { + this._focusEditor(); + this.#editor?.monacoEditor?.trigger('', 'editor.action.quickCommand', ''); + }}> + F1 + +
`; + } + + onKeyPress(e: KeyboardEvent) { + if (e.key !== 'Enter') return; + //TODO: Tab does not seem to trigger keyboard events. We need to make some logic for ordered and unordered lists when tab is being used. + + const selection = this.#editor?.getSelections()[0]; + if (!selection) return; + + const lineValue = this.#editor?.getValueInRange({ ...selection, startColumn: 1 }).trimStart(); + if (!lineValue) return; + + if (lineValue.startsWith('- ') && lineValue.length > 2) { + requestAnimationFrame(() => this.#editor?.insert('- ')); + } else if (lineValue.match(/^[1-9]\d*\.\s.*/) && lineValue.length > 3) { + const previousNumber = parseInt(lineValue, 10); + requestAnimationFrame(() => this.#editor?.insert(`${previousNumber + 1}. `)); + } + } + + #onInput(e: CustomEvent) { + e.stopPropagation(); + this.value = this.#editor?.monacoEditor?.getValue() ?? ''; + this.dispatchEvent(new CustomEvent('change')); + } + + render() { + return html`
${this._renderBasicActions()}
+ + ${when(this.preview && this.value, () => this.renderPreview(this.value as string))}`; + } + + renderPreview(markdown: string) { + const markdownAsHtml = marked.parse(markdown) as string; + const sanitizedHtml = markdownAsHtml ? DOMPurify.sanitize(markdownAsHtml) : ''; + return html` ${unsafeHTML(sanitizedHtml)} `; + } + + static styles = [ + UmbTextStyles, + css` + :host { + display: flex; + flex-direction: column; + } + #actions { + background-color: var(--uui-color-background-alt); + display: flex; + gap: var(--uui-size-6); + } + + #preview { + max-height: 400px; + } + + #actions div { + display: flex; + gap: var(--uui-size-1); + } + + #actions div:last-child { + margin-left: auto; + } + + umb-code-editor { + height: 200px; + border-radius: var(--uui-border-radius); + border: 1px solid var(--uui-color-divider-emphasis); + } + + uui-button { + width: 50px; + } + + blockquote { + border-left: 2px solid var(--uui-color-default-emphasis); + margin-inline: 0; + padding-inline: var(--uui-size-3); + } + + p > code, + pre { + border: 1px solid var(--uui-color-divider-emphasis); + border-radius: var(--uui-border-radius); + padding: 0 var(--uui-size-1); + background-color: var(--uui-color-background); + } + + hr { + border: none; + border-bottom: 1px solid var(--uui-palette-cocoa-black); + } + `, + ]; +} +export default UmbInputCodeEditorElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-input-code-editor': UmbInputCodeEditorElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts new file mode 100644 index 0000000000..73196554df --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from '@storybook/web-components'; +import './input-code-editor.element.js'; +import type { UmbInputCodeEditorElement } from './input-code-editor.element.js'; + +const meta: Meta = { + title: 'Components/Inputs/Code Editor', + component: 'umb-input-code-editor', + args: { + preview: false, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Overview: Story = {}; From a5684551a2c89f6e47543d0ec9dfb4a150c0ad30 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 16:18:29 +0100 Subject: [PATCH 004/132] Use umb-input-code-editor --- .../input-code-editor/input-code-editor.element.ts | 3 +++ .../code-editor/property-editor-ui-code-editor.element.ts | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts index 00055d8f54..c1552cc779 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts @@ -32,6 +32,9 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { @property({ type: Boolean }) preview: boolean = false; + @property({ type: String }) + language: string = ''; + @property() overlaySize?: UUIModalSidebarSize; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts index 127b3c62ad..2d94c6771b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts @@ -28,11 +28,11 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen } render() { - return html``; + .value=${this.value ?? ''} + @input=${this.#onInput}>`; } } From 7a1bd585856bc6322c2a5b798056aec8c13227dc Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 16:37:06 +0100 Subject: [PATCH 005/132] On change --- .../property-editor-ui-code-editor.element.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts index 2d94c6771b..0b6fa2ce1f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts @@ -10,9 +10,6 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen @property() value = ''; - //@query('umb-code-editor') - _codeEditor?: UmbCodeEditorElement; - @state() private _language?: string = 'HTML'; @@ -21,18 +18,16 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen this._language = config?.getValueByAlias('language'); } - #onInput(event: Event) { - this.value = (event.target as UmbCodeEditorElement).code as string; - //this.value = this.#editor?.monacoEditor?.getValue() ?? ''; + #onChange(e: Event) { + this.value = (e.target as UmbInputCodeEditorElement).value as string; this.dispatchEvent(new CustomEvent('property-value-change')); } render() { return html``; + @change=${this.#onChange}>`; } } From afd57463a39bd47335f5e16bb6df3b72c0973925 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 17:05:52 +0100 Subject: [PATCH 006/132] Import input code editor --- .../code-editor/property-editor-ui-code-editor.element.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts index 0b6fa2ce1f..e15e1082bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts @@ -1,6 +1,6 @@ -import { css, html, customElement, property, state, ifDefined, styleMap } from '@umbraco-cms/backoffice/external/lit'; -import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor'; -import type { UmbCodeEditorController, UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; +import type { UmbInputCodeEditorElement } from '../../../components/input-code-editor/index.js'; +import '../../../components/input-code-editor/index.js'; +import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; From abf617c5d43f1aa7579dec65d6da38e872b8483a Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 17:14:13 +0100 Subject: [PATCH 007/132] Add document type data --- .../data/document-type/document-type.data.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts index b6ee696086..7bf77f79c7 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts @@ -660,6 +660,30 @@ export const data: Array = [ labelOnTop: false, }, }, + { + id: '34', + container: { + id: 'all-properties-group-key', + }, + alias: 'codeEditor', + name: 'Code Editor', + description: '', + dataType: { + id: 'dt-codeEditor', + }, + variesByCulture: false, + variesBySegment: false, + sortOrder: 0, + validation: { + mandatory: true, + mandatoryMessage: null, + regEx: null, + regExMessage: null, + }, + appearance: { + labelOnTop: false, + }, + }, ], containers: [ { From d933f5a33aaef60b87ecfaa167f4b645dae8f07d Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 17:21:53 +0100 Subject: [PATCH 008/132] Cleanup actions copied from markdown --- .../input-code-editor.element.ts | 487 +----------------- .../input-code-editor.stories.ts | 2 +- 2 files changed, 4 insertions(+), 485 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts index c1552cc779..18386f9e7c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts @@ -27,13 +27,8 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { return this._codeEditor; } - // TODO: Make actions be able to handle multiple selection - - @property({ type: Boolean }) - preview: boolean = false; - @property({ type: String }) - language: string = ''; + language: string = 'HTML'; @property() overlaySize?: UUIModalSidebarSize; @@ -72,457 +67,16 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { }); // Prefer to update options before showing the editor, to avoid seeing the changes in the UI. this.#isCodeEditorReady.setValue(true); - this.#loadActions(); } catch (error) { console.error(error); } } - async #loadActions() { - //Note: UI Buttons have the keybindings hardcoded in its title. If you change the keybindings here, please update the render as well. - this.#editor?.monacoEditor?.addAction({ - label: 'Add Heading H1', - id: 'h1', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit1], - run: () => this._insertAtCurrentLine('# '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Heading H2', - id: 'h2', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit2], - run: () => this._insertAtCurrentLine('## '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Heading H3', - id: 'h3', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit3], - run: () => this._insertAtCurrentLine('### '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Heading H4', - id: 'h4', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit4], - run: () => this._insertAtCurrentLine('#### '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Heading H5', - id: 'h5', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit5], - run: () => this._insertAtCurrentLine('##### '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Heading H6', - id: 'h6', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit6], - run: () => this._insertAtCurrentLine('###### '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Bold Text', - id: 'b', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyB], - run: () => this._insertBetweenSelection('**', '**', 'Your Bold Text'), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Italic Text', - id: 'i', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyI], - run: () => this._insertBetweenSelection('*', '*', 'Your Italic Text'), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Quote', - id: 'q', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Period], - run: () => this._insertQuote(), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Ordered List', - id: 'ol', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit7], - run: () => this._insertAtCurrentLine('1. '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Unordered List', - id: 'ul', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.Digit8], - run: () => this._insertAtCurrentLine('- '), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Code', - id: 'code', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyE], - run: () => this._insertBetweenSelection('`', '`', 'Code'), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Fenced Code', - id: 'fenced-code', - run: () => this._insertBetweenSelection('```', '```', 'Code'), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Line', - id: 'line', - run: () => this._insertLine(), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Link', - id: 'link', - keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK], - run: () => this._insertLink(), - }); - this.#editor?.monacoEditor?.addAction({ - label: 'Add Image', - id: 'image', - //keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyJ], // What keybinding would be good for image? - run: () => this._insertMedia(), - // TODO: Update when media picker is complete. - }); - } - private _focusEditor(): void { // If we press one of the action buttons manually (which is outside the editor), we need to focus the editor again. this.#editor?.monacoEditor?.focus(); } - private _insertLink() { - const selection = this.#editor?.getSelections()[0]; - if (!selection || !this._modalContext) return; - - const selectedValue = this.#editor?.getValueInRange(selection); - - this._focusEditor(); // Focus before opening modal - const modalContext = this._modalContext.open(UMB_LINK_PICKER_MODAL, { - data: { - index: null, - config: { overlaySize: this.overlaySize }, - }, - value: { - link: { name: selectedValue }, - }, - }); - - modalContext - ?.onSubmit() - .then((value) => { - if (!value) return; - - const name = this.localize.term('general_name'); - const url = this.localize.term('general_url'); - - this.#editor?.monacoEditor?.executeEdits('', [ - { range: selection, text: `[${value.link.name || name}](${value.link.url || url})` }, - ]); - - if (!value.link.name) { - this.#editor?.select({ - startColumn: selection.startColumn + 1, - endColumn: selection.startColumn + 1 + name.length, - endLineNumber: selection.startLineNumber, - startLineNumber: selection.startLineNumber, - }); - } else if (!value.link.url) { - this.#editor?.select({ - startColumn: selection.startColumn + 3 + value.link.name.length, - endColumn: selection.startColumn + 3 + value.link.name.length + url.length, - endLineNumber: selection.startLineNumber, - startLineNumber: selection.startLineNumber, - }); - } - }) - .catch(() => undefined) - .finally(() => this._focusEditor()); - } - - private _insertMedia() { - const selection = this.#editor?.getSelections()[0]; - if (!selection) return; - - const alt = this.#editor?.getValueInRange(selection) || 'alt text'; - - this._focusEditor(); // Focus before opening modal, otherwise cannot regain focus back after modal - const modalContext = this._modalContext?.open(UMB_MEDIA_TREE_PICKER_MODAL); - - modalContext - ?.onSubmit() - .then((value) => { - if (!value) return; - const imgUrl = value.selection[0]; - this.#editor?.monacoEditor?.executeEdits('', [ - //TODO: Get the correct media URL - { - range: selection, - text: `![${alt}](${imgUrl ? `${this.serverUrl}'/media/'${imgUrl}` : 'URL'})`, - }, - ]); - this.#editor?.select({ - startColumn: selection.startColumn + 2, - endColumn: selection.startColumn + alt.length + 2, // +2 because of ![ - endLineNumber: selection.startLineNumber, - startLineNumber: selection.startLineNumber, - }); - }) - .catch(() => undefined) - .finally(() => this._focusEditor()); - } - - private _insertLine() { - const selection = this.#editor?.getSelections()[0]; - if (!selection) return; - - const endColumn = this.#editor?.monacoModel?.getLineMaxColumn(selection.endLineNumber) ?? 1; - - if (endColumn === 1) { - this.#editor?.insertAtPosition('---\n', { - lineNumber: selection.endLineNumber, - column: 1, - }); - } else { - this.#editor?.insertAtPosition('\n\n---\n', { - lineNumber: selection.endLineNumber, - column: endColumn, - }); - } - this._focusEditor(); - } - - private _insertBetweenSelection(startValue: string, endValue: string, placeholder?: string) { - this._focusEditor(); - const selection = this.#editor?.getSelections()[0]; - if (!selection) return; - - const selectedValue = this.#editor?.getValueInRange({ - startLineNumber: selection.startLineNumber, - endLineNumber: selection.endLineNumber, - startColumn: selection.startColumn - startValue.length, - endColumn: selection.endColumn + endValue.length, - }); - - if ( - selectedValue?.startsWith(startValue) && - selectedValue.endsWith(endValue) && - selectedValue.length > startValue.length + endValue.length - ) { - //Cancel previous insert - this.#editor?.select({ ...selection, startColumn: selection.startColumn + startValue.length }); - this.#editor?.monacoEditor?.executeEdits('', [ - { - range: { - startColumn: selection.startColumn - startValue.length, - startLineNumber: selection.startLineNumber, - endColumn: selection.startColumn, - endLineNumber: selection.startLineNumber, - }, - text: '', - }, - { - range: { - startColumn: selection.endColumn + startValue.length, - startLineNumber: selection.startLineNumber, - endColumn: selection.endColumn, - endLineNumber: selection.startLineNumber, - }, - text: '', - }, - ]); - } else { - // Insert - this.#editor?.insertAtPosition(startValue, { - lineNumber: selection.startLineNumber, - column: selection.startColumn, - }); - this.#editor?.insertAtPosition(endValue, { - lineNumber: selection.endLineNumber, - column: selection.endColumn + startValue.length, - }); - - this.#editor?.select({ - startLineNumber: selection.startLineNumber, - endLineNumber: selection.endLineNumber, - startColumn: selection.startColumn + startValue.length, - endColumn: selection.endColumn + startValue.length, - }); - } - - // if no text were selected when action fired - if (selection.startColumn === selection.endColumn && selection.startLineNumber === selection.endLineNumber) { - if (placeholder) { - this.#editor?.insertAtPosition(placeholder, { - lineNumber: selection.startLineNumber, - column: selection.startColumn + startValue.length, - }); - } - - this.#editor?.select({ - startLineNumber: selection.startLineNumber, - endLineNumber: selection.endLineNumber, - startColumn: selection.startColumn + startValue.length, - endColumn: selection.startColumn + startValue.length + (placeholder?.length ?? 0), - }); - } - } - - private _insertAtCurrentLine(value: string) { - this._focusEditor(); - const selection = this.#editor?.getSelections()[0]; - if (!selection) return; - - const previousLineValue = this.#editor?.getValueInRange({ - ...selection, - startLineNumber: selection.startLineNumber - 1, - }); - const lineValue = this.#editor?.getValueInRange({ ...selection, startColumn: 1 }); - - // Regex: check if the line starts with a positive number followed by dot and a space - if (lineValue?.startsWith(value) || lineValue?.match(/^[1-9]\d*\.\s.*/)) { - // Cancel previous insert - this.#editor?.monacoEditor?.executeEdits('', [ - { - range: { - startColumn: 1, - startLineNumber: selection.startLineNumber, - endColumn: 1 + value.length, - endLineNumber: selection.startLineNumber, - }, - text: '', - }, - ]); - } else if (value.match(/^[1-9]\d*\.\s.*/) && previousLineValue?.match(/^[1-9]\d*\.\s.*/)) { - // Check if the PREVIOUS line starts with a positive number followed by dot and a space. If yes, get that number. - const previousNumber = parseInt(previousLineValue, 10); - this.#editor?.insertAtPosition(`${previousNumber + 1}. `, { - lineNumber: selection.startLineNumber, - column: 1, - }); - } else { - // Insert - this.#editor?.insertAtPosition(value, { - lineNumber: selection.startLineNumber, - column: 1, - }); - } - } - - private _insertQuote() { - const selection = this.#editor?.getSelections()[0]; - if (!selection) return; - - let index = selection.startLineNumber; - for (index; index <= selection.endLineNumber; index++) { - const line = this.#editor?.getValueInRange({ - startLineNumber: index, - endLineNumber: index, - startColumn: 1, - endColumn: 3, - }); - if (!line?.startsWith('> ')) { - this.#editor?.insertAtPosition('> ', { - lineNumber: index, - column: 1, - }); - } - } - this._focusEditor(); - } - - private _renderBasicActions() { - return html`
- this.#editor?.monacoEditor?.getAction('h1')?.run()}> - H - - this.#editor?.monacoEditor?.getAction('b')?.run()}> - B - - this.#editor?.monacoEditor?.getAction('i')?.run()}> - I - -
-
- this.#editor?.monacoEditor?.getAction('q')?.run()}> - - - this.#editor?.monacoEditor?.getAction('ol')?.run()}> - - - this.#editor?.monacoEditor?.getAction('ul')?.run()}> - - -
-
- this.#editor?.monacoEditor?.getAction('code')?.run()}> - - - this.#editor?.monacoEditor?.getAction('line')?.run()}> - - - this.#editor?.monacoEditor?.getAction('link')?.run()}> - - - this.#editor?.monacoEditor?.getAction('image')?.run()}> - - -
-
- { - this._focusEditor(); - this.#editor?.monacoEditor?.trigger('', 'editor.action.quickCommand', ''); - }}> - F1 - -
`; - } - onKeyPress(e: KeyboardEvent) { if (e.key !== 'Enter') return; //TODO: Tab does not seem to trigger keyboard events. We need to make some logic for ordered and unordered lists when tab is being used. @@ -548,20 +102,13 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { } render() { - return html`
${this._renderBasicActions()}
+ return html` - ${when(this.preview && this.value, () => this.renderPreview(this.value as string))}`; - } - - renderPreview(markdown: string) { - const markdownAsHtml = marked.parse(markdown) as string; - const sanitizedHtml = markdownAsHtml ? DOMPurify.sanitize(markdownAsHtml) : ''; - return html` ${unsafeHTML(sanitizedHtml)} `; + theme="umb-light">`; } static styles = [ @@ -571,24 +118,6 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { display: flex; flex-direction: column; } - #actions { - background-color: var(--uui-color-background-alt); - display: flex; - gap: var(--uui-size-6); - } - - #preview { - max-height: 400px; - } - - #actions div { - display: flex; - gap: var(--uui-size-1); - } - - #actions div:last-child { - margin-left: auto; - } umb-code-editor { height: 200px; @@ -596,16 +125,6 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { border: 1px solid var(--uui-color-divider-emphasis); } - uui-button { - width: 50px; - } - - blockquote { - border-left: 2px solid var(--uui-color-default-emphasis); - margin-inline: 0; - padding-inline: var(--uui-size-3); - } - p > code, pre { border: 1px solid var(--uui-color-divider-emphasis); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts index 73196554df..8cfc62d48d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.stories.ts @@ -6,7 +6,7 @@ const meta: Meta = { title: 'Components/Inputs/Code Editor', component: 'umb-input-code-editor', args: { - preview: false, + language: 'HTML', }, }; From 33ef79042429d03466bb94a4b98baf62e4e9d583 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 18:42:35 +0100 Subject: [PATCH 009/132] Language need to be in lowercase --- .../code-editor/property-editor-ui-code-editor.element.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts index e15e1082bf..ff95a62c7f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/property-editor-ui-code-editor.element.ts @@ -15,7 +15,8 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen @property({ attribute: false }) public set config(config: UmbPropertyEditorConfigCollection | undefined) { - this._language = config?.getValueByAlias('language'); + //this._language = config?.getValueByAlias('language'); + console.log("language", config?.getValueByAlias('language')) } #onChange(e: Event) { @@ -25,7 +26,7 @@ export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implemen render() { return html``; } From 37a0ebcede6c25be75037ee8db4af486d0168fc5 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 18:44:42 +0100 Subject: [PATCH 010/132] Formatting --- .../src/mocks/data/document/document.data.ts | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts index fadca0fba0..ef3243dde1 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts @@ -51,33 +51,31 @@ export const data: Array = [ alias: 'codeEditor', culture: null, segment: null, - value: ` -

Lorem ipsum dolor sit amet consectetuer adipiscing elit

-
    -
  • Lorem ipsum dolor sit amet consectetuer.
  • -
  • Aenean commodo ligula eget dolor.
  • -
  • Aenean massa cum sociis natoque penatibus.
  • -
-

- Lorem ipsum dolor sit amet, consectetuer adipiscing - elit. Aenean commodo ligula eget dolor. -

-

-

- Lorem ipsum dolor sit amet, consectetuer - adipiscing elit. Aenean commodo ligula eget dolor. - Aenean massa strong. Cum sociis - natoque penatibus et magnis dis parturient montes, - nascetur ridiculus mus. Donec quam felis, ultricies - nec, pellentesque eu, pretium quis, sem. Nulla consequat - massa quis enim. Donec pede justo, fringilla vel, - aliquet nec, vulputate eget, arcu. In em - enim justo, rhoncus ut, imperdiet a, venenatis vitae, - justo. Nullam link - dictum felis eu pede mollis pretium. -
-

- `, + value: `

Lorem ipsum dolor sit amet consectetuer adipiscing elit

+
    +
  • Lorem ipsum dolor sit amet consectetuer.
  • +
  • Aenean commodo ligula eget dolor.
  • +
  • Aenean massa cum sociis natoque penatibus.
  • +
+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing + elit. Aenean commodo ligula eget dolor. +

+

+

+ Lorem ipsum dolor sit amet, consectetuer + adipiscing elit. Aenean commodo ligula eget dolor. + Aenean massa strong. Cum sociis + natoque penatibus et magnis dis parturient montes, + nascetur ridiculus mus. Donec quam felis, ultricies + nec, pellentesque eu, pretium quis, sem. Nulla consequat + massa quis enim. Donec pede justo, fringilla vel, + aliquet nec, vulputate eget, arcu. In em + enim justo, rhoncus ut, imperdiet a, venenatis vitae, + justo. Nullam link + dictum felis eu pede mollis pretium. +
+

`, }, { alias: 'email', From 0d94309394d006be7d21afdd2c9ddf99e367ad3e Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 19:46:40 +0100 Subject: [PATCH 011/132] Cleanup --- .../input-code-editor/input-code-editor.element.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts index 18386f9e7c..1e7dfd62f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts @@ -30,28 +30,15 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) { @property({ type: String }) language: string = 'HTML'; - @property() - overlaySize?: UUIModalSidebarSize; - #isCodeEditorReady = new UmbBooleanState(false); #editor?: UmbCodeEditorController; @query('umb-code-editor') _codeEditor?: UmbCodeEditorElement; - private _modalContext?: UmbModalManagerContext; - - private serverUrl?: string; - constructor() { super(); this.#loadCodeEditor(); - this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => { - this._modalContext = instance; - }); - this.consumeContext(UMB_APP_CONTEXT, (instance) => { - this.serverUrl = instance.getServerUrl(); - }); } async #loadCodeEditor() { From 3762bdbfb996406eb5ae2756934913780157c367 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sun, 18 Feb 2024 19:47:05 +0100 Subject: [PATCH 012/132] Add possible modes --- .../core/property-editor/uis/code-editor/manifests.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts index 9c7efaac80..4dacc7286f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts @@ -20,7 +20,15 @@ export const manifest: ManifestPropertyEditorUi = { config: [ { alias: 'items', - value: ['Razor', 'HTML', 'CSS', 'JavaScript'], + value: { + 0: { sortOrder: 1, value: 'Razor' }, + 1: { sortOrder: 2, value: 'HTML' }, + 2: { sortOrder: 3, value: 'CSS' }, + 3: { sortOrder: 3, value: 'JavaScript' }, + 4: { sortOrder: 3, value: 'TypeScript' }, + 5: { sortOrder: 3, value: 'Markdown' }, + 6: { sortOrder: 3, value: 'JSON' }, + }, }, ], }, From 3ca06aaef87a16b7427f7c15ed7a7323b5bdc050 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Sat, 24 Feb 2024 16:52:14 +0100 Subject: [PATCH 013/132] Add more languages --- .../src/mocks/data/data-type/data-type.data.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts index f3af6e6981..a49ce4a380 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts @@ -472,6 +472,9 @@ export const data: Array = [ 1: { sortOrder: 2, value: 'HTML' }, 2: { sortOrder: 3, value: 'CSS' }, 3: { sortOrder: 4, value: 'JavaScript' }, + 4: { sortOrder: 3, value: 'TypeScript' }, + 5: { sortOrder: 3, value: 'Markdown' }, + 6: { sortOrder: 3, value: 'JSON' }, }, }, ], From 56962ded8685e954ba0c2865936872245bc8fc39 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Fri, 12 Jul 2024 16:20:40 +0200 Subject: [PATCH 014/132] Translate package section --- src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts index 5903b96f02..114e4009aa 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts @@ -751,9 +751,13 @@ export default { notifications: 'Notificaciones', }, packager: { + actions: 'Acciones', + created: 'Creada', + createPackage: 'Crear paquete', chooseLocalPackageText: 'Elige un paquete de tu máquina, seleccionando el botón Examinar
y localizando el paquete. Los paquetes de Umbraco normalmente tienen la extensión ".umb" o ".zip".', packageLicense: 'Licencia', + installed: 'Instalada', installedPackages: 'Paquetes instalados', noPackages: 'No tienes instalado ningún paquete', noPackagesDescription: @@ -890,6 +894,7 @@ export default { translation: 'Traducción', users: 'Usuarios', help: 'Ayuda', + packages: 'Paquetes' }, help: { theBestUmbracoVideoTutorials: 'Los mejores tutoriales en video para Umbraco', From 4c3c0cd48717c3f8fdfb2e139250d62cde28b54f Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Mon, 15 Jul 2024 14:21:15 +0200 Subject: [PATCH 015/132] bump to 14.1.1 --- src/Umbraco.Web.UI.Client/package-lock.json | 4 ++-- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 84b9929a0e..fc9b2cbbf1 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -1,12 +1,12 @@ { "name": "@umbraco-cms/backoffice", - "version": "14.1.0", + "version": "14.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@umbraco-cms/backoffice", - "version": "14.1.0", + "version": "14.1.1", "license": "MIT", "workspaces": [ "./src/packages/block", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 249ee40aea..a2da86e2b9 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -1,7 +1,7 @@ { "name": "@umbraco-cms/backoffice", "license": "MIT", - "version": "14.1.0", + "version": "14.1.1", "type": "module", "exports": { ".": null, From b38974c25e698e91ac63f509dda55d9105679808 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Mon, 15 Jul 2024 20:32:11 +0200 Subject: [PATCH 016/132] Bugfix: Date Picker with only "time" does not display correctly (#2115) * fix: takes care of a case where the server and/or input element could send various datetime strings regardless of the configuration of the property editor, for example the "time" configuration could still be complete datetime string * test: adds tests for all the various input and output cases to ensure the format is 100% matching * fix: add `_inputValue` to differ between the input and output values, because the server always expects datetimes whereas the client expects differentiated strings --- .../property-editor-ui-date-picker.element.ts | 60 +++++++++++++------ .../property-editor-ui-date-picker.test.ts | 56 +++++++++++++++++ 2 files changed, 98 insertions(+), 18 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts index 652dee33be..b0bf7b2eae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts @@ -1,6 +1,6 @@ import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; -import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbInputDateElement } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; @@ -42,13 +42,16 @@ export class UmbPropertyEditorUIDatePickerElement extends UmbLitElement implemen @property() value?: string; + @state() + private _inputValue?: string; + public set config(config: UmbPropertyEditorConfigCollection | undefined) { if (!config) return; // Format string prevalue/config const format = config.getValueByAlias('format'); - const hasTime = format?.includes('H') || format?.includes('m'); - const hasSeconds = format?.includes('s'); + const hasTime = (format?.includes('H') || format?.includes('m')) ?? false; + const hasSeconds = format?.includes('s') ?? false; this._inputType = hasTime ? 'datetime-local' : 'date'; // Based on the type of format string change the UUI-input type @@ -70,33 +73,54 @@ export class UmbPropertyEditorUIDatePickerElement extends UmbLitElement implemen } #onChange(event: CustomEvent & { target: UmbInputDateElement }) { - this.#formatValue(event.target.value.toString()); + let value = event.target.value.toString(); + + switch (this._inputType) { + case 'time': + value = `0001-01-01 ${value}`; + break; + case 'date': + value = `${value} 00:00:00`; + break; + case 'datetime-local': + value = value.replace('T', ' '); + break; + } + + this.#syncValue(value); } /** * Formats the value depending on the input type. */ #formatValue(value: string) { - // Check that the value is a valid date - const valueToDate = new Date(value); - if (isNaN(valueToDate.getTime())) { - console.warn('[Umbraco.DatePicker] The value is not a valid date.', value); + this._inputValue = undefined; + + if (isNaN(new Date(value).getTime())) { + console.warn(`[UmbDatePicker] Invalid date: ${value}`); return; } - // Replace the potential time demoninator 'T' with a whitespace for backwards compatibility - value = value.replace('T', ' '); - - // If the inputType is 'date', we need to make sure the value doesn't have a time - if (this._inputType === 'date' && value.includes(' ')) { - value = value.split(' ')[0]; + const dateSplit = value.split(' '); + if (dateSplit.length !== 2) { + console.warn(`[UmbDatePicker] Invalid date: ${value}`); + return; } - // If the inputType is 'time', we need to remove the date part of the value - if (this._inputType === 'time' && value.includes(' ')) { - value = value.split(' ')[1]; + switch (this._inputType) { + case 'time': + this._inputValue = dateSplit[1]; + break; + case 'date': + this._inputValue = dateSplit[0]; + break; + default: + this._inputValue = dateSplit.join('T'); + break; } + } + #syncValue(value: string) { const valueHasChanged = this.value !== value; if (valueHasChanged) { this.value = value; @@ -107,7 +131,7 @@ export class UmbPropertyEditorUIDatePickerElement extends UmbLitElement implemen override render() { return html` { await expect(element).shadowDom.to.be.accessible(defaultA11yConfig); }); } + + describe('input', () => { + it('should format the value to a datetime-local', async () => { + element.value = '2024-05-03 10:44:00'; + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'YYYY-MM-dd HH:mm:ss' }]); + await element.updateComplete; + expect((element as any)._inputValue).to.equal('2024-05-03T10:44:00'); + }); + + it('should format the value to a date', async () => { + element.value = '2024-05-03 10:44:00'; + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'YYYY-MM-dd' }]); + await element.updateComplete; + expect((element as any)._inputValue).to.equal('2024-05-03'); + }); + + it('should format the value to a time', async () => { + element.value = '2024-05-03 10:44:00'; + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'HH:mm' }]); + await element.updateComplete; + expect((element as any)._inputValue).to.equal('10:44:00'); + }); + + it('should disregard a non-datetime value', async () => { + element.value = '03/05/2024 10:44:00'; + await element.updateComplete; + expect((element as any)._inputValue).to.be.undefined; + }); + }); + + describe('output', () => { + it('should format the value to a datetime-local', async () => { + inputElement.value = '2024-05-03T10:44:00'; + inputElement.dispatchEvent(new CustomEvent('change')); + await element.updateComplete; + expect(element.value).to.equal('2024-05-03 10:44:00'); + }); + + it('should format the value to a date', async () => { + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'YYYY-MM-dd' }]); + await element.updateComplete; + inputElement.value = '2024-05-03'; + inputElement.dispatchEvent(new CustomEvent('change')); + await element.updateComplete; + expect(element.value).to.equal('2024-05-03 00:00:00'); + }); + + it('should format the value to a time', async () => { + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'HH:mm' }]); + await element.updateComplete; + inputElement.value = '10:44:00'; + inputElement.dispatchEvent(new CustomEvent('change')); + await element.updateComplete; + expect(element.value).to.equal('0001-01-01 10:44:00'); + }); + }); }); From 075cc9690ef4afe34e49219e48bb03c11a9e0ddd Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Mon, 15 Jul 2024 20:32:11 +0200 Subject: [PATCH 017/132] Bugfix: Date Picker with only "time" does not display correctly (#2115) * fix: takes care of a case where the server and/or input element could send various datetime strings regardless of the configuration of the property editor, for example the "time" configuration could still be complete datetime string * test: adds tests for all the various input and output cases to ensure the format is 100% matching * fix: add `_inputValue` to differ between the input and output values, because the server always expects datetimes whereas the client expects differentiated strings --- .../property-editor-ui-date-picker.element.ts | 60 +++++++++++++------ .../property-editor-ui-date-picker.test.ts | 56 +++++++++++++++++ 2 files changed, 98 insertions(+), 18 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts index 652dee33be..b0bf7b2eae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts @@ -1,6 +1,6 @@ import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; -import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbInputDateElement } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; @@ -42,13 +42,16 @@ export class UmbPropertyEditorUIDatePickerElement extends UmbLitElement implemen @property() value?: string; + @state() + private _inputValue?: string; + public set config(config: UmbPropertyEditorConfigCollection | undefined) { if (!config) return; // Format string prevalue/config const format = config.getValueByAlias('format'); - const hasTime = format?.includes('H') || format?.includes('m'); - const hasSeconds = format?.includes('s'); + const hasTime = (format?.includes('H') || format?.includes('m')) ?? false; + const hasSeconds = format?.includes('s') ?? false; this._inputType = hasTime ? 'datetime-local' : 'date'; // Based on the type of format string change the UUI-input type @@ -70,33 +73,54 @@ export class UmbPropertyEditorUIDatePickerElement extends UmbLitElement implemen } #onChange(event: CustomEvent & { target: UmbInputDateElement }) { - this.#formatValue(event.target.value.toString()); + let value = event.target.value.toString(); + + switch (this._inputType) { + case 'time': + value = `0001-01-01 ${value}`; + break; + case 'date': + value = `${value} 00:00:00`; + break; + case 'datetime-local': + value = value.replace('T', ' '); + break; + } + + this.#syncValue(value); } /** * Formats the value depending on the input type. */ #formatValue(value: string) { - // Check that the value is a valid date - const valueToDate = new Date(value); - if (isNaN(valueToDate.getTime())) { - console.warn('[Umbraco.DatePicker] The value is not a valid date.', value); + this._inputValue = undefined; + + if (isNaN(new Date(value).getTime())) { + console.warn(`[UmbDatePicker] Invalid date: ${value}`); return; } - // Replace the potential time demoninator 'T' with a whitespace for backwards compatibility - value = value.replace('T', ' '); - - // If the inputType is 'date', we need to make sure the value doesn't have a time - if (this._inputType === 'date' && value.includes(' ')) { - value = value.split(' ')[0]; + const dateSplit = value.split(' '); + if (dateSplit.length !== 2) { + console.warn(`[UmbDatePicker] Invalid date: ${value}`); + return; } - // If the inputType is 'time', we need to remove the date part of the value - if (this._inputType === 'time' && value.includes(' ')) { - value = value.split(' ')[1]; + switch (this._inputType) { + case 'time': + this._inputValue = dateSplit[1]; + break; + case 'date': + this._inputValue = dateSplit[0]; + break; + default: + this._inputValue = dateSplit.join('T'); + break; } + } + #syncValue(value: string) { const valueHasChanged = this.value !== value; if (valueHasChanged) { this.value = value; @@ -107,7 +131,7 @@ export class UmbPropertyEditorUIDatePickerElement extends UmbLitElement implemen override render() { return html` { await expect(element).shadowDom.to.be.accessible(defaultA11yConfig); }); } + + describe('input', () => { + it('should format the value to a datetime-local', async () => { + element.value = '2024-05-03 10:44:00'; + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'YYYY-MM-dd HH:mm:ss' }]); + await element.updateComplete; + expect((element as any)._inputValue).to.equal('2024-05-03T10:44:00'); + }); + + it('should format the value to a date', async () => { + element.value = '2024-05-03 10:44:00'; + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'YYYY-MM-dd' }]); + await element.updateComplete; + expect((element as any)._inputValue).to.equal('2024-05-03'); + }); + + it('should format the value to a time', async () => { + element.value = '2024-05-03 10:44:00'; + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'HH:mm' }]); + await element.updateComplete; + expect((element as any)._inputValue).to.equal('10:44:00'); + }); + + it('should disregard a non-datetime value', async () => { + element.value = '03/05/2024 10:44:00'; + await element.updateComplete; + expect((element as any)._inputValue).to.be.undefined; + }); + }); + + describe('output', () => { + it('should format the value to a datetime-local', async () => { + inputElement.value = '2024-05-03T10:44:00'; + inputElement.dispatchEvent(new CustomEvent('change')); + await element.updateComplete; + expect(element.value).to.equal('2024-05-03 10:44:00'); + }); + + it('should format the value to a date', async () => { + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'YYYY-MM-dd' }]); + await element.updateComplete; + inputElement.value = '2024-05-03'; + inputElement.dispatchEvent(new CustomEvent('change')); + await element.updateComplete; + expect(element.value).to.equal('2024-05-03 00:00:00'); + }); + + it('should format the value to a time', async () => { + element.config = new UmbPropertyEditorConfigCollection([{ alias: 'format', value: 'HH:mm' }]); + await element.updateComplete; + inputElement.value = '10:44:00'; + inputElement.dispatchEvent(new CustomEvent('change')); + await element.updateComplete; + expect(element.value).to.equal('0001-01-01 10:44:00'); + }); + }); }); From eb3da12310a2799c14421d20983340f8f0244bb0 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:05:00 +0200 Subject: [PATCH 018/132] chore: update uui library to 1.9.0-rc.2 --- src/Umbraco.Web.UI.Client/package-lock.json | 984 ++++++++++---------- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 513 insertions(+), 473 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 277cef9094..16baab7dee 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -30,7 +30,7 @@ "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", "@types/uuid": "^9.0.8", - "@umbraco-ui/uui": "1.8.2", + "@umbraco-ui/uui": "1.9.0-rc.2", "@umbraco-ui/uui-css": "1.8.0", "base64-js": "^1.5.1", "diff": "^5.2.0", @@ -7543,318 +7543,326 @@ "link": true }, "node_modules/@umbraco-ui/uui": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.8.2.tgz", - "integrity": "sha512-uJvF+YcqwivhoUJnVpT7Na3/8toyfsnBj34/DVh97BIMv7gsWL+ijQ/6gS5VlDMZKEMeK74DtnwzdDY3ahL67Q==", + "version": "1.9.0-rc.2", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.9.0-rc.2.tgz", + "integrity": "sha512-S3kVHhpPLb4M/XFMAB46s4cWSoBivZaVdY0omKHkHwtndi1GfYtCmUov+KJ7H9K9Pbz6lRN+FAm1aOUvSwH40g==", "dependencies": { - "@umbraco-ui/uui-action-bar": "1.8.0", - "@umbraco-ui/uui-avatar": "1.8.0", - "@umbraco-ui/uui-avatar-group": "1.8.0", - "@umbraco-ui/uui-badge": "1.8.0", - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-boolean-input": "1.8.2", - "@umbraco-ui/uui-box": "1.8.0", - "@umbraco-ui/uui-breadcrumbs": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-button-group": "1.8.0", - "@umbraco-ui/uui-button-inline-create": "1.8.0", - "@umbraco-ui/uui-card": "1.8.0", - "@umbraco-ui/uui-card-block-type": "1.8.0", - "@umbraco-ui/uui-card-content-node": "1.8.0", - "@umbraco-ui/uui-card-media": "1.8.2", - "@umbraco-ui/uui-card-user": "1.8.0", - "@umbraco-ui/uui-caret": "1.8.0", - "@umbraco-ui/uui-checkbox": "1.8.2", - "@umbraco-ui/uui-color-area": "1.8.0", - "@umbraco-ui/uui-color-picker": "1.8.0", - "@umbraco-ui/uui-color-slider": "1.8.0", - "@umbraco-ui/uui-color-swatch": "1.8.0", - "@umbraco-ui/uui-color-swatches": "1.8.0", - "@umbraco-ui/uui-combobox": "1.8.0", - "@umbraco-ui/uui-combobox-list": "1.8.0", - "@umbraco-ui/uui-css": "1.8.0", - "@umbraco-ui/uui-dialog": "1.8.0", - "@umbraco-ui/uui-dialog-layout": "1.8.0", - "@umbraco-ui/uui-file-dropzone": "1.8.0", - "@umbraco-ui/uui-file-preview": "1.8.0", - "@umbraco-ui/uui-form": "1.8.0", - "@umbraco-ui/uui-form-layout-item": "1.8.1", - "@umbraco-ui/uui-form-validation-message": "1.8.1", - "@umbraco-ui/uui-icon": "1.8.0", - "@umbraco-ui/uui-icon-registry": "1.8.0", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0", - "@umbraco-ui/uui-input": "1.8.0", - "@umbraco-ui/uui-input-file": "1.8.0", - "@umbraco-ui/uui-input-lock": "1.8.2", - "@umbraco-ui/uui-input-password": "1.8.0", - "@umbraco-ui/uui-keyboard-shortcut": "1.8.0", - "@umbraco-ui/uui-label": "1.8.0", - "@umbraco-ui/uui-loader": "1.8.0", - "@umbraco-ui/uui-loader-bar": "1.8.0", - "@umbraco-ui/uui-loader-circle": "1.8.0", - "@umbraco-ui/uui-menu-item": "1.8.2", - "@umbraco-ui/uui-modal": "1.8.0", - "@umbraco-ui/uui-pagination": "1.8.0", - "@umbraco-ui/uui-popover": "1.8.0", - "@umbraco-ui/uui-popover-container": "1.8.0", - "@umbraco-ui/uui-progress-bar": "1.8.0", - "@umbraco-ui/uui-radio": "1.8.0", - "@umbraco-ui/uui-range-slider": "1.8.0", - "@umbraco-ui/uui-ref": "1.8.0", - "@umbraco-ui/uui-ref-list": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0", - "@umbraco-ui/uui-ref-node-data-type": "1.8.0", - "@umbraco-ui/uui-ref-node-document-type": "1.8.0", - "@umbraco-ui/uui-ref-node-form": "1.8.0", - "@umbraco-ui/uui-ref-node-member": "1.8.0", - "@umbraco-ui/uui-ref-node-package": "1.8.0", - "@umbraco-ui/uui-ref-node-user": "1.8.0", - "@umbraco-ui/uui-scroll-container": "1.8.0", - "@umbraco-ui/uui-select": "1.8.0", - "@umbraco-ui/uui-slider": "1.8.2", - "@umbraco-ui/uui-symbol-expand": "1.8.0", - "@umbraco-ui/uui-symbol-file": "1.8.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.8.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.8.0", - "@umbraco-ui/uui-symbol-folder": "1.8.0", - "@umbraco-ui/uui-symbol-lock": "1.8.0", - "@umbraco-ui/uui-symbol-more": "1.8.0", - "@umbraco-ui/uui-symbol-sort": "1.8.0", - "@umbraco-ui/uui-table": "1.8.0", - "@umbraco-ui/uui-tabs": "1.8.0", - "@umbraco-ui/uui-tag": "1.8.0", - "@umbraco-ui/uui-textarea": "1.8.0", - "@umbraco-ui/uui-toast-notification": "1.8.0", - "@umbraco-ui/uui-toast-notification-container": "1.8.0", - "@umbraco-ui/uui-toast-notification-layout": "1.8.0", - "@umbraco-ui/uui-toggle": "1.8.2", - "@umbraco-ui/uui-visually-hidden": "1.8.0" + "@umbraco-ui/uui-action-bar": "1.9.0-rc.1", + "@umbraco-ui/uui-avatar": "1.9.0-rc.1", + "@umbraco-ui/uui-avatar-group": "1.9.0-rc.1", + "@umbraco-ui/uui-badge": "1.9.0-rc.1", + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-boolean-input": "1.9.0-rc.1", + "@umbraco-ui/uui-box": "1.9.0-rc.1", + "@umbraco-ui/uui-breadcrumbs": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-button-group": "1.9.0-rc.1", + "@umbraco-ui/uui-button-inline-create": "1.9.0-rc.1", + "@umbraco-ui/uui-card": "1.9.0-rc.1", + "@umbraco-ui/uui-card-block-type": "1.9.0-rc.1", + "@umbraco-ui/uui-card-content-node": "1.9.0-rc.1", + "@umbraco-ui/uui-card-media": "1.9.0-rc.1", + "@umbraco-ui/uui-card-user": "1.9.0-rc.1", + "@umbraco-ui/uui-caret": "1.9.0-rc.1", + "@umbraco-ui/uui-checkbox": "1.9.0-rc.1", + "@umbraco-ui/uui-color-area": "1.9.0-rc.1", + "@umbraco-ui/uui-color-picker": "1.9.0-rc.1", + "@umbraco-ui/uui-color-slider": "1.9.0-rc.1", + "@umbraco-ui/uui-color-swatch": "1.9.0-rc.1", + "@umbraco-ui/uui-color-swatches": "1.9.0-rc.1", + "@umbraco-ui/uui-combobox": "1.9.0-rc.1", + "@umbraco-ui/uui-combobox-list": "1.9.0-rc.1", + "@umbraco-ui/uui-css": "1.9.0-rc.0", + "@umbraco-ui/uui-dialog": "1.9.0-rc.1", + "@umbraco-ui/uui-dialog-layout": "1.9.0-rc.1", + "@umbraco-ui/uui-file-dropzone": "1.9.0-rc.2", + "@umbraco-ui/uui-file-preview": "1.9.0-rc.1", + "@umbraco-ui/uui-form": "1.9.0-rc.1", + "@umbraco-ui/uui-form-layout-item": "1.9.0-rc.1", + "@umbraco-ui/uui-form-validation-message": "1.9.0-rc.1", + "@umbraco-ui/uui-icon": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1", + "@umbraco-ui/uui-input": "1.9.0-rc.1", + "@umbraco-ui/uui-input-file": "1.9.0-rc.2", + "@umbraco-ui/uui-input-lock": "1.9.0-rc.1", + "@umbraco-ui/uui-input-password": "1.9.0-rc.1", + "@umbraco-ui/uui-keyboard-shortcut": "1.9.0-rc.1", + "@umbraco-ui/uui-label": "1.9.0-rc.1", + "@umbraco-ui/uui-loader": "1.9.0-rc.1", + "@umbraco-ui/uui-loader-bar": "1.9.0-rc.1", + "@umbraco-ui/uui-loader-circle": "1.9.0-rc.1", + "@umbraco-ui/uui-menu-item": "1.9.0-rc.1", + "@umbraco-ui/uui-modal": "1.9.0-rc.1", + "@umbraco-ui/uui-pagination": "1.9.0-rc.1", + "@umbraco-ui/uui-popover": "1.9.0-rc.1", + "@umbraco-ui/uui-popover-container": "1.9.0-rc.1", + "@umbraco-ui/uui-progress-bar": "1.9.0-rc.1", + "@umbraco-ui/uui-radio": "1.9.0-rc.1", + "@umbraco-ui/uui-range-slider": "1.9.0-rc.1", + "@umbraco-ui/uui-ref": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-list": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node-data-type": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node-document-type": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node-form": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node-member": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node-package": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node-user": "1.9.0-rc.1", + "@umbraco-ui/uui-scroll-container": "1.9.0-rc.1", + "@umbraco-ui/uui-select": "1.9.0-rc.1", + "@umbraco-ui/uui-slider": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-expand": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file-dropzone": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-folder": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-lock": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-more": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-sort": "1.9.0-rc.1", + "@umbraco-ui/uui-table": "1.9.0-rc.1", + "@umbraco-ui/uui-tabs": "1.9.0-rc.1", + "@umbraco-ui/uui-tag": "1.9.0-rc.1", + "@umbraco-ui/uui-textarea": "1.9.0-rc.1", + "@umbraco-ui/uui-toast-notification": "1.9.0-rc.1", + "@umbraco-ui/uui-toast-notification-container": "1.9.0-rc.1", + "@umbraco-ui/uui-toast-notification-layout": "1.9.0-rc.1", + "@umbraco-ui/uui-toggle": "1.9.0-rc.1", + "@umbraco-ui/uui-visually-hidden": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-action-bar": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.8.0.tgz", - "integrity": "sha512-IRs42chstgXFo5b3i0j80Emt+uZSt/WmDDv7gTtB768FL1C+k0BR5sYVleEmUdkfCOv+WIVo1FAqd+9CPFkDDw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.9.0-rc.1.tgz", + "integrity": "sha512-HZCJS5z2nY6aKAwQSbN1QGMAYyFXEqWLTZ2zojxVRVI+nUF/IbElpMIFLrB2YQhhooE/ER8+5O99FrO/5jMwZw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button-group": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button-group": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-avatar": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.8.0.tgz", - "integrity": "sha512-ek6SFYEvEbu1Jf1FVrqBDHuWqCnekkU1hm4XDHEpEyhPE5OOC70SyYLB6brT0kvgBE0QKB2txYu7u8ZbWzy+OQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.9.0-rc.1.tgz", + "integrity": "sha512-CEZR1Vo3+raILWBxRq9zVcLTr2MosPtJZruRGUjWjEN5lxZm4kqzTYRWvyYG1oQgh9ePiQIqngX/MWHC51U6yQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-avatar-group": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.8.0.tgz", - "integrity": "sha512-AS6+GzeoAOS6vuZ6okP30iik8cvYPjBvoWtSYcnV0gScw52FIg9ak+j5L+rQHzE8LCqT8c6RE63HsAsJe7f6oA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.9.0-rc.1.tgz", + "integrity": "sha512-ftPQnWV5HKM030SrtyoB+t/KLgdX4TNLg7yZHwvD0TMAaWy6do8+jJtlIzdgKv8DhbkgOD8OUQxBVP4FbW1K4w==", "dependencies": { - "@umbraco-ui/uui-avatar": "1.8.0", - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-avatar": "1.9.0-rc.1", + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-badge": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.8.0.tgz", - "integrity": "sha512-mKHkkXIwN7oUybeQo5J5TOgqghinJH5gE9lJwOemNCy/oiV/TeYHOr7MqHxIJ+13Nwl9O6JbSRWbPbOD9TSkVw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.9.0-rc.1.tgz", + "integrity": "sha512-CZyWjaOnj7O6lnmqky3+5K6Ia0wcHa0h3u9dcAG7l/EE/0Dq7HxE0XXJvSIldZ2xUD8tE8twTy7otvCkxwkPCQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-base": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.8.0.tgz", - "integrity": "sha512-LIPS3sfgOr/cgpDueTqpX+t6Bw0BpNISQSrAeyC+c6X0WiahKLuwob6UXSnefh9j5xIYa5+GY1gEUDgI4wlRhg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.9.0-rc.1.tgz", + "integrity": "sha512-S+PnRuSjK9tFYPltLOnifjhJPemhynRy2ZsVawvRiETCUjbgaPyDHJby+5CDH1H6VDo5iNQ/G3W7lK248+L1cA==", "peerDependencies": { "lit": ">=2.8.0" } }, "node_modules/@umbraco-ui/uui-boolean-input": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.8.2.tgz", - "integrity": "sha512-qXHoMJKuszaAK5EYSDk1ZoA64NpIejOLwXJXDML0m4ci9G2AGUslAJn1mn4Kni0xeGoSkHuvSxB1WL2AI69Zdw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.9.0-rc.1.tgz", + "integrity": "sha512-Y/mVBUe8mnRatlsz6McBZoFaL5vpeE9PA0NWlmK6E/ub9MPZcqZQbgud2gj/9D80Q2EwFVvpTiLySyt0eXZCaA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-box": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.8.0.tgz", - "integrity": "sha512-/j/69od/uWd1Utb2IzU5pq5cvKpsq0cV4F+pS9e6HejzpcVUCz1AtdKNQvgpyOzd/oS9r8Z6pYL/V/gEydyqwg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.9.0-rc.1.tgz", + "integrity": "sha512-efxo/xmj31+p0LXXa2pJLYPfcAbMz5yi9+tYJYkj5G1Fz40JJnx3mqmiH8HI820Hg8lqjSf8JhkVSsqWjFdlaw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-css": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-css": "1.9.0-rc.0" + } + }, + "node_modules/@umbraco-ui/uui-box/node_modules/@umbraco-ui/uui-css": { + "version": "1.9.0-rc.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", + "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", + "peerDependencies": { + "lit": ">=2.8.0" } }, "node_modules/@umbraco-ui/uui-breadcrumbs": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.8.0.tgz", - "integrity": "sha512-Hv5NAfRzfaXcDYcuribjpaooZk1LVcHNTaLwoxVAUN64sufYS8kfw0sN8+jsacumUP3rpy0XgR9Ic37JUoIkBw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.9.0-rc.1.tgz", + "integrity": "sha512-MYbDe9Av5vupu4A35sQe2etwH5xoUtFM1+hHMpzB2GGw9n4Ye6noZkC4+gTnzroHqNH/0GsHflc+6HNUqjG+8w==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-button": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.8.0.tgz", - "integrity": "sha512-M0pLzpGt2CuzQAHqiHQwVdzFOyb9EznCT7b+YMQOlJCMfeVmN2KBF2xUlfb/3M2LVDukTHyGHzqaWj8Lj6YUbA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.9.0-rc.1.tgz", + "integrity": "sha512-PCoPRm1sxBcaa+l/EsKHNrrY2r7amNqoSF+sho/BdkRwaq7ssPxM67y5+qp+YSpAyNa57/rGZZ4fhJETO+26ow==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-button-group": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.8.0.tgz", - "integrity": "sha512-5K/cvrOWvRmoXByuI1illF2e9sCzzegmlEpS4XbVk1XW/6quzRJpXSCrY+awj01kFrxB+UC8mB1DIECHKNyeVg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.9.0-rc.1.tgz", + "integrity": "sha512-lx6t53OOWW7qFfx8vgee4dNfo29z6I3tadtJzxwKRbMjihA9JJJxpTvJemRwMRFscaHQjrVxXtL3gN5/Y6Tc9Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-button-inline-create": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.8.0.tgz", - "integrity": "sha512-smSZKMG0cAp+BTZe0wRaYotcQElja8gqznGaIyuGuWvvpvWEiuWMC9xjMytFNvaawCN1+uLc5fdcCArPmFjH+w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.9.0-rc.1.tgz", + "integrity": "sha512-RfrJ/1YyOubGzWut4ZiBNO/Uo4u0gDvD5vKxXUJXo92N5WIFlRPoIpah0CHtE6Z37OWed0jsnIN/7JW/rVLjjw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-card": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.8.0.tgz", - "integrity": "sha512-wwHaDbwDmragvIhhAtv/D2Ys47kXFPBKvE+/ahofXUygjTGbmjbKJ57Qfo6x8sD1BM3bSTDU6gUWaf4s0/D3WQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.9.0-rc.1.tgz", + "integrity": "sha512-gWOJY48ifsuZh208Md7hdJ/wEe3g9KNhxvq0S05TnTw+fqRwK7hfnxBh0sHj+OazA4esaVBkYzqPeRF5qx5y4A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-card-block-type": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-block-type/-/uui-card-block-type-1.8.0.tgz", - "integrity": "sha512-8Ydat2K4LipsQaCEhDTN4DeVHiqOCdEOY4Z43XCf6bTU91lNPGdagtC0ZE9b4M28E03ou4E19Ms7o2m59g0OWw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-block-type/-/uui-card-block-type-1.9.0-rc.1.tgz", + "integrity": "sha512-uxqM7s89IohqjJv+1+OSMKuopIyTlwTnLCBjc0R1aYCo+7oIbUT9f7yXw87+RenHCoIWD/XCS6aUa3TYW3iqHA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-card": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-card": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-card-content-node": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.8.0.tgz", - "integrity": "sha512-R0SYtKk5Z+on0xQ0cD1z2z43mSTgYi7sKtQDrhwoP/sWbp9xIS2wPOO+PoMiUonwXPo4JuSZ9ghgT4HzsQce1A==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.9.0-rc.1.tgz", + "integrity": "sha512-WNFwENIMuGobHmb2I6k8PZL0ByipiAdQ6W34ZLpAgOGRcBQne01MSmOKgs188AGSMDRs+/CH50bEkuRGPXOfXA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-card": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-card": "1.9.0-rc.1", + "@umbraco-ui/uui-icon": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-card-media": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.8.2.tgz", - "integrity": "sha512-rzuBoGXb8uoEE76vD+EHJkiMeTsPFGhf+bmE5Vw6oMfSJuQXyaFdQWFPu7MwKntRq63WUE47tqME9wqDl8VTaw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.9.0-rc.1.tgz", + "integrity": "sha512-MJ32ZQfG+RnaM+4Kf6xeUVBASIs/mZz9oGf3fWZm9bR/3fX8pdvgsiSMM7MEKlGXVd6v8N+uFcmpMOdDqSO42Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-card": "1.8.0", - "@umbraco-ui/uui-symbol-file": "1.8.0", - "@umbraco-ui/uui-symbol-folder": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-card": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-folder": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-card-user": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.8.0.tgz", - "integrity": "sha512-b6LiMCl/oFaW6MnPXBMCPqlVDHF/TT3LByQOTJ8rE+WHzY/zE9toVLy/LccxB62Ur/Hz7XakhU8xHaugH+zs3w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.9.0-rc.1.tgz", + "integrity": "sha512-plpBLLajfStpES4Sax1RxosRZpo3929fZrCJxZgCQGGqNhl0RzHLQQ2UP8i0AHsmI2n8OKHYbaZWL/4X/F619g==", "dependencies": { - "@umbraco-ui/uui-avatar": "1.8.0", - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-card": "1.8.0" + "@umbraco-ui/uui-avatar": "1.9.0-rc.1", + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-card": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-caret": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.8.0.tgz", - "integrity": "sha512-LxS0vLKZYNKsef/FgNXFh/CBauf+6Dgac+n5VyCu6FElh8UTP+NOeAA/4KEVSJh8gThJ0Fmb8qoMSFop+41wLg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.9.0-rc.1.tgz", + "integrity": "sha512-UtCWJAqfHfNZgxDnj81Ij63qXa/FDbL9kX+XA50a/5tAznGqtN8YPobJJduObLaaxNmnVK4BHSeuenkWiKwD0Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-checkbox": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.8.2.tgz", - "integrity": "sha512-DKGmJw2JnqYDTY99ah94hBYI+PWC/dyRqpubuDuXecqFpUme1vzacu+rzjkp0VP97rUvO6v/OA4Sjjku3oDVuQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.9.0-rc.1.tgz", + "integrity": "sha512-riiWt46dHxUXW3IqIEtmByMGwMXtb90HbiSZU/BUJCupZAuROoFT6SaX6eyOOHXoC3nvUgvD6ceW1jB7jzIkog==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-boolean-input": "1.8.2", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-boolean-input": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-color-area": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.8.0.tgz", - "integrity": "sha512-V3+iph2Vq58T9f4FoJvxsjq0LpH5VJhC2P2VkAWvMO1m528QOULDP+b5csYWH1pF78RxSZ5Lm042Dnw9XOqN2w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.9.0-rc.1.tgz", + "integrity": "sha512-JLMCj4ewo0QL1elQ4MMJNeS26jHrRH7vdk8k1+8jGfL1heKD+T5qmGAzLnuzp9SwZfywGN3GTjyVMJCEfYiqJg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-base": "1.9.0-rc.1", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-picker": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.8.0.tgz", - "integrity": "sha512-DQtKN4ivIRx54SYUhxdlbFf5ibmnp5/mscOiC98HObYVTeM9ZJUrKfFGTU9Qfekz3q+rPzzv7eec8E0Zb6qfwg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.9.0-rc.1.tgz", + "integrity": "sha512-R0bebkQXUW136XVcxLt8XbKKpudVAVN+avQOjMY5HwyATm3uneKo+jMcxhm7x+mHVa0J/SqEZHN52EQrhIU8JA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-popover-container": "1.8.0", + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-popover-container": "1.9.0-rc.1", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-slider": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.8.0.tgz", - "integrity": "sha512-DHCFX0JZXqI6wp2fRe+lOd9TAJVzTC9ghDNP+qMGattsxRnTf/pxoYucW7F5ee/ggiBIsS8i47kFa2wDmausiA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.9.0-rc.1.tgz", + "integrity": "sha512-KjLNE5Cu+6pJgORYwQG9ZwOcTVS2TPTytaGMvJg1A+dH9zPW3xypAe5Y6fKTFEFqQwMH4wOAiVT5Efc2G6BXvQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-color-swatch": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.8.0.tgz", - "integrity": "sha512-z9RQ0R5E9SErqiY1/kU6Rnp+LQBM119OKqAexHo32cM/9iyzLIEUY4CwzCYE9/ogeXDgljXLTGX21jddCNCv9A==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.9.0-rc.1.tgz", + "integrity": "sha512-jlpmjHcoHczE5QZRepOUR1/lz+e/43orJV7UJDT/ZiPK7GzqgpWVGGM28Rv3omHmYTgee7WqHVfSw4uvzASCBA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0", + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-swatches": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.8.0.tgz", - "integrity": "sha512-qCHYtHPhPsubrVn/cydmigbAde0fc+kJC7ZBxCcuJjyP+wiUhq2/d6dSfYumCcVw1N3Hyj7BRJ/8ZedUIZQ5/w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.9.0-rc.1.tgz", + "integrity": "sha512-lpxHY1ekw+oecHJ4HDkp6FwIuZhXobomPOirDm5G/9fpJnn7ScDWhQRwRalDIUMpR2E79gid8k6J1pw8Mjyxog==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-color-swatch": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-color-swatch": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-combobox": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.8.0.tgz", - "integrity": "sha512-FVc3PlBYU8S48Zr75pig+5YXh05R3wRKdLl41l7vFBDGGWsgjIsM+vJ6LaM+VoshnTzUTOVvKLE/N0FNTVUvrg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.9.0-rc.1.tgz", + "integrity": "sha512-78CfWYNnyYL0XK+4PTTjA9thUeNAVaZr06iPI0DInm216uIZ+OD3+mBm3Hw9pqbCzjqKaGIs5HtJzZVGAZprHA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-combobox-list": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0", - "@umbraco-ui/uui-popover-container": "1.8.0", - "@umbraco-ui/uui-scroll-container": "1.8.0", - "@umbraco-ui/uui-symbol-expand": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-combobox-list": "1.9.0-rc.1", + "@umbraco-ui/uui-icon": "1.9.0-rc.1", + "@umbraco-ui/uui-popover-container": "1.9.0-rc.1", + "@umbraco-ui/uui-scroll-container": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-expand": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-combobox-list": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.8.0.tgz", - "integrity": "sha512-3w353u7FdYNLCz6YV+Pk+lxlTeHd2H6rmxzwb+0BHCjbwaw9MLojbhE4JGTCpf/qtk54Xc8Dzg++aznKAYpbVw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.9.0-rc.1.tgz", + "integrity": "sha512-CnSKKe3p7yKwkBml5wSfCaTqbB4tQ+223v0noVWyNa27xCPpdsxc1NT4d0QBauVKFhpYDk+s4dRXamFYbN9qyw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-css": { @@ -7866,491 +7874,523 @@ } }, "node_modules/@umbraco-ui/uui-dialog": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.8.0.tgz", - "integrity": "sha512-QI/Oa7BJ7eEdHcy7hSuFhMPbbPitxnIb2BHVmQzy+YpBShrR3C1GW0FGcYFgJlI/S+jodf3A59VDnVL69gyliQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.9.0-rc.1.tgz", + "integrity": "sha512-Zw+LAWy24RQVS+N9YtFaMERnlSdow2Sc6nq/P6WbmHPioONJ9/StxeBaJg1jjGxDCuZMpDn3Fcu6BqpxKiQC5A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-css": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-css": "1.9.0-rc.0" } }, "node_modules/@umbraco-ui/uui-dialog-layout": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.8.0.tgz", - "integrity": "sha512-iv4wEfb6QhCOm8lxg/zH7yrJuVSEEBGgAN67qdvZ9Tu2SFzUCGTzrUcBXlL+U10cbIlq7j6KKvSQvE/IHX40Tg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.9.0-rc.1.tgz", + "integrity": "sha512-JcWXXxXKPF1Dbf7EcMwUGXwmDciUeTFFRhkUR+GEhl7mGj7rq5LWX/6sctTQaKgmmd49iKNNM7A+yxgfWQoVWw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" + } + }, + "node_modules/@umbraco-ui/uui-dialog/node_modules/@umbraco-ui/uui-css": { + "version": "1.9.0-rc.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", + "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", + "peerDependencies": { + "lit": ">=2.8.0" } }, "node_modules/@umbraco-ui/uui-file-dropzone": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.8.0.tgz", - "integrity": "sha512-Fpl/aGprUbcdPngB6xpR8/i7o8HKAWNCUze+N1pXiIVBRXmthEWO6fSm4+LkkkRoZwvYqQSaeu6Mw+Sj+MzHGA==", + "version": "1.9.0-rc.2", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.9.0-rc.2.tgz", + "integrity": "sha512-8zDwogJpzYh7G2yS4mvVTqUZOt+0JA1c9JiXHGN9PP808d2beEiAP2kqUlg7HQ6H5Muzn4wSW/+g6Z70zyQJJw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file-dropzone": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-file-preview": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.8.0.tgz", - "integrity": "sha512-WhE/9klwIUjch6PxF+DuFlu+ql0h9YbefMxj/xU4rGUTE/dK4CgA7eVQ/YfAp+WrdtwUFHyp3fThyJvfrodSgA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.9.0-rc.1.tgz", + "integrity": "sha512-zVEj9DJ9rXlkjaMtLlnNH3xVVt+D8Zom6OSzkVh595rMv2uGTwtfhX03SZoW78HgWDlthtSr1RyzkGBgpXFQ9g==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-symbol-file": "1.8.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.8.0", - "@umbraco-ui/uui-symbol-folder": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-folder": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-form": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.8.0.tgz", - "integrity": "sha512-9NtavsRoh9X39ezzLtwwbK77mUecavcjxP58Jdba/2/6wXRx+vx7qsWV5Rn3OC9XG4tZi6VLFFKahbV8N/jgjw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.9.0-rc.1.tgz", + "integrity": "sha512-x+xReBv78yqhFEgc9JLrBff4WlE1RU77vN9gfQIbcQaj6+0f+YzQ1VhGs6wDCtkTifLU8ZZADT4Qwje3Okln8g==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-form-layout-item": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.8.1.tgz", - "integrity": "sha512-QHBZayR4T49MAyS9N2jy1rgQ5Yk1JpwoWvWBpbI/WDE718zTjwUJxbLfukq+NnJx7Q1DplZ+IHTnHZkInMC2GQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.9.0-rc.1.tgz", + "integrity": "sha512-BDPXd1hjKK8Ph3g98XbRYJEIdrr21cNnOdL4atHt+LbJNEmFOldBANOrX/UNJCfiYtB9T4tFxexrlFPf6OD3fA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-form-validation-message": "1.8.1" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-form-validation-message": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-form-validation-message": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.8.1.tgz", - "integrity": "sha512-o4WfGHRtV+DrN064DtzyljRkUGYMYEkLHxxbawLowpdmdwyvLByaGOkxfuEJvHgPnncR02//gM04EjulEbGitw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.9.0-rc.1.tgz", + "integrity": "sha512-fiyPXemFSv72EeuzrIQbg/1lZd9ZnhrlSEAfM94O2lilPqV1DD/uqpqlboih8r2nI8V5QNHtc4t0lIiXfGU2Qg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-icon": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.8.0.tgz", - "integrity": "sha512-hub+KNcwiy+SKxEpI/ei3w1Ficr1SWxcLfwL67MOKS5YyB6RDwSl2FOXx+MkttTAO7PvGBbAgkiiXEkI/rxivg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.9.0-rc.1.tgz", + "integrity": "sha512-MLmgo1Q26Ii3zvoyX3fAiZzd7kao4EjzmOnIkD26NwurMb8Z5cfHW/3jvAQ9GQ/h/4XSXKltLmTzZ7UF9AuVkA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-icon-registry": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.8.0.tgz", - "integrity": "sha512-+55qGgxOBlHmQerxIhKkKJYJgPwnXwsLOBVwF8oYIM1sV58bu7BrGQRUw/K0ytFavrFOb+Easkn62wqzisXsRQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.9.0-rc.1.tgz", + "integrity": "sha512-+slebtyr0g0evsEdMyovR77wBptrPV1VEK1xu9ukRxC4SrO6VBjy47qvQ1m8UIiboUOQvKS4vZ8/TgpDdKDXfw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-icon": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-icon-registry-essential": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.8.0.tgz", - "integrity": "sha512-6+bM30t3+YpknxIjcCHi07eS+MXMkDRP+GBfrUgULqH/EqnJN/OuwMzSdbwFuwzqxmC7thx74Zfl6+JBuIs9lw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.9.0-rc.1.tgz", + "integrity": "sha512-Jt6W4TMY7c4NZbfprgNbwtUP9IUPjkeAceplBVBLDuWFNZhxvBdTrEEfPz2XCBVdF9J5QsODD8PDGfQU5dCKiw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-icon-registry": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-input": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.8.0.tgz", - "integrity": "sha512-abtQbWWDT+3uo4KVaU+ZbDVKSNtB8r0C/3L7Ql/7xJ2BNI2oSUSAcWoSV6V8Vx0DYh1XWlEQpfSAbk5Fdr7u4w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.9.0-rc.1.tgz", + "integrity": "sha512-owHhZiir+2YNJY3NGyRibkvvO4g/o7h+D32dg+zKsDME8qKo1wq66rnDEGP1QmAeaaW3J5FVxCJJl/N8Gyv9iw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-input-file": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.8.0.tgz", - "integrity": "sha512-20fXbIwjyLZWIVsqFt06ldQqA8sHEPm8Y0hmPwbb0nagYfjmIblIE1thT76JA95do7qcU50xGBN9mHt8KvPpQA==", + "version": "1.9.0-rc.2", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.9.0-rc.2.tgz", + "integrity": "sha512-30KHt3F4ayCpckZdgxI72getwVpuBXWacIAO6Zzfsfy7S0pH2hsY9RB7VNjIhhdKeMt3ChmrU8dwcFin4kUtyg==", "dependencies": { - "@umbraco-ui/uui-action-bar": "1.8.0", - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-file-dropzone": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + "@umbraco-ui/uui-action-bar": "1.9.0-rc.1", + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-file-dropzone": "1.9.0-rc.2", + "@umbraco-ui/uui-icon": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-input-lock": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.8.2.tgz", - "integrity": "sha512-GfEV2KsZ+VbHhz1zKGQfYfeSAe7P29p2VaSJZDqZmRial85J3qFRK0dLEUnkQ1x0XGwiE+OprK+EsoFq1vNpdQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.9.0-rc.1.tgz", + "integrity": "sha512-ceGfpayTwQSA8Mn0RnMDF1PSWgFDSXcsBl+CUDx8B7NeszlNleyGO7LueMCqN/KkH55Gca1PSgxZK/phRkTJew==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0", - "@umbraco-ui/uui-input": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-icon": "1.9.0-rc.1", + "@umbraco-ui/uui-input": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-input-password": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.8.0.tgz", - "integrity": "sha512-Ra7bR40GzjX11qobHsog2FPGd3FsPzgxPpGLFyMTHzDg2gchYU+KQKkmt6CTzGPgSFuN7DsEW0BMnFnWJ+2moQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.9.0-rc.1.tgz", + "integrity": "sha512-+404OqeGHtO/eOs4bJfp6FIghwI4o2jJgTdv3ik8VXNzueYccW8eyTZ9wBS3fSuqlv1k8fkEENXkdluHoGVQXw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0", - "@umbraco-ui/uui-input": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1", + "@umbraco-ui/uui-input": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-keyboard-shortcut": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.8.0.tgz", - "integrity": "sha512-XBO06bZbo7H39k33pm8EoWxm9MP/NXh7W430dLqB5E3q1EOO24PQw2voLsOyegVM3IqgKyMBTO7xHR8NmeZkyg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.9.0-rc.1.tgz", + "integrity": "sha512-KMl8SBzehbyBwYgtRXCF+OimgZdYCzx/KkoEHXAlsIb7Bxreb6lVntJwOqj5v+gohILyGyqYCCFjFyFA0BZYPg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-label": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.8.0.tgz", - "integrity": "sha512-Qj3CtfVIv3rVIanTbMvg6UAB2faWGu2mMtvVfmr9kkEP9MGfmA/xgQN94lKlDI7ic54FVkCV4N+1kA5yNkeDSQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.9.0-rc.1.tgz", + "integrity": "sha512-6zuQSHyDoRPR/KyP6E0NccDuGd8LAxq5ftJRGTNBzdBT/BCLQPcgQsJuLFtBbgKKp0Kk5nM/votkGdbvHd4P7g==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-loader": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.8.0.tgz", - "integrity": "sha512-CL+n3Icp4ugfn7SBbhbYC4WTBQ+kT27WwJIesOcjw2lmt2l20RQUyBBbZAABx2ayyDuvIzEWnFEzWW8VyVworw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.9.0-rc.1.tgz", + "integrity": "sha512-HHzyIe6kpQER7Tb4egjskmvJmlB+Z7WfvEhBr97eZHgox6IXxRVebHz7oVsxe3kSf8RYp7BU+kGmT4BNI9ucuQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-loader-bar": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.8.0.tgz", - "integrity": "sha512-KuUtQ4r/wkbVl4IJVgUb9DCXvV1yvupDw6AAnWuOu7zexuzPfrl32cKBLlnNmhGqnEGcQonX6jf24Lf8T7W6Nw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.9.0-rc.1.tgz", + "integrity": "sha512-SoRvpK5OMrehmLSRRfzMpsDbGqCkWvFvy8TZI8+kseLH5pl73nbo55C1GAq4ZuXXFUdx4aZ9RK09IsWrGec94A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-loader-circle": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.8.0.tgz", - "integrity": "sha512-L5RyH10Es/stG7CzNzS0bKOzCY+zLSwmqyh0dc8HwzZCvc6XtFHV0KgcxMjmtWWulLsQPgzIOIigf3wefr2VNQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.9.0-rc.1.tgz", + "integrity": "sha512-UyXNBwaK5npYhNNA/5BCB36AIiwN0pcj5rvSIbef+2yQU7NS7Xhh6ZK+d2xobk3Rs55gxB5v6eQyQWF1P6YQFQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-menu-item": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.8.2.tgz", - "integrity": "sha512-8LaA1P+tSLvHqWGIpLv+75k9Xewq+CE5YscO/WFMPP6el+c/PtCyr2uhXhA/KVKqBorkV4+w7cgoANt79997Mw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.9.0-rc.1.tgz", + "integrity": "sha512-9WqxUPY61309i2V/QOD+smVU4d4TI6ANG6CHPOYUnYU91a7SC33jgs3XWk7XeTtLBzWkUktt/mzTZaMnyRMr2w==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-loader-bar": "1.8.0", - "@umbraco-ui/uui-symbol-expand": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-loader-bar": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-expand": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-modal": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.8.0.tgz", - "integrity": "sha512-Cqd4pabMLnpnMEa35MKOwXCKQ+5okHYWdvdFRA8x1HqI3AEcz4FNx48nXVH94vhbELv8+fWFAPfrr1v0rvjK6w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.9.0-rc.1.tgz", + "integrity": "sha512-vRTeAjowWPKSp2i7KTdJmKo8GYabBO4Nn/h8pbpkAK7ri+HurK6TKHy4ea8qN9aGEJUXv5BMjy2I5jEq5CqD7g==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-pagination": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.8.0.tgz", - "integrity": "sha512-SvnWMzbQcTDEN+XQJ0/lVCJ1wL+2L7LA9pfSxJgXIj/pB55Pf3Tt3zMnW8B7RT7i/74atMufaqSSKElZrcPfHQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.9.0-rc.1.tgz", + "integrity": "sha512-4+NFirjRu/TpmPaMCOWl3h1No7MPLW1EALslZmgyhSKf6pCBChz1p4EkXgqHoNYEUpDIYWgTNLLVFCzg5Wq4Uw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-button-group": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-button-group": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-popover": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.8.0.tgz", - "integrity": "sha512-bHERyYItLAvtWbpOdPgmuPFgYs2TuKImm3h04DtQRatYP4dq8wg0tftVyZK3k9TVfLMvStOy2EyzybTD+1ZmBg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.9.0-rc.1.tgz", + "integrity": "sha512-G94EWcXBT5YKPSZNRza7b4mFaPrIpM/ojAljC5a1NlrJ9B4aG1HXy1gvnD3kiecCbl/c95BMQCreZTjhEfvmcg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-popover-container": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.8.0.tgz", - "integrity": "sha512-FHaX4sIa7q4HTVzMr9w3Z6zuunPuDROnHjVS6QkovqHLEgQjeTQB8hGAxN6cd3QsFbgbtC9fzBo8zTn9yxJLmA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.9.0-rc.1.tgz", + "integrity": "sha512-NVvA4HLbxFj3Y83gPHb0c6kfJcMx/+o2r9E3ijDuKhMYnVVFikvv4+13Yy/5uQo8q40JJNtcZXdKXD9IyLTp3Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-progress-bar": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.8.0.tgz", - "integrity": "sha512-WX+YjiH0HCljtzTImR6Q8bf06wm+jcCgEOE10pMRri0r4nyBCAN7Zms23sHj6rR+S/oxoYcuREqdWXWP4eRfFA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.9.0-rc.1.tgz", + "integrity": "sha512-X6JbvJobSCXWCoRrvLrPTOcoaXXhdIMMyi5e7mNxvwUVb4VOr4f7aYFr+hp1fr5AH60caf5QbmHMDeJb1XtqTA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-radio": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.8.0.tgz", - "integrity": "sha512-3kPWyc0ZbtAIeOHxAKudSslomg1zKy4RMgrfDeNumQhuCei0VWhVn76Xyfu/Gl2n4XnLIzZY3zv4XCaxwWvJZw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.9.0-rc.1.tgz", + "integrity": "sha512-U+E3y7TaNFvB760euygE1TR8gTF67dmQhkTDJqbtfX8eTPSFD59/2NUe796qsErFPCqICMBe8/SC3z648KJ66g==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-range-slider": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.8.0.tgz", - "integrity": "sha512-ThDfLvxRMfP93HQobgLaglR860vQiwCM63PXp2igXWZl69ikDDa7HuraupEpmdL13VLKAv5L1BMue1ItC1x2MA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.9.0-rc.1.tgz", + "integrity": "sha512-a+pkGqpiA91DLZhq/i/zmnW9wpppxyCrYNja1s9dEE/+FU99Tu9sA62zPjCLw7T7jalzwUlvqvAYPg4LbNKHow==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.8.0.tgz", - "integrity": "sha512-mcw7faAXeG/2QfLeuYsB950seU0FQH5Pd+aSfi6zwgWkCasxKWLrlslVTP1U5zD5WFkNt4ls6RnMGZhN6bq7mQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.9.0-rc.1.tgz", + "integrity": "sha512-ZMR3r36B/hQ3w5kqPqFU8ptjwacC2xvjPPlHNKK1izgnycfZJF6cUiTk6G+BYnpJhFQV7Mf5YKUX/nLhLjKOsw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-list": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.8.0.tgz", - "integrity": "sha512-9iiTYVyw+dpO1gEB2oMJSe2DOVvA3a2uY5FLwkRgpAjvzbhD9hhyGLcVgtvM1rxUYc9SvJbGJXk2tPY4Nit3pA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.9.0-rc.1.tgz", + "integrity": "sha512-vXTI/4nhOywPspeSW3vSsdxP+o8XcmSm4iY1d9Xfyjeoyw+aJP+g89LVV5HXP1rbtF2Ru3frRsSvKieQuK4nAA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.8.0.tgz", - "integrity": "sha512-KOGy10QhPUQFNFNPkmqro1YqFg5Y5b2N/DwkcYP/xyu4Kc1f5FuE+Uo5L41i2KdbDP6O+Tz5gsU6HpPvpEAc7Q==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.9.0-rc.1.tgz", + "integrity": "sha512-c9zJYZzP+qaxfrcasE0jJaBg2VtE7W8xXSATnaavCa9G4HdEWBVrg64G8JF+vuJ7+A98ZuhG6+w23OWGSJqG3A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0", - "@umbraco-ui/uui-ref": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-icon": "1.9.0-rc.1", + "@umbraco-ui/uui-ref": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node-data-type": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.8.0.tgz", - "integrity": "sha512-x7PicpHE7PPZrVDojKO5ornG7HZoRB9/pjCZWV+8wxPznyGmFvcJpbRQLdIVvvXVkL1a0c4uLY2CsUO+K52Rbg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.9.0-rc.1.tgz", + "integrity": "sha512-l2GToYlVvGC44CYJoypsbToYBP/WJQneRlJl2yReWOL4Cq4pFJlSN7G/flW68Q+rv9ubpXO30UetJCcCT+F0KQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node-document-type": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.8.0.tgz", - "integrity": "sha512-QjeC8DvgA/WFb3wOUXMOALK5SoKeDAvYqNp1wNvU5AMxJY+5CTfi6JNWKZsI4K+Mh3lfzPP+HaWx5MTwt5epNQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.9.0-rc.1.tgz", + "integrity": "sha512-7Za5lCUkxqCdP6u+yl1yZbFpuRgsKfW2STyrbMgcEKapv4jve4m2BnstEqFT33Itd3sY3mdsUWZiiUMYZNj9dA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node-form": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.8.0.tgz", - "integrity": "sha512-sm0xSru6pv8yK9qepzF5Wzzd1jarMBZFtzgqw5H65pGTP6pNhNG4GIkeXLfd2TH9g3e6biJNKAOFJ5w8Tz4O9A==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.9.0-rc.1.tgz", + "integrity": "sha512-FSixjy8MehGPe/c+acLwI2X7U1Z5Io8ITBhi2hXb8X8X66YWClzo8J1KoKiRhLqk6FClufpY2p5yYJkQmE2YQA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node-member": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.8.0.tgz", - "integrity": "sha512-z9l44zCER4KmNMSnCy6BFxXZ6awr/L405pJJJzqb3GAXsBip47pCzhYgxCbekB+xSY+E0hS1EuG1JJ5wn05yiQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.9.0-rc.1.tgz", + "integrity": "sha512-OyPPftRJDLvpMBkPuaP29wgWfUzi+KXTcZdnXthjGA2lIaRW5WXQpA2Ci8+iPxuuCcsEhalSHmqwruglKAeqyQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node-package": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.8.0.tgz", - "integrity": "sha512-bpWVBOm39tl5jY3Y+qn5dnikmnaAOrHEg2SBf/11d7aHOauEgDiJZQmM9BzjAeionaZrj4beYJw5szazaVkpDQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.9.0-rc.1.tgz", + "integrity": "sha512-0CFG7tMn5LHpKtqTmCC2Il2Y8ufpafTE3BCo2zDRbLKOF7uFDAGrFX+Kad3hla0dd1YLv7AL2AV06vz4tilipw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-ref-node-user": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.8.0.tgz", - "integrity": "sha512-Z91Me56phGFyt/hJaRDnXrorlYVjrL6WaUWRDZAi+mqqThFriG1DVeaFEewZ1yeD3Hy6haHanDa7dtwm2FLsBQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.9.0-rc.1.tgz", + "integrity": "sha512-lB36tup4tHx3JGtx42A1t0Ic9ynXitkZ/wz/6RmCpFKLF8j2p+U7CafbGPtr+PRD7QZ4kppVCHwr+ivuyERftg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-ref-node": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-ref-node": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-scroll-container": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.8.0.tgz", - "integrity": "sha512-PHxOZhsM53J3SQaXhH0euUwshr6Ka06iFEmtNKaqVe+nPwTjYHWHDuulvp7/qm/btjzSIrJqKgs02ft8wGqXwA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.9.0-rc.1.tgz", + "integrity": "sha512-H7RcMuF+KT4KKryWr9bVEEs8aegaD8gbSWLQLyTtpKMrDz/i/baw22D1dCQAhnbPyPJQvy0dnBYXuxsPI9IOBA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-select": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.8.0.tgz", - "integrity": "sha512-xFXo7IlAtofZCWIqnhyThIjP8ORRwo6786fv5yarayhqlKeAwJRD5t6QtX4z5z/1b/zW11oF2GkJzrzp4KN4vw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.9.0-rc.1.tgz", + "integrity": "sha512-4Ty2AdRywRB/W3ymHGN1FgCvLp0y3GgPtd1aw6wR8YyUf4J5wvv9Cv2q9A/s4mSvj+NnTPgXEVmBDp8hORhVdw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-slider": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.8.2.tgz", - "integrity": "sha512-fE1BVuCu6uDlQJh5leFSWxSPhCnJGlW3vskRMdplCLbvmFK0dYjYNbNzLyVCRsENlXJVEAkIavsdETJ784ALoQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.9.0-rc.1.tgz", + "integrity": "sha512-E93cshk9+BIPK4fQcvWMAFGXdPYmHuCnQa2tS0vw/lVa93xGVyuQ5uRynhTvmHxtJjtWhjLA2PKCrcZVJRP3og==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-expand": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.8.0.tgz", - "integrity": "sha512-AfpoR4dTOL4gEfP9lnEVymU3mlNfjFSuk8TGbqy0jVMTMbYeol5Bcl6jJFqqPd1npfgT7FPZH9zrMkcFogfSSw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.9.0-rc.1.tgz", + "integrity": "sha512-d29r1saV0Dw55lr/SmEL2rpEMHBjs8aEEknYBo1uL3pHOqoxhnIsno9zd5gH5v39uH3zy3PzLYxArPMA7Kj7hQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-file": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.8.0.tgz", - "integrity": "sha512-/2O0TNl+Sx/cCy2kQlSCOujvRwz+Rxg9JxyMX5Vc14ZqrVJ4FsD2S/jJWLtE2YJ+EtLoc15Zzw2GogZO7aBcLQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.9.0-rc.1.tgz", + "integrity": "sha512-BebopjEIBI8dXQZ2zGLH4HNCQOpwkhC2/YRNJ5uHYuSAz/5fNFqzydw+0PvQbBXiVTXgPZtcn6A8dxr7IjqEdA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-file-dropzone": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.8.0.tgz", - "integrity": "sha512-n2QRKTEnvQQgiyTQ7uVbz7XsGL0HRwaEtLqEMbaON6oYCsGWFFsbp8QqyHdB8iBQSrlV9I1J4sS0e5Ry+W25YQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.9.0-rc.1.tgz", + "integrity": "sha512-2QRKpcTwRBwuCBV0DgBgaE1LMMC8V8mGnhKVjWzyUoGVD1nD4H73j73EMJgjP6vUTxEwYyXCZmiAry5sUJNCBg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-file-thumbnail": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.8.0.tgz", - "integrity": "sha512-KdFOrfVIwtjavoa+S5ro1gi2Er8IPqXnY6gpTRpAgfO/f+/ZRg6AwPKn4SCc7QqJ8ThHpsg8wki8WGiK04rfbA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.9.0-rc.1.tgz", + "integrity": "sha512-j0lq+qRwdoV5iuqtw7qY5e6jRuUR5uxG4lZhWFbcgFQl7wL/C4wbdzVOQNoo4MCFqEZDR0PCdbUpWgKAoJoV/A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-folder": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.8.0.tgz", - "integrity": "sha512-g7FIonq/5wHH2+e/+DhB+t3E4wu7dM4MrKxLsP6b8JmYz7Y0t9OlTBT5J+i3P8YnJKYY6i5V5Eip4QNWJqC+sQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.9.0-rc.1.tgz", + "integrity": "sha512-/yYLqVwg5QDtoKevLxgleSCEYaRR7edmSVm2eYNQjbEA8BXHHH02CDGoVybb/fegsd27mqE3jkiNxAe1JnV8XA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-lock": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.8.0.tgz", - "integrity": "sha512-+/K59hTkBJr6bYOrTgPtvZEVsr59MPNwvIHhGm685WZPZrNA9dGPZrO9vnw1eyNq70XYuHkiNkmKUmna9mQmIA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.9.0-rc.1.tgz", + "integrity": "sha512-X1AY6VnPs+gCFQwyVu2ymAAzwXPEfh50jdfNiBVj3Icfq8OjFkqTATCRkclZEl7Q6ioZrZWj7Rvs9eRckvZ/mA==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-more": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.8.0.tgz", - "integrity": "sha512-BSWQ05XYJSS6WKpA6//QnSnMehV5py5j8bxl7bZzmrthr2SwyejwS+pGYq7rTqWw7BBk1mA8I7Zkl+kVph/7+g==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.9.0-rc.1.tgz", + "integrity": "sha512-T4e6Lzhd4T/sKQF9ShRU4sypymhyoK/rfnudT3zmQZ7jcTG2mVYW6nalHXurgOystQEMOE9kn0fvkA1PHqosDg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-symbol-sort": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.8.0.tgz", - "integrity": "sha512-+IFJYlPsUvJYNDc8sWB4zan/dTCCj4vkqwXALW3xLSxpsKSvtSvXPzXK/i4YwaT4Azx4hfrWIW2cz6/h5JDonA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.9.0-rc.1.tgz", + "integrity": "sha512-MI+qQqwyPDM3Ox09cBiPC13zOZ58DCacOF+kswjbf7yIsoPbqxOwLHDZP2aJSE9oqrpJQ/nZw8SNr4xR7BjWSQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-table": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.8.0.tgz", - "integrity": "sha512-nbRoValRn17SadfpGKKT1RfyoRlCLhvij2BRMw1KyldztWlWGozPQSDjqhcEPSzJZCrNV76nIMbg5FLfsTl4iA==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.9.0-rc.1.tgz", + "integrity": "sha512-AmZrfO8puhFjHn++MdPfXKCiKb0ifn8h/N8hCw3CPBFmEGvmjLOmH/fxq48i5hCqW615vwzcHOV7jTmUldDn1A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-tabs": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.8.0.tgz", - "integrity": "sha512-xnZvjjmRHJbyC9bd6LMYfHA8Jjb51GTJuFAd4j4S9NVZYomQDBFl7IKVWtUFzQvVzk93zJHVSWO8vmtNLQZreg==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.9.0-rc.1.tgz", + "integrity": "sha512-uU9covkzklnUGcKlxv8C9j1SwmpjQx+HmgSiDtS6ErWlQF6awXsCbmFFRAi/iCj6s9ZleeIpIkcf6PPGDk9VDg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-popover-container": "1.8.0", - "@umbraco-ui/uui-symbol-more": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-popover-container": "1.9.0-rc.1", + "@umbraco-ui/uui-symbol-more": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-tag": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.8.0.tgz", - "integrity": "sha512-5Dt7EsvACfs75bsncIDvqitXYub2Rfntbrc3gzXLHjqOQy2YBL5s/HNGz3xsf5msKuDAR0dmTyxhItaDAi7EkQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.9.0-rc.1.tgz", + "integrity": "sha512-3RTqNMT7yIu4xzwS6yVHovwAr1kTTaBShQEZHVIEcSbZyDv+vTtHNfpcJycpALFSXGQwIGfqGwEz6aBt7MFFgQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-textarea": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.8.0.tgz", - "integrity": "sha512-WYWiD3x1DXbsAALmTT2txoeeqiZ9J/FlkTGL1Wasu89jfm8bAgxUG5wuoa8SL4r79rAF+RUDrJPygeUqDm0N8A==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.9.0-rc.1.tgz", + "integrity": "sha512-+TiBEoHH2hPcgV6bphvkQcW2CSAJHP37cBv+P3ydkeN4HVoURqdk/1jTJ97J7okUbqbVmUi8xM6yNV0W56yHZw==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-toast-notification": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.8.0.tgz", - "integrity": "sha512-62q36/jggXp+GdRSzseQ7d63hUIXtHIXe/5bnSSHXcxxIcnbf9Sy3pkBkOYM7CXgBUUwt9T9IHLZ6eGw/6K9Xw==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.9.0-rc.1.tgz", + "integrity": "sha512-EHTJs5fH6cIBiB4Yh2d8dRX3wHDn7giaiFML1RZBri4QCELtYqy8YuZi938Wsf8gOC7y6fhDhPIC6M090ZaYqg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-button": "1.8.0", - "@umbraco-ui/uui-css": "1.8.0", - "@umbraco-ui/uui-icon": "1.8.0", - "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-button": "1.9.0-rc.1", + "@umbraco-ui/uui-css": "1.9.0-rc.0", + "@umbraco-ui/uui-icon": "1.9.0-rc.1", + "@umbraco-ui/uui-icon-registry-essential": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-toast-notification-container": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.8.0.tgz", - "integrity": "sha512-NdILHgGvKFF+JZGejTJnXt1LdJIl/MxmPUj6+rvEGCO2SDhZmIOHjnIohT8HFytxmJqyWJpryPQjo6KJezRVbQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.9.0-rc.1.tgz", + "integrity": "sha512-4vooYHpDRl5WTISKdPZY/YCBnx345/cFGse6hXGPah7W3Frq1Wo5lRV8V22zwdOsiYmsTrPvQg9Oy74FvZi+8w==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-toast-notification": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-toast-notification": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-toast-notification-layout": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.8.0.tgz", - "integrity": "sha512-NyGFv3kAcU8XMxLAyDhy3dt1oIHOwbAYO5+Utm4CFAAvcJzVTNn948Sp0dTdcfSjXjZG+3Ufv/Qb/OpcrybJ/w==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.9.0-rc.1.tgz", + "integrity": "sha512-Cu5O0vSuLpl7K5MCnK/zBH/MsDla0fkxYiXZdIH4ikQI37KmvoqVb+V0nJQNwf9HfxMkJ9KOoviR4dfPhHJk1A==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-css": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-css": "1.9.0-rc.0" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification-layout/node_modules/@umbraco-ui/uui-css": { + "version": "1.9.0-rc.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", + "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", + "peerDependencies": { + "lit": ">=2.8.0" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification/node_modules/@umbraco-ui/uui-css": { + "version": "1.9.0-rc.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", + "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", + "peerDependencies": { + "lit": ">=2.8.0" } }, "node_modules/@umbraco-ui/uui-toggle": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.8.2.tgz", - "integrity": "sha512-imjSbkHQy8pjzIOco2ts61sVtVLiu6JtXTaX8KxgSpGKZ/NofhJ48QbhRUx0qJ4l4Cm3KDC93x/2RzFG99LhkQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.9.0-rc.1.tgz", + "integrity": "sha512-J/8q1eQgnjuwDGyzPwSM+cf1mChHrj14RLJjVNQEG8FXyJuzFD4NhlrVmLa0U3sZbA2Szg6K1X0wVQOLP7Z6uQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0", - "@umbraco-ui/uui-boolean-input": "1.8.2" + "@umbraco-ui/uui-base": "1.9.0-rc.1", + "@umbraco-ui/uui-boolean-input": "1.9.0-rc.1" } }, "node_modules/@umbraco-ui/uui-visually-hidden": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.8.0.tgz", - "integrity": "sha512-3a4/B2uM3YfXjI9dyfSL2Z47ziwW7HuYoozNderKO/I7l0CgxgoHIOwF1sRb3QgOlsFhhfeKdndvU7SbD6tazQ==", + "version": "1.9.0-rc.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.9.0-rc.1.tgz", + "integrity": "sha512-S2ty8VETMrxRicrFR9cUUPSGQ0KOR+ITmzeQzcW67wD0KDPwbU56BnoMKmguuNfzziMWQZjLCz8DfQcnPU+NSg==", "dependencies": { - "@umbraco-ui/uui-base": "1.8.0" + "@umbraco-ui/uui-base": "1.9.0-rc.1" + } + }, + "node_modules/@umbraco-ui/uui/node_modules/@umbraco-ui/uui-css": { + "version": "1.9.0-rc.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", + "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", + "peerDependencies": { + "lit": ">=2.8.0" } }, "node_modules/@web/browser-logs": { diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 4ec9dda8a5..a75769b8d6 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -199,7 +199,7 @@ "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", "@types/uuid": "^9.0.8", - "@umbraco-ui/uui": "1.8.2", + "@umbraco-ui/uui": "1.9.0-rc.2", "@umbraco-ui/uui-css": "1.8.0", "base64-js": "^1.5.1", "diff": "^5.2.0", From 6ce284692b75336f0f6f3abc2e1c65ac2ae36c09 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Tue, 16 Jul 2024 10:50:51 +0200 Subject: [PATCH 019/132] uui css as well --- src/Umbraco.Web.UI.Client/package-lock.json | 48 ++------------------- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 5 insertions(+), 45 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 16baab7dee..8595160b07 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -31,7 +31,7 @@ "@types/dompurify": "^3.0.5", "@types/uuid": "^9.0.8", "@umbraco-ui/uui": "1.9.0-rc.2", - "@umbraco-ui/uui-css": "1.8.0", + "@umbraco-ui/uui-css": "1.9.0-rc.0", "base64-js": "^1.5.1", "diff": "^5.2.0", "dompurify": "^3.1.4", @@ -7690,14 +7690,6 @@ "@umbraco-ui/uui-css": "1.9.0-rc.0" } }, - "node_modules/@umbraco-ui/uui-box/node_modules/@umbraco-ui/uui-css": { - "version": "1.9.0-rc.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", - "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", - "peerDependencies": { - "lit": ">=2.8.0" - } - }, "node_modules/@umbraco-ui/uui-breadcrumbs": { "version": "1.9.0-rc.1", "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.9.0-rc.1.tgz", @@ -7866,9 +7858,9 @@ } }, "node_modules/@umbraco-ui/uui-css": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.8.0.tgz", - "integrity": "sha512-9o9OGUXQK8D9i/VSmH3gUTvH7se+4Ey22dSfbn4Jzcbe6AyGmxKocr/8eZXdkIYwNvK2aUIz/b7GIEbQc4utbA==", + "version": "1.9.0-rc.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", + "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", "peerDependencies": { "lit": ">=2.8.0" } @@ -7890,14 +7882,6 @@ "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, - "node_modules/@umbraco-ui/uui-dialog/node_modules/@umbraco-ui/uui-css": { - "version": "1.9.0-rc.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", - "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", - "peerDependencies": { - "lit": ">=2.8.0" - } - }, "node_modules/@umbraco-ui/uui-file-dropzone": { "version": "1.9.0-rc.2", "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.9.0-rc.2.tgz", @@ -8352,22 +8336,6 @@ "@umbraco-ui/uui-css": "1.9.0-rc.0" } }, - "node_modules/@umbraco-ui/uui-toast-notification-layout/node_modules/@umbraco-ui/uui-css": { - "version": "1.9.0-rc.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", - "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", - "peerDependencies": { - "lit": ">=2.8.0" - } - }, - "node_modules/@umbraco-ui/uui-toast-notification/node_modules/@umbraco-ui/uui-css": { - "version": "1.9.0-rc.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", - "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", - "peerDependencies": { - "lit": ">=2.8.0" - } - }, "node_modules/@umbraco-ui/uui-toggle": { "version": "1.9.0-rc.1", "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.9.0-rc.1.tgz", @@ -8385,14 +8353,6 @@ "@umbraco-ui/uui-base": "1.9.0-rc.1" } }, - "node_modules/@umbraco-ui/uui/node_modules/@umbraco-ui/uui-css": { - "version": "1.9.0-rc.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0-rc.0.tgz", - "integrity": "sha512-H0GKWeYCkRKxYKxRn+Zx+1QTymJyBisLH/MZtAmbMGqNdyraBOaLrgifymmZPilwuE9+d6bm0JZgSG5jFqNZug==", - "peerDependencies": { - "lit": ">=2.8.0" - } - }, "node_modules/@web/browser-logs": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index a75769b8d6..20eeef5fbd 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -200,7 +200,7 @@ "@types/dompurify": "^3.0.5", "@types/uuid": "^9.0.8", "@umbraco-ui/uui": "1.9.0-rc.2", - "@umbraco-ui/uui-css": "1.8.0", + "@umbraco-ui/uui-css": "1.9.0-rc.0", "base64-js": "^1.5.1", "diff": "^5.2.0", "dompurify": "^3.1.4", From 99f2eee23515b9901cae1b1343933a2a4b37a5ba Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:17:15 +0200 Subject: [PATCH 020/132] build(deps): upgrade npm packages --- src/Umbraco.Web.UI.Client/package-lock.json | 1130 +++++++------------ src/Umbraco.Web.UI.Client/package.json | 62 +- 2 files changed, 458 insertions(+), 734 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 8595160b07..075bb5e37c 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -29,32 +29,32 @@ "dependencies": { "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", - "@types/uuid": "^9.0.8", + "@types/uuid": "^10.0.0", "@umbraco-ui/uui": "1.9.0-rc.2", "@umbraco-ui/uui-css": "1.9.0-rc.0", "base64-js": "^1.5.1", "diff": "^5.2.0", - "dompurify": "^3.1.4", + "dompurify": "^3.1.6", "element-internals-polyfill": "^1.3.11", - "lit": "^3.1.3", - "marked": "^12.0.2", - "monaco-editor": "^0.48.0", + "lit": "^3.1.4", + "marked": "^13.0.2", + "monaco-editor": "^0.50.0", "rxjs": "^7.8.1", "tinymce": "^6.8.3", - "tinymce-i18n": "^24.5.8", - "uuid": "^9.0.1" + "tinymce-i18n": "^24.7.15", + "uuid": "^10.0.0" }, "devDependencies": { - "@babel/core": "^7.24.3", - "@eslint/js": "^9.6.0", - "@hey-api/openapi-ts": "^0.48.1", - "@mdx-js/react": "^3.0.0", + "@babel/core": "^7.24.9", + "@eslint/js": "^9.7.0", + "@hey-api/openapi-ts": "^0.48.3", + "@mdx-js/react": "^3.0.1", "@open-wc/testing": "^4.0.0", - "@playwright/test": "^1.45.1", - "@rollup/plugin-commonjs": "^25.0.7", + "@playwright/test": "^1.45.2", + "@rollup/plugin-commonjs": "^26.0.1", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.5", + "@rollup/plugin-replace": "^5.0.7", "@storybook/addon-a11y": "^7.6.17", "@storybook/addon-actions": "^7.6.17", "@storybook/addon-essentials": "^7.6.17", @@ -62,45 +62,45 @@ "@storybook/mdx2-csf": "^1.1.0", "@storybook/web-components": "^7.6.17", "@storybook/web-components-vite": "^7.6.17", - "@types/chai": "^4.3.5", + "@types/chai": "^4.3.16", "@types/eslint__js": "^8.42.3", - "@types/mocha": "^10.0.1", + "@types/mocha": "^10.0.7", "@web/dev-server-esbuild": "^1.0.2", - "@web/dev-server-import-maps": "^0.2.0", - "@web/dev-server-rollup": "^0.6.3", - "@web/test-runner": "^0.18.1", + "@web/dev-server-import-maps": "^0.2.1", + "@web/dev-server-rollup": "^0.6.4", + "@web/test-runner": "^0.18.2", "@web/test-runner-playwright": "^0.11.0", "babel-loader": "^9.1.3", - "eslint": "^9.6.0", + "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-lit": "^1.14.0", "eslint-plugin-local-rules": "^3.0.2", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-wc": "^2.1.0", - "glob": "^10.3.10", - "globals": "^15.7.0", - "lucide-static": "^0.407.0", + "glob": "^11.0.0", + "globals": "^15.8.0", + "lucide-static": "^0.408.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", - "prettier": "3.3.2", + "prettier": "3.3.3", "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.14.1", + "rollup": "^4.18.1", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", "simple-icons": "^13.1.0", "storybook": "^7.6.17", "tiny-glob": "^0.2.9", - "tsc-alias": "^1.8.8", - "typedoc": "^0.26.3", + "tsc-alias": "^1.8.10", + "typedoc": "^0.26.4", "typescript": "^5.5.3", - "typescript-eslint": "^7.15.0", - "typescript-json-schema": "^0.63.0", - "vite": "^5.2.9", - "vite-plugin-static-copy": "^1.0.5", + "typescript-eslint": "^7.16.1", + "typescript-json-schema": "^0.64.0", + "vite": "^5.3.4", + "vite-plugin-static-copy": "^1.0.6", "vite-tsconfig-paths": "^4.3.2", "web-component-analyzer": "^2.0.0" }, @@ -187,30 +187,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -226,12 +226,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.24.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -266,14 +266,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -401,9 +401,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.24.7", @@ -513,9 +513,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -531,9 +531,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "engines": { "node": ">=6.9.0" @@ -555,13 +555,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", "dev": true, "dependencies": { "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -583,9 +583,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -2070,19 +2070,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", + "@babel/generator": "^7.24.8", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", "@babel/helper-hoist-variables": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2100,12 +2100,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -2617,9 +2617,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.6.0.tgz", - "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.7.0.tgz", + "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2694,9 +2694,9 @@ "dev": true }, "node_modules/@hey-api/openapi-ts": { - "version": "0.48.2", - "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.48.2.tgz", - "integrity": "sha512-pjJb0kzjTyKAdKGfi3GkOqD4AklImS5xz7xx1grZQMlNv87iV12g2pccEsml6WYDxQ1qJ7DFWa8FexAPDbzvZg==", + "version": "0.48.3", + "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.48.3.tgz", + "integrity": "sha512-R53Nr4Gicz77icS+RiH0fwHa9A0uFPtzsjC8SBaGwtOel5ZyxeBbayWE6HhE789hp3dok9pegwWncwwOrr4WFA==", "dev": true, "dependencies": { "@apidevtools/json-schema-ref-parser": "11.6.4", @@ -3384,12 +3384,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.1.tgz", - "integrity": "sha512-Wo1bWTzQvGA7LyKGIZc8nFSTFf2TkthGIFBR+QVNilvwouGzFd4PYukZe3rvf5PSqjHi1+1NyKSDZKcQWETzaA==", + "version": "1.45.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.2.tgz", + "integrity": "sha512-JxG9eq92ET75EbVi3s+4sYbcG7q72ECeZNbdBlaMkGcNbiDQ4cAi8U2QP5oKkOx+1gpaiL1LDStmzCaEM1Z6fQ==", "dev": true, "dependencies": { - "playwright": "1.45.1" + "playwright": "1.45.2" }, "bin": { "playwright": "cli.js" @@ -4681,20 +4681,20 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", - "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz", + "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", - "glob": "^8.0.3", + "glob": "^10.4.1", "is-reference": "1.2.1", "magic-string": "^0.30.3" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0 || 14 >= 14.17" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" @@ -4715,35 +4715,75 @@ } }, "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=12" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@rollup/plugin-commonjs/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@rollup/plugin-json": { @@ -5089,6 +5129,25 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/addon-actions/node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@storybook/addon-actions/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@storybook/addon-backgrounds": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.20.tgz", @@ -5837,6 +5896,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@storybook/core-common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@storybook/core-common/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5853,6 +5921,26 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@storybook/core-common/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@storybook/core-common/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5862,6 +5950,58 @@ "node": ">=8" } }, + "node_modules/@storybook/core-common/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@storybook/core-common/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@storybook/core-common/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6943,9 +7083,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" }, "node_modules/@types/ws": { "version": "7.4.7", @@ -6982,16 +7122,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz", - "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", + "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.0", - "@typescript-eslint/type-utils": "7.16.0", - "@typescript-eslint/utils": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/type-utils": "7.16.1", + "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -7014,161 +7154,16 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", - "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", - "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", - "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", - "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.0", - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/typescript-estree": "7.16.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", - "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz", - "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", + "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.16.0", - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/typescript-estree": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4" }, "engines": { @@ -7187,14 +7182,14 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", - "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", + "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0" + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7204,120 +7199,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", - "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", - "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", - "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz", - "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.0", - "@typescript-eslint/utils": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -7337,27 +7226,10 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", - "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", - "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", + "node_modules/@typescript-eslint/types": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7367,14 +7239,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", - "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", + "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/visitor-keys": "7.16.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7395,46 +7267,7 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", - "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.0", - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/typescript-estree": "7.16.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", - "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -7443,19 +7276,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", @@ -7470,10 +7291,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -7482,6 +7303,57 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/utils": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", + "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.16.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@umbraco-backoffice/block": { "resolved": "src/packages/block", "link": true @@ -11534,6 +11406,12 @@ "resolved": "https://registry.npmjs.org/element-internals-polyfill/-/element-internals-polyfill-1.3.11.tgz", "integrity": "sha512-SQLQNVY4wMdpnP/F/HtalJbpEenQd46Avtjm5hvUdeTs3QU0zHFNX5/AmtQIPPcfzePb0ipCkQGY4GwYJIhLJA==" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -11841,16 +11719,16 @@ } }, "node_modules/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.7.0.tgz", + "integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", + "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.17.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.6.0", + "@eslint/js": "9.7.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", @@ -11859,7 +11737,7 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", + "eslint-scope": "^8.0.2", "eslint-visitor-keys": "^4.0.0", "espree": "^10.1.0", "esquery": "^1.5.0", @@ -12068,9 +11946,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -13112,21 +12990,24 @@ "dev": true }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -13159,15 +13040,15 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -14450,15 +14331,15 @@ } }, "node_modules/jackspeak": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz", - "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": "14 >=14.21 || 16 >=16.20 || >=18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -15390,9 +15271,9 @@ } }, "node_modules/lucide-static": { - "version": "0.407.0", - "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.407.0.tgz", - "integrity": "sha512-RkFYdnnkQ5K9/V7V1yY+KiZn0Ugc9b0r9I19yuGu8TRA7HcNzcpuP8Fq0+V5ariS8JMzYMgv0sQ5Thaualskeg==", + "version": "0.408.0", + "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.408.0.tgz", + "integrity": "sha512-XJioz3vKagiyA6qMDWkYqU1RUS/bMjqio0/TCOItievnV/C4wwgJZGAbk6eVDe6Wv+d0e9NbhS7Y8yMEpGkElQ==", "dev": true }, "node_modules/lunr": { @@ -15486,9 +15367,9 @@ } }, "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.2.tgz", + "integrity": "sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==", "bin": { "marked": "bin/marked.js" }, @@ -16493,9 +16374,9 @@ } }, "node_modules/monaco-editor": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.48.0.tgz", - "integrity": "sha512-goSDElNqFfw7iDHMg8WDATkfcyeLTNpBHQpO8incK6p5qZt5G/1j41X0xdGzpIkGojGXM+QiRQyLjnfDVvrpwA==" + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.50.0.tgz", + "integrity": "sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA==" }, "node_modules/mri": { "version": "1.2.0", @@ -17479,28 +17360,28 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.2.tgz", - "integrity": "sha512-voV4dDrdVZVNz84n39LFKDaRzfwhdzJ7akpyXfTMxCgRUp07U3lcJUXRlhTKP17rgt09sUzLi5iCitpEAr+6ug==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", "dev": true, "engines": { - "node": "14 || 16 || 18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/path-to-regexp": { @@ -17607,12 +17488,12 @@ } }, "node_modules/playwright": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.1.tgz", - "integrity": "sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==", + "version": "1.45.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.2.tgz", + "integrity": "sha512-ReywF2t/0teRvNBpfIgh5e4wnrI/8Su8ssdo5XsQKpjxJj+jspm00jSoz9BTg91TT0c9HRjXO7LBNVrgYj9X0g==", "dev": true, "dependencies": { - "playwright-core": "1.45.1" + "playwright-core": "1.45.2" }, "bin": { "playwright": "cli.js" @@ -17625,9 +17506,9 @@ } }, "node_modules/playwright-core": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.1.tgz", - "integrity": "sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==", + "version": "1.45.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.2.tgz", + "integrity": "sha512-ha175tAWb0dTK0X4orvBIqi3jGEt701SMxMhyujxNrgd8K0Uy5wMSwwcQHtyB4om7INUkfndx02XnQ2p6dvLDw==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -17797,9 +17678,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -19408,18 +19289,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -19845,9 +19714,9 @@ "integrity": "sha512-okoJyxuPv1gzASxQDNgQbnUXOdAIyoOSXcXcZZu7tiW0PSKEdf3SdASxPBupRj+64/E3elHwVRnzSdo82Emqbg==" }, "node_modules/tinymce-i18n": { - "version": "24.7.8", - "resolved": "https://registry.npmjs.org/tinymce-i18n/-/tinymce-i18n-24.7.8.tgz", - "integrity": "sha512-WShFgJVHGQ3cQrZ6dHkFHb3S5o+1kLMpRa7qllUV+ZSqS1lldq1nadFgOHAr0KzWWYAMHDEow9O+cbKBlqMB+A==" + "version": "24.7.15", + "resolved": "https://registry.npmjs.org/tinymce-i18n/-/tinymce-i18n-24.7.15.tgz", + "integrity": "sha512-capZBGG8q5hSMb3C5SeVfr5SZmo7jv3mdLZPJdV8mNpe/DNCYcIzWQSFW7/CW1o9rpQ2xZz9DVSfLPLV8xCoNQ==" }, "node_modules/tmp": { "version": "0.0.33", @@ -20205,9 +20074,9 @@ "dev": true }, "node_modules/typedoc": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.3.tgz", - "integrity": "sha512-6d2Sw9disvvpdk4K7VNjKr5/3hzijtfQVHRthhDqJgnhMHy1wQz4yPMJVKXElvnZhFr0nkzo+GzjXDTRV5yLpg==", + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.4.tgz", + "integrity": "sha512-FlW6HpvULDKgc3rK04V+nbFyXogPV88hurarDPOjuuB5HAwuAlrCMQ5NeH7Zt68a/ikOKu6Z/0hFXAeC9xPccQ==", "dev": true, "dependencies": { "lunr": "^2.3.9", @@ -20264,14 +20133,14 @@ } }, "node_modules/typescript-eslint": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.0.tgz", - "integrity": "sha512-kaVRivQjOzuoCXU6+hLnjo3/baxyzWVO5GrnExkFzETRYJKVHYkrJglOu2OCm8Hi9RPDWX1PTNNTpU5KRV0+RA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.1.tgz", + "integrity": "sha512-889oE5qELj65q/tGeOSvlreNKhimitFwZqQ0o7PcWC7/lgRkAMknznsCsV8J8mZGTP/Z+cIbX8accf2DE33hrA==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.16.0", - "@typescript-eslint/parser": "7.16.0", - "@typescript-eslint/utils": "7.16.0" + "@typescript-eslint/eslint-plugin": "7.16.1", + "@typescript-eslint/parser": "7.16.1", + "@typescript-eslint/utils": "7.16.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -20289,155 +20158,10 @@ } } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", - "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", - "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", - "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/visitor-keys": "7.16.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", - "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.0", - "@typescript-eslint/types": "7.16.0", - "@typescript-eslint/typescript-estree": "7.16.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", - "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.16.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/typescript-eslint/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript-eslint/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/typescript-json-schema": { - "version": "0.63.0", - "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.63.0.tgz", - "integrity": "sha512-vBfMBq4U/rZ5FIRi7u4o/YAdeRHsSabdGHogUlCPi0cYU0CGvS4Bdu8bSzyUsF+Kf5PTQUGh2TictJuQTDK6eQ==", + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.64.0.tgz", + "integrity": "sha512-Sew8llkYSzpxaMoGjpjD6NMFCr6DoWFHLs7Bz1LU48pzzi8ok8W+GZs9cG87IMBpC0UI7qwBMUI2um0LGxxLOg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", @@ -20903,9 +20627,9 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -21011,9 +20735,9 @@ } }, "node_modules/vite": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", - "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz", + "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==", "dev": true, "dependencies": { "esbuild": "^0.21.3", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 20eeef5fbd..13364abc72 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -198,32 +198,32 @@ "dependencies": { "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", - "@types/uuid": "^9.0.8", + "@types/uuid": "^10.0.0", "@umbraco-ui/uui": "1.9.0-rc.2", "@umbraco-ui/uui-css": "1.9.0-rc.0", "base64-js": "^1.5.1", "diff": "^5.2.0", - "dompurify": "^3.1.4", + "dompurify": "^3.1.6", "element-internals-polyfill": "^1.3.11", - "lit": "^3.1.3", - "marked": "^12.0.2", - "monaco-editor": "^0.48.0", + "lit": "^3.1.4", + "marked": "^13.0.2", + "monaco-editor": "^0.50.0", "rxjs": "^7.8.1", "tinymce": "^6.8.3", - "tinymce-i18n": "^24.5.8", - "uuid": "^9.0.1" + "tinymce-i18n": "^24.7.15", + "uuid": "^10.0.0" }, "devDependencies": { - "@babel/core": "^7.24.3", - "@eslint/js": "^9.6.0", - "@hey-api/openapi-ts": "^0.48.1", - "@mdx-js/react": "^3.0.0", + "@babel/core": "^7.24.9", + "@eslint/js": "^9.7.0", + "@hey-api/openapi-ts": "^0.48.3", + "@mdx-js/react": "^3.0.1", "@open-wc/testing": "^4.0.0", - "@playwright/test": "^1.45.1", - "@rollup/plugin-commonjs": "^25.0.7", + "@playwright/test": "^1.45.2", + "@rollup/plugin-commonjs": "^26.0.1", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.5", + "@rollup/plugin-replace": "^5.0.7", "@storybook/addon-a11y": "^7.6.17", "@storybook/addon-actions": "^7.6.17", "@storybook/addon-essentials": "^7.6.17", @@ -231,45 +231,45 @@ "@storybook/mdx2-csf": "^1.1.0", "@storybook/web-components": "^7.6.17", "@storybook/web-components-vite": "^7.6.17", - "@types/chai": "^4.3.5", + "@types/chai": "^4.3.16", "@types/eslint__js": "^8.42.3", - "@types/mocha": "^10.0.1", + "@types/mocha": "^10.0.7", "@web/dev-server-esbuild": "^1.0.2", - "@web/dev-server-import-maps": "^0.2.0", - "@web/dev-server-rollup": "^0.6.3", - "@web/test-runner": "^0.18.1", + "@web/dev-server-import-maps": "^0.2.1", + "@web/dev-server-rollup": "^0.6.4", + "@web/test-runner": "^0.18.2", "@web/test-runner-playwright": "^0.11.0", "babel-loader": "^9.1.3", - "eslint": "^9.6.0", + "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-lit": "^1.14.0", "eslint-plugin-local-rules": "^3.0.2", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-wc": "^2.1.0", - "glob": "^10.3.10", - "globals": "^15.7.0", - "lucide-static": "^0.407.0", + "glob": "^11.0.0", + "globals": "^15.8.0", + "lucide-static": "^0.408.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", - "prettier": "3.3.2", + "prettier": "3.3.3", "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.14.1", + "rollup": "^4.18.1", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", "simple-icons": "^13.1.0", "storybook": "^7.6.17", "tiny-glob": "^0.2.9", - "tsc-alias": "^1.8.8", - "typedoc": "^0.26.3", + "tsc-alias": "^1.8.10", + "typedoc": "^0.26.4", "typescript": "^5.5.3", - "typescript-eslint": "^7.15.0", - "typescript-json-schema": "^0.63.0", - "vite": "^5.2.9", - "vite-plugin-static-copy": "^1.0.5", + "typescript-eslint": "^7.16.1", + "typescript-json-schema": "^0.64.0", + "vite": "^5.3.4", + "vite-plugin-static-copy": "^1.0.6", "vite-tsconfig-paths": "^4.3.2", "web-component-analyzer": "^2.0.0" }, From fffe3b810405b7c3f8af9d15c50745646d717bb8 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:17:24 +0200 Subject: [PATCH 021/132] chore: re-generate icons --- .../packages/core/icon-registry/icons/icon-activity.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-add.ts | 2 +- .../packages/core/icon-registry/icons/icon-addressbook.ts | 2 +- .../packages/core/icon-registry/icons/icon-alarm-clock.ts | 2 +- .../packages/core/icon-registry/icons/icon-alert-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-alert.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-anchor.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-app.ts | 2 +- .../core/icon-registry/icons/icon-application-error.ts | 2 +- .../icon-registry/icons/icon-application-window-alt.ts | 2 +- .../core/icon-registry/icons/icon-application-window.ts | 2 +- .../packages/core/icon-registry/icons/icon-arrivals.ts | 2 +- .../packages/core/icon-registry/icons/icon-arrow-down.ts | 2 +- .../packages/core/icon-registry/icons/icon-arrow-left.ts | 2 +- .../packages/core/icon-registry/icons/icon-arrow-right.ts | 2 +- .../packages/core/icon-registry/icons/icon-arrow-up.ts | 2 +- .../packages/core/icon-registry/icons/icon-attachment.ts | 2 +- .../packages/core/icon-registry/icons/icon-autofill.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-award.ts | 2 +- .../core/icon-registry/icons/icon-axis-rotation-2.ts | 2 +- .../core/icon-registry/icons/icon-axis-rotation-3.ts | 2 +- .../core/icon-registry/icons/icon-axis-rotation.ts | 2 +- .../packages/core/icon-registry/icons/icon-backspace.ts | 8 ++++---- .../packages/core/icon-registry/icons/icon-badge-add.ts | 2 +- .../core/icon-registry/icons/icon-badge-remove.ts | 2 +- .../core/icon-registry/icons/icon-badge-restricted.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-ball.ts | 2 +- .../packages/core/icon-registry/icons/icon-bar-chart.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-barcode.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-bars.ts | 2 +- .../core/icon-registry/icons/icon-battery-full.ts | 2 +- .../packages/core/icon-registry/icons/icon-battery-low.ts | 2 +- .../packages/core/icon-registry/icons/icon-beer-glass.ts | 2 +- .../packages/core/icon-registry/icons/icon-bell-off.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-bell.ts | 2 +- .../packages/core/icon-registry/icons/icon-binarycode.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-bird.ts | 2 +- .../core/icon-registry/icons/icon-birthday-cake.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-block.ts | 2 +- .../packages/core/icon-registry/icons/icon-bluetooth.ts | 2 +- .../core/icon-registry/icons/icon-boat-shipping.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-bones.ts | 2 +- .../packages/core/icon-registry/icons/icon-book-alt-2.ts | 2 +- .../packages/core/icon-registry/icons/icon-book-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-book.ts | 2 +- .../packages/core/icon-registry/icons/icon-bookmark.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-books.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-box-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-box-open.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-box.ts | 2 +- .../packages/core/icon-registry/icons/icon-brackets.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-brick.ts | 2 +- .../packages/core/icon-registry/icons/icon-briefcase.ts | 2 +- .../core/icon-registry/icons/icon-browser-window.ts | 2 +- .../packages/core/icon-registry/icons/icon-brush-alt-2.ts | 2 +- .../packages/core/icon-registry/icons/icon-brush-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-brush.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-bug.ts | 2 +- .../core/icon-registry/icons/icon-bulleted-list.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-burn.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-bus.ts | 2 +- .../packages/core/icon-registry/icons/icon-calculator.ts | 2 +- .../core/icon-registry/icons/icon-calendar-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-calendar.ts | 2 +- .../packages/core/icon-registry/icons/icon-camcorder.ts | 2 +- .../packages/core/icon-registry/icons/icon-camera-roll.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-candy.ts | 2 +- .../packages/core/icon-registry/icons/icon-caps-lock.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-car.ts | 2 +- .../packages/core/icon-registry/icons/icon-categories.ts | 2 +- .../packages/core/icon-registry/icons/icon-certificate.ts | 2 +- .../packages/core/icon-registry/icons/icon-chart-curve.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-chart.ts | 2 +- .../packages/core/icon-registry/icons/icon-chat-active.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-chat.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-check.ts | 2 +- .../core/icon-registry/icons/icon-checkbox-dotted.ts | 2 +- .../core/icon-registry/icons/icon-checkbox-empty.ts | 2 +- .../packages/core/icon-registry/icons/icon-checkbox.ts | 2 +- .../packages/core/icon-registry/icons/icon-chip-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-chip.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-cinema.ts | 2 +- .../core/icon-registry/icons/icon-circle-dotted-active.ts | 2 +- .../core/icon-registry/icons/icon-circle-dotted.ts | 2 +- .../packages/core/icon-registry/icons/icon-circuits.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-client.ts | 2 +- .../packages/core/icon-registry/icons/icon-cloud-drive.ts | 2 +- .../core/icon-registry/icons/icon-cloud-upload.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-cloud.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-cloudy.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-clubs.ts | 2 +- .../packages/core/icon-registry/icons/icon-cocktail.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-code.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-coffee.ts | 2 +- .../packages/core/icon-registry/icons/icon-coin-dollar.ts | 2 +- .../packages/core/icon-registry/icons/icon-coin-euro.ts | 2 +- .../packages/core/icon-registry/icons/icon-coin-pound.ts | 2 +- .../packages/core/icon-registry/icons/icon-coin-yen.ts | 2 +- .../packages/core/icon-registry/icons/icon-coins-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-coins.ts | 2 +- .../core/icon-registry/icons/icon-color-bucket.ts | 2 +- .../packages/core/icon-registry/icons/icon-colorpicker.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-columns.ts | 2 +- .../icon-registry/icons/icon-combination-lock-open.ts | 2 +- .../core/icon-registry/icons/icon-combination-lock.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-command.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-company.ts | 2 +- .../packages/core/icon-registry/icons/icon-compress.ts | 2 +- .../packages/core/icon-registry/icons/icon-connection.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-console.ts | 2 +- .../packages/core/icon-registry/icons/icon-contrast.ts | 2 +- .../core/icon-registry/icons/icon-conversation-alt.ts | 2 +- .../core/icon-registry/icons/icon-conversation.ts | 2 +- .../packages/core/icon-registry/icons/icon-coverflow.ts | 2 +- .../core/icon-registry/icons/icon-credit-card-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-credit-card.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-crop.ts | 2 +- .../packages/core/icon-registry/icons/icon-crosshair.ts | 2 +- .../packages/core/icon-registry/icons/icon-crown-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-crown.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-cupcake.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-curve.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-cut.ts | 2 +- .../packages/core/icon-registry/icons/icon-dashboard.ts | 2 +- .../packages/core/icon-registry/icons/icon-database.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-defrag.ts | 2 +- .../packages/core/icon-registry/icons/icon-delete-key.ts | 8 ++++---- .../src/packages/core/icon-registry/icons/icon-delete.ts | 2 +- .../packages/core/icon-registry/icons/icon-departure.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-desktop.ts | 2 +- .../packages/core/icon-registry/icons/icon-diagnostics.ts | 2 +- .../core/icon-registry/icons/icon-diagonal-arrow-alt.ts | 2 +- .../core/icon-registry/icons/icon-diagonal-arrow.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-diamond.ts | 2 +- .../packages/core/icon-registry/icons/icon-diamonds.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-dice.ts | 2 +- .../packages/core/icon-registry/icons/icon-diploma-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-diploma.ts | 2 +- .../core/icon-registry/icons/icon-directions-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-directions.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-disc.ts | 2 +- .../packages/core/icon-registry/icons/icon-disk-image.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-display.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-dna.ts | 2 +- .../core/icon-registry/icons/icon-dock-connector.ts | 2 +- .../core/icon-registry/icons/icon-document-dashed-line.ts | 2 +- .../packages/core/icon-registry/icons/icon-document.ts | 2 +- .../packages/core/icon-registry/icons/icon-documents.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-donate.ts | 2 +- .../core/icon-registry/icons/icon-door-open-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-door-open.ts | 2 +- .../core/icon-registry/icons/icon-download-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-download.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-drop.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-eco.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-economy.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-edit.ts | 2 +- .../packages/core/icon-registry/icons/icon-employee.ts | 2 +- .../core/icon-registry/icons/icon-energy-saving-bulb.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-enter.ts | 2 +- .../packages/core/icon-registry/icons/icon-equalizer.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-escape.ts | 2 +- .../packages/core/icon-registry/icons/icon-ethernet.ts | 2 +- .../core/icon-registry/icons/icon-exit-fullscreen.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-eye.ts | 2 +- .../core/icon-registry/icons/icon-facebook-like.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-factory.ts | 2 +- .../packages/core/icon-registry/icons/icon-favorite.ts | 2 +- .../core/icon-registry/icons/icon-file-cabinet.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-files.ts | 2 +- .../core/icon-registry/icons/icon-filter-arrows.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-filter.ts | 2 +- .../packages/core/icon-registry/icons/icon-fingerprint.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-fire.ts | 2 +- .../packages/core/icon-registry/icons/icon-firewire.ts | 2 +- .../packages/core/icon-registry/icons/icon-flag-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-flag.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-flash.ts | 2 +- .../packages/core/icon-registry/icons/icon-flashlight.ts | 2 +- .../packages/core/icon-registry/icons/icon-flowerpot.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-folder.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-folders.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-font.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-food.ts | 2 +- .../packages/core/icon-registry/icons/icon-footprints.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-forking.ts | 2 +- .../packages/core/icon-registry/icons/icon-frame-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-frame.ts | 2 +- .../core/icon-registry/icons/icon-fullscreen-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-fullscreen.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-game.ts | 2 +- .../packages/core/icon-registry/icons/icon-geometry.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-gift.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-glasses.ts | 2 +- .../packages/core/icon-registry/icons/icon-globe-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-globe-asia.ts | 2 +- .../core/icon-registry/icons/icon-globe-europe-africa.ts | 2 +- .../icon-registry/icons/icon-globe-inverted-america.ts | 2 +- .../core/icon-registry/icons/icon-globe-inverted-asia.ts | 2 +- .../icons/icon-globe-inverted-europe-africa.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-globe.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-gps.ts | 2 +- .../packages/core/icon-registry/icons/icon-graduate.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-grid.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-hammer.ts | 2 +- .../core/icon-registry/icons/icon-hand-active-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-hand-active.ts | 2 +- .../core/icon-registry/icons/icon-hand-pointer-alt.ts | 2 +- .../core/icon-registry/icons/icon-hand-pointer.ts | 2 +- .../packages/core/icon-registry/icons/icon-handshake.ts | 2 +- .../core/icon-registry/icons/icon-handtool-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-handtool.ts | 2 +- .../core/icon-registry/icons/icon-hard-drive-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-hard-drive.ts | 2 +- .../packages/core/icon-registry/icons/icon-headphones.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-headset.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-hearts.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-height.ts | 2 +- .../packages/core/icon-registry/icons/icon-help-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-help.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-home.ts | 2 +- .../packages/core/icon-registry/icons/icon-hourglass.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-imac.ts | 2 +- .../packages/core/icon-registry/icons/icon-inbox-full.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-inbox.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-indent.ts | 2 +- .../packages/core/icon-registry/icons/icon-infinity.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-info.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-invoice.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-ipad.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-iphone.ts | 2 +- .../core/icon-registry/icons/icon-item-arrangement.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-junk.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-key.ts | 2 +- .../packages/core/icon-registry/icons/icon-keyboard.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-lab.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-laptop.ts | 2 +- .../packages/core/icon-registry/icons/icon-layers-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-layers.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-layout.ts | 2 +- .../core/icon-registry/icons/icon-left-double-arrow.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-legal.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-lense.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-library.ts | 2 +- .../packages/core/icon-registry/icons/icon-light-down.ts | 2 +- .../packages/core/icon-registry/icons/icon-light-up.ts | 2 +- .../core/icon-registry/icons/icon-lightbulb-active.ts | 2 +- .../packages/core/icon-registry/icons/icon-lightbulb.ts | 2 +- .../packages/core/icon-registry/icons/icon-lightning.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-link.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-list.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-load.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-loading.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-locate.ts | 2 +- .../core/icon-registry/icons/icon-location-near-me.ts | 2 +- .../core/icon-registry/icons/icon-location-nearby.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-lock.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-log-out.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-logout.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-loupe.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-magnet.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-mailbox.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-map-alt.ts | 2 +- .../core/icon-registry/icons/icon-map-location.ts | 2 +- .../packages/core/icon-registry/icons/icon-map-marker.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-map.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-medal.ts | 2 +- .../core/icon-registry/icons/icon-medical-emergency.ts | 2 +- .../packages/core/icon-registry/icons/icon-medicine.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-meeting.ts | 2 +- .../packages/core/icon-registry/icons/icon-megaphone.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-merge.ts | 2 +- .../core/icon-registry/icons/icon-message-open.ts | 2 +- .../core/icon-registry/icons/icon-message-unopened.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-message.ts | 2 +- .../packages/core/icon-registry/icons/icon-microscope.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-mindmap.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-mobile.ts | 2 +- .../packages/core/icon-registry/icons/icon-mountain.ts | 2 +- .../core/icon-registry/icons/icon-mouse-cursor.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-mouse.ts | 2 +- .../packages/core/icon-registry/icons/icon-movie-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-movie.ts | 2 +- .../icon-registry/icons/icon-multiple-credit-cards.ts | 2 +- .../core/icon-registry/icons/icon-multiple-windows.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-music.ts | 2 +- .../packages/core/icon-registry/icons/icon-name-badge.ts | 2 +- .../core/icon-registry/icons/icon-navigation-bottom.ts | 2 +- .../core/icon-registry/icons/icon-navigation-down.ts | 2 +- .../core/icon-registry/icons/icon-navigation-first.ts | 2 +- .../icon-registry/icons/icon-navigation-horizontal.ts | 2 +- .../core/icon-registry/icons/icon-navigation-last.ts | 2 +- .../core/icon-registry/icons/icon-navigation-left.ts | 2 +- .../core/icon-registry/icons/icon-navigation-right.ts | 2 +- .../core/icon-registry/icons/icon-navigation-road.ts | 2 +- .../core/icon-registry/icons/icon-navigation-top.ts | 2 +- .../core/icon-registry/icons/icon-navigation-up.ts | 2 +- .../core/icon-registry/icons/icon-navigation-vertical.ts | 2 +- .../packages/core/icon-registry/icons/icon-navigation.ts | 2 +- .../core/icon-registry/icons/icon-navigational-arrow.ts | 2 +- .../packages/core/icon-registry/icons/icon-network-alt.ts | 2 +- .../core/icon-registry/icons/icon-newspaper-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-newspaper.ts | 2 +- .../packages/core/icon-registry/icons/icon-next-media.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-next.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-nodes.ts | 2 +- .../packages/core/icon-registry/icons/icon-notepad-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-notepad.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-old-key.ts | 2 +- .../packages/core/icon-registry/icons/icon-old-phone.ts | 2 +- .../packages/core/icon-registry/icons/icon-operator.ts | 2 +- .../core/icon-registry/icons/icon-ordered-list.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-out.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-outbox.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-outdent.ts | 2 +- .../packages/core/icon-registry/icons/icon-page-add.ts | 2 +- .../packages/core/icon-registry/icons/icon-page-down.ts | 2 +- .../packages/core/icon-registry/icons/icon-page-remove.ts | 2 +- .../core/icon-registry/icons/icon-page-restricted.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-page-up.ts | 2 +- .../core/icon-registry/icons/icon-paint-roller.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-palette.ts | 2 +- .../packages/core/icon-registry/icons/icon-panel-show.ts | 2 +- .../core/icon-registry/icons/icon-pannel-close.ts | 2 +- .../packages/core/icon-registry/icons/icon-paper-bag.ts | 2 +- .../core/icon-registry/icons/icon-paper-plane-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-paper-plane.ts | 2 +- .../core/icon-registry/icons/icon-partly-cloudy.ts | 2 +- .../packages/core/icon-registry/icons/icon-paste-in.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-pause.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-pc.ts | 2 +- .../core/icon-registry/icons/icon-people-alt-2.ts | 2 +- .../packages/core/icon-registry/icons/icon-people-alt.ts | 2 +- .../core/icon-registry/icons/icon-people-female.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-people.ts | 2 +- .../packages/core/icon-registry/icons/icon-phone-ring.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-phone.ts | 2 +- .../packages/core/icon-registry/icons/icon-photo-album.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-picture.ts | 2 +- .../core/icon-registry/icons/icon-pictures-alt-2.ts | 2 +- .../core/icon-registry/icons/icon-pictures-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-pictures.ts | 2 +- .../packages/core/icon-registry/icons/icon-pie-chart.ts | 2 +- .../packages/core/icon-registry/icons/icon-piggy-bank.ts | 2 +- .../core/icon-registry/icons/icon-pin-location.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-plane.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-planet.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-play.ts | 2 +- .../core/icon-registry/icons/icon-playing-cards.ts | 2 +- .../packages/core/icon-registry/icons/icon-playlist.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-plugin.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-podcast.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-poll.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-post-it.ts | 2 +- .../core/icon-registry/icons/icon-power-outlet.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-power.ts | 2 +- .../core/icon-registry/icons/icon-presentation.ts | 2 +- .../core/icon-registry/icons/icon-previous-media.ts | 2 +- .../packages/core/icon-registry/icons/icon-previous.ts | 2 +- .../core/icon-registry/icons/icon-price-dollar.ts | 2 +- .../packages/core/icon-registry/icons/icon-price-euro.ts | 2 +- .../packages/core/icon-registry/icons/icon-price-pound.ts | 2 +- .../packages/core/icon-registry/icons/icon-price-yen.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-print.ts | 2 +- .../packages/core/icon-registry/icons/icon-printer-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-projector.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-pulse.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-pushpin.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-qr-code.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-quote.ts | 2 +- .../packages/core/icon-registry/icons/icon-radio-alt.ts | 2 +- .../core/icon-registry/icons/icon-radio-receiver.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-radio.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-rain.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-rate.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-re-post.ts | 2 +- .../packages/core/icon-registry/icons/icon-readonly.ts | 2 +- .../packages/core/icon-registry/icons/icon-receipt-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-reception.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-record.ts | 2 +- .../core/icon-registry/icons/icon-rectangle-ellipsis.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-redo.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-refresh.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-remote.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-remove.ts | 2 +- .../packages/core/icon-registry/icons/icon-repeat-one.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-repeat.ts | 2 +- .../packages/core/icon-registry/icons/icon-reply-arrow.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-resize.ts | 2 +- .../core/icon-registry/icons/icon-return-to-top.ts | 2 +- .../core/icon-registry/icons/icon-right-double-arrow.ts | 2 +- .../packages/core/icon-registry/icons/icon-roadsign.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-rocket.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-rss.ts | 2 +- .../packages/core/icon-registry/icons/icon-ruler-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-ruler.ts | 2 +- .../core/icon-registry/icons/icon-satellite-dish.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-save.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-scan.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-school.ts | 2 +- .../core/icon-registry/icons/icon-screensharing.ts | 2 +- .../packages/core/icon-registry/icons/icon-script-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-script.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-scull.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-search.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sensor.ts | 2 +- .../packages/core/icon-registry/icons/icon-server-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-server.ts | 2 +- .../core/icon-registry/icons/icon-settings-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-settings.ts | 2 +- .../packages/core/icon-registry/icons/icon-share-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-share.ts | 2 +- .../core/icon-registry/icons/icon-sharing-iphone.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-shield.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-shift.ts | 2 +- .../core/icon-registry/icons/icon-shipping-box.ts | 2 +- .../packages/core/icon-registry/icons/icon-shipping.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-shoe.ts | 2 +- .../icon-registry/icons/icon-shopping-basket-alt-2.ts | 2 +- .../core/icon-registry/icons/icon-shopping-basket-alt.ts | 2 +- .../core/icon-registry/icons/icon-shopping-basket.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-shuffle.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sience.ts | 2 +- .../packages/core/icon-registry/icons/icon-single-note.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sitemap.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sleep.ts | 2 +- .../packages/core/icon-registry/icons/icon-slideshow.ts | 2 +- .../core/icon-registry/icons/icon-smiley-inverted.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-smiley.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-snow.ts | 2 +- .../packages/core/icon-registry/icons/icon-sound-low.ts | 2 +- .../core/icon-registry/icons/icon-sound-medium.ts | 2 +- .../packages/core/icon-registry/icons/icon-sound-off.ts | 2 +- .../packages/core/icon-registry/icons/icon-sound-waves.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sound.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-spades.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-speaker.ts | 2 +- .../packages/core/icon-registry/icons/icon-speed-gauge.ts | 2 +- .../packages/core/icon-registry/icons/icon-split-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-split.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sprout.ts | 2 +- .../core/icon-registry/icons/icon-squiggly-line.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-ssd.ts | 2 +- .../core/icon-registry/icons/icon-stacked-disks.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-stamp.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-star.ts | 2 +- .../packages/core/icon-registry/icons/icon-stop-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-stop-hand.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-stop.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-store.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-stream.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sunny.ts | 2 +- .../packages/core/icon-registry/icons/icon-sweatshirt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-sync.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-t-shirt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tab-key.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tag.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tags.ts | 2 +- .../core/icon-registry/icons/icon-takeaway-cup.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-target.ts | 2 +- .../core/icon-registry/icons/icon-temperatrure-alt.ts | 2 +- .../packages/core/icon-registry/icons/icon-temperature.ts | 2 +- .../packages/core/icon-registry/icons/icon-terminal.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-theater.ts | 2 +- .../packages/core/icon-registry/icons/icon-thumb-down.ts | 2 +- .../packages/core/icon-registry/icons/icon-thumb-up.ts | 2 +- .../core/icon-registry/icons/icon-thumbnail-list.ts | 2 +- .../core/icon-registry/icons/icon-thumbnails-small.ts | 2 +- .../packages/core/icon-registry/icons/icon-thumbnails.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-ticket.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-time.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-timer.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tools.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-top.ts | 2 +- .../packages/core/icon-registry/icons/icon-traffic-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-trafic.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-train.ts | 2 +- .../packages/core/icon-registry/icons/icon-trash-alt-2.ts | 2 +- .../packages/core/icon-registry/icons/icon-trash-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-trash.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tree.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-trophy.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-truck.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tv-old.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-tv.ts | 2 +- .../packages/core/icon-registry/icons/icon-umb-content.ts | 2 +- .../core/icon-registry/icons/icon-umb-developer.ts | 2 +- .../packages/core/icon-registry/icons/icon-umb-media.ts | 2 +- .../core/icon-registry/icons/icon-umb-settings.ts | 2 +- .../packages/core/icon-registry/icons/icon-umb-users.ts | 2 +- .../packages/core/icon-registry/icons/icon-umbrella.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-undo.ts | 2 +- .../packages/core/icon-registry/icons/icon-unlocked.ts | 2 +- .../packages/core/icon-registry/icons/icon-untitled.ts | 2 +- .../core/icon-registry/icons/icon-usb-connector.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-usb.ts | 2 +- .../packages/core/icon-registry/icons/icon-user-female.ts | 2 +- .../core/icon-registry/icons/icon-user-females-alt.ts | 2 +- .../core/icon-registry/icons/icon-user-females.ts | 2 +- .../core/icon-registry/icons/icon-user-glasses.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-user.ts | 2 +- .../packages/core/icon-registry/icons/icon-users-alt.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-users.ts | 2 +- .../packages/core/icon-registry/icons/icon-utilities.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-vcard.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-video.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-voice.ts | 2 +- .../packages/core/icon-registry/icons/icon-wall-plug.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-wallet.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-wand.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-webhook.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-weight.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-width.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-wifi.ts | 2 +- .../core/icon-registry/icons/icon-window-popin.ts | 2 +- .../core/icon-registry/icons/icon-window-popout.ts | 2 +- .../core/icon-registry/icons/icon-window-sizes.ts | 2 +- .../packages/core/icon-registry/icons/icon-wine-glass.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-wrench.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-wrong.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-zip.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-zom-out.ts | 2 +- .../src/packages/core/icon-registry/icons/icon-zoom-in.ts | 2 +- .../packages/core/icon-registry/icons/icon-zoom-out.ts | 2 +- 525 files changed, 531 insertions(+), 531 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts index 1a21c810d9..bbd5e59293 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts index 5bc24372e1..e8f7854d36 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` stroke-linecap="round" stroke-linejoin="round" > - - - + + + `; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-delete.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-delete.ts index 063886e0de..554f3d6dc7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-delete.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-delete.ts @@ -1,4 +1,4 @@ -export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` +export default ` Date: Wed, 17 Jul 2024 09:50:58 +0100 Subject: [PATCH 022/132] Localizes the 'sectionSidebarApp' header --- ...idebar-menu-with-entity-actions.element.ts | 20 ++++++++++--------- .../section-sidebar-menu.element.ts | 8 +++++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts index ba9327f050..f44e5da409 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts @@ -21,15 +21,17 @@ umbExtensionsRegistry.register(manifestWithEntityActions); @customElement('umb-section-sidebar-menu-with-entity-actions') export class UmbSectionSidebarMenuWithEntityActionsElement extends UmbSectionSidebarMenuElement { override renderHeader() { - return html` `; + return html` + + `; } static override styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu/section-sidebar-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu/section-sidebar-menu.element.ts index 69f3744ed7..4f84d80985 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu/section-sidebar-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-sidebar-menu/section-sidebar-menu.element.ts @@ -30,15 +30,17 @@ export class UmbSectionSidebarMenuElement< manifest?: ManifestType; renderHeader() { - return html`

${this.manifest?.meta?.label}

`; + return html`

${this.localize.string(this.manifest?.meta?.label ?? '')}

`; } override render() { - return html`${this.renderHeader()} + return html` + ${this.renderHeader()} `; + default-element="umb-menu"> + `; } static override styles = [ From f844a7b8a61f3c8b76551e2ea7134f7d2d6c0f18 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 09:52:05 +0100 Subject: [PATCH 023/132] Adds localizations for section sidebar headers Adds keys for "Structure" and "Advanced". --- src/Umbraco.Web.UI.Client/src/assets/lang/en.ts | 2 ++ .../src/packages/core/settings/manifests.ts | 4 ++-- .../src/packages/dictionary/section/manifests.ts | 2 +- .../src/packages/documents/section/manifests.ts | 2 +- .../src/packages/media/media-section/manifests.ts | 2 +- .../src/packages/templating/menu/manifests.ts | 2 +- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts index 882a508481..529345d0d4 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts @@ -1875,6 +1875,8 @@ export default { settingsGroup: 'Settings', templatingGroup: 'Templating', thirdPartyGroup: 'Third Party', + structureGroup: 'Structure', + advancedGroup: 'Advanced', webhooks: 'Webhooks', }, update: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts index 4431ec65bd..fa926a5a20 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts @@ -32,7 +32,7 @@ export const manifests: Array = [ name: 'Structure Settings Sidebar Menu', weight: 300, meta: { - label: 'Structure', + label: '#treeHeaders_structureGroup', menu: 'Umb.Menu.StructureSettings', }, conditions: [ @@ -54,7 +54,7 @@ export const manifests: Array = [ name: 'Advanced Settings Sidebar Menu', weight: 100, meta: { - label: 'Advanced', + label: '#treeHeaders_advancedGroup', menu: 'Umb.Menu.AdvancedSettings', }, conditions: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts index 4c38d02df4..bf9a4dd77e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts @@ -31,7 +31,7 @@ const menuSectionSidebarApp: ManifestSectionSidebarApp = { name: 'Dictionary Sidebar Menu', weight: 100, meta: { - label: 'Dictionary', + label: '#sections_translation', menu: UMB_DICTIONARY_MENU_ALIAS, entityType: UMB_DICTIONARY_ROOT_ENTITY_TYPE, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/section/manifests.ts index b06ec7f7c6..32cac0418c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/section/manifests.ts @@ -30,7 +30,7 @@ const menuSectionSidebarApp: ManifestSectionSidebarAppMenuWithEntityActionsKind name: 'Content Sidebar Menu', weight: 100, meta: { - label: 'Content', + label: '#sections_content', menu: UMB_CONTENT_MENU_ALIAS, entityType: UMB_DOCUMENT_ROOT_ENTITY_TYPE, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-section/manifests.ts index 0130791800..9e82e42749 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-section/manifests.ts @@ -31,7 +31,7 @@ const menuSectionSidebarApp: ManifestSectionSidebarApp = { name: 'Media Section Sidebar Menu', weight: 100, meta: { - label: 'Media', + label: '#sections_media', menu: UMB_MEDIA_MENU_ALIAS, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/menu/manifests.ts index 7bc48cda16..e5dab05ce6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/menu/manifests.ts @@ -15,7 +15,7 @@ const menuSectionSidebarApp: ManifestTypes = { name: 'Templating Section Sidebar Menu', weight: 200, meta: { - label: 'Templating', + label: '#treeHeaders_templatingGroup', menu: 'Umb.Menu.Templating', }, conditions: [ From 1c26b33b8f3327f632eaa8fdebe24f9a6271f9cf Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 10:02:00 +0100 Subject: [PATCH 024/132] Bugfix: Localizes document collection create action --- .../action/collection-action-button.element.ts | 13 ++++++------- .../src/packages/core/collection/types.ts | 2 +- .../create-document-collection-action.element.ts | 11 +++++++++-- .../documents/collection/action/manifests.ts | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts index 4831180c80..6e33b5d692 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts @@ -65,17 +65,16 @@ export class UmbCollectionActionButtonElement extends UmbLitElement { } override render() { + const label = this.manifest?.meta.label ? this.localize.string(this.manifest.meta.label) : this.manifest?.name; return html` + look="outline" + label=${ifDefined(label)} + href=${ifDefined(this.manifest?.meta.href)} + .state=${this._buttonState} + @click=${this._onClick}> `; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts index ecd2225151..822d309abe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts @@ -1,5 +1,5 @@ -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; +import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; export interface UmbCollectionBulkActionPermissions { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts index 0e39f542dc..50a05f3eb5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/create-document-collection-action.element.ts @@ -112,7 +112,12 @@ export class UmbCreateDocumentCollectionActionElement extends UmbLitElement { if (this._allowedDocumentTypes.length !== 1) return; const item = this._allowedDocumentTypes[0]; - const label = (this.manifest?.meta.label ?? this.localize.term('general_create')) + ' ' + item.name; + const label = + (this.manifest?.meta.label + ? this.localize.string(this.manifest?.meta.label) + : this.localize.term('general_create')) + + ' ' + + item.name; return html` @@ -122,7 +127,9 @@ export class UmbCreateDocumentCollectionActionElement extends UmbLitElement { #renderDropdown() { if (!this._allowedDocumentTypes.length) return; - const label = this.manifest?.meta.label ?? this.localize.term('general_create'); + const label = this.manifest?.meta.label + ? this.localize.string(this.manifest?.meta.label) + : this.localize.term('general_create'); return html` diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts index 93063e75bd..23e86e6e81 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts @@ -9,7 +9,7 @@ export const createManifest: ManifestCollectionAction = { element: () => import('./create-document-collection-action.element.js'), weight: 100, meta: { - label: 'Create', + label: '#general_create', }, conditions: [ { From ccffee7e3204306f8fa37bbcf372d2897aba8417 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 10:09:25 +0100 Subject: [PATCH 025/132] Corrected media collection create action label localization --- .../action/create-media-collection-action.element.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts index f0ac1e340c..349aef3f0d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/create-media-collection-action.element.ts @@ -106,7 +106,12 @@ export class UmbCreateMediaCollectionActionElement extends UmbLitElement { if (this._allowedMediaTypes.length !== 1) return; const item = this._allowedMediaTypes[0]; - const label = (this.manifest?.meta.label ?? this.localize.term('general_create')) + ' ' + item.name; + const label = + (this.manifest?.meta.label + ? this.localize.string(this.manifest?.meta.label) + : this.localize.term('general_create')) + + ' ' + + item.name; return html` From 304ec952e7a1ec97770e9cef784a6f2da5913dc5 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 10:10:03 +0100 Subject: [PATCH 026/132] Localized the remaining 'collectionAction' labels --- .../src/packages/dictionary/collection/action/manifests.ts | 2 +- .../src/packages/language/collection/action/manifests.ts | 2 +- .../src/packages/webhook/collection/action/manifests.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts index 7fa77c8610..d6b73b5834 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts @@ -9,7 +9,7 @@ export const createManifest: ManifestCollectionAction = { alias: 'Umb.CollectionAction.Dictionary.Create', weight: 200, meta: { - label: 'Create', + label: '#general_create', href: `section/dictionary/workspace/dictionary/create/parent/${UMB_DICTIONARY_ROOT_ENTITY_TYPE}/null`, }, conditions: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts index 4dfa891fbe..bf76be9c0d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts @@ -8,7 +8,7 @@ export const createManifest: ManifestCollectionAction = { alias: 'Umb.CollectionAction.Language.Create', weight: 200, meta: { - label: 'Create', + label: '#general_create', href: 'section/settings/workspace/language/create', }, conditions: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts index 241ef08add..219c359da4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts @@ -8,7 +8,7 @@ export const createManifest: ManifestCollectionAction = { alias: 'Umb.CollectionAction.Webhook.Create', weight: 200, meta: { - label: 'Create', + label: '#general_create', href: 'section/settings/workspace/webhook/create', }, conditions: [ From b97c5fa6fbbf7eb807abfcc30aa4471dcaa24b13 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 11:01:44 +0100 Subject: [PATCH 027/132] Entity Bulk Action: adds "default" kind --- .../default/default.action.kind.ts | 19 ++++++++ .../entity-bulk-action/default/manifests.ts | 4 ++ .../entity-bulk-action-element.interface.ts | 3 ++ .../entity-bulk-action.element.ts | 43 ++++++++++++------- .../packages/core/entity-bulk-action/index.ts | 3 ++ .../core/entity-bulk-action/manifests.ts | 6 +++ .../models/entity-bulk-action.model.ts | 15 +++++-- .../src/packages/core/manifests.ts | 2 + 8 files changed, 76 insertions(+), 19 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts new file mode 100644 index 0000000000..f36eaf6dd4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts @@ -0,0 +1,19 @@ +import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST: UmbBackofficeManifestKind = { + type: 'kind', + alias: 'Umb.Kind.EntityBulkAction.Default', + matchKind: 'default', + matchType: 'entityBulkAction', + manifest: { + type: 'entityBulkAction', + kind: 'default', + weight: 1000, + element: () => import('../entity-bulk-action.element.js'), + meta: { + label: 'Default Entity Bulk Action', + }, + }, +}; + +export const manifest = UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts new file mode 100644 index 0000000000..3cb64a6f47 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts @@ -0,0 +1,4 @@ +import { manifest as defaultKindManifest } from './default.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [defaultKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts new file mode 100644 index 0000000000..6cc4b315a9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts @@ -0,0 +1,3 @@ +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; + +export interface UmbEntityBulkActionElement extends UmbControllerHostElement {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts index 20baaa6da0..d1ccb48953 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts @@ -1,16 +1,25 @@ -import type { UmbEntityBulkActionBase } from './entity-bulk-action-base.js'; -import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; +import type { UmbEntityBulkAction } from './entity-bulk-action.interface.js'; +import type { UmbEntityBulkActionElement } from './entity-bulk-action-element.interface.js'; import { html, ifDefined, customElement, property } from '@umbraco-cms/backoffice/external/lit'; -import type { ManifestEntityBulkAction, MetaEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { + ManifestEntityBulkAction, + MetaEntityBulkActionDefaultKind, +} from '@umbraco-cms/backoffice/extension-registry'; -@customElement('umb-entity-bulk-action') -export class UmbEntityBulkActionElement< - MetaType extends MetaEntityBulkAction = MetaEntityBulkAction, - ApiType extends UmbEntityBulkActionBase = UmbEntityBulkActionBase, -> extends UmbLitElement { +const elementName = 'umb-entity-bulk-action'; + +@customElement(elementName) +export class UmbEntityBulkActionDefaultElement< + MetaType extends MetaEntityBulkActionDefaultKind = MetaEntityBulkActionDefaultKind, + ApiType extends UmbEntityBulkAction = UmbEntityBulkAction, + > + extends UmbLitElement + implements UmbEntityBulkActionElement +{ @property({ attribute: false }) - manifest?: ManifestEntityBulkAction; + manifest?: ManifestEntityBulkAction; api?: ApiType; @@ -22,16 +31,20 @@ export class UmbEntityBulkActionElement< } override render() { - return html``; + return html` + + `; } } +export default UmbEntityBulkActionDefaultElement; + declare global { interface HTMLElementTagNameMap { - 'umb-entity-bulk-action': UmbEntityBulkActionElement; + [elementName]: UmbEntityBulkActionDefaultElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts index 24e16cf0cb..2e6df40165 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts @@ -2,3 +2,6 @@ export * from './types.js'; export * from './entity-bulk-action-base.js'; export * from './entity-bulk-action.element.js'; export * from './entity-bulk-action.interface.js'; +export type * from './entity-bulk-action-element.interface.js'; + +export { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from './default/default.action.kind.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts new file mode 100644 index 0000000000..8090bb3267 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts @@ -0,0 +1,6 @@ +import { manifests as defaultEntityBulkActionManifests } from './default/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...defaultEntityBulkActionManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts index 984aa12384..cd4bed17f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts @@ -1,6 +1,6 @@ import type { ConditionTypes } from '../conditions/types.js'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import type { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; +import type { UmbEntityBulkActionElement } from '../../entity-bulk-action/entity-bulk-action-element.interface.js'; +import type { UmbEntityBulkAction } from '@umbraco-cms/backoffice/entity-bulk-action'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; /** @@ -8,14 +8,21 @@ import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbr * For example for content you may wish to move one or more documents in bulk */ export interface ManifestEntityBulkAction - extends ManifestElementAndApi>, + extends ManifestElementAndApi>, ManifestWithDynamicConditions { type: 'entityBulkAction'; forEntityTypes: Array; meta: MetaType; } -export interface MetaEntityBulkAction { +export interface MetaEntityBulkAction {} + +export interface ManifestEntityBulkActionDefaultKind extends ManifestEntityBulkAction { + type: 'entityBulkAction'; + kind: 'default'; +} + +export interface MetaEntityBulkActionDefaultKind extends MetaEntityBulkAction { /** * The friendly name of the action to perform * diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts index 5f6f036ea4..a9e6fb1ecd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts @@ -5,6 +5,7 @@ import { manifests as contentTypeManifests } from './content-type/manifests.js'; import { manifests as cultureManifests } from './culture/manifests.js'; import { manifests as debugManifests } from './debug/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; +import { manifests as entityBulkActionManifests } from './entity-bulk-action/manifests.js'; import { manifests as extensionManifests } from './extension-registry/manifests.js'; import { manifests as iconRegistryManifests } from './icon-registry/manifests.js'; import { manifests as localizationManifests } from './localization/manifests.js'; @@ -38,6 +39,7 @@ export const manifests: Array = [ ...settingsManifests, ...modalManifests, ...entityActionManifests, + ...entityBulkActionManifests, ...propertyActionManifests, ...serverFileSystemManifests, ...debugManifests, From 7622158736b45da5d1e79d45f3fa32e87674dcb8 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 11:06:34 +0100 Subject: [PATCH 028/132] Entity Bulk Action: adds "moveTo" kind --- .../core/entity-bulk-action/common/index.ts | 1 + .../common/move-to/index.ts | 2 + .../common/move-to/manifests.ts | 4 ++ .../move-to/move-to-repository.interface.ts | 7 +++ .../common/move-to/move-to.action.kind.ts | 22 ++++++++ .../common/move-to/move-to.action.ts | 55 +++++++++++++++++++ .../common/move-to/types.ts | 6 ++ .../packages/core/entity-bulk-action/index.ts | 1 + .../core/entity-bulk-action/manifests.ts | 2 + .../models/entity-bulk-action.model.ts | 13 +++++ 10 files changed, 113 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts new file mode 100644 index 0000000000..38cd1d7714 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts @@ -0,0 +1 @@ +export * from './move-to/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts new file mode 100644 index 0000000000..d7dbc13a3b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts @@ -0,0 +1,2 @@ +export type { UmbBulkMoveToRepository } from './move-to-repository.interface.js'; +export type { UmbBulkMoveToRequestArgs } from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts new file mode 100644 index 0000000000..701878051e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts @@ -0,0 +1,4 @@ +import { manifest as moveToKindManifest } from './move-to.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [moveToKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts new file mode 100644 index 0000000000..3345adb499 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts @@ -0,0 +1,7 @@ +import type { UmbRepositoryErrorResponse } from '../../../repository/types.js'; +import type { UmbBulkMoveToRequestArgs } from './types.js'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface UmbBulkMoveToRepository extends UmbApi { + requestBulkMoveTo(args: UmbBulkMoveToRequestArgs): Promise; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts new file mode 100644 index 0000000000..5bae68e01d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts @@ -0,0 +1,22 @@ +import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; +import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: UmbBackofficeManifestKind = { + type: 'kind', + alias: 'Umb.Kind.EntityBulkAction.MoveTo', + matchKind: 'moveTo', + matchType: 'entityBulkAction', + manifest: { + ...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest, + type: 'entityBulkAction', + kind: 'moveTo', + api: () => import('./move-to.action.js'), + weight: 700, + forEntityTypes: [], + meta: { + label: '#actions_move', + bulkMoveRepositoryAlias: '', + treeAlias: '', + }, + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts new file mode 100644 index 0000000000..a008d2c080 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts @@ -0,0 +1,55 @@ +import type { UmbBulkMoveToRepository } from './move-to-repository.interface.js'; +import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; +import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_TREE_PICKER_MODAL } from '@umbraco-cms/backoffice/tree'; +import type { MetaEntityBulkActionMoveToKind } from '@umbraco-cms/backoffice/extension-registry'; + +export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase { + async execute() { + if (this.selection?.length === 0) return; + + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + + const modalContext = modalManager.open(this, UMB_TREE_PICKER_MODAL, { + data: { + foldersOnly: this.args.meta.foldersOnly, + hideTreeRoot: this.args.meta.hideTreeRoot, + treeAlias: this.args.meta.treeAlias, + }, + }); + + const value = await modalContext.onSubmit().catch(() => undefined); + if (!value?.selection?.length) return; + + const destinationUnique = value.selection[0]; + if (destinationUnique === undefined) throw new Error('Destination Unique is not available'); + + const bulkMoveRepository = await createExtensionApiByAlias( + this, + this.args.meta.bulkMoveRepositoryAlias, + ); + if (!bulkMoveRepository) throw new Error('Bulk Move Repository is not available'); + + await bulkMoveRepository.requestBulkMoveTo({ uniques: this.selection, destination: { unique: destinationUnique } }); + + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + if (!entityContext) throw new Error('Entity Context is not available'); + + const entityType = entityContext.getEntityType(); + const unique = entityContext.getUnique(); + + if (entityType && unique !== undefined) { + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + if (!eventContext) throw new Error('Event Context is not available'); + + const event = new UmbRequestReloadChildrenOfEntityEvent({ entityType, unique }); + eventContext.dispatchEvent(event); + } + } +} + +export { UmbMediaMoveEntityBulkAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts new file mode 100644 index 0000000000..75a99ea4ee --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts @@ -0,0 +1,6 @@ +export interface UmbBulkMoveToRequestArgs { + uniques: Array; + destination: { + unique: string | null; + }; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts index 2e6df40165..bf14ffa917 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts @@ -1,4 +1,5 @@ export * from './types.js'; +export * from './common/index.js'; export * from './entity-bulk-action-base.js'; export * from './entity-bulk-action.element.js'; export * from './entity-bulk-action.interface.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts index 8090bb3267..e646693e2f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts @@ -1,6 +1,8 @@ import { manifests as defaultEntityBulkActionManifests } from './default/manifests.js'; +import { manifests as moveToEntityBulkActionManifests } from './common/move-to/manifests.js'; import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ ...defaultEntityBulkActionManifests, + ...moveToEntityBulkActionManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts index cd4bed17f4..7bd4c186e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts @@ -33,3 +33,16 @@ export interface MetaEntityBulkActionDefaultKind extends MetaEntityBulkAction { */ label?: string; } + +// MOVE TO +export interface ManifestEntityBulkActionMoveToKind extends ManifestEntityBulkAction { + type: 'entityBulkAction'; + kind: 'moveTo'; +} + +export interface MetaEntityBulkActionMoveToKind extends MetaEntityBulkActionDefaultKind { + bulkMoveRepositoryAlias: string; + hideTreeRoot?: boolean; + foldersOnly?: boolean; + treeAlias: string; +} From f37c00f5ce6f0c8600141e00d77722e2212fda24 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 11:09:42 +0100 Subject: [PATCH 029/132] Implements Media "Move to" entity bulk action as a `moveTo` kind. --- .../media/entity-bulk-actions/manifests.ts | 29 ++++----------- .../entity-bulk-actions/move-to/index.ts | 1 + .../entity-bulk-actions/move-to/manifests.ts | 36 +++++++++++++++++++ .../move-to/repository/constants.ts | 1 + .../move-to/repository/index.ts | 2 ++ .../move-to/repository/manifests.ts | 11 ++++++ .../move-to/repository/move-to.repository.ts | 36 +++++++++++++++++++ .../entity-bulk-actions/move/move.action.ts | 25 ------------- 8 files changed, 93 insertions(+), 48 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts index 5690bb37a7..98f2769681 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts @@ -1,12 +1,13 @@ import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js'; -import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as moveToManifests } from './move-to/manifests.js'; import { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -export const manifests: Array = [ +const entityBulkActions: Array = [ { type: 'entityBulkAction', alias: 'Umb.EntityBulkAction.Media.Duplicate', @@ -27,26 +28,6 @@ export const manifests: Array = [ }, ], }, - { - type: 'entityBulkAction', - alias: 'Umb.EntityBulkAction.Media.MoveTo', - name: 'Move Media Entity Bulk Action', - weight: 20, - api: () => import('./move/move.action.js'), - meta: { - label: 'Move', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_MEDIA_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkMove, - }, - ], - }, { type: 'entityBulkAction', alias: 'Umb.EntityBulkAction.Media.Delete', @@ -68,3 +49,5 @@ export const manifests: Array = [ ], }, ]; + +export const manifests: Array = [...entityBulkActions, ...moveToManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/index.ts new file mode 100644 index 0000000000..7897faf401 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/index.ts @@ -0,0 +1 @@ +export { UmbBulkMoveToMediaRepository, UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts new file mode 100644 index 0000000000..a482026403 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/manifests.ts @@ -0,0 +1,36 @@ +import { UMB_MEDIA_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_MEDIA_ENTITY_TYPE } from '../../entity.js'; +import { UMB_MEDIA_TREE_ALIAS } from '../../tree/constants.js'; +import { UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS } from './repository/constants.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { + UMB_COLLECTION_ALIAS_CONDITION, + UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, +} from '@umbraco-cms/backoffice/collection'; +import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkMoveAction: ManifestTypes = { + type: 'entityBulkAction', + kind: 'moveTo', + alias: 'Umb.EntityBulkAction.Media.MoveTo', + name: 'Move Media Entity Bulk Action', + weight: 20, + forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], + meta: { + bulkMoveRepositoryAlias: UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS, + treeAlias: UMB_MEDIA_TREE_ALIAS, + }, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_MEDIA_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkMove, + }, + ], +}; + +export const manifests: Array = [bulkMoveAction, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/constants.ts new file mode 100644 index 0000000000..4037b48892 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.BulkMove'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/index.ts new file mode 100644 index 0000000000..55908dba95 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbBulkMoveToMediaRepository } from './move-to.repository.js'; +export { UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts new file mode 100644 index 0000000000..7f5b2ddb41 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkMoveRepository: ManifestRepository = { + type: 'repository', + alias: UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS, + name: 'Bulk Move Media Repository', + api: () => import('./move-to.repository.js'), +}; + +export const manifests: Array = [bulkMoveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts new file mode 100644 index 0000000000..016ff9c665 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts @@ -0,0 +1,36 @@ +import { UmbMoveMediaServerDataSource } from '../../../entity-actions/move-to/repository/media-move.server.data-source.js'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbBulkMoveToRepository, UmbBulkMoveToRequestArgs } from '@umbraco-cms/backoffice/entity-bulk-action'; +import type { UmbRepositoryErrorResponse } from '@umbraco-cms/backoffice/repository'; + +export class UmbBulkMoveToMediaRepository extends UmbRepositoryBase implements UmbBulkMoveToRepository { + #moveSource = new UmbMoveMediaServerDataSource(this); + + async requestBulkMoveTo(args: UmbBulkMoveToRequestArgs): Promise { + let count = 0; + + const destination = args.destination; + for (const unique of args.uniques) { + const { error } = await this.#moveSource.moveTo({ unique, destination }); + + if (error) { + const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); + const notification = { data: { message: error.message } }; + notificationContext.peek('danger', notification); + } else { + count++; + } + } + + if (count > 0) { + const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); + const notification = { data: { message: `Moved ${count} media items` } }; + notificationContext.peek('positive', notification); + } + + return {}; + } +} + +export { UmbBulkMoveToMediaRepository as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts deleted file mode 100644 index e3cf5b03ec..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { UMB_MEDIA_TREE_PICKER_MODAL } from '../../tree/index.js'; -import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; - -export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase { - async execute() { - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - // TODO: the picker should be single picker by default - const modalContext = modalManager.open(this, UMB_MEDIA_TREE_PICKER_MODAL, { - data: { - multiple: false, - }, - value: { - selection: [], - }, - }); - if (modalContext) { - //const { selection } = await modalContext.onSubmit(); - //const destination = selection[0]; - //await this.repository?.move(this.selection, destination); - } - } -} - -export { UmbMediaMoveEntityBulkAction as api }; From f367c565628a51c5fbfa6de5c1a5abf8e886a954 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 11:11:26 +0100 Subject: [PATCH 030/132] Media Root: adds `UmbEntityContext` with a `unique` of `null`. This enables the Collection UI to refresh when entity bulk actions complete. --- .../media/section-view/media-section-view.element.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts index 8a1f3c6a11..c4effb5844 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/media-section-view.element.ts @@ -1,20 +1,23 @@ -import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js'; import { UmbMediaCollectionRepository } from '../collection/repository/index.js'; +import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js'; +import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbCollectionElement } from '@umbraco-cms/backoffice/collection'; import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type'; +import { UmbEntityContext } from '@umbraco-cms/backoffice/entity'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { UmbCollectionBulkActionPermissions, UmbCollectionConfiguration, } from '@umbraco-cms/backoffice/collection'; import type { UmbDataTypeDetailModel } from '@umbraco-cms/backoffice/data-type'; import type { UmbRoute } from '@umbraco-cms/backoffice/router'; -import { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @customElement('umb-media-section-view') export class UmbMediaSectionViewElement extends UmbLitElement { #dataTypeDetailRepository = new UmbDataTypeDetailRepository(this); + #entityContext = new UmbEntityContext(this); #mediaCollectionRepository = new UmbMediaCollectionRepository(this); @state() @@ -24,6 +27,9 @@ export class UmbMediaSectionViewElement extends UmbLitElement { super(); this.#defineRoutes(); + + this.#entityContext.setEntityType(UMB_MEDIA_ENTITY_TYPE); + this.#entityContext.setUnique(null); } async #defineRoutes() { From c6f3f24995d00a6d27581d43751e5493898e281b Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 11:48:10 +0100 Subject: [PATCH 031/132] Refactored Media Bulk MoveTo repository notification context --- .../move-to/repository/move-to.repository.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts index 016ff9c665..a8ea03a439 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move-to/repository/move-to.repository.ts @@ -3,9 +3,19 @@ import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; import type { UmbBulkMoveToRepository, UmbBulkMoveToRequestArgs } from '@umbraco-cms/backoffice/entity-bulk-action'; import type { UmbRepositoryErrorResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbBulkMoveToMediaRepository extends UmbRepositoryBase implements UmbBulkMoveToRepository { #moveSource = new UmbMoveMediaServerDataSource(this); + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + + constructor(host: UmbControllerHost) { + super(host); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (notificationContext) => { + this.#notificationContext = notificationContext; + }); + } async requestBulkMoveTo(args: UmbBulkMoveToRequestArgs): Promise { let count = 0; @@ -15,18 +25,16 @@ export class UmbBulkMoveToMediaRepository extends UmbRepositoryBase implements U const { error } = await this.#moveSource.moveTo({ unique, destination }); if (error) { - const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); const notification = { data: { message: error.message } }; - notificationContext.peek('danger', notification); + this.#notificationContext?.peek('danger', notification); } else { count++; } } if (count > 0) { - const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); - const notification = { data: { message: `Moved ${count} media items` } }; - notificationContext.peek('positive', notification); + const notification = { data: { message: `Moved ${count} media ${count === 1 ? 'item' : 'items'}` } }; + this.#notificationContext?.peek('positive', notification); } return {}; From 47e2c41f9a5c4fa582efd89d6c4f288f08bdafba Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 13:56:50 +0100 Subject: [PATCH 032/132] Corrects manifest type and includes missing property. --- .../packages/media/media/entity-bulk-actions/manifests.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts index 98f2769681..28c8b20dff 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts @@ -1,19 +1,21 @@ import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js'; +import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import { manifests as moveToManifests } from './move-to/manifests.js'; import { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -const entityBulkActions: Array = [ +const entityBulkActions: Array = [ { type: 'entityBulkAction', alias: 'Umb.EntityBulkAction.Media.Duplicate', name: 'Duplicate Media Entity Bulk Action', weight: 30, api: () => import('./duplicate/duplicate.action.js'), + forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], meta: { label: 'Duplicate', }, @@ -34,6 +36,7 @@ const entityBulkActions: Array = [ name: 'Delete Media Entity Bulk Action', weight: 10, api: () => import('./delete/delete.action.js'), + forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], meta: { label: 'Delete', }, From d505931970cfb042341ba167f15de3b30b0c2732 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 13:57:24 +0100 Subject: [PATCH 033/132] `moveTo` kind, adds "reload structure" event --- .../common/move-to/move-to.action.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts index a008d2c080..f248afe4e8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts @@ -1,7 +1,10 @@ import type { UmbBulkMoveToRepository } from './move-to-repository.interface.js'; import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; -import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; +import { + UmbRequestReloadChildrenOfEntityEvent, + UmbRequestReloadStructureForEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; @@ -46,8 +49,13 @@ export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase Date: Wed, 17 Jul 2024 13:55:46 +0100 Subject: [PATCH 034/132] Feature: Document "move to" entity bulk action --- .../entity-bulk-actions/manifests.ts | 32 +++----------- .../entity-bulk-actions/move-to/constants.ts | 1 + .../entity-bulk-actions/move-to/index.ts | 1 + .../entity-bulk-actions/move-to/manifests.ts | 37 ++++++++++++++++ .../move-to/repository/constants.ts | 1 + .../move-to/repository/index.ts | 2 + .../move-to/repository/manifests.ts | 11 +++++ .../move-to/repository/move-to.repository.ts | 44 +++++++++++++++++++ 8 files changed, 103 insertions(+), 26 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/move-to.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts index 1ea725ee64..1053c25ce1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -1,13 +1,15 @@ import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../collection/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; +//import { UMB_DOCUMENT_TREE_ALIAS } from '../tree/manifests.js'; +import { manifests as moveToManifests } from './move-to/manifests.js'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; -import type { ManifestEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, } from '@umbraco-cms/backoffice/collection'; -export const manifests: Array = [ +export const entityBulkActions: Array = [ { type: 'entityBulkAction', kind: 'default', @@ -76,30 +78,6 @@ export const manifests: Array = [ ], }, */ - /* TODO: implement bulk move action - { - type: 'entityBulkAction', - kind: 'default', - alias: 'Umb.EntityBulkAction.Document.MoveTo', - name: 'Move Document Entity Bulk Action', - weight: 20, - api: UmbMoveDocumentEntityBulkAction, - meta: { - label: 'Move', - }, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_DOCUMENT_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkMove, - }, - ], - }, - */ /* TODO: implement bulk trash action { type: 'entityBulkAction', @@ -125,3 +103,5 @@ export const manifests: Array = [ }, */ ]; + +export const manifests: Array = [...entityBulkActions, ...moveToManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/constants.ts new file mode 100644 index 0000000000..4037b48892 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/constants.ts @@ -0,0 +1 @@ +export const UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.BulkMove'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/index.ts new file mode 100644 index 0000000000..91b4f3a861 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/index.ts @@ -0,0 +1 @@ +export { UmbBulkMoveToDocumentRepository, UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts new file mode 100644 index 0000000000..9dfba6f60a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/manifests.ts @@ -0,0 +1,37 @@ +import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_TREE_ALIAS } from '../../tree/manifests.js'; + +import { UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './repository/constants.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { + UMB_COLLECTION_ALIAS_CONDITION, + UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, +} from '@umbraco-cms/backoffice/collection'; +import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkMoveAction: ManifestTypes = { + type: 'entityBulkAction', + kind: 'moveTo', + alias: 'Umb.EntityBulkAction.Document.MoveTo', + name: 'Move Document Entity Bulk Action', + weight: 20, + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + bulkMoveRepositoryAlias: UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS, + treeAlias: UMB_DOCUMENT_TREE_ALIAS, + }, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_DOCUMENT_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkMove, + }, + ], +}; + +export const manifests: Array = [bulkMoveAction, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/constants.ts new file mode 100644 index 0000000000..1a97d3b4c2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document.BulkMove'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/index.ts new file mode 100644 index 0000000000..6d61dfcc9c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbBulkMoveToDocumentRepository } from './move-to.repository.js'; +export { UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts new file mode 100644 index 0000000000..b9e609a144 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkMoveRepository: ManifestRepository = { + type: 'repository', + alias: UMB_BULK_MOVE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Bulk Move Document Repository', + api: () => import('./move-to.repository.js'), +}; + +export const manifests: Array = [bulkMoveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/move-to.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/move-to.repository.ts new file mode 100644 index 0000000000..f791fe10c1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move-to/repository/move-to.repository.ts @@ -0,0 +1,44 @@ +import { UmbMoveDocumentServerDataSource } from '../../../entity-actions/move-to/repository/document-move.server.data-source.js'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbBulkMoveToRepository, UmbBulkMoveToRequestArgs } from '@umbraco-cms/backoffice/entity-bulk-action'; +import type { UmbRepositoryErrorResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbBulkMoveToDocumentRepository extends UmbRepositoryBase implements UmbBulkMoveToRepository { + #moveSource = new UmbMoveDocumentServerDataSource(this); + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + + constructor(host: UmbControllerHost) { + super(host); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (notificationContext) => { + this.#notificationContext = notificationContext; + }); + } + + async requestBulkMoveTo(args: UmbBulkMoveToRequestArgs): Promise { + let count = 0; + + const destination = args.destination; + for (const unique of args.uniques) { + const { error } = await this.#moveSource.moveTo({ unique, destination }); + + if (error) { + const notification = { data: { message: error.message } }; + this.#notificationContext?.peek('danger', notification); + } else { + count++; + } + } + + if (count > 0) { + const notification = { data: { message: `Moved ${count} ${count === 1 ? 'document' : 'documents'}` } }; + this.#notificationContext?.peek('positive', notification); + } + + return {}; + } +} + +export { UmbBulkMoveToDocumentRepository as api }; From 98e040bde13cc35db718f8e0eec92824013be0e5 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 15:56:02 +0100 Subject: [PATCH 035/132] Collection view: localizes the "Clear" button label --- .../components/collection-selection-actions.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts index 275702495d..c12a20a145 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts @@ -82,7 +82,7 @@ export class UmbCollectionSelectionActionsElement extends UmbLitElement { ${this._renderSelectionCount()} From 395999c40d01f4d134b9b136c020d346715465ed Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 16:23:38 +0100 Subject: [PATCH 036/132] Entity Bulk Action: adds optional button icon --- .../entity-bulk-action/default/default.action.kind.ts | 1 + .../entity-bulk-action/entity-bulk-action.element.ts | 11 +++++------ .../models/entity-bulk-action.model.ts | 10 ++++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts index f36eaf6dd4..2b13205e93 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts @@ -11,6 +11,7 @@ export const UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST: UmbBackofficeManifest weight: 1000, element: () => import('../entity-bulk-action.element.js'), meta: { + icon: '', label: 'Default Entity Bulk Action', }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts index d1ccb48953..0478595f71 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts @@ -1,6 +1,6 @@ import type { UmbEntityBulkAction } from './entity-bulk-action.interface.js'; import type { UmbEntityBulkActionElement } from './entity-bulk-action-element.interface.js'; -import { html, ifDefined, customElement, property } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, property, when } from '@umbraco-cms/backoffice/external/lit'; import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { @@ -32,11 +32,10 @@ export class UmbEntityBulkActionDefaultElement< override render() { return html` - + + ${when(this.manifest?.meta.icon, () => html``)} + ${this.localize.string(this.manifest?.meta.label ?? '')} + `; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts index 7bd4c186e7..fa05144d4e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts @@ -23,6 +23,16 @@ export interface ManifestEntityBulkActionDefaultKind extends ManifestEntityBulkA } export interface MetaEntityBulkActionDefaultKind extends MetaEntityBulkAction { + /** + * An icon to represent the action to be performed + * + * @examples [ + * "icon-box", + * "icon-grid" + * ] + */ + icon: string; + /** * The friendly name of the action to perform * From 15317f7847d3b3ed0d902c798327185abfcab98d Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 16:24:10 +0100 Subject: [PATCH 037/132] Adds icon for `moveTo` kind --- .../entity-bulk-action/common/move-to/move-to.action.kind.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts index 5bae68e01d..a26a2d7302 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts @@ -14,6 +14,7 @@ export const manifest: UmbBackofficeManifestKind = { weight: 700, forEntityTypes: [], meta: { + icon: 'icon-enter', label: '#actions_move', bulkMoveRepositoryAlias: '', treeAlias: '', From 82069102068fcdec65156a0cb4b7c29df84cc448 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 16:24:42 +0100 Subject: [PATCH 038/132] Adds icons for document Publish and Unpublish as well as localizing the button labels. --- .../documents/documents/entity-bulk-actions/manifests.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts index 1053c25ce1..2fbc3bd2a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -18,7 +18,8 @@ export const entityBulkActions: Array = [ weight: 50, api: () => import('./publish/publish.action.js'), meta: { - label: 'Publish', + icon: 'icon-globe', + label: '#actions_publish', }, forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], conditions: [ @@ -40,7 +41,8 @@ export const entityBulkActions: Array = [ weight: 40, api: () => import('./unpublish/unpublish.action.js'), meta: { - label: 'Unpublish', + icon: 'icon-globe', + label: '#actions_unpublish', }, forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], conditions: [ From 7e9266921b2b7dd31d18de82da538911da77420d Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 18:14:10 +0100 Subject: [PATCH 039/132] Entity Bulk Action: adds "duplicateTo" kind --- .../duplicate-to-repository.interface.ts | 7 ++ .../duplicate-to/duplicate-to.action.kind.ts | 23 +++++++ .../duplicate-to/duplicate-to.action.ts | 66 +++++++++++++++++++ .../common/duplicate-to/index.ts | 2 + .../common/duplicate-to/manifests.ts | 4 ++ .../common/duplicate-to/types.ts | 6 ++ .../core/entity-bulk-action/common/index.ts | 1 + .../core/entity-bulk-action/manifests.ts | 2 + .../models/entity-bulk-action.model.ts | 14 ++++ 9 files changed, 125 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts new file mode 100644 index 0000000000..2e1eb33be9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts @@ -0,0 +1,7 @@ +import type { UmbRepositoryErrorResponse } from '../../../repository/types.js'; +import type { UmbBulkDuplicateToRequestArgs } from './types.js'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface UmbBulkDuplicateToRepository extends UmbApi { + requestBulkDuplicateTo(args: UmbBulkDuplicateToRequestArgs): Promise; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts new file mode 100644 index 0000000000..0a2d16168d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts @@ -0,0 +1,23 @@ +import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; +import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: UmbBackofficeManifestKind = { + type: 'kind', + alias: 'Umb.Kind.EntityBulkAction.DuplicateTo', + matchKind: 'duplicateTo', + matchType: 'entityBulkAction', + manifest: { + ...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest, + type: 'entityBulkAction', + kind: 'duplicateTo', + api: () => import('./duplicate-to.action.js'), + weight: 700, + forEntityTypes: [], + meta: { + icon: 'icon-enter', + label: '#actions_copyTo', + bulkDuplicateRepositoryAlias: '', + treeAlias: '', + }, + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts new file mode 100644 index 0000000000..11258196bb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts @@ -0,0 +1,66 @@ +import type { UmbBulkDuplicateToRepository } from './duplicate-to-repository.interface.js'; +import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; +import { + UmbRequestReloadChildrenOfEntityEvent, + UmbRequestReloadStructureForEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_TREE_PICKER_MODAL } from '@umbraco-cms/backoffice/tree'; +import type { MetaEntityBulkActionDuplicateToKind } from '@umbraco-cms/backoffice/extension-registry'; + +export class UmbMediaDuplicateEntityBulkAction extends UmbEntityBulkActionBase { + async execute() { + if (this.selection?.length === 0) return; + + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + + const modalContext = modalManager.open(this, UMB_TREE_PICKER_MODAL, { + data: { + foldersOnly: this.args.meta.foldersOnly, + hideTreeRoot: this.args.meta.hideTreeRoot, + treeAlias: this.args.meta.treeAlias, + }, + }); + + const value = await modalContext.onSubmit().catch(() => undefined); + if (!value?.selection?.length) return; + + const destinationUnique = value.selection[0]; + if (destinationUnique === undefined) throw new Error('Destination Unique is not available'); + + const bulkMoveRepository = await createExtensionApiByAlias( + this, + this.args.meta.bulkDuplicateRepositoryAlias, + ); + if (!bulkMoveRepository) throw new Error('Bulk Duplicate Repository is not available'); + + await bulkMoveRepository.requestBulkDuplicateTo({ + uniques: this.selection, + destination: { unique: destinationUnique }, + }); + + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + if (!entityContext) throw new Error('Entity Context is not available'); + + const entityType = entityContext.getEntityType(); + const unique = entityContext.getUnique(); + + if (entityType && unique !== undefined) { + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + if (!eventContext) throw new Error('Event Context is not available'); + + const args = { entityType, unique }; + + const reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args); + eventContext.dispatchEvent(reloadChildren); + + const reloadStructure = new UmbRequestReloadStructureForEntityEvent(args); + eventContext.dispatchEvent(reloadStructure); + } + } +} + +export { UmbMediaDuplicateEntityBulkAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts new file mode 100644 index 0000000000..bba0b41bb5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts @@ -0,0 +1,2 @@ +export type { UmbBulkDuplicateToRepository } from './duplicate-to-repository.interface.js'; +export type { UmbBulkDuplicateToRequestArgs } from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts new file mode 100644 index 0000000000..8f6bf64f0e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts @@ -0,0 +1,4 @@ +import { manifest as duplicateToKindManifest } from './duplicate-to.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [duplicateToKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts new file mode 100644 index 0000000000..c4434e3f64 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts @@ -0,0 +1,6 @@ +export interface UmbBulkDuplicateToRequestArgs { + uniques: Array; + destination: { + unique: string | null; + }; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts index 38cd1d7714..4278200a36 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts @@ -1 +1,2 @@ +export * from './duplicate-to/index.js'; export * from './move-to/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts index e646693e2f..9cf3d1e633 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts @@ -1,8 +1,10 @@ import { manifests as defaultEntityBulkActionManifests } from './default/manifests.js'; +import { manifests as duplicateEntityBulkActionManifests } from './common/duplicate-to/manifests.js'; import { manifests as moveToEntityBulkActionManifests } from './common/move-to/manifests.js'; import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ ...defaultEntityBulkActionManifests, + ...duplicateEntityBulkActionManifests, ...moveToEntityBulkActionManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts index 7bd4c186e7..9abf6cb398 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts @@ -34,6 +34,20 @@ export interface MetaEntityBulkActionDefaultKind extends MetaEntityBulkAction { label?: string; } +// DUPLICATE TO +export interface ManifestEntityBulkActionDuplicateToKind + extends ManifestEntityBulkAction { + type: 'entityBulkAction'; + kind: 'duplicateTo'; +} + +export interface MetaEntityBulkActionDuplicateToKind extends ManifestEntityBulkAction { + bulkDuplicateRepositoryAlias: string; + hideTreeRoot?: boolean; + foldersOnly?: boolean; + treeAlias: string; +} + // MOVE TO export interface ManifestEntityBulkActionMoveToKind extends ManifestEntityBulkAction { type: 'entityBulkAction'; From 710655b8e16adfe9c4144ab927f1d3eb4a54cc17 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 18:46:39 +0100 Subject: [PATCH 040/132] Implements Document "duplicate to" entity bulk action --- .../entity-bulk-actions/duplicate-to/index.ts | 4 ++ .../duplicate-to/manifests.ts | 36 ++++++++++++++ .../duplicate-to/repository/constants.ts | 1 + .../repository/duplicate-to.repository.ts | 49 +++++++++++++++++++ .../duplicate-to/repository/index.ts | 2 + .../duplicate-to/repository/manifests.ts | 11 +++++ .../duplicate-to/repository/types.ts | 6 +++ .../duplicate/duplicate.action.ts | 7 --- .../entity-bulk-actions/manifests.ts | 28 +---------- .../entity-bulk-actions/move/move.action.ts | 7 --- 10 files changed, 111 insertions(+), 40 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/duplicate-to.repository.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/types.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate/duplicate.action.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/index.ts new file mode 100644 index 0000000000..313aac5e13 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/index.ts @@ -0,0 +1,4 @@ +export { + UmbBulkDuplicateToDocumentRepository, + UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, +} from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts new file mode 100644 index 0000000000..2a76c43335 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/manifests.ts @@ -0,0 +1,36 @@ +import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_TREE_ALIAS } from '../../tree/manifests.js'; +import { UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS } from './repository/constants.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { + UMB_COLLECTION_ALIAS_CONDITION, + UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, +} from '@umbraco-cms/backoffice/collection'; +import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkDuplicateAction: ManifestTypes = { + type: 'entityBulkAction', + kind: 'duplicateTo', + alias: 'Umb.EntityBulkAction.Document.DuplicateTo', + name: 'Duplicate Document Entity Bulk Action', + weight: 30, + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + bulkDuplicateRepositoryAlias: UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, + treeAlias: UMB_DOCUMENT_TREE_ALIAS, + }, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_DOCUMENT_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkCopy, + }, + ], +}; + +export const manifests: Array = [bulkDuplicateAction, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/constants.ts new file mode 100644 index 0000000000..7d568e55a5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document.BulkDuplicate'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/duplicate-to.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/duplicate-to.repository.ts new file mode 100644 index 0000000000..93ee2f7c4c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/duplicate-to.repository.ts @@ -0,0 +1,49 @@ +import { UmbDuplicateDocumentServerDataSource } from '../../../entity-actions/duplicate/repository/document-duplicate.server.data-source.js'; +import type { UmbBulkDuplicateToDocumentRequestArgs } from './types.js'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbBulkDuplicateToRepository } from '@umbraco-cms/backoffice/entity-bulk-action'; +import type { UmbRepositoryErrorResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbBulkDuplicateToDocumentRepository extends UmbRepositoryBase implements UmbBulkDuplicateToRepository { + #duplicateSource = new UmbDuplicateDocumentServerDataSource(this); + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + + constructor(host: UmbControllerHost) { + super(host); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (notificationContext) => { + this.#notificationContext = notificationContext; + }); + } + + async requestBulkDuplicateTo(args: UmbBulkDuplicateToDocumentRequestArgs): Promise { + let count = 0; + + for (const unique of args.uniques) { + const { error } = await this.#duplicateSource.duplicate({ + unique, + destination: args.destination, + relateToOriginal: args.relateToOriginal, + includeDescendants: args.includeDescendants, + }); + + if (error) { + const notification = { data: { message: error.message } }; + this.#notificationContext?.peek('danger', notification); + } else { + count++; + } + } + + if (count > 0) { + const notification = { data: { message: `Duplicated ${count} ${count === 1 ? 'document' : 'documents'}` } }; + this.#notificationContext?.peek('positive', notification); + } + + return {}; + } +} + +export { UmbBulkDuplicateToDocumentRepository as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/index.ts new file mode 100644 index 0000000000..0146de7515 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbBulkDuplicateToDocumentRepository } from './duplicate-to.repository.js'; +export { UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts new file mode 100644 index 0000000000..ac3e613940 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkDuplicateRepository: ManifestRepository = { + type: 'repository', + alias: UMB_BULK_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS, + name: 'Bulk Duplicate Media Repository', + api: () => import('./duplicate-to.repository.js'), +}; + +export const manifests: Array = [bulkDuplicateRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/types.ts new file mode 100644 index 0000000000..a6fd9924cd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate-to/repository/types.ts @@ -0,0 +1,6 @@ +import type { UmbBulkDuplicateToRequestArgs } from '@umbraco-cms/backoffice/entity-bulk-action'; + +export interface UmbBulkDuplicateToDocumentRequestArgs extends UmbBulkDuplicateToRequestArgs { + relateToOriginal: boolean; + includeDescendants: boolean; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate/duplicate.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate/duplicate.action.ts deleted file mode 100644 index 2f3fdd2ad1..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/duplicate/duplicate.action.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; - -export class UmbDocumentDuplicateEntityBulkAction extends UmbEntityBulkActionBase { - async execute() { - console.log('execute bulk duplicate'); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts index 1053c25ce1..6ac6fdb58f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -1,6 +1,6 @@ import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../collection/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; -//import { UMB_DOCUMENT_TREE_ALIAS } from '../tree/manifests.js'; +import { manifests as duplicateToManifests } from './duplicate-to/manifests.js'; import { manifests as moveToManifests } from './move-to/manifests.js'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; @@ -54,30 +54,6 @@ export const entityBulkActions: Array = [ }, ], }, - /* TODO: implement bulk duplicate action - { - type: 'entityBulkAction', - kind: 'default', - alias: 'Umb.EntityBulkAction.Document.Duplicate', - name: 'Duplicate Document Entity Bulk Action', - weight: 30, - api: UmbDocumentDuplicateEntityBulkAction, - meta: { - label: 'Duplicate...', - }, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_DOCUMENT_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkCopy, - }, - ], - }, - */ /* TODO: implement bulk trash action { type: 'entityBulkAction', @@ -104,4 +80,4 @@ export const entityBulkActions: Array = [ */ ]; -export const manifests: Array = [...entityBulkActions, ...moveToManifests]; +export const manifests: Array = [...entityBulkActions, ...duplicateToManifests, ...moveToManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts deleted file mode 100644 index 0b8ea5fd05..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; - -export class UmbMoveDocumentEntityBulkAction extends UmbEntityBulkActionBase { - async execute() { - console.log(`execute bulk move`); - } -} From 6b8e30b0d56784d52e0c5a266cf9c216894609da Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 18:47:11 +0100 Subject: [PATCH 041/132] Rename Collection config permission label from "Allow bulk copy" to "Allow bulk duplicate" --- .../config/bulk-action-permissions/permissions.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts index ce8aa14191..329506d0bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts @@ -76,7 +76,7 @@ export class UmbPropertyEditorUICollectionPermissionsElement this.#onChange(e, 'allowBulkCopy')} - label="Allow bulk copy (content only)"> + label="Allow bulk duplicate (content only)"> this.#onChange(e, 'allowBulkMove')} From d6420d3e31c4bd51fbe209794340d829585e38be Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 17 Jul 2024 19:01:02 +0100 Subject: [PATCH 042/132] const rename --- .../common/duplicate-to/duplicate-to.action.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts index 11258196bb..d865a17688 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts @@ -31,13 +31,13 @@ export class UmbMediaDuplicateEntityBulkAction extends UmbEntityBulkActionBase( + const bulkDuplicateRepository = await createExtensionApiByAlias( this, this.args.meta.bulkDuplicateRepositoryAlias, ); - if (!bulkMoveRepository) throw new Error('Bulk Duplicate Repository is not available'); + if (!bulkDuplicateRepository) throw new Error('Bulk Duplicate Repository is not available'); - await bulkMoveRepository.requestBulkDuplicateTo({ + await bulkDuplicateRepository.requestBulkDuplicateTo({ uniques: this.selection, destination: { unique: destinationUnique }, }); From 97457705d22534560e724743d0dfa51cbce927d2 Mon Sep 17 00:00:00 2001 From: Lan Nguyen Thuy Date: Thu, 18 Jul 2024 16:12:13 +0700 Subject: [PATCH 043/132] Remove all option from User state --- .../src/packages/user/user/collection/utils/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/utils/index.ts index 21a5ac4fb3..80afab8a8b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/utils/index.ts @@ -13,6 +13,5 @@ export const UmbUserStateFilter = Object.freeze({ DISABLED: 'Disabled', LOCKED_OUT: 'LockedOut', INVITED: 'Invited', - INACTIVE: 'Inactive', - ALL: 'All', + INACTIVE: 'Inactive' }); From b947fdc8a92b39cd2551940e697af1e6777d0df8 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 18 Jul 2024 10:47:41 +0100 Subject: [PATCH 044/132] Entity Bulk Action: adds "trash" kind --- .../core/entity-bulk-action/common/index.ts | 1 + .../entity-bulk-action/common/trash/index.ts | 2 + .../common/trash/manifests.ts | 4 ++ .../trash/trash-repository.interface.ts | 7 +++ .../common/trash/trash.action.kind.ts | 22 ++++++++ .../common/trash/trash.action.ts | 53 +++++++++++++++++++ .../entity-bulk-action/common/trash/types.ts | 3 ++ .../core/entity-bulk-action/manifests.ts | 2 + .../models/entity-bulk-action.model.ts | 10 ++++ 9 files changed, 104 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts index 4278200a36..c70f79f940 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts @@ -1,2 +1,3 @@ export * from './duplicate-to/index.js'; export * from './move-to/index.js'; +export * from './trash/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts new file mode 100644 index 0000000000..8bed2d2b64 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts @@ -0,0 +1,2 @@ +export type { UmbBulkTrashRepository } from './trash-repository.interface.js'; +export type { UmbBulkTrashRequestArgs } from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts new file mode 100644 index 0000000000..f48d4f6879 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts @@ -0,0 +1,4 @@ +import { manifest as trashKindManifest } from './trash.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [trashKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts new file mode 100644 index 0000000000..195b2f7724 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts @@ -0,0 +1,7 @@ +import type { UmbRepositoryErrorResponse } from '../../../repository/types.js'; +import type { UmbBulkTrashRequestArgs } from './types.js'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface UmbBulkTrashRepository extends UmbApi { + requestBulkTrash(args: UmbBulkTrashRequestArgs): Promise; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts new file mode 100644 index 0000000000..5cec1325a1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts @@ -0,0 +1,22 @@ +import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js'; +import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: UmbBackofficeManifestKind = { + type: 'kind', + alias: 'Umb.Kind.EntityBulkAction.Trash', + matchKind: 'trash', + matchType: 'entityBulkAction', + manifest: { + ...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest, + type: 'entityBulkAction', + kind: 'trash', + api: () => import('./trash.action.js'), + weight: 700, + forEntityTypes: [], + meta: { + icon: 'icon-trash', + label: '#actions_trash', + bulkTrashRepositoryAlias: '', + }, + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts new file mode 100644 index 0000000000..70cbc7ffd5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts @@ -0,0 +1,53 @@ +import type { UmbBulkTrashRepository } from './trash-repository.interface.js'; +import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; +import { + UmbRequestReloadChildrenOfEntityEvent, + UmbRequestReloadStructureForEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; +import { umbConfirmModal } from '@umbraco-cms/backoffice/modal'; +import type { MetaEntityBulkActionTrashKind } from '@umbraco-cms/backoffice/extension-registry'; + +export class UmbMediaTrashEntityBulkAction extends UmbEntityBulkActionBase { + async execute() { + if (this.selection?.length === 0) return; + + await umbConfirmModal(this._host, { + headline: `Trash`, + content: `Are you sure you want to move ${this.selection.length} ${this.selection.length === 1 ? 'item' : 'items'} to the recycle bin?`, + color: 'danger', + confirmLabel: 'Trash', + }); + + const bulkTrashRepository = await createExtensionApiByAlias( + this, + this.args.meta.bulkTrashRepositoryAlias, + ); + if (!bulkTrashRepository) throw new Error('Bulk Trash Repository is not available'); + + await bulkTrashRepository.requestBulkTrash({ uniques: this.selection }); + + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + if (!entityContext) throw new Error('Entity Context is not available'); + + const entityType = entityContext.getEntityType(); + const unique = entityContext.getUnique(); + + if (entityType && unique !== undefined) { + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + if (!eventContext) throw new Error('Event Context is not available'); + + const args = { entityType, unique }; + + const reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args); + eventContext.dispatchEvent(reloadChildren); + + const reloadStructure = new UmbRequestReloadStructureForEntityEvent(args); + eventContext.dispatchEvent(reloadStructure); + } + } +} + +export { UmbMediaTrashEntityBulkAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts new file mode 100644 index 0000000000..d128c53b7a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts @@ -0,0 +1,3 @@ +export interface UmbBulkTrashRequestArgs { + uniques: Array; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts index 9cf3d1e633..306185ef77 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts @@ -1,10 +1,12 @@ import { manifests as defaultEntityBulkActionManifests } from './default/manifests.js'; import { manifests as duplicateEntityBulkActionManifests } from './common/duplicate-to/manifests.js'; import { manifests as moveToEntityBulkActionManifests } from './common/move-to/manifests.js'; +import { manifests as trashEntityBulkActionManifests } from './common/trash/manifests.js'; import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ ...defaultEntityBulkActionManifests, ...duplicateEntityBulkActionManifests, ...moveToEntityBulkActionManifests, + ...trashEntityBulkActionManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts index 22aa35ec78..967a868949 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts @@ -70,3 +70,13 @@ export interface MetaEntityBulkActionMoveToKind extends MetaEntityBulkActionDefa foldersOnly?: boolean; treeAlias: string; } + +// TRASH +export interface ManifestEntityBulkActionTrashKind extends ManifestEntityBulkAction { + type: 'entityBulkAction'; + kind: 'trash'; +} + +export interface MetaEntityBulkActionTrashKind extends MetaEntityBulkActionDefaultKind { + bulkTrashRepositoryAlias: string; +} From eb6f2c04e0d09dca43edb6f12fb8c0b570da397c Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 18 Jul 2024 10:48:44 +0100 Subject: [PATCH 045/132] Implements Media "trash" entity bulk action --- .../duplicate/duplicate.action.ts | 9 --- .../media/entity-bulk-actions/manifests.ts | 57 +------------------ .../media/entity-bulk-actions/trash/index.ts | 1 + .../entity-bulk-actions/trash/manifests.ts | 34 +++++++++++ .../trash/repository/constants.ts | 1 + .../trash/repository/index.ts | 2 + .../trash/repository/manifests.ts | 11 ++++ .../trash/repository/trash.repository.ts | 43 ++++++++++++++ 8 files changed, 95 insertions(+), 63 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/duplicate/duplicate.action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/trash.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/duplicate/duplicate.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/duplicate/duplicate.action.ts deleted file mode 100644 index 28bfa324f3..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/duplicate/duplicate.action.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; - -export class UmbDuplicateMediaEntityBulkAction extends UmbEntityBulkActionBase { - async execute() { - console.log('execute bulk duplicate'); - } -} - -export { UmbDuplicateMediaEntityBulkAction as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts index 28c8b20dff..805c692d8e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts @@ -1,56 +1,5 @@ -import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js'; -import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import { manifests as moveToManifests } from './move-to/manifests.js'; -import { - UMB_COLLECTION_ALIAS_CONDITION, - UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, -} from '@umbraco-cms/backoffice/collection'; -import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; +import { manifests as trashManifests } from './trash/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const entityBulkActions: Array = [ - { - type: 'entityBulkAction', - alias: 'Umb.EntityBulkAction.Media.Duplicate', - name: 'Duplicate Media Entity Bulk Action', - weight: 30, - api: () => import('./duplicate/duplicate.action.js'), - forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], - meta: { - label: 'Duplicate', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_MEDIA_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkCopy, - }, - ], - }, - { - type: 'entityBulkAction', - alias: 'Umb.EntityBulkAction.Media.Delete', - name: 'Delete Media Entity Bulk Action', - weight: 10, - api: () => import('./delete/delete.action.js'), - forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], - meta: { - label: 'Delete', - }, - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_MEDIA_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkDelete, - }, - ], - }, -]; - -export const manifests: Array = [...entityBulkActions, ...moveToManifests]; +export const manifests: Array = [...moveToManifests, ...trashManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/index.ts new file mode 100644 index 0000000000..cdb28dce3b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/index.ts @@ -0,0 +1 @@ +export { UmbBulkTrashMediaRepository, UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/manifests.ts new file mode 100644 index 0000000000..6df781b6b4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/manifests.ts @@ -0,0 +1,34 @@ +import { UMB_MEDIA_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_MEDIA_ENTITY_TYPE } from '../../entity.js'; +import { UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS } from './repository/constants.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { + UMB_COLLECTION_ALIAS_CONDITION, + UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, +} from '@umbraco-cms/backoffice/collection'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; + +const bulkTrashAction: ManifestTypes = { + type: 'entityBulkAction', + kind: 'trash', + alias: 'Umb.EntityBulkAction.Media.Trash', + name: 'Trash Media Entity Bulk Action', + weight: 10, + forEntityTypes: [UMB_MEDIA_ENTITY_TYPE], + meta: { + bulkTrashRepositoryAlias: UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS, + }, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_MEDIA_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkDelete, + }, + ], +}; + +export const manifests: Array = [bulkTrashAction, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/constants.ts new file mode 100644 index 0000000000..6fe1f4fae1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.BulkTrash'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/index.ts new file mode 100644 index 0000000000..fe460293cf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbBulkTrashMediaRepository } from './trash.repository.js'; +export { UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts new file mode 100644 index 0000000000..7f18a39a56 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkTrashRepository: ManifestRepository = { + type: 'repository', + alias: UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS, + name: 'Bulk Trash Media Repository', + api: () => import('./trash.repository.js'), +}; + +export const manifests: Array = [bulkTrashRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/trash.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/trash.repository.ts new file mode 100644 index 0000000000..d84cd3e956 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/trash/repository/trash.repository.ts @@ -0,0 +1,43 @@ +import { UmbMediaRecycleBinServerDataSource } from '../../../recycle-bin/repository/media-recycle-bin.server.data-source.js'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbBulkTrashRepository, UmbBulkTrashRequestArgs } from '@umbraco-cms/backoffice/entity-bulk-action'; +import type { UmbRepositoryErrorResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbBulkTrashMediaRepository extends UmbRepositoryBase implements UmbBulkTrashRepository { + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + #recycleBinSource = new UmbMediaRecycleBinServerDataSource(this); + + constructor(host: UmbControllerHost) { + super(host); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (notificationContext) => { + this.#notificationContext = notificationContext; + }); + } + + async requestBulkTrash(args: UmbBulkTrashRequestArgs): Promise { + let count = 0; + + for (const unique of args.uniques) { + const { error } = await this.#recycleBinSource.trash({ unique }); + + if (error) { + const notification = { data: { message: error.message } }; + this.#notificationContext?.peek('danger', notification); + } else { + count++; + } + } + + if (count > 0) { + const notification = { data: { message: `Trashed ${count} media ${count === 1 ? 'item' : 'items'}` } }; + this.#notificationContext?.peek('positive', notification); + } + + return {}; + } +} + +export { UmbBulkTrashMediaRepository as api }; From e6670bac15c7e5487584f4c69ddb73e0d0b9e772 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 18 Jul 2024 10:51:46 +0100 Subject: [PATCH 046/132] Rename Collection config permission label from "Allow bulk delete" to "Allow bulk trash" --- .../config/bulk-action-permissions/permissions.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts index 329506d0bc..01ea17b4e2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection/config/bulk-action-permissions/permissions.element.ts @@ -84,7 +84,7 @@ export class UmbPropertyEditorUICollectionPermissionsElement this.#onChange(e, 'allowBulkDelete')} - label="Allow bulk delete">`; + label="Allow bulk trash">`; } static override styles = [ From ee6f50812281cebb3959001797526d14ea405ab5 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 18 Jul 2024 11:20:51 +0100 Subject: [PATCH 047/132] Removed the unused "delete" bulk media action --- .../delete/delete.action.ts | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/delete/delete.action.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/delete/delete.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/delete/delete.action.ts deleted file mode 100644 index 98d607aad4..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/delete/delete.action.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; - -export class UmbMediaDeleteEntityBulkAction extends UmbEntityBulkActionBase { - async execute() { - console.log(`execute delete for: ${this.selection}`); - - // TODO: show error - - // TODO: should we subscribe in cases like this? - /* - const { data } = await this.repository.requestItemsLegacy(this.selection); - - if (data) { - // TODO: use correct markup - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const modalContext = modalManager.open(this, UMB_CONFIRM_MODAL, { - headline: `Deleting ${this.selection.length} items`, - content: html` - This will delete the following files: -
    - ${data.map((item) => html`
  • ${item.name}
  • `)} -
- `, - color: 'danger', - confirmLabel: 'Delete', - }); - - await modalContext.onSubmit(); - await this.repository?.trash(this.selection); - } - */ - } -} - -export { UmbMediaDeleteEntityBulkAction as api }; From 543e22c915affeaea18b6536a459ac04ffd050e4 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:37:48 +0200 Subject: [PATCH 048/132] Bugfix: Use EyeDropper for blocks --- .../block-grid-type-workspace-view-advanced.element.ts | 6 ++++-- .../views/block-list-type-workspace-view.element.ts | 6 ++++-- .../views/block-rte-type-workspace-view.element.ts | 6 ++++-- .../components/block-type-card/block-type-card.element.ts | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts index 3efa9c4cc8..2c61943254 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts @@ -25,11 +25,13 @@ export class UmbBlockGridTypeWorkspaceViewAdvancedElement extends UmbLitElement + property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper" + .config=${[{ alias: 'showAlpha', value: true }]}> + property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper" + .config=${[{ alias: 'showAlpha', value: true }]}> + property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper" + .config=${[{ alias: 'showAlpha', value: true }]}> + property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper" + .config=${[{ alias: 'showAlpha', value: true }]}> + property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper" + .config=${[{ alias: 'showAlpha', value: true }]}> + property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper" + .config=${[{ alias: 'showAlpha', value: true }]}> ${this._iconFile ? html`` - : html``} + : html``} `; From bd1f20928e03bbe84a3be654b63a861a2095f4f2 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:38:18 +0200 Subject: [PATCH 049/132] umb-icon's color property now properly overrides color --- .../core/components/icon/icon.element.ts | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index 2ae479cd9d..bb9acffbd1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -16,6 +16,12 @@ export class UmbIconElement extends UmbLitElement { @state() private _color?: string; + @state() + private _fallbackColor?: string; + + /** + * Override the icon color. + * */ @property({ type: String }) public set color(value: string) { if (!value) return; @@ -31,12 +37,26 @@ export class UmbIconElement extends UmbLitElement { this._color = alias ? (variable ? `--uui-icon-color: var(${variable})` : `--uui-icon-color: ${alias}`) : undefined; } + #setFallbackColorStyle(value: string) { + const alias = value.replace('color-', ''); + const variable = extractUmbColorVariable(alias); + this._fallbackColor = alias + ? variable + ? `--uui-icon-color: var(${variable})` + : `--uui-icon-color: ${alias}` + : undefined; + } + + /** + * The icon name. Can be appended with a color. + * Example "icon-heart color-red" + */ @property({ type: String }) public set name(value: string | undefined) { const [icon, alias] = value ? value.split(' ') : []; if (alias) { - this.#setColorStyle(alias); + this.#setFallbackColorStyle(alias); } else { this._color = undefined; } @@ -48,7 +68,9 @@ export class UmbIconElement extends UmbLitElement { } override render() { - return html``; + return html``; } static override styles = [ From e911e2bad7a2bebd05e50aee633be4d2a24d3e34 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:08:14 +0200 Subject: [PATCH 050/132] localizations --- src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/assets/lang/en.ts | 4 ++-- src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts index 45c43ac734..1ff01c94bc 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts @@ -2219,8 +2219,8 @@ export default { forceHideContentEditor: 'Sakrij uređivač sadržaja', forceHideContentEditorHelp: 'Sakrijte dugme za uređivanje sadržaja i uređivač sadržaja iz preklapanja Block Editor.', - girdInlineEditing: 'Inline editovanje', - girdInlineEditingHelp: + gridInlineEditing: 'Inline editovanje', + gridInlineEditingHelp: 'Omogućava inline uređivanje za prvo svojstvo. Dodatna svojstva se mogu uređivati u prekrivaču.', blockHasChanges: 'Izmijenili ste ovaj sadržaj. Jeste li sigurni da ih želite odbaciti?', confirmCancelBlockCreationHeadline: 'Odbaciti kreiranje?', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts index 4515b586c5..7878e4d18f 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts @@ -2469,8 +2469,8 @@ export default { getSampleDescription: "Bydd hyn yn ychwanegu Blociau sylfaenol ac yn eich helpu i ddechrau gyda'r Golygydd Grid Bloc. Fe gewch Blociau ar gyfer Pennawd, Testun Cyfoethog, Delwedd, yn ogystal â Chynllun Dwy Golofn.", getSampleButton: 'Gosod', - girdInlineEditing: 'Golygu mewnol', - girdInlineEditingHelp: + gridInlineEditing: 'Golygu mewnol', + gridInlineEditingHelp: 'Yn galluogi golygu mewnol ar gyfer yr Eiddo cyntaf. Gellir golygu priodweddau ychwanegol yn y droshaen.', areaAllowedBlocksEmpty: 'Yn ddiofyn, caniateir pob math bloc mewn Ardal, Defnyddiwch yr opsiwn hwn i ganiatáu mathau dethol yn unig.', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts index 9ed617b177..ad817c205e 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts @@ -2268,8 +2268,8 @@ export default { headlineAdvanced: 'Avanceret', forceHideContentEditor: 'Skjul indholdseditoren', forceHideContentEditorHelp: 'Skjul indholds redigerings knappen samt indholdseditoren i Blok Redigerings vinduet', - girdInlineEditing: 'Direkte redigering', - girdInlineEditingHelp: + gridInlineEditing: 'Direkte redigering', + gridInlineEditingHelp: 'Tilføjer direkte redigering a det første felt. Yderligere felter optræder kun i redigerings vinduet.', blockHasChanges: 'Du har lavet ændringer til dette indhold. Er du sikker på at du vil kassere dem?', confirmCancelBlockCreationHeadline: 'Annuller oprettelse?', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts index ff6d54933f..a25b60726a 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts @@ -2403,8 +2403,8 @@ export default { headlineAdvanced: 'Advanced', forceHideContentEditor: 'Hide content editor', forceHideContentEditorHelp: 'Hide the content edit button and the content editor from the Block Editor overlay', - girdInlineEditing: 'Inline editing', - girdInlineEditingHelp: + gridInlineEditing: 'Inline editing', + gridInlineEditingHelp: 'Enables inline editing for the first Property. Additional properties can be edited in the overlay.', blockHasChanges: 'You have made changes to this content. Are you sure you want to discard them?', confirmCancelBlockCreationHeadline: 'Discard creation?', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts index 529345d0d4..abb79d2edb 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts @@ -2468,8 +2468,8 @@ export default { headlineAdvanced: 'Advanced', forceHideContentEditor: 'Hide content editor', forceHideContentEditorHelp: 'Hide the content edit button and the content editor from the Block Editor overlay.', - girdInlineEditing: 'Inline editing', - girdInlineEditingHelp: + gridInlineEditing: 'Inline editing', + gridInlineEditingHelp: 'Enables inline editing for the first Property. Additional properties can be edited in the overlay.', blockHasChanges: 'You have made changes to this content. Are you sure you want to discard them?', confirmCancelBlockCreationHeadline: 'Discard creation?', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts index 96ecf0829c..29b8e8b566 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts @@ -2279,8 +2279,8 @@ export default { headlineAdvanced: 'Napredno', forceHideContentEditor: 'Sakrij uređivač sadržaja', forceHideContentEditorHelp: 'Sakrij gumb za uređivanje sadržaja i uređivač sadržaja iz preklapanja Block Editor.', - girdInlineEditing: 'Inline uređivanje', - girdInlineEditingHelp: + gridInlineEditing: 'Inline uređivanje', + gridInlineEditingHelp: 'Omogućava inline uređivanje za prvo svojstvo. Dodatna svojstva se mogu uređivati u prekrivaču.', blockHasChanges: 'Izmijenili ste ovaj sadržaj. Jeste li sigurni da ih želite odbaciti?', confirmCancelBlockCreationHeadline: 'Odbaciti kreiranje?', From 23949d3542eaa2eb99e90ec1d43f8be3105e16f8 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Thu, 11 Jul 2024 11:59:10 +0200 Subject: [PATCH 051/132] localizations blocklist view --- .../src/assets/lang/da-dk.ts | 2 +- .../block-list-type-workspace-view.element.ts | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts index ad817c205e..281b1ec6f4 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts @@ -2237,7 +2237,7 @@ export default { addCustomStylesheet: 'Tilføj stylesheet', headlineEditorAppearance: 'Redigerings udseende', headlineDataModels: 'Data modeller', - headlineCatalogueAppearance: 'katalog udseende', + headlineCatalogueAppearance: 'Katalog udseende', labelBackgroundColor: 'Baggrunds farve', labelIconColor: 'Ikon farve', labelContentElementType: 'Indholds model', diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts index 74c9566d91..3db4946a0a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts @@ -7,20 +7,20 @@ import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension- export class UmbBlockListTypeWorkspaceViewSettingsElement extends UmbLitElement implements UmbWorkspaceViewElement { override render() { return html` - + - + - + - + From e3f3bf3b42843c95fec90c96813a4b673649828a Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Thu, 11 Jul 2024 12:11:15 +0200 Subject: [PATCH 052/132] block grid advanced tab localizations --- ...-grid-type-workspace-view-advanced.element.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts index 2c61943254..d34cf5d569 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts @@ -7,33 +7,33 @@ import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension- export class UmbBlockGridTypeWorkspaceViewAdvancedElement extends UmbLitElement implements UmbWorkspaceViewElement { override render() { return html` - + - + Date: Tue, 16 Jul 2024 11:03:07 +0200 Subject: [PATCH 053/132] better naming --- .../packages/core/components/icon/icon.element.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index bb9acffbd1..d41dd58d81 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -20,7 +20,8 @@ export class UmbIconElement extends UmbLitElement { private _fallbackColor?: string; /** - * Override the icon color. + * Color alias or a color code directly.\ + * If a color has been set via the name property, this property will override it. * */ @property({ type: String }) public set color(value: string) { @@ -48,15 +49,15 @@ export class UmbIconElement extends UmbLitElement { } /** - * The icon name. Can be appended with a color. - * Example "icon-heart color-red" + * The icon name. Can be appended with a color.\ + * Example **icon-heart color-red** */ @property({ type: String }) public set name(value: string | undefined) { - const [icon, alias] = value ? value.split(' ') : []; + const [icon, color] = value ? value.split(' ') : []; - if (alias) { - this.#setFallbackColorStyle(alias); + if (color) { + this.#setFallbackColorStyle(color); } else { this._color = undefined; } From aa4a7f6c3f39ab1d5ec28eb0303973f39d33e775 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:15:29 +0200 Subject: [PATCH 054/132] reset color --- .../src/packages/core/components/icon/icon.element.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index d41dd58d81..96a8063d14 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -25,7 +25,6 @@ export class UmbIconElement extends UmbLitElement { * */ @property({ type: String }) public set color(value: string) { - if (!value) return; this.#setColorStyle(value); } public get color(): string { From 3d839428299b1247e493a3c178c097c0b488bfef Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:21:51 +0200 Subject: [PATCH 055/132] color setting --- .../src/packages/core/components/icon/icon.element.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index 96a8063d14..4cd1232b95 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -25,7 +25,11 @@ export class UmbIconElement extends UmbLitElement { * */ @property({ type: String }) public set color(value: string) { - this.#setColorStyle(value); + if (value) { + this.#setColorStyle(value); + } else { + this._color = undefined; + } } public get color(): string { return this._color ?? ''; @@ -58,7 +62,7 @@ export class UmbIconElement extends UmbLitElement { if (color) { this.#setFallbackColorStyle(color); } else { - this._color = undefined; + this._fallbackColor = undefined; } this._icon = icon; From 96634f3b88fef308e7f12ec74ec882f4edf9a994 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:57:15 +0200 Subject: [PATCH 056/132] dominant logic --- .../core/components/icon/icon.element.ts | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index 4cd1232b95..8e13fd6ca8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -26,7 +26,7 @@ export class UmbIconElement extends UmbLitElement { @property({ type: String }) public set color(value: string) { if (value) { - this.#setColorStyle(value); + this.#setColorStyle(value, true); } else { this._color = undefined; } @@ -35,20 +35,15 @@ export class UmbIconElement extends UmbLitElement { return this._color ?? ''; } - #setColorStyle(value: string) { + #setColorStyle(value: string, dominant = false) { const alias = value.replace('color-', ''); const variable = extractUmbColorVariable(alias); - this._color = alias ? (variable ? `--uui-icon-color: var(${variable})` : `--uui-icon-color: ${alias}`) : undefined; - } - - #setFallbackColorStyle(value: string) { - const alias = value.replace('color-', ''); - const variable = extractUmbColorVariable(alias); - this._fallbackColor = alias - ? variable - ? `--uui-icon-color: var(${variable})` - : `--uui-icon-color: ${alias}` - : undefined; + const color = alias ? (variable ? `--uui-icon-color: var(${variable})` : `--uui-icon-color: ${alias}`) : undefined; + if (dominant) { + this._color = color; + } else { + this._fallbackColor = color; + } } /** @@ -60,7 +55,7 @@ export class UmbIconElement extends UmbLitElement { const [icon, color] = value ? value.split(' ') : []; if (color) { - this.#setFallbackColorStyle(color); + this.#setColorStyle(color); } else { this._fallbackColor = undefined; } From 6c9827b7e8194f0ab5d994a204521ca204e01a97 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:02:06 +0200 Subject: [PATCH 057/132] umb icon element fallback colors and stylemap --- .../core/components/icon/icon.element.ts | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index 8e13fd6ca8..70284f0c4c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -1,6 +1,7 @@ import { extractUmbColorVariable } from '../../resources/extractUmbColorVariable.function.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { html, customElement, property, state, ifDefined, css } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, property, state, ifDefined, css, styleMap } from '@umbraco-cms/backoffice/external/lit'; +import type { StyleInfo } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; /** @@ -10,14 +11,14 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; */ @customElement('umb-icon') export class UmbIconElement extends UmbLitElement { + #color?: string; + #fallbackColor?: string; + @state() private _icon?: string; @state() - private _color?: string; - - @state() - private _fallbackColor?: string; + private _style: StyleInfo = {}; /** * Color alias or a color code directly.\ @@ -25,25 +26,11 @@ export class UmbIconElement extends UmbLitElement { * */ @property({ type: String }) public set color(value: string) { - if (value) { - this.#setColorStyle(value, true); - } else { - this._color = undefined; - } + this.#color = value; + this.#updateColorStyle(); } - public get color(): string { - return this._color ?? ''; - } - - #setColorStyle(value: string, dominant = false) { - const alias = value.replace('color-', ''); - const variable = extractUmbColorVariable(alias); - const color = alias ? (variable ? `--uui-icon-color: var(${variable})` : `--uui-icon-color: ${alias}`) : undefined; - if (dominant) { - this._color = color; - } else { - this._fallbackColor = color; - } + public get color(): string | undefined { + return this.#color || this.#fallbackColor; } /** @@ -53,23 +40,31 @@ export class UmbIconElement extends UmbLitElement { @property({ type: String }) public set name(value: string | undefined) { const [icon, color] = value ? value.split(' ') : []; - - if (color) { - this.#setColorStyle(color); - } else { - this._fallbackColor = undefined; - } - + this.#fallbackColor = color; this._icon = icon; + this.#updateColorStyle(); } public get name(): string | undefined { return this._icon; } + #updateColorStyle() { + const value = this.#color || this.#fallbackColor; + + if (!value) { + this._style = { '--uui-icon-color': undefined }; + return; + } + + const color = value.replace('color-', ''); + const variable = extractUmbColorVariable(color); + const styling = variable ? `var(${variable})` : color; + + this._style = { '--uui-icon-color': styling }; + } + override render() { - return html``; + return html``; } static override styles = [ From 3025ffdbc3a058a610c7bf509cc2030371faafc1 Mon Sep 17 00:00:00 2001 From: Lone Iversen <108085781+loivsen@users.noreply.github.com> Date: Thu, 18 Jul 2024 11:37:15 +0200 Subject: [PATCH 058/132] Update src/packages/core/components/icon/icon.element.ts Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> --- .../src/packages/core/components/icon/icon.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts index 70284f0c4c..86150d93fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts @@ -52,7 +52,7 @@ export class UmbIconElement extends UmbLitElement { const value = this.#color || this.#fallbackColor; if (!value) { - this._style = { '--uui-icon-color': undefined }; + this._style = { '--uui-icon-color': 'inherit' }; return; } From 3311356df1b3e713afd71ac54e77adb9dade7fe4 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Thu, 18 Jul 2024 11:29:45 +0100 Subject: [PATCH 059/132] Implements Document "trash" entity bulk action --- .../delete/delete.action.ts | 7 --- .../entity-bulk-actions/manifests.ts | 32 +++----------- .../entity-bulk-actions/trash/index.ts | 1 + .../entity-bulk-actions/trash/manifests.ts | 34 +++++++++++++++ .../trash/repository/constants.ts | 1 + .../trash/repository/index.ts | 2 + .../trash/repository/manifests.ts | 11 +++++ .../trash/repository/trash.repository.ts | 43 +++++++++++++++++++ 8 files changed, 99 insertions(+), 32 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/delete/delete.action.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/constants.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/trash.repository.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/delete/delete.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/delete/delete.action.ts deleted file mode 100644 index cb33417747..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/delete/delete.action.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; - -export class UmbDocumentDeleteEntityBulkAction extends UmbEntityBulkActionBase { - async execute() { - console.log('execute bulk delete'); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts index c1d93e86c6..4633aeb035 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -2,6 +2,7 @@ import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../collection/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import { manifests as duplicateToManifests } from './duplicate-to/manifests.js'; import { manifests as moveToManifests } from './move-to/manifests.js'; +import { manifests as trashManifests } from './trash/manifests.js'; import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { @@ -56,30 +57,11 @@ export const entityBulkActions: Array = [ }, ], }, - /* TODO: implement bulk trash action - { - type: 'entityBulkAction', - kind: 'default', - alias: 'Umb.EntityBulkAction.Document.Delete', - name: 'Delete Document Entity Bulk Action', - weight: 10, - api: UmbDocumentDeleteEntityBulkAction, - meta: { - label: 'Delete', - }, - forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - conditions: [ - { - alias: UMB_COLLECTION_ALIAS_CONDITION, - match: UMB_DOCUMENT_COLLECTION_ALIAS, - }, - { - alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, - match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkDelete, - }, - ], - }, - */ ]; -export const manifests: Array = [...entityBulkActions, ...duplicateToManifests, ...moveToManifests]; +export const manifests: Array = [ + ...entityBulkActions, + ...duplicateToManifests, + ...moveToManifests, + ...trashManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/index.ts new file mode 100644 index 0000000000..996885d53b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/index.ts @@ -0,0 +1 @@ +export { UmbBulkTrashDocumentRepository, UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts new file mode 100644 index 0000000000..970f756d70 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/manifests.ts @@ -0,0 +1,34 @@ +import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../../collection/index.js'; +import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS } from './repository/constants.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { + UMB_COLLECTION_ALIAS_CONDITION, + UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, +} from '@umbraco-cms/backoffice/collection'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbCollectionBulkActionPermissions } from '@umbraco-cms/backoffice/collection'; + +const bulkTrashAction: ManifestTypes = { + type: 'entityBulkAction', + kind: 'trash', + alias: 'Umb.EntityBulkAction.Document.Trash', + name: 'Trash Document Entity Bulk Action', + weight: 10, + forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + meta: { + bulkTrashRepositoryAlias: UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS, + }, + conditions: [ + { + alias: UMB_COLLECTION_ALIAS_CONDITION, + match: UMB_DOCUMENT_COLLECTION_ALIAS, + }, + { + alias: UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION, + match: (permissions: UmbCollectionBulkActionPermissions) => permissions.allowBulkDelete, + }, + ], +}; + +export const manifests: Array = [bulkTrashAction, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/constants.ts new file mode 100644 index 0000000000..bfe20c8592 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document.BulkTrash'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/index.ts new file mode 100644 index 0000000000..170a602476 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbBulkTrashDocumentRepository } from './trash.repository.js'; +export { UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts new file mode 100644 index 0000000000..50639ff844 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const bulkTrashRepository: ManifestRepository = { + type: 'repository', + alias: UMB_BULK_TRASH_DOCUMENT_REPOSITORY_ALIAS, + name: 'Bulk Trash Document Repository', + api: () => import('./trash.repository.js'), +}; + +export const manifests: Array = [bulkTrashRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/trash.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/trash.repository.ts new file mode 100644 index 0000000000..edd03d8400 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/trash/repository/trash.repository.ts @@ -0,0 +1,43 @@ +import { UmbDocumentRecycleBinServerDataSource } from '../../../recycle-bin/repository/document-recycle-bin.server.data-source.js'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbBulkTrashRepository, UmbBulkTrashRequestArgs } from '@umbraco-cms/backoffice/entity-bulk-action'; +import type { UmbRepositoryErrorResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export class UmbBulkTrashDocumentRepository extends UmbRepositoryBase implements UmbBulkTrashRepository { + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + #recycleBinSource = new UmbDocumentRecycleBinServerDataSource(this); + + constructor(host: UmbControllerHost) { + super(host); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (notificationContext) => { + this.#notificationContext = notificationContext; + }); + } + + async requestBulkTrash(args: UmbBulkTrashRequestArgs): Promise { + let count = 0; + + for (const unique of args.uniques) { + const { error } = await this.#recycleBinSource.trash({ unique }); + + if (error) { + const notification = { data: { message: error.message } }; + this.#notificationContext?.peek('danger', notification); + } else { + count++; + } + } + + if (count > 0) { + const notification = { data: { message: `Trashed ${count} ${count === 1 ? 'document' : 'documents'}` } }; + this.#notificationContext?.peek('positive', notification); + } + + return {}; + } +} + +export { UmbBulkTrashDocumentRepository as api }; From 63c4f6be730197d9a4d124c9a039a4c59f7124ea Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:51:54 +0200 Subject: [PATCH 060/132] remove the `user-defined.css` as it is not needed --- src/Umbraco.Web.UI.Client/index.html | 1 - src/Umbraco.Web.UI.Client/src/css/user-defined.css | 1 - src/Umbraco.Web.UI.Client/web-test-runner.config.mjs | 1 - 3 files changed, 3 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/css/user-defined.css diff --git a/src/Umbraco.Web.UI.Client/index.html b/src/Umbraco.Web.UI.Client/index.html index 94d6a2ed4d..b92c54f0d6 100644 --- a/src/Umbraco.Web.UI.Client/index.html +++ b/src/Umbraco.Web.UI.Client/index.html @@ -7,7 +7,6 @@ Umbraco - diff --git a/src/Umbraco.Web.UI.Client/src/css/user-defined.css b/src/Umbraco.Web.UI.Client/src/css/user-defined.css deleted file mode 100644 index 35c48a145b..0000000000 --- a/src/Umbraco.Web.UI.Client/src/css/user-defined.css +++ /dev/null @@ -1 +0,0 @@ -/* This file can be overridden by placing a file with the same name in the /wwwroot/umbraco/backoffice/css folder of the website */ 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 c25f693d7b..b44df4a70f 100644 --- a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs +++ b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs @@ -62,7 +62,6 @@ export default { window.__UMBRACO_TEST_RUN_A11Y_TEST = ${(!devMode).toString()}; -