@cas-smartdesign/token-selector 0.21.0 → 0.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -305,7 +305,7 @@ const l = (h = class extends w {
305
305
  }
306
306
  switch (e.key) {
307
307
  case "Escape": {
308
- e.preventDefault(), e.stopPropagation(), this.tokenSuggestPopover.hide();
308
+ this.tokenSuggestPopover.isOpened && (e.preventDefault(), e.stopPropagation(), this.tokenSuggestPopover.hide());
309
309
  break;
310
310
  }
311
311
  case "Tab": {
@@ -485,7 +485,7 @@ const l = (h = class extends w {
485
485
  const t = this.inputElement;
486
486
  t.addEventListener("immediate-value-change", (i) => this.handleInputValueChange(i)), t.addEventListener("keydown", (i) => this.handleInputKeyDown(i, t)), window.queueMicrotask(() => this.tokenSuggestPopover);
487
487
  } else
488
- this.removeAttribute("aria-haspopup"), this.addEventListener("keydown", this.handleKeyDown), this._tokenSuggestPopover && (this._tokenSuggestPopover.popover.remove(), this._tokenSuggestPopover = null);
488
+ this.removeAttribute("aria-haspopup"), this.addEventListener("keydown", this.handleKeyDown), this._tokenSuggestPopover && (this._tokenSuggestPopover.hide(), this._tokenSuggestPopover = null);
489
489
  (e.size == 0 || e.has("selectionMode") || e.has("items") || e.has("selectedIndexes") || e.has("disabled")) && this.updateItems(), e.has("inputLabel") && (this.inputLabel ? this.setAttribute("aria-label", this.inputLabel) : this.removeAttribute("aria-label"));
490
490
  }
491
491
  handleInputValueChange(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"token-selector.mjs","sources":["../token-suggest-popover.ts","../clear.svg?raw","../token.ts","../clipboard-extension.ts","../drag-and-drop-extension.ts","../token-selector.ts"],"sourcesContent":["import Popover from \"@cas-smartdesign/popover\";\nimport VirtualList from \"@cas-smartdesign/virtual-list\";\nimport { TokenData } from \"./token\";\nimport SDInput from \"@cas-smartdesign/lit-input\";\nimport { KeyDownDelegator } from \"@cas-smartdesign/element-utils\";\n\nexport type Filter = (searchTerm: string, allTokens: TokenData[]) => TokenData[];\n\ntype TokenSelectedCallback = (token: TokenData) => void;\n\nlet idCounter = 0;\n\nexport default class TokenSuggestPopover {\n private _popover?: Popover;\n private _tokenList: VirtualList;\n private _suggestItems: TokenData[];\n private lastRequestedStartIndex: number;\n private lastRequestedStopIndex: number;\n private pointerDown: boolean;\n\n public filter: Filter = (searchTerm, allTokens) => {\n if (!searchTerm) {\n return allTokens;\n }\n return allTokens.filter((t) => {\n if (t.disabled || t.deactivated) {\n return false;\n }\n return t.caption && t.caption.toLowerCase().includes(searchTerm);\n });\n };\n\n constructor(\n private inputElement: SDInput,\n private notSelectedTokensProvider: () => TokenData[],\n tokenSelectedCallback: TokenSelectedCallback,\n private initializeCallback: (popover: TokenSuggestPopover) => void,\n ) {\n VirtualList.ensureDefined();\n\n this._tokenList = new VirtualList();\n this._tokenList.id = \"sd_token_suggest_popover_list_\" + idCounter++;\n this._tokenList.style.minWidth = \"250px\";\n this._tokenList.style.maxHeight = \"49vh\";\n this._tokenList.itemHeight = 50;\n this._tokenList.addEventListener(\"pointerdown\", () => {\n this.pointerDown = true;\n window.addEventListener(\n \"pointerup\",\n () => {\n this.pointerDown = false;\n this._tokenList.increaseWidthOnNextRenderIfNeeded();\n if (!this._tokenList.isUpdatePending) {\n this._tokenList.requestUpdate();\n }\n },\n { once: true, capture: true },\n );\n });\n this._tokenList.addEventListener(\"selection\", (e: CustomEvent) => {\n const suggestIndex = e.detail.index;\n const selectedToken = this._suggestItems[suggestIndex];\n tokenSelectedCallback(selectedToken);\n this.hide();\n });\n this._tokenList.addEventListener(\"data-request\", (event) => {\n this.lastRequestedStartIndex = event.detail.startIndex;\n this.lastRequestedStopIndex = event.detail.stopIndex;\n if (!this.pointerDown) {\n this._tokenList.increaseWidthOnNextRenderIfNeeded();\n }\n this._tokenList.items = this._suggestItems.slice(\n this.lastRequestedStartIndex,\n this.lastRequestedStopIndex + 1,\n );\n });\n\n new KeyDownDelegator(this._tokenList, (event, _offset, toggleSelection) => {\n this._tokenList.dispatchEvent(new KeyboardEvent(event.type, event));\n if (!toggleSelection && !this.isOpened) {\n this.show();\n }\n }).connect(inputElement);\n }\n\n public show() {\n if (this.inputElement.effectiveDisabled) {\n return;\n }\n this.popover; // ensure init\n\n this._suggestItems = this.filterItems((this.inputElement.value || \"\").toLowerCase());\n if (this._suggestItems.length == 0) {\n this.hide();\n } else {\n this._tokenList.itemCount = this._suggestItems.length;\n this._tokenList.focusIndex = -1;\n this._tokenList.style.width = null;\n requestAnimationFrame(() => {\n if (this.lastRequestedStartIndex != null) {\n this._tokenList.increaseWidthOnNextRenderIfNeeded();\n this._tokenList.items = this._suggestItems.slice(\n this.lastRequestedStartIndex,\n this.lastRequestedStopIndex + 1,\n );\n }\n });\n\n this.popover.show();\n }\n }\n\n public refreshItems() {\n if (this.isOpened) {\n this._suggestItems = this.filterItems((this.inputElement.value || \"\").toLowerCase());\n if (this._suggestItems.length == 0) {\n this.hide();\n } else {\n this._tokenList.itemCount = this._suggestItems.length;\n this._tokenList.items = [];\n this._tokenList.style.width = null;\n }\n }\n }\n\n private filterItems(searchTerm: string): TokenData[] {\n const allTokens = this.notSelectedTokensProvider();\n return this.filter(searchTerm, allTokens);\n }\n\n public hide() {\n this._suggestItems = [];\n this._tokenList.itemCount = 0;\n this._tokenList.items = [];\n this._popover?.hide();\n }\n\n get list(): VirtualList {\n return this._tokenList;\n }\n\n get popover(): Popover {\n if (!this._popover) {\n this._popover = this.createPopover();\n this.initializeCallback(this);\n }\n return this._popover;\n }\n\n private createPopover(): Popover {\n const popover = new Popover();\n popover.setAttribute(\"trigger-type\", \"manual\");\n popover.setAttribute(\"placement\", \"bottom-start\");\n popover.setAttribute(\"modal\", \"\");\n popover.setAttribute(\"popover-for\", \"token-autosuggest-popover\");\n popover.setAttribute(\"offset\", \"-2\");\n popover.targetElement = this.inputElement;\n popover.appendChild(this._tokenList);\n return popover;\n }\n\n public get isOpened(): boolean {\n return this._popover && this._popover.hasAttribute(\"open\");\n }\n\n public get focusedSuggestToken(): TokenData {\n return this._suggestItems[this._tokenList.focusIndex];\n }\n}\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\r\\n <path d=\\\"m3.5 12.5 9-9m-9 0 9 9\\\" style=\\\"fill:none;stroke:#333;stroke-linecap:square;stroke-width:1.1px\\\"/>\\r\\n</svg>\"","import {\n LitElement,\n TemplateResult,\n html,\n nothing,\n CSSResult,\n unsafeCSS,\n PropertyValues,\n ComplexAttributeConverter,\n} from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { unsafeSVG } from \"lit/directives/unsafe-svg.js\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [Token.ID]: Token;\n }\n}\n\nimport style from \"./scss/token.scss?inline\";\nimport { default as clearSvg } from \"./clear.svg?raw\";\nimport ImageTools from \"@cas-smartdesign/image-tools\";\n\nexport interface TokenData {\n caption?: string;\n description?: string;\n type?: string;\n icon?: string;\n iconPlaceholder?: string;\n iconBackgroundColor?: string;\n disabled?: boolean;\n deactivated?: boolean;\n}\n\ntype TokenActionCallback = (tokenIndex: number, withModifier?: boolean) => void;\n\nconst alwaysPresentBooleanAttributeConverter = {\n fromAttribute: (value) => value == \"true\",\n toAttribute: (value) => value,\n} as ComplexAttributeConverter;\n\nexport default class Token extends LitElement {\n public static readonly ID = \"sd-token\";\n public static ensureDefined = (): void => {\n if (!customElements.get(Token.ID)) {\n customElements.define(Token.ID, Token);\n }\n };\n\n @property({ type: String, attribute: true, reflect: true })\n public value = \"\";\n @property({ type: String, attribute: true, reflect: true })\n public type = \"\";\n @property({ type: String })\n public icon = \"\";\n @property({ type: String })\n public iconPlaceholder = \"\";\n @property({ type: String })\n public iconBackgroundColor = \"\";\n @property({ converter: alwaysPresentBooleanAttributeConverter, reflect: true, attribute: \"aria-disabled\" })\n public disabled: boolean;\n @property({ converter: alwaysPresentBooleanAttributeConverter, reflect: true, attribute: \"aria-current\" })\n public current: boolean;\n\n public index: number;\n private _checked: boolean = false;\n\n private _tokenClickHandler: TokenActionCallback;\n private _tokenDeleteHandler: TokenActionCallback;\n\n static get styles(): CSSResult {\n return unsafeCSS(style);\n }\n\n public set checked(value: boolean) {\n const oldValue = this._checked;\n this._checked = !this.disabled && value;\n this.requestUpdate(\"checked\", oldValue);\n }\n\n @property({ converter: alwaysPresentBooleanAttributeConverter, reflect: true, attribute: \"aria-checked\" })\n public get checked(): boolean {\n return this._checked;\n }\n\n protected firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n this.tabIndex = -1;\n\n this.setAttribute(\"role\", \"option\");\n this.setAttribute(\"aria-selected\", \"true\");\n\n this.addEventListener(\"click\", (e) => {\n const selection = window.getSelection();\n if (selection && selection.type == \"Range\") {\n return;\n }\n if (this.disabled) {\n return;\n }\n e.stopPropagation();\n const withModifier = e.getModifierState(\"Control\");\n if (withModifier) {\n this.checked = !this.checked;\n } else {\n this.checked = true;\n }\n if (this._tokenClickHandler) {\n this._tokenClickHandler(this.index, withModifier);\n }\n });\n\n const deleteButton = this.shadowRoot.querySelector(\".delete-button-wrapper\");\n if (deleteButton) {\n deleteButton.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n if (this._tokenDeleteHandler) {\n this._tokenDeleteHandler(this.index);\n }\n });\n }\n }\n\n public render(): TemplateResult {\n return html`\n <div class=\"container\">\n <slot name=\"before-icon\"></slot>\n ${this.renderIcon()}\n <slot name=\"after-icon\"></slot>\n <div class=\"value\">${this.value}</div>\n ${this.disabled ? nothing : html` <div class=\"delete-button-wrapper\">${unsafeSVG(clearSvg)}</div> `}\n </div>\n `;\n }\n\n private renderIcon() {\n if (this.icon || this.iconPlaceholder) {\n const iconBackgroundStyle =\n this.iconBackgroundColor != null\n ? `--sd-token-icon-background-color: ${this.iconBackgroundColor}`\n : undefined;\n return html`\n <div class=\"icon-wrapper\" style=\"${ifDefined(iconBackgroundStyle)}\" role=\"img\">\n <div part=\"icon\" class=\"icon\"></div>\n </div>\n `;\n }\n return nothing;\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (\n (changedProperties.has(\"icon\") || changedProperties.has(\"iconPlaceholder\")) &&\n (this.icon || this.iconPlaceholder)\n ) {\n ImageTools.showImage(this.shadowRoot.querySelector(\".icon\"), this.icon, this.iconPlaceholder);\n }\n if (changedProperties.has(\"disabled\") && !this.disabled && this.checked) {\n this.checked = false;\n }\n }\n\n public setClickHandler(clickHandler: TokenActionCallback) {\n this._tokenClickHandler = clickHandler;\n }\n\n public setDeleteHandler(deleteHandler: TokenActionCallback) {\n this._tokenDeleteHandler = deleteHandler;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const generator = (data: TokenData, _index: number): Token => {\n const token = document.createElement(Token.ID) as Token;\n if (data) {\n token.value = data.caption;\n token.type = data.type;\n token.icon = data.icon;\n token.iconPlaceholder = data.iconPlaceholder;\n token.iconBackgroundColor = data.iconBackgroundColor;\n token.disabled = data.disabled;\n\n token.index = _index;\n }\n return token;\n};\n\nToken.ensureDefined();\n","import TokenSelector from \"./token-selector\";\nimport Token from \"./token\";\nimport SDInput from \"@cas-smartdesign/lit-input\";\n\nconst RELEVANT_MIME_TYPE = \"web application/json\";\n\nexport default class ClipboardExtension {\n constructor(\n tokenSelector: TokenSelector,\n getInputElementValue: () => string,\n pasteItems: (item: unknown[]) => void,\n ) {\n if (navigator.clipboard) {\n tokenSelector.addEventListener(\"copy\", () => {\n const selection = window.getSelection();\n if ((!selection || selection.type != \"Range\") && !getInputElementValue()) {\n this.writeToClipboard(tokenSelector);\n }\n });\n\n tokenSelector.addEventListener(\"cut\", () => {\n if (!getInputElementValue()) {\n tokenSelector.removeSelectionOrActiveToken();\n this.writeToClipboard(tokenSelector);\n }\n });\n\n tokenSelector.addEventListener(\"paste\", () => {\n if (!tokenSelector.disabled) {\n this.readFromClipboard(pasteItems);\n }\n });\n }\n }\n\n private writeToClipboard(tokenSelector: TokenSelector) {\n const checkedTokens = tokenSelector.querySelectorAll(\"[slot='items'][aria-checked='true']\");\n const relevantIndexes: number[] = [];\n if (checkedTokens.length > 0) {\n checkedTokens.forEach((t: Token) => relevantIndexes.push(t.index));\n } else if (tokenSelector.activeTokenIndex != -1) {\n const activeToken = tokenSelector.activeTokenElement;\n if (activeToken) {\n relevantIndexes.push(activeToken.index);\n }\n }\n if (relevantIndexes.length > 0) {\n const asJson = JSON.stringify(relevantIndexes.map((index) => tokenSelector.items[index]));\n const asBlob = new Blob([asJson], { type: RELEVANT_MIME_TYPE });\n navigator.clipboard.write([\n new ClipboardItem({\n [RELEVANT_MIME_TYPE]: asBlob,\n }),\n ]);\n }\n }\n\n private async readFromClipboard(pasteItems: (item: unknown[]) => void) {\n const clipboardItems = await navigator.clipboard.read();\n for (const clipboardItem of clipboardItems) {\n if (clipboardItem.types.includes(RELEVANT_MIME_TYPE)) {\n const blob = await clipboardItem.getType(RELEVANT_MIME_TYPE);\n const asText = await blob.text();\n const json = JSON.parse(asText);\n if (Array.isArray(json)) {\n pasteItems(json);\n }\n }\n }\n }\n}\n","import TokenSelector from \"./token-selector\";\nimport Token from \"./token\";\n\nexport default class DnDExtension {\n constructor(\n private tokenSelector: TokenSelector,\n addMatchingItems: (item: unknown[]) => number[],\n ) {\n const indexMapping = new Map();\n\n const handleGlobalDrop = (event: DragEvent) => {\n const target = event.target as HTMLElement;\n tokenSelector.removeAttribute(\"drag-source\");\n if (!tokenSelector.contains(target)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const addedIndexes = (event as any).addedIndexes as number[];\n if (addedIndexes) {\n tokenSelector.removeTokens(addedIndexes.map((i) => indexMapping.get(i)));\n }\n }\n indexMapping.clear();\n };\n\n tokenSelector.addEventListener(\"dragstart\", (event) => {\n const target = event.target;\n if (target instanceof Token) {\n if (target.disabled) {\n event.preventDefault();\n return;\n }\n tokenSelector.setAttribute(\"drag-source\", \"\");\n target.setAttribute(\"aria-checked\", \"true\");\n const checkedTokens = tokenSelector.querySelectorAll(\"[slot='items'][aria-checked='true']\");\n if (checkedTokens.length > 0) {\n const draggedItems = Array.from(checkedTokens)\n .filter((t: Token) => !t.disabled)\n .map((t: Token, index) => {\n indexMapping.set(index, t.index);\n return tokenSelector.items[t.index];\n });\n event.dataTransfer.setData(\"text/sd-token-selector\", JSON.stringify(draggedItems));\n event.dataTransfer.dropEffect = \"move\";\n event.dataTransfer.effectAllowed = \"move\";\n if (checkedTokens.length > 1) {\n const customDragImage = this.createCustomDragImage(target, draggedItems.length);\n event.dataTransfer.setDragImage(customDragImage, -14, -14);\n }\n window.addEventListener(\"drop\", handleGlobalDrop, { once: true });\n }\n }\n });\n tokenSelector.addEventListener(\"dragenter\", (event) => {\n tokenSelector.setAttribute(\"drop\", \"\");\n event.preventDefault();\n });\n tokenSelector.addEventListener(\"dragover\", (event) => event.preventDefault());\n tokenSelector.addEventListener(\"dragleave\", (event) => {\n if (event.target == tokenSelector) {\n tokenSelector.removeAttribute(\"drop\");\n }\n });\n tokenSelector.addEventListener(\"drop\", (event) => {\n tokenSelector.removeAttribute(\"drop\");\n const data = event.dataTransfer.getData(\"text/sd-token-selector\");\n if (data) {\n try {\n const asJson = JSON.parse(data);\n if (Array.isArray(asJson)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (event as any).addedIndexes = addMatchingItems(asJson);\n event.preventDefault();\n }\n } catch (ignored) {}\n }\n });\n tokenSelector.addEventListener(\"dragend\", () => {\n window.removeEventListener(\"drop\", handleGlobalDrop);\n tokenSelector.removeAttribute(\"drag-source\");\n indexMapping.clear();\n });\n }\n\n private createCustomDragImage(targetToken: Token, draggedItemsNumber: number): HTMLElement {\n let dragImage = targetToken.cloneNode(true) as HTMLElement;\n dragImage.setAttribute(\"aria-disabled\", \"true\");\n if (this.tokenSelector.tokenType) {\n (dragImage as Token).value = draggedItemsNumber + \" \" + this.tokenSelector.tokenType;\n } else {\n const counter = document.createElement(\"div\");\n counter.innerText = \"+\" + (draggedItemsNumber - 1);\n Object.assign(counter.style, {\n position: \"absolute\",\n left: \"90%\",\n top: \"75%\",\n });\n const wrapper = document.createElement(\"div\");\n wrapper.appendChild(dragImage);\n wrapper.appendChild(counter);\n dragImage = wrapper;\n }\n Object.assign(dragImage.style, {\n height: targetToken.offsetHeight,\n outline: \"none\",\n maxWidth: \"500px\",\n position: \"absolute\",\n display: \"block\",\n left: \"-99999px\",\n overflow: \"visible\",\n margin: \"1px\",\n });\n dragImage.slot = \"items\";\n this.tokenSelector.appendChild(dragImage);\n requestAnimationFrame(() => dragImage.remove());\n return dragImage;\n }\n}\n","import { LitElement, TemplateResult, html, CSSResult, unsafeCSS, PropertyValues, nothing } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\n\nimport \"@cas-smartdesign/lit-input\";\nimport SDInput, { IValueChangeEvent } from \"@cas-smartdesign/lit-input\";\nimport SDFieldValidationMessage, { ValidationLevel } from \"@cas-smartdesign/field-validation-message\";\nimport { ItemGenerator } from \"@cas-smartdesign/virtual-list\";\nimport { generator as itemGenerator } from \"@cas-smartdesign/list-item\";\n\nimport TokenSuggestPopover, { Filter } from \"./token-suggest-popover\";\nimport Token, { generator, TokenData } from \"./token\";\nimport ClipboardExtension from \"clipboard-extension\";\nimport style from \"./scss/token-selector.scss?inline\";\nimport DnDExtension from \"drag-and-drop-extension\";\n\nexport type { Filter as InMemoryFilter } from \"./token-suggest-popover\";\nexport type { TokenData } from \"./token\";\nexport { generator } from \"./token\";\n\nfunction debounce<T>(func: (...args: T[]) => unknown, delay: number): typeof func {\n let timeout: number;\n return function (...args: T[]) {\n if (timeout != null) {\n clearTimeout(timeout);\n }\n timeout = window.setTimeout(() => func(...args), delay);\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TokenSelector.ID]: TokenSelector;\n }\n}\n\nexport interface ITokenClickedEvent {\n index: number;\n tokenElement: Token;\n byPointerDevice: boolean;\n}\nexport interface ITokensRemovedEvent {\n removedIndices: number[];\n selectedIndices?: number[];\n}\nexport interface ITokenSelectedEvent {\n newIndices: number[];\n selectedIndices: number[];\n}\nexport interface ITokenCreatedEvent {\n value: string;\n}\n\nexport enum SelectionMode {\n RemoveOnly = \"remove-only\",\n Multi = \"multi\",\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n \"token-clicked\": CustomEvent<ITokenClickedEvent>;\n \"tokens-removed\": CustomEvent<ITokensRemovedEvent>;\n \"tokens-selected\": CustomEvent<ITokenSelectedEvent>;\n \"token-created\": CustomEvent<ITokenCreatedEvent>;\n \"auto-suggest-initialized\": CustomEvent;\n}\n\nexport default interface TokenSelector {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport type TokenGenerator = (data: TokenData, index: number) => Token;\n\nexport default class TokenSelector extends LitElement {\n public static readonly ID = \"sd-token-selector\";\n public static ensureDefined = (): void => {\n Token.ensureDefined();\n if (!customElements.get(TokenSelector.ID)) {\n customElements.define(TokenSelector.ID, TokenSelector);\n }\n };\n\n @property({ type: String, attribute: \"selection-mode\", reflect: true })\n public selectionMode: SelectionMode = SelectionMode.Multi;\n @property({ type: Array, attribute: false })\n public items: TokenData[] = [];\n @property({ type: Array, attribute: false })\n public selectedIndexes: number[] = [];\n @property({ type: String, reflect: true })\n public placeholder: string;\n @property({ type: String, reflect: true, attribute: \"suggest-list-class\" })\n public suggestListClass: string;\n @property({ type: String, reflect: true, attribute: \"input-label\" })\n public inputLabel: string;\n @property({\n converter: {\n fromAttribute: (value) => value == \"true\",\n toAttribute: (value) => value,\n },\n reflect: true,\n attribute: \"aria-disabled\",\n })\n public disabled: boolean;\n @property({ type: String, attribute: true })\n public validationMessage: string;\n @property({ type: String, attribute: true })\n public validationIconSrc: string;\n @property({ converter: SDFieldValidationMessage.levelConverter, attribute: true, reflect: true })\n public validationLevel: ValidationLevel;\n @property({ type: String, reflect: true, attribute: \"token-type\" })\n public tokenType: string;\n @property({ type: Boolean, reflect: true, attribute: \"case-sensitive\" })\n public caseSensitive: boolean;\n\n public suggestionFilter: Filter;\n\n private _tokenGenerator: TokenGenerator = generator;\n private _autoSuggestItemGenerator: ItemGenerator = itemGenerator;\n\n private additionalTokenCommittingKeys: string[] = [];\n\n private _tokenSuggestPopover: TokenSuggestPopover;\n\n private cancelSearch: boolean;\n private _activeTokenIndex = -1;\n\n static get styles(): CSSResult {\n return unsafeCSS(style);\n }\n\n static shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public get tokenGenerator(): TokenGenerator {\n return this._tokenGenerator;\n }\n\n public set tokenGenerator(value: TokenGenerator) {\n this._tokenGenerator = value;\n this.render();\n }\n\n public get autoSuggestItemGenerator(): ItemGenerator {\n return this._autoSuggestItemGenerator;\n }\n\n public set autoSuggestItemGenerator(value: ItemGenerator) {\n this._autoSuggestItemGenerator = value;\n if (this._tokenSuggestPopover) {\n this._tokenSuggestPopover.list.itemGenerator = value;\n }\n }\n\n public setAdditionalTokenCommittingKeys(keys: string[]): void {\n this.additionalTokenCommittingKeys = keys;\n }\n\n public openSuggestions(): void {\n if (this.inputElement) {\n this.focus();\n this.tokenSuggestPopover.show();\n }\n }\n\n public focus() {\n const inputEl = this.inputElement;\n if (inputEl) {\n inputEl.focus();\n } else {\n (this.shadowRoot.querySelector(\".container\") as HTMLElement).focus();\n }\n }\n\n public render(): TemplateResult {\n return this.selectionMode == SelectionMode.RemoveOnly\n ? html`<div class=\"container\" tabindex=\"${this.disabled ? -1 : 0}\">\n <slot name=\"items\"\n >${this.placeholder\n ? html`<span part=\"remove-only-placeholder\" class=\"placeholder\"\n >${this.placeholder}</span\n >`\n : nothing}</slot\n >\n </div>\n <slot class=\"additonal-content\" name=\"additional-content\" @focusin=${this.clearCheckedTokens}></slot>`\n : html`\n <sd-lit-input\n class=\"input\"\n .extendedPrefix=${true}\n .label=${this.inputLabel}\n .validationLevel=${this.validationLevel}\n .validationIconSrc=${this.validationIconSrc}\n .validationMessage=${this.validationMessage}\n .alwaysFloatLabel=${this.selectedIndexes.length > 0}\n .placeholder=${this.selectedIndexes.length == 0 ? this.placeholder : \"\"}\n .disabled=${this.disabled}\n aria-autocomplete=\"list\"\n tabindex=\"0\"\n @focus=${(e: FocusEvent) => (e.target as HTMLElement).setAttribute(\"focused\", \"\")}\n ><div class=\"token-wrapper\" slot=\"prefix\"><slot name=\"items\"></slot></div>\n </sd-lit-input>\n <slot class=\"additonal-content\" name=\"additional-content\" @focusin=${this.clearCheckedTokens}></slot>\n `;\n }\n\n protected firstUpdated(_changedProperties: Map<string | number | symbol, unknown>): void {\n super.firstUpdated(_changedProperties);\n\n this.setAttribute(\"role\", \"listbox\");\n this.setAttribute(\"aria-multiselectable\", \"true\");\n if (!this.hasAttribute(\"tabIndex\") && !this.disabled) {\n this.tabIndex = 0;\n }\n this.addEventListener(\"focusout\", (event) => {\n const target = event.relatedTarget as HTMLElement;\n if (!this.contains(target) && !this.shadowRoot.contains(target)) {\n this.clearCheckedTokens();\n }\n });\n this.addEventListener(\"focusin\", () => {\n if (\n this.selectionMode == SelectionMode.RemoveOnly &&\n this.activeTokenIndex == -1 &&\n this.items.length > 0 &&\n !this.disabled\n ) {\n this.activeTokenIndex = 0;\n }\n });\n new ClipboardExtension(\n this,\n () => this.inputElement?.value,\n (items) => this.selectOrAddItems(items),\n );\n new DnDExtension(this, (items) => this.selectOrAddItems(items));\n }\n\n private handleInputKeyDown = (event: KeyboardEvent, input: SDInput) => {\n if ((event.key === \"Enter\" || this.additionalTokenCommittingKeys.includes(event.key)) && input.value) {\n event.preventDefault();\n event.stopPropagation();\n this.commitTokenValue(input.value);\n this.inputElement.removeAttribute(\"focus-visible\");\n return;\n }\n\n switch (event.key) {\n case \"Escape\": {\n event.preventDefault();\n event.stopPropagation();\n this.tokenSuggestPopover.hide();\n break;\n }\n case \"Tab\": {\n this.commitTokenValue(input.value);\n this.tokenSuggestPopover.hide();\n this.inputElement.removeAttribute(\"focus-visible\");\n break;\n }\n default: {\n this.handleKeyDown(event);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowLeft\": {\n if (!this.hasInputValue) {\n this.updateActiveToken(-1);\n }\n break;\n }\n case \"ArrowRight\": {\n if (!this.hasInputValue) {\n this.updateActiveToken(1);\n }\n break;\n }\n case \"Enter\": {\n if (!this.hasInputValue && this.activeTokenIndex != -1) {\n const curEl = this.activeTokenElement;\n const withModifier = event.getModifierState(\"Control\");\n if (withModifier) {\n curEl.checked = !curEl.checked;\n } else {\n curEl.checked = true;\n }\n this.onTokenClick(curEl, false, withModifier);\n if (document.activeElement != this) {\n this.focus();\n }\n }\n break;\n }\n case \"Backspace\": {\n if (!this.hasInputValue) {\n if (this.activeTokenIndex == -1) {\n this.updateActiveToken(-1);\n } else {\n this.removeSelectionOrActiveToken();\n }\n }\n break;\n }\n case \"Clear\":\n case \"Delete\": {\n this.removeSelectionOrActiveToken();\n break;\n }\n case \"a\": {\n if (!this.hasInputValue && event.getModifierState(\"Control\")) {\n this.querySelectorAll(\"[slot='items']\").forEach((item: Token) => (item.checked = true));\n event.preventDefault();\n event.stopPropagation();\n }\n break;\n }\n }\n };\n\n /**\n *\n * Called when items were given by paste or drag events to token-selector.\n * The purpose of this function is to add or create items accordingly.\n *\n * @param {unknown[]} items the pasted or dropped items\n * @return {number[]} the indexes that were added successfully\n */\n public selectOrAddItems = (items: unknown & { caption?: string }[]): number[] => {\n const addedIndexes = [];\n const newSelectedIndexes = items\n .map((item, index) => {\n const matchingIndex = item.caption == null ? -1 : this.findIndex(item);\n if (\n matchingIndex != -1 &&\n !this.items[matchingIndex].disabled &&\n !this.selectedIndexes.includes(matchingIndex)\n ) {\n addedIndexes.push(index);\n return matchingIndex;\n }\n return -1;\n })\n .filter((i) => -1 != i);\n if (newSelectedIndexes.length > 0) {\n this.handleTokenSelection(newSelectedIndexes);\n }\n return addedIndexes;\n };\n\n private clearCheckedTokens() {\n this.querySelectorAll(\"[slot='items'][aria-checked='true']\").forEach(\n (checkedToken: Token) => (checkedToken.checked = false),\n );\n const inputEl = this.inputElement;\n if (inputEl) {\n inputEl.removeAttribute(\"focus-visible\");\n inputEl.removeAttribute(\"focused\");\n }\n }\n\n public removeSelectionOrActiveToken() {\n if (!this.disabled) {\n const checkedTokens = this.querySelectorAll(\"[slot='items'][aria-checked='true']\");\n if (checkedTokens.length > 0) {\n const tokensArray = Array.from(checkedTokens) as Token[];\n this.removeTokens(tokensArray.filter((t) => !t.disabled).map((t) => t.index));\n } else if (this.activeTokenIndex != -1) {\n const activeToken = this.activeTokenElement;\n if (activeToken && !activeToken.disabled) {\n this.removeTokens([activeToken.index]);\n }\n }\n }\n }\n\n private updateActiveToken(offset: number): void {\n if (this.disabled) {\n return;\n }\n const maxIndex = this.querySelectorAll(\"[slot='items']\").length - 1;\n if (this.activeTokenIndex == -1) {\n if (offset < 0) {\n this.activeTokenIndex = maxIndex;\n }\n } else {\n if (this.activeTokenIndex == maxIndex && offset > 0 && this.selectionMode == SelectionMode.Multi) {\n this.activeTokenIndex = -1;\n this.focus();\n } else {\n this.activeTokenIndex = Math.max(0, Math.min(maxIndex, this.activeTokenIndex + offset));\n }\n }\n if (this.activeTokenIndex > -1) {\n this.inputElement?.setAttribute(\"focus-visible\", \"\");\n if (this.scrollHeight > this.offsetHeight) {\n const activeEl = this.activeTokenElement as HTMLElement & {\n scrollIntoViewIfNeeded?: () => void;\n };\n if (activeEl.scrollIntoViewIfNeeded) {\n activeEl.scrollIntoViewIfNeeded();\n } else {\n activeEl.scrollIntoView();\n }\n }\n }\n }\n\n private commitTokenValue(tokenValue: string): void {\n if (this.disabled) {\n return;\n }\n\n // 'Commiting' supports three different cases:\n // 1. User navigates via arrow keys in the auto suggest list and selects an item with enter\n // 2. User enters a value that is already present as a token, so this token is 'selected'\n // 3. User enters a value that is new, so the token is 'created'\n\n if (this.tokenSuggestPopover.isOpened) {\n const focusedSuggestToken = this.tokenSuggestPopover.focusedSuggestToken;\n if (focusedSuggestToken) {\n if (!focusedSuggestToken.disabled) {\n const selectedTokenIndex = this.findIndex(focusedSuggestToken);\n this.handleTokenSelection([selectedTokenIndex]);\n this.tokenSuggestPopover.hide();\n }\n return;\n }\n }\n\n if (!tokenValue?.trim()) {\n return;\n }\n\n const tokenIndex = this.items.findIndex((item) =>\n this.caseSensitive ? item.caption == tokenValue : item.caption.toLowerCase() == tokenValue.toLowerCase(),\n );\n if (!this.selectedIndexes.includes(tokenIndex)) {\n if (tokenIndex >= 0) {\n this.handleTokenSelection([tokenIndex]);\n } else {\n this.handleTokenCreation(tokenValue);\n }\n }\n\n this.requestUpdate(\"selectedIndexes\");\n this.tokenSuggestPopover.hide();\n window.removeEventListener(\"pointerdown\", this.handleWindowPointerDown);\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n\n if (this._tokenSuggestPopover) {\n this.tokenSuggestPopover.list.className = this.suggestListClass || \"\";\n if (this.suggestionFilter) {\n this.tokenSuggestPopover.filter = this.suggestionFilter;\n }\n }\n\n if (changedProperties.has(\"selectionMode\")) {\n if (SelectionMode.Multi == this.selectionMode) {\n this.setAttribute(\"aria-haspopup\", \"listbox\");\n const input = this.inputElement;\n input.addEventListener(\"immediate-value-change\", (e) => this.handleInputValueChange(e));\n input.addEventListener(\"keydown\", (e) => this.handleInputKeyDown(e, input));\n window.queueMicrotask(() => this.tokenSuggestPopover); // lazy init of the popover\n } else {\n this.removeAttribute(\"aria-haspopup\");\n this.addEventListener(\"keydown\", this.handleKeyDown);\n if (this._tokenSuggestPopover) {\n this._tokenSuggestPopover.popover.remove();\n this._tokenSuggestPopover = null;\n }\n }\n }\n\n if (\n changedProperties.size == 0 ||\n changedProperties.has(\"selectionMode\") ||\n changedProperties.has(\"items\") ||\n changedProperties.has(\"selectedIndexes\") ||\n changedProperties.has(\"disabled\")\n ) {\n this.updateItems();\n }\n if (changedProperties.has(\"inputLabel\")) {\n if (this.inputLabel) {\n this.setAttribute(\"aria-label\", this.inputLabel);\n } else {\n this.removeAttribute(\"aria-label\");\n }\n }\n }\n\n private handleInputValueChange(event: CustomEvent<IValueChangeEvent>): void {\n const userInput = event.detail.value;\n if (!userInput) {\n this.tokenSuggestPopover.hide();\n this.cancelSearch = true;\n } else {\n this.activeTokenIndex = -1;\n this.cancelSearch = false;\n this.debouncedShowTokenSuggestPopover();\n window.addEventListener(\"pointerdown\", this.handleWindowPointerDown);\n }\n }\n\n private handleWindowPointerDown = (event: PointerEvent) => {\n const input = this.inputElement;\n if (!input || !input.value) return;\n\n const pointerDownOnInputOrList = event.composedPath().some((element) => {\n if (\n element instanceof HTMLElement &&\n (event.composedPath().indexOf(input) > -1 ||\n element.getAttribute(\"popover-for\") === \"token-autosuggest-popover\")\n ) {\n return true;\n }\n });\n\n if (!pointerDownOnInputOrList) {\n this.commitTokenValue(input.value);\n }\n };\n\n private debouncedShowTokenSuggestPopover = debounce(this.showFilteredTokenSuggestions.bind(this), 200);\n private showFilteredTokenSuggestions() {\n if (!this.cancelSearch && this.inputElement.value) {\n this.tokenSuggestPopover.show();\n }\n }\n\n private isTokenNotSelected(index: number): unknown {\n return !this.selectedIndexes.includes(index);\n }\n\n private get tokenSuggestPopover(): TokenSuggestPopover {\n if (!this._tokenSuggestPopover && this.inputElement) {\n this._tokenSuggestPopover = new TokenSuggestPopover(\n this.inputElement,\n () => this.items.filter((item, index) => !item.disabled && this.isTokenNotSelected(index)),\n (selectedToken) => {\n const selectedTokenIndex = this.findIndex(selectedToken);\n this.handleTokenSelection([selectedTokenIndex]);\n window.removeEventListener(\"pointerdown\", this.handleWindowPointerDown);\n },\n (suggestPopover) => {\n this.appendChild(suggestPopover.popover);\n this.inputElement.setAttribute(\"aria-controls\", suggestPopover.list.id);\n this.dispatchEvent(new CustomEvent(\"auto-suggest-initialized\"));\n suggestPopover.popover.addEventListener(\"close\", () => {\n if (this.inputElement.value && !this.contains(document.activeElement)) {\n this.inputElement.value = \"\";\n }\n });\n },\n );\n this._tokenSuggestPopover.list.itemGenerator = this._autoSuggestItemGenerator;\n this._tokenSuggestPopover.list.className = this.suggestListClass;\n if (this.suggestionFilter) {\n this._tokenSuggestPopover.filter = this.suggestionFilter;\n }\n }\n return this._tokenSuggestPopover;\n }\n\n private updateItems(): void {\n if (!this.isConnected || !this.items) {\n return;\n }\n\n this.activeTokenIndex = -1;\n\n const input = this.inputElement;\n if (input && (!this._tokenSuggestPopover || !this._tokenSuggestPopover.isOpened)) {\n input.value = \"\";\n }\n\n this.querySelectorAll(\"[slot='items']\").forEach((oldItem) => {\n this.removeChild(oldItem);\n });\n\n const fragment = document.createDocumentFragment();\n\n let visibleTokens: TokenData[] = [];\n if (this.selectionMode == SelectionMode.RemoveOnly) {\n visibleTokens = this.items.map((item) => this.disableIfNeeded(item));\n } else {\n this.selectedIndexes.forEach((value) => {\n visibleTokens.push(this.disableIfNeeded(this.items[value]));\n });\n }\n\n visibleTokens.forEach((item) => {\n const token = this.tokenGenerator(item, this.findIndex(item));\n token.slot = \"items\";\n fragment.appendChild(token);\n if (!token.id) {\n token.id = window.crypto.getRandomValues(new Uint32Array(1))[0].toString(16);\n }\n\n token.setClickHandler((_tokenIndex, withModifier) => this.onTokenClick(token, true, withModifier));\n token.addEventListener(\"click\", () => {\n this.inputElement?.removeAttribute(\"focus-visible\");\n const selection = window.getSelection();\n if ((!selection || selection.type != \"Range\") && document.activeElement != this) {\n this.focus();\n }\n });\n token.setDeleteHandler((tokenIndex) => this.removeTokens([tokenIndex]));\n });\n\n this.appendChild(fragment);\n if (this._tokenSuggestPopover) {\n this._tokenSuggestPopover.refreshItems();\n }\n }\n\n public removeTokens(indexes: number[]): void {\n if (this.disabled || indexes == null || indexes.length == 0) {\n return;\n }\n\n if (this.activeTokenIndex != -1 && indexes.includes(this.activeTokenElement.index)) {\n this.activeTokenIndex = -1;\n }\n if (this.selectionMode == SelectionMode.RemoveOnly) {\n this.dispatchEvent(\n new CustomEvent<ITokensRemovedEvent>(\"tokens-removed\", {\n detail: {\n removedIndices: indexes,\n },\n }),\n );\n } else {\n const matchingIndexes = indexes.filter((i) => this.selectedIndexes.includes(i));\n if (matchingIndexes.length > 0) {\n this.selectedIndexes = this.selectedIndexes.filter((i) => !matchingIndexes.includes(i));\n\n this.dispatchEvent(\n new CustomEvent<ITokensRemovedEvent>(\"tokens-removed\", {\n detail: {\n removedIndices: matchingIndexes,\n selectedIndices: [...this.selectedIndexes],\n },\n }),\n );\n }\n }\n }\n\n private onTokenClick(token: Token, byPointerDevice: boolean, withModifier: boolean): void {\n let relevantIndex;\n this.querySelectorAll(\"[slot='items']\").forEach((item, i) => {\n if (token == item) {\n relevantIndex = i;\n } else if (!withModifier) {\n item.setAttribute(\"aria-checked\", \"false\");\n }\n });\n this.activeTokenIndex = relevantIndex;\n this.setAttribute(\"aria-activedescendant\", this.activeTokenElement.id);\n if (this._tokenSuggestPopover && this._tokenSuggestPopover.isOpened) {\n this._tokenSuggestPopover.hide();\n }\n if (!withModifier) {\n this.dispatchEvent(\n new CustomEvent<ITokenClickedEvent>(\"token-clicked\", {\n detail: {\n index: token.index,\n tokenElement: token,\n byPointerDevice,\n },\n }),\n );\n }\n }\n\n private disableIfNeeded(item: TokenData): TokenData {\n if (this.disabled) {\n return { ...item, disabled: true };\n }\n return item;\n }\n\n private handleTokenSelection(indexes: number[]) {\n this.selectedIndexes = this.selectedIndexes.concat(indexes);\n this.dispatchEvent(\n new CustomEvent<ITokenSelectedEvent>(\"tokens-selected\", {\n detail: {\n newIndices: indexes,\n selectedIndices: [...this.selectedIndexes],\n },\n }),\n );\n }\n\n private handleTokenCreation(tokenValue: string) {\n this.dispatchEvent(\n new CustomEvent(\"token-created\", {\n detail: {\n value: tokenValue,\n },\n }),\n );\n }\n\n private get inputElement(): SDInput | null {\n return this.shadowRoot.querySelector(\".input\") as SDInput;\n }\n\n public get activeTokenElement(): Token | null {\n return this.getTokenElement(this.activeTokenIndex);\n }\n\n private getTokenElement(index: number): Token | null {\n return this.querySelector(\"[slot='items']:nth-of-type(\" + (index + 1) + \")\");\n }\n\n public findIndex(token: TokenData) {\n return this.items.findIndex((item) => item.caption === token.caption);\n }\n\n public get activeTokenIndex(): number {\n return this._activeTokenIndex;\n }\n\n public set activeTokenIndex(value: number) {\n if (this._activeTokenIndex != -1) {\n const previous = this.activeTokenElement;\n if (previous) {\n previous.current = false;\n }\n }\n this._activeTokenIndex = value;\n if (value == -1) {\n this.removeAttribute(\"aria-activedescendant\");\n } else {\n const activeElement = this.activeTokenElement;\n activeElement.current = true;\n this.setAttribute(\"aria-activedescendant\", activeElement.id);\n }\n }\n\n private get hasInputValue() {\n return !!this.inputElement?.value;\n }\n}\n"],"names":["idCounter","TokenSuggestPopover","inputElement","notSelectedTokensProvider","tokenSelectedCallback","initializeCallback","searchTerm","allTokens","t","VirtualList","e","suggestIndex","selectedToken","event","KeyDownDelegator","_offset","toggleSelection","_a","popover","Popover","clearSvg","alwaysPresentBooleanAttributeConverter","value","_Token","LitElement","unsafeCSS","style","oldValue","changedProperties","selection","withModifier","deleteButton","html","nothing","unsafeSVG","iconBackgroundStyle","ifDefined","ImageTools","clickHandler","deleteHandler","__decorateClass","property","Token","generator","data","_index","token","RELEVANT_MIME_TYPE","ClipboardExtension","tokenSelector","getInputElementValue","pasteItems","checkedTokens","relevantIndexes","activeToken","asJson","index","asBlob","clipboardItems","clipboardItem","asText","json","DnDExtension","addMatchingItems","indexMapping","handleGlobalDrop","target","addedIndexes","i","draggedItems","customDragImage","targetToken","draggedItemsNumber","dragImage","counter","wrapper","debounce","func","delay","timeout","args","SelectionMode","_TokenSelector","itemGenerator","input","curEl","item","items","newSelectedIndexes","matchingIndex","element","keys","inputEl","_changedProperties","checkedToken","tokensArray","offset","maxIndex","activeEl","tokenValue","focusedSuggestToken","selectedTokenIndex","tokenIndex","suggestPopover","oldItem","fragment","visibleTokens","_tokenIndex","indexes","matchingIndexes","byPointerDevice","relevantIndex","previous","activeElement","SDFieldValidationMessage","TokenSelector"],"mappings":"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"}
1
+ {"version":3,"file":"token-selector.mjs","sources":["../token-suggest-popover.ts","../clear.svg?raw","../token.ts","../clipboard-extension.ts","../drag-and-drop-extension.ts","../token-selector.ts"],"sourcesContent":["import Popover from \"@cas-smartdesign/popover\";\nimport VirtualList from \"@cas-smartdesign/virtual-list\";\nimport { TokenData } from \"./token\";\nimport SDInput from \"@cas-smartdesign/lit-input\";\nimport { KeyDownDelegator } from \"@cas-smartdesign/element-utils\";\n\nexport type Filter = (searchTerm: string, allTokens: TokenData[]) => TokenData[];\n\ntype TokenSelectedCallback = (token: TokenData) => void;\n\nlet idCounter = 0;\n\nexport default class TokenSuggestPopover {\n private _popover?: Popover;\n private _tokenList: VirtualList;\n private _suggestItems: TokenData[];\n private lastRequestedStartIndex: number;\n private lastRequestedStopIndex: number;\n private pointerDown: boolean;\n\n public filter: Filter = (searchTerm, allTokens) => {\n if (!searchTerm) {\n return allTokens;\n }\n return allTokens.filter((t) => {\n if (t.disabled || t.deactivated) {\n return false;\n }\n return t.caption && t.caption.toLowerCase().includes(searchTerm);\n });\n };\n\n constructor(\n private inputElement: SDInput,\n private notSelectedTokensProvider: () => TokenData[],\n tokenSelectedCallback: TokenSelectedCallback,\n private initializeCallback: (popover: TokenSuggestPopover) => void,\n ) {\n VirtualList.ensureDefined();\n\n this._tokenList = new VirtualList();\n this._tokenList.id = \"sd_token_suggest_popover_list_\" + idCounter++;\n this._tokenList.style.minWidth = \"250px\";\n this._tokenList.style.maxHeight = \"49vh\";\n this._tokenList.itemHeight = 50;\n this._tokenList.addEventListener(\"pointerdown\", () => {\n this.pointerDown = true;\n window.addEventListener(\n \"pointerup\",\n () => {\n this.pointerDown = false;\n this._tokenList.increaseWidthOnNextRenderIfNeeded();\n if (!this._tokenList.isUpdatePending) {\n this._tokenList.requestUpdate();\n }\n },\n { once: true, capture: true },\n );\n });\n this._tokenList.addEventListener(\"selection\", (e: CustomEvent) => {\n const suggestIndex = e.detail.index;\n const selectedToken = this._suggestItems[suggestIndex];\n tokenSelectedCallback(selectedToken);\n this.hide();\n });\n this._tokenList.addEventListener(\"data-request\", (event) => {\n this.lastRequestedStartIndex = event.detail.startIndex;\n this.lastRequestedStopIndex = event.detail.stopIndex;\n if (!this.pointerDown) {\n this._tokenList.increaseWidthOnNextRenderIfNeeded();\n }\n this._tokenList.items = this._suggestItems.slice(\n this.lastRequestedStartIndex,\n this.lastRequestedStopIndex + 1,\n );\n });\n\n new KeyDownDelegator(this._tokenList, (event, _offset, toggleSelection) => {\n this._tokenList.dispatchEvent(new KeyboardEvent(event.type, event));\n if (!toggleSelection && !this.isOpened) {\n this.show();\n }\n }).connect(inputElement);\n }\n\n public show() {\n if (this.inputElement.effectiveDisabled) {\n return;\n }\n this.popover; // ensure init\n\n this._suggestItems = this.filterItems((this.inputElement.value || \"\").toLowerCase());\n if (this._suggestItems.length == 0) {\n this.hide();\n } else {\n this._tokenList.itemCount = this._suggestItems.length;\n this._tokenList.focusIndex = -1;\n this._tokenList.style.width = null;\n requestAnimationFrame(() => {\n if (this.lastRequestedStartIndex != null) {\n this._tokenList.increaseWidthOnNextRenderIfNeeded();\n this._tokenList.items = this._suggestItems.slice(\n this.lastRequestedStartIndex,\n this.lastRequestedStopIndex + 1,\n );\n }\n });\n\n this.popover.show();\n }\n }\n\n public refreshItems() {\n if (this.isOpened) {\n this._suggestItems = this.filterItems((this.inputElement.value || \"\").toLowerCase());\n if (this._suggestItems.length == 0) {\n this.hide();\n } else {\n this._tokenList.itemCount = this._suggestItems.length;\n this._tokenList.items = [];\n this._tokenList.style.width = null;\n }\n }\n }\n\n private filterItems(searchTerm: string): TokenData[] {\n const allTokens = this.notSelectedTokensProvider();\n return this.filter(searchTerm, allTokens);\n }\n\n public hide() {\n this._suggestItems = [];\n this._tokenList.itemCount = 0;\n this._tokenList.items = [];\n this._popover?.hide();\n }\n\n get list(): VirtualList {\n return this._tokenList;\n }\n\n get popover(): Popover {\n if (!this._popover) {\n this._popover = this.createPopover();\n this.initializeCallback(this);\n }\n return this._popover;\n }\n\n private createPopover(): Popover {\n const popover = new Popover();\n popover.setAttribute(\"trigger-type\", \"manual\");\n popover.setAttribute(\"placement\", \"bottom-start\");\n popover.setAttribute(\"modal\", \"\");\n popover.setAttribute(\"popover-for\", \"token-autosuggest-popover\");\n popover.setAttribute(\"offset\", \"-2\");\n popover.targetElement = this.inputElement;\n popover.appendChild(this._tokenList);\n return popover;\n }\n\n public get isOpened(): boolean {\n return this._popover && this._popover.hasAttribute(\"open\");\n }\n\n public get focusedSuggestToken(): TokenData {\n return this._suggestItems[this._tokenList.focusIndex];\n }\n}\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 16 16\\\">\\r\\n <path d=\\\"m3.5 12.5 9-9m-9 0 9 9\\\" style=\\\"fill:none;stroke:#333;stroke-linecap:square;stroke-width:1.1px\\\"/>\\r\\n</svg>\"","import {\n LitElement,\n TemplateResult,\n html,\n nothing,\n CSSResult,\n unsafeCSS,\n PropertyValues,\n ComplexAttributeConverter,\n} from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { unsafeSVG } from \"lit/directives/unsafe-svg.js\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [Token.ID]: Token;\n }\n}\n\nimport style from \"./scss/token.scss?inline\";\nimport { default as clearSvg } from \"./clear.svg?raw\";\nimport ImageTools from \"@cas-smartdesign/image-tools\";\n\nexport interface TokenData {\n caption?: string;\n description?: string;\n type?: string;\n icon?: string;\n iconPlaceholder?: string;\n iconBackgroundColor?: string;\n disabled?: boolean;\n deactivated?: boolean;\n}\n\ntype TokenActionCallback = (tokenIndex: number, withModifier?: boolean) => void;\n\nconst alwaysPresentBooleanAttributeConverter = {\n fromAttribute: (value) => value == \"true\",\n toAttribute: (value) => value,\n} as ComplexAttributeConverter;\n\nexport default class Token extends LitElement {\n public static readonly ID = \"sd-token\";\n public static ensureDefined = (): void => {\n if (!customElements.get(Token.ID)) {\n customElements.define(Token.ID, Token);\n }\n };\n\n @property({ type: String, attribute: true, reflect: true })\n public value = \"\";\n @property({ type: String, attribute: true, reflect: true })\n public type = \"\";\n @property({ type: String })\n public icon = \"\";\n @property({ type: String })\n public iconPlaceholder = \"\";\n @property({ type: String })\n public iconBackgroundColor = \"\";\n @property({ converter: alwaysPresentBooleanAttributeConverter, reflect: true, attribute: \"aria-disabled\" })\n public disabled: boolean;\n @property({ converter: alwaysPresentBooleanAttributeConverter, reflect: true, attribute: \"aria-current\" })\n public current: boolean;\n\n public index: number;\n private _checked: boolean = false;\n\n private _tokenClickHandler: TokenActionCallback;\n private _tokenDeleteHandler: TokenActionCallback;\n\n static get styles(): CSSResult {\n return unsafeCSS(style);\n }\n\n public set checked(value: boolean) {\n const oldValue = this._checked;\n this._checked = !this.disabled && value;\n this.requestUpdate(\"checked\", oldValue);\n }\n\n @property({ converter: alwaysPresentBooleanAttributeConverter, reflect: true, attribute: \"aria-checked\" })\n public get checked(): boolean {\n return this._checked;\n }\n\n protected firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n this.tabIndex = -1;\n\n this.setAttribute(\"role\", \"option\");\n this.setAttribute(\"aria-selected\", \"true\");\n\n this.addEventListener(\"click\", (e) => {\n const selection = window.getSelection();\n if (selection && selection.type == \"Range\") {\n return;\n }\n if (this.disabled) {\n return;\n }\n e.stopPropagation();\n const withModifier = e.getModifierState(\"Control\");\n if (withModifier) {\n this.checked = !this.checked;\n } else {\n this.checked = true;\n }\n if (this._tokenClickHandler) {\n this._tokenClickHandler(this.index, withModifier);\n }\n });\n\n const deleteButton = this.shadowRoot.querySelector(\".delete-button-wrapper\");\n if (deleteButton) {\n deleteButton.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n if (this._tokenDeleteHandler) {\n this._tokenDeleteHandler(this.index);\n }\n });\n }\n }\n\n public render(): TemplateResult {\n return html`\n <div class=\"container\">\n <slot name=\"before-icon\"></slot>\n ${this.renderIcon()}\n <slot name=\"after-icon\"></slot>\n <div class=\"value\">${this.value}</div>\n ${this.disabled ? nothing : html` <div class=\"delete-button-wrapper\">${unsafeSVG(clearSvg)}</div> `}\n </div>\n `;\n }\n\n private renderIcon() {\n if (this.icon || this.iconPlaceholder) {\n const iconBackgroundStyle =\n this.iconBackgroundColor != null\n ? `--sd-token-icon-background-color: ${this.iconBackgroundColor}`\n : undefined;\n return html`\n <div class=\"icon-wrapper\" style=\"${ifDefined(iconBackgroundStyle)}\" role=\"img\">\n <div part=\"icon\" class=\"icon\"></div>\n </div>\n `;\n }\n return nothing;\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (\n (changedProperties.has(\"icon\") || changedProperties.has(\"iconPlaceholder\")) &&\n (this.icon || this.iconPlaceholder)\n ) {\n ImageTools.showImage(this.shadowRoot.querySelector(\".icon\"), this.icon, this.iconPlaceholder);\n }\n if (changedProperties.has(\"disabled\") && !this.disabled && this.checked) {\n this.checked = false;\n }\n }\n\n public setClickHandler(clickHandler: TokenActionCallback) {\n this._tokenClickHandler = clickHandler;\n }\n\n public setDeleteHandler(deleteHandler: TokenActionCallback) {\n this._tokenDeleteHandler = deleteHandler;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const generator = (data: TokenData, _index: number): Token => {\n const token = document.createElement(Token.ID) as Token;\n if (data) {\n token.value = data.caption;\n token.type = data.type;\n token.icon = data.icon;\n token.iconPlaceholder = data.iconPlaceholder;\n token.iconBackgroundColor = data.iconBackgroundColor;\n token.disabled = data.disabled;\n\n token.index = _index;\n }\n return token;\n};\n\nToken.ensureDefined();\n","import TokenSelector from \"./token-selector\";\nimport Token from \"./token\";\nimport SDInput from \"@cas-smartdesign/lit-input\";\n\nconst RELEVANT_MIME_TYPE = \"web application/json\";\n\nexport default class ClipboardExtension {\n constructor(\n tokenSelector: TokenSelector,\n getInputElementValue: () => string,\n pasteItems: (item: unknown[]) => void,\n ) {\n if (navigator.clipboard) {\n tokenSelector.addEventListener(\"copy\", () => {\n const selection = window.getSelection();\n if ((!selection || selection.type != \"Range\") && !getInputElementValue()) {\n this.writeToClipboard(tokenSelector);\n }\n });\n\n tokenSelector.addEventListener(\"cut\", () => {\n if (!getInputElementValue()) {\n tokenSelector.removeSelectionOrActiveToken();\n this.writeToClipboard(tokenSelector);\n }\n });\n\n tokenSelector.addEventListener(\"paste\", () => {\n if (!tokenSelector.disabled) {\n this.readFromClipboard(pasteItems);\n }\n });\n }\n }\n\n private writeToClipboard(tokenSelector: TokenSelector) {\n const checkedTokens = tokenSelector.querySelectorAll(\"[slot='items'][aria-checked='true']\");\n const relevantIndexes: number[] = [];\n if (checkedTokens.length > 0) {\n checkedTokens.forEach((t: Token) => relevantIndexes.push(t.index));\n } else if (tokenSelector.activeTokenIndex != -1) {\n const activeToken = tokenSelector.activeTokenElement;\n if (activeToken) {\n relevantIndexes.push(activeToken.index);\n }\n }\n if (relevantIndexes.length > 0) {\n const asJson = JSON.stringify(relevantIndexes.map((index) => tokenSelector.items[index]));\n const asBlob = new Blob([asJson], { type: RELEVANT_MIME_TYPE });\n navigator.clipboard.write([\n new ClipboardItem({\n [RELEVANT_MIME_TYPE]: asBlob,\n }),\n ]);\n }\n }\n\n private async readFromClipboard(pasteItems: (item: unknown[]) => void) {\n const clipboardItems = await navigator.clipboard.read();\n for (const clipboardItem of clipboardItems) {\n if (clipboardItem.types.includes(RELEVANT_MIME_TYPE)) {\n const blob = await clipboardItem.getType(RELEVANT_MIME_TYPE);\n const asText = await blob.text();\n const json = JSON.parse(asText);\n if (Array.isArray(json)) {\n pasteItems(json);\n }\n }\n }\n }\n}\n","import TokenSelector from \"./token-selector\";\nimport Token from \"./token\";\n\nexport default class DnDExtension {\n constructor(\n private tokenSelector: TokenSelector,\n addMatchingItems: (item: unknown[]) => number[],\n ) {\n const indexMapping = new Map();\n\n const handleGlobalDrop = (event: DragEvent) => {\n const target = event.target as HTMLElement;\n tokenSelector.removeAttribute(\"drag-source\");\n if (!tokenSelector.contains(target)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const addedIndexes = (event as any).addedIndexes as number[];\n if (addedIndexes) {\n tokenSelector.removeTokens(addedIndexes.map((i) => indexMapping.get(i)));\n }\n }\n indexMapping.clear();\n };\n\n tokenSelector.addEventListener(\"dragstart\", (event) => {\n const target = event.target;\n if (target instanceof Token) {\n if (target.disabled) {\n event.preventDefault();\n return;\n }\n tokenSelector.setAttribute(\"drag-source\", \"\");\n target.setAttribute(\"aria-checked\", \"true\");\n const checkedTokens = tokenSelector.querySelectorAll(\"[slot='items'][aria-checked='true']\");\n if (checkedTokens.length > 0) {\n const draggedItems = Array.from(checkedTokens)\n .filter((t: Token) => !t.disabled)\n .map((t: Token, index) => {\n indexMapping.set(index, t.index);\n return tokenSelector.items[t.index];\n });\n event.dataTransfer.setData(\"text/sd-token-selector\", JSON.stringify(draggedItems));\n event.dataTransfer.dropEffect = \"move\";\n event.dataTransfer.effectAllowed = \"move\";\n if (checkedTokens.length > 1) {\n const customDragImage = this.createCustomDragImage(target, draggedItems.length);\n event.dataTransfer.setDragImage(customDragImage, -14, -14);\n }\n window.addEventListener(\"drop\", handleGlobalDrop, { once: true });\n }\n }\n });\n tokenSelector.addEventListener(\"dragenter\", (event) => {\n tokenSelector.setAttribute(\"drop\", \"\");\n event.preventDefault();\n });\n tokenSelector.addEventListener(\"dragover\", (event) => event.preventDefault());\n tokenSelector.addEventListener(\"dragleave\", (event) => {\n if (event.target == tokenSelector) {\n tokenSelector.removeAttribute(\"drop\");\n }\n });\n tokenSelector.addEventListener(\"drop\", (event) => {\n tokenSelector.removeAttribute(\"drop\");\n const data = event.dataTransfer.getData(\"text/sd-token-selector\");\n if (data) {\n try {\n const asJson = JSON.parse(data);\n if (Array.isArray(asJson)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (event as any).addedIndexes = addMatchingItems(asJson);\n event.preventDefault();\n }\n } catch (ignored) {}\n }\n });\n tokenSelector.addEventListener(\"dragend\", () => {\n window.removeEventListener(\"drop\", handleGlobalDrop);\n tokenSelector.removeAttribute(\"drag-source\");\n indexMapping.clear();\n });\n }\n\n private createCustomDragImage(targetToken: Token, draggedItemsNumber: number): HTMLElement {\n let dragImage = targetToken.cloneNode(true) as HTMLElement;\n dragImage.setAttribute(\"aria-disabled\", \"true\");\n if (this.tokenSelector.tokenType) {\n (dragImage as Token).value = draggedItemsNumber + \" \" + this.tokenSelector.tokenType;\n } else {\n const counter = document.createElement(\"div\");\n counter.innerText = \"+\" + (draggedItemsNumber - 1);\n Object.assign(counter.style, {\n position: \"absolute\",\n left: \"90%\",\n top: \"75%\",\n });\n const wrapper = document.createElement(\"div\");\n wrapper.appendChild(dragImage);\n wrapper.appendChild(counter);\n dragImage = wrapper;\n }\n Object.assign(dragImage.style, {\n height: targetToken.offsetHeight,\n outline: \"none\",\n maxWidth: \"500px\",\n position: \"absolute\",\n display: \"block\",\n left: \"-99999px\",\n overflow: \"visible\",\n margin: \"1px\",\n });\n dragImage.slot = \"items\";\n this.tokenSelector.appendChild(dragImage);\n requestAnimationFrame(() => dragImage.remove());\n return dragImage;\n }\n}\n","import { LitElement, TemplateResult, html, CSSResult, unsafeCSS, PropertyValues, nothing } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\n\nimport \"@cas-smartdesign/lit-input\";\nimport SDInput, { IValueChangeEvent } from \"@cas-smartdesign/lit-input\";\nimport SDFieldValidationMessage, { ValidationLevel } from \"@cas-smartdesign/field-validation-message\";\nimport { ItemGenerator } from \"@cas-smartdesign/virtual-list\";\nimport { generator as itemGenerator } from \"@cas-smartdesign/list-item\";\n\nimport TokenSuggestPopover, { Filter } from \"./token-suggest-popover\";\nimport Token, { generator, TokenData } from \"./token\";\nimport ClipboardExtension from \"clipboard-extension\";\nimport style from \"./scss/token-selector.scss?inline\";\nimport DnDExtension from \"drag-and-drop-extension\";\n\nexport type { Filter as InMemoryFilter } from \"./token-suggest-popover\";\nexport type { TokenData } from \"./token\";\nexport { generator } from \"./token\";\n\nfunction debounce<T>(func: (...args: T[]) => unknown, delay: number): typeof func {\n let timeout: number;\n return function (...args: T[]) {\n if (timeout != null) {\n clearTimeout(timeout);\n }\n timeout = window.setTimeout(() => func(...args), delay);\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TokenSelector.ID]: TokenSelector;\n }\n}\n\nexport interface ITokenClickedEvent {\n index: number;\n tokenElement: Token;\n byPointerDevice: boolean;\n}\nexport interface ITokensRemovedEvent {\n removedIndices: number[];\n selectedIndices?: number[];\n}\nexport interface ITokenSelectedEvent {\n newIndices: number[];\n selectedIndices: number[];\n}\nexport interface ITokenCreatedEvent {\n value: string;\n}\n\nexport enum SelectionMode {\n RemoveOnly = \"remove-only\",\n Multi = \"multi\",\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n \"token-clicked\": CustomEvent<ITokenClickedEvent>;\n \"tokens-removed\": CustomEvent<ITokensRemovedEvent>;\n \"tokens-selected\": CustomEvent<ITokenSelectedEvent>;\n \"token-created\": CustomEvent<ITokenCreatedEvent>;\n \"auto-suggest-initialized\": CustomEvent;\n}\n\nexport default interface TokenSelector {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport type TokenGenerator = (data: TokenData, index: number) => Token;\n\nexport default class TokenSelector extends LitElement {\n public static readonly ID = \"sd-token-selector\";\n public static ensureDefined = (): void => {\n Token.ensureDefined();\n if (!customElements.get(TokenSelector.ID)) {\n customElements.define(TokenSelector.ID, TokenSelector);\n }\n };\n\n @property({ type: String, attribute: \"selection-mode\", reflect: true })\n public selectionMode: SelectionMode = SelectionMode.Multi;\n @property({ type: Array, attribute: false })\n public items: TokenData[] = [];\n @property({ type: Array, attribute: false })\n public selectedIndexes: number[] = [];\n @property({ type: String, reflect: true })\n public placeholder: string;\n @property({ type: String, reflect: true, attribute: \"suggest-list-class\" })\n public suggestListClass: string;\n @property({ type: String, reflect: true, attribute: \"input-label\" })\n public inputLabel: string;\n @property({\n converter: {\n fromAttribute: (value) => value == \"true\",\n toAttribute: (value) => value,\n },\n reflect: true,\n attribute: \"aria-disabled\",\n })\n public disabled: boolean;\n @property({ type: String, attribute: true })\n public validationMessage: string;\n @property({ type: String, attribute: true })\n public validationIconSrc: string;\n @property({ converter: SDFieldValidationMessage.levelConverter, attribute: true, reflect: true })\n public validationLevel: ValidationLevel;\n @property({ type: String, reflect: true, attribute: \"token-type\" })\n public tokenType: string;\n @property({ type: Boolean, reflect: true, attribute: \"case-sensitive\" })\n public caseSensitive: boolean;\n\n public suggestionFilter: Filter;\n\n private _tokenGenerator: TokenGenerator = generator;\n private _autoSuggestItemGenerator: ItemGenerator = itemGenerator;\n\n private additionalTokenCommittingKeys: string[] = [];\n\n private _tokenSuggestPopover: TokenSuggestPopover;\n\n private cancelSearch: boolean;\n private _activeTokenIndex = -1;\n\n static get styles(): CSSResult {\n return unsafeCSS(style);\n }\n\n static shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public get tokenGenerator(): TokenGenerator {\n return this._tokenGenerator;\n }\n\n public set tokenGenerator(value: TokenGenerator) {\n this._tokenGenerator = value;\n this.render();\n }\n\n public get autoSuggestItemGenerator(): ItemGenerator {\n return this._autoSuggestItemGenerator;\n }\n\n public set autoSuggestItemGenerator(value: ItemGenerator) {\n this._autoSuggestItemGenerator = value;\n if (this._tokenSuggestPopover) {\n this._tokenSuggestPopover.list.itemGenerator = value;\n }\n }\n\n public setAdditionalTokenCommittingKeys(keys: string[]): void {\n this.additionalTokenCommittingKeys = keys;\n }\n\n public openSuggestions(): void {\n if (this.inputElement) {\n this.focus();\n this.tokenSuggestPopover.show();\n }\n }\n\n public focus() {\n const inputEl = this.inputElement;\n if (inputEl) {\n inputEl.focus();\n } else {\n (this.shadowRoot.querySelector(\".container\") as HTMLElement).focus();\n }\n }\n\n public render(): TemplateResult {\n return this.selectionMode == SelectionMode.RemoveOnly\n ? html`<div class=\"container\" tabindex=\"${this.disabled ? -1 : 0}\">\n <slot name=\"items\"\n >${this.placeholder\n ? html`<span part=\"remove-only-placeholder\" class=\"placeholder\"\n >${this.placeholder}</span\n >`\n : nothing}</slot\n >\n </div>\n <slot class=\"additonal-content\" name=\"additional-content\" @focusin=${this.clearCheckedTokens}></slot>`\n : html`\n <sd-lit-input\n class=\"input\"\n .extendedPrefix=${true}\n .label=${this.inputLabel}\n .validationLevel=${this.validationLevel}\n .validationIconSrc=${this.validationIconSrc}\n .validationMessage=${this.validationMessage}\n .alwaysFloatLabel=${this.selectedIndexes.length > 0}\n .placeholder=${this.selectedIndexes.length == 0 ? this.placeholder : \"\"}\n .disabled=${this.disabled}\n aria-autocomplete=\"list\"\n tabindex=\"0\"\n @focus=${(e: FocusEvent) => (e.target as HTMLElement).setAttribute(\"focused\", \"\")}\n ><div class=\"token-wrapper\" slot=\"prefix\"><slot name=\"items\"></slot></div>\n </sd-lit-input>\n <slot class=\"additonal-content\" name=\"additional-content\" @focusin=${this.clearCheckedTokens}></slot>\n `;\n }\n\n protected firstUpdated(_changedProperties: Map<string | number | symbol, unknown>): void {\n super.firstUpdated(_changedProperties);\n\n this.setAttribute(\"role\", \"listbox\");\n this.setAttribute(\"aria-multiselectable\", \"true\");\n if (!this.hasAttribute(\"tabIndex\") && !this.disabled) {\n this.tabIndex = 0;\n }\n this.addEventListener(\"focusout\", (event) => {\n const target = event.relatedTarget as HTMLElement;\n if (!this.contains(target) && !this.shadowRoot.contains(target)) {\n this.clearCheckedTokens();\n }\n });\n this.addEventListener(\"focusin\", () => {\n if (\n this.selectionMode == SelectionMode.RemoveOnly &&\n this.activeTokenIndex == -1 &&\n this.items.length > 0 &&\n !this.disabled\n ) {\n this.activeTokenIndex = 0;\n }\n });\n new ClipboardExtension(\n this,\n () => this.inputElement?.value,\n (items) => this.selectOrAddItems(items),\n );\n new DnDExtension(this, (items) => this.selectOrAddItems(items));\n }\n\n private handleInputKeyDown = (event: KeyboardEvent, input: SDInput) => {\n if ((event.key === \"Enter\" || this.additionalTokenCommittingKeys.includes(event.key)) && input.value) {\n event.preventDefault();\n event.stopPropagation();\n this.commitTokenValue(input.value);\n this.inputElement.removeAttribute(\"focus-visible\");\n return;\n }\n\n switch (event.key) {\n case \"Escape\": {\n if (this.tokenSuggestPopover.isOpened) {\n event.preventDefault();\n event.stopPropagation();\n this.tokenSuggestPopover.hide();\n }\n break;\n }\n case \"Tab\": {\n this.commitTokenValue(input.value);\n this.tokenSuggestPopover.hide();\n this.inputElement.removeAttribute(\"focus-visible\");\n break;\n }\n default: {\n this.handleKeyDown(event);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowLeft\": {\n if (!this.hasInputValue) {\n this.updateActiveToken(-1);\n }\n break;\n }\n case \"ArrowRight\": {\n if (!this.hasInputValue) {\n this.updateActiveToken(1);\n }\n break;\n }\n case \"Enter\": {\n if (!this.hasInputValue && this.activeTokenIndex != -1) {\n const curEl = this.activeTokenElement;\n const withModifier = event.getModifierState(\"Control\");\n if (withModifier) {\n curEl.checked = !curEl.checked;\n } else {\n curEl.checked = true;\n }\n this.onTokenClick(curEl, false, withModifier);\n if (document.activeElement != this) {\n this.focus();\n }\n }\n break;\n }\n case \"Backspace\": {\n if (!this.hasInputValue) {\n if (this.activeTokenIndex == -1) {\n this.updateActiveToken(-1);\n } else {\n this.removeSelectionOrActiveToken();\n }\n }\n break;\n }\n case \"Clear\":\n case \"Delete\": {\n this.removeSelectionOrActiveToken();\n break;\n }\n case \"a\": {\n if (!this.hasInputValue && event.getModifierState(\"Control\")) {\n this.querySelectorAll(\"[slot='items']\").forEach((item: Token) => (item.checked = true));\n event.preventDefault();\n event.stopPropagation();\n }\n break;\n }\n }\n };\n\n /**\n *\n * Called when items were given by paste or drag events to token-selector.\n * The purpose of this function is to add or create items accordingly.\n *\n * @param {unknown[]} items the pasted or dropped items\n * @return {number[]} the indexes that were added successfully\n */\n public selectOrAddItems = (items: unknown & { caption?: string }[]): number[] => {\n const addedIndexes = [];\n const newSelectedIndexes = items\n .map((item, index) => {\n const matchingIndex = item.caption == null ? -1 : this.findIndex(item);\n if (\n matchingIndex != -1 &&\n !this.items[matchingIndex].disabled &&\n !this.selectedIndexes.includes(matchingIndex)\n ) {\n addedIndexes.push(index);\n return matchingIndex;\n }\n return -1;\n })\n .filter((i) => -1 != i);\n if (newSelectedIndexes.length > 0) {\n this.handleTokenSelection(newSelectedIndexes);\n }\n return addedIndexes;\n };\n\n private clearCheckedTokens() {\n this.querySelectorAll(\"[slot='items'][aria-checked='true']\").forEach(\n (checkedToken: Token) => (checkedToken.checked = false),\n );\n const inputEl = this.inputElement;\n if (inputEl) {\n inputEl.removeAttribute(\"focus-visible\");\n inputEl.removeAttribute(\"focused\");\n }\n }\n\n public removeSelectionOrActiveToken() {\n if (!this.disabled) {\n const checkedTokens = this.querySelectorAll(\"[slot='items'][aria-checked='true']\");\n if (checkedTokens.length > 0) {\n const tokensArray = Array.from(checkedTokens) as Token[];\n this.removeTokens(tokensArray.filter((t) => !t.disabled).map((t) => t.index));\n } else if (this.activeTokenIndex != -1) {\n const activeToken = this.activeTokenElement;\n if (activeToken && !activeToken.disabled) {\n this.removeTokens([activeToken.index]);\n }\n }\n }\n }\n\n private updateActiveToken(offset: number): void {\n if (this.disabled) {\n return;\n }\n const maxIndex = this.querySelectorAll(\"[slot='items']\").length - 1;\n if (this.activeTokenIndex == -1) {\n if (offset < 0) {\n this.activeTokenIndex = maxIndex;\n }\n } else {\n if (this.activeTokenIndex == maxIndex && offset > 0 && this.selectionMode == SelectionMode.Multi) {\n this.activeTokenIndex = -1;\n this.focus();\n } else {\n this.activeTokenIndex = Math.max(0, Math.min(maxIndex, this.activeTokenIndex + offset));\n }\n }\n if (this.activeTokenIndex > -1) {\n this.inputElement?.setAttribute(\"focus-visible\", \"\");\n if (this.scrollHeight > this.offsetHeight) {\n const activeEl = this.activeTokenElement as HTMLElement & {\n scrollIntoViewIfNeeded?: () => void;\n };\n if (activeEl.scrollIntoViewIfNeeded) {\n activeEl.scrollIntoViewIfNeeded();\n } else {\n activeEl.scrollIntoView();\n }\n }\n }\n }\n\n private commitTokenValue(tokenValue: string): void {\n if (this.disabled) {\n return;\n }\n\n // 'Commiting' supports three different cases:\n // 1. User navigates via arrow keys in the auto suggest list and selects an item with enter\n // 2. User enters a value that is already present as a token, so this token is 'selected'\n // 3. User enters a value that is new, so the token is 'created'\n\n if (this.tokenSuggestPopover.isOpened) {\n const focusedSuggestToken = this.tokenSuggestPopover.focusedSuggestToken;\n if (focusedSuggestToken) {\n if (!focusedSuggestToken.disabled) {\n const selectedTokenIndex = this.findIndex(focusedSuggestToken);\n this.handleTokenSelection([selectedTokenIndex]);\n this.tokenSuggestPopover.hide();\n }\n return;\n }\n }\n\n if (!tokenValue?.trim()) {\n return;\n }\n\n const tokenIndex = this.items.findIndex((item) =>\n this.caseSensitive ? item.caption == tokenValue : item.caption.toLowerCase() == tokenValue.toLowerCase(),\n );\n if (!this.selectedIndexes.includes(tokenIndex)) {\n if (tokenIndex >= 0) {\n this.handleTokenSelection([tokenIndex]);\n } else {\n this.handleTokenCreation(tokenValue);\n }\n }\n\n this.requestUpdate(\"selectedIndexes\");\n this.tokenSuggestPopover.hide();\n window.removeEventListener(\"pointerdown\", this.handleWindowPointerDown);\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n\n if (this._tokenSuggestPopover) {\n this.tokenSuggestPopover.list.className = this.suggestListClass || \"\";\n if (this.suggestionFilter) {\n this.tokenSuggestPopover.filter = this.suggestionFilter;\n }\n }\n\n if (changedProperties.has(\"selectionMode\")) {\n if (SelectionMode.Multi == this.selectionMode) {\n this.setAttribute(\"aria-haspopup\", \"listbox\");\n const input = this.inputElement;\n input.addEventListener(\"immediate-value-change\", (e) => this.handleInputValueChange(e));\n input.addEventListener(\"keydown\", (e) => this.handleInputKeyDown(e, input));\n window.queueMicrotask(() => this.tokenSuggestPopover); // lazy init of the popover\n } else {\n this.removeAttribute(\"aria-haspopup\");\n this.addEventListener(\"keydown\", this.handleKeyDown);\n if (this._tokenSuggestPopover) {\n this._tokenSuggestPopover.hide();\n this._tokenSuggestPopover = null;\n }\n }\n }\n\n if (\n changedProperties.size == 0 ||\n changedProperties.has(\"selectionMode\") ||\n changedProperties.has(\"items\") ||\n changedProperties.has(\"selectedIndexes\") ||\n changedProperties.has(\"disabled\")\n ) {\n this.updateItems();\n }\n if (changedProperties.has(\"inputLabel\")) {\n if (this.inputLabel) {\n this.setAttribute(\"aria-label\", this.inputLabel);\n } else {\n this.removeAttribute(\"aria-label\");\n }\n }\n }\n\n private handleInputValueChange(event: CustomEvent<IValueChangeEvent>): void {\n const userInput = event.detail.value;\n if (!userInput) {\n this.tokenSuggestPopover.hide();\n this.cancelSearch = true;\n } else {\n this.activeTokenIndex = -1;\n this.cancelSearch = false;\n this.debouncedShowTokenSuggestPopover();\n window.addEventListener(\"pointerdown\", this.handleWindowPointerDown);\n }\n }\n\n private handleWindowPointerDown = (event: PointerEvent) => {\n const input = this.inputElement;\n if (!input || !input.value) return;\n\n const pointerDownOnInputOrList = event.composedPath().some((element) => {\n if (\n element instanceof HTMLElement &&\n (event.composedPath().indexOf(input) > -1 ||\n element.getAttribute(\"popover-for\") === \"token-autosuggest-popover\")\n ) {\n return true;\n }\n });\n\n if (!pointerDownOnInputOrList) {\n this.commitTokenValue(input.value);\n }\n };\n\n private debouncedShowTokenSuggestPopover = debounce(this.showFilteredTokenSuggestions.bind(this), 200);\n private showFilteredTokenSuggestions() {\n if (!this.cancelSearch && this.inputElement.value) {\n this.tokenSuggestPopover.show();\n }\n }\n\n private isTokenNotSelected(index: number): unknown {\n return !this.selectedIndexes.includes(index);\n }\n\n private get tokenSuggestPopover(): TokenSuggestPopover {\n if (!this._tokenSuggestPopover && this.inputElement) {\n this._tokenSuggestPopover = new TokenSuggestPopover(\n this.inputElement,\n () => this.items.filter((item, index) => !item.disabled && this.isTokenNotSelected(index)),\n (selectedToken) => {\n const selectedTokenIndex = this.findIndex(selectedToken);\n this.handleTokenSelection([selectedTokenIndex]);\n window.removeEventListener(\"pointerdown\", this.handleWindowPointerDown);\n },\n (suggestPopover) => {\n this.appendChild(suggestPopover.popover);\n this.inputElement.setAttribute(\"aria-controls\", suggestPopover.list.id);\n this.dispatchEvent(new CustomEvent(\"auto-suggest-initialized\"));\n suggestPopover.popover.addEventListener(\"close\", () => {\n if (this.inputElement.value && !this.contains(document.activeElement)) {\n this.inputElement.value = \"\";\n }\n });\n },\n );\n this._tokenSuggestPopover.list.itemGenerator = this._autoSuggestItemGenerator;\n this._tokenSuggestPopover.list.className = this.suggestListClass;\n if (this.suggestionFilter) {\n this._tokenSuggestPopover.filter = this.suggestionFilter;\n }\n }\n return this._tokenSuggestPopover;\n }\n\n private updateItems(): void {\n if (!this.isConnected || !this.items) {\n return;\n }\n\n this.activeTokenIndex = -1;\n\n const input = this.inputElement;\n if (input && (!this._tokenSuggestPopover || !this._tokenSuggestPopover.isOpened)) {\n input.value = \"\";\n }\n\n this.querySelectorAll(\"[slot='items']\").forEach((oldItem) => {\n this.removeChild(oldItem);\n });\n\n const fragment = document.createDocumentFragment();\n\n let visibleTokens: TokenData[] = [];\n if (this.selectionMode == SelectionMode.RemoveOnly) {\n visibleTokens = this.items.map((item) => this.disableIfNeeded(item));\n } else {\n this.selectedIndexes.forEach((value) => {\n visibleTokens.push(this.disableIfNeeded(this.items[value]));\n });\n }\n\n visibleTokens.forEach((item) => {\n const token = this.tokenGenerator(item, this.findIndex(item));\n token.slot = \"items\";\n fragment.appendChild(token);\n if (!token.id) {\n token.id = window.crypto.getRandomValues(new Uint32Array(1))[0].toString(16);\n }\n\n token.setClickHandler((_tokenIndex, withModifier) => this.onTokenClick(token, true, withModifier));\n token.addEventListener(\"click\", () => {\n this.inputElement?.removeAttribute(\"focus-visible\");\n const selection = window.getSelection();\n if ((!selection || selection.type != \"Range\") && document.activeElement != this) {\n this.focus();\n }\n });\n token.setDeleteHandler((tokenIndex) => this.removeTokens([tokenIndex]));\n });\n\n this.appendChild(fragment);\n if (this._tokenSuggestPopover) {\n this._tokenSuggestPopover.refreshItems();\n }\n }\n\n public removeTokens(indexes: number[]): void {\n if (this.disabled || indexes == null || indexes.length == 0) {\n return;\n }\n\n if (this.activeTokenIndex != -1 && indexes.includes(this.activeTokenElement.index)) {\n this.activeTokenIndex = -1;\n }\n if (this.selectionMode == SelectionMode.RemoveOnly) {\n this.dispatchEvent(\n new CustomEvent<ITokensRemovedEvent>(\"tokens-removed\", {\n detail: {\n removedIndices: indexes,\n },\n }),\n );\n } else {\n const matchingIndexes = indexes.filter((i) => this.selectedIndexes.includes(i));\n if (matchingIndexes.length > 0) {\n this.selectedIndexes = this.selectedIndexes.filter((i) => !matchingIndexes.includes(i));\n\n this.dispatchEvent(\n new CustomEvent<ITokensRemovedEvent>(\"tokens-removed\", {\n detail: {\n removedIndices: matchingIndexes,\n selectedIndices: [...this.selectedIndexes],\n },\n }),\n );\n }\n }\n }\n\n private onTokenClick(token: Token, byPointerDevice: boolean, withModifier: boolean): void {\n let relevantIndex;\n this.querySelectorAll(\"[slot='items']\").forEach((item, i) => {\n if (token == item) {\n relevantIndex = i;\n } else if (!withModifier) {\n item.setAttribute(\"aria-checked\", \"false\");\n }\n });\n this.activeTokenIndex = relevantIndex;\n this.setAttribute(\"aria-activedescendant\", this.activeTokenElement.id);\n if (this._tokenSuggestPopover && this._tokenSuggestPopover.isOpened) {\n this._tokenSuggestPopover.hide();\n }\n if (!withModifier) {\n this.dispatchEvent(\n new CustomEvent<ITokenClickedEvent>(\"token-clicked\", {\n detail: {\n index: token.index,\n tokenElement: token,\n byPointerDevice,\n },\n }),\n );\n }\n }\n\n private disableIfNeeded(item: TokenData): TokenData {\n if (this.disabled) {\n return { ...item, disabled: true };\n }\n return item;\n }\n\n private handleTokenSelection(indexes: number[]) {\n this.selectedIndexes = this.selectedIndexes.concat(indexes);\n this.dispatchEvent(\n new CustomEvent<ITokenSelectedEvent>(\"tokens-selected\", {\n detail: {\n newIndices: indexes,\n selectedIndices: [...this.selectedIndexes],\n },\n }),\n );\n }\n\n private handleTokenCreation(tokenValue: string) {\n this.dispatchEvent(\n new CustomEvent(\"token-created\", {\n detail: {\n value: tokenValue,\n },\n }),\n );\n }\n\n private get inputElement(): SDInput | null {\n return this.shadowRoot.querySelector(\".input\") as SDInput;\n }\n\n public get activeTokenElement(): Token | null {\n return this.getTokenElement(this.activeTokenIndex);\n }\n\n private getTokenElement(index: number): Token | null {\n return this.querySelector(\"[slot='items']:nth-of-type(\" + (index + 1) + \")\");\n }\n\n public findIndex(token: TokenData) {\n return this.items.findIndex((item) => item.caption === token.caption);\n }\n\n public get activeTokenIndex(): number {\n return this._activeTokenIndex;\n }\n\n public set activeTokenIndex(value: number) {\n if (this._activeTokenIndex != -1) {\n const previous = this.activeTokenElement;\n if (previous) {\n previous.current = false;\n }\n }\n this._activeTokenIndex = value;\n if (value == -1) {\n this.removeAttribute(\"aria-activedescendant\");\n } else {\n const activeElement = this.activeTokenElement;\n activeElement.current = true;\n this.setAttribute(\"aria-activedescendant\", activeElement.id);\n }\n }\n\n private get hasInputValue() {\n return !!this.inputElement?.value;\n }\n}\n"],"names":["idCounter","TokenSuggestPopover","inputElement","notSelectedTokensProvider","tokenSelectedCallback","initializeCallback","searchTerm","allTokens","t","VirtualList","e","suggestIndex","selectedToken","event","KeyDownDelegator","_offset","toggleSelection","_a","popover","Popover","clearSvg","alwaysPresentBooleanAttributeConverter","value","_Token","LitElement","unsafeCSS","style","oldValue","changedProperties","selection","withModifier","deleteButton","html","nothing","unsafeSVG","iconBackgroundStyle","ifDefined","ImageTools","clickHandler","deleteHandler","__decorateClass","property","Token","generator","data","_index","token","RELEVANT_MIME_TYPE","ClipboardExtension","tokenSelector","getInputElementValue","pasteItems","checkedTokens","relevantIndexes","activeToken","asJson","index","asBlob","clipboardItems","clipboardItem","asText","json","DnDExtension","addMatchingItems","indexMapping","handleGlobalDrop","target","addedIndexes","i","draggedItems","customDragImage","targetToken","draggedItemsNumber","dragImage","counter","wrapper","debounce","func","delay","timeout","args","SelectionMode","_TokenSelector","itemGenerator","input","curEl","item","items","newSelectedIndexes","matchingIndex","element","keys","inputEl","_changedProperties","checkedToken","tokensArray","offset","maxIndex","activeEl","tokenValue","focusedSuggestToken","selectedTokenIndex","tokenIndex","suggestPopover","oldItem","fragment","visibleTokens","_tokenIndex","indexes","matchingIndexes","byPointerDevice","relevantIndex","previous","activeElement","SDFieldValidationMessage","TokenSelector"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cas-smartdesign/token-selector",
3
- "version": "0.21.0",
3
+ "version": "0.21.2",
4
4
  "description": "A token-selector based on LitElement",
5
5
  "main": "dist/token-selector-with-externals.js",
6
6
  "module": "dist/token-selector.mjs",
@@ -9,11 +9,11 @@
9
9
  "dependencies": {
10
10
  "lit": "^2.8.0",
11
11
  "@cas-smartdesign/element-utils": "^1.0.3",
12
- "@cas-smartdesign/virtual-list": "^6.2.3",
12
+ "@cas-smartdesign/field-validation-message": "^5.0.2",
13
13
  "@cas-smartdesign/image-tools": "^3.0.2",
14
+ "@cas-smartdesign/virtual-list": "^6.2.3",
14
15
  "@cas-smartdesign/list-item": "^7.2.3",
15
- "@cas-smartdesign/lit-input": "^7.2.0",
16
- "@cas-smartdesign/field-validation-message": "^5.0.2",
16
+ "@cas-smartdesign/lit-input": "^7.2.1",
17
17
  "@cas-smartdesign/popover": "^4.1.2",
18
18
  "@cas-smartdesign/styles": "^3.6.2"
19
19
  },
@@ -26,9 +26,9 @@
26
26
  "access": "public"
27
27
  },
28
28
  "devDependencies": {
29
- "@cas-smartdesign/license-generator": "^1.6.3",
29
+ "@cas-smartdesign/button": "^5.0.2",
30
30
  "@cas-smartdesign/element-preview": "^0.2.2",
31
- "@cas-smartdesign/button": "^5.0.2"
31
+ "@cas-smartdesign/license-generator": "^1.6.3"
32
32
  },
33
33
  "scripts": {
34
34
  "version": "pnpm version",