{"version":3,"file":"dropzone.element-DWMPhCqy.js","sources":["../../../src/packages/media/media/collection/repository/constants.ts","../../../src/packages/media/media/collection/views/constants.ts","../../../src/packages/media/media/collection/constants.ts","../../../src/packages/media/media/entity-actions/move-to/repository/constants.ts","../../../src/packages/media/media/entity-actions/sort-children-of/repository/constants.ts","../../../src/packages/media/media/entity-bulk-actions/move-to/repository/constants.ts","../../../src/packages/media/media/entity-bulk-actions/trash/repository/constants.ts","../../../src/packages/media/media/menu/constants.ts","../../../src/packages/media/media/repository/url/constants.ts","../../../src/packages/media/media/recycle-bin/tree/constants.ts","../../../src/packages/media/media/recycle-bin/repository/constants.ts","../../../src/packages/media/media/recycle-bin/constants.ts","../../../src/packages/media/media/repository/detail/constants.ts","../../../src/packages/media/media/repository/validation/constants.ts","../../../src/packages/media/media/tree/constants.ts","../../../src/packages/media/media/workspace/constants.ts","../../../src/packages/media/media/dropzone/types.ts","../../../src/packages/media/media/dropzone/modals/dropzone-media-type-picker/dropzone-media-type-picker-modal.element.ts","../../../src/packages/media/media/dropzone/dropzone-manager.class.ts","../../../src/packages/media/media/dropzone/dropzone.element.ts"],"sourcesContent":["export const UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.MediaCollection';\r\n","export const UMB_MEDIA_GRID_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Media.Grid';\r\nexport const UMB_MEDIA_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Media.Table';\r\n","export const UMB_MEDIA_COLLECTION_ALIAS = 'Umb.Collection.Media';\r\nexport * from './repository/constants.js';\r\nexport * from './views/constants.js';\r\nexport { UMB_MEDIA_COLLECTION_CONTEXT } from './media-collection.context-token.js';\r\n","export const UMB_MOVE_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.Move';\r\n","export const UMB_SORT_CHILDREN_OF_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.SortChildrenOf';\r\n","export const UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.BulkMove';\r\n","export const UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media.BulkTrash';\r\n","export const UMB_MEDIA_MENU_ALIAS = 'Umb.Menu.Media';\r\n","export const UMB_MEDIA_URL_REPOSITORY_ALIAS = 'Umb.Repository.Media.Url';\r\nexport const UMB_MEDIA_URL_STORE_ALIAS = 'Umb.Store.MediaUrl';\r\nexport { UMB_MEDIA_URL_STORE_CONTEXT } from './media-url.store.context-token.js';\r\n","export const UMB_MEDIA_RECYCLE_BIN_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Media.RecycleBin.Tree';\r\nexport const UMB_MEDIA_RECYCLE_BIN_TREE_STORE_ALIAS = 'Umb.Store.Media.RecycleBin.Tree';\r\nexport const UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS = 'Umb.Tree.Media.RecycleBin';\r\n\r\nexport { UMB_MEDIA_RECYCLE_BIN_TREE_STORE_CONTEXT } from './media-recycle-bin-tree.store.context-token.js';\r\n","export const UMB_MEDIA_RECYCLE_BIN_REPOSITORY_ALIAS = 'Umb.Repository.Media.RecycleBin';\r\n","export * from './tree/constants.js';\r\nexport * from './repository/constants.js';\r\nexport const UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE = 'media-recycle-bin-root';\r\n","export const UMB_MEDIA_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Media.Detail';\r\nexport const UMB_MEDIA_DETAIL_STORE_ALIAS = 'Umb.Store.Media.Detail';\r\nexport { UMB_MEDIA_DETAIL_STORE_CONTEXT } from './media-detail.store.context-token.js';\r\n","export const UMB_MEDIA_VALIDATION_REPOSITORY_ALIAS = 'Umb.Repository.Document.Validation';\r\n","export const UMB_MEDIA_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Media.Tree';\r\nexport const UMB_MEDIA_TREE_STORE_ALIAS = 'Umb.Store.Media.Tree';\r\nexport const UMB_MEDIA_TREE_ALIAS = 'Umb.Tree.Media';\r\nexport { UMB_MEDIA_TREE_STORE_CONTEXT } from './media-tree.store.context-token.js';\r\nexport { UMB_MEDIA_TREE_PICKER_MODAL } from './media-tree-picker-modal.token.js';\r\n","import type { UmbMediaVariantModel } from '../types.js';\r\n\r\nexport * from './media-workspace.context-token.js';\r\n\r\nexport const UMB_MEDIA_WORKSPACE_ALIAS = 'Umb.Workspace.Media';\r\n\r\nexport const UMB_MEMBER_DETAIL_MODEL_VARIANT_SCAFFOLD: UmbMediaVariantModel = {\r\n\tculture: null,\r\n\tsegment: null,\r\n\tname: '',\r\n\tcreateDate: null,\r\n\tupdateDate: null,\r\n} as const;\r\n","import type { UUIFileFolder } from '@umbraco-cms/backoffice/external/uui';\r\nimport type { UmbAllowedMediaTypeModel } from '@umbraco-cms/backoffice/media-type';\r\nimport type { UmbTemporaryFileModel } from '@umbraco-cms/backoffice/temporary-file';\r\n\r\nexport interface UmbFileDropzoneDroppedItems {\r\n\tfiles: Array;\r\n\tfolders: Array;\r\n}\r\n\r\nexport interface UmbUploadableItem {\r\n\tunique: string;\r\n\tparentUnique: string | null;\r\n\tstatus: UmbFileDropzoneItemStatus;\r\n\tfolder?: { name: string };\r\n\ttemporaryFile?: UmbTemporaryFileModel;\r\n}\r\n\r\nexport interface UmbUploadableFile extends UmbUploadableItem {\r\n\ttemporaryFile: UmbTemporaryFileModel;\r\n}\r\n\r\nexport interface UmbUploadableFolder extends UmbUploadableItem {\r\n\tfolder: { name: string };\r\n}\r\n\r\nexport interface UmbAllowedMediaTypesOfExtension {\r\n\textension: string | null; // Null is considered a folder.\r\n\tavailableMediaTypes: Array;\r\n}\r\n\r\nexport interface UmbAllowedChildrenOfMediaType {\r\n\tmediaTypeUnique: string | null;\r\n\tallowedChildren: Array;\r\n}\r\n\r\nexport interface UmbFileDropzoneProgress {\r\n\ttotal: number;\r\n\tcompleted: number;\r\n}\r\n\r\nexport enum UmbFileDropzoneItemStatus {\r\n\tWAITING = 'waiting',\r\n\tCOMPLETE = 'complete',\r\n\tNOT_ALLOWED = 'not allowed',\r\n\tCANCELLED = 'cancelled',\r\n\tERROR = 'error',\r\n}\r\n","import type {\r\n\tUmbDropzoneMediaTypePickerModalData,\r\n\tUmbDropzoneMediaTypePickerModalValue,\r\n} from './dropzone-media-type-picker-modal.token.js';\r\nimport { css, customElement, html, query, repeat, state } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';\r\nimport { UmbTextStyles } from '@umbraco-cms/backoffice/style';\r\nimport type { UmbAllowedMediaTypeModel } from '@umbraco-cms/backoffice/media-type';\r\nimport type { UUIButtonElement } from '@umbraco-cms/backoffice/external/uui';\r\nimport type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity';\r\n\r\n@customElement('umb-dropzone-media-type-picker-modal')\r\nexport class UmbDropzoneMediaTypePickerModalElement extends UmbModalBaseElement<\r\n\tUmbDropzoneMediaTypePickerModalData,\r\n\tUmbDropzoneMediaTypePickerModalValue\r\n> {\r\n\t@state()\r\n\tprivate _options: Array = [];\r\n\r\n\t@query('#auto')\r\n\tprivate _buttonAuto!: UUIButtonElement;\r\n\r\n\toverride connectedCallback() {\r\n\t\tsuper.connectedCallback();\r\n\t\tthis._options = this.data?.options ?? [];\r\n\t\trequestAnimationFrame(() => this._buttonAuto.focus());\r\n\t}\r\n\r\n\t#onAutoPick() {\r\n\t\tthis.value = { mediaTypeUnique: undefined };\r\n\t\tthis._submitModal();\r\n\t}\r\n\r\n\t#onMediaTypePick(unique: UmbEntityUnique) {\r\n\t\tif (!unique) {\r\n\t\t\tthrow new Error('Invalid media type unique');\r\n\t\t}\r\n\t\tthis.value = { mediaTypeUnique: unique };\r\n\t\tthis._submitModal();\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`
\r\n\t\t\t this.#onAutoPick()} label=\"Automatically\" compact>\r\n\t\t\t\t Auto pick\r\n\t\t\t\r\n\t\t\t${repeat(\r\n\t\t\t\tthis._options,\r\n\t\t\t\t(option) => option.unique,\r\n\t\t\t\t(option) =>\r\n\t\t\t\t\thtml` this.#onMediaTypePick(option.unique)}\r\n\t\t\t\t\t\tlabel=${option.name}\r\n\t\t\t\t\t\tcompact>\r\n\t\t\t\t\t\t${option.name}\r\n\t\t\t\t\t`,\r\n\t\t\t)}\r\n\t\t
`;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tUmbTextStyles,\r\n\t\tcss`\r\n\t\t\t#options {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tmargin: var(--uui-size-layout-1);\r\n\t\t\t\tgap: var(--uui-size-3);\r\n\t\t\t}\r\n\t\t\tuui-button {\r\n\t\t\t\twidth: 150px;\r\n\t\t\t\theight: 150px;\r\n\t\t\t}\r\n\t\t\tumb-icon {\r\n\t\t\t\tfont-size: var(--uui-size-10);\r\n\t\t\t\tmargin-bottom: var(--uui-size-2);\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbDropzoneMediaTypePickerModalElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-dropzone-media-type-picker-modal': UmbDropzoneMediaTypePickerModalElement;\r\n\t}\r\n}\r\n","import { UmbMediaDetailRepository } from '../repository/index.js';\r\nimport type { UmbMediaDetailModel, UmbMediaValueModel } from '../types.js';\r\nimport { UmbFileDropzoneItemStatus } from './types.js';\r\nimport { UMB_DROPZONE_MEDIA_TYPE_PICKER_MODAL } from './modals/index.js';\r\nimport type {\r\n\tUmbUploadableFile,\r\n\tUmbUploadableFolder,\r\n\tUmbFileDropzoneDroppedItems,\r\n\tUmbFileDropzoneProgress,\r\n\tUmbUploadableItem,\r\n\tUmbAllowedMediaTypesOfExtension,\r\n\tUmbAllowedChildrenOfMediaType,\r\n} from './types.js';\r\nimport { TemporaryFileStatus, UmbTemporaryFileManager } from '@umbraco-cms/backoffice/temporary-file';\r\nimport { UmbArrayState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport { UmbMediaTypeStructureRepository } from '@umbraco-cms/backoffice/media-type';\r\nimport { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';\r\nimport type { UmbAllowedMediaTypeModel } from '@umbraco-cms/backoffice/media-type';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbTemporaryFileModel } from '@umbraco-cms/backoffice/temporary-file';\r\n\r\n/**\r\n * Manages the dropzone and uploads folders and files to the server.\r\n * @function createMediaItems - Upload files and folders to the server and creates the items using corresponding media type.\r\n * @function createTemporaryFiles - Upload the files as temporary files and returns the data.\r\n * @observable progress - Emits the number of completed items and total items.\r\n * @observable progressItems - Emits the items with their current status.\r\n */\r\nexport class UmbDropzoneManager extends UmbControllerBase {\r\n\treadonly #host: UmbControllerHost;\r\n\t#isFoldersAllowed = true;\r\n\r\n\t#mediaTypeStructure = new UmbMediaTypeStructureRepository(this);\r\n\t#mediaDetailRepository = new UmbMediaDetailRepository(this);\r\n\r\n\t#tempFileManager = new UmbTemporaryFileManager(this);\r\n\r\n\t// The available media types for a file extension.\r\n\treadonly #availableMediaTypesOf = new UmbArrayState([], (x) => x.extension);\r\n\r\n\t// The media types that the parent will allow to be created under it.\r\n\treadonly #allowedChildrenOf = new UmbArrayState([], (x) => x.mediaTypeUnique);\r\n\r\n\treadonly #progress = new UmbObjectState({ total: 0, completed: 0 });\r\n\tpublic readonly progress = this.#progress.asObservable();\r\n\r\n\treadonly #progressItems = new UmbArrayState([], (x) => x.unique);\r\n\tpublic readonly progressItems = this.#progressItems.asObservable();\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host);\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\tpublic setIsFoldersAllowed(isAllowed: boolean) {\r\n\t\tthis.#isFoldersAllowed = isAllowed;\r\n\t}\r\n\r\n\tpublic getIsFoldersAllowed(): boolean {\r\n\t\treturn this.#isFoldersAllowed;\r\n\t}\r\n\r\n\t/** @deprecated Please use `createMediaItems()` instead; this method will be removed in Umbraco 17. */\r\n\tpublic createFilesAsMedia = this.createMediaItems;\r\n\r\n\t/**\r\n\t * Uploads files and folders to the server and creates the media items with corresponding media type.\\\r\n\t * Allows the user to pick a media type option if multiple types are allowed.\r\n\t * @param {UmbFileDropzoneDroppedItems} items - The files and folders to upload.\r\n\t * @param {string | null} parentUnique - Where the items should be uploaded.\r\n\t * @returns {Promise>} - The items about to be uploaded.\r\n\t */\r\n\tpublic async createMediaItems(items: UmbFileDropzoneDroppedItems, parentUnique: string | null = null) {\r\n\t\tconst uploadableItems = await this.#setupProgress(items, parentUnique);\r\n\t\tif (uploadableItems.length === 1) {\r\n\t\t\t// When there is only one item being uploaded, allow the user to pick the media type, if more than one is allowed.\r\n\t\t\tthis.#createOneMediaItem(uploadableItems[0]);\r\n\t\t} else {\r\n\t\t\t// When there are multiple items being uploaded, automatically pick the media types for each item. We probably want to allow the user to pick the media type in the future.\r\n\t\t\tthis.#createMediaItems(uploadableItems);\r\n\t\t}\r\n\t\treturn uploadableItems;\r\n\t}\r\n\r\n\t/** @deprecated Please use `createTemporaryFiles()` instead; this method will be removed in Umbraco 17. */\r\n\tpublic createFilesAsTemporary = this.createTemporaryFiles;\r\n\r\n\t/**\r\n\t * Uploads the files as temporary files and returns the data.\r\n\t * @param { File[] } files - The files to upload.\r\n\t * @returns {Promise>} - Files as temporary files.\r\n\t */\r\n\tpublic async createTemporaryFiles(files: Array) {\r\n\t\tconst uploadableItems = (await this.#setupProgress({ files, folders: [] }, null)) as Array;\r\n\r\n\t\tconst uploadedItems: Array = [];\r\n\r\n\t\tfor (const item of uploadableItems) {\r\n\t\t\t// Upload as temp file\r\n\t\t\tconst uploaded = await this.#tempFileManager.uploadOne({\r\n\t\t\t\ttemporaryUnique: item.temporaryFile.temporaryUnique,\r\n\t\t\t\tfile: item.temporaryFile.file,\r\n\t\t\t});\r\n\r\n\t\t\t// Update progress\r\n\t\t\tconst progress = this.#progress.getValue();\r\n\t\t\tthis.#progress.update({ completed: progress.completed + 1 });\r\n\r\n\t\t\tif (uploaded.status === TemporaryFileStatus.SUCCESS) {\r\n\t\t\t\tthis.#progressItems.updateOne(item.unique, { status: UmbFileDropzoneItemStatus.COMPLETE });\r\n\t\t\t} else {\r\n\t\t\t\tthis.#progressItems.updateOne(item.unique, { status: UmbFileDropzoneItemStatus.ERROR });\r\n\t\t\t}\r\n\r\n\t\t\t// Add to return value\r\n\t\t\tuploadedItems.push(uploaded);\r\n\t\t}\r\n\r\n\t\treturn uploadedItems;\r\n\t}\r\n\r\n\tasync #showDialogMediaTypePicker(options: Array) {\r\n\t\tconst modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);\r\n\t\tconst modalContext = modalManager.open(this.#host, UMB_DROPZONE_MEDIA_TYPE_PICKER_MODAL, { data: { options } });\r\n\t\tconst value = await modalContext.onSubmit().catch(() => undefined);\r\n\t\treturn value?.mediaTypeUnique;\r\n\t}\r\n\r\n\tasync #createOneMediaItem(item: UmbUploadableItem) {\r\n\t\tconst options = await this.#getMediaTypeOptions(item);\r\n\t\tif (!options.length) {\r\n\t\t\treturn this.#updateProgress(item, UmbFileDropzoneItemStatus.NOT_ALLOWED);\r\n\t\t}\r\n\r\n\t\tconst mediaTypeUnique = options.length > 1 ? await this.#showDialogMediaTypePicker(options) : options[0].unique;\r\n\r\n\t\tif (!mediaTypeUnique) {\r\n\t\t\treturn this.#updateProgress(item, UmbFileDropzoneItemStatus.CANCELLED);\r\n\t\t}\r\n\r\n\t\tif (item.temporaryFile) {\r\n\t\t\tthis.#handleFile(item as UmbUploadableFile, mediaTypeUnique);\r\n\t\t} else if (item.folder) {\r\n\t\t\tthis.#handleFolder(item as UmbUploadableFolder, mediaTypeUnique);\r\n\t\t}\r\n\t}\r\n\r\n\tasync #createMediaItems(uploadableItems: Array) {\r\n\t\tfor (const item of uploadableItems) {\r\n\t\t\tconst options = await this.#getMediaTypeOptions(item);\r\n\t\t\tif (!options.length) {\r\n\t\t\t\tthis.#updateProgress(item, UmbFileDropzoneItemStatus.NOT_ALLOWED);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst mediaTypeUnique = options[0].unique;\r\n\r\n\t\t\tif (!mediaTypeUnique) {\r\n\t\t\t\tthrow new Error('Media type unique is not defined');\r\n\t\t\t}\r\n\r\n\t\t\t// Handle files and folders differently: a file is uploaded as temp then created as a media item, and a folder is created as a media item directly\r\n\t\t\tif (item.temporaryFile) {\r\n\t\t\t\tawait this.#handleFile(item as UmbUploadableFile, mediaTypeUnique);\r\n\t\t\t} else if (item.folder) {\r\n\t\t\t\tawait this.#handleFolder(item as UmbUploadableFolder, mediaTypeUnique);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tasync #handleFile(item: UmbUploadableFile, mediaTypeUnique: string) {\r\n\t\t// Upload the file as a temporary file and update progress.\r\n\t\tconst temporaryFile = await this.#uploadAsTemporaryFile(item);\r\n\t\tif (temporaryFile.status !== TemporaryFileStatus.SUCCESS) {\r\n\t\t\tthis.#updateProgress(item, UmbFileDropzoneItemStatus.ERROR);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Create the media item.\r\n\t\tconst scaffold = await this.#getItemScaffold(item, mediaTypeUnique);\r\n\t\tconst { data } = await this.#mediaDetailRepository.create(scaffold, item.parentUnique);\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#updateProgress(item, UmbFileDropzoneItemStatus.COMPLETE);\r\n\t\t} else {\r\n\t\t\tthis.#updateProgress(item, UmbFileDropzoneItemStatus.ERROR);\r\n\t\t}\r\n\t}\r\n\r\n\tasync #handleFolder(item: UmbUploadableFolder, mediaTypeUnique: string) {\r\n\t\tconst scaffold = await this.#getItemScaffold(item, mediaTypeUnique);\r\n\t\tconst { data } = await this.#mediaDetailRepository.create(scaffold, item.parentUnique);\r\n\t\tif (data) {\r\n\t\t\tthis.#updateProgress(item, UmbFileDropzoneItemStatus.COMPLETE);\r\n\t\t} else {\r\n\t\t\tthis.#updateProgress(item, UmbFileDropzoneItemStatus.ERROR);\r\n\t\t}\r\n\t}\r\n\r\n\tasync #uploadAsTemporaryFile(item: UmbUploadableFile) {\r\n\t\treturn await this.#tempFileManager.uploadOne({\r\n\t\t\ttemporaryUnique: item.temporaryFile.temporaryUnique,\r\n\t\t\tfile: item.temporaryFile.file,\r\n\t\t});\r\n\t}\r\n\r\n\t// Media types\r\n\tasync #getMediaTypeOptions(item: UmbUploadableItem): Promise> {\r\n\t\t// Check the parent which children media types are allowed\r\n\t\tconst parent = item.parentUnique ? await this.#mediaDetailRepository.requestByUnique(item.parentUnique) : null;\r\n\t\tconst allowedChildren = await this.#getAllowedChildrenOf(parent?.data?.mediaType.unique ?? null);\r\n\r\n\t\tconst extension = item.temporaryFile?.file.name.split('.').pop() ?? null;\r\n\r\n\t\t// Check which media types allow the file's extension\r\n\t\tconst availableMediaType = await this.#getAvailableMediaTypesOf(extension);\r\n\r\n\t\tif (!availableMediaType.length) return [];\r\n\r\n\t\tconst options = allowedChildren.filter((x) => availableMediaType.find((y) => y.unique === x.unique));\r\n\t\treturn options;\r\n\t}\r\n\r\n\tasync #getAvailableMediaTypesOf(extension: string | null) {\r\n\t\t// Check if we already have information on this file extension.\r\n\t\tconst available = this.#availableMediaTypesOf\r\n\t\t\t.getValue()\r\n\t\t\t.find((x) => x.extension === extension)?.availableMediaTypes;\r\n\t\tif (available) return available;\r\n\r\n\t\t// Request information on this file extension\r\n\t\tconst availableMediaTypes = extension\r\n\t\t\t? await this.#mediaTypeStructure.requestMediaTypesOf({ fileExtension: extension })\r\n\t\t\t: await this.#mediaTypeStructure.requestMediaTypesOfFolders();\r\n\r\n\t\tthis.#availableMediaTypesOf.appendOne({ extension, availableMediaTypes });\r\n\t\treturn availableMediaTypes;\r\n\t}\r\n\r\n\tasync #getAllowedChildrenOf(mediaTypeUnique: string | null) {\r\n\t\t//Check if we already got information on this media type.\r\n\t\tconst allowed = this.#allowedChildrenOf\r\n\t\t\t.getValue()\r\n\t\t\t.find((x) => x.mediaTypeUnique === mediaTypeUnique)?.allowedChildren;\r\n\t\tif (allowed) return allowed;\r\n\r\n\t\t// Request information on this media type.\r\n\t\tconst { data } = await this.#mediaTypeStructure.requestAllowedChildrenOf(mediaTypeUnique);\r\n\t\tif (!data) throw new Error('Parent media type does not exists');\r\n\r\n\t\tthis.#allowedChildrenOf.appendOne({ mediaTypeUnique, allowedChildren: data.items });\r\n\t\treturn data.items;\r\n\t}\r\n\r\n\t// Scaffold\r\n\tasync #getItemScaffold(item: UmbUploadableItem, mediaTypeUnique: string): Promise {\r\n\t\t// TODO: Use a scaffolding feature to ensure consistency. [NL]\r\n\t\tconst name = item.temporaryFile ? item.temporaryFile.file.name : (item.folder?.name ?? '');\r\n\t\tconst umbracoFile: UmbMediaValueModel = {\r\n\t\t\teditorAlias: null as any,\r\n\t\t\talias: 'umbracoFile',\r\n\t\t\tvalue: { temporaryFileId: item.temporaryFile?.temporaryUnique },\r\n\t\t\tculture: null,\r\n\t\t\tsegment: null,\r\n\t\t};\r\n\r\n\t\tconst preset: Partial = {\r\n\t\t\tunique: item.unique,\r\n\t\t\tmediaType: { unique: mediaTypeUnique, collection: null },\r\n\t\t\tvariants: [{ culture: null, segment: null, createDate: null, updateDate: null, name }],\r\n\t\t\tvalues: item.temporaryFile ? [umbracoFile] : undefined,\r\n\t\t};\r\n\t\tconst { data } = await this.#mediaDetailRepository.createScaffold(preset);\r\n\t\treturn data!;\r\n\t}\r\n\r\n\t// Progress handling\r\n\tasync #setupProgress(items: UmbFileDropzoneDroppedItems, parent: string | null) {\r\n\t\tconst current = this.#progress.getValue();\r\n\t\tconst currentItems = this.#progressItems.getValue();\r\n\r\n\t\tconst uploadableItems = this.#prepareItemsAsUploadable({ folders: items.folders, files: items.files }, parent);\r\n\r\n\t\tthis.#progressItems.setValue([...currentItems, ...uploadableItems]);\r\n\t\tthis.#progress.setValue({ total: current.total + uploadableItems.length, completed: current.completed });\r\n\r\n\t\treturn uploadableItems;\r\n\t}\r\n\r\n\t#updateProgress(item: UmbUploadableItem, status: UmbFileDropzoneItemStatus) {\r\n\t\tthis.#progressItems.updateOne(item.unique, { status });\r\n\t\tconst progress = this.#progress.getValue();\r\n\t\tthis.#progress.update({ completed: progress.completed + 1 });\r\n\t}\r\n\r\n\treadonly #prepareItemsAsUploadable = (\r\n\t\t{ folders, files }: UmbFileDropzoneDroppedItems,\r\n\t\tparentUnique: string | null,\r\n\t): Array => {\r\n\t\tconst items: Array = [];\r\n\r\n\t\tfor (const file of files) {\r\n\t\t\tconst unique = UmbId.new();\r\n\t\t\tif (file.type) {\r\n\t\t\t\titems.push({\r\n\t\t\t\t\tunique,\r\n\t\t\t\t\tparentUnique,\r\n\t\t\t\t\tstatus: UmbFileDropzoneItemStatus.WAITING,\r\n\t\t\t\t\ttemporaryFile: { file, temporaryUnique: UmbId.new() },\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (const subfolder of folders) {\r\n\t\t\tconst unique = UmbId.new();\r\n\t\t\titems.push({\r\n\t\t\t\tunique,\r\n\t\t\t\tparentUnique,\r\n\t\t\t\tstatus: UmbFileDropzoneItemStatus.WAITING,\r\n\t\t\t\tfolder: { name: subfolder.folderName },\r\n\t\t\t});\r\n\r\n\t\t\titems.push(...this.#prepareItemsAsUploadable({ folders: subfolder.folders, files: subfolder.files }, unique));\r\n\t\t}\r\n\t\treturn items;\r\n\t};\r\n\r\n\tpublic override destroy() {\r\n\t\tthis.#tempFileManager.destroy();\r\n\t\tsuper.destroy();\r\n\t}\r\n}\r\n","import { UmbDropzoneManager } from './dropzone-manager.class.js';\r\nimport { UmbFileDropzoneItemStatus, type UmbUploadableItem } from './types.js';\r\nimport { css, customElement, html, ifDefined, property, state } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport type { UUIFileDropzoneElement, UUIFileDropzoneEvent } from '@umbraco-cms/backoffice/external/uui';\r\n\r\n@customElement('umb-dropzone')\r\nexport class UmbDropzoneElement extends UmbLitElement {\r\n\t@property({ attribute: false })\r\n\tparentUnique: string | null = null;\r\n\r\n\t@property({ type: Boolean })\r\n\tcreateAsTemporary: boolean = false;\r\n\r\n\t@property({ type: String })\r\n\taccept?: string;\r\n\r\n\t@property({ type: Boolean, reflect: true })\r\n\tmultiple: boolean = false;\r\n\r\n\t@property({ type: Boolean, reflect: true })\r\n\tdisabled = false;\r\n\r\n\t@property({ type: Boolean, attribute: 'disable-folder-upload', reflect: true })\r\n\tpublic get disableFolderUpload() {\r\n\t\treturn this._disableFolderUpload;\r\n\t}\r\n\tpublic set disableFolderUpload(isAllowed: boolean) {\r\n\t\tthis.#dropzoneManager.setIsFoldersAllowed(!isAllowed);\r\n\t}\r\n\tprivate readonly _disableFolderUpload = false;\r\n\r\n\t@state()\r\n\tprivate _progressItems: Array = [];\r\n\r\n\t#dropzoneManager: UmbDropzoneManager;\r\n\r\n\t/**\r\n\t * @deprecated Please use `getItems()` instead; this method will be removed in Umbraco 17.\r\n\t * @returns {Array} An array of uploadable items.\r\n\t */\r\n\tpublic getFiles() {\r\n\t\treturn this.getItems();\r\n\t}\r\n\r\n\tpublic getItems() {\r\n\t\treturn this._progressItems;\r\n\t}\r\n\r\n\tpublic progressItems = () => this.#dropzoneManager.progressItems;\r\n\tpublic progress = () => this.#dropzoneManager.progress;\r\n\r\n\tpublic browse() {\r\n\t\tif (this.disabled) return;\r\n\t\tconst element = this.shadowRoot?.querySelector('#dropzone') as UUIFileDropzoneElement;\r\n\t\treturn element.browse();\r\n\t}\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.#dropzoneManager = new UmbDropzoneManager(this);\r\n\t\tdocument.addEventListener('dragenter', this.#handleDragEnter.bind(this));\r\n\t\tdocument.addEventListener('dragleave', this.#handleDragLeave.bind(this));\r\n\t\tdocument.addEventListener('drop', this.#handleDrop.bind(this));\r\n\r\n\t\tthis.observe(\r\n\t\t\tthis.#dropzoneManager.progress,\r\n\t\t\t(progress) =>\r\n\t\t\t\tthis.dispatchEvent(new ProgressEvent('progress', { loaded: progress.completed, total: progress.total })),\r\n\t\t\t'_observeProgress',\r\n\t\t);\r\n\r\n\t\tthis.observe(\r\n\t\t\tthis.#dropzoneManager.progressItems,\r\n\t\t\t(progressItems: Array) => {\r\n\t\t\t\tthis._progressItems = progressItems;\r\n\t\t\t\tconst waiting = progressItems.find((item) => item.status === UmbFileDropzoneItemStatus.WAITING);\r\n\t\t\t\tif (progressItems.length && !waiting) {\r\n\t\t\t\t\tthis.dispatchEvent(new CustomEvent('complete', { detail: progressItems }));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t'_observeProgressItems',\r\n\t\t);\r\n\t}\r\n\r\n\toverride disconnectedCallback(): void {\r\n\t\tsuper.disconnectedCallback();\r\n\t\tthis.#dropzoneManager.destroy();\r\n\t\tdocument.removeEventListener('dragenter', this.#handleDragEnter.bind(this));\r\n\t\tdocument.removeEventListener('dragleave', this.#handleDragLeave.bind(this));\r\n\t\tdocument.removeEventListener('drop', this.#handleDrop.bind(this));\r\n\t}\r\n\r\n\t#handleDragEnter(e: DragEvent) {\r\n\t\tif (this.disabled) return;\r\n\t\t// Avoid collision with UmbSorterController\r\n\t\tconst types = e.dataTransfer?.types;\r\n\t\tif (!types?.length || !types?.includes('Files')) return;\r\n\r\n\t\tthis.toggleAttribute('dragging', true);\r\n\t}\r\n\r\n\t#handleDragLeave() {\r\n\t\tif (this.disabled) return;\r\n\t\tthis.toggleAttribute('dragging', false);\r\n\t}\r\n\r\n\t#handleDrop(event: DragEvent) {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.disabled) return;\r\n\t\tthis.toggleAttribute('dragging', false);\r\n\t}\r\n\r\n\tasync #onDropFiles(event: UUIFileDropzoneEvent) {\r\n\t\tif (this.disabled) return;\r\n\t\tif (!event.detail.files.length && !event.detail.folders.length) return;\r\n\r\n\t\tif (this.createAsTemporary) {\r\n\t\t\tconst uploadable = this.#dropzoneManager.createTemporaryFiles(event.detail.files);\r\n\t\t\tthis.dispatchEvent(new CustomEvent('submitted', { detail: await uploadable }));\r\n\t\t} else {\r\n\t\t\tconst uploadable = this.#dropzoneManager.createMediaItems(event.detail, this.parentUnique);\r\n\t\t\tthis.dispatchEvent(new CustomEvent('submitted', { detail: await uploadable }));\r\n\t\t}\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html``;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tcss`\r\n\t\t\t:host(:not([disabled])[dragging]) #dropzone {\r\n\t\t\t\topacity: 1;\r\n\t\t\t\tpointer-events: all;\r\n\t\t\t}\r\n\r\n\t\t\t[dropzone] {\r\n\t\t\t\topacity: 0;\r\n\t\t\t}\r\n\r\n\t\t\t#dropzone {\r\n\t\t\t\topacity: 0;\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\talign-items: center;\r\n\t\t\t\tjustify-content: center;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tinset: 0px;\r\n\t\t\t\tz-index: 100;\r\n\t\t\t\tbackdrop-filter: opacity(1); /* Removes the built in blur effect */\r\n\t\t\t\tborder-radius: var(--uui-border-radius);\r\n\t\t\t\toverflow: clip;\r\n\t\t\t\tborder: 1px solid var(--uui-color-focus);\r\n\t\t\t}\r\n\t\t\t#dropzone:after {\r\n\t\t\t\tcontent: '';\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tinset: 0;\r\n\t\t\t\tborder-radius: var(--uui-border-radius);\r\n\t\t\t\tbackground-color: var(--uui-color-focus);\r\n\t\t\t\topacity: 0.2;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbDropzoneElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-dropzone': UmbDropzoneElement;\r\n\t}\r\n}\r\n"],"names":["UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS","UMB_MEDIA_GRID_COLLECTION_VIEW_ALIAS","UMB_MEDIA_TABLE_COLLECTION_VIEW_ALIAS","UMB_MEDIA_COLLECTION_ALIAS","UMB_MOVE_MEDIA_REPOSITORY_ALIAS","UMB_SORT_CHILDREN_OF_MEDIA_REPOSITORY_ALIAS","UMB_BULK_MOVE_MEDIA_REPOSITORY_ALIAS","UMB_BULK_TRASH_MEDIA_REPOSITORY_ALIAS","UMB_MEDIA_MENU_ALIAS","UMB_MEDIA_URL_REPOSITORY_ALIAS","UMB_MEDIA_URL_STORE_ALIAS","UMB_MEDIA_RECYCLE_BIN_TREE_REPOSITORY_ALIAS","UMB_MEDIA_RECYCLE_BIN_TREE_STORE_ALIAS","UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS","UMB_MEDIA_RECYCLE_BIN_REPOSITORY_ALIAS","UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE","UMB_MEDIA_DETAIL_REPOSITORY_ALIAS","UMB_MEDIA_DETAIL_STORE_ALIAS","UMB_MEDIA_VALIDATION_REPOSITORY_ALIAS","UMB_MEDIA_TREE_REPOSITORY_ALIAS","UMB_MEDIA_TREE_STORE_ALIAS","UMB_MEDIA_TREE_ALIAS","UMB_MEDIA_WORKSPACE_ALIAS","UMB_MEMBER_DETAIL_MODEL_VARIANT_SCAFFOLD","UmbFileDropzoneItemStatus","_UmbDropzoneMediaTypePickerModalElement_instances","onAutoPick_fn","onMediaTypePick_fn","UmbDropzoneMediaTypePickerModalElement","UmbModalBaseElement","__privateAdd","html","__privateMethod","repeat","option","unique","UmbTextStyles","css","__decorateClass","state","query","customElement","UmbDropzoneMediaTypePickerModalElement$1","UmbDropzoneManager","UmbControllerBase","host","#isFoldersAllowed","#mediaTypeStructure","UmbMediaTypeStructureRepository","#mediaDetailRepository","UmbMediaDetailRepository","#tempFileManager","UmbTemporaryFileManager","#availableMediaTypesOf","UmbArrayState","x","#allowedChildrenOf","#progress","UmbObjectState","#progressItems","#prepareItemsAsUploadable","folders","files","parentUnique","items","file","UmbId","subfolder","#host","isAllowed","uploadableItems","#setupProgress","#createOneMediaItem","#createMediaItems","uploadedItems","item","uploaded","progress","TemporaryFileStatus","#showDialogMediaTypePicker","options","UMB_MODAL_MANAGER_CONTEXT","UMB_DROPZONE_MEDIA_TYPE_PICKER_MODAL","#getMediaTypeOptions","#updateProgress","mediaTypeUnique","#handleFile","#handleFolder","#uploadAsTemporaryFile","scaffold","#getItemScaffold","data","parent","allowedChildren","#getAllowedChildrenOf","extension","availableMediaType","#getAvailableMediaTypesOf","y","available","availableMediaTypes","allowed","name","umbracoFile","preset","current","currentItems","status","_dropzoneManager","_UmbDropzoneElement_instances","handleDragEnter_fn","handleDragLeave_fn","handleDrop_fn","onDropFiles_fn","UmbDropzoneElement","UmbLitElement","__privateGet","__privateSet","progressItems","waiting","ifDefined","e","types","event","uploadable","property"],"mappings":"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"}