From 0e3a9dcc3124815690b945429d42180fdb57b45a Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 08:19:11 +0100 Subject: [PATCH 01/47] only allow navigating into folders or item with children --- .../media-picker-modal.element.ts | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index eac3c2bfa30c..b15a87165af2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -2,7 +2,7 @@ import { UmbMediaItemRepository } from '../../repository/index.js'; import { UmbMediaTreeRepository } from '../../tree/media-tree.repository.js'; import { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js'; import type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js'; -import type { UmbMediaCardItemModel, UmbMediaPathModel } from './types.js'; +import type { UmbMediaPathModel } from './types.js'; import type { UmbMediaPickerFolderPathElement } from './components/media-picker-folder-path.element.js'; import type { UmbMediaPickerModalData, UmbMediaPickerModalValue } from './media-picker-modal.token.js'; import { css, html, customElement, state, repeat, ifDefined, query } from '@umbraco-cms/backoffice/external/lit'; @@ -10,6 +10,8 @@ import { debounce } from '@umbraco-cms/backoffice/utils'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content'; import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type'; +import type { UmbMediaTreeItemModel } from '../../tree/index.js'; import '@umbraco-cms/backoffice/imaging'; @@ -26,12 +28,12 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #dataType?: { unique: string }; @state() - private _selectableFilter: (item: UmbMediaCardItemModel) => boolean = () => true; + private _selectableFilter: (item: UmbMediaTreeItemModel) => boolean = () => true; - #mediaItemsCurrentFolder: Array = []; + #mediaItemsCurrentFolder: Array = []; @state() - private _mediaFilteredList: Array = []; + private _mediaFilteredList: Array = []; @state() private _searchOnlyThisFolder = false; @@ -86,7 +88,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this.#filterMediaItems(); } - #onOpen(item: UmbMediaCardItemModel) { + #onOpen(item: UmbMediaTreeItemModel) { this._currentMediaEntity = { name: item.name, unique: item.unique, @@ -95,12 +97,12 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this.#loadMediaFolder(); } - #onSelected(item: UmbMediaCardItemModel) { + #onSelected(item: UmbMediaTreeItemModel) { const selection = this.data?.multiple ? [...this.value.selection, item.unique!] : [item.unique!]; this.modalContext?.setValue({ selection }); } - #onDeselected(item: UmbMediaCardItemModel) { + #onDeselected(item: UmbMediaTreeItemModel) { const selection = this.value.selection.filter((value) => value !== item.unique); this.modalContext?.setValue({ selection }); } @@ -150,6 +152,10 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this.#loadMediaFolder(); } + #allowNavigateToMedia(item: UmbMediaTreeItemModel): boolean { + return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; + } + override render() { return html` @@ -207,7 +213,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< `; } - #renderCard(item: UmbMediaCardItemModel) { + #renderCard(item: UmbMediaTreeItemModel) { const disabled = !this._selectableFilter(item); return html` this.#onSelected(item)} @deselected=${() => this.#onDeselected(item)} ?selected=${this.value?.selection?.find((value) => value === item.unique)} - ?selectable=${!disabled}> + ?selectable=${!disabled} + ?select-only=${this.#allowNavigateToMedia(item) === false}> Date: Fri, 22 Nov 2024 10:10:01 +0100 Subject: [PATCH 02/47] export media search provider --- .../src/packages/media/media/index.ts | 7 ++++--- .../src/packages/media/media/search/index.ts | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts index ca9211b392e7..4e75cdbac570 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts @@ -1,11 +1,12 @@ -export * from './repository/index.js'; -export * from './workspace/index.js'; -export * from './reference/index.js'; export * from './components/index.js'; export * from './dropzone/index.js'; export * from './entity.js'; export * from './paths.js'; +export * from './reference/index.js'; +export * from './repository/index.js'; +export * from './search/index.js'; export * from './utils/index.js'; +export * from './workspace/index.js'; export { UMB_MEDIA_TREE_ALIAS, UMB_MEDIA_TREE_PICKER_MODAL } from './tree/index.js'; export { UMB_MEDIA_COLLECTION_ALIAS } from './collection/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts new file mode 100644 index 000000000000..84426413218d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts @@ -0,0 +1 @@ +export * from './media.search-provider.js'; From 95a5840487ffdcd3ef4c41b36e0c0321751198f5 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 11:20:03 +0100 Subject: [PATCH 03/47] mark search on media item repo as deprecated --- .../media/media/repository/item/media-item.repository.ts | 7 +++++++ .../repository/item/media-item.server.data-source.ts | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts index 032103dc2387..178d7a6e17ff 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts @@ -12,6 +12,13 @@ export class UmbMediaItemRepository extends UmbItemRepositoryBase Date: Fri, 22 Nov 2024 11:20:25 +0100 Subject: [PATCH 04/47] use media search provider for searching --- .../media-picker-modal.element.ts | 140 ++++++++++++------ 1 file changed, 92 insertions(+), 48 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index b15a87165af2..39870e03731a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -5,15 +5,26 @@ import type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js'; import type { UmbMediaPathModel } from './types.js'; import type { UmbMediaPickerFolderPathElement } from './components/media-picker-folder-path.element.js'; import type { UmbMediaPickerModalData, UmbMediaPickerModalValue } from './media-picker-modal.token.js'; -import { css, html, customElement, state, repeat, ifDefined, query } from '@umbraco-cms/backoffice/external/lit'; +import { + css, + html, + customElement, + state, + repeat, + ifDefined, + query, + type PropertyValues, +} from '@umbraco-cms/backoffice/external/lit'; import { debounce } from '@umbraco-cms/backoffice/utils'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content'; import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type'; import type { UmbMediaTreeItemModel } from '../../tree/index.js'; +import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../search/index.js'; import '@umbraco-cms/backoffice/imaging'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE }; @@ -22,18 +33,20 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< UmbMediaPickerModalData, UmbMediaPickerModalValue > { - #mediaTreeRepository = new UmbMediaTreeRepository(this); // used to get file structure - #mediaItemRepository = new UmbMediaItemRepository(this); // used to search + #mediaTreeRepository = new UmbMediaTreeRepository(this); + #mediaItemRepository = new UmbMediaItemRepository(this); + #mediaSearchProvider = new UmbMediaSearchProvider(this); #dataType?: { unique: string }; @state() private _selectableFilter: (item: UmbMediaTreeItemModel) => boolean = () => true; - #mediaItemsCurrentFolder: Array = []; + @state() + private _currentChildren: Array = []; @state() - private _mediaFilteredList: Array = []; + private _searchResult: Array = []; @state() private _searchOnlyThisFolder = false; @@ -59,21 +72,31 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< override async connectedCallback(): Promise { super.connectedCallback(); + if (this.data?.pickableFilter) { + this._selectableFilter = this.data?.pickableFilter; + } + } - if (this.data?.pickableFilter) this._selectableFilter = this.data?.pickableFilter; + protected override async firstUpdated(_changedProperties: PropertyValues): Promise { + super.firstUpdated(_changedProperties); if (this.data?.startNode) { const { data } = await this.#mediaItemRepository.requestItems([this.data.startNode]); - - if (data?.length) { - this._currentMediaEntity = { name: data[0].name, unique: data[0].unique, entityType: data[0].entityType }; + const startNode = data?.[0]; + + if (startNode) { + this._currentMediaEntity = { + name: startNode.name, + unique: startNode.unique, + entityType: startNode.entityType, + }; } } - this.#loadMediaFolder(); + this.#loadChildrenOfCurrentMediaItem(); } - async #loadMediaFolder() { + async #loadChildrenOfCurrentMediaItem() { const { data } = await this.#mediaTreeRepository.requestTreeItemsOf({ parent: { unique: this._currentMediaEntity.unique, @@ -84,59 +107,59 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< take: 100, }); - this.#mediaItemsCurrentFolder = data?.items ?? []; - this.#filterMediaItems(); + this._currentChildren = data?.items ?? []; } - #onOpen(item: UmbMediaTreeItemModel) { + #onOpen(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { this._currentMediaEntity = { name: item.name, unique: item.unique, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, }; - this.#loadMediaFolder(); + + this.#loadChildrenOfCurrentMediaItem(); } - #onSelected(item: UmbMediaTreeItemModel) { + #onSelected(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { const selection = this.data?.multiple ? [...this.value.selection, item.unique!] : [item.unique!]; this.modalContext?.setValue({ selection }); } - #onDeselected(item: UmbMediaTreeItemModel) { + #onDeselected(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { const selection = this.value.selection.filter((value) => value !== item.unique); this.modalContext?.setValue({ selection }); } - async #filterMediaItems() { + async #searchMedia() { if (!this._searchQuery) { - // No search query, show all media items in current folder. - this._mediaFilteredList = this.#mediaItemsCurrentFolder; + this._searchResult = []; return; } + let searchFrom: UmbEntityModel | undefined = undefined; + + if (this._searchOnlyThisFolder) { + searchFrom = { + unique: this._currentMediaEntity.unique, + entityType: this._currentMediaEntity.entityType, + }; + } + const query = this._searchQuery; - const { data } = await this.#mediaItemRepository.search({ query, skip: 0, take: 100 }); + const { data } = await this.#mediaSearchProvider.search({ query, searchFrom }); if (!data) { // No search results. - this._mediaFilteredList = []; - return; - } - - if (this._searchOnlyThisFolder) { - // Don't have to map urls here, because we already have everything loaded within this folder. - this._mediaFilteredList = this.#mediaItemsCurrentFolder.filter((media) => - data.find((item) => item.unique === media.unique), - ); + this._searchResult = []; return; } // Map urls for search results as we are going to show for all folders (as long they aren't trashed). - this._mediaFilteredList = data.filter((found) => found.isTrashed === false); + this._searchResult = data.items; } #debouncedSearch = debounce(() => { - this.#filterMediaItems(); + this.#searchMedia(); }, 500); #onSearch(e: UUIInputEvent) { @@ -149,10 +172,10 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, }; - this.#loadMediaFolder(); + this.#loadChildrenOfCurrentMediaItem(); } - #allowNavigateToMedia(item: UmbMediaTreeItemModel): boolean { + #allowNavigateToMedia(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel): boolean { return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; } @@ -174,19 +197,40 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #renderBody() { return html`${this.#renderToolbar()} - this.#loadMediaFolder()} .parentUnique=${this._currentMediaEntity.unique}> - ${ - !this._mediaFilteredList.length - ? html`

${this.localize.term('content_listViewNoItems')}

` - : html`
- ${repeat( - this._mediaFilteredList, - (item) => item.unique, - (item) => this.#renderCard(item), - )} -
` - } - `; + this.#loadChildrenOfCurrentMediaItem()} + .parentUnique=${this._currentMediaEntity.unique}> + ${this._searchQuery ? this.#renderSearchResult() : this.#renderCurrentChildren()} `; + } + + #renderSearchResult() { + return html` + ${!this._searchResult.length + ? html`

${this.localize.term('content_listViewNoItems')}

` + : html`
+ ${repeat( + this._searchResult, + (item) => item.unique, + (item) => this.#renderCard(item), + )} +
`} + `; + } + + #renderCurrentChildren() { + return html` + ${!this._currentChildren.length + ? html`

${this.localize.term('content_listViewNoItems')}

` + : html`
+ ${repeat( + this._currentChildren, + (item) => item.unique, + (item) => this.#renderCard(item), + )} +
`} + `; } #renderToolbar() { @@ -213,7 +257,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< `; } - #renderCard(item: UmbMediaTreeItemModel) { + #renderCard(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { const disabled = !this._selectableFilter(item); return html` Date: Fri, 22 Nov 2024 11:22:59 +0100 Subject: [PATCH 05/47] rename method --- .../media/modals/media-picker/media-picker-modal.element.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 39870e03731a..fa830562babb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -182,7 +182,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< override render() { return html` - ${this.#renderBody()} ${this.#renderPath()} + ${this.#renderBody()} ${this.#renderBreadcrumb()}
Date: Fri, 22 Nov 2024 11:24:22 +0100 Subject: [PATCH 06/47] change the look of the upload button --- .../media/modals/media-picker/media-picker-modal.element.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index fa830562babb..b8af2927528c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -252,7 +252,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this._dropzone.browse()} label=${this.localize.term('general_upload')} - look="primary"> + look="outline" + color="default">
`; } From 0b0ad39138e8bd724c55b20f4ebab7f199c220db Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 11:30:39 +0100 Subject: [PATCH 07/47] only render checkbox if we are not in the root --- .../media-picker/media-picker-modal.element.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index b8af2927528c..6d4342cad282 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -14,6 +14,7 @@ import { ifDefined, query, type PropertyValues, + nothing, } from '@umbraco-cms/backoffice/external/lit'; import { debounce } from '@umbraco-cms/backoffice/utils'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; @@ -25,6 +26,7 @@ import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../sear import '@umbraco-cms/backoffice/imaging'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { not } from 'rxjs/internal/util/not'; const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE }; @@ -49,7 +51,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< private _searchResult: Array = []; @state() - private _searchOnlyThisFolder = false; + private _searchOnlyWithinCurrentItem = false; @state() private _searchQuery = ''; @@ -138,7 +140,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< let searchFrom: UmbEntityModel | undefined = undefined; - if (this._searchOnlyThisFolder) { + if (this._searchOnlyWithinCurrentItem) { searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType, @@ -245,9 +247,12 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @input=${this.#onSearch}> - (this._searchOnlyThisFolder = !this._searchOnlyThisFolder)} - label=${this.localize.term('general_excludeFromSubFolders')}> + + ${this._currentMediaEntity.unique + ? html` (this._searchOnlyWithinCurrentItem = !this._searchOnlyWithinCurrentItem)} + label="Search only in ${this._currentMediaEntity.name}">` + : nothing} this._dropzone.browse()} From d04da2d6c394944708620ce9640fec29390b8a34 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 11:40:38 +0100 Subject: [PATCH 08/47] clear search when navigating --- .../modals/media-picker/media-picker-modal.element.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 6d4342cad282..eb812c2e92dd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -113,6 +113,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< } #onOpen(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { + this.#clearSearch(); + this._currentMediaEntity = { name: item.name, unique: item.unique, @@ -132,6 +134,11 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this.modalContext?.setValue({ selection }); } + #clearSearch() { + this._searchQuery = ''; + this._searchResult = []; + } + async #searchMedia() { if (!this._searchQuery) { this._searchResult = []; From 496b220eac97ed3664f6cf02ec9eb7ec8a558cf2 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 11:40:53 +0100 Subject: [PATCH 09/47] add type --- .../media/modals/media-picker/media-picker-modal.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index eb812c2e92dd..ea989f6c958b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -42,7 +42,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #dataType?: { unique: string }; @state() - private _selectableFilter: (item: UmbMediaTreeItemModel) => boolean = () => true; + private _selectableFilter: (item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) => boolean = () => true; @state() private _currentChildren: Array = []; From 608eb956b7f756326b6d7c711ba42ebd9d185657 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 11:41:08 +0100 Subject: [PATCH 10/47] set value so it gets updated when cleared --- .../media/modals/media-picker/media-picker-modal.element.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index ea989f6c958b..7adaee988985 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -251,7 +251,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< + @input=${this.#onSearch} + value=${this._searchQuery}> From b1dfe0cab78b88811825c59f103344fba12e2009 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 12:36:04 +0100 Subject: [PATCH 11/47] default to search within an item --- .../media/modals/media-picker/media-picker-modal.element.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 7adaee988985..8273da356b76 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -121,6 +121,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, }; + // If the user has navigated into an item, we default to search only within that item. + this._searchOnlyWithinCurrentItem = this._currentMediaEntity.unique ? true : false; + this.#loadChildrenOfCurrentMediaItem(); } @@ -181,6 +184,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, }; + this.#loadChildrenOfCurrentMediaItem(); } @@ -258,6 +262,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< ${this._currentMediaEntity.unique ? html` (this._searchOnlyWithinCurrentItem = !this._searchOnlyWithinCurrentItem)} label="Search only in ${this._currentMediaEntity.name}">` : nothing} From f983dfed28ad170078e537b1431ff6b879d48dcf Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 12:36:21 +0100 Subject: [PATCH 12/47] hide breadcrumb if searching in root --- .../media/modals/media-picker/media-picker-modal.element.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 8273da356b76..4de736ed78b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -297,6 +297,10 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< } #renderBreadcrumb() { + if (this._searchQuery && this._searchOnlyWithinCurrentItem === false) { + return nothing; + } + return html` Date: Fri, 22 Nov 2024 12:39:36 +0100 Subject: [PATCH 13/47] scope search on server --- .../media/media/search/media-search.server.data-source.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts index 93f8357e0427..a1be218bdb1f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts @@ -33,6 +33,7 @@ export class UmbMediaSearchServerDataSource implements UmbSearchDataSource Date: Fri, 22 Nov 2024 12:41:38 +0100 Subject: [PATCH 14/47] Update media-picker-modal.element.ts --- .../media/modals/media-picker/media-picker-modal.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 4de736ed78b9..c90aa6390570 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -144,7 +144,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< async #searchMedia() { if (!this._searchQuery) { - this._searchResult = []; + this.#clearSearch(); return; } From d6725dcb01a6ae5ccb13d3ed0bfa2de10e059a5e Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 13:01:59 +0100 Subject: [PATCH 15/47] hide breadcrumb when doing a global search within another item --- .../media-picker-modal.element.ts | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index c90aa6390570..8e24679be146 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -26,7 +26,6 @@ import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../sear import '@umbraco-cms/backoffice/imaging'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; -import { not } from 'rxjs/internal/util/not'; const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE }; @@ -53,6 +52,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @state() private _searchOnlyWithinCurrentItem = false; + @state() + private _searchFrom: UmbEntityModel | undefined; + @state() private _searchQuery = ''; @@ -122,7 +124,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< }; // If the user has navigated into an item, we default to search only within that item. - this._searchOnlyWithinCurrentItem = this._currentMediaEntity.unique ? true : false; + this._searchFrom = this._currentMediaEntity.unique + ? { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType } + : undefined; this.#loadChildrenOfCurrentMediaItem(); } @@ -148,17 +152,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< return; } - let searchFrom: UmbEntityModel | undefined = undefined; - - if (this._searchOnlyWithinCurrentItem) { - searchFrom = { - unique: this._currentMediaEntity.unique, - entityType: this._currentMediaEntity.entityType, - }; - } - const query = this._searchQuery; - const { data } = await this.#mediaSearchProvider.search({ query, searchFrom }); + const { data } = await this.#mediaSearchProvider.search({ query, searchFrom: this._searchFrom }); if (!data) { // No search results. @@ -192,6 +187,14 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; } + #onSearchFromChange(e: CustomEvent) { + const checked = (e.target as HTMLInputElement).checked; + + this._searchFrom = checked + ? { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType } + : undefined; + } + override render() { return html` @@ -262,8 +265,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< ${this._currentMediaEntity.unique ? html` (this._searchOnlyWithinCurrentItem = !this._searchOnlyWithinCurrentItem)} + ?checked=${this._searchFrom?.unique === this._currentMediaEntity.unique} + @change=${this.#onSearchFromChange} label="Search only in ${this._currentMediaEntity.name}">` : nothing} @@ -297,7 +300,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< } #renderBreadcrumb() { - if (this._searchQuery && this._searchOnlyWithinCurrentItem === false) { + // hide the breadcrumb when doing a global search within another item + // We do this to avoid confusion that the current search result is within the item shown in the breadcrumb. + if (this._searchQuery && this._currentMediaEntity.unique && !this._searchFrom) { return nothing; } From eadf494bfb0cbe1cd3b737dea3024cee55e17aad Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 13:20:29 +0100 Subject: [PATCH 16/47] add selection mode --- .../modals/media-picker/media-picker-modal.element.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 8e24679be146..4af53f4e86cd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -61,6 +61,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @state() private _currentMediaEntity: UmbMediaPathModel = root; + @state() + private _isSelectionMode = false; + @query('#dropzone') private _dropzone!: UmbDropzoneElement; @@ -133,11 +136,13 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #onSelected(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { const selection = this.data?.multiple ? [...this.value.selection, item.unique!] : [item.unique!]; + this._isSelectionMode = selection.length > 0; this.modalContext?.setValue({ selection }); } #onDeselected(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { const selection = this.value.selection.filter((value) => value !== item.unique); + this._isSelectionMode = selection.length > 0; this.modalContext?.setValue({ selection }); } @@ -290,7 +295,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @deselected=${() => this.#onDeselected(item)} ?selected=${this.value?.selection?.find((value) => value === item.unique)} ?selectable=${!disabled} - ?select-only=${this.#allowNavigateToMedia(item) === false}> + ?select-only=${this._isSelectionMode || this.#allowNavigateToMedia(item) === false}> Date: Fri, 22 Nov 2024 13:26:38 +0100 Subject: [PATCH 17/47] remove unused state --- .../media/modals/media-picker/media-picker-modal.element.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 4af53f4e86cd..236975f14f57 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -49,9 +49,6 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @state() private _searchResult: Array = []; - @state() - private _searchOnlyWithinCurrentItem = false; - @state() private _searchFrom: UmbEntityModel | undefined; From a899ef4204bd4cde3d059889b33907a90c826b0c Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 13:41:02 +0100 Subject: [PATCH 18/47] handle start node when searching --- .../media-picker-modal.element.ts | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 236975f14f57..315ff7b2c998 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -1,4 +1,4 @@ -import { UmbMediaItemRepository } from '../../repository/index.js'; +import { UmbMediaItemRepository, type UmbMediaItemModel } from '../../repository/index.js'; import { UmbMediaTreeRepository } from '../../tree/media-tree.repository.js'; import { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js'; import type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js'; @@ -61,6 +61,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @state() private _isSelectionMode = false; + @state() + private _startNode: UmbMediaItemModel | undefined; + @query('#dropzone') private _dropzone!: UmbDropzoneElement; @@ -86,13 +89,13 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< if (this.data?.startNode) { const { data } = await this.#mediaItemRepository.requestItems([this.data.startNode]); - const startNode = data?.[0]; + this._startNode = data?.[0]; - if (startNode) { + if (this._startNode) { this._currentMediaEntity = { - name: startNode.name, - unique: startNode.unique, - entityType: startNode.entityType, + name: this._startNode.name, + unique: this._startNode.unique, + entityType: this._startNode.entityType, }; } } @@ -192,9 +195,13 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #onSearchFromChange(e: CustomEvent) { const checked = (e.target as HTMLInputElement).checked; - this._searchFrom = checked - ? { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType } - : undefined; + if (checked) { + this._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType }; + } else if (checked && this._startNode) { + this._searchFrom = { unique: this._startNode.unique, entityType: this._startNode.entityType }; + } else { + this._searchFrom = undefined; + } } override render() { @@ -265,7 +272,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< - ${this._currentMediaEntity.unique + ${this._currentMediaEntity.unique && this._currentMediaEntity.unique !== this._startNode?.unique ? html` Date: Fri, 22 Nov 2024 14:17:15 +0100 Subject: [PATCH 19/47] fix if wrong order --- .../media/modals/media-picker/media-picker-modal.element.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 315ff7b2c998..6c6a5862d2fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -195,10 +195,10 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #onSearchFromChange(e: CustomEvent) { const checked = (e.target as HTMLInputElement).checked; - if (checked) { - this._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType }; - } else if (checked && this._startNode) { + if (checked && this._startNode) { this._searchFrom = { unique: this._startNode.unique, entityType: this._startNode.entityType }; + } else if (checked) { + this._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType }; } else { this._searchFrom = undefined; } From ff66714162b917850969367303ea713da3c14131 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 14:19:45 +0100 Subject: [PATCH 20/47] fix type error --- .../modals/media-picker/media-picker-modal.element.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 6c6a5862d2fa..f52861d3ec5b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -188,8 +188,17 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this.#loadChildrenOfCurrentMediaItem(); } + #isTreeItem(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel): item is UmbMediaTreeItemModel { + return 'hasChildren' in item; + } + + // TODO: get hasChildren for media search items from the server #allowNavigateToMedia(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel): boolean { - return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; + if (this.#isTreeItem(item)) { + return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; + } else { + return isUmbracoFolder(item.mediaType.unique); + } } #onSearchFromChange(e: CustomEvent) { From 5258c6125331f38287fa19c66898036d44b96419 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 15:00:33 +0100 Subject: [PATCH 21/47] pass start node to breadcrumb --- .../media/modals/media-picker/media-picker-modal.element.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index f52861d3ec5b..24a9128dc3a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -327,6 +327,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< return html``; } From 5bbfd3b5e26570f45e0f99d5b40771eeafd71310 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 22 Nov 2024 15:00:46 +0100 Subject: [PATCH 22/47] handle start node in breadcrumb --- .../media-picker-folder-path.element.ts | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts index 84378b1b0a33..d0b157599eaa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts @@ -2,8 +2,16 @@ import type { UmbMediaPathModel } from '../types.js'; import type { UmbMediaDetailModel } from '../../../types.js'; import { UmbMediaDetailRepository } from '../../../repository/index.js'; import { UmbMediaTreeRepository } from '../../../tree/index.js'; -import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../../entity.js'; -import { css, html, customElement, state, repeat, property } from '@umbraco-cms/backoffice/external/lit'; +import { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../../entity.js'; +import { + css, + html, + customElement, + state, + repeat, + property, + type PropertyValues, +} from '@umbraco-cms/backoffice/external/lit'; import type { UUIInputElement, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { UmbId } from '@umbraco-cms/backoffice/id'; import { getUmbracoFolderUnique } from '@umbraco-cms/backoffice/media-type'; @@ -17,6 +25,9 @@ export class UmbMediaPickerFolderPathElement extends UmbLitElement { #mediaTreeRepository = new UmbMediaTreeRepository(this); // used to get file structure #mediaDetailRepository = new UmbMediaDetailRepository(this); // used to create folders + @property({ attribute: false }) + startNode: UmbMediaPathModel = root; + @property({ attribute: false }) public set currentMedia(value: UmbMediaPathModel) { if (value !== this._currentMedia) { @@ -38,30 +49,34 @@ export class UmbMediaPickerFolderPathElement extends UmbLitElement { @state() private _typingNewFolder = false; - override connectedCallback(): void { - super.connectedCallback(); + protected override firstUpdated(_changedProperties: PropertyValues): void { + super.firstUpdated(_changedProperties); this.#loadPath(); } async #loadPath() { const unique = this._currentMedia.unique; + const entityType = this._currentMedia.entityType; const items = unique ? ( await this.#mediaTreeRepository.requestTreeItemAncestors({ - treeItem: { unique, entityType: UMB_MEDIA_ENTITY_TYPE }, + treeItem: { unique, entityType }, }) - ).data - : undefined; - - if (items) { - this._paths = [ - root, - ...items.map((item) => ({ name: item.name, unique: item.unique, entityType: item.entityType })), - ]; - return; + ).data || [] + : []; + + let paths: Array = items.map((item) => ({ + name: item.name, + unique: item.unique, + entityType: item.entityType, + })); + + if (!this.startNode) { + paths.unshift(root); } - this._paths = [root]; + + this._paths = [...paths]; } #goToFolder(entity: UmbMediaPathModel) { From 6b4e82cf77559d19a56c9c9ba45872e34626d523 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 07:26:05 +0100 Subject: [PATCH 23/47] make start node optional --- .../media-picker/components/media-picker-folder-path.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts index d0b157599eaa..4d8e2ee522f8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts @@ -26,7 +26,7 @@ export class UmbMediaPickerFolderPathElement extends UmbLitElement { #mediaDetailRepository = new UmbMediaDetailRepository(this); // used to create folders @property({ attribute: false }) - startNode: UmbMediaPathModel = root; + startNode?: UmbMediaPathModel = root; @property({ attribute: false }) public set currentMedia(value: UmbMediaPathModel) { From a99f2faafce95bafc38935ff9cbd8127cb229cea Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 07:26:16 +0100 Subject: [PATCH 24/47] map data --- .../modals/media-picker/media-picker-modal.element.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 24a9128dc3a1..67b7172d6fe4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -26,6 +26,7 @@ import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../sear import '@umbraco-cms/backoffice/imaging'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { name } from 'src/packages/block/umbraco-package.js'; const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE }; @@ -324,10 +325,18 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< return nothing; } + const startNode: UmbMediaPathModel | undefined = this._startNode + ? { + entityType: this._startNode.entityType, + unique: this._startNode.unique, + name: this._startNode.name, + } + : undefined; + return html``; } From 5527f583443bf39eadbe5c5c53fa961e76d80894 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 07:26:38 +0100 Subject: [PATCH 25/47] clean up --- .../media/modals/media-picker/media-picker-modal.element.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 67b7172d6fe4..e697267ebbc9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -23,10 +23,9 @@ import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type'; import type { UmbMediaTreeItemModel } from '../../tree/index.js'; import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../search/index.js'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import '@umbraco-cms/backoffice/imaging'; -import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; -import { name } from 'src/packages/block/umbraco-package.js'; const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE }; From 6ec902373c0a7f269236b0c815a8930e20e2bac9 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 08:40:32 +0100 Subject: [PATCH 26/47] Update media-picker-folder-path.element.ts --- .../media-picker/components/media-picker-folder-path.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts index 4d8e2ee522f8..3c2f0422c0b7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts @@ -66,7 +66,7 @@ export class UmbMediaPickerFolderPathElement extends UmbLitElement { ).data || [] : []; - let paths: Array = items.map((item) => ({ + const paths: Array = items.map((item) => ({ name: item.name, unique: item.unique, entityType: item.entityType, From d37e0f09bd5cf99880d2a2fed906fbf2dfa183e6 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 09:24:16 +0100 Subject: [PATCH 27/47] add searching load indicator --- .../media-picker-modal.element.ts | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index e697267ebbc9..67b55c999010 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -29,6 +29,7 @@ import '@umbraco-cms/backoffice/imaging'; const root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE }; +// TODO: investigate how we can reuse the picker-search-field element, picker context etc. @customElement('umb-media-picker-modal') export class UmbMediaPickerModalElement extends UmbModalBaseElement< UmbMediaPickerModalData, @@ -64,6 +65,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< @state() private _startNode: UmbMediaItemModel | undefined; + @state() + _searching: boolean = false; + @query('#dropzone') private _dropzone!: UmbDropzoneElement; @@ -154,6 +158,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< async #searchMedia() { if (!this._searchQuery) { this.#clearSearch(); + this._searching = false; return; } @@ -163,11 +168,13 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< if (!data) { // No search results. this._searchResult = []; + this._searching = false; return; } // Map urls for search results as we are going to show for all folders (as long they aren't trashed). this._searchResult = data.items; + this._searching = false; } #debouncedSearch = debounce(() => { @@ -176,6 +183,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #onSearch(e: UUIInputEvent) { this._searchQuery = (e.target.value as string).toLocaleLowerCase(); + this._searching = true; this.#debouncedSearch(); } @@ -241,7 +249,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #renderSearchResult() { return html` - ${!this._searchResult.length + ${!this._searchResult.length && !this._searching ? html`

${this.localize.term('content_listViewNoItems')}

` : html`
${repeat( @@ -278,7 +286,11 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< placeholder=${this.localize.term('placeholders_search')} @input=${this.#onSearch} value=${this._searchQuery}> - +
+ ${this._searching + ? html`` + : html``} +
${this._currentMediaEntity.unique && this._currentMediaEntity.unique !== this._startNode?.unique @@ -350,16 +362,17 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #search { flex: 1; } + #search uui-input { width: 100%; margin-bottom: var(--uui-size-3); } - #search uui-icon { - height: 100%; - display: flex; - align-items: stretch; - padding-left: var(--uui-size-3); + + #searching-indicator { + margin-left: 7px; + margin-top: 4px; } + #media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); From 0153a1fce48c097a54149d309e4b9486b74d6f77 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 09:28:57 +0100 Subject: [PATCH 28/47] don't show unique in detail --- .../media/media/components/input-media/input-media.element.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts index 01223f0fdd6e..6eeaf1c8090d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts @@ -246,7 +246,6 @@ export class UmbInputMediaElement extends UmbFormControlMixin Date: Mon, 25 Nov 2024 10:51:17 +0100 Subject: [PATCH 29/47] Add information to item response model --- .../Factories/DocumentPresentationFactory.cs | 11 +++++++++-- .../Factories/MediaPresentationFactory.cs | 16 +++++++++++++--- .../Document/Item/DocumentItemResponseModel.cs | 4 ++++ .../Media/Item/MediaItemResponseModel.cs | 4 ++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs index 817cd9fa2e45..463dbbd5ab84 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/DocumentPresentationFactory.cs @@ -22,19 +22,22 @@ internal sealed class DocumentPresentationFactory : IDocumentPresentationFactory private readonly ITemplateService _templateService; private readonly IPublicAccessService _publicAccessService; private readonly TimeProvider _timeProvider; + private readonly IIdKeyMap _idKeyMap; public DocumentPresentationFactory( IUmbracoMapper umbracoMapper, IDocumentUrlFactory documentUrlFactory, ITemplateService templateService, IPublicAccessService publicAccessService, - TimeProvider timeProvider) + TimeProvider timeProvider, + IIdKeyMap idKeyMap) { _umbracoMapper = umbracoMapper; _documentUrlFactory = documentUrlFactory; _templateService = templateService; _publicAccessService = publicAccessService; _timeProvider = timeProvider; + _idKeyMap = idKeyMap; } public async Task CreateResponseModelAsync(IContent content) @@ -73,10 +76,14 @@ public async Task CreatePublishedResponseModelAs public DocumentItemResponseModel CreateItemResponseModel(IDocumentEntitySlim entity) { + Attempt parentKeyAttempt = _idKeyMap.GetKeyForId(entity.ParentId, UmbracoObjectTypes.Document); + var responseModel = new DocumentItemResponseModel { Id = entity.Key, - IsTrashed = entity.Trashed + IsTrashed = entity.Trashed, + Parent = parentKeyAttempt.Success ? new ReferenceByIdModel { Id = parentKeyAttempt.Result } : null, + HasChildren = entity.HasChildren, }; responseModel.IsProtected = _publicAccessService.IsProtected(entity.Path); diff --git a/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs index 7948e0d01936..f9b417028155 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/MediaPresentationFactory.cs @@ -1,10 +1,13 @@ -using Umbraco.Cms.Api.Management.ViewModels.Content; +using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Api.Management.ViewModels.Content; using Umbraco.Cms.Api.Management.ViewModels.Media; using Umbraco.Cms.Api.Management.ViewModels.Media.Item; using Umbraco.Cms.Api.Management.ViewModels.MediaType; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; +using Umbraco.Cms.Core.Services; namespace Umbraco.Cms.Api.Management.Factories; @@ -12,13 +15,16 @@ internal sealed class MediaPresentationFactory : IMediaPresentationFactory { private readonly IUmbracoMapper _umbracoMapper; private readonly IMediaUrlFactory _mediaUrlFactory; + private readonly IIdKeyMap _idKeyMap; public MediaPresentationFactory( IUmbracoMapper umbracoMapper, - IMediaUrlFactory mediaUrlFactory) + IMediaUrlFactory mediaUrlFactory, + IIdKeyMap idKeyMap) { _umbracoMapper = umbracoMapper; _mediaUrlFactory = mediaUrlFactory; + _idKeyMap = idKeyMap; } public MediaResponseModel CreateResponseModel(IMedia media) @@ -32,10 +38,14 @@ public MediaResponseModel CreateResponseModel(IMedia media) public MediaItemResponseModel CreateItemResponseModel(IMediaEntitySlim entity) { + Attempt parentKeyAttempt = _idKeyMap.GetKeyForId(entity.ParentId, UmbracoObjectTypes.Media); + var responseModel = new MediaItemResponseModel { Id = entity.Key, - IsTrashed = entity.Trashed + IsTrashed = entity.Trashed, + Parent = parentKeyAttempt.Success ? new ReferenceByIdModel { Id = parentKeyAttempt.Result } : null, + HasChildren = entity.HasChildren, }; responseModel.MediaType = _umbracoMapper.Map(entity)!; diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Document/Item/DocumentItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Document/Item/DocumentItemResponseModel.cs index 6dc8aa4d596f..ad7d991a00b1 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Document/Item/DocumentItemResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Document/Item/DocumentItemResponseModel.cs @@ -10,6 +10,10 @@ public class DocumentItemResponseModel : ItemResponseModelBase public bool IsProtected { get; set; } + public ReferenceByIdModel? Parent { get; set; } + + public bool HasChildren { get; set; } + public DocumentTypeReferenceResponseModel DocumentType { get; set; } = new(); public IEnumerable Variants { get; set; } = Enumerable.Empty(); diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Media/Item/MediaItemResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Media/Item/MediaItemResponseModel.cs index 2eb427060038..d342a163b85d 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Media/Item/MediaItemResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Media/Item/MediaItemResponseModel.cs @@ -8,6 +8,10 @@ public class MediaItemResponseModel : ItemResponseModelBase { public bool IsTrashed { get; set; } + public ReferenceByIdModel? Parent { get; set; } + + public bool HasChildren { get; set; } + public MediaTypeReferenceResponseModel MediaType { get; set; } = new(); public IEnumerable Variants { get; set; } = Enumerable.Empty(); From 3c940f62cf93ab842780601316c1b641ca80a476 Mon Sep 17 00:00:00 2001 From: nikolajlauridsen Date: Mon, 25 Nov 2024 10:52:21 +0100 Subject: [PATCH 30/47] Update OpenApi.json --- src/Umbraco.Cms.Api.Management/OpenApi.json | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index a57ae4553668..261279dc645b 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -36738,6 +36738,7 @@ "DocumentItemResponseModel": { "required": [ "documentType", + "hasChildren", "id", "isProtected", "isTrashed", @@ -36755,6 +36756,17 @@ "isProtected": { "type": "boolean" }, + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], + "nullable": true + }, + "hasChildren": { + "type": "boolean" + }, "documentType": { "oneOf": [ { @@ -38895,6 +38907,7 @@ }, "MediaItemResponseModel": { "required": [ + "hasChildren", "id", "isTrashed", "mediaType", @@ -38909,6 +38922,17 @@ "isTrashed": { "type": "boolean" }, + "parent": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReferenceByIdModel" + } + ], + "nullable": true + }, + "hasChildren": { + "type": "boolean" + }, "mediaType": { "oneOf": [ { From c635e45147ee67bfbc9f981c41e3b0f2db54453f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 11:46:00 +0100 Subject: [PATCH 31/47] generate new server models --- .../src/external/backend-api/src/types.gen.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts index b6471bde72b1..0f8f363eb070 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts @@ -653,6 +653,8 @@ export type DocumentItemResponseModel = { id: string; isTrashed: boolean; isProtected: boolean; + parent?: ((ReferenceByIdModel) | null); + hasChildren: boolean; documentType: (DocumentTypeReferenceResponseModel); variants: Array<(DocumentVariantItemResponseModel)>; }; @@ -1185,6 +1187,8 @@ export type MediaConfigurationResponseModel = { export type MediaItemResponseModel = { id: string; isTrashed: boolean; + parent?: ((ReferenceByIdModel) | null); + hasChildren: boolean; mediaType: (MediaTypeReferenceResponseModel); variants: Array<(VariantItemResponseModel)>; }; From 92872728eb3a30ae1ce5c54647a7e3e1151957c1 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 12:05:03 +0100 Subject: [PATCH 32/47] update mocks --- .../src/mocks/data/document-blueprint/document-blueprint.db.ts | 2 ++ .../src/mocks/data/document/document.db.ts | 2 ++ src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts index 9ad279f72275..68800650b1d3 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-blueprint/document-blueprint.db.ts @@ -101,9 +101,11 @@ const itemMapper = (model: UmbMockDocumentBlueprintModel): DocumentItemResponseM icon: model.documentType.icon, id: model.documentType.id, }, + hasChildren: model.hasChildren, id: model.id, isProtected: model.isProtected, isTrashed: model.isTrashed, + parent: model.parent, variants: model.variants, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts index 5cace7dd5080..52240a55ccbc 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts @@ -126,9 +126,11 @@ const itemMapper = (model: UmbMockDocumentModel): DocumentItemResponseModel => { icon: model.documentType.icon, id: model.documentType.id, }, + hasChildren: model.hasChildren, id: model.id, isProtected: model.isProtected, isTrashed: model.isTrashed, + parent: model.parent, variants: model.variants, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts index f8e81cd0dc08..9f160d7a356a 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts @@ -99,8 +99,10 @@ const itemMapper = (model: UmbMockMediaModel): MediaItemResponseModel => { icon: model.mediaType.icon, id: model.mediaType.id, }, + hasChildren: model.hasChildren, id: model.id, isTrashed: model.isTrashed, + parent: model.parent, variants: model.variants, }; }; From 6d62b4591909a438f30d3d579b8cd4464138a5c6 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 12:05:40 +0100 Subject: [PATCH 33/47] move interface to types --- .../src/packages/media/media/search/index.ts | 1 + .../packages/media/media/search/media-search.repository.ts | 2 +- .../media/media/search/media-search.server.data-source.ts | 2 +- .../src/packages/media/media/search/media.search-provider.ts | 4 ---- .../src/packages/media/media/search/types.ts | 5 +++++ 5 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/search/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts index 84426413218d..b00dda3055b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/index.ts @@ -1 +1,2 @@ export * from './media.search-provider.js'; +export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts index cda2d907f4c9..c2feafd3e7a3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts @@ -1,9 +1,9 @@ import { UmbMediaSearchServerDataSource } from './media-search.server.data-source.js'; -import type { UmbMediaSearchItemModel } from './media.search-provider.js'; import type { UmbSearchRepository, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +import type { UmbMediaSearchItemModel } from './types.js'; export class UmbMediaSearchRepository extends UmbControllerBase diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts index a1be218bdb1f..a414e40441d6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts @@ -1,9 +1,9 @@ import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; -import type { UmbMediaSearchItemModel } from './media.search-provider.js'; import type { UmbSearchDataSource, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { MediaService } from '@umbraco-cms/backoffice/external/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbMediaSearchItemModel } from './types.js'; /** * A data source for the Rollback that fetches data from the server diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts index 973ab4df26aa..89b8feea6236 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts @@ -3,10 +3,6 @@ import { UmbMediaSearchRepository } from './media-search.repository.js'; import type { UmbSearchProvider, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -export interface UmbMediaSearchItemModel extends UmbMediaItemModel { - href: string; -} - export class UmbMediaSearchProvider extends UmbControllerBase implements UmbSearchProvider { #repository = new UmbMediaSearchRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/types.ts new file mode 100644 index 000000000000..a0d28611aa2e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/types.ts @@ -0,0 +1,5 @@ +import type { UmbMediaItemModel } from '../repository/index.js'; + +export interface UmbMediaSearchItemModel extends UmbMediaItemModel { + href: string; +} From f9b1801770c91f93d38e96315346e3f08ab30ad1 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 12:06:04 +0100 Subject: [PATCH 34/47] add hasChildren and parent to media item model interface --- .../media/repository/item/media-item.server.data-source.ts | 6 ++++-- .../src/packages/media/media/repository/item/types.ts | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts index 53ba2b038afc..9f70c98621db 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts @@ -53,19 +53,21 @@ const getItems = (uniques: Array) => MediaService.getItemMedia({ id: uni const mapper = (item: MediaItemResponseModel): UmbMediaItemModel => { return { entityType: UMB_MEDIA_ENTITY_TYPE, - unique: item.id, + hasChildren: item.hasChildren, isTrashed: item.isTrashed, + unique: item.id, mediaType: { unique: item.mediaType.id, icon: item.mediaType.icon, collection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null, }, + name: item.variants[0]?.name, // TODO: get correct variant name + parent: item.parent ? { unique: item.parent.id } : null, variants: item.variants.map((variant) => { return { culture: variant.culture || null, name: variant.name, }; }), - name: item.variants[0]?.name, // TODO: get correct variant name }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts index 5dd1780a064a..04fb808f2f04 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts @@ -3,15 +3,17 @@ import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbMediaItemModel { entityType: UmbMediaEntityType; - unique: string; + hasChildren: boolean; isTrashed: boolean; + unique: string; mediaType: { unique: string; icon: string; collection: UmbReferenceByUnique | null; }; - variants: Array; name: string; // TODO: get correct variant name + parent: UmbReferenceByUnique | null; + variants: Array; } export interface UmbMediaItemVariantModel { From d4963d0483b185a9b355525885f90b151a02f326 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 12:08:58 +0100 Subject: [PATCH 35/47] fix import --- .../src/packages/media/media/search/media.search-provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts index 89b8feea6236..b94f245e5070 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts @@ -1,7 +1,7 @@ -import type { UmbMediaItemModel } from '../index.js'; import { UmbMediaSearchRepository } from './media-search.repository.js'; import type { UmbSearchProvider, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbMediaSearchItemModel } from './types.js'; export class UmbMediaSearchProvider extends UmbControllerBase implements UmbSearchProvider { #repository = new UmbMediaSearchRepository(this); From 46c1eb6bf590139314b67f503fcf713afeb233fc Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 12:09:04 +0100 Subject: [PATCH 36/47] map data --- .../media/search/media-search.server.data-source.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts index a414e40441d6..85cd7d344f0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts @@ -40,22 +40,24 @@ export class UmbMediaSearchServerDataSource implements UmbSearchDataSource = data.items.map((item) => { return { - href: '/section/media/workspace/media/edit/' + item.id, entityType: UMB_MEDIA_ENTITY_TYPE, - unique: item.id, + hasChildren: item.hasChildren, + href: '/section/media/workspace/media/edit/' + item.id, isTrashed: item.isTrashed, + unique: item.id, mediaType: { - unique: item.mediaType.id, - icon: item.mediaType.icon, collection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null, + icon: item.mediaType.icon, + unique: item.mediaType.id, }, + name: item.variants[0]?.name, // TODO: get correct variant name + parent: item.parent ? { unique: item.parent.id } : null, variants: item.variants.map((variant) => { return { culture: variant.culture || null, name: variant.name, }; }), - name: item.variants[0]?.name, // TODO: get correct variant name }; }); From 2ccc15b78daf0bb6a3ecc3be3c3e3ee36db569ba Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 12:59:16 +0100 Subject: [PATCH 37/47] map media item --- .../src/packages/core/models/index.ts | 1 + .../item/document-item.server.data-source.ts | 16 ++++++++------- .../documents/repository/item/types.ts | 13 +++++++----- .../search/document-search.repository.ts | 2 +- .../document-search.server.data-source.ts | 20 ++++++++++--------- .../search/document.search-provider.ts | 5 +---- .../documents/documents/search/types.ts | 5 +++++ .../media/media/repository/item/types.ts | 3 ++- 8 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts index c1f1a5034e84..c992d6388f2e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts @@ -14,6 +14,7 @@ export interface UmbNumberRangeValueType { max?: number; } +// TODO: this needs to use the UmbEntityUnique so we ensure that unique can be null export interface UmbReferenceByUnique { unique: string; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts index 7b0370f60bb3..14e808545fa8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts @@ -32,15 +32,18 @@ const getItems = (uniques: Array) => DocumentService.getItemDocument({ i const mapper = (item: DocumentItemResponseModel): UmbDocumentItemModel => { return { - entityType: UMB_DOCUMENT_ENTITY_TYPE, - unique: item.id, - isTrashed: item.isTrashed, - isProtected: item.isProtected, documentType: { - unique: item.documentType.id, - icon: item.documentType.icon, collection: item.documentType.collection ? { unique: item.documentType.collection.id } : null, + icon: item.documentType.icon, + unique: item.documentType.id, }, + entityType: UMB_DOCUMENT_ENTITY_TYPE, + hasChildren: item.hasChildren, + isProtected: item.isProtected, + isTrashed: item.isTrashed, + name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. + parent: item.parent ? { unique: item.parent.id } : null, + unique: item.id, variants: item.variants.map((variant) => { return { culture: variant.culture || null, @@ -48,6 +51,5 @@ const mapper = (item: DocumentItemResponseModel): UmbDocumentItemModel => { state: variant.state, }; }), - name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts index 18e03a54622a..36d2ac8a9cfe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts @@ -1,18 +1,21 @@ +import type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity'; import type { UmbDocumentEntityType } from '../../entity.js'; import type { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbDocumentItemModel { - entityType: UmbDocumentEntityType; - name: string; // TODO: this is not correct. We need to get it from the variants. This is a temp solution. - unique: string; - isTrashed: boolean; - isProtected: boolean; documentType: { unique: string; icon: string; collection: UmbReferenceByUnique | null; }; + entityType: UmbDocumentEntityType; + hasChildren: boolean; + isProtected: boolean; + isTrashed: boolean; + name: string; // TODO: this is not correct. We need to get it from the variants. This is a temp solution. + parent: { unique: UmbEntityUnique } | null; // TODO: Use UmbReferenceByUnique when it support unique as null + unique: string; variants: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts index c5471d0e5d80..e021dd6be0cf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts @@ -1,9 +1,9 @@ import { UmbDocumentSearchServerDataSource } from './document-search.server.data-source.js'; -import type { UmbDocumentSearchItemModel } from './document.search-provider.js'; import type { UmbSearchRepository, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +import type { UmbDocumentSearchItemModel } from './types.js'; export class UmbDocumentSearchRepository extends UmbControllerBase diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts index aeb27b182288..23c200c03c84 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts @@ -1,9 +1,9 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; -import type { UmbDocumentSearchItemModel } from './document.search-provider.js'; import type { UmbSearchDataSource, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { DocumentService } from '@umbraco-cms/backoffice/external/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbDocumentSearchItemModel } from './types.js'; /** * A data source for the Rollback that fetches data from the server @@ -40,16 +40,19 @@ export class UmbDocumentSearchServerDataSource implements UmbSearchDataSource = data.items.map((item) => { return { - href: '/section/content/workspace/document/edit/' + item.id, - entityType: UMB_DOCUMENT_ENTITY_TYPE, - unique: item.id, - isTrashed: item.isTrashed, - isProtected: item.isProtected, documentType: { - unique: item.documentType.id, - icon: item.documentType.icon, collection: item.documentType.collection ? { unique: item.documentType.collection.id } : null, + icon: item.documentType.icon, + unique: item.documentType.id, }, + entityType: UMB_DOCUMENT_ENTITY_TYPE, + hasChildren: item.hasChildren, + href: '/section/content/workspace/document/edit/' + item.id, + isProtected: item.isProtected, + isTrashed: item.isTrashed, + name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. + parent: item.parent ? { unique: item.parent.id } : null, + unique: item.id, variants: item.variants.map((variant) => { return { culture: variant.culture || null, @@ -57,7 +60,6 @@ export class UmbDocumentSearchServerDataSource implements UmbSearchDataSource; } From f6641c48d51a22a25ed58de2d52c1a7b9e1b8789 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 13:02:11 +0100 Subject: [PATCH 38/47] treat tree item and search result the same --- .../modals/media-picker/media-picker-modal.element.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 67b55c999010..709a6ad6f372 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -196,17 +196,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< this.#loadChildrenOfCurrentMediaItem(); } - #isTreeItem(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel): item is UmbMediaTreeItemModel { - return 'hasChildren' in item; - } - - // TODO: get hasChildren for media search items from the server #allowNavigateToMedia(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel): boolean { - if (this.#isTreeItem(item)) { - return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; - } else { - return isUmbracoFolder(item.mediaType.unique); - } + return isUmbracoFolder(item.mediaType.unique) || item.hasChildren; } #onSearchFromChange(e: CustomEvent) { From 2b1a7715e0589c1e5f67e9986f54535ba1bd2c67 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 13:17:43 +0100 Subject: [PATCH 39/47] Fix: bump uui version (#17626) --- src/Umbraco.Web.UI.Client/package-lock.json | 954 ++++++++++---------- src/Umbraco.Web.UI.Client/package.json | 4 +- 2 files changed, 479 insertions(+), 479 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 8423f3ccb5eb..4d4a13cc8b01 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -29,8 +29,8 @@ "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", "@types/uuid": "^10.0.0", - "@umbraco-ui/uui": "^1.12.0", - "@umbraco-ui/uui-css": "^1.12.0", + "@umbraco-ui/uui": "^1.12.1", + "@umbraco-ui/uui-css": "^1.12.1", "base64-js": "^1.5.1", "diff": "^5.2.0", "dompurify": "^3.1.6", @@ -4444,814 +4444,814 @@ "link": true }, "node_modules/@umbraco-ui/uui": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.12.0.tgz", - "integrity": "sha512-MZ2OrOSlYlF02x6BHqMFRH2Awkk92nf+LLdLqixaWtsEmYdP8V3/T3Ytpshwy7f5RHmzuhPRsSux7rWmMKU3yA==", - "dependencies": { - "@umbraco-ui/uui-action-bar": "1.12.0", - "@umbraco-ui/uui-avatar": "1.12.0", - "@umbraco-ui/uui-avatar-group": "1.12.0", - "@umbraco-ui/uui-badge": "1.12.0", - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-boolean-input": "1.12.0", - "@umbraco-ui/uui-box": "1.12.0", - "@umbraco-ui/uui-breadcrumbs": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-button-group": "1.12.0", - "@umbraco-ui/uui-button-inline-create": "1.12.0", - "@umbraco-ui/uui-card": "1.12.0", - "@umbraco-ui/uui-card-block-type": "1.12.0", - "@umbraco-ui/uui-card-content-node": "1.12.0", - "@umbraco-ui/uui-card-media": "1.12.0", - "@umbraco-ui/uui-card-user": "1.12.0", - "@umbraco-ui/uui-caret": "1.12.0", - "@umbraco-ui/uui-checkbox": "1.12.0", - "@umbraco-ui/uui-color-area": "1.12.0", - "@umbraco-ui/uui-color-picker": "1.12.0", - "@umbraco-ui/uui-color-slider": "1.12.0", - "@umbraco-ui/uui-color-swatch": "1.12.0", - "@umbraco-ui/uui-color-swatches": "1.12.0", - "@umbraco-ui/uui-combobox": "1.12.0", - "@umbraco-ui/uui-combobox-list": "1.12.0", - "@umbraco-ui/uui-css": "1.12.0", - "@umbraco-ui/uui-dialog": "1.12.0", - "@umbraco-ui/uui-dialog-layout": "1.12.0", - "@umbraco-ui/uui-file-dropzone": "1.12.0", - "@umbraco-ui/uui-file-preview": "1.12.0", - "@umbraco-ui/uui-form": "1.12.0", - "@umbraco-ui/uui-form-layout-item": "1.12.0", - "@umbraco-ui/uui-form-validation-message": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0", - "@umbraco-ui/uui-icon-registry": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0", - "@umbraco-ui/uui-input": "1.12.0", - "@umbraco-ui/uui-input-file": "1.12.0", - "@umbraco-ui/uui-input-lock": "1.12.0", - "@umbraco-ui/uui-input-password": "1.12.0", - "@umbraco-ui/uui-keyboard-shortcut": "1.12.0", - "@umbraco-ui/uui-label": "1.12.0", - "@umbraco-ui/uui-loader": "1.12.0", - "@umbraco-ui/uui-loader-bar": "1.12.0", - "@umbraco-ui/uui-loader-circle": "1.12.0", - "@umbraco-ui/uui-menu-item": "1.12.0", - "@umbraco-ui/uui-modal": "1.12.0", - "@umbraco-ui/uui-pagination": "1.12.0", - "@umbraco-ui/uui-popover": "1.12.0", - "@umbraco-ui/uui-popover-container": "1.12.0", - "@umbraco-ui/uui-progress-bar": "1.12.0", - "@umbraco-ui/uui-radio": "1.12.0", - "@umbraco-ui/uui-range-slider": "1.12.0", - "@umbraco-ui/uui-ref": "1.12.0", - "@umbraco-ui/uui-ref-list": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0", - "@umbraco-ui/uui-ref-node-data-type": "1.12.0", - "@umbraco-ui/uui-ref-node-document-type": "1.12.0", - "@umbraco-ui/uui-ref-node-form": "1.12.0", - "@umbraco-ui/uui-ref-node-member": "1.12.0", - "@umbraco-ui/uui-ref-node-package": "1.12.0", - "@umbraco-ui/uui-ref-node-user": "1.12.0", - "@umbraco-ui/uui-scroll-container": "1.12.0", - "@umbraco-ui/uui-select": "1.12.0", - "@umbraco-ui/uui-slider": "1.12.0", - "@umbraco-ui/uui-symbol-expand": "1.12.0", - "@umbraco-ui/uui-symbol-file": "1.12.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.12.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.12.0", - "@umbraco-ui/uui-symbol-folder": "1.12.0", - "@umbraco-ui/uui-symbol-lock": "1.12.0", - "@umbraco-ui/uui-symbol-more": "1.12.0", - "@umbraco-ui/uui-symbol-sort": "1.12.0", - "@umbraco-ui/uui-table": "1.12.0", - "@umbraco-ui/uui-tabs": "1.12.0", - "@umbraco-ui/uui-tag": "1.12.0", - "@umbraco-ui/uui-textarea": "1.12.0", - "@umbraco-ui/uui-toast-notification": "1.12.0", - "@umbraco-ui/uui-toast-notification-container": "1.12.0", - "@umbraco-ui/uui-toast-notification-layout": "1.12.0", - "@umbraco-ui/uui-toggle": "1.12.0", - "@umbraco-ui/uui-visually-hidden": "1.12.0" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.12.1.tgz", + "integrity": "sha512-wNx+ibT98rH8RxBBDfe3Y5YjClpxunTovuyTaY3BU6uVmC8UfxaW7qSggyeSvl+vthk30gg8u7pxzCuuv88xYw==", + "dependencies": { + "@umbraco-ui/uui-action-bar": "1.12.1", + "@umbraco-ui/uui-avatar": "1.12.1", + "@umbraco-ui/uui-avatar-group": "1.12.1", + "@umbraco-ui/uui-badge": "1.12.1", + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-boolean-input": "1.12.1", + "@umbraco-ui/uui-box": "1.12.1", + "@umbraco-ui/uui-breadcrumbs": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-button-group": "1.12.1", + "@umbraco-ui/uui-button-inline-create": "1.12.1", + "@umbraco-ui/uui-card": "1.12.1", + "@umbraco-ui/uui-card-block-type": "1.12.1", + "@umbraco-ui/uui-card-content-node": "1.12.1", + "@umbraco-ui/uui-card-media": "1.12.1", + "@umbraco-ui/uui-card-user": "1.12.1", + "@umbraco-ui/uui-caret": "1.12.1", + "@umbraco-ui/uui-checkbox": "1.12.1", + "@umbraco-ui/uui-color-area": "1.12.1", + "@umbraco-ui/uui-color-picker": "1.12.1", + "@umbraco-ui/uui-color-slider": "1.12.1", + "@umbraco-ui/uui-color-swatch": "1.12.1", + "@umbraco-ui/uui-color-swatches": "1.12.1", + "@umbraco-ui/uui-combobox": "1.12.1", + "@umbraco-ui/uui-combobox-list": "1.12.1", + "@umbraco-ui/uui-css": "1.12.1", + "@umbraco-ui/uui-dialog": "1.12.1", + "@umbraco-ui/uui-dialog-layout": "1.12.1", + "@umbraco-ui/uui-file-dropzone": "1.12.1", + "@umbraco-ui/uui-file-preview": "1.12.1", + "@umbraco-ui/uui-form": "1.12.1", + "@umbraco-ui/uui-form-layout-item": "1.12.1", + "@umbraco-ui/uui-form-validation-message": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1", + "@umbraco-ui/uui-icon-registry": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1", + "@umbraco-ui/uui-input": "1.12.1", + "@umbraco-ui/uui-input-file": "1.12.1", + "@umbraco-ui/uui-input-lock": "1.12.1", + "@umbraco-ui/uui-input-password": "1.12.1", + "@umbraco-ui/uui-keyboard-shortcut": "1.12.1", + "@umbraco-ui/uui-label": "1.12.1", + "@umbraco-ui/uui-loader": "1.12.1", + "@umbraco-ui/uui-loader-bar": "1.12.1", + "@umbraco-ui/uui-loader-circle": "1.12.1", + "@umbraco-ui/uui-menu-item": "1.12.1", + "@umbraco-ui/uui-modal": "1.12.1", + "@umbraco-ui/uui-pagination": "1.12.1", + "@umbraco-ui/uui-popover": "1.12.1", + "@umbraco-ui/uui-popover-container": "1.12.1", + "@umbraco-ui/uui-progress-bar": "1.12.1", + "@umbraco-ui/uui-radio": "1.12.1", + "@umbraco-ui/uui-range-slider": "1.12.1", + "@umbraco-ui/uui-ref": "1.12.1", + "@umbraco-ui/uui-ref-list": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1", + "@umbraco-ui/uui-ref-node-data-type": "1.12.1", + "@umbraco-ui/uui-ref-node-document-type": "1.12.1", + "@umbraco-ui/uui-ref-node-form": "1.12.1", + "@umbraco-ui/uui-ref-node-member": "1.12.1", + "@umbraco-ui/uui-ref-node-package": "1.12.1", + "@umbraco-ui/uui-ref-node-user": "1.12.1", + "@umbraco-ui/uui-scroll-container": "1.12.1", + "@umbraco-ui/uui-select": "1.12.1", + "@umbraco-ui/uui-slider": "1.12.1", + "@umbraco-ui/uui-symbol-expand": "1.12.1", + "@umbraco-ui/uui-symbol-file": "1.12.1", + "@umbraco-ui/uui-symbol-file-dropzone": "1.12.1", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.12.1", + "@umbraco-ui/uui-symbol-folder": "1.12.1", + "@umbraco-ui/uui-symbol-lock": "1.12.1", + "@umbraco-ui/uui-symbol-more": "1.12.1", + "@umbraco-ui/uui-symbol-sort": "1.12.1", + "@umbraco-ui/uui-table": "1.12.1", + "@umbraco-ui/uui-tabs": "1.12.1", + "@umbraco-ui/uui-tag": "1.12.1", + "@umbraco-ui/uui-textarea": "1.12.1", + "@umbraco-ui/uui-toast-notification": "1.12.1", + "@umbraco-ui/uui-toast-notification-container": "1.12.1", + "@umbraco-ui/uui-toast-notification-layout": "1.12.1", + "@umbraco-ui/uui-toggle": "1.12.1", + "@umbraco-ui/uui-visually-hidden": "1.12.1" } }, "node_modules/@umbraco-ui/uui-action-bar": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.12.0.tgz", - "integrity": "sha512-ycCCwmq+J6KGTlc0lcQ50FUWuqXScuWHzq0AsPES9FO9WwSKMrZxhPq8JZj0SZ1fACvRpNlpIuST+00q4siiDw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.12.1.tgz", + "integrity": "sha512-MQBa8P8djO5SCy9BaAwHGHXBLe1MxEiGgAEln5FrkjAWJiV7x+9F8k/2MIuowmEJ/+6X38M9/bzDi3625TN7eA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button-group": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button-group": "1.12.1" } }, "node_modules/@umbraco-ui/uui-avatar": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.12.0.tgz", - "integrity": "sha512-4dnsud55w37Su01kLRSsPZfvEaVFPHUiFoTTljhyF79fE8/9In0omM5uz9t51fuONMByavzJtlDlGAc0Jr2zoA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.12.1.tgz", + "integrity": "sha512-W3RW8pIwuhIiF/vy5GFdLQ3upmyT0nh/XD9yx0B7aOwZKYvNWo2pUAG0DeuK4Dw8NzyWew+jJx4rY+X49xDgEg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-avatar-group": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.12.0.tgz", - "integrity": "sha512-0I//OiHtQo5b1ztxhgDOUL5IA8QhF/fpxnCKaHA/iOR9EKVQ1twsvjoisqFmxyw/WjuEkNwcdlafA5+EKzFtsQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.12.1.tgz", + "integrity": "sha512-sRdXCtfy0h1U+OBljtDiBFzN41A7umnHQKrfgGdjXVVGLsNzxACROkenRKPNnfae/TVmfF39Bi0wBiTdJRE7Sw==", "dependencies": { - "@umbraco-ui/uui-avatar": "1.12.0", - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-avatar": "1.12.1", + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-badge": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.12.0.tgz", - "integrity": "sha512-+1wEsHSvSkdXHUblBa1uhLw6hb55/5j/QKXMdjw2IgkKXSjG3MWmW4g5ZA2+5ilZIioln64dUg3WIGVLyEAEUQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.12.1.tgz", + "integrity": "sha512-LlffQ5M9019QyZSkYRUW2ju4ZWXsVhFvesbS+zJC/devVxNXejkEfUW/yeROVAwrGWMbqQWvy2NkdcEI8oSKwg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-base": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.12.0.tgz", - "integrity": "sha512-HqvuIDx3APuPdAvNFcO1uTK8B8ZDbEJUSX6IfiU//fBc6FDLHIhbG7ByR9iFaVDaxwiazEpM6txaWHFiu3Mk7Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.12.1.tgz", + "integrity": "sha512-0KMlkaiJxu9yIaMJPb/i16XkHkbiQYcDmflJ2BaGyZQyL1cZilyvsUofid31PsAFLHpUTOLAOWFsaB0lBHtu/Q==", "peerDependencies": { "lit": ">=2.8.0" } }, "node_modules/@umbraco-ui/uui-boolean-input": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.12.0.tgz", - "integrity": "sha512-PFWZK72itp2CJIweUNLldRKLwx51FZDTEM5VmkbPJSe7IDRQvOK7AlMHS3DL3gnjfYwVdpmXt43N8hK6vd1aCA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.12.1.tgz", + "integrity": "sha512-mqrRaWcpgHbx8ExiDcJs+ycyzKbTTRJb2drFK61jd1C4qIfwjOjWTng30ruDlNubwL2i8yryBHMMjsSPJ7xMNQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-box": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.12.0.tgz", - "integrity": "sha512-OZIiQPISjFIZsk6XBDoDakIiSAjfBn0T/ct/cwJyMzjVc6YlfrouByDx5+9/nzvQzUIKIhGtRIEftdDbCDzAYQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.12.1.tgz", + "integrity": "sha512-A5aD7qVCgc21lMHCr81Q9kvxyLBBwZTUesRj/D4yJCwD98bI9ZQan4Sy/q+JzHntJwzCkDLBou3SVWgJquSI3w==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-css": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-css": "1.12.1" } }, "node_modules/@umbraco-ui/uui-breadcrumbs": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.12.0.tgz", - "integrity": "sha512-1KXKaSVAXCrpBdG8xwj11omrb5yQnWT342NDHET9ltC9tpHhNlbFxi4Lkz5OJXgI0oLkWJLTT2aFY0u7kd4wmA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.12.1.tgz", + "integrity": "sha512-dpEDnOVnOXXBFlHl9RUCXWZLFMgo641o1fUi5j27bCRRvfcflqu4/WmwmQcrqUPnKQntDgwzoQTa2Vj4MEL3Yw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-button": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.12.0.tgz", - "integrity": "sha512-Zi9VqPB073n5BsotQLbDeVfVVr72Yv2tP8Qy/xfZJQCzmW80g79hUukstzVMTkQ9SB0ubNIy8h+XfPA72OxK4w==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.12.1.tgz", + "integrity": "sha512-S4DgX4AdT/vTwtXS8/ALQVn7MIfGhcyk0oEhnHWyB1eHKpOBMXU3q+GZUjoYZ33wHQvEh4pIJCGkTfBtzGLIKg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1" } }, "node_modules/@umbraco-ui/uui-button-group": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.12.0.tgz", - "integrity": "sha512-cdgLjnLWAXaKA4hih02Pw+hCDV/0kE8Pn5EUl6voeh1+47z/ugnRzT76Fz1B1UDmEDM8hvkSQblOzuJlgTwPng==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.12.1.tgz", + "integrity": "sha512-MMH9xju42Glee2htq2ZMAYgFZTksIs3aLLRusj9+l4Thiij8mkdoLVTCAWHPaEFEioy1AJyDxtemtcwayQHSJw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-button-inline-create": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.12.0.tgz", - "integrity": "sha512-vOL+d90i1bM3d+DcI3rUSWibPMWWc0CNxpVx46UBhsX5C6yyUuyKre/nsybCJBwzgpqqxJvHMFquHGrjz2kBxQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.12.1.tgz", + "integrity": "sha512-T1ZcB87wUhg4dDJ8/zDctvyyuodqIBJlLgq7BgjrZCukfyO68mkI1jvRaixL5V/K0EFNUGvmTsSbfE5jA7OisA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-card": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.12.0.tgz", - "integrity": "sha512-TTRnVb1ayhDuk02XSPx8t0uMN8lnrT7ut/KxiAPmhQWbRPKTGXpt4FgYHsns9QvuV+8FQER6MRxBATNXWs1vXQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.12.1.tgz", + "integrity": "sha512-1+QnOF03qYAj6lTF6Ens9Q922x5kDx/P/Rp3nfEdduWVv+opuzPM9bjkoRBVfb2Udd8Kt2aNFujwX7H5r2oWJg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-card-block-type": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-block-type/-/uui-card-block-type-1.12.0.tgz", - "integrity": "sha512-GPVGp/kv16o7hzT2FmVNd8Es0NjQ4GpYN+ni2BIYd2z4D2MOLgrVRmsfzJmve0SieVxWFG+ukW3VZ/6t/RZwNw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-block-type/-/uui-card-block-type-1.12.1.tgz", + "integrity": "sha512-Tx5f3ucchl1+90KE+srWtz0iI/VR3nKa0mJxAZJElfwQ2yZF3flAFJB2V+aajjKEeBu67DK5Q+27yYo9mUn2gQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-card": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-card": "1.12.1" } }, "node_modules/@umbraco-ui/uui-card-content-node": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.12.0.tgz", - "integrity": "sha512-poUGVfl3g2+QEw2M6wEmfpRZvVIZQAa/RoJbbBYV047rmQVerUOTiRwA5XjHQZvsuwo2kwoQ/+Sikazex2Q7Qw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.12.1.tgz", + "integrity": "sha512-TJjUkzXR+wko4sSl6FVgsOSqBahYSToIqgoKsg8oFU11d5F/MiylJ1aBg0IXR8IY0pZWjXvWDUWrSmbsmeHtlg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-card": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-card": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1" } }, "node_modules/@umbraco-ui/uui-card-media": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.12.0.tgz", - "integrity": "sha512-ila8l7jS2HsVJwN/m/H2xFnU7qParpf2RaJ5N3FMBRT9fOYWjUPDWoQRUGVTx9UCYza+pyADgFVimDKm8c61PQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.12.1.tgz", + "integrity": "sha512-Zi2H3mzOfjfczF97SPS3d2sp8YNNj7amq3F3tJZxT0UWN/RENzAoMfFniLnxxOja7wuIM2rxGLIkeDJB6U7/Iw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-card": "1.12.0", - "@umbraco-ui/uui-symbol-file": "1.12.0", - "@umbraco-ui/uui-symbol-folder": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-card": "1.12.1", + "@umbraco-ui/uui-symbol-file": "1.12.1", + "@umbraco-ui/uui-symbol-folder": "1.12.1" } }, "node_modules/@umbraco-ui/uui-card-user": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.12.0.tgz", - "integrity": "sha512-ZyYyGdXwt6Z/kWah5wntybiOTXCCZJsuqCmmS26sNr2F9Wi0GXGobEkAR5+deUKBYuGWVMkjqy1nSN2vIEg8bQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.12.1.tgz", + "integrity": "sha512-24r/t5y0nZwcMb6zJWKBXQ+PTtnoinyPTmbOAo+CBuR+E4K0fjO7VwGsKW2VndB0wzhEgLeEfN3X7MsQdAtkHg==", "dependencies": { - "@umbraco-ui/uui-avatar": "1.12.0", - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-card": "1.12.0" + "@umbraco-ui/uui-avatar": "1.12.1", + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-card": "1.12.1" } }, "node_modules/@umbraco-ui/uui-caret": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.12.0.tgz", - "integrity": "sha512-XfBjS4bgr+sduFkvbiTwfTuzpkF0Lh6hfhArvZztT3P8/6+seM1as6fvB1uLUZif8BjA0Iys+1oGaClgnnFvDw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.12.1.tgz", + "integrity": "sha512-arVHbjy549nnTNA85rOoDYsPo8cZH2vhW8i6cQo5wfYcYHJDIkSGP6/jEyMSGAXb8akCgN1CUdW1yg0T2K2bNg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-checkbox": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.12.0.tgz", - "integrity": "sha512-VTsz42tgp5DtvinEEZMmc7z8Lv3S4nQybW7Rdh/1VUnZoIIyUH0MgA84vPoJaorl6PZM1O62cMWQMXTlbxzSSA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.12.1.tgz", + "integrity": "sha512-qCQJwAYI8wd1o4HzPkdCrZbsg1HwCk2lpf0tJHovgLeZ7wdJhszRS0DPk/KXHmbQNpTqtmDvjZWoJrcnxY7V3w==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-boolean-input": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-boolean-input": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1" } }, "node_modules/@umbraco-ui/uui-color-area": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.12.0.tgz", - "integrity": "sha512-qP1EXx4JpZyi7T2n5JmSsd/4jXfk06Lr6jSLoFMOD8KdHW1KCLXzscmLTHCtG25KILTi9Mxr3NcuV2pvF5gWEg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.12.1.tgz", + "integrity": "sha512-PTY/qseL3QfSqx/5LQg+QqO0hEAy0loH+lYpsHQxoBSoE7tIZmo923WjJ0UJA6rzBtfc7WYe9JRPeI0iLtEOCA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", + "@umbraco-ui/uui-base": "1.12.1", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-picker": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.12.0.tgz", - "integrity": "sha512-B3Lt3xaY89bE1p8xH9dXUawamaE6bhELt9P2QdPDMj8wIMFzPOU8z3Lgv6BKLJH/TUR1QNRiRqlDSHdV1/dcHw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.12.1.tgz", + "integrity": "sha512-BCf+1t53RYRzfJ5SVBtaPJGT+3a+96IV1mXjpbnzG13SW2ecAXQUwnK7VeEFScrY1wy2f4QWDIsL/wVkiLxSMw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-popover-container": "1.12.0", + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-popover-container": "1.12.1", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-slider": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.12.0.tgz", - "integrity": "sha512-NNBPsDd4xpdg5UKFuD4LU165GueHeGb5d+07OAMArgYw1uKHo+G+yYRYj11tkT2nsnBvUurBVT6DT7J0ZMh6/Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.12.1.tgz", + "integrity": "sha512-cUY5lD3E+Jl41we0IlFIqpts65/BoXuVq03+o4cjr2Mn2VgOKekxMi2IpFYRnDhLDf0WHAv6yjfIO0S7dR8+sw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-color-swatch": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.12.0.tgz", - "integrity": "sha512-NCRncEYdDa/moUPUTRXEoBqwLxm7b5IFc14xjUKhGU0uNUDhBoh3RyjX5UQzdKXiuXwLAjFhB4ks7gXol0xfHw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.12.1.tgz", + "integrity": "sha512-Zs0JgyolV5Dyo19lMQJDGxebi5Mv2eD7Ei8TnUUhs339SB3omHELpy47DRB2uknQFdZGa79hy63qfpwSvUkpBA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0", + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-swatches": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.12.0.tgz", - "integrity": "sha512-7WtDkNvCW5j/RorTGdlbRjhPHq4SeFQh1JGDhT8xh1IKnPPWXzx5T3WZKV0UEXVfhoDW8GyJ5Q6iM5ejJkKmEQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.12.1.tgz", + "integrity": "sha512-PzPKTiUCx1ngL6i2NyAbZ5ze3fDOa+OY2XV7rGCuYPA91820CwWVHquD0fB2WHEjohL8F31zOo3aNohYDJxsdg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-color-swatch": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-color-swatch": "1.12.1" } }, "node_modules/@umbraco-ui/uui-combobox": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.12.0.tgz", - "integrity": "sha512-0JSp7YWYqfyhjkMggpLYVHPmliX9b5xR4vZDOEf8w71QrzrPwJ86ExnID5Yg/n9t/b1Trc7YgNI4W34lw9dqFQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.12.1.tgz", + "integrity": "sha512-3tb4SXEjWDu23ZGNtdDeoJVtDdaOJ/VPv8Vvh9u/6Qpdfw5k8W2Wbl98fYYsuh7AYmKOHSO4aIE3WQRmqWwvlA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-combobox-list": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0", - "@umbraco-ui/uui-popover-container": "1.12.0", - "@umbraco-ui/uui-scroll-container": "1.12.0", - "@umbraco-ui/uui-symbol-expand": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-combobox-list": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1", + "@umbraco-ui/uui-popover-container": "1.12.1", + "@umbraco-ui/uui-scroll-container": "1.12.1", + "@umbraco-ui/uui-symbol-expand": "1.12.1" } }, "node_modules/@umbraco-ui/uui-combobox-list": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.12.0.tgz", - "integrity": "sha512-PDk+6s7BTNo3rqWtmYV4whct0042xfQP/8ITzAkMHwkAdJEcBSDYsGRF5W4BKVRvs5g2x6sqqqLdZvUqykWoJw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.12.1.tgz", + "integrity": "sha512-WWVfmbT/ewlaO9qYePDiPWTtdEyd6gqMyEWEunu4WAEX2fLJ0496cMZtYVNrj7xqZUkpnDoP218fc4tdtMqKaA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-css": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.12.0.tgz", - "integrity": "sha512-n+rTyNZwhjxwAHShs5ZQGZ7k051Rr6UTawzVq1TCUQMDw1hDeXj8wGrKBjZJbM+DJrDsphgAnSL/TMgaLY03/A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.12.1.tgz", + "integrity": "sha512-cWdoJw3OjdZ5QUoXhUufp/8mdGkVJ4DiI7/NgPaU2GrMbo+c1Q2cx4ST2/K0Q7nY6qa4P4WCSLMoFGyFoOwLKQ==", "peerDependencies": { "lit": ">=2.8.0" } }, "node_modules/@umbraco-ui/uui-dialog": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.12.0.tgz", - "integrity": "sha512-0P56Xj+cpQJvWAmjdDhy+OekSOumYvHJmzJdjyupxWfDY15q6x1fTk4EISHdRCakBixMvgcvsu20DPTEg4RftA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.12.1.tgz", + "integrity": "sha512-ek16mmx4YSlsyTi+8VAmtsbY2Zg4503dAs1tIehtQhF8oqeKCB8iAILkvLghL94dhdcovRMXPU14PUR6Ex9Ugg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-css": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-css": "1.12.1" } }, "node_modules/@umbraco-ui/uui-dialog-layout": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.12.0.tgz", - "integrity": "sha512-ieLgK5lSCKVioQNccRtpBn3o/wXyuiaO5/Fga5gikZdKr+t87EmagNMuqBlglM3qdr8Kdz4yfH38xqFN0eLfYA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.12.1.tgz", + "integrity": "sha512-ZXI+TUbYxU9NDGwyxdLVaEzaYUyQV97UT3ZxRvrT5LT84ezdnmAy+C5gyvrcb4/tLTrINg/AnYR1GXq5b/FsRA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-file-dropzone": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.12.0.tgz", - "integrity": "sha512-Y8IQTisERSca+2lsi8TB5Wct43CvpWQF98LDQMtERIwIGs20IVyHfmCTuhBvR6XHzHgmL3BCkLSe8OxFcVoGwA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.12.1.tgz", + "integrity": "sha512-gDOhW9GESI/2r+q9RlY5/1NLcsFA7FD63DFqVhTW64uywkhQ+/XE0sGcwvO74j1rQ+OJr85Mh1WnZEUpySdHlQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-symbol-file-dropzone": "1.12.1" } }, "node_modules/@umbraco-ui/uui-file-preview": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.12.0.tgz", - "integrity": "sha512-M+Y9vaiya9P6RAPsgPRS55Yqyl0A/KCFHunQlquXu9Yk/clrYIF6q4susyphJc1wBGABtIaPQNBpartqr5Y9wQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.12.1.tgz", + "integrity": "sha512-6I1WhmdJ0Y1IlhaHkCEiTPQZ8CwaJQT3NxspNSXCCg/tkjgiFdwIwWXNDOeRz4sIMdINuT9N63+DwURqOeRpdQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-symbol-file": "1.12.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.12.0", - "@umbraco-ui/uui-symbol-folder": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-symbol-file": "1.12.1", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.12.1", + "@umbraco-ui/uui-symbol-folder": "1.12.1" } }, "node_modules/@umbraco-ui/uui-form": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.12.0.tgz", - "integrity": "sha512-tATof2Opbb1iZ7pXDylmIM5VVTWoyaFebAEWLVU2EWa4XeVQIQTlLv4TXuMmle65rkgxBfI32xEOAde8cuTnrQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.12.1.tgz", + "integrity": "sha512-m9pRXUUFF0VsEKpJrFIbpjDEWea91+LhWKwP6UoZf71Ae3EXVJdmm7KcaDSAKeFHyIe9/HfoGJ03A6iUQUBmKA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-form-layout-item": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.12.0.tgz", - "integrity": "sha512-NrnjP26Yyyrat+5lfaAGksN6YZlzAtbMNGhFhUVIBI7wgtPApF3qoOFfwlEM9Cf46JWfjP1Ib38vLeTPQG3CCg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.12.1.tgz", + "integrity": "sha512-JZYaX196VeC5nRad4xc0+IFTEp2+bAOT4NRp/J4NVqdeu6kxA6BHoxbkSX2umjGVGODceiIy6g2X6dZKircvMQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-form-validation-message": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-form-validation-message": "1.12.1" } }, "node_modules/@umbraco-ui/uui-form-validation-message": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.12.0.tgz", - "integrity": "sha512-bZghiBDkfOxXMOAElMqq3sL3a2JcBdzsTovQx7uXOgCW8QYNLFQKd/+q7R7wpsVZrf+OXzdVWZNJCV9pOcIv5Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.12.1.tgz", + "integrity": "sha512-iu8ZzQwqjTj6S4hKb/q8AkWz/GVOTpqFiYPZN/7SOa9Gc6eDfSCtHq/PgAIs+F/13b8iSthOsmcBucYwA6CMAA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-icon": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.12.0.tgz", - "integrity": "sha512-/wG5gMnV1BDDACPjaBvn3gIBXFhL32J1yHFj10h4Mk54vqHZq8H4CNtHLJ1UrHXACFOiljGWMjxE/1zYZms1FA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.12.1.tgz", + "integrity": "sha512-1leD+vxIh6/9LaU8ZXUKy2BUutGTWm8gBeGkDT2oGpinhKAx0KlHd0wgH0Rlrj/Mg3jv98sJpNCBlzsaphGP6w==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-icon-registry": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.12.0.tgz", - "integrity": "sha512-ycUPGL5G+xrpxElX0mhv4/T9xQvzXQfXVlQ81BKNKgTgOcEgYPIFKNMg7Vxhm/pVkMsCeMCG3QaZopNH/Sp81Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.12.1.tgz", + "integrity": "sha512-micVlV7Fq8Nu9c1oDQjZkBJUnCyqEYFHifLjTayZK9GTiVl6aC33nvAk4SdBaTaS8pz01Uk6Ip8Drp39KRLB/Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1" } }, "node_modules/@umbraco-ui/uui-icon-registry-essential": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.12.0.tgz", - "integrity": "sha512-WofNeW5ahIPrvXP0ZHpDgvmfiKNYo62pP+RUzHPZm85CCDJZfpMKXwUwsmaqN6Yf7aMad8piy5vk6BbDF6laLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.12.1.tgz", + "integrity": "sha512-GoSw6Hge+4E0vjQvdRAsUWjpylURYcmOQK6zBgKN/pEHeX1lhXJchi3ivGzD4cb+dVLlYDLztfcKRT2fSWn7pg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-icon-registry": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-icon-registry": "1.12.1" } }, "node_modules/@umbraco-ui/uui-input": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.12.0.tgz", - "integrity": "sha512-ZiGZPwf1QB+SIijeaOUNsIJxL4n7h6Q9wwYyAzB3jkWjcSqJ0l3sFGL7L4tQMkeTIjFb0AzhGLb4NYRdaQPPCA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.12.1.tgz", + "integrity": "sha512-joy0nUKui8LJzljDVeXb8LFLxGhpSAWvEg9EjsIin7I1bZemE3GtIt+q0+lN2Mqto6ixeCgOpqyEe4C+RnAGpQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-input-file": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.12.0.tgz", - "integrity": "sha512-i8u4sv46IB5/Pt2Yz0lSvxnaHJrkL4+cJFyTavIeVwzTinsPInzG6ublJzvRY+vmkB2Sim/uLvBnotwgEbYjrA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.12.1.tgz", + "integrity": "sha512-LgmPVzaRLFDati/Q9RgYA7c15B2DS8kIsdIbmJkxWbJk/Iaz8hgTQviB2QZ2SjP8g7K7ix0a/webS61J+wF4hw==", "dependencies": { - "@umbraco-ui/uui-action-bar": "1.12.0", - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-file-dropzone": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0" + "@umbraco-ui/uui-action-bar": "1.12.1", + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-file-dropzone": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1" } }, "node_modules/@umbraco-ui/uui-input-lock": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.12.0.tgz", - "integrity": "sha512-rqHMCpbIz+MOfNYYNzguA+ri3HNoDT3D4JNXVXV1wZ7X3nz824rkZDtsPQEwVF0L1jpWL6hPWy9lEoqq+30WLg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.12.1.tgz", + "integrity": "sha512-ZovdaOZWucorfXDAe+c4DAtFTTPl8UyagXkBnTVTIW86T0kJ4f7HRTnHbG+jymEspwLq78FIkkk6oJYVXov8IQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0", - "@umbraco-ui/uui-input": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1", + "@umbraco-ui/uui-input": "1.12.1" } }, "node_modules/@umbraco-ui/uui-input-password": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.12.0.tgz", - "integrity": "sha512-i+7tAnvQ19MP+mXoUldF1iiTwLzAWzGM1fojQyAVZA89jexdkzB9kL3CHZtFa9XCWRT3n/UUQhU+INX8mjOmlw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.12.1.tgz", + "integrity": "sha512-pZeXU1p8762x6nquBfUOF5fQNPk3U2FRxpfIsQvLA49x6TQ7L9y9mfrSzQ1mdwNoLyyNqaHKDr+VNqNwdCCEXg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0", - "@umbraco-ui/uui-input": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1", + "@umbraco-ui/uui-input": "1.12.1" } }, "node_modules/@umbraco-ui/uui-keyboard-shortcut": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.12.0.tgz", - "integrity": "sha512-LIjqf5UDfre8nz/FRMIRgnXGrrl9mc5MfBCNpegcWadSC1Yje/qclGJrEE6U4f26+6iz+vtX6NSUiky7M0tirA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.12.1.tgz", + "integrity": "sha512-AbhVL5+1kCckdxiCrd6ncX3pS9XjPJxntVRtBiD6BESKrxSpt6V5MDJ7P/lnhHgHscalfjiwVrWAnbiR3zBeng==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-label": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.12.0.tgz", - "integrity": "sha512-GZ+onC6vkhH62N9742Bbu7Dj6XSOQfoFrF+dV9S4ERUNd1PL8Pm+WouJ9pWDJeE01HfEaOFO9HuHXyC3qkuxsg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.12.1.tgz", + "integrity": "sha512-pQ8Z6oW6dBEG6xdKIGbGWXma16wmFDbOdmsL9L007Z2Bw4uJbW6yU4uXdi2YZC3AkIeb0AdIkLwYeKa/dwa69Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-loader": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.12.0.tgz", - "integrity": "sha512-bck6FW87yoSrWTSyt9ZD0GIhSb0Boio4aXhZFbc1PLNygWUpw0xOEwt5HMxVvf1Sy/7Scl2hri5aFtoAhbSMrA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.12.1.tgz", + "integrity": "sha512-FTonOLAqO95b8RDJDrdLcNsXS0pL+WKZYt8u6/DGV8YYg8fQymU5OA/YzNX4xi0OWOpVH7Ozto+F6j3/AzFOCA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-loader-bar": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.12.0.tgz", - "integrity": "sha512-K6qUp0sOM7xvFcRNkabwZqmp+5EfDp4N2l+8skNksB7b+XPhY5ILz9mrvFKAv8jPmGcfZLWcoVTx/e2EB/kpLQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.12.1.tgz", + "integrity": "sha512-wd63QeW9wXQeEjwOID93ki/fPSlA2AqzdaCq0CvcVTR60FxJ7BUTxe6pPtP3aFC7ylcEllOof5R8pHn6L3wx2Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-loader-circle": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.12.0.tgz", - "integrity": "sha512-lm9NxHyO+tyKowrgL5kCom+yJzbJWjBi0XCdJybfZ5GbR16s/+Q/4De/Gjx8itHnGp3HKUGXAZ5PqDcdp9YDWQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.12.1.tgz", + "integrity": "sha512-itjl1UAvoSNs1jWzRLtcQLh56OgeJKoly4CnOmwkc/ftlPOmMLqVaUJt21vRMBaPtl0UIljkCbWDDGkPtexy2Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-menu-item": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.12.0.tgz", - "integrity": "sha512-byUKYCse9DyALsOM4D7G45HgfOPx1NK/T5h1sdIK5NlOqgGtnKWeWbkHyJk6bgwnOqUtE5qUEznAiyD83xPe0Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.12.1.tgz", + "integrity": "sha512-w8kaWACizS0y1DP8xVQShcsZlZ+/OGoYQaFL7r6eN1YqSDDkEV+LkL8p/Wqrjxz1EmnTaYrdj8oqcqFDz2Gc/g==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-loader-bar": "1.12.0", - "@umbraco-ui/uui-symbol-expand": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-loader-bar": "1.12.1", + "@umbraco-ui/uui-symbol-expand": "1.12.1" } }, "node_modules/@umbraco-ui/uui-modal": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.12.0.tgz", - "integrity": "sha512-zUcdYXZHDYs5sYcD1fRj+nssA1sYXnUeL1H6ENd1oeDeSx0nFXyslxqT3hG0Yizp5oKJ9QRaUe/i0X3ZZ9mzCA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.12.1.tgz", + "integrity": "sha512-Yfcf/ybcYAlYOd7NwYzH44hX8wM0hE5L3cypmstT/wI0f0n3kGk7AP89dBROPcctBwap6mycSspVc9FfVJzhfg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-pagination": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.12.0.tgz", - "integrity": "sha512-wAgrLRLbT9YEOoLT3nN20tlrOwKB4Sk5krKHKy8HbFYcxE6pipg/6Pjzz31JjTEDR+nUMir9LR/YvKonTPtnpg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.12.1.tgz", + "integrity": "sha512-3GDh7WXkqcqgiwfDJiBUgm1btPmxOzEETeuzpTx8H9jaK8d5CHTQ8+uM8VIXxFCmKtUyA8JLuvS4w2GvpXGK4w==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-button-group": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-button-group": "1.12.1" } }, "node_modules/@umbraco-ui/uui-popover": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.12.0.tgz", - "integrity": "sha512-dzIVMcHlLRcrw0rTHdBmNAQrD+zP3TquY6RKWdHKwjRMFTVjX86YPFUgLTfwXBL0MsbV0H2BVp+4jSZJTc60XQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.12.1.tgz", + "integrity": "sha512-XwvT3zieIJtBjK5Y3ithWCYH7b1jYEhmXI4HhHsakoUvmptaWM37c9ju2MGwghlfkhJg4DjBDI6xHQPopXbGpQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-popover-container": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.12.0.tgz", - "integrity": "sha512-AdYWqnAu80gzR8h2mnYCb5WbptRBZXt19yyCv4VbLIWqvONka/pu6h3hkLs/fApIUxAcp1h2DOH3w0ZPENo1eA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.12.1.tgz", + "integrity": "sha512-coNy6smdCLzPMgOD1IGylkT7Dj7X9DhA0nA5R0uSLUOiYgFi3PE4ziaksxIRjr6iVl+MgvzAB3pqyHKB1srv6g==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-progress-bar": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.12.0.tgz", - "integrity": "sha512-A9d0U67ek0oONtenxOlledmDzzMr+jU8T/5YoSWgqLW7xJQK9PM6QjW0kp2Ea29FvKzeQBD4OUEx/xrAxbsYDg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.12.1.tgz", + "integrity": "sha512-6WQd75DV5btJjYlybzMUkCUrapD9S/wJAraKVS0c5UvmfUs+pmMZEVnx6TypO4dllk6rHCOQQ79SuyZRft6NCA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-radio": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.12.0.tgz", - "integrity": "sha512-XA9EEXHeIdvLelLaZsq2XMKXlxh2jGVtzYWU+13KTMHJf8mELGAz4/yxo57tDWdOzztVqnMIvPdtRrd5LsyYIA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.12.1.tgz", + "integrity": "sha512-H28rLbALI8zdDlW8l/8TUQm8E4kiHkNlKOuz98WSYW+J0jl6gyiTOUWN6N4p8RsE9rHTS7d//IisOioFTErphQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-range-slider": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.12.0.tgz", - "integrity": "sha512-i758eBVQ7b+MTJFNEJXT6lidIOAibSV0Bo1e7p/X8XsOGEdsqgy8PQBuSzSCSvQ3BRTc+s0O6H661lVie9/eew==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.12.1.tgz", + "integrity": "sha512-0D0vlz0chs4rvwdWCd45Y8PI7aDRCYZ6/3IN48oBhW4LQsU49aQi/bTyXurcTdaxKirf7DQmlNAtuyRRjw4WEg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.12.0.tgz", - "integrity": "sha512-Sla1vScklmqSX/JqB9149ypkAibxoN8LCsHHvM2Pk8TQkKBbaia51WtkpOsaHLPVL5ao9oMyvLlQGgroEIOU/Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.12.1.tgz", + "integrity": "sha512-IdaajH2ajYPxQCLYVV+XfzlrF6R+kz8DLDeiS5cI5vgsF+bs1GmVFw2WzF1m2DFSUeuGSTLQcLWQbQsjHgGGnQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-list": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.12.0.tgz", - "integrity": "sha512-b3dBTrl+zG2nps9/CwmQCtIvf4DjHwmQ7VT4PZukvFGORxdFFgwmYoEmpzHjSS01NC0uBORSaYXFb6CLnTMz3A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.12.1.tgz", + "integrity": "sha512-MQUSeGMvM4e1Pzka4CdJOBsA8AMIHGuXX2QGE1uJj3u3EEn1WPQToD2YTSNB0Cxikfi08BEZT5GsbJI/PzwFmw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.12.0.tgz", - "integrity": "sha512-1Y1kQslpMzby8FEx8TzrBKo1gZPyckPodlTQYFBDLStM5OUXvWwoll7AYmqBKAaqxZpQf1PILoXcxqZnsE8xGg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.12.1.tgz", + "integrity": "sha512-ZKkiAOT0oE8E1/BXp8FCavyAooJe5hYYmUSALV795SB4OHaVSIL8Kh6MUFNzmtUzs0qC5+cCVtef67KJe6kuEA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0", - "@umbraco-ui/uui-ref": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1", + "@umbraco-ui/uui-ref": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node-data-type": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.12.0.tgz", - "integrity": "sha512-QkXtmDabduVQwGXNEHbANLcbjdEkDvqSrgeIfMHAEa/nikEKwxENPR4NvUnnWiu0tdc4uR7ul5xtsGyD9Wpqmw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.12.1.tgz", + "integrity": "sha512-wY0OvqYSfVuuMYLVV1WKpITZ7SVZ+7RZ7DGOar3cJha6f3/e56J/ylunfTu1T+pxd/KIh8WNWZx3vVgWRFIm8Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node-document-type": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.12.0.tgz", - "integrity": "sha512-lv0HZ+LdcIej7UbJggpUnuorRGrr6UclXmP+VevmI2il6x9qM5tO7ms+apbbzRqgYQK07C9zAVX9/A7FL6SdtA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.12.1.tgz", + "integrity": "sha512-EmC7x7SO2Q1uYhIlESAX8QtxEbPIkBwDPcCr8l5bQ/Y/0uXvBOja8tceIt19xe954KjeqcRs6AGTWsetv4UoMA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node-form": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.12.0.tgz", - "integrity": "sha512-4vpsRY6LQ9tBunD80vCagCojZwmS4Wf9UFS9WXo9kyU4cxYJS4kn3k00o13wf1A4MN7A3M/AoSK+3MCRDaeEYw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.12.1.tgz", + "integrity": "sha512-ovxnbkmGPeCYMKb8aDhH3yafTtkYEwsz9eGxPvoDlioTw/coRVo4VF0dndKzxIqVBw/BnNotnFhGWt1l5k47zQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node-member": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.12.0.tgz", - "integrity": "sha512-rqsob7U5cVvluKiJJ6zA7IdDMl7Kz6EZNO5hgQdRzEi/sQdrt+ci3qzLKLijBcqOgrE8gYEORtYq4joGssGong==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.12.1.tgz", + "integrity": "sha512-iGO5qTr/8kAFcZItYAJGF7CES5SN7oBMw+MDVcZG/JgBmxogSW0wDlBM9u6FPMDnum+bDG+YpUbJpDN+VA0/pQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node-package": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.12.0.tgz", - "integrity": "sha512-IN2KFqtVy7VwUoftbxUP4+IKYgr6j8Ar0b1OkyAd58SZyouzEaR+oozB1Z+04WxSdxH/++MpVqCVBi3Cr/XLMg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.12.1.tgz", + "integrity": "sha512-KWI2nKHUOHFqQzjYc1qextxKrczHJrzKCxGOnHU4gmqnJxGwjnWmx6XDndlBE8bBeggmC+nUt+RAE8jSfo3xmQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1" } }, "node_modules/@umbraco-ui/uui-ref-node-user": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.12.0.tgz", - "integrity": "sha512-Gv7mFTInvpRcnS1TdsLnHV3DeBjEBjKP+GAJ+v1Pq0E/ws6sSgA70LATmVIXVDEzmh6aMlT5bemUUQcNrFF61g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.12.1.tgz", + "integrity": "sha512-eO8aegyXUmFlxyvJFacM5lYkmP8eyroXmvbChoX9pfgkyONGKYLIGvpAvPFrL8447xVQdsWXCPMu0aTpiMqdAw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-ref-node": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-ref-node": "1.12.1" } }, "node_modules/@umbraco-ui/uui-scroll-container": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.12.0.tgz", - "integrity": "sha512-yLeEDZd8r97jmRnC7fhaV68NrGercFMwMvs5oR2snUHMqGVZBahe7vsibdJAalmf9LpPwJM3MgAL0PNpHrmrTA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.12.1.tgz", + "integrity": "sha512-aeAvzUwjGtGIxNdixR3uTgIyzhattAnXqb7n/iB4N8f6NW2ZyLAoDM79RcTa6k7tDF0zEdQjlAZfjKlHAzCfpg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-select": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.12.0.tgz", - "integrity": "sha512-1PRIXwjdIF/jX8jAPJIIiHIZHKXWwLZgxukWih3VjDOkD/+JqNrwIZZlOlXzJQBEaswCKOGK36WB00/zq7gqpw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.12.1.tgz", + "integrity": "sha512-XvxMzKqwytjZr8wZ6PsT9fASMnXXC2GBS3Zlf/fbTzPoYFMxvprsVMe2MXeXoS8wXmQ/ojcsiWB3Gv0mgZvLUg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-slider": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.12.0.tgz", - "integrity": "sha512-sktzAJMBqu/gwHlNA7DqpaoSfL9/xKKB697PtJC4U+X6zU5E0uBXnNHXZEap4XEyjoruRsmBsdWC3KVrIbvCEw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.12.1.tgz", + "integrity": "sha512-LWMrH+3aX9cSNGLN/MhebrRCUdXxMkXUleXmg+M6LKvLfRiyN9PPJHBtRzrxS6DARj69BwnrViNVVu4toZXTYw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-expand": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.12.0.tgz", - "integrity": "sha512-3EjmTjXrxc3tJfaNH7t5okr4bJ4eREl8pztTToBt0DZnYRrnsf+XG8WClNjRPgt36DfbiEWr6ac7cTDqAmkrdg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.12.1.tgz", + "integrity": "sha512-NlT5PtYVx/GwiDRcUX519mC9DEkSPJNDCSU50RwcRaXI1XvvIUq0Ds7BO4lFUeArnRdb13Vp4jV+Lh1Pmohvwg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-file": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.12.0.tgz", - "integrity": "sha512-JUpETqj/wTu2nWth4Y0pdQXBN32kQn3Iu81Fc0tCeBljPjTL8Q5FbvQR+t+2JtY3lK3ecLQEWsSGnDVj37XnLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.12.1.tgz", + "integrity": "sha512-ST/wi+kwKftTLl9CEfYem3bAOFdaxiLN2soB4jWYUEkQL7uG1A+1oL0/6w8myq8PL210PO65khSuW0wCwVpolg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-file-dropzone": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.12.0.tgz", - "integrity": "sha512-8A4sP9uAf7MxkQmT1GpzdWXZjdVZtJch9uaBBhArtVd5NUR8iCDE1J10fSviwei1trW9fm1D80ob6citiImLZQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.12.1.tgz", + "integrity": "sha512-3XpIC2GPkkTKg6XzvlTV7XUahK3+DZ/F3PdUXk7LSpnxowxU/5hDDr8ESPj9jKaBe1OcDH/bc0fsRJKOtkmBNQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-file-thumbnail": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.12.0.tgz", - "integrity": "sha512-HCn+MFJIrL37dvW7c2wbmPJCw3e0mew5G3KVBrCdTs5yy8TjSmk+m4gZrT5By09AstFcy+irFO0VJeJluIOjUw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.12.1.tgz", + "integrity": "sha512-TXYGygPFzLT4f/8iH1X5fKn7GrpagLcYsPDIFkEH1dOAoQWR0gu+V2TVoKfXkzzdxZ68knB8lbPeuXi4StUXSA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-folder": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.12.0.tgz", - "integrity": "sha512-+t+2A/DvibviBAhFqdOI8eUiupezNfG2wC5dozhsqqEkUUeI019V04cd2UKFZ93A5zblWiokYaV/7/GX/sNePA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.12.1.tgz", + "integrity": "sha512-EUztWYMcWUiFTT3KRe7/qRLxOWu5sErNSVb+HRAYak3TOIXP/A0a7H09SRWTPAKqIjrmWo26es+lasCOC1rwEQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-lock": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.12.0.tgz", - "integrity": "sha512-GgwamuY1YpRc/LCiIE+QFvSvdV9M3CLERLLHjQ/FIEIdEK/pLtMQVfQ/j69VZWR3111bS9dos4JXVpY2AcqJ6w==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.12.1.tgz", + "integrity": "sha512-2tW8u20OM0wS3ZbPIlyVeHYR6mG1KAOC47CxSaCs59QIIw2PVBZgY7YVVP6bSUf4kttNkPt826gf7lW9ZEBrCg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-more": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.12.0.tgz", - "integrity": "sha512-H/B1X1lwmDp4lsgRJ2/r1SPeOWYjUnbFFi/Lo5GIO0RRGbdepF5LH6xVjCWz6ZtKzVXk0yjATZLRiFE2Niae7g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.12.1.tgz", + "integrity": "sha512-JrKpcSGizg20JUBKXEoMlDhfxpUFKp+JM9wldnm7JCyfee1JpMAQYDTF/Nw0Qsj5i60xqa7EAggZc38zQuDK6Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-symbol-sort": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.12.0.tgz", - "integrity": "sha512-5ZSucjxfP++T3CsVeRrsibY1KcobGtBF52xU0BkCV7qPj0KVlmbmITMegZm8nkESQtOBGVPn93U+wGKZ56/xKw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.12.1.tgz", + "integrity": "sha512-HXQa9X1GahHOtuHA2BPRFlqblS8PXuhkDJwFMsXTxShgMnv0Wq3pEp7gh791Kk/XAsOWXozZgRPxWeB9HfAaRg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-table": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.12.0.tgz", - "integrity": "sha512-bfdSQ1l054fJCA+ancrTutdcDJim4seY8auIsjYMhca6l3Cqyhin3vwYxRp24J4uP4j66Q2INsZJxV5Z8u+6HQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.12.1.tgz", + "integrity": "sha512-rTsJnhP1jgDku5R4gIQF0GcLXTqqYLHRRSIjP+m8WEK18EvQIIER4iRjt6SC1Iv/KVaWB6M4G3OXq3RfQqvknA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-tabs": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.12.0.tgz", - "integrity": "sha512-Q/LNYBrfhRBWZdm52siK+126yaFliDKWgFgJXKlJAyzrqvIC3QYBe/jtHflMeS1YJdg1QUy/qf3kKPVT6nbmGw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.12.1.tgz", + "integrity": "sha512-UIQjeCm2jWJJSbpDZ5BKEQT6vh9vEpio6HVupH9KsF5lNq5JwCFsK29g+xCbDPT/tzbLFrSZiVGebQaJ9OrPkA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-popover-container": "1.12.0", - "@umbraco-ui/uui-symbol-more": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-popover-container": "1.12.1", + "@umbraco-ui/uui-symbol-more": "1.12.1" } }, "node_modules/@umbraco-ui/uui-tag": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.12.0.tgz", - "integrity": "sha512-SnsWhy3d53hZ5SV5IkENhLXgK/Jpm0GZVI0SqWFGg4hb2a84eBw9UgYvNkJlFr0KHGtcGKLaOiM9jAy286dldA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.12.1.tgz", + "integrity": "sha512-YHhAgaQLCMI0NXmmXXtyTk+mRtHCQ/+RcLkncl92RaTL8jHqFmkFQ/mm2MTYKenzF1BjwtTDHop++KEoQ6aJgg==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-textarea": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.12.0.tgz", - "integrity": "sha512-p7zZzCn/yI2YEll5WhbHGfX9MFPJkEl39sjOSpFEKjdXS5G0e5y6Rty+OdH0pJ5q8qmeKIAiIJE22R0B1isgIw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.12.1.tgz", + "integrity": "sha512-1es3dbrcl8dcGyHNSUVDvOlLsZtPCKAQubMF5qXj5uzkeO1vnVC8L4TgDchkncCLhI1Zi+Ur1dsZ7ZOr4KdW4w==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@umbraco-ui/uui-toast-notification": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.12.0.tgz", - "integrity": "sha512-Dfinm7o99SgkbSRj56cSSC6deQYemaoWxzpo0qQRB5WHKSlYm2w7DA4Xg9GBWbjxU3tIztW2dVnzLFk5kfirEQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.12.1.tgz", + "integrity": "sha512-jNUMISZKlxWxUW57CnFSpk69B/m3Pq6Z+mr28YEAmk1kIfRur5DpqZOeO+jQacT0aZY1ua2ETJ9R5ZDi5XMuZA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-button": "1.12.0", - "@umbraco-ui/uui-css": "1.12.0", - "@umbraco-ui/uui-icon": "1.12.0", - "@umbraco-ui/uui-icon-registry-essential": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-button": "1.12.1", + "@umbraco-ui/uui-css": "1.12.1", + "@umbraco-ui/uui-icon": "1.12.1", + "@umbraco-ui/uui-icon-registry-essential": "1.12.1" } }, "node_modules/@umbraco-ui/uui-toast-notification-container": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.12.0.tgz", - "integrity": "sha512-l+jYWzc20R0z4zp30252KzwHUNSnR+WfC1YBS0fm3MSmmpOijXVgT+aPjIa1GQtv6DHmCVm3YkEniEsVt61+Gw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.12.1.tgz", + "integrity": "sha512-LrjIFADbfb3C1TbUieo0haP1BCArcGcraZ6XcGa9YVVfB/yNKQPOz2M6U0vv14WulOBPeInHExaCV2GNkItEUw==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-toast-notification": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-toast-notification": "1.12.1" } }, "node_modules/@umbraco-ui/uui-toast-notification-layout": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.12.0.tgz", - "integrity": "sha512-vfYNZEijUovn5spSN+CmVECJ0NTReirPb7ybavdy245Ra87IeQcXno0njflu2J8qjB9RGJB59u3R8W+g+LpIPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.12.1.tgz", + "integrity": "sha512-dhpCnbxdgKEO54yLDn6FJtupmRaSoZSRJeed9y6E344swEkDc8/frrt/nm0wwSjV022rnejH2SYjkRfYl2qazA==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-css": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-css": "1.12.1" } }, "node_modules/@umbraco-ui/uui-toggle": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.12.0.tgz", - "integrity": "sha512-OfJsoBhKqeSRuLdspXcSR3Prhi0QzZxD6ejMS+ozeMoGDErKHN4bnGddcbTaFfK6bvT3mA8WlxVU64m6N2+tEA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.12.1.tgz", + "integrity": "sha512-//gnh+j6SmFLJ5B/zFZEu8aUBnR5dflz/gvwK5SQclGsoG1fCCEltIof24E2nEIqb8/fRQaT5ZTla2TpMXWV3g==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0", - "@umbraco-ui/uui-boolean-input": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1", + "@umbraco-ui/uui-boolean-input": "1.12.1" } }, "node_modules/@umbraco-ui/uui-visually-hidden": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.12.0.tgz", - "integrity": "sha512-J01yrYAD5lYRUaWSqE3D0JcQIdRhsC0vu3hocxW6lAh9S6Y4bfJofl/Mgu118iLYvHAwopQWcGI7f1K5hlKE7g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.12.1.tgz", + "integrity": "sha512-wXbmn7hFy7U/WZSiZjcI+UdgvogLTN6+iDd8pioW2ehy0+2nSNVJIbkoKHS+h/TrpKiJADjT8205WFJBIriFcQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.12.0" + "@umbraco-ui/uui-base": "1.12.1" } }, "node_modules/@ungap/structured-clone": { diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 44b2766591e0..7ddbb37fd22b 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -215,8 +215,8 @@ "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", "@types/uuid": "^10.0.0", - "@umbraco-ui/uui": "^1.12.0", - "@umbraco-ui/uui-css": "^1.12.0", + "@umbraco-ui/uui": "^1.12.1", + "@umbraco-ui/uui-css": "^1.12.1", "base64-js": "^1.5.1", "diff": "^5.2.0", "dompurify": "^3.1.6", From c577d9aadbbd52a411731764f256849a6570f468 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 13:30:09 +0100 Subject: [PATCH 40/47] lint fix --- .../workspace/content-type-workspace-context-base.ts | 7 +++---- .../src/packages/core/sorter/sorter.controller.ts | 2 +- .../entity-detail-workspace-editor.element.ts | 2 +- .../document-type/document-type-workspace.context.ts | 5 +++-- .../packages/documents/documents/repository/item/types.ts | 2 +- .../documents/search/document-search.repository.ts | 2 +- .../documents/search/document-search.server.data-source.ts | 2 +- .../documents/documents/search/document.search-provider.ts | 2 +- .../src/packages/language/workspace/language-root/paths.ts | 2 +- .../language/language-workspace-editor.element.ts | 2 +- .../media-types/workspace/media-type-workspace.context.ts | 4 ++-- .../modals/media-picker/media-picker-modal.element.ts | 4 ++-- .../src/packages/media/media/repository/item/types.ts | 2 +- .../packages/media/media/search/media-search.repository.ts | 2 +- .../media/media/search/media-search.server.data-source.ts | 2 +- .../packages/media/media/search/media.search-provider.ts | 2 +- .../member-type/workspace/member-type-workspace.context.ts | 2 +- 17 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/content-type-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/content-type-workspace-context-base.ts index 88088bd72fde..93dee1c48c5b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/content-type-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/content-type-workspace-context-base.ts @@ -1,3 +1,6 @@ +import type { UmbContentTypeCompositionModel, UmbContentTypeDetailModel, UmbContentTypeSortModel } from '../types.js'; +import { UmbContentTypeStructureManager } from '../structure/index.js'; +import type { UmbContentTypeWorkspaceContext } from './content-type-workspace-context.interface.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; import { @@ -6,10 +9,7 @@ import { type UmbEntityDetailWorkspaceContextCreateArgs, type UmbRoutableWorkspaceContext, } from '@umbraco-cms/backoffice/workspace'; -import type { UmbContentTypeWorkspaceContext } from './content-type-workspace-context.interface.js'; -import type { UmbContentTypeCompositionModel, UmbContentTypeDetailModel, UmbContentTypeSortModel } from '../types.js'; import { UmbValidationContext } from '@umbraco-cms/backoffice/validation'; -import { UmbContentTypeStructureManager } from '../structure/index.js'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { jsonStringComparison, type Observable } from '@umbraco-cms/backoffice/observable-api'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; @@ -221,7 +221,6 @@ export abstract class UmbContentTypeWorkspaceContextBase< * Sets the compositions of the content type * @param { string } compositions The compositions of the content type * @returns { void } - * */ public setCompositions(compositions: Array) { this.structure.updateOwnerContentType({ compositions } as Partial); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts index c8e22a1f75a5..d8546c5e4ddc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts @@ -203,7 +203,7 @@ export type UmbSorterConfig = Partial, 'ignorerSelector' | 'containerSelector' | 'identifier'>>; /** - + * @class UmbSorterController * @implements {UmbControllerInterface} * @description This controller can make user able to sort items. diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/global-components/entity-detail-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/global-components/entity-detail-workspace-editor.element.ts index 8add4ff8b902..e57bc1d2c7d5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/global-components/entity-detail-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/global-components/entity-detail-workspace-editor.element.ts @@ -1,5 +1,5 @@ -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UMB_ENTITY_DETAIL_WORKSPACE_CONTEXT } from '../entity-detail-workspace.context-token.js'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { css, customElement, html, ifDefined, nothing, property, state } from '@umbraco-cms/backoffice/external/lit'; @customElement('umb-entity-detail-workspace-editor') diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts index 2c1c805d2a23..625c98657679 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts @@ -7,7 +7,9 @@ import { } from '../../paths.js'; import type { UmbDocumentTypeDetailModel } from '../../types.js'; import { UMB_DOCUMENT_TYPE_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UmbDocumentTypeWorkspaceEditorElement } from './document-type-workspace-editor.element.js'; +import { UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS } from './constants.js'; import { UmbContentTypeWorkspaceContextBase } from '@umbraco-cms/backoffice/content-type'; import { UmbWorkspaceIsNewRedirectController, @@ -18,8 +20,6 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import type { UmbRoutableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { UmbPathPatternTypeAsEncodedParamsType } from '@umbraco-cms/backoffice/router'; -import { UMB_DOCUMENT_TYPE_WORKSPACE_ALIAS } from './constants.js'; -import { UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import { UmbTemplateDetailRepository } from '@umbraco-cms/backoffice/template'; @@ -185,6 +185,7 @@ export class UmbDocumentTypeWorkspaceContext /** * @deprecated Use the createScaffold method instead. Will be removed in 17. + * @param presetAlias * @param {UmbEntityModel} parent * @memberof UmbMediaTypeWorkspaceContext */ diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts index 36d2ac8a9cfe..f1077ccaf85f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts @@ -1,5 +1,5 @@ -import type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity'; import type { UmbDocumentEntityType } from '../../entity.js'; +import type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity'; import type { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts index e021dd6be0cf..3e34af40ff38 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.repository.ts @@ -1,9 +1,9 @@ import { UmbDocumentSearchServerDataSource } from './document-search.server.data-source.js'; +import type { UmbDocumentSearchItemModel } from './types.js'; import type { UmbSearchRepository, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -import type { UmbDocumentSearchItemModel } from './types.js'; export class UmbDocumentSearchRepository extends UmbControllerBase diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts index 23c200c03c84..961fdfd54da8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search.server.data-source.ts @@ -1,9 +1,9 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; +import type { UmbDocumentSearchItemModel } from './types.js'; import type { UmbSearchDataSource, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { DocumentService } from '@umbraco-cms/backoffice/external/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { UmbDocumentSearchItemModel } from './types.js'; /** * A data source for the Rollback that fetches data from the server diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document.search-provider.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document.search-provider.ts index 31d41bcb18b6..6e9a94559fc0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document.search-provider.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document.search-provider.ts @@ -1,7 +1,7 @@ import { UmbDocumentSearchRepository } from './document-search.repository.js'; +import type { UmbDocumentSearchItemModel } from './types.js'; import type { UmbSearchProvider, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import type { UmbDocumentSearchItemModel } from './types.js'; export class UmbDocumentSearchProvider extends UmbControllerBase diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/paths.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/paths.ts index 67151808ab5c..25b0f459e0a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/paths.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/paths.ts @@ -1,6 +1,6 @@ +import { UMB_LANGUAGE_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UMB_SETTINGS_SECTION_PATHNAME } from '@umbraco-cms/backoffice/settings'; import { UMB_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/workspace'; -import { UMB_LANGUAGE_ROOT_ENTITY_TYPE } from '../../entity.js'; export const UMB_LANGUAGE_ROOT_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ sectionName: UMB_SETTINGS_SECTION_PATHNAME, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts index c7fa01b792b9..2dedb9087e09 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/language-workspace-editor.element.ts @@ -1,8 +1,8 @@ +import { UMB_LANGUAGE_ROOT_WORKSPACE_PATH } from '../language-root/paths.js'; import { UMB_LANGUAGE_WORKSPACE_CONTEXT } from './language-workspace.context-token.js'; import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UMB_LANGUAGE_ROOT_WORKSPACE_PATH } from '../language-root/paths.js'; @customElement('umb-language-workspace-editor') export class UmbLanguageWorkspaceEditorElement extends UmbLitElement { #workspaceContext?: typeof UMB_LANGUAGE_WORKSPACE_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts index b0b50cd9bb27..65b2850b35bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/media-type-workspace.context.ts @@ -1,6 +1,8 @@ import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../entity.js'; import type { UmbMediaTypeDetailModel } from '../types.js'; +import { UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbMediaTypeWorkspaceEditorElement } from './media-type-workspace-editor.element.js'; +import { UMB_MEDIA_TYPE_WORKSPACE_ALIAS } from './constants.js'; import { type UmbRoutableWorkspaceContext, UmbWorkspaceIsNewRedirectController, @@ -9,8 +11,6 @@ import { UmbContentTypeWorkspaceContextBase } from '@umbraco-cms/backoffice/cont import type { UmbContentTypeSortModel, UmbContentTypeWorkspaceContext } from '@umbraco-cms/backoffice/content-type'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; -import { UMB_MEDIA_TYPE_WORKSPACE_ALIAS } from './constants.js'; -import { UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; type DetailModelType = UmbMediaTypeDetailModel; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 709a6ad6f372..019389685fef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -2,6 +2,8 @@ import { UmbMediaItemRepository, type UmbMediaItemModel } from '../../repository import { UmbMediaTreeRepository } from '../../tree/media-tree.repository.js'; import { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js'; import type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js'; +import type { UmbMediaTreeItemModel } from '../../tree/index.js'; +import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../search/index.js'; import type { UmbMediaPathModel } from './types.js'; import type { UmbMediaPickerFolderPathElement } from './components/media-picker-folder-path.element.js'; import type { UmbMediaPickerModalData, UmbMediaPickerModalValue } from './media-picker-modal.token.js'; @@ -21,8 +23,6 @@ import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content'; import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type'; -import type { UmbMediaTreeItemModel } from '../../tree/index.js'; -import { UmbMediaSearchProvider, type UmbMediaSearchItemModel } from '../../search/index.js'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; import '@umbraco-cms/backoffice/imaging'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts index abc85030eedd..8aa5ce0232ca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts @@ -1,5 +1,5 @@ -import type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity'; import type { UmbMediaEntityType } from '../../entity.js'; +import type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbMediaItemModel { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts index c2feafd3e7a3..d47162bcbe7b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.repository.ts @@ -1,9 +1,9 @@ import { UmbMediaSearchServerDataSource } from './media-search.server.data-source.js'; +import type { UmbMediaSearchItemModel } from './types.js'; import type { UmbSearchRepository, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -import type { UmbMediaSearchItemModel } from './types.js'; export class UmbMediaSearchRepository extends UmbControllerBase diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts index 85cd7d344f0e..5edc2a27373d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media-search.server.data-source.ts @@ -1,9 +1,9 @@ import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; +import type { UmbMediaSearchItemModel } from './types.js'; import type { UmbSearchDataSource, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { MediaService } from '@umbraco-cms/backoffice/external/backend-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { UmbMediaSearchItemModel } from './types.js'; /** * A data source for the Rollback that fetches data from the server diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts index b94f245e5070..fa9439674e67 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/search/media.search-provider.ts @@ -1,7 +1,7 @@ import { UmbMediaSearchRepository } from './media-search.repository.js'; +import type { UmbMediaSearchItemModel } from './types.js'; import type { UmbSearchProvider, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import type { UmbMediaSearchItemModel } from './types.js'; export class UmbMediaSearchProvider extends UmbControllerBase implements UmbSearchProvider { #repository = new UmbMediaSearchRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts index a32e6ff96dd9..c96f5a1c212b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/member-type-workspace.context.ts @@ -2,6 +2,7 @@ import { UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS } from '../repository/detail/in import type { UmbMemberTypeDetailModel } from '../types.js'; import { UMB_MEMBER_TYPE_ENTITY_TYPE } from '../index.js'; import { UmbMemberTypeWorkspaceEditorElement } from './member-type-workspace-editor.element.js'; +import { UMB_MEMBER_TYPE_WORKSPACE_ALIAS } from './manifests.js'; import { type UmbRoutableWorkspaceContext, UmbWorkspaceIsNewRedirectController, @@ -11,7 +12,6 @@ import { type UmbContentTypeWorkspaceContext, UmbContentTypeWorkspaceContextBase, } from '@umbraco-cms/backoffice/content-type'; -import { UMB_MEMBER_TYPE_WORKSPACE_ALIAS } from './manifests.js'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; type EntityDetailModel = UmbMemberTypeDetailModel; From 69782ed433b0209e96ad68672b200a77d924c861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 25 Nov 2024 13:36:06 +0100 Subject: [PATCH 41/47] temp fix for media selection --- .../views/grid/media-grid-collection-view.element.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts index c4a1b63f5693..bcb04290baa9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts @@ -136,6 +136,11 @@ export class UmbMediaGridCollectionViewElement extends UmbLitElement { font-style: italic; } + /** TODO: Remove this fix when UUI gets upgrade to 1.3 */ + umb-imaging-thumbnail { + pointer-events: none; + } + #media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); From 8259741ac12e8653ad97c3b72a30a0dcab133d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 25 Nov 2024 13:51:19 +0100 Subject: [PATCH 42/47] UX corrections for media selection --- .../views/grid/media-grid-collection-view.element.ts | 2 +- .../modals/media-picker/media-picker-modal.element.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts index bcb04290baa9..bcec879c3039 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/grid/media-grid-collection-view.element.ts @@ -97,7 +97,7 @@ export class UmbMediaGridCollectionViewElement extends UmbLitElement { 0} + ?select-only=${this._selection.length > 0} ?selected=${this.#isSelected(item)} href=${this.#getEditUrl(item)} @selected=${() => this.#onSelect(item)} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 019389685fef..79143229e54c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -301,7 +301,9 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< } #renderCard(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) { - const disabled = !this._selectableFilter(item); + const canNavigate = this.#allowNavigateToMedia(item); + const selectable = this._selectableFilter(item); + const disabled = !(selectable || canNavigate); return html` this.#onSelected(item)} @deselected=${() => this.#onDeselected(item)} ?selected=${this.value?.selection?.find((value) => value === item.unique)} - ?selectable=${!disabled} - ?select-only=${this._isSelectionMode || this.#allowNavigateToMedia(item) === false}> + ?selectable=${selectable} + ?select-only=${this._isSelectionMode || canNavigate === false}> Date: Mon, 25 Nov 2024 13:54:42 +0100 Subject: [PATCH 43/47] temp uui fix for media picker modal --- .../media/modals/media-picker/media-picker-modal.element.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index 79143229e54c..e4e2470b3e77 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -373,6 +373,12 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< gap: var(--uui-size-space-5); padding-bottom: 5px; /** The modal is a bit jumpy due to the img card focus/hover border. This fixes the issue. */ } + + /** TODO: Remove this fix when UUI gets upgrade to 1.3 */ + umb-imaging-thumbnail { + pointer-events: none; + } + umb-icon { font-size: var(--uui-size-8); } From e1a2062907b4de2844d9bda3f90307cbc1ebd226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 25 Nov 2024 14:50:16 +0100 Subject: [PATCH 44/47] fix table selection mode --- .../core/components/table/table.element.ts | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts index aab20a4fe606..a55355a0e865 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts @@ -146,6 +146,18 @@ export class UmbTableElement extends LitElement { this.dispatchEvent(new UmbTableOrderedEvent()); } + private _selectAllRows() { + this.selection = this.items.map((item: UmbTableItem) => item.id); + this._selectionMode = true; + this.dispatchEvent(new UmbTableSelectedEvent()); + } + + private _deselectAllRows() { + this.selection = []; + this._selectionMode = false; + this.dispatchEvent(new UmbTableDeselectedEvent()); + } + private _selectRow(key: string) { this.selection = [...this.selection, key]; this._selectionMode = this.selection.length > 0; @@ -158,16 +170,14 @@ export class UmbTableElement extends LitElement { this.dispatchEvent(new UmbTableDeselectedEvent()); } - private _selectAllRows() { - this.selection = this.items.map((item: UmbTableItem) => item.id); - this._selectionMode = true; - this.dispatchEvent(new UmbTableSelectedEvent()); - } - - private _deselectAllRows() { - this.selection = []; - this._selectionMode = false; - this.dispatchEvent(new UmbTableDeselectedEvent()); + private #onClickRow(key: string) { + if (this._selectionMode) { + if (this._isSelected(key)) { + this._deselectRow(key); + } else { + this._selectRow(key); + } + } } override render() { @@ -234,7 +244,8 @@ export class UmbTableElement extends LitElement { ?select-only=${this._selectionMode} ?selected=${this._isSelected(item.id)} @selected=${() => this._selectRow(item.id)} - @deselected=${() => this._deselectRow(item.id)}> + @deselected=${() => this._deselectRow(item.id)} + @click=${() => this.#onClickRow(item.id)}> ${this._renderRowCheckboxCell(item)} ${this.columns.map((column) => this._renderRowCell(column, item))} `; From e47e6bff402eebd88bb8cfbe67f0193f5b73eecb Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 14:51:42 +0100 Subject: [PATCH 45/47] fix search from when having a start node --- .../media-picker-modal.element.ts | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts index e4e2470b3e77..4336c76a65ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/modals/media-picker/media-picker-modal.element.ts @@ -101,6 +101,8 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< unique: this._startNode.unique, entityType: this._startNode.entityType, }; + + this._searchFrom = { unique: this._startNode.unique, entityType: this._startNode.entityType }; } } @@ -188,10 +190,25 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< } #onPathChange(e: CustomEvent) { - this._currentMediaEntity = (e.target as UmbMediaPickerFolderPathElement).currentMedia || { - unique: null, - entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, - }; + const newPath = e.target as UmbMediaPickerFolderPathElement; + + if (newPath.currentMedia) { + this._currentMediaEntity = newPath.currentMedia; + } else if (this._startNode) { + this._currentMediaEntity = { + name: this._startNode.name, + unique: this._startNode.unique, + entityType: this._startNode.entityType, + }; + } else { + this._currentMediaEntity = root; + } + + if (this._currentMediaEntity.unique) { + this._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType }; + } else { + this._searchFrom = undefined; + } this.#loadChildrenOfCurrentMediaItem(); } @@ -203,9 +220,7 @@ export class UmbMediaPickerModalElement extends UmbModalBaseElement< #onSearchFromChange(e: CustomEvent) { const checked = (e.target as HTMLInputElement).checked; - if (checked && this._startNode) { - this._searchFrom = { unique: this._startNode.unique, entityType: this._startNode.entityType }; - } else if (checked) { + if (checked) { this._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType }; } else { this._searchFrom = undefined; From 025ea8a095888276a076bcc91b79e2efecf5a82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Mon, 25 Nov 2024 15:10:41 +0100 Subject: [PATCH 46/47] remove private --- .../src/packages/core/components/table/table.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts index a55355a0e865..468d7782f3ff 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts @@ -170,7 +170,7 @@ export class UmbTableElement extends LitElement { this.dispatchEvent(new UmbTableDeselectedEvent()); } - private #onClickRow(key: string) { + #onClickRow(key: string) { if (this._selectionMode) { if (this._isSelected(key)) { this._deselectRow(key); From 2a2d8f5e5b9f050431fa7eb003cc868bf4e6c90e Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 25 Nov 2024 15:29:39 +0100 Subject: [PATCH 47/47] wait for all missing parts before create table items --- .../table/media-table-collection-view.element.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts index 7e1206cb2e05..24f349cec207 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/table/media-table-collection-view.element.ts @@ -64,6 +64,7 @@ export class UmbMediaTableCollectionViewElement extends UmbLitElement { collectionContext.workspacePathBuilder, (builder) => { this._workspacePathBuilder = builder; + this.#createTableItems(); }, 'observePath', ); @@ -86,7 +87,7 @@ export class UmbMediaTableCollectionViewElement extends UmbLitElement { this.#collectionContext.items, (items) => { this._items = items; - this.#createTableItems(this._items); + this.#createTableItems(); }, '_observeItems', ); @@ -117,12 +118,17 @@ export class UmbMediaTableCollectionViewElement extends UmbLitElement { } } - #createTableItems(items: Array) { + #createTableItems() { + this._tableItems = []; + + if (this._items === undefined) return; + if (this._workspacePathBuilder === undefined) return; + if (this._tableColumns.length === 0) { this.#createTableHeadings(); } - this._tableItems = items.map((item) => { + this._tableItems = this._items.map((item) => { if (!item.unique) throw new Error('Item id is missing.'); const data =