{"version":3,"file":"index.js","sources":["../../../src/packages/language/components/input-language/input-language.context.ts","../../../src/packages/language/components/input-language/input-language.element.ts"],"sourcesContent":["import type { UmbLanguageItemModel } from '../../types.js';\r\nimport { UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS } from '../../constants.js';\r\nimport { UMB_LANGUAGE_PICKER_MODAL } from '../../modals/language-picker/constants.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input';\r\n\r\nexport class UmbLanguagePickerInputContext extends UmbPickerInputContext {\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host, UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS, UMB_LANGUAGE_PICKER_MODAL);\r\n\t}\r\n}\r\n\r\n/** @deprecated Use `UmbLanguagePickerInputContext` instead. This method will be removed in Umbraco 15. */\r\nexport { UmbLanguagePickerInputContext as UmbLanguagePickerContext };\r\n","import type { UmbLanguageItemModel } from '../../types.js';\r\nimport { UmbLanguagePickerInputContext } from './input-language.context.js';\r\nimport { css, html, customElement, property, state, repeat, nothing } 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 { UmbSorterController } from '@umbraco-cms/backoffice/sorter';\r\nimport { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui';\r\n\r\n@customElement('umb-input-language')\r\nexport class UmbInputLanguageElement 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;\r\n\t\t},\r\n\t\tidentifier: 'Umb.SorterIdentifier.InputLanguage',\r\n\t\titemSelector: 'uui-ref-node',\r\n\t\tcontainerSelector: 'uui-ref-list',\r\n\t\tonChange: ({ model }) => {\r\n\t\t\tthis.selection = model;\r\n\t\t\tthis.dispatchEvent(new UmbChangeEvent());\r\n\t\t},\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: 'min-message' })\r\n\tmaxMessage = 'This field exceeds the allowed amount of items';\r\n\r\n\t@property({ type: Object, attribute: false })\r\n\tpublic filter: (language: UmbLanguageItemModel) => boolean = () => true;\r\n\r\n\t@property({ type: Array })\r\n\tpublic set selection(uniques: Array) {\r\n\t\tthis.#pickerContext.setSelection(uniques);\r\n\t\tthis.#sorter.setModel(uniques);\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()\r\n\tpublic override set value(uniques: string) {\r\n\t\tthis.selection = splitStringToArray(uniques);\r\n\t}\r\n\tpublic override get value(): string {\r\n\t\treturn this.selection.join(',');\r\n\t}\r\n\r\n\t@state()\r\n\tprivate _items: Array = [];\r\n\r\n\t#pickerContext = new UmbLanguagePickerInputContext(this);\r\n\r\n\tconstructor() {\r\n\t\tsuper();\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.#pickerContext.getSelection().length < this.min,\r\n\t\t);\r\n\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.#pickerContext.getSelection().length > this.max,\r\n\t\t);\r\n\r\n\t\tthis.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection');\r\n\t\tthis.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems');\r\n\t}\r\n\r\n\tprotected override getFormElement() {\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\t#openPicker() {\r\n\t\tthis.#pickerContext.openPicker({\r\n\t\t\tfilter: this.filter,\r\n\t\t\tmultiple: this.max > 1 ? true : false,\r\n\t\t});\r\n\t}\r\n\r\n\t#removeItem(item: UmbLanguageItemModel) {\r\n\t\tthis.#pickerContext.requestRemoveItem(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#renderAddButton() {\r\n\t\tif (this.max > 0 && this.selection.length >= this.max) return nothing;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t`;\r\n\t}\r\n\r\n\t#renderItems() {\r\n\t\tif (!this._items) return nothing;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\t${repeat(\r\n\t\t\t\t\tthis._items,\r\n\t\t\t\t\t(item) => item.unique,\r\n\t\t\t\t\t(item) => this.#renderItem(item),\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: UmbLanguageItemModel) {\r\n\t\tif (!item.unique) return;\r\n\t\treturn html`\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t this.#removeItem(item)} label=${this.localize.term('general_remove')}>\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#btn-add {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t}\r\n\t\t`,\r\n\t];\r\n}\r\n\r\nexport default UmbInputLanguageElement;\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'umb-input-language': UmbInputLanguageElement;\r\n\t}\r\n}\r\n"],"names":["UmbLanguagePickerInputContext","UmbPickerInputContext","host","UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS","UMB_LANGUAGE_PICKER_MODAL","_sorter","_pickerContext","_UmbInputLanguageElement_instances","openPicker_fn","removeItem_fn","renderAddButton_fn","renderItems_fn","renderItem_fn","UmbInputLanguageElement","UUIFormControlMixin","UmbLitElement","__privateAdd","UmbSorterController","element","modelEntry","model","UmbChangeEvent","__privateGet","selection","selectedItems","value","uniques","splitStringToArray","html","__privateMethod","item","nothing","repeat","css","__decorateClass","property","state","customElement"],"mappings":"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"}