{"version":3,"file":"input-upload-field.element-Cj7s0paY.js","sources":["../../../src/packages/media/media/collection/media-collection.context-token.ts","../../../src/packages/media/media/dropzone/modals/dropzone-media-type-picker/dropzone-media-type-picker-modal.token.ts","../../../src/packages/media/media/entity-actions/create/media-create-options-modal.token.ts","../../../src/packages/media/media/components/input-image-cropper/crop-change.event.ts","../../../src/packages/media/media/components/input-image-cropper/image-cropper.element.ts","../../../src/packages/media/media/components/input-image-cropper/focalpoint-change.event.ts","../../../src/packages/media/media/components/input-image-cropper/image-cropper-focus-setter.element.ts","../../../src/packages/media/media/components/input-image-cropper/image-cropper-preview.element.ts","../../../src/packages/media/media/components/input-image-cropper/image-cropper-field.element.ts","../../../src/packages/media/media/modals/image-cropper-editor/components/image-cropper-editor-field.element.ts","../../../src/packages/media/media/entity.ts","../../../src/packages/media/media/repository/detail/media-detail.server.data-source.ts","../../../src/packages/media/media/repository/detail/media-detail.repository.ts","../../../src/packages/media/media/repository/item/media-item.server.data-source.ts","../../../src/packages/media/media/repository/item/media-item.repository.ts","../../../src/packages/media/media/modals/media-picker/media-picker-modal.token.ts","../../../src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts","../../../src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.token.ts","../../../src/packages/media/media/modals/media-caption-alt-text/media-caption-alt-text-modal.token.ts","../../../src/packages/media/media/tree/media-tree.server.data-source.ts","../../../src/packages/media/media/tree/media-tree.store.context-token.ts","../../../src/packages/media/media/tree/media-tree.repository.ts","../../../src/packages/media/media/modals/media-picker/components/media-picker-folder-path.element.ts","../../../src/packages/media/media/modals/media-picker/components/media-picker-create-item.element.ts","../../../src/packages/media/media/search/media-search.server.data-source.ts","../../../src/packages/media/media/search/media-search.repository.ts","../../../src/packages/media/media/search/media.search-provider.ts","../../../src/packages/media/media/modals/media-picker/media-picker-modal.element.ts","../../../src/packages/media/media/recycle-bin/tree/media-recycle-bin-tree.store.context-token.ts","../../../src/packages/media/media/repository/item/constants.ts","../../../src/packages/media/media/tree/media-tree-picker-modal.token.ts","../../../src/packages/media/media/workspace/media-workspace.context-token.ts","../../../src/packages/media/media-section/paths.ts","../../../src/packages/media/media/paths.ts","../../../src/packages/media/media/property-dataset-context/media-property-dataset-context.token.ts","../../../src/packages/media/media/modals/media-caption-alt-text/media-caption-alt-text-modal.element.ts","../../../src/packages/media/media/components/input-media/input-media.context.ts","../../../src/packages/media/media/components/input-media/input-media.element.ts","../../../src/packages/media/media/components/input-rich-media/input-rich-media.element.ts","../../../src/packages/media/media/components/input-image-cropper/input-image-cropper.element.ts","../../../src/packages/media/media/components/input-upload-field/utils.ts","../../../src/packages/media/media/components/input-upload-field/input-upload-field.element.ts"],"sourcesContent":["import type { UmbMediaCollectionContext } from './media-collection.context.js';\r\nimport { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport const UMB_MEDIA_COLLECTION_CONTEXT = new UmbContextToken('UmbCollectionContext');\r\n","import type { UmbAllowedMediaTypeModel } from '@umbraco-cms/backoffice/media-type';\r\nimport { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\n\r\nexport interface UmbDropzoneMediaTypePickerModalData {\r\n\toptions: Array;\r\n\tfiles?: Array;\r\n}\r\n\r\nexport type UmbDropzoneMediaTypePickerModalValue = {\r\n\tmediaTypeUnique: string | undefined;\r\n};\r\n\r\nexport const UMB_DROPZONE_MEDIA_TYPE_PICKER_MODAL = new UmbModalToken<\r\n\tUmbDropzoneMediaTypePickerModalData,\r\n\tUmbDropzoneMediaTypePickerModalValue\r\n>('Umb.Modal.Dropzone.MediaTypePicker', {\r\n\tmodal: {\r\n\t\ttype: 'dialog',\r\n\t},\r\n});\r\n","import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';\r\nimport { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\n\r\nexport interface UmbMediaCreateOptionsModalData {\r\n\tparent: UmbEntityModel;\r\n\tmediaType: {\r\n\t\tunique: string;\r\n\t} | null;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nexport interface UmbMediaCreateOptionsModalValue {}\r\n\r\nexport const UMB_MEDIA_CREATE_OPTIONS_MODAL = new UmbModalToken<\r\n\tUmbMediaCreateOptionsModalData,\r\n\tUmbMediaCreateOptionsModalValue\r\n>('Umb.Modal.Media.CreateOptions', {\r\n\tmodal: {\r\n\t\ttype: 'sidebar',\r\n\t\tsize: 'small',\r\n\t},\r\n});\r\n","export class UmbImageCropChangeEvent extends Event {\r\n\tpublic static readonly TYPE = 'imagecrop-change';\r\n\r\n\tpublic constructor(args?: EventInit) {\r\n\t\t// mimics the native change event\r\n\t\tsuper(UmbImageCropChangeEvent.TYPE, { bubbles: false, composed: false, cancelable: false, ...args });\r\n\t}\r\n}\r\n","import type { UmbImageCropperCrop, UmbImageCropperFocalPoint } from './types.js';\r\nimport { UmbImageCropChangeEvent } from './crop-change.event.js';\r\nimport { calculateExtrapolatedValue, clamp, inverseLerp, lerp } from '@umbraco-cms/backoffice/utils';\r\nimport type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';\r\nimport { customElement, property, query, state, css, html } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\n\r\n@customElement('umb-image-cropper')\r\nexport class UmbImageCropperElement extends UmbLitElement {\r\n\t@query('#viewport') viewportElement!: HTMLElement;\r\n\t@query('#mask') maskElement!: HTMLElement;\r\n\t@query('#image') imageElement!: HTMLImageElement;\r\n\r\n\t@property({ type: Object, attribute: false }) value?: UmbImageCropperCrop;\r\n\t@property({ type: String }) src: string = '';\r\n\t@property({ attribute: false }) focalPoint: UmbImageCropperFocalPoint = {\r\n\t\tleft: 0.5,\r\n\t\ttop: 0.5,\r\n\t};\r\n\t@property({ type: Number })\r\n\tget zoom() {\r\n\t\treturn this._zoom;\r\n\t}\r\n\tset zoom(value) {\r\n\t\t// Calculate the delta value - the value the zoom has changed b\r\n\t\tconst delta = value - this._zoom;\r\n\t\tthis.#updateImageScale(delta);\r\n\t}\r\n\r\n\t@state() _zoom = 0;\r\n\r\n\t#VIEWPORT_PADDING = 50 as const;\r\n\t#MAX_SCALE_FACTOR = 4 as const;\r\n\t#SCROLL_ZOOM_SPEED = 0.001 as const;\r\n\r\n\t#minImageScale = 0;\r\n\t#maxImageScale = 0;\r\n\t#oldImageScale = 0;\r\n\t#isDragging = false;\r\n\t#mouseOffsetX = 0;\r\n\t#mouseOffsetY = 0;\r\n\r\n\tget #getImageScale() {\r\n\t\treturn lerp(this.#minImageScale, this.#maxImageScale, this._zoom);\r\n\t}\r\n\r\n\toverride connectedCallback() {\r\n\t\tsuper.connectedCallback();\r\n\t\tthis.#initializeCrop();\r\n\t\tthis.#addEventListeners();\r\n\t}\r\n\r\n\toverride disconnectedCallback() {\r\n\t\tsuper.disconnectedCallback();\r\n\t\tthis.#removeEventListeners();\r\n\t}\r\n\r\n\tasync #addEventListeners() {\r\n\t\tawait this.updateComplete;\r\n\t\tthis.imageElement.addEventListener('mousedown', this.#onStartDrag);\r\n\t\tthis.addEventListener('wheel', this.#onWheel, { passive: false }); //\r\n\t}\r\n\r\n\t#removeEventListeners() {\r\n\t\tthis.imageElement.removeEventListener('mousedown', this.#onStartDrag);\r\n\t\tthis.removeEventListener('wheel', this.#onWheel);\r\n\t}\r\n\r\n\tprotected override updated(_changedProperties: PropertyValueMap | Map): void {\r\n\t\tsuper.updated(_changedProperties);\r\n\r\n\t\tif (_changedProperties.has('value')) {\r\n\t\t\tthis.#initializeCrop();\r\n\t\t}\r\n\t}\r\n\r\n\tasync #initializeCrop() {\r\n\t\tif (!this.value) return;\r\n\r\n\t\tawait this.updateComplete; // Wait for the @query to be resolved\r\n\r\n\t\tif (!this.imageElement.complete) {\r\n\t\t\t// Wait for the image to load\r\n\t\t\tawait new Promise((resolve) => (this.imageElement.onload = () => resolve(this.imageElement)));\r\n\t\t}\r\n\r\n\t\tconst viewportWidth = this.viewportElement.clientWidth;\r\n\t\tconst viewportHeight = this.viewportElement.clientHeight;\r\n\r\n\t\tconst viewportAspectRatio = viewportWidth / viewportHeight;\r\n\t\tconst cropAspectRatio = this.value.width / this.value.height;\r\n\r\n\t\t// Init variables\r\n\t\tlet maskWidth = 0,\r\n\t\t\tmaskHeight = 0,\r\n\t\t\timageWidth = 0,\r\n\t\t\timageHeight = 0,\r\n\t\t\timageLeft = 0,\r\n\t\t\timageTop = 0;\r\n\r\n\t\t// NOTE {} are used to keep some variables in scope, preventing them from being used outside.\r\n\r\n\t\t{\r\n\t\t\t// Calculate mask size\r\n\t\t\tconst viewportPadding = 2 * this.#VIEWPORT_PADDING;\r\n\t\t\tconst availableWidth = viewportWidth - viewportPadding;\r\n\t\t\tconst availableHeight = viewportHeight - viewportPadding;\r\n\r\n\t\t\tconst isCropWider = cropAspectRatio > viewportAspectRatio;\r\n\r\n\t\t\tmaskWidth = isCropWider ? availableWidth : availableHeight * cropAspectRatio;\r\n\t\t\tmaskHeight = isCropWider ? availableWidth / cropAspectRatio : availableHeight;\r\n\t\t}\r\n\r\n\t\t// Center the mask within the viewport\r\n\t\tconst maskLeft = (viewportWidth - maskWidth) / 2;\r\n\t\tconst maskTop = (viewportHeight - maskHeight) / 2;\r\n\r\n\t\tthis.maskElement.style.width = `${maskWidth}px`;\r\n\t\tthis.maskElement.style.height = `${maskHeight}px`;\r\n\t\tthis.maskElement.style.left = `${maskLeft}px`;\r\n\t\tthis.maskElement.style.top = `${maskTop}px`;\r\n\r\n\t\t{\r\n\t\t\t// Calculate the scaling factors to fill the mask area while preserving aspect ratio\r\n\t\t\tconst scaleX = maskWidth / this.imageElement.naturalWidth;\r\n\t\t\tconst scaleY = maskHeight / this.imageElement.naturalHeight;\r\n\t\t\tconst scale = Math.max(scaleX, scaleY);\r\n\t\t\tthis.#minImageScale = scale;\r\n\t\t\tthis.#maxImageScale = scale * this.#MAX_SCALE_FACTOR;\r\n\t\t}\r\n\r\n\t\t// Calculate the image size and position\r\n\t\tif (this.value.coordinates) {\r\n\t\t\tconst imageAspectRatio = this.imageElement.naturalWidth / this.imageElement.naturalHeight;\r\n\r\n\t\t\tif (cropAspectRatio > 1) {\r\n\t\t\t\t// Landscape-oriented cropping\r\n\t\t\t\tconst cropAmount = this.value.coordinates.x1 + this.value.coordinates.x2;\r\n\t\t\t\t// Use crop amount to extrapolate the image width from the mask width.\r\n\t\t\t\timageWidth = calculateExtrapolatedValue(maskWidth, cropAmount);\r\n\t\t\t\timageHeight = imageWidth / imageAspectRatio;\r\n\t\t\t\t// Move the image up and left from the top and left edges of the mask based on the crop coordinates\r\n\t\t\t\timageLeft = -imageWidth * this.value.coordinates.x1 + maskLeft;\r\n\t\t\t\timageTop = -imageHeight * this.value.coordinates.y1 + maskTop;\r\n\t\t\t} else {\r\n\t\t\t\t// Portrait-oriented cropping\r\n\t\t\t\tconst cropAmount = this.value.coordinates.y1 + this.value.coordinates.y2;\r\n\t\t\t\t// Use crop amount to extrapolate the image height from the mask height.\r\n\t\t\t\timageHeight = calculateExtrapolatedValue(maskHeight, cropAmount);\r\n\t\t\t\timageWidth = imageHeight * imageAspectRatio;\r\n\t\t\t\t// Move the image up and left from the top and left edges of the mask based on the crop coordinates\r\n\t\t\t\timageLeft = -imageWidth * this.value.coordinates.x1 + maskLeft;\r\n\t\t\t\timageTop = -imageHeight * this.value.coordinates.y1 + maskTop;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Set the image size to fill the mask while preserving aspect ratio\r\n\t\t\timageWidth = this.imageElement.naturalWidth * this.#minImageScale;\r\n\t\t\timageHeight = this.imageElement.naturalHeight * this.#minImageScale;\r\n\r\n\t\t\t// position image so that its center is at the focal point\r\n\t\t\timageLeft = maskLeft + maskWidth / 2 - imageWidth * this.focalPoint.left;\r\n\t\t\timageTop = maskTop + maskHeight / 2 - imageHeight * this.focalPoint.top;\r\n\r\n\t\t\t// clamp image position so it stays within the mask\r\n\t\t\tconst minLeft = maskLeft + maskWidth - imageWidth;\r\n\t\t\tconst minTop = maskTop + maskHeight - imageHeight;\r\n\t\t\timageLeft = clamp(imageLeft, minLeft, maskLeft);\r\n\t\t\timageTop = clamp(imageTop, minTop, maskTop);\r\n\t\t}\r\n\r\n\t\tthis.imageElement.style.left = `${imageLeft}px`;\r\n\t\tthis.imageElement.style.top = `${imageTop}px`;\r\n\t\tthis.imageElement.style.width = `${imageWidth}px`;\r\n\t\tthis.imageElement.style.height = `${imageHeight}px`;\r\n\r\n\t\tconst currentScaleX = imageWidth / this.imageElement.naturalWidth;\r\n\t\tconst currentScaleY = imageHeight / this.imageElement.naturalHeight;\r\n\t\tconst currentScale = Math.max(currentScaleX, currentScaleY);\r\n\t\t// Calculate the zoom level based on the current scale\r\n\t\t// This finds the alpha value in the range of min and max scale.\r\n\t\tthis._zoom = inverseLerp(this.#minImageScale, this.#maxImageScale, currentScale);\r\n\t}\r\n\r\n\t#updateImageScale(amount: number, mouseX?: number, mouseY?: number) {\r\n\t\tthis.#oldImageScale = this.#getImageScale;\r\n\t\tthis._zoom = clamp(this._zoom + amount, 0, 1);\r\n\t\tconst newImageScale = this.#getImageScale;\r\n\r\n\t\tconst mask = this.maskElement.getBoundingClientRect();\r\n\t\tconst image = this.imageElement.getBoundingClientRect();\r\n\r\n\t\tlet fixedLocation = { left: 0, top: 0 };\r\n\r\n\t\t// If mouse position is provided, use that as the fixed location\r\n\t\t// Else use the center of the mask\r\n\t\tif (mouseX && mouseY) {\r\n\t\t\tfixedLocation = this.#toLocalPosition(mouseX, mouseY);\r\n\t\t} else {\r\n\t\t\tfixedLocation = this.#toLocalPosition(mask.left + mask.width / 2, mask.top + mask.height / 2);\r\n\t\t}\r\n\r\n\t\tconst imageLocalPosition = this.#toLocalPosition(image.left, image.top);\r\n\t\t// Calculate the new image position while keeping the fixed location in the same position\r\n\t\tconst imageLeft =\r\n\t\t\tfixedLocation.left - (fixedLocation.left - imageLocalPosition.left) * (newImageScale / this.#oldImageScale);\r\n\t\tconst imageTop =\r\n\t\t\tfixedLocation.top - (fixedLocation.top - imageLocalPosition.top) * (newImageScale / this.#oldImageScale);\r\n\r\n\t\tthis.imageElement.style.width = `${this.imageElement.naturalWidth * newImageScale}px`;\r\n\t\tthis.imageElement.style.height = `${this.imageElement.naturalHeight * newImageScale}px`;\r\n\r\n\t\tthis.#updateImagePosition(imageTop, imageLeft);\r\n\t}\r\n\r\n\t#updateImagePosition(top: number, left: number) {\r\n\t\tconst mask = this.maskElement.getBoundingClientRect();\r\n\t\tconst image = this.imageElement.getBoundingClientRect();\r\n\r\n\t\t// Calculate the minimum and maximum image positions\r\n\t\tconst minLeft = this.#toLocalPosition(mask.left + mask.width - image.width, 0).left;\r\n\t\tconst maxLeft = this.#toLocalPosition(mask.left, 0).left;\r\n\t\tconst minTop = this.#toLocalPosition(0, mask.top + mask.height - image.height).top;\r\n\t\tconst maxTop = this.#toLocalPosition(0, mask.top).top;\r\n\r\n\t\t// Clamp the image position to the min and max values\r\n\t\tleft = clamp(left, minLeft, maxLeft);\r\n\t\ttop = clamp(top, minTop, maxTop);\r\n\r\n\t\tthis.imageElement.style.left = `${left}px`;\r\n\t\tthis.imageElement.style.top = `${top}px`;\r\n\t}\r\n\r\n\t#calculateCropCoordinates(): { x1: number; x2: number; y1: number; y2: number } {\r\n\t\tconst cropCoordinates = { x1: 0, y1: 0, x2: 0, y2: 0 };\r\n\r\n\t\tconst mask = this.maskElement.getBoundingClientRect();\r\n\t\tconst image = this.imageElement.getBoundingClientRect();\r\n\r\n\t\tcropCoordinates.x1 = (mask.left - image.left) / image.width;\r\n\t\tcropCoordinates.y1 = (mask.top - image.top) / image.height;\r\n\t\tcropCoordinates.x2 = Math.abs((mask.right - image.right) / image.width);\r\n\t\tcropCoordinates.y2 = Math.abs((mask.bottom - image.bottom) / image.height);\r\n\r\n\t\treturn cropCoordinates;\r\n\t}\r\n\r\n\t#toLocalPosition(left: number, top: number) {\r\n\t\tconst viewport = this.viewportElement.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\tleft: left - viewport.left,\r\n\t\t\ttop: top - viewport.top,\r\n\t\t};\r\n\t}\r\n\r\n\t#onSave() {\r\n\t\tif (!this.value) return;\r\n\r\n\t\tconst { x1, x2, y1, y2 } = this.#calculateCropCoordinates();\r\n\t\tthis.value = {\r\n\t\t\t...this.value,\r\n\t\t\tcoordinates: { x1, x2, y1, y2 },\r\n\t\t};\r\n\r\n\t\tthis.dispatchEvent(new UmbImageCropChangeEvent());\r\n\t}\r\n\r\n\t#onCancel() {\r\n\t\t//TODO: How should we handle canceling the crop?\r\n\t\tthis.dispatchEvent(new UmbImageCropChangeEvent());\r\n\t}\r\n\r\n\t#onReset() {\r\n\t\tif (!this.value) return;\r\n\r\n\t\tdelete this.value.coordinates;\r\n\t\tthis.dispatchEvent(new UmbImageCropChangeEvent());\r\n\t}\r\n\r\n\t#onSliderUpdate(event: InputEvent) {\r\n\t\tconst target = event.target as HTMLInputElement;\r\n\t\tthis.zoom = Number(target.value);\r\n\t}\r\n\r\n\t#onStartDrag = (event: MouseEvent) => {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tthis.#isDragging = true;\r\n\t\tconst image = this.imageElement.getBoundingClientRect();\r\n\t\tconst viewport = this.viewportElement.getBoundingClientRect();\r\n\t\tthis.#mouseOffsetX = event.clientX - image.left + viewport.left;\r\n\t\tthis.#mouseOffsetY = event.clientY - image.top + viewport.top;\r\n\r\n\t\twindow.addEventListener('mousemove', this.#onDrag);\r\n\t\twindow.addEventListener('mouseup', this.#onEndDrag);\r\n\t};\r\n\r\n\t#onDrag = (event: MouseEvent) => {\r\n\t\tif (this.#isDragging) {\r\n\t\t\tconst newLeft = event.clientX - this.#mouseOffsetX;\r\n\t\t\tconst newTop = event.clientY - this.#mouseOffsetY;\r\n\r\n\t\t\tthis.#updateImagePosition(newTop, newLeft);\r\n\t\t}\r\n\t};\r\n\r\n\t#onEndDrag = () => {\r\n\t\tthis.#isDragging = false;\r\n\r\n\t\twindow.removeEventListener('mousemove', this.#onDrag);\r\n\t\twindow.removeEventListener('mouseup', this.#onEndDrag);\r\n\t};\r\n\r\n\t#onWheel = (event: WheelEvent) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.#updateImageScale(event.deltaY * -this.#SCROLL_ZOOM_SPEED, event.clientX, event.clientY);\r\n\t};\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t
\r\n\t\t\t\t\"\"\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t`;\r\n\t}\r\n\r\n\tstatic override styles = css`\r\n\t\t:host {\r\n\t\t\tdisplay: grid;\r\n\t\t\tgrid-template-rows: 1fr auto auto;\r\n\t\t\tgap: var(--uui-size-space-3);\r\n\t\t\theight: 100%;\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t\t#viewport {\r\n\t\t\tbackground-color: #fff;\r\n\t\t\tbackground-image: url('data:image/svg+xml;charset=utf-8,');\r\n\t\t\tbackground-repeat: repeat;\r\n\t\t\tbackground-size: 10px 10px;\r\n\t\t\tcontain: strict;\r\n\t\t\toverflow: hidden;\r\n\t\t\tposition: relative;\r\n\t\t\twidth: 100%;\r\n\t\t\theight: 100%;\r\n\t\t\toutline: 1px solid var(--uui-color-border);\r\n\t\t\tborder-radius: var(--uui-border-radius);\r\n\t\t}\r\n\t\t#actions {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: flex-end;\r\n\t\t\tgap: var(--uui-size-space-1);\r\n\t\t\tmargin-top: 0.5rem;\r\n\t\t}\r\n\r\n\t\t#mask {\r\n\t\t\tdisplay: block;\r\n\t\t\tposition: absolute;\r\n\t\t\tbox-shadow: 0 0 0 2000px hsla(0, 0%, 100%, 0.8);\r\n\t\t\tpointer-events: none;\r\n\t\t}\r\n\r\n\t\t#image {\r\n\t\t\tdisplay: block;\r\n\t\t\tposition: absolute;\r\n\t\t\tuser-select: none;\r\n\t\t}\r\n\r\n\t\t#viewport #image {\r\n\t\t\tcursor: move;\r\n\t\t}\r\n\r\n\t\t#slider {\r\n\t\t\twidth: 100%;\r\n\t\t\theight: 0px; /* TODO: FIX - This is needed to prevent the slider from taking up more space than needed */\r\n\t\t\tmin-height: 22px; /* TODO: FIX - This is needed to prevent the slider from taking up more space than needed */\r\n\t\t}\r\n\t`;\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-image-cropper': UmbImageCropperElement;\r\n\t}\r\n}\r\n","import type { UmbFocalPointModel } from '../../types.js';\r\n\r\nexport class UmbFocalPointChangeEvent extends Event {\r\n\tpublic static readonly TYPE = 'focalpoint-change';\r\n\r\n\tpublic focalPoint: UmbFocalPointModel;\r\n\r\n\tpublic constructor(focalPoint: UmbFocalPointModel, args?: EventInit) {\r\n\t\t// mimics the native change event\r\n\t\tsuper(UmbFocalPointChangeEvent.TYPE, { bubbles: false, composed: false, cancelable: false, ...args });\r\n\t\tthis.focalPoint = focalPoint;\r\n\t}\r\n}\r\n","import type { UmbFocalPointModel } from '../../types.js';\r\nimport type { UmbImageCropperFocalPoint } from './types.js';\r\nimport { UmbFocalPointChangeEvent } from './focalpoint-change.event.js';\r\nimport { drag } from '@umbraco-cms/backoffice/external/uui';\r\nimport { clamp } from '@umbraco-cms/backoffice/utils';\r\nimport {\r\n\tcss,\r\n\tcustomElement,\r\n\tclassMap,\r\n\tifDefined,\r\n\thtml,\r\n\tnothing,\r\n\tstate,\r\n\tproperty,\r\n\tquery,\r\n} from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\n\r\nimport type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';\r\n\r\n@customElement('umb-image-cropper-focus-setter')\r\nexport class UmbImageCropperFocusSetterElement extends UmbLitElement {\r\n\t@query('#image')\r\n\timageElement!: HTMLImageElement;\r\n\r\n\t@query('#wrapper')\r\n\twrapperElement?: HTMLElement;\r\n\r\n\t@query('#focal-point')\r\n\tfocalPointElement!: HTMLElement;\r\n\r\n\t@state()\r\n\tprivate _isDraggingGridHandle = false;\r\n\r\n\t@state()\r\n\tprivate coords = { x: 0, y: 0 };\r\n\r\n\t@property({ attribute: false })\r\n\tset focalPoint(value) {\r\n\t\tthis.#focalPoint = value;\r\n\t\tthis.#setFocalPointStyle(this.#focalPoint.left, this.#focalPoint.top);\r\n\t\tthis.#onFocalPointUpdated();\r\n\t}\r\n\tget focalPoint() {\r\n\t\treturn this.#focalPoint;\r\n\t}\r\n\r\n\t#focalPoint: UmbImageCropperFocalPoint = { left: 0.5, top: 0.5 };\r\n\r\n\t@property({ type: Boolean })\r\n\thideFocalPoint = false;\r\n\r\n\t@property({ type: Boolean, reflect: true })\r\n\tdisabled = false;\r\n\r\n\t@property({ type: String })\r\n\tsrc?: string;\r\n\r\n\t#DOT_RADIUS = 8 as const;\r\n\r\n\tprotected override update(changedProperties: PropertyValueMap | Map): void {\r\n\t\tsuper.update(changedProperties);\r\n\r\n\t\tif (changedProperties.has('src')) {\r\n\t\t\tif (this.src) {\r\n\t\t\t\tthis.#initializeImage();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override firstUpdated(_changedProperties: PropertyValueMap | Map): void {\r\n\t\tsuper.firstUpdated(_changedProperties);\r\n\r\n\t\tthis.style.setProperty('--dot-radius', `${this.#DOT_RADIUS}px`);\r\n\t}\r\n\r\n\tasync #initializeImage() {\r\n\t\tawait this.updateComplete; // Wait for the @query to be resolved\r\n\r\n\t\tif (!this.hideFocalPoint) {\r\n\t\t\tthis.#setFocalPointStyle(this.focalPoint.left, this.focalPoint.top);\r\n\t\t}\r\n\r\n\t\tthis.imageElement.onload = () => {\r\n\t\t\tif (!this.imageElement || !this.wrapperElement) return;\r\n\t\t\tconst imageAspectRatio = this.imageElement.naturalWidth / this.imageElement.naturalHeight;\r\n\t\t\tconst hostRect = this.getBoundingClientRect();\r\n\t\t\tconst image = this.imageElement.getBoundingClientRect();\r\n\r\n\t\t\tif (image.width > hostRect.width) {\r\n\t\t\t\tthis.imageElement.style.width = '100%';\r\n\t\t\t}\r\n\t\t\tif (image.height > hostRect.height) {\r\n\t\t\t\tthis.imageElement.style.height = '100%';\r\n\t\t\t}\r\n\r\n\t\t\tthis.#resetCoords();\r\n\r\n\t\t\tthis.imageElement.style.aspectRatio = `${imageAspectRatio}`;\r\n\t\t\tthis.wrapperElement.style.aspectRatio = `${imageAspectRatio}`;\r\n\t\t};\r\n\t}\r\n\r\n\t#onFocalPointUpdated() {\r\n\t\tif (this.#isCentered(this.#focalPoint)) {\r\n\t\t\tthis.#resetCoords();\r\n\t\t}\r\n\t}\r\n\r\n\t#coordsToFactor(x: number, y: number) {\r\n\t\tconst top = (y / 100 / y) * 50;\r\n\t\tconst left = (x / 100 / x) * 50;\r\n\r\n\t\treturn { top, left };\r\n\t}\r\n\r\n\t#setFocalPoint(x: number, y: number, width: number, height: number) {\r\n\t\tconst left = clamp(x / width, 0, 1);\r\n\t\tconst top = clamp(y / height, 0, 1);\r\n\r\n\t\tthis.#coordsToFactor(x, y);\r\n\r\n\t\tconst focalPoint = { left, top } as UmbFocalPointModel;\r\n\r\n\t\tthis.dispatchEvent(new UmbFocalPointChangeEvent(focalPoint));\r\n\t}\r\n\r\n\t#setFocalPointStyle(left: number, top: number) {\r\n\t\tif (!this.focalPointElement) return;\r\n\r\n\t\tthis.focalPointElement.style.left = `calc(${left * 100}% - ${this.#DOT_RADIUS}px)`;\r\n\t\tthis.focalPointElement.style.top = `calc(${top * 100}% - ${this.#DOT_RADIUS}px)`;\r\n\t}\r\n\r\n\t#isCentered(focalPoint: UmbImageCropperFocalPoint) {\r\n\t\tif (!this.focalPoint) return;\r\n\r\n\t\treturn focalPoint.left === 0.5 && focalPoint.top === 0.5;\r\n\t}\r\n\r\n\t#resetCoords() {\r\n\t\tif (!this.imageElement) return;\r\n\r\n\t\t// Init x and y coords from half of rendered image size, which is equavalient to focal point { left: 0.5, top: 0.5 }.\r\n\t\tthis.coords.x = this.imageElement?.clientWidth / 2;\r\n\t\tthis.coords.y = this.imageElement.clientHeight / 2;\r\n\t}\r\n\r\n\t#handleGridDrag(event: PointerEvent) {\r\n\t\tif (this.disabled || this.hideFocalPoint) return;\r\n\r\n\t\tconst grid = this.wrapperElement;\r\n\t\tconst handle = this.focalPointElement;\r\n\r\n\t\tif (!grid) return;\r\n\r\n\t\tconst { width, height } = grid.getBoundingClientRect();\r\n\r\n\t\thandle?.focus();\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\r\n\t\tthis._isDraggingGridHandle = true;\r\n\r\n\t\tdrag(grid, {\r\n\t\t\tonMove: (x, y) => {\r\n\t\t\t\t// check if coordinates are not NaN (can happen when dragging outside of the grid)\r\n\t\t\t\tif (isNaN(x) || isNaN(y)) return;\r\n\r\n\t\t\t\tthis.coords.x = x;\r\n\t\t\t\tthis.coords.y = y;\r\n\r\n\t\t\t\tthis.#setFocalPoint(x, y, width, height);\r\n\t\t\t},\r\n\t\t\tonStop: () => (this._isDraggingGridHandle = false),\r\n\t\t\tinitialEvent: event,\r\n\t\t});\r\n\t}\r\n\r\n\t#handleGridKeyDown(event: KeyboardEvent) {\r\n\t\tif (this.disabled || this.hideFocalPoint) return;\r\n\r\n\t\tconst increment = event.shiftKey ? 1 : 10;\r\n\r\n\t\tconst grid = this.wrapperElement;\r\n\t\tif (!grid) return;\r\n\r\n\t\tconst { width, height } = grid.getBoundingClientRect();\r\n\r\n\t\tif (event.key === 'ArrowLeft') {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.coords.x = clamp(this.coords.x - increment, 0, width);\r\n\t\t\tthis.#setFocalPoint(this.coords.x, this.coords.y, width, height);\r\n\t\t}\r\n\r\n\t\tif (event.key === 'ArrowRight') {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.coords.x = clamp(this.coords.x + increment, 0, width);\r\n\t\t\tthis.#setFocalPoint(this.coords.x, this.coords.y, width, height);\r\n\t\t}\r\n\r\n\t\tif (event.key === 'ArrowUp') {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.coords.y = clamp(this.coords.y - increment, 0, height);\r\n\t\t\tthis.#setFocalPoint(this.coords.x, this.coords.y, width, height);\r\n\t\t}\r\n\r\n\t\tif (event.key === 'ArrowDown') {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.coords.y = clamp(this.coords.y + increment, 0, height);\r\n\t\t\tthis.#setFocalPoint(this.coords.x, this.coords.y, width, height);\r\n\t\t}\r\n\t}\r\n\r\n\toverride render() {\r\n\t\tif (!this.src) return nothing;\r\n\t\treturn html`\r\n\t\t\t
\r\n\t\t\t\t nothing} src=${this.src} alt=\"\" />\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t`;\r\n\t}\r\n\r\n\tstatic override styles = css`\r\n\t\t:host {\r\n\t\t\tdisplay: flex;\r\n\t\t\twidth: 100%;\r\n\t\t\theight: 100%;\r\n\t\t\tposition: relative;\r\n\t\t\tuser-select: none;\r\n\t\t\tbackground-color: var(--uui-color-surface);\r\n\t\t\toutline: 1px solid var(--uui-color-border);\r\n\t\t}\r\n\t\t/* Wrapper is used to make the focal point position responsive to the image size */\r\n\t\t#wrapper {\r\n\t\t\tposition: relative;\r\n\t\t\tdisplay: flex;\r\n\t\t\tmargin: auto;\r\n\t\t\tmax-width: 100%;\r\n\t\t\tmax-height: 100%;\r\n\t\t\tbox-sizing: border-box;\r\n\t\t\tforced-color-adjust: none;\r\n\t\t}\r\n\t\t:host(:not([hidefocalpoint])) #wrapper {\r\n\t\t\tcursor: crosshair;\r\n\t\t}\r\n\t\t#image {\r\n\t\t\tmargin: auto;\r\n\t\t\tposition: relative;\r\n\t\t}\r\n\t\t#focal-point {\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: block;\r\n\t\t\tposition: absolute;\r\n\t\t\twidth: calc(2 * var(--dot-radius));\r\n\t\t\theight: calc(2 * var(--dot-radius));\r\n\t\t\ttop: 0;\r\n\t\t\tbox-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25);\r\n\t\t\tborder: solid 2px white;\r\n\t\t\tborder-radius: 50%;\r\n\t\t\tpointer-events: none;\r\n\t\t\tbackground-color: var(--uui-palette-spanish-pink-light);\r\n\t\t\ttransition: 150ms transform;\r\n\t\t\tbox-sizing: inherit;\r\n\t\t}\r\n\t\t.focal-point--dragging {\r\n\t\t\tcursor: none;\r\n\t\t\ttransform: scale(1.5);\r\n\t\t}\r\n\t\t#focal-point.hidden {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t`;\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-image-cropper-focus-setter': UmbImageCropperFocusSetterElement;\r\n\t}\r\n}\r\n","import type { UmbImageCropperCrop, UmbImageCropperFocalPoint } from './index.js';\r\nimport { calculateExtrapolatedValue, clamp } from '@umbraco-cms/backoffice/utils';\r\nimport { css, html, nothing, customElement, property, query } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\n\r\n@customElement('umb-image-cropper-preview')\r\nexport class UmbImageCropperPreviewElement extends UmbLitElement {\r\n\t@query('#image') imageElement!: HTMLImageElement;\r\n\t@query('#container') imageContainerElement!: HTMLImageElement;\r\n\r\n\t@property({ type: Object, attribute: false })\r\n\tcrop?: UmbImageCropperCrop;\r\n\r\n\t@property({ type: String, attribute: false })\r\n\tsrc: string = '';\r\n\r\n\t@property({ type: String })\r\n\tlabel?: string;\r\n\r\n\t@property({ attribute: false })\r\n\tget focalPoint() {\r\n\t\treturn this.#focalPoint;\r\n\t}\r\n\tset focalPoint(value) {\r\n\t\tthis.#focalPoint = value;\r\n\t\tthis.#onFocalPointUpdated();\r\n\t}\r\n\r\n\t#focalPoint: UmbImageCropperFocalPoint = { left: 0.5, top: 0.5 };\r\n\r\n\toverride connectedCallback() {\r\n\t\tsuper.connectedCallback();\r\n\t\tthis.#initializeCrop();\r\n\t}\r\n\r\n\tasync #initializeCrop() {\r\n\t\tif (!this.crop) return;\r\n\r\n\t\tawait this.updateComplete; // Wait for the @query to be resolved\r\n\t\tawait new Promise((resolve) => (this.imageElement.onload = () => resolve(this.imageElement)));\r\n\r\n\t\tconst container = this.imageContainerElement.getBoundingClientRect();\r\n\t\tconst cropAspectRatio = this.crop.width / this.crop.height;\r\n\t\tconst imageAspectRatio = this.imageElement.naturalWidth / this.imageElement.naturalHeight;\r\n\r\n\t\tlet imageContainerWidth = 0,\r\n\t\t\timageContainerHeight = 0,\r\n\t\t\timageWidth = 0,\r\n\t\t\timageHeight = 0,\r\n\t\t\timageLeft = 0,\r\n\t\t\timageTop = 0;\r\n\r\n\t\tif (cropAspectRatio > 1) {\r\n\t\t\timageContainerWidth = container.width;\r\n\t\t\timageContainerHeight = container.width / cropAspectRatio;\r\n\t\t} else {\r\n\t\t\timageContainerWidth = container.height * cropAspectRatio;\r\n\t\t\timageContainerHeight = container.height;\r\n\t\t}\r\n\r\n\t\tif (this.crop.coordinates) {\r\n\t\t\tif (cropAspectRatio > 1) {\r\n\t\t\t\t// Landscape-oriented cropping\r\n\t\t\t\tconst cropAmount = this.crop.coordinates.x1 + this.crop.coordinates.x2;\r\n\t\t\t\t// Use crop amount to extrapolate the image width from the container width.\r\n\t\t\t\timageWidth = calculateExtrapolatedValue(imageContainerWidth, cropAmount);\r\n\t\t\t\timageHeight = imageWidth / imageAspectRatio;\r\n\t\t\t\t// Move the image up and left from the top and left edges of the container based on the crop coordinates\r\n\t\t\t\timageTop = -imageHeight * this.crop.coordinates.y1;\r\n\t\t\t\timageLeft = -imageWidth * this.crop.coordinates.x1;\r\n\t\t\t} else {\r\n\t\t\t\t// Portrait-oriented cropping\r\n\t\t\t\tconst cropAmount = this.crop.coordinates.y1 + this.crop.coordinates.y2;\r\n\t\t\t\t// Use crop amount to extrapolate the image height from the container height.\r\n\t\t\t\timageHeight = calculateExtrapolatedValue(imageContainerHeight, cropAmount);\r\n\t\t\t\timageWidth = imageHeight * imageAspectRatio;\r\n\t\t\t\t// Move the image up and left from the top and left edges of the container based on the crop coordinates\r\n\t\t\t\timageTop = -imageHeight * this.crop.coordinates.y1;\r\n\t\t\t\timageLeft = -imageWidth * this.crop.coordinates.x1;\r\n\t\t\t}\r\n\r\n\t\t\t//convert to percentages\r\n\t\t\timageTop = (imageTop / imageContainerHeight) * 100;\r\n\t\t\timageLeft = (imageLeft / imageContainerWidth) * 100;\r\n\r\n\t\t\tthis.imageElement.style.top = `${imageTop}%`;\r\n\t\t\tthis.imageElement.style.left = `${imageLeft}%`;\r\n\t\t} else {\r\n\t\t\t// Set the image size to fill the imageContainer while preserving aspect ratio\r\n\t\t\tif (imageAspectRatio > cropAspectRatio) {\r\n\t\t\t\t// image is wider than crop\r\n\t\t\t\timageHeight = imageContainerHeight;\r\n\t\t\t\timageWidth = imageHeight * imageAspectRatio;\r\n\t\t\t} else {\r\n\t\t\t\t// image is taller than crop\r\n\t\t\t\timageWidth = imageContainerWidth;\r\n\t\t\t\timageHeight = imageWidth / imageAspectRatio;\r\n\t\t\t}\r\n\r\n\t\t\tthis.#onFocalPointUpdated(imageWidth, imageHeight, imageContainerWidth, imageContainerHeight);\r\n\t\t}\r\n\r\n\t\tthis.imageContainerElement.style.width = `${imageContainerWidth}px`;\r\n\t\t// this.imageContainerElement.style.height = `${imageContainerHeight}px`;\r\n\t\tthis.imageContainerElement.style.aspectRatio = `${cropAspectRatio}`;\r\n\r\n\t\t// convert to percentages\r\n\t\timageWidth = (imageWidth / imageContainerWidth) * 100;\r\n\t\timageHeight = (imageHeight / imageContainerHeight) * 100;\r\n\r\n\t\tthis.imageElement.style.width = `${imageWidth}%`;\r\n\t\tthis.imageElement.style.height = `${imageHeight}%`;\r\n\t}\r\n\r\n\t#onFocalPointUpdated(imageWidth?: number, imageHeight?: number, containerWidth?: number, containerHeight?: number) {\r\n\t\tif (!this.crop) return;\r\n\t\tif (!this.imageElement || !this.imageContainerElement) return;\r\n\t\tif (this.crop.coordinates) return;\r\n\r\n\t\tif (!imageWidth || !imageHeight) {\r\n\t\t\tconst image = this.imageElement.getBoundingClientRect();\r\n\t\t\timageWidth = image.width;\r\n\t\t\timageHeight = image.height;\r\n\t\t}\r\n\t\tif (!containerWidth || !containerHeight) {\r\n\t\t\tconst container = this.imageContainerElement.getBoundingClientRect();\r\n\t\t\tcontainerWidth = container.width;\r\n\t\t\tcontainerHeight = container.height;\r\n\t\t}\r\n\t\t// position image so that its center is at the focal point\r\n\t\tlet imageLeft = containerWidth / 2 - imageWidth * this.#focalPoint.left;\r\n\t\tlet imageTop = containerHeight / 2 - imageHeight * this.#focalPoint.top;\r\n\t\t// clamp\r\n\t\timageLeft = clamp(imageLeft, containerWidth - imageWidth, 0);\r\n\t\timageTop = clamp(imageTop, containerHeight - imageHeight, 0);\r\n\r\n\t\t// convert to percentages\r\n\t\timageLeft = (imageLeft / containerWidth) * 100;\r\n\t\timageTop = (imageTop / containerHeight) * 100;\r\n\r\n\t\tthis.imageElement.style.top = `${imageTop}%`;\r\n\t\tthis.imageElement.style.left = `${imageLeft}%`;\r\n\t}\r\n\r\n\toverride render() {\r\n\t\tif (!this.crop) {\r\n\t\t\treturn html`${this.label}`;\r\n\t\t}\r\n\r\n\t\treturn html`\r\n\t\t\t
\r\n\t\t\t\t\"\"\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t${this.crop.label !== undefined ? this.localize.string(this.crop.label) : (this.label ?? this.crop.alias)}\r\n\t\t\t\r\n\t\t\t${this.crop.width} x ${this.crop.height}\r\n\t\t\t${this.crop.coordinates\r\n\t\t\t\t? html`User defined`\r\n\t\t\t\t: nothing}\r\n\t\t`;\r\n\t}\r\n\tstatic override styles = css`\r\n\t\t:host {\r\n\t\t\tdisplay: flex;\r\n\t\t\tflex-direction: column;\r\n\t\t\tpadding: var(--uui-size-space-4);\r\n\t\t\tborder-radius: var(--uui-border-radius);\r\n\t\t\tbackground-color: var(--uui-color-surface);\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\t\t:host(:hover) {\r\n\t\t\tbackground-color: var(--uui-color-surface-alt);\r\n\t\t}\r\n\t\t#container {\r\n\t\t\tdisplay: flex;\r\n\t\t\twidth: 100%;\r\n\t\t\taspect-ratio: 1;\r\n\t\t\toverflow: hidden;\r\n\t\t\tposition: relative;\r\n\t\t\toverflow: hidden;\r\n\t\t\tmargin: auto;\r\n\t\t\tmax-width: 100%;\r\n\t\t\tmax-height: 200px;\r\n\t\t\tuser-select: none;\r\n\t\t}\r\n\t\t#label {\r\n\t\t\tfont-weight: bold;\r\n\t\t}\r\n\t\t#alias {\r\n\t\t\tfont-weight: bold;\r\n\t\t\tmargin-top: var(--uui-size-space-3);\r\n\t\t}\r\n\t\t#dimensions,\r\n\t\t#user-defined {\r\n\t\t\tfont-size: 0.8em;\r\n\t\t}\r\n\t\t#image {\r\n\t\t\tposition: absolute;\r\n\t\t\tpointer-events: none;\r\n\t\t}\r\n\t`;\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-image-cropper-preview': UmbImageCropperPreviewElement;\r\n\t}\r\n}\r\n","import type { UmbImageCropperElement } from './image-cropper.element.js';\r\nimport type {\r\n\tUmbImageCropperCrop,\r\n\tUmbImageCropperCrops,\r\n\tUmbImageCropperFocalPoint,\r\n\tUmbImageCropperPropertyEditorValue,\r\n} from './types.js';\r\nimport type { UmbImageCropChangeEvent } from './crop-change.event.js';\r\nimport type { UmbFocalPointChangeEvent } from './focalpoint-change.event.js';\r\nimport { css, customElement, html, property, repeat, state, when } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\n\r\nimport './image-cropper.element.js';\r\nimport './image-cropper-focus-setter.element.js';\r\nimport './image-cropper-preview.element.js';\r\n\r\n@customElement('umb-image-cropper-field')\r\nexport class UmbInputImageCropperFieldElement extends UmbLitElement {\r\n\t@property({ attribute: false })\r\n\tset value(value) {\r\n\t\tif (!value) {\r\n\t\t\tthis.crops = [];\r\n\t\t\tthis.focalPoint = { left: 0.5, top: 0.5 };\r\n\t\t\tthis.src = '';\r\n\t\t\tthis.#value = undefined;\r\n\t\t} else {\r\n\t\t\tthis.crops = [...value.crops];\r\n\t\t\t// TODO: This is a temporary solution to make sure we have a focal point\r\n\t\t\tthis.focalPoint = value.focalPoint || { left: 0.5, top: 0.5 };\r\n\t\t\tthis.src = value.src;\r\n\t\t\tthis.#value = value;\r\n\t\t}\r\n\r\n\t\tthis.requestUpdate();\r\n\t}\r\n\tget value() {\r\n\t\treturn this.#value;\r\n\t}\r\n\t#value?: UmbImageCropperPropertyEditorValue;\r\n\r\n\t@state()\r\n\tcrops: UmbImageCropperCrops = [];\r\n\r\n\t@state()\r\n\tcurrentCrop?: UmbImageCropperCrop;\r\n\r\n\t@property({ attribute: false })\r\n\tfile?: File;\r\n\r\n\t@property()\r\n\tfileDataUrl?: string;\r\n\r\n\t@state()\r\n\tfocalPoint: UmbImageCropperFocalPoint = { left: 0.5, top: 0.5 };\r\n\r\n\t@property({ type: Boolean })\r\n\thideFocalPoint = false;\r\n\r\n\t@state()\r\n\tsrc = '';\r\n\r\n\tget source() {\r\n\t\tif (this.fileDataUrl) return this.fileDataUrl;\r\n\t\tif (this.src) return this.src;\r\n\t\treturn '';\r\n\t}\r\n\r\n\toverride updated(changedProperties: Map) {\r\n\t\tsuper.updated(changedProperties);\r\n\r\n\t\tif (changedProperties.has('file')) {\r\n\t\t\tif (this.file) {\r\n\t\t\t\tconst reader = new FileReader();\r\n\t\t\t\treader.onload = (event) => {\r\n\t\t\t\t\tthis.fileDataUrl = event.target?.result as string;\r\n\t\t\t\t};\r\n\t\t\t\treader.readAsDataURL(this.file);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fileDataUrl = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected onCropClick(crop: any) {\r\n\t\tconst index = this.crops.findIndex((c) => c.alias === crop.alias);\r\n\r\n\t\tif (index === -1) return;\r\n\r\n\t\tthis.currentCrop = { ...this.crops[index] };\r\n\t}\r\n\r\n\t#onCropChange = (event: UmbImageCropChangeEvent) => {\r\n\t\tconst target = event.target as UmbImageCropperElement;\r\n\t\tconst value = target.value;\r\n\r\n\t\tif (!value) return;\r\n\r\n\t\tconst index = this.crops.findIndex((crop) => crop.alias === value.alias);\r\n\r\n\t\tif (index === undefined) return;\r\n\r\n\t\tthis.crops[index] = value;\r\n\t\tthis.currentCrop = undefined;\r\n\t\tthis.#updateValue();\r\n\t};\r\n\r\n\t#onFocalPointChange = (event: UmbFocalPointChangeEvent) => {\r\n\t\tthis.focalPoint = { top: event.focalPoint.top, left: event.focalPoint.left };\r\n\t\tthis.#updateValue();\r\n\t};\r\n\r\n\t#updateValue() {\r\n\t\tthis.#value = {\r\n\t\t\tcrops: [...this.crops],\r\n\t\t\tfocalPoint: this.focalPoint,\r\n\t\t\tsrc: this.src,\r\n\t\t};\r\n\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\tprotected onResetFocalPoint = () => {\r\n\t\tthis.focalPoint = { left: 0.5, top: 0.5 };\r\n\t\tthis.#updateValue();\r\n\t};\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t
${this.renderMain()}
\r\n\t\t\t
${this.renderSide()}
\r\n\t\t`;\r\n\t}\r\n\r\n\tprotected renderMain() {\r\n\t\tif (this.currentCrop) {\r\n\t\t\treturn html`\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t`;\r\n\t\t}\r\n\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t
${this.renderActions()}
\r\n\t\t`;\r\n\t}\r\n\r\n\tprotected renderActions() {\r\n\t\treturn html`\r\n\t\t\t${when(\r\n\t\t\t\t!this.hideFocalPoint,\r\n\t\t\t\t() =>\r\n\t\t\t\t\thtml``,\r\n\t\t\t)} `;\r\n\t}\r\n\r\n\tprotected renderSide() {\r\n\t\tif (!this.value || !this.crops) return;\r\n\r\n\t\treturn repeat(\r\n\t\t\tthis.crops,\r\n\t\t\t(crop) => crop.alias + JSON.stringify(crop.coordinates),\r\n\t\t\t(crop) =>\r\n\t\t\t\thtml` this.onCropClick(crop)}\r\n\t\t\t\t\t.crop=${crop}\r\n\t\t\t\t\t.focalPoint=${this.focalPoint}\r\n\t\t\t\t\t.src=${this.source}>`,\r\n\t\t);\r\n\t}\r\n\tstatic override styles = css`\r\n\t\t:host {\r\n\t\t\tdisplay: flex;\r\n\t\t\twidth: 100%;\r\n\t\t\tbox-sizing: border-box;\r\n\t\t\tgap: var(--uui-size-space-3);\r\n\t\t\theight: 400px;\r\n\t\t}\r\n\r\n\t\t#main {\r\n\t\t\tmax-width: 500px;\r\n\t\t\tmin-width: 300px;\r\n\t\t\twidth: 100%;\r\n\t\t\theight: 100%;\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: var(--uui-size-space-1);\r\n\t\t\tflex-direction: column;\r\n\t\t}\r\n\r\n\t\t#actions {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: space-between;\r\n\t\t\tmargin-top: 0.5rem;\r\n\t\t}\r\n\r\n\t\tumb-image-cropper-focus-setter {\r\n\t\t\theight: calc(100% - 33px - var(--uui-size-space-1)); /* Temp solution to make room for actions */\r\n\t\t}\r\n\r\n\t\t#side {\r\n\t\t\tdisplay: grid;\r\n\t\t\tgrid-template-columns: repeat(auto-fill, minmax(100px, 1fr));\r\n\t\t\tgap: var(--uui-size-space-3);\r\n\t\t\tflex-grow: 1;\r\n\t\t\toverflow-y: auto;\r\n\t\t\theight: fit-content;\r\n\t\t\tmax-height: 100%;\r\n\t\t}\r\n\t`;\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-image-cropper-field': UmbInputImageCropperFieldElement;\r\n\t}\r\n}\r\n","import { UmbInputImageCropperFieldElement } from '../../../components/input-image-cropper/image-cropper-field.element.js';\r\nimport { css, customElement, html, repeat, when } from '@umbraco-cms/backoffice/external/lit';\r\n\r\n@customElement('umb-image-cropper-editor-field')\r\nexport class UmbImageCropperEditorFieldElement extends UmbInputImageCropperFieldElement {\r\n\t#resetCurrentCrop() {\r\n\t\tthis.currentCrop = undefined;\r\n\t}\r\n\r\n\toverride renderActions() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t${when(\r\n\t\t\t\t!this.hideFocalPoint,\r\n\t\t\t\t() => html`\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t${this.localize.term('content_resetFocalPoint')}\r\n\t\t\t\t\t\r\n\t\t\t\t`,\r\n\t\t\t)}\r\n\t\t`;\r\n\t}\r\n\r\n\toverride renderSide() {\r\n\t\tif (!this.value || !this.crops) return;\r\n\r\n\t\treturn html` \r\n\r\n\t\t\t${repeat(\r\n\t\t\t\tthis.crops,\r\n\t\t\t\t(crop) => crop.alias + JSON.stringify(crop.coordinates),\r\n\t\t\t\t(crop) => html`\r\n\t\t\t\t\t this.onCropClick(crop)}\r\n\t\t\t\t\t\t.crop=${crop}\r\n\t\t\t\t\t\t.focalPoint=${this.focalPoint}\r\n\t\t\t\t\t\t.src=${this.source}>\r\n\t\t\t\t`,\r\n\t\t\t)}`;\r\n\t}\r\n\r\n\tstatic override styles = css`\r\n\t\t:host {\r\n\t\t\tdisplay: flex;\r\n\t\t\twidth: 100%;\r\n\t\t\tbox-sizing: border-box;\r\n\t\t\tgap: var(--uui-size-space-3);\r\n\t\t\theight: 400px;\r\n\t\t}\r\n\r\n\t\t#main {\r\n\t\t\twidth: 100%;\r\n\t\t\theight: 100%;\r\n\t\t\tdisplay: flex;\r\n\t\t\tgap: var(--uui-size-space-1);\r\n\t\t\tflex-direction: column;\r\n\t\t}\r\n\r\n\t\t#actions {\r\n\t\t\tdisplay: flex;\r\n\t\t\tjustify-content: space-between;\r\n\t\t}\r\n\r\n\t\t#reset-focal-point uui-icon {\r\n\t\t\tpadding-right: var(--uui-size-3);\r\n\t\t}\r\n\r\n\t\tslot[name='actions'] {\r\n\t\t\tdisplay: block;\r\n\t\t\tflex: 1;\r\n\t\t}\r\n\r\n\t\t#reset-current-crop[active],\r\n\t\t[active] {\r\n\t\t\tbackground-color: var(--uui-color-current);\r\n\t\t}\r\n\r\n\t\tumb-image-cropper-focus-setter {\r\n\t\t\theight: calc(100% - 33px - var(--uui-size-space-1)); /* Temp solution to make room for actions */\r\n\t\t}\r\n\r\n\t\t#side {\r\n\t\t\tdisplay: grid;\r\n\t\t\tgrid-template-columns: repeat(auto-fill, minmax(100px, 1fr));\r\n\t\t\tflex: none;\r\n\t\t\tgap: var(--uui-size-space-3);\r\n\t\t\tflex-grow: 1;\r\n\t\t\toverflow-y: auto;\r\n\t\t\theight: fit-content;\r\n\t\t\tmax-height: 100%;\r\n\t\t}\r\n\t`;\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-image-cropper-editor-field': UmbImageCropperEditorFieldElement;\r\n\t}\r\n}\r\n","export const UMB_MEDIA_ENTITY_TYPE = 'media';\r\nexport const UMB_MEDIA_ROOT_ENTITY_TYPE = 'media-root';\r\nexport const UMB_MEDIA_PLACEHOLDER_ENTITY_TYPE = 'umb-media-placeholder';\r\n\r\nexport type UmbMediaEntityType = typeof UMB_MEDIA_ENTITY_TYPE;\r\nexport type UmbMediaRootEntityType = typeof UMB_MEDIA_ROOT_ENTITY_TYPE;\r\n\r\nexport type UmbMediaPlaceholderEntityType = typeof UMB_MEDIA_PLACEHOLDER_ENTITY_TYPE;\r\n\r\nexport type UmbMediaEntityTypeUnion = UmbMediaEntityType | UmbMediaRootEntityType;\r\n","import type { UmbMediaDetailModel } from '../../types.js';\r\nimport { UMB_MEDIA_ENTITY_TYPE } from '../../entity.js';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository';\r\nimport type { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport { MediaService } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\n/**\r\n * A data source for the Media that fetches data from the server\r\n * @class UmbMediaServerDataSource\r\n * @implements {RepositoryDetailDataSource}\r\n */\r\nexport class UmbMediaServerDataSource implements UmbDetailDataSource {\r\n\t#host: UmbControllerHost;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbMediaServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbMediaServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new Media scaffold\r\n\t * @param {Partial} [preset]\r\n\t * @returns { UmbMediaDetailModel }\r\n\t * @memberof UmbMediaServerDataSource\r\n\t */\r\n\tasync createScaffold(preset: Partial = {}) {\r\n\t\tconst data: UmbMediaDetailModel = {\r\n\t\t\tentityType: UMB_MEDIA_ENTITY_TYPE,\r\n\t\t\tunique: UmbId.new(),\r\n\t\t\turls: [],\r\n\t\t\tmediaType: {\r\n\t\t\t\tunique: '',\r\n\t\t\t\tcollection: null,\r\n\t\t\t\ticon: null,\r\n\t\t\t},\r\n\t\t\tisTrashed: false,\r\n\t\t\tvalues: [],\r\n\t\t\tvariants: [\r\n\t\t\t\t{\r\n\t\t\t\t\tculture: null,\r\n\t\t\t\t\tsegment: null,\r\n\t\t\t\t\tname: '',\r\n\t\t\t\t\tcreateDate: null,\r\n\t\t\t\t\tupdateDate: null,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\t...preset,\r\n\t\t};\r\n\r\n\t\treturn { data };\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches a Media with the given id from the server\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbMediaServerDataSource\r\n\t */\r\n\tasync read(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, MediaService.getMediaById({ id: unique }));\r\n\r\n\t\tif (error || !data) {\r\n\t\t\treturn { error };\r\n\t\t}\r\n\r\n\t\t// TODO: make data mapper to prevent errors\r\n\t\tconst media: UmbMediaDetailModel = {\r\n\t\t\tentityType: UMB_MEDIA_ENTITY_TYPE,\r\n\t\t\tunique: data.id,\r\n\t\t\tvalues: data.values as UmbMediaDetailModel['values'],\r\n\t\t\tvariants: data.variants.map((variant) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tstate: null,\r\n\t\t\t\t\tculture: variant.culture || null,\r\n\t\t\t\t\tsegment: variant.segment || null,\r\n\t\t\t\t\tname: variant.name,\r\n\t\t\t\t\tcreateDate: variant.createDate,\r\n\t\t\t\t\tupdateDate: variant.updateDate,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\turls: data.urls as UmbMediaDetailModel['urls'],\r\n\t\t\tmediaType: {\r\n\t\t\t\tunique: data.mediaType.id,\r\n\t\t\t\tcollection: data.mediaType.collection ? { unique: data.mediaType.collection.id } : null,\r\n\t\t\t\ticon: data.mediaType.icon,\r\n\t\t\t},\r\n\t\t\tisTrashed: data.isTrashed,\r\n\t\t};\r\n\r\n\t\treturn { data: media };\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts a new Media on the server\r\n\t * @param {UmbMediaDetailModel} model\r\n\t * @param parentUnique\r\n\t * @returns {*}\r\n\t * @memberof UmbMediaServerDataSource\r\n\t */\r\n\tasync create(model: UmbMediaDetailModel, parentUnique: string | null = null) {\r\n\t\tif (!model) throw new Error('Media is missing');\r\n\t\tif (!model.unique) throw new Error('Media unique is missing');\r\n\r\n\t\t// TODO: make data mapper to prevent errors\r\n\t\tconst requestBody: CreateMediaRequestModel = {\r\n\t\t\tid: model.unique,\r\n\t\t\tparent: parentUnique ? { id: parentUnique } : null,\r\n\t\t\tmediaType: { id: model.mediaType.unique },\r\n\t\t\tvalues: model.values,\r\n\t\t\tvariants: model.variants.map((variant) => ({\r\n\t\t\t\tculture: variant.culture || null,\r\n\t\t\t\tsegment: variant.segment || null,\r\n\t\t\t\tname: variant.name,\r\n\t\t\t})),\r\n\t\t};\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tMediaService.postMedia({\r\n\t\t\t\trequestBody,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tif (data) {\r\n\t\t\treturn this.read(data);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a Media on the server\r\n\t * @param {UmbMediaDetailModel} Media\r\n\t * @param model\r\n\t * @returns {*}\r\n\t * @memberof UmbMediaServerDataSource\r\n\t */\r\n\tasync update(model: UmbMediaDetailModel) {\r\n\t\tif (!model.unique) throw new Error('Unique is missing');\r\n\r\n\t\t// TODO: make data mapper to prevent errors\r\n\t\tconst requestBody: UpdateMediaRequestModel = {\r\n\t\t\tvalues: model.values,\r\n\t\t\tvariants: model.variants,\r\n\t\t};\r\n\r\n\t\tconst { error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tMediaService.putMediaById({\r\n\t\t\t\tid: model.unique,\r\n\t\t\t\trequestBody,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tif (!error) {\r\n\t\t\treturn this.read(model.unique);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes a Media on the server\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbMediaServerDataSource\r\n\t */\r\n\tasync delete(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\r\n\t\treturn tryExecuteAndNotify(this.#host, MediaService.deleteMediaById({ id: unique }));\r\n\t}\r\n}\r\n","import type { UmbMediaDetailModel } from '../../types.js';\r\nimport { UmbMediaServerDataSource } from './media-detail.server.data-source.js';\r\nimport { UMB_MEDIA_DETAIL_STORE_CONTEXT } from './media-detail.store.context-token.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository';\r\n\r\nexport class UmbMediaDetailRepository extends UmbDetailRepositoryBase {\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, UmbMediaServerDataSource, UMB_MEDIA_DETAIL_STORE_CONTEXT);\r\n\t}\r\n}\r\n\r\nexport { UmbMediaDetailRepository as api };\r\n\r\nexport default UmbMediaDetailRepository;\r\n","import { UMB_MEDIA_ENTITY_TYPE } from '../../entity.js';\r\nimport type { UmbMediaItemModel } from './types.js';\r\nimport type { MediaItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport { MediaService } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\n/**\r\n * A data source for Media items that fetches data from the server\r\n * @class UmbMediaItemServerDataSource\r\n * @implements {MediaTreeDataSource}\r\n */\r\nexport class UmbMediaItemServerDataSource extends UmbItemServerDataSourceBase<\r\n\tMediaItemResponseModel,\r\n\tUmbMediaItemModel\r\n> {\r\n\t#host: UmbControllerHost;\r\n\t/**\r\n\t * Creates an instance of UmbMediaItemServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbMediaItemServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, {\r\n\t\t\tgetItems,\r\n\t\t\tmapper,\r\n\t\t});\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated - The search method will be removed in v17. Use the\r\n\t * Use the UmbMediaSearchProvider instead.\r\n\t * Get it from:\r\n\t * ```ts\r\n\t * import { UmbMediaSearchProvider } from '@umbraco-cms/backoffice/media';\r\n\t * ```\r\n\t */\r\n\tasync search({ query, skip, take }: { query: string; skip: number; take: number }) {\r\n\t\tconst { data, error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tMediaService.getItemMediaSearch({ query, skip, take }),\r\n\t\t);\r\n\t\tconst mapped = data?.items.map((item) => mapper(item));\r\n\t\treturn { data: mapped, error };\r\n\t}\r\n}\r\n\r\n/* eslint-disable local-rules/no-direct-api-import */\r\nconst getItems = (uniques: Array) => MediaService.getItemMedia({ id: uniques });\r\n\r\nconst mapper = (item: MediaItemResponseModel): UmbMediaItemModel => {\r\n\treturn {\r\n\t\tentityType: UMB_MEDIA_ENTITY_TYPE,\r\n\t\thasChildren: item.hasChildren,\r\n\t\tisTrashed: item.isTrashed,\r\n\t\tunique: item.id,\r\n\t\tmediaType: {\r\n\t\t\tunique: item.mediaType.id,\r\n\t\t\ticon: item.mediaType.icon,\r\n\t\t\tcollection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null,\r\n\t\t},\r\n\t\tname: item.variants[0]?.name, // TODO: get correct variant name\r\n\t\tparent: item.parent ? { unique: item.parent.id } : null,\r\n\t\tvariants: item.variants.map((variant) => {\r\n\t\t\treturn {\r\n\t\t\t\tculture: variant.culture || null,\r\n\t\t\t\tname: variant.name,\r\n\t\t\t};\r\n\t\t}),\r\n\t};\r\n};\r\n","import { UmbMediaItemServerDataSource } from './media-item.server.data-source.js';\r\nimport { UMB_MEDIA_ITEM_STORE_CONTEXT } from './media-item.store.context-token.js';\r\nimport type { UmbMediaItemModel } from './types.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository';\r\n\r\nexport class UmbMediaItemRepository extends UmbItemRepositoryBase {\r\n\t#dataSource: UmbMediaItemServerDataSource;\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, UmbMediaItemServerDataSource, UMB_MEDIA_ITEM_STORE_CONTEXT);\r\n\t\tthis.#dataSource = new UmbMediaItemServerDataSource(this);\r\n\t}\r\n\r\n\t/**\r\n\t * @param root0\r\n\t * @param root0.query\r\n\t * @param root0.skip\r\n\t * @param root0.take\r\n\t * @deprecated - The search method will be removed in v17. Use the\r\n\t * Use the UmbMediaSearchProvider instead.\r\n\t * Get it from:\r\n\t * ```ts\r\n\t * import { UmbMediaSearchProvider } from '@umbraco-cms/backoffice/media';\r\n\t */\r\n\tasync search({ query, skip, take }: { query: string; skip: number; take: number }) {\r\n\t\treturn this.#dataSource.search({ query, skip, take });\r\n\t}\r\n}\r\n\r\nexport default UmbMediaItemRepository;\r\n","import { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\n\r\nexport interface UmbMediaPickerModalData {\r\n\tstartNode?: string | null;\r\n\tmultiple?: boolean;\r\n\tpickableFilter?: (item: ItemType) => boolean;\r\n\tfilter?: (item: ItemType) => boolean;\r\n}\r\n\r\nexport interface UmbMediaPickerModalValue {\r\n\tselection: string[];\r\n}\r\n\r\nexport const UMB_MEDIA_PICKER_MODAL = new UmbModalToken, UmbMediaPickerModalValue>(\r\n\t'Umb.Modal.MediaPicker',\r\n\t{\r\n\t\tmodal: {\r\n\t\t\ttype: 'sidebar',\r\n\t\t\tsize: 'medium',\r\n\t\t},\r\n\t},\r\n);\r\n","import { UmbMediaUrlRepository } from '../../repository/index.js';\r\nimport { UMB_MEDIA_PICKER_MODAL } from '../media-picker/media-picker-modal.token.js';\r\nimport type { UmbCropModel } from '../../types.js';\r\nimport type { UmbInputImageCropperFieldElement } from '../../components/input-image-cropper/image-cropper-field.element.js';\r\nimport type { UmbImageCropperPropertyEditorValue } from '../../components/index.js';\r\nimport type {\r\n\tUmbImageCropperEditorModalData,\r\n\tUmbImageCropperEditorModalValue,\r\n} from './image-cropper-editor-modal.token.js';\r\nimport { css, customElement, html, state } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';\r\nimport { UMB_MODAL_MANAGER_CONTEXT, UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';\r\nimport { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace';\r\nimport type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal';\r\nimport './components/image-cropper-editor-field.element.js';\r\n\r\n/** TODO Make some of the components from property editor image cropper reuseable for this modal... */\r\n\r\n@customElement('umb-image-cropper-editor-modal')\r\nexport class UmbImageCropperEditorModalElement extends UmbModalBaseElement<\r\n\tUmbImageCropperEditorModalData,\r\n\tUmbImageCropperEditorModalValue\r\n> {\r\n\t#urlRepository = new UmbMediaUrlRepository(this);\r\n\r\n\t@state()\r\n\tprivate _imageCropperValue?: UmbImageCropperPropertyEditorValue;\r\n\r\n\t@state()\r\n\tprivate _key: string = '';\r\n\r\n\t@state()\r\n\tprivate _unique: string = '';\r\n\r\n\t@state()\r\n\tprivate _hideFocalPoint = false;\r\n\r\n\t@state()\r\n\tprivate _crops: Array = [];\r\n\r\n\t@state()\r\n\tprivate _editMediaPath = '';\r\n\r\n\t@state()\r\n\tprivate _pickableFilter?: (item: any) => boolean;\r\n\r\n\t#modalManager?: UmbModalManagerContext;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (context) => {\r\n\t\t\tthis.#modalManager = context;\r\n\t\t});\r\n\r\n\t\tnew UmbModalRouteRegistrationController(this, UMB_WORKSPACE_MODAL)\r\n\t\t\t.addAdditionalPath('media')\r\n\t\t\t.onSetup(() => {\r\n\t\t\t\treturn { data: { entityType: 'media', preset: {} } };\r\n\t\t\t})\r\n\t\t\t.observeRouteBuilder((routeBuilder) => {\r\n\t\t\t\tthis._editMediaPath = routeBuilder({});\r\n\t\t\t});\r\n\t}\r\n\r\n\toverride connectedCallback(): void {\r\n\t\tsuper.connectedCallback();\r\n\r\n\t\tthis._key = this.data?.key ?? '';\r\n\t\tthis._unique = this.data?.unique ?? '';\r\n\r\n\t\tthis._hideFocalPoint = this.data?.hideFocalPoint ?? false;\r\n\t\tthis._crops = this.data?.cropOptions ?? [];\r\n\t\tthis._pickableFilter = this.data?.pickableFilter;\r\n\r\n\t\tthis.#getSrc();\r\n\t}\r\n\r\n\tasync #getSrc() {\r\n\t\tconst { data } = await this.#urlRepository.requestItems([this._unique]);\r\n\t\tconst item = data?.[0];\r\n\r\n\t\tif (!item?.url) return;\r\n\r\n\t\t/**\r\n\t\t * Combine the crops from the property editor with the stored crops and ignore any invalid crops\r\n\t\t * (e.g. crops that have been removed from the property editor)\r\n\t\t * @remark If a crop is removed from the property editor, it will be ignored and not saved\r\n\t\t */\r\n\t\tconst crops: Array = this._crops.map((crop) => {\r\n\t\t\tconst existingCrop = this.value.crops?.find((c) => c.alias === crop.alias);\r\n\t\t\treturn existingCrop ? { ...crop, ...existingCrop } : crop;\r\n\t\t});\r\n\r\n\t\tconst value: UmbImageCropperPropertyEditorValue = {\r\n\t\t\t...this.value,\r\n\t\t\tsrc: item.url,\r\n\t\t\tcrops,\r\n\t\t\tfocalPoint: this.value.focalPoint ?? { left: 0.5, top: 0.5 },\r\n\t\t};\r\n\t\tthis._imageCropperValue = value;\r\n\t}\r\n\r\n\tasync #openMediaPicker() {\r\n\t\tconst modal = this.#modalManager?.open(this, UMB_MEDIA_PICKER_MODAL, {\r\n\t\t\tdata: { multiple: false, pickableFilter: this._pickableFilter },\r\n\t\t\tvalue: { selection: [this._unique] },\r\n\t\t});\r\n\t\tconst data = await modal?.onSubmit().catch(() => null);\r\n\t\tif (!data) return;\r\n\r\n\t\tthis._unique = data.selection[0];\r\n\t\tthis.value = { ...this.value, unique: this._unique };\r\n\t\tthis.#getSrc();\r\n\t}\r\n\r\n\t#onChange(e: CustomEvent & { target: UmbInputImageCropperFieldElement }) {\r\n\t\tconst value = e.target.value;\r\n\t\tif (!value) return;\r\n\r\n\t\tif (this._imageCropperValue) {\r\n\t\t\tthis._imageCropperValue.crops = value.crops;\r\n\t\t\tthis._imageCropperValue.focalPoint = value.focalPoint;\r\n\t\t}\r\n\r\n\t\tthis.value = { key: this._key, unique: this._unique, crops: value.crops, focalPoint: value.focalPoint };\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t${this.#renderBody()}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderBody() {\r\n\t\treturn html`\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t${this.localize.term('mediaPicker_changeMedia')}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t${this.localize.term('mediaPicker_openMedia')}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\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\tcss`\r\n\t\t\t#layout {\r\n\t\t\t\theight: 100%;\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: column;\r\n\t\t\t\tjustify-content: space-between;\r\n\t\t\t}\r\n\t\t\tumb-image-cropper-editor-field {\r\n\t\t\t\tflex-grow: 1;\r\n\t\t\t}\r\n\r\n\t\t\t#actions {\r\n\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\tgap: var(--uui-size-space-3);\r\n\t\t\t}\r\n\t\t\tuui-icon {\r\n\t\t\t\tpadding-right: var(--uui-size-3);\r\n\t\t\t}\r\n\r\n\t\t\t#options {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tjustify-content: center;\r\n\t\t\t}\r\n\r\n\t\t\timg {\r\n\t\t\t\tmax-width: 80%;\r\n\t\t\t\tbackground-image: url('data:image/svg+xml;charset=utf-8,');\r\n\t\t\t\tbackground-size: 10px 10px;\r\n\t\t\t\tbackground-repeat: repeat;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbImageCropperEditorModalElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-image-cropper-editor-modal': UmbImageCropperEditorModalElement;\r\n\t}\r\n}\r\n","import type { UmbImageCropperCrop } from '../../components/index.js';\r\nimport type { UmbCropModel } from '../../property-editors/types.js';\r\nimport { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\n\r\nexport interface UmbImageCropperEditorModalData {\r\n\tkey: string;\r\n\tunique: string;\r\n\thideFocalPoint: boolean;\r\n\tcropOptions: Array;\r\n\tpickableFilter?: (item: ItemType) => boolean;\r\n}\r\n\r\nexport interface UmbImageCropperEditorModalValue {\r\n\tkey: string;\r\n\tunique: string;\r\n\tcrops: Array;\r\n\tfocalPoint: { left: number; top: number };\r\n}\r\n\r\nexport const UMB_IMAGE_CROPPER_EDITOR_MODAL = new UmbModalToken<\r\n\tUmbImageCropperEditorModalData,\r\n\tUmbImageCropperEditorModalValue\r\n>('Umb.Modal.ImageCropperEditor', {\r\n\tmodal: {\r\n\t\ttype: 'sidebar',\r\n\t\tsize: 'full',\r\n\t},\r\n});\r\n","import { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\n\r\nexport interface UmbMediaCaptionAltTextModalData {\r\n\tmediaUnique: string;\r\n}\r\n\r\nexport type UmbMediaCaptionAltTextModalValue = {\r\n\taltText?: string;\r\n\tcaption?: string;\r\n\turl: string;\r\n};\r\n\r\nexport const UMB_MEDIA_CAPTION_ALT_TEXT_MODAL = new UmbModalToken<\r\n\tUmbMediaCaptionAltTextModalData,\r\n\tUmbMediaCaptionAltTextModalValue\r\n>('Umb.Modal.MediaCaptionAltText', {\r\n\tmodal: {\r\n\t\ttype: 'sidebar',\r\n\t\tsize: 'small',\r\n\t},\r\n});\r\n","import { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE } from '../entity.js';\r\nimport type {\r\n\tUmbMediaTreeChildrenOfRequestArgs,\r\n\tUmbMediaTreeItemModel,\r\n\tUmbMediaTreeRootItemsRequestArgs,\r\n} from './types.js';\r\nimport type { UmbTreeAncestorsOfRequestArgs } from '@umbraco-cms/backoffice/tree';\r\nimport { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree';\r\nimport { MediaService, type MediaTreeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\n\r\n/**\r\n * A data source for the Media tree that fetches data from the server\r\n * @class UmbMediaTreeServerDataSource\r\n * @augments {UmbTreeServerDataSourceBase}\r\n */\r\nexport class UmbMediaTreeServerDataSource extends UmbTreeServerDataSourceBase<\r\n\tMediaTreeItemResponseModel,\r\n\tUmbMediaTreeItemModel,\r\n\tUmbMediaTreeRootItemsRequestArgs,\r\n\tUmbMediaTreeChildrenOfRequestArgs\r\n> {\r\n\t/**\r\n\t * Creates an instance of UmbMediaTreeServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbMediaTreeServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, {\r\n\t\t\tgetRootItems,\r\n\t\t\tgetChildrenOf,\r\n\t\t\tgetAncestorsOf,\r\n\t\t\tmapper,\r\n\t\t});\r\n\t}\r\n}\r\n\r\nconst getRootItems = (args: UmbMediaTreeRootItemsRequestArgs) =>\r\n\t// eslint-disable-next-line local-rules/no-direct-api-import\r\n\tMediaService.getTreeMediaRoot({ dataTypeId: args.dataType?.unique, skip: args.skip, take: args.take });\r\n\r\nconst getChildrenOf = (args: UmbMediaTreeChildrenOfRequestArgs) => {\r\n\tif (args.parent.unique === null) {\r\n\t\treturn getRootItems(args);\r\n\t} else {\r\n\t\t// eslint-disable-next-line local-rules/no-direct-api-import\r\n\t\treturn MediaService.getTreeMediaChildren({\r\n\t\t\tparentId: args.parent.unique,\r\n\t\t\tdataTypeId: args.dataType?.unique,\r\n\t\t\tskip: args.skip,\r\n\t\t\ttake: args.take,\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst getAncestorsOf = (args: UmbTreeAncestorsOfRequestArgs) =>\r\n\t// eslint-disable-next-line local-rules/no-direct-api-import\r\n\tMediaService.getTreeMediaAncestors({\r\n\t\tdescendantId: args.treeItem.unique,\r\n\t});\r\n\r\nconst mapper = (item: MediaTreeItemResponseModel): UmbMediaTreeItemModel => {\r\n\treturn {\r\n\t\tunique: item.id,\r\n\t\tparent: {\r\n\t\t\tunique: item.parent ? item.parent.id : null,\r\n\t\t\tentityType: item.parent ? UMB_MEDIA_ENTITY_TYPE : UMB_MEDIA_ROOT_ENTITY_TYPE,\r\n\t\t},\r\n\t\tentityType: UMB_MEDIA_ENTITY_TYPE,\r\n\t\thasChildren: item.hasChildren,\r\n\t\tnoAccess: item.noAccess,\r\n\t\tisTrashed: item.isTrashed,\r\n\t\tisFolder: false,\r\n\t\tmediaType: {\r\n\t\t\tunique: item.mediaType.id,\r\n\t\t\ticon: item.mediaType.icon,\r\n\t\t\tcollection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null,\r\n\t\t},\r\n\t\tname: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution.\r\n\t\tvariants: item.variants.map((variant) => {\r\n\t\t\treturn {\r\n\t\t\t\tname: variant.name,\r\n\t\t\t\tculture: variant.culture || null,\r\n\t\t\t};\r\n\t\t}),\r\n\t\tcreateDate: item.createDate,\r\n\t};\r\n};\r\n","import type UmbMediaTreeStore from './media-tree.store.js';\r\nimport { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport const UMB_MEDIA_TREE_STORE_CONTEXT = new UmbContextToken('UmbMediaTreeStore');\r\n","import { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../entity.js';\r\nimport { UmbMediaTreeServerDataSource } from './media-tree.server.data-source.js';\r\nimport type {\r\n\tUmbMediaTreeChildrenOfRequestArgs,\r\n\tUmbMediaTreeItemModel,\r\n\tUmbMediaTreeRootItemsRequestArgs,\r\n\tUmbMediaTreeRootModel,\r\n} from './types.js';\r\nimport { UMB_MEDIA_TREE_STORE_CONTEXT } from './media-tree.store.context-token.js';\r\nimport { UmbTreeRepositoryBase } from '@umbraco-cms/backoffice/tree';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\n\r\nexport class UmbMediaTreeRepository\r\n\textends UmbTreeRepositoryBase<\r\n\t\tUmbMediaTreeItemModel,\r\n\t\tUmbMediaTreeRootModel,\r\n\t\tUmbMediaTreeRootItemsRequestArgs,\r\n\t\tUmbMediaTreeChildrenOfRequestArgs\r\n\t>\r\n\timplements UmbApi\r\n{\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, UmbMediaTreeServerDataSource, UMB_MEDIA_TREE_STORE_CONTEXT);\r\n\t}\r\n\r\n\tasync requestTreeRoot() {\r\n\t\tconst { data: treeRootData } = await this._treeSource.getRootItems({ skip: 0, take: 1 });\r\n\t\tconst hasChildren = treeRootData ? treeRootData.total > 0 : false;\r\n\r\n\t\tconst data: UmbMediaTreeRootModel = {\r\n\t\t\tunique: null,\r\n\t\t\tentityType: UMB_MEDIA_ROOT_ENTITY_TYPE,\r\n\t\t\tname: '#treeHeaders_media',\r\n\t\t\thasChildren,\r\n\t\t\tisFolder: true,\r\n\t\t};\r\n\r\n\t\treturn { data };\r\n\t}\r\n}\r\n\r\nexport default UmbMediaTreeRepository;\r\n","import type { UmbMediaPathModel } from '../types.js';\r\nimport type { UmbMediaDetailModel } from '../../../types.js';\r\nimport { UmbMediaDetailRepository } from '../../../repository/index.js';\r\nimport { UmbMediaTreeRepository } from '../../../tree/index.js';\r\nimport { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../../entity.js';\r\nimport {\r\n\tcss,\r\n\thtml,\r\n\tcustomElement,\r\n\tstate,\r\n\trepeat,\r\n\tproperty,\r\n\ttype PropertyValues,\r\n} from '@umbraco-cms/backoffice/external/lit';\r\nimport type { UUIInputElement, UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport { getUmbracoFolderUnique } from '@umbraco-cms/backoffice/media-type';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\n\r\nconst root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE };\r\n\r\n@customElement('umb-media-picker-folder-path')\r\nexport class UmbMediaPickerFolderPathElement extends UmbLitElement {\r\n\t#mediaTreeRepository = new UmbMediaTreeRepository(this); // used to get file structure\r\n\t#mediaDetailRepository = new UmbMediaDetailRepository(this); // used to create folders\r\n\r\n\t@property({ attribute: false })\r\n\tstartNode?: UmbMediaPathModel = root;\r\n\r\n\t@property({ attribute: false })\r\n\tpublic set currentMedia(value: UmbMediaPathModel) {\r\n\t\tif (value !== this._currentMedia) {\r\n\t\t\tthis._currentMedia = value;\r\n\t\t\tthis.#loadPath();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get currentMedia() {\r\n\t\treturn this._currentMedia;\r\n\t}\r\n\r\n\t@state()\r\n\tprivate _currentMedia: UmbMediaPathModel = root;\r\n\r\n\t@state()\r\n\tprivate _paths: Array = [root];\r\n\r\n\t@state()\r\n\tprivate _typingNewFolder = false;\r\n\r\n\tprotected override firstUpdated(_changedProperties: PropertyValues): void {\r\n\t\tsuper.firstUpdated(_changedProperties);\r\n\t\tthis.#loadPath();\r\n\t}\r\n\r\n\tasync #loadPath() {\r\n\t\tconst unique = this._currentMedia.unique;\r\n\t\tconst entityType = this._currentMedia.entityType;\r\n\r\n\t\tconst items = unique\r\n\t\t\t? (\r\n\t\t\t\t\tawait this.#mediaTreeRepository.requestTreeItemAncestors({\r\n\t\t\t\t\t\ttreeItem: { unique, entityType },\r\n\t\t\t\t\t})\r\n\t\t\t\t).data || []\r\n\t\t\t: [];\r\n\r\n\t\tconst paths: Array = items.map((item) => ({\r\n\t\t\tname: item.name,\r\n\t\t\tunique: item.unique,\r\n\t\t\tentityType: item.entityType,\r\n\t\t}));\r\n\r\n\t\tif (!this.startNode) {\r\n\t\t\tpaths.unshift(root);\r\n\t\t}\r\n\r\n\t\tthis._paths = [...paths];\r\n\t}\r\n\r\n\t#goToFolder(entity: UmbMediaPathModel) {\r\n\t\tthis._paths = [...this._paths].slice(0, this._paths.findIndex((path) => path.unique === entity.unique) + 1);\r\n\t\tthis.currentMedia = entity;\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\t#focusFolderInput() {\r\n\t\tthis._typingNewFolder = true;\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tconst element = this.getHostElement().shadowRoot!.querySelector('#new-folder') as UUIInputElement;\r\n\t\t\telement.focus();\r\n\t\t\telement.select();\r\n\t\t});\r\n\t}\r\n\r\n\tasync #addFolder(e: UUIInputEvent) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tconst newName = e.target.value as string;\r\n\t\tthis._typingNewFolder = false;\r\n\t\tif (!newName) return;\r\n\r\n\t\tconst newUnique = UmbId.new();\r\n\t\tconst parentUnique = this._paths[this._paths.length - 1].unique;\r\n\r\n\t\tconst preset: Partial = {\r\n\t\t\tunique: newUnique,\r\n\t\t\tmediaType: {\r\n\t\t\t\tunique: getUmbracoFolderUnique(),\r\n\t\t\t\tcollection: null,\r\n\t\t\t},\r\n\t\t\tvariants: [\r\n\t\t\t\t{\r\n\t\t\t\t\tculture: null,\r\n\t\t\t\t\tsegment: null,\r\n\t\t\t\t\tname: newName,\r\n\t\t\t\t\tcreateDate: null,\r\n\t\t\t\t\tupdateDate: null,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t\tconst { data: scaffold } = await this.#mediaDetailRepository.createScaffold(preset);\r\n\t\tif (!scaffold) return;\r\n\r\n\t\tconst { data } = await this.#mediaDetailRepository.create(scaffold, parentUnique);\r\n\t\tif (!data) return;\r\n\r\n\t\tconst name = data.variants[0].name;\r\n\t\tconst unique = data.unique;\r\n\t\tconst entityType = data.entityType;\r\n\r\n\t\tthis._paths = [...this._paths, { name, unique, entityType }];\r\n\t\tthis.currentMedia = { name, unique, entityType };\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`
\r\n\t\t\t${repeat(\r\n\t\t\t\tthis._paths,\r\n\t\t\t\t(path) => path.unique,\r\n\t\t\t\t(path) =>\r\n\t\t\t\t\thtml` this.#goToFolder(path)}>/`,\r\n\t\t\t)}${this._typingNewFolder\r\n\t\t\t\t? html``\r\n\t\t\t\t: html`+`}\r\n\t\t
`;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tcss`\r\n\t\t\t#path {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\talign-items: center;\r\n\t\t\t\tmargin: 0 var(--uui-size-3);\r\n\t\t\t}\r\n\t\t\t#path uui-button {\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t}\r\n\t\t\t#path uui-input {\r\n\t\t\t\theight: 100%;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbMediaPickerFolderPathElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-media-picker-folder-path': UmbMediaPickerFolderPathElement;\r\n\t}\r\n}\r\n","import { UmbMediaDetailRepository } from '../../../repository/detail/media-detail.repository.js';\r\nimport { css, html, customElement, state, repeat, property } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { type UmbAllowedMediaTypeModel, UmbMediaTypeStructureRepository } from '@umbraco-cms/backoffice/media-type';\r\n\r\n@customElement('umb-media-picker-create-item')\r\nexport class UmbMediaPickerCreateItemElement extends UmbLitElement {\r\n\t#mediaTypeStructure = new UmbMediaTypeStructureRepository(this); // used to get allowed media items\r\n\t#mediaDetailRepository = new UmbMediaDetailRepository(this); // used to get media type of node\r\n\r\n\tprivate _node: string | null = null;\r\n\r\n\t@property()\r\n\tpublic set node(value: string | null) {\r\n\t\tthis._node = value;\r\n\t\tthis.#getAllowedMediaTypes();\r\n\t}\r\n\r\n\tpublic get node() {\r\n\t\treturn this._node;\r\n\t}\r\n\r\n\t@state()\r\n\tprivate _popoverOpen = false;\r\n\r\n\t@state()\r\n\tprivate _allowedMediaTypes: Array = [];\r\n\r\n\tasync #getNodeMediaType() {\r\n\t\tif (!this._node) return null;\r\n\r\n\t\tconst { data } = await this.#mediaDetailRepository.requestByUnique(this.node!);\r\n\t\treturn data?.mediaType.unique ?? null;\r\n\t}\r\n\r\n\tasync #getAllowedMediaTypes() {\r\n\t\tconst mediaType = await this.#getNodeMediaType();\r\n\r\n\t\tconst { data: allowedMediaTypes } = await this.#mediaTypeStructure.requestAllowedChildrenOf(mediaType);\r\n\t\tthis._allowedMediaTypes = allowedMediaTypes?.items ?? [];\r\n\t}\r\n\r\n\t#onPopoverToggle(event: ToggleEvent) {\r\n\t\t// TODO: This ignorer is just neede for JSON SCHEMA TO WORK, As its not updated with latest TS jet.\r\n\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t// @ts-ignore\r\n\t\tthis._popoverOpen = event.newState === 'open';\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t${this.localize.term('actions_create')}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t${!this._allowedMediaTypes.length\r\n\t\t\t\t\t\t\t? html`
${this.localize.term('mediaPicker_notAllowed')}
`\r\n\t\t\t\t\t\t\t: repeat(\r\n\t\t\t\t\t\t\t\t\tthis._allowedMediaTypes,\r\n\t\t\t\t\t\t\t\t\t(item) => item.unique,\r\n\t\t\t\t\t\t\t\t\t(item) =>\r\n\t\t\t\t\t\t\t\t\t\thtml`\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t`,\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\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\tcss`\r\n\t\t\t#not-allowed {\r\n\t\t\t\tpadding: var(--uui-size-space-3);\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbMediaPickerCreateItemElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-media-picker-create-item': UmbMediaPickerCreateItemElement;\r\n\t}\r\n}\r\n","import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js';\r\nimport type { UmbMediaSearchItemModel } from './types.js';\r\nimport type { UmbSearchDataSource, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { MediaService } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\n/**\r\n * A data source for the Rollback that fetches data from the server\r\n * @class UmbMediaSearchServerDataSource\r\n * @implements {RepositoryDetailDataSource}\r\n */\r\nexport class UmbMediaSearchServerDataSource implements UmbSearchDataSource {\r\n\t#host: UmbControllerHost;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbMediaSearchServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbMediaSearchServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * Get a list of versions for a data\r\n\t * @param args\r\n\t * @returns {*}\r\n\t * @memberof UmbMediaSearchServerDataSource\r\n\t */\r\n\tasync search(args: UmbSearchRequestArgs) {\r\n\t\tconst { data, error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tMediaService.getItemMediaSearch({\r\n\t\t\t\tquery: args.query,\r\n\t\t\t\tparentId: args.searchFrom?.unique || undefined,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tif (data) {\r\n\t\t\tconst mappedItems: Array = data.items.map((item) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tentityType: UMB_MEDIA_ENTITY_TYPE,\r\n\t\t\t\t\thasChildren: item.hasChildren,\r\n\t\t\t\t\thref: '/section/media/workspace/media/edit/' + item.id,\r\n\t\t\t\t\tisTrashed: item.isTrashed,\r\n\t\t\t\t\tunique: item.id,\r\n\t\t\t\t\tmediaType: {\r\n\t\t\t\t\t\tcollection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null,\r\n\t\t\t\t\t\ticon: item.mediaType.icon,\r\n\t\t\t\t\t\tunique: item.mediaType.id,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tname: item.variants[0]?.name, // TODO: get correct variant name\r\n\t\t\t\t\tparent: item.parent ? { unique: item.parent.id } : null,\r\n\t\t\t\t\tvariants: item.variants.map((variant) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tculture: variant.culture || null,\r\n\t\t\t\t\t\t\tname: variant.name,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}),\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\treturn { data: { items: mappedItems, total: data.total } };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n}\r\n","import { UmbMediaSearchServerDataSource } from './media-search.server.data-source.js';\r\nimport type { UmbMediaSearchItemModel } from './types.js';\r\nimport type { UmbSearchRepository, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\n\r\nexport class UmbMediaSearchRepository\r\n\textends UmbControllerBase\r\n\timplements UmbSearchRepository, UmbApi\r\n{\r\n\t#dataSource: UmbMediaSearchServerDataSource;\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host);\r\n\r\n\t\tthis.#dataSource = new UmbMediaSearchServerDataSource(this);\r\n\t}\r\n\r\n\tsearch(args: UmbSearchRequestArgs) {\r\n\t\treturn this.#dataSource.search(args);\r\n\t}\r\n}\r\n","import { UmbMediaSearchRepository } from './media-search.repository.js';\r\nimport type { UmbMediaSearchItemModel } from './types.js';\r\nimport type { UmbSearchProvider, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\nexport class UmbMediaSearchProvider extends UmbControllerBase implements UmbSearchProvider {\r\n\t#repository = new UmbMediaSearchRepository(this);\r\n\r\n\tasync search(args: UmbSearchRequestArgs) {\r\n\t\treturn this.#repository.search(args);\r\n\t}\r\n\r\n\toverride destroy(): void {\r\n\t\tthis.#repository.destroy();\r\n\t}\r\n}\r\n\r\nexport { UmbMediaSearchProvider as api };\r\n","import { UmbMediaItemRepository } from '../../repository/index.js';\r\nimport { UmbMediaTreeRepository } from '../../tree/media-tree.repository.js';\r\nimport { UMB_MEDIA_ROOT_ENTITY_TYPE } from '../../entity.js';\r\nimport type { UmbDropzoneElement } from '../../dropzone/dropzone.element.js';\r\nimport type { UmbMediaTreeItemModel, UmbMediaSearchItemModel, UmbMediaItemModel } from '../../types.js';\r\nimport { UmbMediaSearchProvider } from '../../search/index.js';\r\nimport type { UmbMediaPathModel } from './types.js';\r\nimport type { UmbMediaPickerFolderPathElement } from './components/media-picker-folder-path.element.js';\r\nimport type { UmbMediaPickerModalData, UmbMediaPickerModalValue } from './media-picker-modal.token.js';\r\nimport {\r\n\tcss,\r\n\thtml,\r\n\tcustomElement,\r\n\tstate,\r\n\trepeat,\r\n\tifDefined,\r\n\tquery,\r\n\ttype PropertyValues,\r\n\tnothing,\r\n} from '@umbraco-cms/backoffice/external/lit';\r\nimport { debounce } from '@umbraco-cms/backoffice/utils';\r\nimport { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';\r\nimport { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';\r\nimport type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';\r\nimport { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type';\r\nimport type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';\r\n\r\nimport '@umbraco-cms/backoffice/imaging';\r\n\r\nconst root: UmbMediaPathModel = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE };\r\n\r\n// TODO: investigate how we can reuse the picker-search-field element, picker context etc.\r\n@customElement('umb-media-picker-modal')\r\nexport class UmbMediaPickerModalElement extends UmbModalBaseElement<\r\n\tUmbMediaPickerModalData,\r\n\tUmbMediaPickerModalValue\r\n> {\r\n\t#mediaTreeRepository = new UmbMediaTreeRepository(this);\r\n\t#mediaItemRepository = new UmbMediaItemRepository(this);\r\n\t#mediaSearchProvider = new UmbMediaSearchProvider(this);\r\n\r\n\t#dataType?: { unique: string };\r\n\r\n\t@state()\r\n\tprivate _selectableFilter: (item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) => boolean = () => true;\r\n\r\n\t@state()\r\n\tprivate _currentChildren: Array = [];\r\n\r\n\t@state()\r\n\tprivate _searchResult: Array = [];\r\n\r\n\t@state()\r\n\tprivate _searchFrom: UmbEntityModel | undefined;\r\n\r\n\t@state()\r\n\tprivate _searchQuery = '';\r\n\r\n\t@state()\r\n\tprivate _currentMediaEntity: UmbMediaPathModel = root;\r\n\r\n\t@state()\r\n\tprivate _isSelectionMode = false;\r\n\r\n\t@state()\r\n\tprivate _startNode: UmbMediaItemModel | undefined;\r\n\r\n\t@state()\r\n\t_searching: boolean = false;\r\n\r\n\t@query('#dropzone')\r\n\tprivate _dropzone!: UmbDropzoneElement;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.consumeContext(UMB_CONTENT_PROPERTY_CONTEXT, (context) => {\r\n\t\t\tthis.observe(context.dataType, (dataType) => {\r\n\t\t\t\tthis.#dataType = dataType;\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\toverride async connectedCallback(): Promise {\r\n\t\tsuper.connectedCallback();\r\n\t\tif (this.data?.pickableFilter) {\r\n\t\t\tthis._selectableFilter = this.data?.pickableFilter;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override async firstUpdated(_changedProperties: PropertyValues): Promise {\r\n\t\tsuper.firstUpdated(_changedProperties);\r\n\r\n\t\tif (this.data?.startNode) {\r\n\t\t\tconst { data } = await this.#mediaItemRepository.requestItems([this.data.startNode]);\r\n\t\t\tthis._startNode = data?.[0];\r\n\r\n\t\t\tif (this._startNode) {\r\n\t\t\t\tthis._currentMediaEntity = {\r\n\t\t\t\t\tname: this._startNode.name,\r\n\t\t\t\t\tunique: this._startNode.unique,\r\n\t\t\t\t\tentityType: this._startNode.entityType,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis._searchFrom = { unique: this._startNode.unique, entityType: this._startNode.entityType };\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.#loadChildrenOfCurrentMediaItem();\r\n\t}\r\n\r\n\tasync #loadChildrenOfCurrentMediaItem() {\r\n\t\tconst { data } = await this.#mediaTreeRepository.requestTreeItemsOf({\r\n\t\t\tparent: {\r\n\t\t\t\tunique: this._currentMediaEntity.unique,\r\n\t\t\t\tentityType: this._currentMediaEntity.entityType,\r\n\t\t\t},\r\n\t\t\tdataType: this.#dataType,\r\n\t\t\tskip: 0,\r\n\t\t\ttake: 100,\r\n\t\t});\r\n\r\n\t\tthis._currentChildren = data?.items ?? [];\r\n\t}\r\n\r\n\t#onOpen(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) {\r\n\t\tthis.#clearSearch();\r\n\r\n\t\tthis._currentMediaEntity = {\r\n\t\t\tname: item.name,\r\n\t\t\tunique: item.unique,\r\n\t\t\tentityType: UMB_MEDIA_ROOT_ENTITY_TYPE,\r\n\t\t};\r\n\r\n\t\t// If the user has navigated into an item, we default to search only within that item.\r\n\t\tthis._searchFrom = this._currentMediaEntity.unique\r\n\t\t\t? { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType }\r\n\t\t\t: undefined;\r\n\r\n\t\tthis.#loadChildrenOfCurrentMediaItem();\r\n\t}\r\n\r\n\t#onSelected(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) {\r\n\t\tconst selection = this.data?.multiple ? [...this.value.selection, item.unique!] : [item.unique!];\r\n\t\tthis._isSelectionMode = selection.length > 0;\r\n\t\tthis.modalContext?.setValue({ selection });\r\n\t}\r\n\r\n\t#onDeselected(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) {\r\n\t\tconst selection = this.value.selection.filter((value) => value !== item.unique);\r\n\t\tthis._isSelectionMode = selection.length > 0;\r\n\t\tthis.modalContext?.setValue({ selection });\r\n\t}\r\n\r\n\t#clearSearch() {\r\n\t\tthis._searchQuery = '';\r\n\t\tthis._searchResult = [];\r\n\t}\r\n\r\n\tasync #searchMedia() {\r\n\t\tif (!this._searchQuery) {\r\n\t\t\tthis.#clearSearch();\r\n\t\t\tthis._searching = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst query = this._searchQuery;\r\n\t\tconst { data } = await this.#mediaSearchProvider.search({ query, searchFrom: this._searchFrom });\r\n\r\n\t\tif (!data) {\r\n\t\t\t// No search results.\r\n\t\t\tthis._searchResult = [];\r\n\t\t\tthis._searching = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Map urls for search results as we are going to show for all folders (as long they aren't trashed).\r\n\t\tthis._searchResult = data.items;\r\n\t\tthis._searching = false;\r\n\t}\r\n\r\n\t#debouncedSearch = debounce(() => {\r\n\t\tthis.#searchMedia();\r\n\t}, 500);\r\n\r\n\t#onSearch(e: UUIInputEvent) {\r\n\t\tthis._searchQuery = (e.target.value as string).toLocaleLowerCase();\r\n\t\tthis._searching = true;\r\n\t\tthis.#debouncedSearch();\r\n\t}\r\n\r\n\t#onPathChange(e: CustomEvent) {\r\n\t\tconst newPath = e.target as UmbMediaPickerFolderPathElement;\r\n\r\n\t\tif (newPath.currentMedia) {\r\n\t\t\tthis._currentMediaEntity = newPath.currentMedia;\r\n\t\t} else if (this._startNode) {\r\n\t\t\tthis._currentMediaEntity = {\r\n\t\t\t\tname: this._startNode.name,\r\n\t\t\t\tunique: this._startNode.unique,\r\n\t\t\t\tentityType: this._startNode.entityType,\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tthis._currentMediaEntity = root;\r\n\t\t}\r\n\r\n\t\tif (this._currentMediaEntity.unique) {\r\n\t\t\tthis._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType };\r\n\t\t} else {\r\n\t\t\tthis._searchFrom = undefined;\r\n\t\t}\r\n\r\n\t\tthis.#loadChildrenOfCurrentMediaItem();\r\n\t}\r\n\r\n\t#allowNavigateToMedia(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel): boolean {\r\n\t\treturn isUmbracoFolder(item.mediaType.unique) || item.hasChildren;\r\n\t}\r\n\r\n\t#onSearchFromChange(e: CustomEvent) {\r\n\t\tconst checked = (e.target as HTMLInputElement).checked;\r\n\r\n\t\tif (checked) {\r\n\t\t\tthis._searchFrom = { unique: this._currentMediaEntity.unique, entityType: this._currentMediaEntity.entityType };\r\n\t\t} else {\r\n\t\t\tthis._searchFrom = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t${this.#renderBody()} ${this.#renderBreadcrumb()}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderBody() {\r\n\t\treturn html`${this.#renderToolbar()}\r\n\t\t\t this.#loadChildrenOfCurrentMediaItem()}\r\n\t\t\t\t.parentUnique=${this._currentMediaEntity.unique}>\r\n\t\t\t${this._searchQuery ? this.#renderSearchResult() : this.#renderCurrentChildren()} `;\r\n\t}\r\n\r\n\t#renderSearchResult() {\r\n\t\treturn html`\r\n\t\t\t${!this._searchResult.length && !this._searching\r\n\t\t\t\t? html`

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

`\r\n\t\t\t\t: html`
\r\n\t\t\t\t\t\t${repeat(\r\n\t\t\t\t\t\t\tthis._searchResult,\r\n\t\t\t\t\t\t\t(item) => item.unique,\r\n\t\t\t\t\t\t\t(item) => this.#renderCard(item),\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
`}\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderCurrentChildren() {\r\n\t\treturn html`\r\n\t\t\t${!this._currentChildren.length\r\n\t\t\t\t? html`

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

`\r\n\t\t\t\t: html`
\r\n\t\t\t\t\t\t${repeat(\r\n\t\t\t\t\t\t\tthis._currentChildren,\r\n\t\t\t\t\t\t\t(item) => item.unique,\r\n\t\t\t\t\t\t\t(item) => this.#renderCard(item),\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
`}\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderToolbar() {\r\n\t\t/**\r\n\t\t * We cannot route to a workspace without the media picker modal is a routeable. Using regular upload button for now... */\r\n\t\treturn html`\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t${this._searching\r\n\t\t\t\t\t\t\t\t? html``\r\n\t\t\t\t\t\t\t\t: html``}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t${this._currentMediaEntity.unique && this._currentMediaEntity.unique !== this._startNode?.unique\r\n\t\t\t\t\t\t? html``\r\n\t\t\t\t\t\t: nothing}\r\n\t\t\t\t
\r\n\t\t\t\t this._dropzone.browse()}\r\n\t\t\t\t\tlabel=${this.localize.term('general_upload')}\r\n\t\t\t\t\tlook=\"outline\"\r\n\t\t\t\t\tcolor=\"default\">\r\n\t\t\t
\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderCard(item: UmbMediaTreeItemModel | UmbMediaSearchItemModel) {\r\n\t\tconst canNavigate = this.#allowNavigateToMedia(item);\r\n\t\tconst selectable = this._selectableFilter(item);\r\n\t\tconst disabled = !(selectable || canNavigate);\r\n\t\treturn html`\r\n\t\t\t this.#onOpen(item)}\r\n\t\t\t\t@selected=${() => this.#onSelected(item)}\r\n\t\t\t\t@deselected=${() => this.#onDeselected(item)}\r\n\t\t\t\t?selected=${this.value?.selection?.find((value) => value === item.unique)}\r\n\t\t\t\t?selectable=${selectable}\r\n\t\t\t\t?select-only=${this._isSelectionMode || canNavigate === false}>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderBreadcrumb() {\r\n\t\t// hide the breadcrumb when doing a global search within another item\r\n\t\t// We do this to avoid confusion that the current search result is within the item shown in the breadcrumb.\r\n\t\tif (this._searchQuery && this._currentMediaEntity.unique && !this._searchFrom) {\r\n\t\t\treturn nothing;\r\n\t\t}\r\n\r\n\t\tconst startNode: UmbMediaPathModel | undefined = this._startNode\r\n\t\t\t? {\r\n\t\t\t\t\tentityType: this._startNode.entityType,\r\n\t\t\t\t\tunique: this._startNode.unique,\r\n\t\t\t\t\tname: this._startNode.name,\r\n\t\t\t\t}\r\n\t\t\t: undefined;\r\n\r\n\t\treturn html``;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tcss`\r\n\t\t\t#toolbar {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tgap: var(--uui-size-6);\r\n\t\t\t\talign-items: flex-start;\r\n\t\t\t\tmargin-bottom: var(--uui-size-3);\r\n\t\t\t}\r\n\t\t\t#search {\r\n\t\t\t\tflex: 1;\r\n\t\t\t}\r\n\r\n\t\t\t#search uui-input {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t\tmargin-bottom: var(--uui-size-3);\r\n\t\t\t}\r\n\r\n\t\t\t#searching-indicator {\r\n\t\t\t\tmargin-left: 7px;\r\n\t\t\t\tmargin-top: 4px;\r\n\t\t\t}\r\n\r\n\t\t\t#media-grid {\r\n\t\t\t\tdisplay: grid;\r\n\t\t\t\tgrid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\r\n\t\t\t\tgrid-auto-rows: 150px;\r\n\t\t\t\tgap: var(--uui-size-space-5);\r\n\t\t\t\tpadding-bottom: 5px; /** The modal is a bit jumpy due to the img card focus/hover border. This fixes the issue. */\r\n\t\t\t}\r\n\r\n\t\t\t/** TODO: Remove this fix when UUI gets upgrade to 1.3 */\r\n\t\t\tumb-imaging-thumbnail {\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\tumb-icon {\r\n\t\t\t\tfont-size: var(--uui-size-8);\r\n\t\t\t}\r\n\r\n\t\t\timg {\r\n\t\t\t\tbackground-image: url('data:image/svg+xml;charset=utf-8,');\r\n\t\t\t\tbackground-size: 10px 10px;\r\n\t\t\t\tbackground-repeat: repeat;\r\n\t\t\t}\r\n\r\n\t\t\t#actions {\r\n\t\t\t\tmax-width: 100%;\r\n\t\t\t}\r\n\r\n\t\t\t.not-allowed {\r\n\t\t\t\tcursor: not-allowed;\r\n\t\t\t\topacity: 0.5;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbMediaPickerModalElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-media-picker-modal': UmbMediaPickerModalElement;\r\n\t}\r\n}\r\n","import type { UmbMediaRecycleBinTreeStore } from './media-recycle-bin-tree.store.js';\r\nimport { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport const UMB_MEDIA_RECYCLE_BIN_TREE_STORE_CONTEXT = new UmbContextToken(\r\n\t'UmbMediaRecycleBinTreeStore',\r\n);\r\n","export const UMB_MEDIA_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MediaItem';\r\nexport const UMB_MEDIA_STORE_ALIAS = 'Umb.Store.MediaItem';\r\nexport { UMB_MEDIA_ITEM_STORE_CONTEXT } from './media-item.store.context-token.js';\r\n","import type { UmbMediaTreeItemModel } from './types.js';\r\nimport { UmbModalToken } from '@umbraco-cms/backoffice/modal';\r\nimport {\r\n\ttype UmbTreePickerModalValue,\r\n\ttype UmbTreePickerModalData,\r\n\tUMB_TREE_PICKER_MODAL_ALIAS,\r\n} from '@umbraco-cms/backoffice/tree';\r\n\r\nexport type UmbMediaTreePickerModalData = UmbTreePickerModalData;\r\nexport type UmbMediaTreePickerModalValue = UmbTreePickerModalValue;\r\n\r\nexport const UMB_MEDIA_TREE_PICKER_MODAL = new UmbModalToken(\r\n\tUMB_TREE_PICKER_MODAL_ALIAS,\r\n\t{\r\n\t\tmodal: {\r\n\t\t\ttype: 'sidebar',\r\n\t\t\tsize: 'small',\r\n\t\t},\r\n\t\tdata: {\r\n\t\t\ttreeAlias: 'Umb.Tree.Media',\r\n\t\t},\r\n\t},\r\n);\r\n","import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js';\r\nimport type { UmbMediaWorkspaceContext } from './media-workspace.context.js';\r\nimport { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\nimport type { UmbSubmittableWorkspaceContext } from '@umbraco-cms/backoffice/workspace';\r\n\r\nexport const UMB_MEDIA_WORKSPACE_CONTEXT = new UmbContextToken<\r\n\tUmbSubmittableWorkspaceContext,\r\n\tUmbMediaWorkspaceContext\r\n>(\r\n\t'UmbWorkspaceContext',\r\n\tundefined,\r\n\t(context): context is UmbMediaWorkspaceContext => context.getEntityType?.() === UMB_MEDIA_ENTITY_TYPE,\r\n);\r\n","import { UMB_SECTION_PATH_PATTERN } from '@umbraco-cms/backoffice/section';\r\n\r\nexport const UMB_MEDIA_SECTION_PATHNAME = 'media';\r\nexport const UMB_MEDIA_SECTION_PATH = UMB_SECTION_PATH_PATTERN.generateAbsolute({\r\n\tsectionName: UMB_MEDIA_SECTION_PATHNAME,\r\n});\r\n","import { UMB_MEDIA_SECTION_PATHNAME } from '../media-section/paths.js';\r\nimport { UMB_MEDIA_ENTITY_TYPE, type UmbMediaEntityTypeUnion } from './entity.js';\r\nimport { UMB_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/workspace';\r\nimport { UmbPathPattern } from '@umbraco-cms/backoffice/router';\r\n\r\nexport const UMB_MEDIA_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({\r\n\tsectionName: UMB_MEDIA_SECTION_PATHNAME,\r\n\tentityType: UMB_MEDIA_ENTITY_TYPE,\r\n});\r\n\r\nexport const UMB_CREATE_MEDIA_WORKSPACE_PATH_PATTERN = new UmbPathPattern<{\r\n\tparentEntityType: UmbMediaEntityTypeUnion;\r\n\tparentUnique?: string | null;\r\n\tmediaTypeUnique: string;\r\n}>('create/parent/:parentEntityType/:parentUnique/:mediaTypeUnique', UMB_MEDIA_WORKSPACE_PATH);\r\n\r\nexport const UMB_EDIT_MEDIA_WORKSPACE_PATH_PATTERN = new UmbPathPattern<{ unique: string }>('edit/:unique');\r\n","import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js';\r\nimport type { UmbMediaPropertyDatasetContext } from './media-property-dataset-context.js';\r\nimport type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property';\r\nimport { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport const IsMediaVariantContext = (context: UmbPropertyDatasetContext): context is UmbMediaPropertyDatasetContext =>\r\n\tcontext.getEntityType() === UMB_MEDIA_ENTITY_TYPE;\r\n\r\nexport const UMB_MEDIA_VARIANT_CONTEXT = new UmbContextToken(\r\n\t'UmbVariantContext',\r\n\tundefined,\r\n\tIsMediaVariantContext,\r\n);\r\n","import { UmbMediaDetailRepository } from '../../repository/index.js';\r\nimport type {\r\n\tUmbMediaCaptionAltTextModalData,\r\n\tUmbMediaCaptionAltTextModalValue,\r\n} from './media-caption-alt-text-modal.token.js';\r\nimport { css, html, customElement } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';\r\nimport type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';\r\n\r\n@customElement('umb-media-caption-alt-text-modal')\r\nexport class UmbMediaCaptionAltTextModalElement extends UmbModalBaseElement<\r\n\tUmbMediaCaptionAltTextModalData,\r\n\tUmbMediaCaptionAltTextModalValue\r\n> {\r\n\t#mediaUnique?: string;\r\n\treadonly #mediaDetailRepository = new UmbMediaDetailRepository(this);\r\n\r\n\toverride connectedCallback() {\r\n\t\tsuper.connectedCallback();\r\n\t\tthis.#mediaUnique = this.data?.mediaUnique;\r\n\t\tthis.#getMediaDetail();\r\n\t}\r\n\r\n\tasync #getMediaDetail() {\r\n\t\tif (!this.#mediaUnique) return;\r\n\t\tconst { data } = await this.#mediaDetailRepository.requestByUnique(this.#mediaUnique);\r\n\t\tif (!data) return;\r\n\r\n\t\tthis.value = { ...this.value, altText: this.value?.altText ?? data.variants[0].name, url: data.urls[0]?.url ?? '' };\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t${this.localize.term('content_altTextOptional')}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t(this.value = { ...this.value, altText: e.target.value as string })}>\r\n\r\n\t\t\t\t\t${this.localize.term('content_captionTextOptional')}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t(this.value = { ...this.value, caption: e.target.value as string })}>\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t${this.value?.altText\r\n\t\t\t\t\t\t
${this.value?.caption ?? ''}
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t`;\r\n\t}\r\n\r\n\tstatic override readonly styles = [\r\n\t\tcss`\r\n\t\t\tuui-input {\r\n\t\t\t\tmargin-bottom: var(--uui-size-layout-1);\r\n\t\t\t}\r\n\r\n\t\t\t#wrapper {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: column;\r\n\t\t\t}\r\n\r\n\t\t\t#mainobject {\r\n\t\t\t\tdisplay: flex;\r\n\t\t\t\tflex-direction: column;\r\n\t\t\t\tmax-width: 100%;\r\n\r\n\t\t\t\timg {\r\n\t\t\t\t\tmax-width: 100%;\r\n\t\t\t\t\theight: auto;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbMediaCaptionAltTextModalElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-media-caption-alt-text-modal': UmbMediaCaptionAltTextModalElement;\r\n\t}\r\n}\r\n","import { UMB_MEDIA_ITEM_REPOSITORY_ALIAS } from '../../constants.js';\r\nimport { UMB_MEDIA_PICKER_MODAL } from '../../modals/index.js';\r\nimport type { UmbMediaItemModel } from '../../repository/item/types.js';\r\nimport type { UmbMediaPickerModalData, UmbMediaPickerModalValue } from '../../modals/index.js';\r\nimport { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\n\r\nexport class UmbMediaPickerInputContext extends UmbPickerInputContext<\r\n\tUmbMediaItemModel,\r\n\tUmbMediaItemModel,\r\n\tUmbMediaPickerModalData,\r\n\tUmbMediaPickerModalValue\r\n> {\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, UMB_MEDIA_ITEM_REPOSITORY_ALIAS, UMB_MEDIA_PICKER_MODAL);\r\n\t}\r\n}\r\n","import type { UmbMediaCardItemModel, UmbMediaItemModel } from '../../types.js';\r\nimport { UmbMediaPickerInputContext } from './input-media.context.js';\r\nimport {\r\n\tcss,\r\n\tcustomElement,\r\n\thtml,\r\n\tifDefined,\r\n\tnothing,\r\n\tproperty,\r\n\trepeat,\r\n\tstate,\r\n} from '@umbraco-cms/backoffice/external/lit';\r\nimport { splitStringToArray } from '@umbraco-cms/backoffice/utils';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';\r\nimport { UmbSorterController, UmbSorterResolvePlacementAsGrid } from '@umbraco-cms/backoffice/sorter';\r\nimport { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/workspace';\r\nimport { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation';\r\n\r\nimport '@umbraco-cms/backoffice/imaging';\r\n\r\nconst elementName = 'umb-input-media';\r\n@customElement(elementName)\r\nexport class UmbInputMediaElement extends UmbFormControlMixin(UmbLitElement) {\r\n\t#sorter = new UmbSorterController(this, {\r\n\t\tgetUniqueOfElement: (element) => {\r\n\t\t\treturn element.getAttribute('detail');\r\n\t\t},\r\n\t\tgetUniqueOfModel: (modelEntry) => {\r\n\t\t\treturn modelEntry;\r\n\t\t},\r\n\t\tidentifier: 'Umb.SorterIdentifier.InputMedia',\r\n\t\titemSelector: 'uui-card-media',\r\n\t\tcontainerSelector: '.container',\r\n\t\tresolvePlacement: UmbSorterResolvePlacementAsGrid,\r\n\t\tonChange: ({ model }) => {\r\n\t\t\tthis.selection = model;\r\n\t\t\tthis.#sortCards(model);\r\n\t\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t\t},\r\n\t});\r\n\r\n\t#sortCards(model: Array) {\r\n\t\tconst idToIndexMap: { [unique: string]: number } = {};\r\n\t\tmodel.forEach((item, index) => {\r\n\t\t\tidToIndexMap[item] = index;\r\n\t\t});\r\n\r\n\t\tconst cards = [...this._cards];\r\n\t\tthis._cards = cards.sort((a, b) => idToIndexMap[a.unique] - idToIndexMap[b.unique]);\r\n\t}\r\n\r\n\t/**\r\n\t * This is a minimum amount of selected items in this input.\r\n\t * @type {number}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: Number })\r\n\tpublic set min(value: number) {\r\n\t\tthis.#pickerContext.min = value;\r\n\t}\r\n\tpublic get min(): number {\r\n\t\treturn this.#pickerContext.min;\r\n\t}\r\n\r\n\t/**\r\n\t * Min validation message.\r\n\t * @type {boolean}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: String, attribute: 'min-message' })\r\n\tminMessage = 'This field need more items';\r\n\r\n\t/**\r\n\t * This is a maximum amount of selected items in this input.\r\n\t * @type {number}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: Number })\r\n\tpublic set max(value: number) {\r\n\t\tthis.#pickerContext.max = value;\r\n\t}\r\n\tpublic get max(): number {\r\n\t\treturn this.#pickerContext.max;\r\n\t}\r\n\r\n\t/**\r\n\t * Max validation message.\r\n\t * @type {boolean}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: String, attribute: 'max-message' })\r\n\tmaxMessage = 'This field exceeds the allowed amount of items';\r\n\r\n\tpublic set selection(ids: Array) {\r\n\t\tthis.#pickerContext.setSelection(ids);\r\n\t\tthis.#sorter.setModel(ids);\r\n\t}\r\n\tpublic get selection(): Array {\r\n\t\treturn this.#pickerContext.getSelection();\r\n\t}\r\n\r\n\t@property({ type: Array })\r\n\tallowedContentTypeIds?: Array | undefined;\r\n\r\n\t@property({ type: Boolean })\r\n\tshowOpenButton?: boolean;\r\n\r\n\t@property({ type: String })\r\n\tstartNode = '';\r\n\r\n\t@property({ type: String })\r\n\tpublic override set value(selectionString: string | undefined) {\r\n\t\tthis.selection = splitStringToArray(selectionString);\r\n\t}\r\n\tpublic override get value(): string | undefined {\r\n\t\treturn this.selection.length > 0 ? this.selection.join(',') : undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.\r\n\t * @type {boolean}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tpublic get readonly() {\r\n\t\treturn this.#readonly;\r\n\t}\r\n\tpublic set readonly(value) {\r\n\t\tthis.#readonly = value;\r\n\r\n\t\tif (this.#readonly) {\r\n\t\t\tthis.#sorter.disable();\r\n\t\t} else {\r\n\t\t\tthis.#sorter.enable();\r\n\t\t}\r\n\t}\r\n\t#readonly = false;\r\n\r\n\t@state()\r\n\tprivate _editMediaPath = '';\r\n\r\n\t@state()\r\n\tprivate _cards: Array = [];\r\n\r\n\t#pickerContext = new UmbMediaPickerInputContext(this);\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tnew UmbModalRouteRegistrationController(this, UMB_WORKSPACE_MODAL)\r\n\t\t\t.addAdditionalPath('media')\r\n\t\t\t.onSetup(() => {\r\n\t\t\t\treturn { data: { entityType: 'media', preset: {} } };\r\n\t\t\t})\r\n\t\t\t.observeRouteBuilder((routeBuilder) => {\r\n\t\t\t\tthis._editMediaPath = routeBuilder({});\r\n\t\t\t});\r\n\r\n\t\tthis.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')));\r\n\r\n\t\tthis.observe(this.#pickerContext.selectedItems, async (selectedItems) => {\r\n\t\t\tconst missingCards = selectedItems.filter((item) => !this._cards.find((card) => card.unique === item.unique));\r\n\t\t\tif (selectedItems?.length && !missingCards.length) return;\r\n\r\n\t\t\tthis._cards = selectedItems ?? [];\r\n\t\t});\r\n\r\n\t\tthis.addValidator(\r\n\t\t\t'rangeUnderflow',\r\n\t\t\t() => this.minMessage,\r\n\t\t\t() => !!this.min && this.selection.length < this.min,\r\n\t\t);\r\n\t\tthis.addValidator(\r\n\t\t\t'rangeOverflow',\r\n\t\t\t() => this.maxMessage,\r\n\t\t\t() => !!this.max && this.selection.length > this.max,\r\n\t\t);\r\n\t}\r\n\r\n\t#pickableFilter = (item: UmbMediaItemModel): boolean => {\r\n\t\tif (this.allowedContentTypeIds && this.allowedContentTypeIds.length > 0) {\r\n\t\t\treturn this.allowedContentTypeIds.includes(item.mediaType.unique);\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t#openPicker() {\r\n\t\tthis.#pickerContext.openPicker({\r\n\t\t\tmultiple: this.max > 1,\r\n\t\t\tstartNode: this.startNode,\r\n\t\t\tpickableFilter: this.#pickableFilter,\r\n\t\t});\r\n\t}\r\n\r\n\tasync #onRemove(item: UmbMediaCardItemModel) {\r\n\t\tawait this.#pickerContext.requestRemoveItem(item.unique);\r\n\t\tthis._cards = this._cards.filter((x) => x.unique !== item.unique);\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`
${this.#renderItems()} ${this.#renderAddButton()}
`;\r\n\t}\r\n\r\n\t#renderItems() {\r\n\t\tif (!this._cards?.length) return nothing;\r\n\t\treturn html`\r\n\t\t\t${repeat(\r\n\t\t\t\tthis._cards,\r\n\t\t\t\t(item) => item.unique,\r\n\t\t\t\t(item) => this.#renderItem(item),\r\n\t\t\t)}\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderAddButton() {\r\n\t\t// TODO: Stop preventing adding more, instead implement proper validation for user feedback. [NL]\r\n\t\tif (this._cards && this.max && this._cards.length >= this.max) return nothing;\r\n\t\tif (this.readonly && this._cards.length > 0) {\r\n\t\t\treturn nothing;\r\n\t\t} else {\r\n\t\t\treturn html`\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t${this.localize.term('general_choose')}\r\n\t\t\t\t\r\n\t\t\t`;\r\n\t\t}\r\n\t}\r\n\r\n\t#renderItem(item: UmbMediaCardItemModel) {\r\n\t\tconst href = this.readonly ? undefined : `${this._editMediaPath}edit/${item.unique}`;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t${this.#renderIsTrashed(item)}\r\n\t\t\t\t ${this.#renderRemoveAction(item)}\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderRemoveAction(item: UmbMediaCardItemModel) {\r\n\t\tif (this.readonly) return nothing;\r\n\t\treturn html`\r\n\t\t\t this.#onRemove(item)}>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderIsTrashed(item: UmbMediaCardItemModel) {\r\n\t\tif (!item.isTrashed) return nothing;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\tTrashed\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tcss`\r\n\t\t\t:host {\r\n\t\t\t\tposition: relative;\r\n\t\t\t}\r\n\t\t\t.container {\r\n\t\t\t\tdisplay: grid;\r\n\t\t\t\tgrid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\r\n\t\t\t\tgrid-auto-rows: 150px;\r\n\t\t\t\tgap: var(--uui-size-space-5);\r\n\t\t\t}\r\n\r\n\t\t\t#btn-add {\r\n\t\t\t\ttext-align: center;\r\n\t\t\t\theight: 100%;\r\n\t\t\t}\r\n\r\n\t\t\tuui-icon {\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tmargin: 0 auto;\r\n\t\t\t}\r\n\r\n\t\t\tuui-card-media umb-icon {\r\n\t\t\t\tfont-size: var(--uui-size-8);\r\n\t\t\t}\r\n\r\n\t\t\tuui-card-media[drag-placeholder] {\r\n\t\t\t\topacity: 0.2;\r\n\t\t\t}\r\n\t\t\timg {\r\n\t\t\t\tbackground-image: url('data:image/svg+xml;charset=utf-8,');\r\n\t\t\t\tbackground-size: 10px 10px;\r\n\t\t\t\tbackground-repeat: repeat;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport { UmbInputMediaElement as element };\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t[elementName]: UmbInputMediaElement;\r\n\t}\r\n}\r\n","import { UmbMediaItemRepository } from '../../repository/index.js';\r\nimport { UMB_IMAGE_CROPPER_EDITOR_MODAL, UMB_MEDIA_PICKER_MODAL } from '../../modals/index.js';\r\nimport type { UmbMediaItemModel, UmbCropModel, UmbMediaPickerPropertyValue } from '../../types.js';\r\nimport type { UmbUploadableItem } from '../../dropzone/types.js';\r\nimport { css, customElement, html, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit';\r\nimport { umbConfirmModal, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';\r\nimport { UmbSorterController, UmbSorterResolvePlacementAsGrid } from '@umbraco-cms/backoffice/sorter';\r\nimport { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui';\r\nimport type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal';\r\nimport type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router';\r\nimport type { UmbVariantId } from '@umbraco-cms/backoffice/variant';\r\n\r\nimport '@umbraco-cms/backoffice/imaging';\r\n\r\ntype UmbRichMediaCardModel = {\r\n\tunique: string;\r\n\tmedia: string;\r\n\tname: string;\r\n\tsrc?: string;\r\n\ticon?: string;\r\n\tisTrashed?: boolean;\r\n};\r\n\r\n@customElement('umb-input-rich-media')\r\nexport class UmbInputRichMediaElement extends UUIFormControlMixin(UmbLitElement, '') {\r\n\t#sorter = new UmbSorterController(this, {\r\n\t\tgetUniqueOfElement: (element) => {\r\n\t\t\treturn element.id;\r\n\t\t},\r\n\t\tgetUniqueOfModel: (modelEntry) => {\r\n\t\t\treturn modelEntry.key;\r\n\t\t},\r\n\t\tidentifier: 'Umb.SorterIdentifier.InputRichMedia',\r\n\t\titemSelector: 'uui-card-media',\r\n\t\tcontainerSelector: '.container',\r\n\t\t//resolvePlacement: (args) => args.pointerX < args.relatedRect.left + args.relatedRect.width * 0.5,\r\n\t\tresolvePlacement: UmbSorterResolvePlacementAsGrid,\r\n\t\tonChange: ({ model }) => {\r\n\t\t\tthis.#items = model;\r\n\t\t\tthis.#sortCards(model);\r\n\t\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t\t},\r\n\t});\r\n\r\n\t#sortCards(model: Array) {\r\n\t\tconst idToIndexMap: { [unique: string]: number } = {};\r\n\t\tmodel.forEach((item, index) => {\r\n\t\t\tidToIndexMap[item.key] = index;\r\n\t\t});\r\n\r\n\t\tconst cards = [...this._cards];\r\n\t\tthis._cards = cards.sort((a, b) => idToIndexMap[a.unique] - idToIndexMap[b.unique]);\r\n\t}\r\n\r\n\t/**\r\n\t * This is a minimum amount of selected items in this input.\r\n\t * @type {number}\r\n\t * @attr\r\n\t * @default 0\r\n\t */\r\n\t@property({ type: Number })\r\n\tpublic min = 0;\r\n\r\n\t/**\r\n\t * Min validation message.\r\n\t * @type {boolean}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: String, attribute: 'min-message' })\r\n\tminMessage = 'This field need more items';\r\n\r\n\t/**\r\n\t * This is a maximum amount of selected items in this input.\r\n\t * @type {number}\r\n\t * @attr\r\n\t * @default Infinity\r\n\t */\r\n\t@property({ type: Number })\r\n\tpublic max = Infinity;\r\n\r\n\t/**\r\n\t * Max validation message.\r\n\t * @type {boolean}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: String, attribute: 'min-message' })\r\n\tmaxMessage = 'This field exceeds the allowed amount of items';\r\n\r\n\t@property({ type: Array })\r\n\tpublic set items(value: Array) {\r\n\t\tthis.#sorter.setModel(value);\r\n\t\tthis.#items = value;\r\n\t\tthis.#populateCards();\r\n\t}\r\n\tpublic get items(): Array {\r\n\t\treturn this.#items;\r\n\t}\r\n\t#items: Array = [];\r\n\r\n\t@property({ type: Array })\r\n\tallowedContentTypeIds?: string[] | undefined;\r\n\r\n\t@property({ type: String })\r\n\tstartNode = '';\r\n\r\n\t@property({ type: Boolean })\r\n\tmultiple = false;\r\n\r\n\t@property()\r\n\tpublic override get value() {\r\n\t\treturn this.items?.map((item) => item.mediaKey).join(',');\r\n\t}\r\n\r\n\t@property({ type: Array })\r\n\tpublic preselectedCrops?: Array;\r\n\r\n\t@property({ type: Boolean })\r\n\tpublic set focalPointEnabled(value: boolean) {\r\n\t\tthis.#focalPointEnabled = value;\r\n\t}\r\n\tpublic get focalPointEnabled(): boolean {\r\n\t\treturn this.#focalPointEnabled;\r\n\t}\r\n\t#focalPointEnabled: boolean = false;\r\n\r\n\t@property()\r\n\t/** @deprecated will be removed in v17 */\r\n\tpublic set alias(value: string | undefined) {\r\n\t\t//this.#modalRouter.setUniquePathValue('propertyAlias', value);\r\n\t}\r\n\tpublic get alias(): string | undefined {\r\n\t\treturn undefined; //this.#modalRouter.getUniquePathValue('propertyAlias');\r\n\t}\r\n\r\n\t@property()\r\n\t/** @deprecated will be removed in v17 */\r\n\tpublic set variantId(value: string | UmbVariantId | undefined) {\r\n\t\t//this.#modalRouter.setUniquePathValue('variantId', value?.toString());\r\n\t}\r\n\tpublic get variantId(): string | undefined {\r\n\t\treturn undefined; //this.#modalRouter.getUniquePathValue('variantId');\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content.\r\n\t * @type {boolean}\r\n\t * @attr\r\n\t * @default\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tpublic get readonly() {\r\n\t\treturn this.#readonly;\r\n\t}\r\n\tpublic set readonly(value) {\r\n\t\tthis.#readonly = value;\r\n\r\n\t\tif (this.#readonly) {\r\n\t\t\tthis.#sorter.disable();\r\n\t\t} else {\r\n\t\t\tthis.#sorter.enable();\r\n\t\t}\r\n\t}\r\n\t#readonly = false;\r\n\r\n\t@state()\r\n\tprivate _cards: Array = [];\r\n\r\n\t@state()\r\n\tprivate _routeBuilder?: UmbModalRouteBuilder;\r\n\r\n\t#itemRepository = new UmbMediaItemRepository(this);\r\n\r\n\t#modalManager?: UmbModalManagerContext;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => {\r\n\t\t\tthis.#modalManager = instance;\r\n\t\t});\r\n\r\n\t\tnew UmbModalRouteRegistrationController(this, UMB_IMAGE_CROPPER_EDITOR_MODAL)\r\n\t\t\t.addAdditionalPath(':key')\r\n\t\t\t.onSetup((params) => {\r\n\t\t\t\tconst key = params.key;\r\n\t\t\t\tif (!key) return false;\r\n\r\n\t\t\t\tconst item = this.items.find((item) => item.key === key);\r\n\t\t\t\tif (!item) return false;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\tcropOptions: this.preselectedCrops,\r\n\t\t\t\t\t\thideFocalPoint: !this.focalPointEnabled,\r\n\t\t\t\t\t\tkey,\r\n\t\t\t\t\t\tunique: item.mediaKey,\r\n\t\t\t\t\t\tpickableFilter: this.#pickableFilter,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\tcrops: item.crops ?? [],\r\n\t\t\t\t\t\tfocalPoint: item.focalPoint ?? { left: 0.5, top: 0.5 },\r\n\t\t\t\t\t\tsrc: '',\r\n\t\t\t\t\t\tkey,\r\n\t\t\t\t\t\tunique: item.mediaKey,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t})\r\n\t\t\t.onSubmit((value) => {\r\n\t\t\t\tthis.items = this.items.map((item) => {\r\n\t\t\t\t\tif (item.key !== value.key) return item;\r\n\r\n\t\t\t\t\tconst focalPoint = this.focalPointEnabled ? value.focalPoint : null;\r\n\t\t\t\t\tconst crops = value.crops;\r\n\t\t\t\t\tconst mediaKey = value.unique;\r\n\r\n\t\t\t\t\t// Note: If the mediaKey changes we will change the key which causes cards to update\r\n\t\t\t\t\tconst key = mediaKey === item.mediaKey ? item.key : UmbId.new();\r\n\r\n\t\t\t\t\treturn { ...item, crops, mediaKey, focalPoint, key };\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t\t\t})\r\n\t\t\t.observeRouteBuilder((routeBuilder) => {\r\n\t\t\t\tthis._routeBuilder = routeBuilder;\r\n\t\t\t});\r\n\r\n\t\tthis.addValidator(\r\n\t\t\t'rangeUnderflow',\r\n\t\t\t() => this.minMessage,\r\n\t\t\t() => !!this.min && this.items?.length < this.min,\r\n\t\t);\r\n\t\tthis.addValidator(\r\n\t\t\t'rangeOverflow',\r\n\t\t\t() => this.maxMessage,\r\n\t\t\t() => !!this.max && this.items?.length > this.max,\r\n\t\t);\r\n\t}\r\n\r\n\tprotected override getFormElement() {\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tasync #populateCards() {\r\n\t\tconst missingCards = this.items.filter((item) => !this._cards.find((card) => card.unique === item.key));\r\n\t\tif (!missingCards.length) return;\r\n\r\n\t\tif (!this.items?.length) {\r\n\t\t\tthis._cards = [];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst uniques = this.items.map((item) => item.mediaKey);\r\n\r\n\t\tconst { data: items } = await this.#itemRepository.requestItems(uniques);\r\n\r\n\t\tthis._cards = this.items.map((item) => {\r\n\t\t\tconst media = items?.find((x) => x.unique === item.mediaKey);\r\n\t\t\treturn {\r\n\t\t\t\tunique: item.key,\r\n\t\t\t\tmedia: item.mediaKey,\r\n\t\t\t\tname: media?.name ?? '',\r\n\t\t\t\ticon: media?.mediaType?.icon,\r\n\t\t\t\tisTrashed: media?.isTrashed ?? false,\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\t#pickableFilter: (item: UmbMediaItemModel) => boolean = (item) => {\r\n\t\tif (this.allowedContentTypeIds && this.allowedContentTypeIds.length > 0) {\r\n\t\t\treturn this.allowedContentTypeIds.includes(item.mediaType.unique);\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t#addItems(uniques: string[]) {\r\n\t\tif (!uniques.length) return;\r\n\r\n\t\tconst additions: Array = uniques.map((unique) => ({\r\n\t\t\tkey: UmbId.new(),\r\n\t\t\tmediaKey: unique,\r\n\t\t\tmediaTypeAlias: '',\r\n\t\t\tcrops: [],\r\n\t\t\tfocalPoint: null,\r\n\t\t}));\r\n\r\n\t\tthis.#items = [...this.#items, ...additions];\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\tasync #openPicker() {\r\n\t\tconst modalHandler = this.#modalManager?.open(this, UMB_MEDIA_PICKER_MODAL, {\r\n\t\t\tdata: {\r\n\t\t\t\tmultiple: this.multiple,\r\n\t\t\t\tstartNode: this.startNode,\r\n\t\t\t\tpickableFilter: this.#pickableFilter,\r\n\t\t\t},\r\n\t\t\tvalue: { selection: [] },\r\n\t\t});\r\n\r\n\t\tconst data = await modalHandler?.onSubmit().catch(() => null);\r\n\t\tif (!data) return;\r\n\r\n\t\tconst selection = data.selection;\r\n\t\tthis.#addItems(selection);\r\n\t}\r\n\r\n\tasync #onRemove(item: UmbRichMediaCardModel) {\r\n\t\tawait umbConfirmModal(this, {\r\n\t\t\tcolor: 'danger',\r\n\t\t\theadline: `${this.localize.term('actions_remove')} ${item.name}?`,\r\n\t\t\tcontent: `${this.localize.term('defaultdialogs_confirmremove')} ${item.name}?`,\r\n\t\t\tconfirmLabel: this.localize.term('actions_remove'),\r\n\t\t});\r\n\r\n\t\tthis.#items = this.#items.filter((x) => x.key !== item.unique);\r\n\t\tthis._cards = this._cards.filter((x) => x.unique !== item.unique);\r\n\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\tasync #onUploadCompleted(e: CustomEvent) {\r\n\t\tconst completed = e.detail as Array;\r\n\t\tconst uploaded = completed.map((file) => file.unique);\r\n\t\tthis.#addItems(uploaded);\r\n\t}\r\n\r\n\toverride render() {\r\n\t\treturn html`\r\n\t\t\t${this.#renderDropzone()}\r\n\t\t\t
${this.#renderItems()} ${this.#renderAddButton()}
\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderDropzone() {\r\n\t\tif (this.readonly) return nothing;\r\n\t\tif (this._cards && this._cards.length >= this.max) return;\r\n\t\treturn html` 1} @complete=${this.#onUploadCompleted}>`;\r\n\t}\r\n\r\n\t#renderItems() {\r\n\t\tif (!this._cards.length) return;\r\n\t\treturn html`\r\n\t\t\t${repeat(\r\n\t\t\t\tthis._cards,\r\n\t\t\t\t(item) => item.unique,\r\n\t\t\t\t(item) => this.#renderItem(item),\r\n\t\t\t)}\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderAddButton() {\r\n\t\t// TODO: Stop preventing adding more, instead implement proper validation for user feedback. [NL]\r\n\t\tif ((this._cards && this.max && this._cards.length >= this.max) || (this._cards.length && !this.multiple)) return;\r\n\t\tif (this.readonly && this._cards.length > 0) {\r\n\t\t\treturn nothing;\r\n\t\t} else {\r\n\t\t\treturn html`\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t${this.localize.term('general_choose')}\r\n\t\t\t\t\r\n\t\t\t`;\r\n\t\t}\r\n\t}\r\n\r\n\t#renderItem(item: UmbRichMediaCardModel) {\r\n\t\tif (!item.unique) return nothing;\r\n\t\tconst href = this.readonly ? undefined : this._routeBuilder?.({ key: item.unique });\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t${this.#renderIsTrashed(item)} ${this.#renderActions(item)}\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderActions(item: UmbRichMediaCardModel) {\r\n\t\tif (this.readonly) return nothing;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t this.#onRemove(item)}>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderIsTrashed(item: UmbRichMediaCardModel) {\r\n\t\tif (!item.isTrashed) return;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\tTrashed\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tcss`\r\n\t\t\t:host {\r\n\t\t\t\tposition: relative;\r\n\t\t\t}\r\n\t\t\t.container {\r\n\t\t\t\tdisplay: grid;\r\n\t\t\t\tgrid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\r\n\t\t\t\tgrid-auto-rows: 150px;\r\n\t\t\t\tgap: var(--uui-size-space-5);\r\n\t\t\t}\r\n\r\n\t\t\t#btn-add {\r\n\t\t\t\ttext-align: center;\r\n\t\t\t\theight: 100%;\r\n\t\t\t}\r\n\r\n\t\t\tuui-icon {\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tmargin: 0 auto;\r\n\t\t\t}\r\n\r\n\t\t\tuui-card-media umb-icon {\r\n\t\t\t\tfont-size: var(--uui-size-8);\r\n\t\t\t}\r\n\r\n\t\t\tuui-card-media[drag-placeholder] {\r\n\t\t\t\topacity: 0.2;\r\n\t\t\t}\r\n\t\t\timg {\r\n\t\t\t\tbackground-image: url('data:image/svg+xml;charset=utf-8,');\r\n\t\t\t\tbackground-size: 10px 10px;\r\n\t\t\t\tbackground-repeat: repeat;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbInputRichMediaElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-input-rich-media': UmbInputRichMediaElement;\r\n\t}\r\n}\r\n","import type { UmbImageCropperPropertyEditorValue } from './types.js';\r\nimport type { UmbInputImageCropperFieldElement } from './image-cropper-field.element.js';\r\nimport { html, customElement, property, query, state, css } from '@umbraco-cms/backoffice/external/lit';\r\nimport type { UUIFileDropzoneElement, UUIFileDropzoneEvent } from '@umbraco-cms/backoffice/external/uui';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { UmbTemporaryFileManager } from '@umbraco-cms/backoffice/temporary-file';\r\nimport { assignToFrozenObject } from '@umbraco-cms/backoffice/observable-api';\r\n\r\nimport './image-cropper.element.js';\r\nimport './image-cropper-focus-setter.element.js';\r\nimport './image-cropper-preview.element.js';\r\nimport './image-cropper-field.element.js';\r\n\r\nconst DefaultFocalPoint = { left: 0.5, top: 0.5 };\r\nconst DefaultValue = {\r\n\ttemporaryFileId: null,\r\n\tsrc: '',\r\n\tcrops: [],\r\n\tfocalPoint: DefaultFocalPoint,\r\n};\r\n\r\n@customElement('umb-input-image-cropper')\r\nexport class UmbInputImageCropperElement extends UmbLitElement {\r\n\t@query('#dropzone')\r\n\tprivate _dropzone?: UUIFileDropzoneElement;\r\n\r\n\t@property({ attribute: false })\r\n\tvalue: UmbImageCropperPropertyEditorValue = DefaultValue;\r\n\r\n\t@property({ attribute: false })\r\n\tcrops: UmbImageCropperPropertyEditorValue['crops'] = [];\r\n\r\n\t@state()\r\n\tfile?: File;\r\n\r\n\t@state()\r\n\tfileUnique?: string;\r\n\r\n\t#manager?: UmbTemporaryFileManager;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.#manager = new UmbTemporaryFileManager(this);\r\n\t}\r\n\r\n\tprotected override firstUpdated(): void {\r\n\t\tthis.#mergeCrops();\r\n\t}\r\n\r\n\t#onUpload(e: UUIFileDropzoneEvent) {\r\n\t\tconst file = e.detail.files[0];\r\n\t\tif (!file) return;\r\n\t\tconst unique = UmbId.new();\r\n\r\n\t\tthis.file = file;\r\n\t\tthis.fileUnique = unique;\r\n\r\n\t\tthis.value = assignToFrozenObject(this.value, { temporaryFileId: unique });\r\n\r\n\t\tthis.#manager?.uploadOne({ temporaryUnique: unique, file });\r\n\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\t#onBrowse(e: Event) {\r\n\t\tif (!this._dropzone) return;\r\n\t\te.stopImmediatePropagation();\r\n\t\tthis._dropzone.browse();\r\n\t}\r\n\r\n\t#onRemove = () => {\r\n\t\tthis.value = assignToFrozenObject(this.value, DefaultValue);\r\n\t\tif (this.fileUnique) {\r\n\t\t\tthis.#manager?.removeOne(this.fileUnique);\r\n\t\t}\r\n\t\tthis.fileUnique = undefined;\r\n\t\tthis.file = undefined;\r\n\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t};\r\n\r\n\t#mergeCrops() {\r\n\t\t// Replace crops from the value with the crops from the config while keeping the coordinates from the value if they exist.\r\n\t\tconst filteredCrops = this.crops.map((crop) => {\r\n\t\t\tconst cropFromValue = this.value.crops.find((valueCrop) => valueCrop.alias === crop.alias);\r\n\t\t\tconst result = {\r\n\t\t\t\t...crop,\r\n\t\t\t\tcoordinates: cropFromValue?.coordinates ?? undefined,\r\n\t\t\t};\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\r\n\t\tthis.value = {\r\n\t\t\t...this.value,\r\n\t\t\tcrops: filteredCrops,\r\n\t\t};\r\n\t}\r\n\r\n\toverride render() {\r\n\t\tif (this.value.src || this.file) {\r\n\t\t\treturn this.#renderImageCropper();\r\n\t\t}\r\n\r\n\t\treturn this.#renderDropzone();\r\n\t}\r\n\r\n\t#renderDropzone() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#onChange(e: CustomEvent) {\r\n\t\tconst value = (e.target as UmbInputImageCropperFieldElement).value;\r\n\r\n\t\tif (!value) {\r\n\t\t\tthis.value = DefaultValue;\r\n\t\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.value && this.value.temporaryFileId) {\r\n\t\t\tvalue.temporaryFileId = this.value.temporaryFileId;\r\n\t\t}\r\n\r\n\t\tthis.value = value;\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\t#renderImageCropper() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t${this.localize.term('content_uploadClear')}\r\n\t\t\t\r\n\t\t `;\r\n\t}\r\n\r\n\tstatic override styles = [\r\n\t\tcss`\r\n\t\t\tuui-file-dropzone {\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tdisplay: block;\r\n\t\t\t}\r\n\t\t\tuui-file-dropzone::after {\r\n\t\t\t\tcontent: '';\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tinset: 0;\r\n\t\t\t\tcursor: pointer;\r\n\t\t\t\tborder: 1px dashed var(--uui-color-divider-emphasis);\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-input-image-cropper': UmbInputImageCropperElement;\r\n\t}\r\n}\r\n","/**\r\n * @param {string} extension - The file extension to convert\r\n * @returns { string | null } The MIME type or null if the mime type is not found\r\n */\r\nexport function getMimeTypeFromExtension(extension: string): string | null {\r\n\t// Define a map of file extensions to MIME types\r\n\tconst mimeTypes: { [key: string]: string } = {\r\n\t\t'.123': 'application/vnd.lotus-1-2-3',\r\n\t\t'.3dml': 'text/vnd.in3d.3dml',\r\n\t\t'.3g2': 'video/3gpp2',\r\n\t\t'.3gp': 'video/3gpp',\r\n\t\t'.a': 'application/octet-stream',\r\n\t\t'.aab': 'application/x-authorware-bin',\r\n\t\t'.aac': 'audio/x-aac',\r\n\t\t'.aam': 'application/x-authorware-map',\r\n\t\t'.aas': 'application/x-authorware-seg',\r\n\t\t'.abw': 'application/x-abiword',\r\n\t\t'.acc': 'application/vnd.americandynamics.acc',\r\n\t\t'.ace': 'application/x-ace-compressed',\r\n\t\t'.acu': 'application/vnd.acucobol',\r\n\t\t'.acutc': 'application/vnd.acucorp',\r\n\t\t'.adp': 'audio/adpcm',\r\n\t\t'.aep': 'application/vnd.audiograph',\r\n\t\t'.afm': 'application/x-font-type1',\r\n\t\t'.afp': 'application/vnd.ibm.modcap',\r\n\t\t'.ai': 'application/postscript',\r\n\t\t'.aif': 'audio/x-aiff',\r\n\t\t'.aifc': 'audio/x-aiff',\r\n\t\t'.aiff': 'audio/x-aiff',\r\n\t\t'.air': 'application/vnd.adobe.air-application-installer-package+zip',\r\n\t\t'.ami': 'application/vnd.amiga.ami',\r\n\t\t'.apk': 'application/vnd.android.package-archive',\r\n\t\t'.application': 'application/x-ms-application',\r\n\t\t'.apr': 'application/vnd.lotus-approach',\r\n\t\t'.asc': 'application/pgp-signature',\r\n\t\t'.asf': 'video/x-ms-asf',\r\n\t\t'.asm': 'text/x-asm',\r\n\t\t'.aso': 'application/vnd.accpac.simply.aso',\r\n\t\t'.asx': 'video/x-ms-asf',\r\n\t\t'.atc': 'application/vnd.acucorp',\r\n\t\t'.atom': 'application/atom+xml',\r\n\t\t'.atomcat': 'application/atomcat+xml',\r\n\t\t'.atomsvc': 'application/atomsvc+xml',\r\n\t\t'.atx': 'application/vnd.antix.game-component',\r\n\t\t'.au': 'audio/basic',\r\n\t\t'.avi': 'video/x-msvideo',\r\n\t\t'.aw': 'application/applixware',\r\n\t\t'.azf': 'application/vnd.airzip.filesecure.azf',\r\n\t\t'.azs': 'application/vnd.airzip.filesecure.azs',\r\n\t\t'.azw': 'application/vnd.amazon.ebook',\r\n\t\t'.bat': 'application/x-msdownload',\r\n\t\t'.bcpio': 'application/x-bcpio',\r\n\t\t'.bdf': 'application/x-font-bdf',\r\n\t\t'.bdm': 'application/vnd.syncml.dm+wbxml',\r\n\t\t'.bh2': 'application/vnd.fujitsu.oasysprs',\r\n\t\t'.bin': 'application/octet-stream',\r\n\t\t'.bmi': 'application/vnd.bmi',\r\n\t\t'.bmp': 'image/bmp',\r\n\t\t'.book': 'application/vnd.framemaker',\r\n\t\t'.box': 'application/vnd.previewsystems.box',\r\n\t\t'.boz': 'application/x-bzip2',\r\n\t\t'.bpk': 'application/octet-stream',\r\n\t\t'.btif': 'image/prs.btif',\r\n\t\t'.bz': 'application/x-bzip',\r\n\t\t'.bz2': 'application/x-bzip2',\r\n\t\t'.c': 'text/x-c',\r\n\t\t'.c4d': 'application/vnd.clonk.c4group',\r\n\t\t'.c4f': 'application/vnd.clonk.c4group',\r\n\t\t'.c4g': 'application/vnd.clonk.c4group',\r\n\t\t'.c4p': 'application/vnd.clonk.c4group',\r\n\t\t'.c4u': 'application/vnd.clonk.c4group',\r\n\t\t'.cab': 'application/vnd.ms-cab-compressed',\r\n\t\t'.car': 'application/vnd.curl.car',\r\n\t\t'.cat': 'application/vnd.ms-pki.seccat',\r\n\t\t'.cc': 'text/x-c',\r\n\t\t'.cct': 'application/x-director',\r\n\t\t'.ccxml': 'application/ccxml+xml',\r\n\t\t'.cdbcmsg': 'application/vnd.contact.cmsg',\r\n\t\t'.cdf': 'application/x-netcdf',\r\n\t\t'.cdkey': 'application/vnd.mediastation.cdkey',\r\n\t\t'.cdx': 'chemical/x-cdx',\r\n\t\t'.cdxml': 'application/vnd.chemdraw+xml',\r\n\t\t'.cdy': 'application/vnd.cinderella',\r\n\t\t'.cer': 'application/pkix-cert',\r\n\t\t'.cgm': 'image/cgm',\r\n\t\t'.chat': 'application/x-chat',\r\n\t\t'.chm': 'application/vnd.ms-htmlhelp',\r\n\t\t'.chrt': 'application/vnd.kde.kchart',\r\n\t\t'.cif': 'chemical/x-cif',\r\n\t\t'.cii': 'application/vnd.anser-web-certificate-issue-initiation',\r\n\t\t'.cil': 'application/vnd.ms-artgalry',\r\n\t\t'.cla': 'application/vnd.claymore',\r\n\t\t'.class': 'application/java-vm',\r\n\t\t'.clkk': 'application/vnd.crick.clicker.keyboard',\r\n\t\t'.clkp': 'application/vnd.crick.clicker.palette',\r\n\t\t'.clkt': 'application/vnd.crick.clicker.template',\r\n\t\t'.clkw': 'application/vnd.crick.clicker.wordbank',\r\n\t\t'.clkx': 'application/vnd.crick.clicker',\r\n\t\t'.clp': 'application/x-msclip',\r\n\t\t'.cmc': 'application/vnd.cosmocaller',\r\n\t\t'.cmdf': 'chemical/x-cmdf',\r\n\t\t'.cml': 'chemical/x-cml',\r\n\t\t'.cmp': 'application/vnd.yellowriver-custom-menu',\r\n\t\t'.cmx': 'image/x-cmx',\r\n\t\t'.cod': 'application/vnd.rim.cod',\r\n\t\t'.com': 'application/x-msdownload',\r\n\t\t'.conf': 'text/plain',\r\n\t\t'.cpio': 'application/x-cpio',\r\n\t\t'.cpp': 'text/x-c',\r\n\t\t'.cpt': 'application/mac-compactpro',\r\n\t\t'.crd': 'application/x-mscardfile',\r\n\t\t'.crl': 'application/pkix-crl',\r\n\t\t'.crt': 'application/x-x509-ca-cert',\r\n\t\t'.csh': 'application/x-csh',\r\n\t\t'.csml': 'chemical/x-csml',\r\n\t\t'.csp': 'application/vnd.commonspace',\r\n\t\t'.css': 'text/css',\r\n\t\t'.cst': 'application/x-director',\r\n\t\t'.csv': 'text/csv',\r\n\t\t'.cu': 'application/cu-seeme',\r\n\t\t'.curl': 'text/vnd.curl',\r\n\t\t'.cww': 'application/prs.cww',\r\n\t\t'.cxt': 'application/x-director',\r\n\t\t'.cxx': 'text/x-c',\r\n\t\t'.daf': 'application/vnd.mobius.daf',\r\n\t\t'.dataless': 'application/vnd.fdsn.seed',\r\n\t\t'.davmount': 'application/davmount+xml',\r\n\t\t'.dcr': 'application/x-director',\r\n\t\t'.dcurl': 'text/vnd.curl.dcurl',\r\n\t\t'.dd2': 'application/vnd.oma.dd2+xml',\r\n\t\t'.ddd': 'application/vnd.fujixerox.ddd',\r\n\t\t'.deb': 'application/x-debian-package',\r\n\t\t'.def': 'text/plain',\r\n\t\t'.deploy': 'application/octet-stream',\r\n\t\t'.der': 'application/x-x509-ca-cert',\r\n\t\t'.dfac': 'application/vnd.dreamfactory',\r\n\t\t'.dic': 'text/x-c',\r\n\t\t'.diff': 'text/plain',\r\n\t\t'.dir': 'application/x-director',\r\n\t\t'.dis': 'application/vnd.mobius.dis',\r\n\t\t'.dist': 'application/octet-stream',\r\n\t\t'.distz': 'application/octet-stream',\r\n\t\t'.djv': 'image/vnd.djvu',\r\n\t\t'.djvu': 'image/vnd.djvu',\r\n\t\t'.dll': 'application/x-msdownload',\r\n\t\t'.dmg': 'application/octet-stream',\r\n\t\t'.dms': 'application/octet-stream',\r\n\t\t'.dna': 'application/vnd.dna',\r\n\t\t'.doc': 'application/msword',\r\n\t\t'.docm': 'application/vnd.ms-word.document.macroenabled.12',\r\n\t\t'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n\t\t'.dot': 'application/msword',\r\n\t\t'.dotm': 'application/vnd.ms-word.template.macroenabled.12',\r\n\t\t'.dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\r\n\t\t'.dp': 'application/vnd.osgi.dp',\r\n\t\t'.dpg': 'application/vnd.dpgraph',\r\n\t\t'.dsc': 'text/prs.lines.tag',\r\n\t\t'.dtb': 'application/x-dtbook+xml',\r\n\t\t'.dtd': 'application/xml-dtd',\r\n\t\t'.dts': 'audio/vnd.dts',\r\n\t\t'.dtshd': 'audio/vnd.dts.hd',\r\n\t\t'.dump': 'application/octet-stream',\r\n\t\t'.dvi': 'application/x-dvi',\r\n\t\t'.dwf': 'model/vnd.dwf',\r\n\t\t'.dwg': 'image/vnd.dwg',\r\n\t\t'.dxf': 'image/vnd.dxf',\r\n\t\t'.dxp': 'application/vnd.spotfire.dxp',\r\n\t\t'.dxr': 'application/x-director',\r\n\t\t'.ecelp4800': 'audio/vnd.nuera.ecelp4800',\r\n\t\t'.ecelp7470': 'audio/vnd.nuera.ecelp7470',\r\n\t\t'.ecelp9600': 'audio/vnd.nuera.ecelp9600',\r\n\t\t'.ecma': 'application/ecmascript',\r\n\t\t'.edm': 'application/vnd.novadigm.edm',\r\n\t\t'.edx': 'application/vnd.novadigm.edx',\r\n\t\t'.efif': 'application/vnd.picsel',\r\n\t\t'.ei6': 'application/vnd.pg.osasli',\r\n\t\t'.elc': 'application/octet-stream',\r\n\t\t'.eml': 'message/rfc822',\r\n\t\t'.emma': 'application/emma+xml',\r\n\t\t'.eol': 'audio/vnd.digital-winds',\r\n\t\t'.eot': 'application/vnd.ms-fontobject',\r\n\t\t'.eps': 'application/postscript',\r\n\t\t'.epub': 'application/epub+zip',\r\n\t\t'.es3': 'application/vnd.eszigno3+xml',\r\n\t\t'.esf': 'application/vnd.epson.esf',\r\n\t\t'.et3': 'application/vnd.eszigno3+xml',\r\n\t\t'.etx': 'text/x-setext',\r\n\t\t'.exe': 'application/x-msdownload',\r\n\t\t'.ext': 'application/vnd.novadigm.ext',\r\n\t\t'.ez': 'application/andrew-inset',\r\n\t\t'.ez2': 'application/vnd.ezpix-album',\r\n\t\t'.ez3': 'application/vnd.ezpix-package',\r\n\t\t'.f': 'text/x-fortran',\r\n\t\t'.f4v': 'video/x-f4v',\r\n\t\t'.f77': 'text/x-fortran',\r\n\t\t'.f90': 'text/x-fortran',\r\n\t\t'.fbs': 'image/vnd.fastbidsheet',\r\n\t\t'.fdf': 'application/vnd.fdf',\r\n\t\t'.fe_launch': 'application/vnd.denovo.fcselayout-link',\r\n\t\t'.fg5': 'application/vnd.fujitsu.oasysgp',\r\n\t\t'.fgd': 'application/x-director',\r\n\t\t'.fh': 'image/x-freehand',\r\n\t\t'.fh4': 'image/x-freehand',\r\n\t\t'.fh5': 'image/x-freehand',\r\n\t\t'.fh7': 'image/x-freehand',\r\n\t\t'.fhc': 'image/x-freehand',\r\n\t\t'.fig': 'application/x-xfig',\r\n\t\t'.fli': 'video/x-fli',\r\n\t\t'.flo': 'application/vnd.micrografx.flo',\r\n\t\t'.flv': 'video/x-flv',\r\n\t\t'.flw': 'application/vnd.kde.kivio',\r\n\t\t'.flx': 'text/vnd.fmi.flexstor',\r\n\t\t'.fly': 'text/vnd.fly',\r\n\t\t'.fm': 'application/vnd.framemaker',\r\n\t\t'.fnc': 'application/vnd.frogans.fnc',\r\n\t\t'.for': 'text/x-fortran',\r\n\t\t'.fpx': 'image/vnd.fpx',\r\n\t\t'.frame': 'application/vnd.framemaker',\r\n\t\t'.fsc': 'application/vnd.fsc.weblaunch',\r\n\t\t'.fst': 'image/vnd.fst',\r\n\t\t'.ftc': 'application/vnd.fluxtime.clip',\r\n\t\t'.fti': 'application/vnd.anser-web-funds-transfer-initiation',\r\n\t\t'.fvt': 'video/vnd.fvt',\r\n\t\t'.fzs': 'application/vnd.fuzzysheet',\r\n\t\t'.g3': 'image/g3fax',\r\n\t\t'.gac': 'application/vnd.groove-account',\r\n\t\t'.gdl': 'model/vnd.gdl',\r\n\t\t'.geo': 'application/vnd.dynageo',\r\n\t\t'.gex': 'application/vnd.geometry-explorer',\r\n\t\t'.ggb': 'application/vnd.geogebra.file',\r\n\t\t'.ggt': 'application/vnd.geogebra.tool',\r\n\t\t'.ghf': 'application/vnd.groove-help',\r\n\t\t'.gif': 'image/gif',\r\n\t\t'.gim': 'application/vnd.groove-identity-message',\r\n\t\t'.gmx': 'application/vnd.gmx',\r\n\t\t'.gnumeric': 'application/x-gnumeric',\r\n\t\t'.gph': 'application/vnd.flographit',\r\n\t\t'.gqf': 'application/vnd.grafeq',\r\n\t\t'.gqs': 'application/vnd.grafeq',\r\n\t\t'.gram': 'application/srgs',\r\n\t\t'.gre': 'application/vnd.geometry-explorer',\r\n\t\t'.grv': 'application/vnd.groove-injector',\r\n\t\t'.grxml': 'application/srgs+xml',\r\n\t\t'.gsf': 'application/x-font-ghostscript',\r\n\t\t'.gtar': 'application/x-gtar',\r\n\t\t'.gtm': 'application/vnd.groove-tool-message',\r\n\t\t'.gtw': 'model/vnd.gtw',\r\n\t\t'.gv': 'text/vnd.graphviz',\r\n\t\t'.gz': 'application/x-gzip',\r\n\t\t'.h': 'text/x-c',\r\n\t\t'.h261': 'video/h261',\r\n\t\t'.h263': 'video/h263',\r\n\t\t'.h264': 'video/h264',\r\n\t\t'.hbci': 'application/vnd.hbci',\r\n\t\t'.hdf': 'application/x-hdf',\r\n\t\t'.hh': 'text/x-c',\r\n\t\t'.hlp': 'application/winhlp',\r\n\t\t'.hpgl': 'application/vnd.hp-hpgl',\r\n\t\t'.hpid': 'application/vnd.hp-hpid',\r\n\t\t'.hps': 'application/vnd.hp-hps',\r\n\t\t'.hqx': 'application/mac-binhex40',\r\n\t\t'.htke': 'application/vnd.kenameaapp',\r\n\t\t'.htm': 'text/html',\r\n\t\t'.html': 'text/html',\r\n\t\t'.hvd': 'application/vnd.yamaha.hv-dic',\r\n\t\t'.hvp': 'application/vnd.yamaha.hv-voice',\r\n\t\t'.hvs': 'application/vnd.yamaha.hv-script',\r\n\t\t'.icc': 'application/vnd.iccprofile',\r\n\t\t'.ice': 'x-conference/x-cooltalk',\r\n\t\t'.icm': 'application/vnd.iccprofile',\r\n\t\t'.ico': 'image/x-icon',\r\n\t\t'.ics': 'text/calendar',\r\n\t\t'.ief': 'image/ief',\r\n\t\t'.ifb': 'text/calendar',\r\n\t\t'.ifm': 'application/vnd.shana.informed.formdata',\r\n\t\t'.iges': 'model/iges',\r\n\t\t'.igl': 'application/vnd.igloader',\r\n\t\t'.igs': 'model/iges',\r\n\t\t'.igx': 'application/vnd.micrografx.igx',\r\n\t\t'.iif': 'application/vnd.shana.informed.interchange',\r\n\t\t'.imp': 'application/vnd.accpac.simply.imp',\r\n\t\t'.ims': 'application/vnd.ms-ims',\r\n\t\t'.in': 'text/plain',\r\n\t\t'.ipk': 'application/vnd.shana.informed.package',\r\n\t\t'.irm': 'application/vnd.ibm.rights-management',\r\n\t\t'.irp': 'application/vnd.irepository.package+xml',\r\n\t\t'.iso': 'application/octet-stream',\r\n\t\t'.itp': 'application/vnd.shana.informed.formtemplate',\r\n\t\t'.ivp': 'application/vnd.immervision-ivp',\r\n\t\t'.ivu': 'application/vnd.immervision-ivu',\r\n\t\t'.jad': 'text/vnd.sun.j2me.app-descriptor',\r\n\t\t'.jam': 'application/vnd.jam',\r\n\t\t'.jar': 'application/java-archive',\r\n\t\t'.java': 'text/x-java-source',\r\n\t\t'.jisp': 'application/vnd.jisp',\r\n\t\t'.jlt': 'application/vnd.hp-jlyt',\r\n\t\t'.jnlp': 'application/x-java-jnlp-file',\r\n\t\t'.joda': 'application/vnd.joost.joda-archive',\r\n\t\t'.jpe': 'image/jpeg',\r\n\t\t'.jpeg': 'image/jpeg',\r\n\t\t'.jpg': 'image/jpeg',\r\n\t\t'.jpgm': 'video/jpm',\r\n\t\t'.jpgv': 'video/jpeg',\r\n\t\t'.jpm': 'video/jpm',\r\n\t\t'.js': 'application/javascript',\r\n\t\t'.json': 'application/json',\r\n\t\t'.kar': 'audio/midi',\r\n\t\t'.karbon': 'application/vnd.kde.karbon',\r\n\t\t'.kfo': 'application/vnd.kde.kformula',\r\n\t\t'.kia': 'application/vnd.kidspiration',\r\n\t\t'.kil': 'application/x-killustrator',\r\n\t\t'.kml': 'application/vnd.google-earth.kml+xml',\r\n\t\t'.kmz': 'application/vnd.google-earth.kmz',\r\n\t\t'.kne': 'application/vnd.kinar',\r\n\t\t'.knp': 'application/vnd.kinar',\r\n\t\t'.kon': 'application/vnd.kde.kontour',\r\n\t\t'.kpr': 'application/vnd.kde.kpresenter',\r\n\t\t'.kpt': 'application/vnd.kde.kpresenter',\r\n\t\t'.ksh': 'text/plain',\r\n\t\t'.ksp': 'application/vnd.kde.kspread',\r\n\t\t'.ktr': 'application/vnd.kahootz',\r\n\t\t'.ktz': 'application/vnd.kahootz',\r\n\t\t'.kwd': 'application/vnd.kde.kword',\r\n\t\t'.kwt': 'application/vnd.kde.kword',\r\n\t\t'.latex': 'application/x-latex',\r\n\t\t'.lbd': 'application/vnd.llamagraphics.life-balance.desktop',\r\n\t\t'.lbe': 'application/vnd.llamagraphics.life-balance.exchange+xml',\r\n\t\t'.les': 'application/vnd.hhe.lesson-player',\r\n\t\t'.lha': 'application/octet-stream',\r\n\t\t'.link66': 'application/vnd.route66.link66+xml',\r\n\t\t'.list': 'text/plain',\r\n\t\t'.list3820': 'application/vnd.ibm.modcap',\r\n\t\t'.listafp': 'application/vnd.ibm.modcap',\r\n\t\t'.log': 'text/plain',\r\n\t\t'.lostxml': 'application/lost+xml',\r\n\t\t'.lrf': 'application/octet-stream',\r\n\t\t'.lrm': 'application/vnd.ms-lrm',\r\n\t\t'.ltf': 'application/vnd.frogans.ltf',\r\n\t\t'.lvp': 'audio/vnd.lucent.voice',\r\n\t\t'.lwp': 'application/vnd.lotus-wordpro',\r\n\t\t'.lzh': 'application/octet-stream',\r\n\t\t'.m13': 'application/x-msmediaview',\r\n\t\t'.m14': 'application/x-msmediaview',\r\n\t\t'.m1v': 'video/mpeg',\r\n\t\t'.m2a': 'audio/mpeg',\r\n\t\t'.m2v': 'video/mpeg',\r\n\t\t'.m3a': 'audio/mpeg',\r\n\t\t'.m3u': 'audio/x-mpegurl',\r\n\t\t'.m4u': 'video/vnd.mpegurl',\r\n\t\t'.m4v': 'video/x-m4v',\r\n\t\t'.ma': 'application/mathematica',\r\n\t\t'.mag': 'application/vnd.ecowin.chart',\r\n\t\t'.maker': 'application/vnd.framemaker',\r\n\t\t'.man': 'text/troff',\r\n\t\t'.mathml': 'application/mathml+xml',\r\n\t\t'.mb': 'application/mathematica',\r\n\t\t'.mbk': 'application/vnd.mobius.mbk',\r\n\t\t'.mbox': 'application/mbox',\r\n\t\t'.mc1': 'application/vnd.medcalcdata',\r\n\t\t'.mcd': 'application/vnd.mcd',\r\n\t\t'.mcurl': 'text/vnd.curl.mcurl',\r\n\t\t'.mdb': 'application/x-msaccess',\r\n\t\t'.mdi': 'image/vnd.ms-modi',\r\n\t\t'.me': 'text/troff',\r\n\t\t'.mesh': 'model/mesh',\r\n\t\t'.mfm': 'application/vnd.mfmp',\r\n\t\t'.mgz': 'application/vnd.proteus.magazine',\r\n\t\t'.mht': 'message/rfc822',\r\n\t\t'.mhtml': 'message/rfc822',\r\n\t\t'.mid': 'audio/midi',\r\n\t\t'.midi': 'audio/midi',\r\n\t\t'.mif': 'application/vnd.mif',\r\n\t\t'.mime': 'message/rfc822',\r\n\t\t'.mj2': 'video/mj2',\r\n\t\t'.mjp2': 'video/mj2',\r\n\t\t'.mlp': 'application/vnd.dolby.mlp',\r\n\t\t'.mmd': 'application/vnd.chipnuts.karaoke-mmd',\r\n\t\t'.mmf': 'application/vnd.smaf',\r\n\t\t'.mmr': 'image/vnd.fujixerox.edmics-mmr',\r\n\t\t'.mny': 'application/x-msmoney',\r\n\t\t'.mobi': 'application/x-mobipocket-ebook',\r\n\t\t'.mov': 'video/quicktime',\r\n\t\t'.movie': 'video/x-sgi-movie',\r\n\t\t'.mp2': 'audio/mpeg',\r\n\t\t'.mp2a': 'audio/mpeg',\r\n\t\t'.mp3': 'audio/mpeg',\r\n\t\t'.mp4': 'video/mp4',\r\n\t\t'.mp4a': 'audio/mp4',\r\n\t\t'.mp4s': 'application/mp4',\r\n\t\t'.mp4v': 'video/mp4',\r\n\t\t'.mpa': 'video/mpeg',\r\n\t\t'.mpc': 'application/vnd.mophun.certificate',\r\n\t\t'.mpe': 'video/mpeg',\r\n\t\t'.mpeg': 'video/mpeg',\r\n\t\t'.mpg': 'video/mpeg',\r\n\t\t'.mpg4': 'video/mp4',\r\n\t\t'.mpga': 'audio/mpeg',\r\n\t\t'.mpkg': 'application/vnd.apple.installer+xml',\r\n\t\t'.mpm': 'application/vnd.blueice.multipass',\r\n\t\t'.mpn': 'application/vnd.mophun.application',\r\n\t\t'.mpp': 'application/vnd.ms-project',\r\n\t\t'.mpt': 'application/vnd.ms-project',\r\n\t\t'.mpy': 'application/vnd.ibm.minipay',\r\n\t\t'.mqy': 'application/vnd.mobius.mqy',\r\n\t\t'.mrc': 'application/marc',\r\n\t\t'.ms': 'text/troff',\r\n\t\t'.mscml': 'application/mediaservercontrol+xml',\r\n\t\t'.mseed': 'application/vnd.fdsn.mseed',\r\n\t\t'.mseq': 'application/vnd.mseq',\r\n\t\t'.msf': 'application/vnd.epson.msf',\r\n\t\t'.msh': 'model/mesh',\r\n\t\t'.msi': 'application/x-msdownload',\r\n\t\t'.msl': 'application/vnd.mobius.msl',\r\n\t\t'.msty': 'application/vnd.muvee.style',\r\n\t\t'.mts': 'model/vnd.mts',\r\n\t\t'.mus': 'application/vnd.musician',\r\n\t\t'.musicxml': 'application/vnd.recordare.musicxml+xml',\r\n\t\t'.mvb': 'application/x-msmediaview',\r\n\t\t'.mwf': 'application/vnd.mfer',\r\n\t\t'.mxf': 'application/mxf',\r\n\t\t'.mxl': 'application/vnd.recordare.musicxml',\r\n\t\t'.mxml': 'application/xv+xml',\r\n\t\t'.mxs': 'application/vnd.triscape.mxs',\r\n\t\t'.mxu': 'video/vnd.mpegurl',\r\n\t\t'.n-gage': 'application/vnd.nokia.n-gage.symbian.install',\r\n\t\t'.nb': 'application/mathematica',\r\n\t\t'.nc': 'application/x-netcdf',\r\n\t\t'.ncx': 'application/x-dtbncx+xml',\r\n\t\t'.ngdat': 'application/vnd.nokia.n-gage.data',\r\n\t\t'.nlu': 'application/vnd.neurolanguage.nlu',\r\n\t\t'.nml': 'application/vnd.enliven',\r\n\t\t'.nnd': 'application/vnd.noblenet-directory',\r\n\t\t'.nns': 'application/vnd.noblenet-sealer',\r\n\t\t'.nnw': 'application/vnd.noblenet-web',\r\n\t\t'.npx': 'image/vnd.net-fpx',\r\n\t\t'.nsf': 'application/vnd.lotus-notes',\r\n\t\t'.nws': 'message/rfc822',\r\n\t\t'.o': 'application/octet-stream',\r\n\t\t'.oa2': 'application/vnd.fujitsu.oasys2',\r\n\t\t'.oa3': 'application/vnd.fujitsu.oasys3',\r\n\t\t'.oas': 'application/vnd.fujitsu.oasys',\r\n\t\t'.obd': 'application/x-msbinder',\r\n\t\t'.obj': 'application/octet-stream',\r\n\t\t'.oda': 'application/oda',\r\n\t\t'.odb': 'application/vnd.oasis.opendocument.database',\r\n\t\t'.odc': 'application/vnd.oasis.opendocument.chart',\r\n\t\t'.odf': 'application/vnd.oasis.opendocument.formula',\r\n\t\t'.odft': 'application/vnd.oasis.opendocument.formula-template',\r\n\t\t'.odg': 'application/vnd.oasis.opendocument.graphics',\r\n\t\t'.odi': 'application/vnd.oasis.opendocument.image',\r\n\t\t'.odp': 'application/vnd.oasis.opendocument.presentation',\r\n\t\t'.ods': 'application/vnd.oasis.opendocument.spreadsheet',\r\n\t\t'.odt': 'application/vnd.oasis.opendocument.text',\r\n\t\t'.oga': 'audio/ogg',\r\n\t\t'.ogg': 'audio/ogg',\r\n\t\t'.ogv': 'video/ogg',\r\n\t\t'.ogx': 'application/ogg',\r\n\t\t'.onepkg': 'application/onenote',\r\n\t\t'.onetmp': 'application/onenote',\r\n\t\t'.onetoc': 'application/onenote',\r\n\t\t'.onetoc2': 'application/onenote',\r\n\t\t'.opf': 'application/oebps-package+xml',\r\n\t\t'.oprc': 'application/vnd.palm',\r\n\t\t'.org': 'application/vnd.lotus-organizer',\r\n\t\t'.osf': 'application/vnd.yamaha.openscoreformat',\r\n\t\t'.osfpvg': 'application/vnd.yamaha.openscoreformat.osfpvg+xml',\r\n\t\t'.otc': 'application/vnd.oasis.opendocument.chart-template',\r\n\t\t'.otf': 'application/x-font-otf',\r\n\t\t'.otg': 'application/vnd.oasis.opendocument.graphics-template',\r\n\t\t'.oth': 'application/vnd.oasis.opendocument.text-web',\r\n\t\t'.oti': 'application/vnd.oasis.opendocument.image-template',\r\n\t\t'.otm': 'application/vnd.oasis.opendocument.text-master',\r\n\t\t'.otp': 'application/vnd.oasis.opendocument.presentation-template',\r\n\t\t'.ots': 'application/vnd.oasis.opendocument.spreadsheet-template',\r\n\t\t'.ott': 'application/vnd.oasis.opendocument.text-template',\r\n\t\t'.oxt': 'application/vnd.openofficeorg.extension',\r\n\t\t'.p': 'text/x-pascal',\r\n\t\t'.p10': 'application/pkcs10',\r\n\t\t'.p12': 'application/x-pkcs12',\r\n\t\t'.p7b': 'application/x-pkcs7-certificates',\r\n\t\t'.p7c': 'application/pkcs7-mime',\r\n\t\t'.p7m': 'application/pkcs7-mime',\r\n\t\t'.p7r': 'application/x-pkcs7-certreqresp',\r\n\t\t'.p7s': 'application/pkcs7-signature',\r\n\t\t'.pas': 'text/x-pascal',\r\n\t\t'.pbd': 'application/vnd.powerbuilder6',\r\n\t\t'.pbm': 'image/x-portable-bitmap',\r\n\t\t'.pcf': 'application/x-font-pcf',\r\n\t\t'.pcl': 'application/vnd.hp-pcl',\r\n\t\t'.pclxl': 'application/vnd.hp-pclxl',\r\n\t\t'.pct': 'image/x-pict',\r\n\t\t'.pcurl': 'application/vnd.curl.pcurl',\r\n\t\t'.pcx': 'image/x-pcx',\r\n\t\t'.pdb': 'application/vnd.palm',\r\n\t\t'.pdf': 'application/pdf',\r\n\t\t'.pfa': 'application/x-font-type1',\r\n\t\t'.pfb': 'application/x-font-type1',\r\n\t\t'.pfm': 'application/x-font-type1',\r\n\t\t'.pfr': 'application/font-tdpfr',\r\n\t\t'.pfx': 'application/x-pkcs12',\r\n\t\t'.pgm': 'image/x-portable-graymap',\r\n\t\t'.pgn': 'application/x-chess-pgn',\r\n\t\t'.pgp': 'application/pgp-encrypted',\r\n\t\t'.pic': 'image/x-pict',\r\n\t\t'.pkg': 'application/octet-stream',\r\n\t\t'.pki': 'application/pkixcmp',\r\n\t\t'.pkipath': 'application/pkix-pkipath',\r\n\t\t'.pl': 'text/plain',\r\n\t\t'.plb': 'application/vnd.3gpp.pic-bw-large',\r\n\t\t'.plc': 'application/vnd.mobius.plc',\r\n\t\t'.plf': 'application/vnd.pocketlearn',\r\n\t\t'.pls': 'application/pls+xml',\r\n\t\t'.pml': 'application/vnd.ctc-posml',\r\n\t\t'.png': 'image/png',\r\n\t\t'.pnm': 'image/x-portable-anymap',\r\n\t\t'.portpkg': 'application/vnd.macports.portpkg',\r\n\t\t'.pot': 'application/vnd.ms-powerpoint',\r\n\t\t'.potm': 'application/vnd.ms-powerpoint.template.macroenabled.12',\r\n\t\t'.potx': 'application/vnd.openxmlformats-officedocument.presentationml.template',\r\n\t\t'.ppa': 'application/vnd.ms-powerpoint',\r\n\t\t'.ppam': 'application/vnd.ms-powerpoint.addin.macroenabled.12',\r\n\t\t'.ppd': 'application/vnd.cups-ppd',\r\n\t\t'.ppm': 'image/x-portable-pixmap',\r\n\t\t'.pps': 'application/vnd.ms-powerpoint',\r\n\t\t'.ppsm': 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\r\n\t\t'.ppsx': 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\r\n\t\t'.ppt': 'application/vnd.ms-powerpoint',\r\n\t\t'.pptm': 'application/vnd.ms-powerpoint.presentation.macroenabled.12',\r\n\t\t'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n\t\t'.pqa': 'application/vnd.palm',\r\n\t\t'.prc': 'application/x-mobipocket-ebook',\r\n\t\t'.pre': 'application/vnd.lotus-freelance',\r\n\t\t'.prf': 'application/pics-rules',\r\n\t\t'.ps': 'application/postscript',\r\n\t\t'.psb': 'application/vnd.3gpp.pic-bw-small',\r\n\t\t'.psd': 'image/vnd.adobe.photoshop',\r\n\t\t'.psf': 'application/x-font-linux-psf',\r\n\t\t'.ptid': 'application/vnd.pvi.ptid1',\r\n\t\t'.pub': 'application/x-mspublisher',\r\n\t\t'.pvb': 'application/vnd.3gpp.pic-bw-var',\r\n\t\t'.pwn': 'application/vnd.3m.post-it-notes',\r\n\t\t'.pwz': 'application/vnd.ms-powerpoint',\r\n\t\t'.py': 'text/x-python',\r\n\t\t'.pya': 'audio/vnd.ms-playready.media.pya',\r\n\t\t'.pyc': 'application/x-python-code',\r\n\t\t'.pyo': 'application/x-python-code',\r\n\t\t'.pyv': 'video/vnd.ms-playready.media.pyv',\r\n\t\t'.qam': 'application/vnd.epson.quickanime',\r\n\t\t'.qbo': 'application/vnd.intu.qbo',\r\n\t\t'.qfx': 'application/vnd.intu.qfx',\r\n\t\t'.qps': 'application/vnd.publishare-delta-tree',\r\n\t\t'.qt': 'video/quicktime',\r\n\t\t'.qwd': 'application/vnd.quark.quarkxpress',\r\n\t\t'.qwt': 'application/vnd.quark.quarkxpress',\r\n\t\t'.qxb': 'application/vnd.quark.quarkxpress',\r\n\t\t'.qxd': 'application/vnd.quark.quarkxpress',\r\n\t\t'.qxl': 'application/vnd.quark.quarkxpress',\r\n\t\t'.qxt': 'application/vnd.quark.quarkxpress',\r\n\t\t'.ra': 'audio/x-pn-realaudio',\r\n\t\t'.ram': 'audio/x-pn-realaudio',\r\n\t\t'.rar': 'application/x-rar-compressed',\r\n\t\t'.ras': 'image/x-cmu-raster',\r\n\t\t'.rcprofile': 'application/vnd.ipunplugged.rcprofile',\r\n\t\t'.rdf': 'application/rdf+xml',\r\n\t\t'.rdz': 'application/vnd.data-vision.rdz',\r\n\t\t'.rep': 'application/vnd.businessobjects',\r\n\t\t'.res': 'application/x-dtbresource+xml',\r\n\t\t'.rgb': 'image/x-rgb',\r\n\t\t'.rif': 'application/reginfo+xml',\r\n\t\t'.rl': 'application/resource-lists+xml',\r\n\t\t'.rlc': 'image/vnd.fujixerox.edmics-rlc',\r\n\t\t'.rld': 'application/resource-lists-diff+xml',\r\n\t\t'.rm': 'application/vnd.rn-realmedia',\r\n\t\t'.rmi': 'audio/midi',\r\n\t\t'.rmp': 'audio/x-pn-realaudio-plugin',\r\n\t\t'.rms': 'application/vnd.jcp.javame.midlet-rms',\r\n\t\t'.rnc': 'application/relax-ng-compact-syntax',\r\n\t\t'.roff': 'text/troff',\r\n\t\t'.rpm': 'application/x-rpm',\r\n\t\t'.rpss': 'application/vnd.nokia.radio-presets',\r\n\t\t'.rpst': 'application/vnd.nokia.radio-preset',\r\n\t\t'.rq': 'application/sparql-query',\r\n\t\t'.rs': 'application/rls-services+xml',\r\n\t\t'.rsd': 'application/rsd+xml',\r\n\t\t'.rss': 'application/rss+xml',\r\n\t\t'.rtf': 'application/rtf',\r\n\t\t'.rtx': 'text/richtext',\r\n\t\t'.s': 'text/x-asm',\r\n\t\t'.saf': 'application/vnd.yamaha.smaf-audio',\r\n\t\t'.sbml': 'application/sbml+xml',\r\n\t\t'.sc': 'application/vnd.ibm.secure-container',\r\n\t\t'.scd': 'application/x-msschedule',\r\n\t\t'.scm': 'application/vnd.lotus-screencam',\r\n\t\t'.scq': 'application/scvp-cv-request',\r\n\t\t'.scs': 'application/scvp-cv-response',\r\n\t\t'.scurl': 'text/vnd.curl.scurl',\r\n\t\t'.sda': 'application/vnd.stardivision.draw',\r\n\t\t'.sdc': 'application/vnd.stardivision.calc',\r\n\t\t'.sdd': 'application/vnd.stardivision.impress',\r\n\t\t'.sdkd': 'application/vnd.solent.sdkm+xml',\r\n\t\t'.sdkm': 'application/vnd.solent.sdkm+xml',\r\n\t\t'.sdp': 'application/sdp',\r\n\t\t'.sdw': 'application/vnd.stardivision.writer',\r\n\t\t'.see': 'application/vnd.seemail',\r\n\t\t'.seed': 'application/vnd.fdsn.seed',\r\n\t\t'.sema': 'application/vnd.sema',\r\n\t\t'.semd': 'application/vnd.semd',\r\n\t\t'.semf': 'application/vnd.semf',\r\n\t\t'.ser': 'application/java-serialized-object',\r\n\t\t'.setpay': 'application/set-payment-initiation',\r\n\t\t'.setreg': 'application/set-registration-initiation',\r\n\t\t'.sfd-hdstx': 'application/vnd.hydrostatix.sof-data',\r\n\t\t'.sfs': 'application/vnd.spotfire.sfs',\r\n\t\t'.sgl': 'application/vnd.stardivision.writer-global',\r\n\t\t'.sgm': 'text/sgml',\r\n\t\t'.sgml': 'text/sgml',\r\n\t\t'.sh': 'application/x-sh',\r\n\t\t'.shar': 'application/x-shar',\r\n\t\t'.shf': 'application/shf+xml',\r\n\t\t'.si': 'text/vnd.wap.si',\r\n\t\t'.sic': 'application/vnd.wap.sic',\r\n\t\t'.sig': 'application/pgp-signature',\r\n\t\t'.silo': 'model/mesh',\r\n\t\t'.sis': 'application/vnd.symbian.install',\r\n\t\t'.sisx': 'application/vnd.symbian.install',\r\n\t\t'.sit': 'application/x-stuffit',\r\n\t\t'.sitx': 'application/x-stuffitx',\r\n\t\t'.skd': 'application/vnd.koan',\r\n\t\t'.skm': 'application/vnd.koan',\r\n\t\t'.skp': 'application/vnd.koan',\r\n\t\t'.skt': 'application/vnd.koan',\r\n\t\t'.sl': 'text/vnd.wap.sl',\r\n\t\t'.slc': 'application/vnd.wap.slc',\r\n\t\t'.sldm': 'application/vnd.ms-powerpoint.slide.macroenabled.12',\r\n\t\t'.sldx': 'application/vnd.openxmlformats-officedocument.presentationml.slide',\r\n\t\t'.slt': 'application/vnd.epson.salt',\r\n\t\t'.smf': 'application/vnd.stardivision.math',\r\n\t\t'.smi': 'application/smil+xml',\r\n\t\t'.smil': 'application/smil+xml',\r\n\t\t'.snd': 'audio/basic',\r\n\t\t'.snf': 'application/x-font-snf',\r\n\t\t'.so': 'application/octet-stream',\r\n\t\t'.spc': 'application/x-pkcs7-certificates',\r\n\t\t'.spf': 'application/vnd.yamaha.smaf-phrase',\r\n\t\t'.spl': 'application/x-futuresplash',\r\n\t\t'.spot': 'text/vnd.in3d.spot',\r\n\t\t'.spp': 'application/scvp-vp-response',\r\n\t\t'.spq': 'application/scvp-vp-request',\r\n\t\t'.spx': 'audio/ogg',\r\n\t\t'.src': 'application/x-wais-source',\r\n\t\t'.srx': 'application/sparql-results+xml',\r\n\t\t'.sse': 'application/vnd.kodak-descriptor',\r\n\t\t'.ssf': 'application/vnd.epson.ssf',\r\n\t\t'.ssml': 'application/ssml+xml',\r\n\t\t'.stc': 'application/vnd.sun.xml.calc.template',\r\n\t\t'.std': 'application/vnd.sun.xml.draw.template',\r\n\t\t'.stf': 'application/vnd.wt.stf',\r\n\t\t'.sti': 'application/vnd.sun.xml.impress.template',\r\n\t\t'.stk': 'application/hyperstudio',\r\n\t\t'.stl': 'application/vnd.ms-pki.stl',\r\n\t\t'.str': 'application/vnd.pg.format',\r\n\t\t'.stw': 'application/vnd.sun.xml.writer.template',\r\n\t\t'.sus': 'application/vnd.sus-calendar',\r\n\t\t'.susp': 'application/vnd.sus-calendar',\r\n\t\t'.sv4cpio': 'application/x-sv4cpio',\r\n\t\t'.sv4crc': 'application/x-sv4crc',\r\n\t\t'.svd': 'application/vnd.svd',\r\n\t\t'.svg': 'image/svg+xml',\r\n\t\t'.svgz': 'image/svg+xml',\r\n\t\t'.swa': 'application/x-director',\r\n\t\t'.swf': 'application/x-shockwave-flash',\r\n\t\t'.swi': 'application/vnd.arastra.swi',\r\n\t\t'.sxc': 'application/vnd.sun.xml.calc',\r\n\t\t'.sxd': 'application/vnd.sun.xml.draw',\r\n\t\t'.sxg': 'application/vnd.sun.xml.writer.global',\r\n\t\t'.sxi': 'application/vnd.sun.xml.impress',\r\n\t\t'.sxm': 'application/vnd.sun.xml.math',\r\n\t\t'.sxw': 'application/vnd.sun.xml.writer',\r\n\t\t'.t': 'text/troff',\r\n\t\t'.tao': 'application/vnd.tao.intent-module-archive',\r\n\t\t'.tar': 'application/x-tar',\r\n\t\t'.tcap': 'application/vnd.3gpp2.tcap',\r\n\t\t'.tcl': 'application/x-tcl',\r\n\t\t'.teacher': 'application/vnd.smart.teacher',\r\n\t\t'.tex': 'application/x-tex',\r\n\t\t'.texi': 'application/x-texinfo',\r\n\t\t'.texinfo': 'application/x-texinfo',\r\n\t\t'.text': 'text/plain',\r\n\t\t'.tfm': 'application/x-tex-tfm',\r\n\t\t'.tgz': 'application/x-gzip',\r\n\t\t'.tif': 'image/tiff',\r\n\t\t'.tiff': 'image/tiff',\r\n\t\t'.tmo': 'application/vnd.tmobile-livetv',\r\n\t\t'.torrent': 'application/x-bittorrent',\r\n\t\t'.tpl': 'application/vnd.groove-tool-template',\r\n\t\t'.tpt': 'application/vnd.trid.tpt',\r\n\t\t'.tr': 'text/troff',\r\n\t\t'.tra': 'application/vnd.trueapp',\r\n\t\t'.trm': 'application/x-msterminal',\r\n\t\t'.tsv': 'text/tab-separated-values',\r\n\t\t'.ttc': 'application/x-font-ttf',\r\n\t\t'.ttf': 'application/x-font-ttf',\r\n\t\t'.twd': 'application/vnd.simtech-mindmapper',\r\n\t\t'.twds': 'application/vnd.simtech-mindmapper',\r\n\t\t'.txd': 'application/vnd.genomatix.tuxedo',\r\n\t\t'.txf': 'application/vnd.mobius.txf',\r\n\t\t'.txt': 'text/plain',\r\n\t\t'.u32': 'application/x-authorware-bin',\r\n\t\t'.udeb': 'application/x-debian-package',\r\n\t\t'.ufd': 'application/vnd.ufdl',\r\n\t\t'.ufdl': 'application/vnd.ufdl',\r\n\t\t'.umj': 'application/vnd.umajin',\r\n\t\t'.unityweb': 'application/vnd.unity',\r\n\t\t'.uoml': 'application/vnd.uoml+xml',\r\n\t\t'.uri': 'text/uri-list',\r\n\t\t'.uris': 'text/uri-list',\r\n\t\t'.urls': 'text/uri-list',\r\n\t\t'.ustar': 'application/x-ustar',\r\n\t\t'.utz': 'application/vnd.uiq.theme',\r\n\t\t'.uu': 'text/x-uuencode',\r\n\t\t'.vcd': 'application/x-cdlink',\r\n\t\t'.vcf': 'text/x-vcard',\r\n\t\t'.vcg': 'application/vnd.groove-vcard',\r\n\t\t'.vcs': 'text/x-vcalendar',\r\n\t\t'.vcx': 'application/vnd.vcx',\r\n\t\t'.vis': 'application/vnd.visionary',\r\n\t\t'.viv': 'video/vnd.vivo',\r\n\t\t'.vor': 'application/vnd.stardivision.writer',\r\n\t\t'.vox': 'application/x-authorware-bin',\r\n\t\t'.vrml': 'model/vrml',\r\n\t\t'.vsd': 'application/vnd.visio',\r\n\t\t'.vsf': 'application/vnd.vsf',\r\n\t\t'.vss': 'application/vnd.visio',\r\n\t\t'.vst': 'application/vnd.visio',\r\n\t\t'.vsw': 'application/vnd.visio',\r\n\t\t'.vtu': 'model/vnd.vtu',\r\n\t\t'.vxml': 'application/voicexml+xml',\r\n\t\t'.w3d': 'application/x-director',\r\n\t\t'.wad': 'application/x-doom',\r\n\t\t'.wav': 'audio/x-wav',\r\n\t\t'.wax': 'audio/x-ms-wax',\r\n\t\t'.wbmp': 'image/vnd.wap.wbmp',\r\n\t\t'.wbs': 'application/vnd.criticaltools.wbs+xml',\r\n\t\t'.wbxml': 'application/vnd.wap.wbxml',\r\n\t\t'.wcm': 'application/vnd.ms-works',\r\n\t\t'.wdb': 'application/vnd.ms-works',\r\n\t\t'.wiz': 'application/msword',\r\n\t\t'.wks': 'application/vnd.ms-works',\r\n\t\t'.wm': 'video/x-ms-wm',\r\n\t\t'.wma': 'audio/x-ms-wma',\r\n\t\t'.wmd': 'application/x-ms-wmd',\r\n\t\t'.wmf': 'application/x-msmetafile',\r\n\t\t'.wml': 'text/vnd.wap.wml',\r\n\t\t'.wmlc': 'application/vnd.wap.wmlc',\r\n\t\t'.wmls': 'text/vnd.wap.wmlscript',\r\n\t\t'.wmlsc': 'application/vnd.wap.wmlscriptc',\r\n\t\t'.wmv': 'video/x-ms-wmv',\r\n\t\t'.wmx': 'video/x-ms-wmx',\r\n\t\t'.wmz': 'application/x-ms-wmz',\r\n\t\t'.wpd': 'application/vnd.wordperfect',\r\n\t\t'.wpl': 'application/vnd.ms-wpl',\r\n\t\t'.wps': 'application/vnd.ms-works',\r\n\t\t'.wqd': 'application/vnd.wqd',\r\n\t\t'.wri': 'application/x-mswrite',\r\n\t\t'.wrl': 'model/vrml',\r\n\t\t'.wsdl': 'application/wsdl+xml',\r\n\t\t'.wspolicy': 'application/wspolicy+xml',\r\n\t\t'.wtb': 'application/vnd.webturbo',\r\n\t\t'.wvx': 'video/x-ms-wvx',\r\n\t\t'.x32': 'application/x-authorware-bin',\r\n\t\t'.x3d': 'application/vnd.hzn-3d-crossword',\r\n\t\t'.xap': 'application/x-silverlight-app',\r\n\t\t'.xar': 'application/vnd.xara',\r\n\t\t'.xbap': 'application/x-ms-xbap',\r\n\t\t'.xbd': 'application/vnd.fujixerox.docuworks.binder',\r\n\t\t'.xbm': 'image/x-xbitmap',\r\n\t\t'.xdm': 'application/vnd.syncml.dm+xml',\r\n\t\t'.xdp': 'application/vnd.adobe.xdp+xml',\r\n\t\t'.xdw': 'application/vnd.fujixerox.docuworks',\r\n\t\t'.xenc': 'application/xenc+xml',\r\n\t\t'.xer': 'application/patch-ops-error+xml',\r\n\t\t'.xfdf': 'application/vnd.adobe.xfdf',\r\n\t\t'.xfdl': 'application/vnd.xfdl',\r\n\t\t'.xht': 'application/xhtml+xml',\r\n\t\t'.xhtml': 'application/xhtml+xml',\r\n\t\t'.xhvml': 'application/xv+xml',\r\n\t\t'.xif': 'image/vnd.xiff',\r\n\t\t'.xla': 'application/vnd.ms-excel',\r\n\t\t'.xlam': 'application/vnd.ms-excel.addin.macroenabled.12',\r\n\t\t'.xlb': 'application/vnd.ms-excel',\r\n\t\t'.xlc': 'application/vnd.ms-excel',\r\n\t\t'.xlm': 'application/vnd.ms-excel',\r\n\t\t'.xls': 'application/vnd.ms-excel',\r\n\t\t'.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\r\n\t\t'.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\r\n\t\t'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n\t\t'.xlt': 'application/vnd.ms-excel',\r\n\t\t'.xltm': 'application/vnd.ms-excel.template.macroenabled.12',\r\n\t\t'.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\r\n\t\t'.xlw': 'application/vnd.ms-excel',\r\n\t\t'.xml': 'application/xml',\r\n\t\t'.xo': 'application/vnd.olpc-sugar',\r\n\t\t'.xop': 'application/xop+xml',\r\n\t\t'.xpdl': 'application/xml',\r\n\t\t'.xpi': 'application/x-xpinstall',\r\n\t\t'.xpm': 'image/x-xpixmap',\r\n\t\t'.xpr': 'application/vnd.is-xpr',\r\n\t\t'.xps': 'application/vnd.ms-xpsdocument',\r\n\t\t'.xpw': 'application/vnd.intercon.formnet',\r\n\t\t'.xpx': 'application/vnd.intercon.formnet',\r\n\t\t'.xsl': 'application/xml',\r\n\t\t'.xslt': 'application/xslt+xml',\r\n\t\t'.xsm': 'application/vnd.syncml+xml',\r\n\t\t'.xspf': 'application/xspf+xml',\r\n\t\t'.xul': 'application/vnd.mozilla.xul+xml',\r\n\t\t'.xvm': 'application/xv+xml',\r\n\t\t'.xvml': 'application/xv+xml',\r\n\t\t'.xwd': 'image/x-xwindowdump',\r\n\t\t'.xyz': 'chemical/x-xyz',\r\n\t\t'.zaz': 'application/vnd.zzazz.deck+xml',\r\n\t\t'.zip': 'application/zip',\r\n\t\t'.zir': 'application/vnd.zul',\r\n\t\t'.zirz': 'application/vnd.zul',\r\n\t\t'.zmm': 'application/vnd.handheld-entertainment+xml',\r\n\t};\r\n\r\n\t// Return the MIME type or a default value if the extension is not found\r\n\treturn mimeTypes[extension.toLowerCase()] || null;\r\n}\r\n","import type { MediaValueType } from '../../property-editors/upload-field/types.js';\r\nimport { getMimeTypeFromExtension } from './utils.js';\r\nimport type { ManifestFileUploadPreview } from './file-upload-preview.extension.js';\r\nimport { TemporaryFileStatus, UmbTemporaryFileManager } from '@umbraco-cms/backoffice/temporary-file';\r\nimport type { UmbTemporaryFileModel } from '@umbraco-cms/backoffice/temporary-file';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport {\r\n\tcss,\r\n\thtml,\r\n\tnothing,\r\n\tifDefined,\r\n\tcustomElement,\r\n\tproperty,\r\n\tquery,\r\n\tstate,\r\n\ttype PropertyValueMap,\r\n} from '@umbraco-cms/backoffice/external/lit';\r\nimport type { UUIFileDropzoneElement, UUIFileDropzoneEvent } from '@umbraco-cms/backoffice/external/uui';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\n\r\nimport { UmbExtensionsManifestInitializer } from '@umbraco-cms/backoffice/extension-api';\r\nimport { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils';\r\n\r\n@customElement('umb-input-upload-field')\r\nexport class UmbInputUploadFieldElement extends UmbLitElement {\r\n\t@property({ type: Object })\r\n\tset value(value: MediaValueType) {\r\n\t\tthis.#src = value?.src ?? '';\r\n\t}\r\n\tget value(): MediaValueType {\r\n\t\treturn {\r\n\t\t\tsrc: this.#src,\r\n\t\t\ttemporaryFileId: this.temporaryFile?.temporaryUnique,\r\n\t\t};\r\n\t}\r\n\r\n\t#src = '';\r\n\r\n\t/**\r\n\t * @description Allowed file extensions. Allow all if empty.\r\n\t * @type {Array}\r\n\t * @default\r\n\t */\r\n\t@property({ type: Array })\r\n\tset allowedFileExtensions(value: Array) {\r\n\t\tthis.#setExtensions(value);\r\n\t}\r\n\tget allowedFileExtensions(): Array | undefined {\r\n\t\treturn this._extensions;\r\n\t}\r\n\r\n\t@state()\r\n\tpublic temporaryFile?: UmbTemporaryFileModel;\r\n\r\n\t@state()\r\n\tprivate _extensions?: string[];\r\n\r\n\t@state()\r\n\tprivate _previewAlias?: string;\r\n\r\n\t@query('#dropzone')\r\n\tprivate _dropzone?: UUIFileDropzoneElement;\r\n\r\n\t#manager = new UmbTemporaryFileManager(this);\r\n\r\n\t#manifests: Array = [];\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t}\r\n\r\n\toverride updated(changedProperties: PropertyValueMap | Map) {\r\n\t\tsuper.updated(changedProperties);\r\n\t\tif (changedProperties.has('value') && changedProperties.get('value')?.src !== this.value.src) {\r\n\t\t\tthis.#setPreviewAlias();\r\n\t\t}\r\n\t}\r\n\r\n\tasync #getManifests() {\r\n\t\tif (this.#manifests.length) return this.#manifests;\r\n\r\n\t\tawait new UmbExtensionsManifestInitializer(this, umbExtensionsRegistry, 'fileUploadPreview', null, (exts) => {\r\n\t\t\tthis.#manifests = exts.map((exts) => exts.manifest);\r\n\t\t}).asPromise();\r\n\r\n\t\treturn this.#manifests;\r\n\t}\r\n\r\n\t#setExtensions(extensions: Array) {\r\n\t\tif (!extensions?.length) {\r\n\t\t\tthis._extensions = undefined;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// TODO: The dropzone uui component does not support file extensions without a dot. Remove this when it does.\r\n\t\tthis._extensions = extensions?.map((extension) => `.${extension}`);\r\n\t}\r\n\r\n\tasync #setPreviewAlias(): Promise {\r\n\t\tthis._previewAlias = await this.#getPreviewElementAlias();\r\n\t}\r\n\r\n\tasync #getPreviewElementAlias() {\r\n\t\tif (!this.value.src) return;\r\n\t\tconst manifests = await this.#getManifests();\r\n\t\tconst fallbackAlias = manifests.find((manifest) =>\r\n\t\t\tstringOrStringArrayContains(manifest.forMimeTypes, '*/*'),\r\n\t\t)?.alias;\r\n\r\n\t\tconst mimeType = this.#getMimeTypeFromPath(this.value.src);\r\n\t\tif (!mimeType) return fallbackAlias;\r\n\r\n\t\t// Check for an exact match\r\n\t\tconst exactMatch = manifests.find((manifest) => {\r\n\t\t\treturn stringOrStringArrayContains(manifest.forMimeTypes, mimeType);\r\n\t\t});\r\n\t\tif (exactMatch) return exactMatch.alias;\r\n\r\n\t\t// Check for wildcard match (e.g. image/*)\r\n\t\tconst wildcardMatch = manifests.find((manifest) => {\r\n\t\t\tconst forMimeTypes = Array.isArray(manifest.forMimeTypes) ? manifest.forMimeTypes : [manifest.forMimeTypes];\r\n\t\t\treturn forMimeTypes.find((type) => {\r\n\t\t\t\tconst snippet = type.replace(/\\*/g, '');\r\n\t\t\t\tif (mimeType.startsWith(snippet)) return manifest.alias;\r\n\t\t\t\tif (mimeType.endsWith(snippet)) return manifest.alias;\r\n\t\t\t\treturn undefined;\r\n\t\t\t});\r\n\t\t});\r\n\t\tif (wildcardMatch) return wildcardMatch.alias;\r\n\r\n\t\t// Use fallbackAlias.\r\n\t\treturn fallbackAlias;\r\n\t}\r\n\r\n\t#getMimeTypeFromPath(path: string) {\r\n\t\t// Extract the the MIME type from the data url\r\n\t\tif (path.startsWith('data:')) {\r\n\t\t\tconst mimeType = path.substring(5, path.indexOf(';'));\r\n\t\t\treturn mimeType;\r\n\t\t}\r\n\r\n\t\t// Extract the file extension from the path\r\n\t\tconst extension = path.split('.').pop()?.toLowerCase();\r\n\t\tif (!extension) return null;\r\n\t\treturn getMimeTypeFromExtension('.' + extension);\r\n\t}\r\n\r\n\tasync #onUpload(e: UUIFileDropzoneEvent) {\r\n\t\t//Property Editor for Upload field will always only have one file.\r\n\t\tconst item: UmbTemporaryFileModel = {\r\n\t\t\ttemporaryUnique: UmbId.new(),\r\n\t\t\tfile: e.detail.files[0],\r\n\t\t};\r\n\r\n\t\tconst upload = this.#manager.uploadOne(item);\r\n\r\n\t\tconst reader = new FileReader();\r\n\t\treader.onload = () => {\r\n\t\t\tthis.value = { src: reader.result as string };\r\n\t\t};\r\n\t\treader.readAsDataURL(item.file);\r\n\r\n\t\tconst uploaded = await upload;\r\n\t\tif (uploaded.status === TemporaryFileStatus.SUCCESS) {\r\n\t\t\tthis.temporaryFile = { temporaryUnique: item.temporaryUnique, file: item.file };\r\n\t\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t\t}\r\n\t}\r\n\r\n\t#handleBrowse(e: Event) {\r\n\t\tif (!this._dropzone) return;\r\n\t\te.stopImmediatePropagation();\r\n\t\tthis._dropzone.browse();\r\n\t}\r\n\r\n\toverride render() {\r\n\t\tif (this.value.src && this._previewAlias) {\r\n\t\t\treturn this.#renderFile(this.value.src, this._previewAlias, this.temporaryFile?.file);\r\n\t\t} else {\r\n\t\t\treturn this.#renderDropzone();\r\n\t\t}\r\n\t}\r\n\r\n\t#renderDropzone() {\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderFile(src: string, previewAlias: string, file?: File) {\r\n\t\tif (!previewAlias) return 'An error occurred. No previewer found for the file type.';\r\n\t\treturn html`\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t manifest.alias === previewAlias}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t${this.temporaryFile?.status === TemporaryFileStatus.WAITING\r\n\t\t\t\t\t\t? html``\r\n\t\t\t\t\t\t: nothing}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t${this.#renderButtonRemove()}\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderButtonRemove() {\r\n\t\treturn html`\r\n\t\t\t${this.localize.term('content_uploadClear')}\r\n\t\t`;\r\n\t}\r\n\r\n\t#handleRemove() {\r\n\t\tthis.value = { src: undefined };\r\n\t\tthis.temporaryFile = undefined;\r\n\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\tstatic override readonly styles = [\r\n\t\tcss`\r\n\t\t\t:host {\r\n\t\t\t\tposition: relative;\r\n\t\t\t}\r\n\t\t\tuui-icon {\r\n\t\t\t\tvertical-align: sub;\r\n\t\t\t\tmargin-right: var(--uui-size-space-4);\r\n\t\t\t}\r\n\r\n\t\t\t#wrapper {\r\n\t\t\t\tdisplay: grid;\r\n\t\t\t\tgrid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\r\n\t\t\t\tgap: var(--uui-size-space-4);\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t}\r\n\r\n\t\t\t#wrapper:has(umb-input-upload-field-file) {\r\n\t\t\t\tpadding: var(--uui-size-space-4);\r\n\t\t\t\tborder: 1px solid var(--uui-color-border);\r\n\t\t\t\tborder-radius: var(--uui-border-radius);\r\n\t\t\t}\r\n\r\n\t\t\tuui-file-dropzone {\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tpadding: 3px; /** Dropzone background is blurry and covers slightly into other elements. Hack to avoid this */\r\n\t\t\t}\r\n\t\t\tuui-file-dropzone::after {\r\n\t\t\t\tcontent: '';\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tinset: 0;\r\n\t\t\t\tcursor: pointer;\r\n\t\t\t\tborder: 1px dashed var(--uui-color-divider-emphasis);\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbInputUploadFieldElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-input-upload-field': UmbInputUploadFieldElement;\r\n\t}\r\n}\r\n"],"names":["UMB_MEDIA_COLLECTION_CONTEXT","UmbContextToken","UMB_DROPZONE_MEDIA_TYPE_PICKER_MODAL","UmbModalToken","UMB_MEDIA_CREATE_OPTIONS_MODAL","UmbImageCropChangeEvent","args","_VIEWPORT_PADDING","_MAX_SCALE_FACTOR","_SCROLL_ZOOM_SPEED","_minImageScale","_maxImageScale","_oldImageScale","_isDragging","_mouseOffsetX","_mouseOffsetY","_UmbImageCropperElement_instances","getImageScale_get","addEventListeners_fn","removeEventListeners_fn","initializeCrop_fn","updateImageScale_fn","updateImagePosition_fn","calculateCropCoordinates_fn","toLocalPosition_fn","onSave_fn","onCancel_fn","onReset_fn","onSliderUpdate_fn","_onStartDrag","_onDrag","_onEndDrag","_onWheel","UmbImageCropperElement","UmbLitElement","__privateAdd","event","__privateSet","image","viewport","__privateGet","newLeft","newTop","__privateMethod","value","delta","_changedProperties","html","lerp","resolve","viewportWidth","viewportHeight","viewportAspectRatio","cropAspectRatio","maskWidth","maskHeight","imageWidth","imageHeight","imageLeft","imageTop","viewportPadding","availableWidth","availableHeight","isCropWider","maskLeft","maskTop","scaleX","scaleY","scale","imageAspectRatio","cropAmount","calculateExtrapolatedValue","minLeft","minTop","clamp","currentScaleX","currentScaleY","currentScale","inverseLerp","amount","mouseX","mouseY","newImageScale","mask","fixedLocation","imageLocalPosition","top","left","maxLeft","maxTop","cropCoordinates","x1","x2","y1","y2","target","css","__decorateClass","query","property","state","customElement","UmbFocalPointChangeEvent","focalPoint","_focalPoint","_DOT_RADIUS","_UmbImageCropperFocusSetterElement_instances","initializeImage_fn","onFocalPointUpdated_fn","coordsToFactor_fn","setFocalPoint_fn","setFocalPointStyle_fn","isCentered_fn","resetCoords_fn","handleGridDrag_fn","handleGridKeyDown_fn","UmbImageCropperFocusSetterElement","changedProperties","nothing","classMap","ifDefined","hostRect","x","y","width","height","grid","handle","drag","increment","_UmbImageCropperPreviewElement_instances","UmbImageCropperPreviewElement","container","imageContainerWidth","imageContainerHeight","containerWidth","containerHeight","_value","_onCropChange","_onFocalPointChange","_UmbInputImageCropperFieldElement_instances","updateValue_fn","UmbInputImageCropperFieldElement","index","crop","reader","c","when","repeat","UmbChangeEvent","_UmbImageCropperEditorFieldElement_instances","resetCurrentCrop_fn","UmbImageCropperEditorFieldElement","UMB_MEDIA_ENTITY_TYPE","UMB_MEDIA_ROOT_ENTITY_TYPE","UMB_MEDIA_PLACEHOLDER_ENTITY_TYPE","UmbMediaServerDataSource","#host","host","preset","UmbId","unique","data","error","tryExecuteAndNotify","MediaService","variant","model","parentUnique","requestBody","UmbMediaDetailRepository","UmbDetailRepositoryBase","UMB_MEDIA_DETAIL_STORE_CONTEXT","UmbMediaItemServerDataSource","UmbItemServerDataSourceBase","getItems","mapper","skip","take","item","uniques","UmbMediaItemRepository","UmbItemRepositoryBase","#dataSource","UMB_MEDIA_ITEM_STORE_CONTEXT","UMB_MEDIA_PICKER_MODAL","_urlRepository","_modalManager","_UmbImageCropperEditorModalElement_instances","getSrc_fn","openMediaPicker_fn","onChange_fn","renderBody_fn","UmbImageCropperEditorModalElement","UmbModalBaseElement","UmbMediaUrlRepository","UMB_MODAL_MANAGER_CONTEXT","context","UmbModalRouteRegistrationController","UMB_WORKSPACE_MODAL","routeBuilder","crops","existingCrop","UmbImageCropperEditorModalElement$1","UMB_IMAGE_CROPPER_EDITOR_MODAL","UMB_MEDIA_CAPTION_ALT_TEXT_MODAL","UmbMediaTreeServerDataSource","UmbTreeServerDataSourceBase","getRootItems","getChildrenOf","getAncestorsOf","UMB_MEDIA_TREE_STORE_CONTEXT","UmbMediaTreeRepository","UmbTreeRepositoryBase","treeRootData","hasChildren","_mediaTreeRepository","_mediaDetailRepository","_UmbMediaPickerFolderPathElement_instances","loadPath_fn","goToFolder_fn","focusFolderInput_fn","addFolder_fn","root","UmbMediaPickerFolderPathElement","path","entityType","paths","entity","element","newName","newUnique","getUmbracoFolderUnique","scaffold","name","_mediaTypeStructure","_UmbMediaPickerCreateItemElement_instances","getNodeMediaType_fn","getAllowedMediaTypes_fn","onPopoverToggle_fn","UmbMediaPickerCreateItemElement","UmbMediaTypeStructureRepository","mediaType","allowedMediaTypes","UmbMediaSearchServerDataSource","UmbMediaSearchRepository","UmbControllerBase","UmbMediaSearchProvider","#repository","_mediaItemRepository","_mediaSearchProvider","_dataType","_UmbMediaPickerModalElement_instances","loadChildrenOfCurrentMediaItem_fn","onOpen_fn","onSelected_fn","onDeselected_fn","clearSearch_fn","searchMedia_fn","_debouncedSearch","onSearch_fn","onPathChange_fn","allowNavigateToMedia_fn","onSearchFromChange_fn","renderSearchResult_fn","renderCurrentChildren_fn","renderToolbar_fn","renderCard_fn","renderBreadcrumb_fn","UmbMediaPickerModalElement","debounce","UMB_CONTENT_PROPERTY_CONTEXT","dataType","selection","newPath","isUmbracoFolder","canNavigate","selectable","startNode","UmbMediaPickerModalElement$1","UMB_MEDIA_RECYCLE_BIN_TREE_STORE_CONTEXT","UMB_MEDIA_ITEM_REPOSITORY_ALIAS","UMB_MEDIA_STORE_ALIAS","UMB_MEDIA_TREE_PICKER_MODAL","UMB_TREE_PICKER_MODAL_ALIAS","UMB_MEDIA_WORKSPACE_CONTEXT","UMB_MEDIA_SECTION_PATHNAME","UMB_SECTION_PATH_PATTERN","UMB_MEDIA_WORKSPACE_PATH","UMB_WORKSPACE_PATH_PATTERN","UMB_CREATE_MEDIA_WORKSPACE_PATH_PATTERN","UmbPathPattern","UMB_EDIT_MEDIA_WORKSPACE_PATH_PATTERN","IsMediaVariantContext","UMB_MEDIA_VARIANT_CONTEXT","_mediaUnique","_UmbMediaCaptionAltTextModalElement_instances","getMediaDetail_fn","UmbMediaCaptionAltTextModalElement","UmbMediaCaptionAltTextModalElement$1","UmbMediaPickerInputContext","UmbPickerInputContext","_sorter","_UmbInputMediaElement_instances","sortCards_fn","_readonly","_pickerContext","_pickableFilter","openPicker_fn","onRemove_fn","renderItems_fn","renderAddButton_fn","renderItem_fn","renderRemoveAction_fn","renderIsTrashed_fn","elementName","UmbInputMediaElement","UmbFormControlMixin","UmbSorterController","modelEntry","UmbSorterResolvePlacementAsGrid","selectedItems","missingCards","card","ids","selectionString","splitStringToArray","idToIndexMap","cards","a","b","href","_UmbInputRichMediaElement_instances","_items","_focalPointEnabled","_itemRepository","populateCards_fn","addItems_fn","onUploadCompleted_fn","renderDropzone_fn","renderActions_fn","UmbInputRichMediaElement","UUIFormControlMixin","instance","params","key","mediaKey","items","media","additions","umbConfirmModal","uploaded","file","_manager","_UmbInputImageCropperElement_instances","onUpload_fn","onBrowse_fn","_onRemove","mergeCrops_fn","renderImageCropper_fn","DefaultFocalPoint","DefaultValue","UmbInputImageCropperElement","assignToFrozenObject","UmbTemporaryFileManager","filteredCrops","cropFromValue","valueCrop","getMimeTypeFromExtension","extension","_src","_manifests","_UmbInputUploadFieldElement_instances","getManifests_fn","setExtensions_fn","setPreviewAlias_fn","getPreviewElementAlias_fn","getMimeTypeFromPath_fn","handleBrowse_fn","renderFile_fn","renderButtonRemove_fn","handleRemove_fn","UmbInputUploadFieldElement","UmbExtensionsManifestInitializer","umbExtensionsRegistry","exts","extensions","manifests","fallbackAlias","manifest","stringOrStringArrayContains","mimeType","exactMatch","wildcardMatch","type","snippet","upload","TemporaryFileStatus","src","previewAlias"],"mappings":"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"}