@zanichelli/albe-web-components 19.3.0-RC1 → 19.3.0-RC3

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.
Files changed (62) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/web-components-library.cjs.js +1 -1
  3. package/dist/cjs/z-app-header_12.cjs.entry.js +2 -3
  4. package/dist/cjs/z-app-header_12.cjs.entry.js.map +1 -1
  5. package/dist/cjs/z-combobox.cjs.entry.js +4 -4
  6. package/dist/cjs/z-combobox.cjs.entry.js.map +1 -1
  7. package/dist/cjs/z-select.cjs.entry.js +11 -11
  8. package/dist/cjs/z-select.cjs.entry.js.map +1 -1
  9. package/dist/collection/components/list/z-list-group/index.js +2 -20
  10. package/dist/collection/components/list/z-list-group/index.js.map +1 -1
  11. package/dist/collection/components/list/z-list-group/index.stories.js +3 -0
  12. package/dist/collection/components/list/z-list-group/index.stories.js.map +1 -1
  13. package/dist/collection/components/z-combobox/index.js +4 -4
  14. package/dist/collection/components/z-combobox/index.js.map +1 -1
  15. package/dist/collection/components/z-combobox/index.stories.js +2 -0
  16. package/dist/collection/components/z-combobox/index.stories.js.map +1 -1
  17. package/dist/collection/components/z-select/index.js +11 -11
  18. package/dist/collection/components/z-select/index.js.map +1 -1
  19. package/dist/components/index16.js +3 -5
  20. package/dist/components/index16.js.map +1 -1
  21. package/dist/components/z-combobox.js +4 -4
  22. package/dist/components/z-combobox.js.map +1 -1
  23. package/dist/components/z-select.js +11 -11
  24. package/dist/components/z-select.js.map +1 -1
  25. package/dist/esm/loader.js +1 -1
  26. package/dist/esm/web-components-library.js +1 -1
  27. package/dist/esm/z-app-header_12.entry.js +2 -3
  28. package/dist/esm/z-app-header_12.entry.js.map +1 -1
  29. package/dist/esm/z-combobox.entry.js +4 -4
  30. package/dist/esm/z-combobox.entry.js.map +1 -1
  31. package/dist/esm/z-select.entry.js +11 -11
  32. package/dist/esm/z-select.entry.js.map +1 -1
  33. package/dist/types/components/list/z-list-group/index.d.ts +0 -4
  34. package/dist/types/components/list/z-list-group/index.stories.d.ts +1 -0
  35. package/dist/types/components/z-combobox/index.stories.d.ts +1 -0
  36. package/dist/types/components.d.ts +0 -8
  37. package/dist/web-components-library/{p-f0022852.entry.js → p-59fac888.entry.js} +2 -2
  38. package/dist/web-components-library/p-59fac888.entry.js.map +1 -0
  39. package/dist/web-components-library/{p-102f6e37.entry.js → p-6f0a4d46.entry.js} +2 -2
  40. package/dist/web-components-library/p-6f0a4d46.entry.js.map +1 -0
  41. package/dist/web-components-library/{p-577c224d.entry.js → p-871aac16.entry.js} +2 -2
  42. package/dist/web-components-library/p-871aac16.entry.js.map +1 -0
  43. package/dist/web-components-library/web-components-library.esm.js +1 -1
  44. package/dist/web-components-library/web-components-library.esm.js.map +1 -1
  45. package/package.json +1 -1
  46. package/www/build/{p-f0022852.entry.js → p-59fac888.entry.js} +2 -2
  47. package/www/build/p-59fac888.entry.js.map +1 -0
  48. package/www/build/{p-102f6e37.entry.js → p-6f0a4d46.entry.js} +2 -2
  49. package/www/build/p-6f0a4d46.entry.js.map +1 -0
  50. package/www/build/{p-577c224d.entry.js → p-871aac16.entry.js} +2 -2
  51. package/www/build/p-871aac16.entry.js.map +1 -0
  52. package/www/build/p-ce0af1f4.js +2 -0
  53. package/www/build/web-components-library.esm.js +1 -1
  54. package/www/build/web-components-library.esm.js.map +1 -1
  55. package/www/index.html +1 -1
  56. package/dist/web-components-library/p-102f6e37.entry.js.map +0 -1
  57. package/dist/web-components-library/p-577c224d.entry.js.map +0 -1
  58. package/dist/web-components-library/p-f0022852.entry.js.map +0 -1
  59. package/www/build/p-102f6e37.entry.js.map +0 -1
  60. package/www/build/p-577c224d.entry.js.map +0 -1
  61. package/www/build/p-8a9e2264.js +0 -2
  62. package/www/build/p-f0022852.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["stylesCss","ZSelectStyle0","ZSelect","constructor","hostRef","this","itemsList","randomId","ControlSize","BIG","toggleSelectUl","bind","handleSelectFocus","watchItems","getInitialItemsArray","selectedItem","findSelectedItem","getSelectedItem","getValue","getSelectedValue","setValue","value","values","push","length","updateSelection","emitOptionSelect","optionSelect","emit","id","htmlid","selected","emitResetSelect","resetSelect","componentWillLoad","componentWillRender","filterItems","searchString","items","JSON","parse","mapSelectedItemToItemsArray","initialItemsList","_a","getOptionId","item","getResetOptionId","getItemIdFromOptionId","optionId","replace","getGroupedItems","Object","entries","reduce","group","category","prevList","map","assign","name","getPlainText","hasTreeItems","filterTree","filter","toUpperCase","includes","getHighlightedText","matchingParent","match","newItem","children","showChildrenOfMatchingParent","text","search","upperText","upperSearch","start","indexOf","end","substring","hasAutocomplete","boolean","autocomplete","handleInputChange","e","detail","isOpen","selectedId","forEach","found","selectItem","disabled","handleResetClick","focusedItemId","handleInputKeyDown","code","KeyboardCode","ENTER","SPACE","itemId","find","ARROW_DOWN","ARROW_UP","arrowsSelectNav","arrows","key","preventDefault","stopPropagation","currElem","host","querySelector","options","Array","from","querySelectorAll","currElemIndex","firstElemIndex","lastElemIndex","focusSelectItem","nextElem","elem","scrollIntoView","block","selfFocusOnClose","readonly","document","addEventListener","removeEventListener","focus","handleInputClick","target","closest","KeyboardEvent","ESC","TAB","clickedElement","getClickedElement","hasAttribute","getElementTree","nodeName","toLowerCase","zSelect","scrollToLetter","letter","foundItem","charAt","renderInput","h","class","placeholder","label","ariaLabel","icon","hasclearicon","message","status","undefined","size","role","onClick","onKeyDown","onInputChange","onKeyPress","renderSelectUl","fixed","isfixed","tabindex","listSizeType","resetItem","renderResetItem","renderSelectUlItems","hidden","hide","hasGroupItems","clickable","dividerType","ListDividerType","ELEMENT","ListSize","MEDIUM","onClickItem","active","renderItem","lastItem","HEADER","innerHTML","NONE","SMALL","X_SMALL","renderNoSearchResults","renderGroupedTree","renderSelectGroupItems","index","array","isLastItem","parentHasSiblings","renderTreeItems","isLastChild","isTopLevel","disabledAncestor","isDisabled","hasDivider","_b","title","child","arr","groupedItems","some","groupItems","ariaLabelledby","slot","i","style","zIndex","height","isLastGroup","subindex","noresultslabel","renderMessage","render"],"sources":["src/components/z-select/styles.css?tag=z-select&encapsulation=scoped","src/components/z-select/index.tsx"],"sourcesContent":[":host {\n display: inline-block;\n width: inherit;\n color: var(--color-form-default-text);\n font-family: var(--font-family-sans);\n font-size: var(--font-size-3);\n font-weight: var(--font-rg);\n}\n\n:host([size=\"small\"]),\n:host([size=\"x-small\"]) {\n font-size: var(--font-size-2);\n}\n\n.select-wrapper > z-input {\n width: 100%;\n}\n\n.select-wrapper > z-input .input-icon {\n cursor: pointer;\n}\n\n.select-wrapper > div {\n position: relative;\n}\n\n.select-wrapper > div.closed {\n overflow: hidden;\n height: 0;\n}\n\n.select-wrapper .ul-scroll-wrapper {\n position: absolute;\n width: 100%;\n box-sizing: border-box;\n border-top: none;\n background: var(--color-form-background);\n box-shadow: var(--shadow-2);\n outline: none;\n}\n\n.select-wrapper .closed .ul-scroll-wrapper {\n z-index: 10;\n}\n\n.select-wrapper .open .ul-scroll-wrapper {\n z-index: 20;\n}\n\n.select-wrapper .ul-scroll-wrapper.fixed {\n position: static;\n}\n\n.select-wrapper z-list {\n --background-color-list-element: var(--color-form-background);\n --background-hover-color-list-element: var(--color-surface02);\n --background-active-color-list-element: var(--color-surface02);\n}\n\n.select-wrapper .ul-scroll-wrapper > z-list {\n position: relative;\n overflow: auto;\n max-height: 240px;\n padding: var(--space-unit) calc(var(--space-unit) * 1.5);\n margin: 0;\n outline: none;\n}\n\n.select-wrapper .ul-scroll-wrapper z-list z-list-element[disabled] {\n color: var(--color-form-disabled03);\n}\n\n.select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container {\n display: flex;\n align-items: center;\n padding: calc(var(--space-unit) / 2) var(--space-unit);\n column-gap: var(--space-unit);\n}\n\n.select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container.active {\n box-shadow: var(--shadow-focus-primary);\n}\n\n.select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container .list-element-content {\n margin-right: auto;\n}\n\n.select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container > z-icon + .list-element-content {\n padding: calc(var(--space-unit) * 0.5) var(--space-unit);\n}\n\n:host([size=\"x-small\"])\n .select-wrapper\n .ul-scroll-wrapper\n z-list\n z-list-element\n .list-element-container\n .list-element-content {\n padding: 0;\n}\n\n:host([size=\"small\"]) .select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container > z-icon {\n --z-icon-width: 16px;\n --z-icon-height: 16px;\n}\n\n:host([size=\"x-small\"]) .select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container > z-icon {\n --z-icon-width: 14px;\n --z-icon-height: 14px;\n}\n\n:host([size=\"x-small\"])\n .select-wrapper\n .ul-scroll-wrapper\n z-list\n z-list-element\n .list-element-container\n > z-icon\n + .list-element-content {\n padding: 0 var(--space-unit);\n}\n\n.select-wrapper .ul-scroll-wrapper z-list z-list-element .list-element-container .list-element-content.selected {\n font-weight: var(--font-sb);\n}\n\n.select-wrapper .ul-scroll-wrapper .no-results z-icon {\n margin-right: var(--space-unit);\n}\n\n.z-list-group-title {\n color: var(--color-form-default-text);\n}\n\n.reset-item {\n color: var(--color-form-active-primary);\n fill: var(--color-form-active-primary);\n}\n\n.reset-item-content {\n display: flex;\n align-items: center;\n}\n\n.reset-item .reset-item-content.active {\n box-shadow: var(--shadow-focus-primary);\n}\n\n.reset-item.reset-item-margin .reset-item-content {\n margin-left: var(--space-unit);\n}\n\n.reset-item .reset-item-content > z-icon {\n margin-right: var(--space-unit);\n}\n\n.reset-item.hide {\n display: none;\n}\n\n.tree-list-reset-item {\n padding: var(--space-unit) 0;\n}\n\nz-list-element {\n position: relative;\n display: block;\n}\n\nz-list z-list-element::before {\n position: absolute;\n z-index: 100;\n top: 3px;\n left: -8px;\n width: 8px;\n height: 1em;\n border-bottom: 1px solid var(--color-form-disabled01-icon);\n border-left: 1px solid var(--color-form-disabled01-icon);\n content: \"\";\n cursor: pointer;\n}\n\nz-list z-list-element::after {\n position: absolute;\n z-index: 100;\n top: 5px;\n left: -8px;\n width: 8px;\n height: 100%;\n border-left: 1px solid var(--color-form-disabled01-icon);\n content: \"\";\n cursor: pointer;\n}\n\nz-list z-list-element:last-child::after {\n display: none;\n}\n\nz-list > z-list-element::before,\nz-list > z-list-element::after,\nz-list > z-list-group > z-list-element::before,\nz-list > z-list-group > z-list-element::after {\n display: none;\n}\n\nz-list > div.children-node {\n padding-left: calc(var(--space-unit) * 2);\n}\n\nz-list-element > .list-element {\n display: flex;\n justify-content: space-between;\n padding: calc(var(--space-unit) * 1.5) var(--space-unit);\n cursor: pointer;\n}\n\nz-list-element > .list-element.active {\n box-shadow: var(--shadow-focus-primary);\n}\n\nz-list-element:not([disabled]) > .list-element:hover,\nz-list-element:not([disabled]) > .list-element:hover::after {\n background-color: var(--background-hover-color-list-element, var(--color-background));\n}\n\nz-list-element > .list-element .item.ellipsis {\n overflow: hidden;\n}\n\nz-list-element .list-element::after {\n position: absolute;\n top: 0;\n right: -1px;\n display: block;\n width: 100%;\n height: 45px;\n content: \"\";\n transform: translateX(-100%);\n}\n\nz-list-element.tree-search-item {\n padding-top: 0;\n}\n\nz-list-element.tree-search-item .list-element::after {\n position: absolute;\n right: -25px;\n display: block;\n width: 100%;\n height: 45px;\n content: \"\";\n transform: translateX(-100%);\n}\n\nz-list-element.grouped-tree-parent-node .list-element::after {\n position: absolute;\n right: -25px;\n display: block;\n width: 100%;\n height: 45px;\n content: \"\";\n transform: translateX(-100%);\n}\n\n.item-label.selected {\n font-weight: bold;\n}\n\n.item.ellipsis {\n display: inline-block;\n overflow: hidden;\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nz-list > z-list-element.grouped-tree-parent-node > .list-element:hover::after,\nz-list-element.tree-search-item .list-element:hover::after,\nz-list > z-list-group > z-list-element.grouped-tree-parent-node > .list-element:hover::after {\n position: absolute;\n z-index: -1;\n right: -18px;\n display: block;\n width: 100%;\n height: 45px;\n content: \"\";\n transform: translateX(-100%);\n}\n\nz-list-element > .list-element:hover::after {\n position: absolute;\n z-index: -1;\n top: 0;\n right: 0;\n display: block;\n width: 100%;\n height: 45px;\n content: \"\";\n transform: translateX(-100%);\n}\n\n.children-node z-list-element::before,\n.children-node z-list-element::after {\n left: -8px;\n}\n\n.children-node .children-node z-list-element::before,\n.children-node .children-node z-list-element::after {\n left: -8px;\n}\n\n.children-node > z-list-element {\n padding: 0;\n}\n","import {Component, Element, Event, EventEmitter, Method, Prop, State, Watch, h} from \"@stencil/core\";\nimport {ControlSize, InputStatus, KeyboardCode, ListDividerType, ListSize, SelectItem} from \"../../beans\";\nimport {boolean, getClickedElement, getElementTree, getPlainText, randomId} from \"../../utils/utils\";\n\n@Component({\n tag: \"z-select\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZSelect {\n @Element() host: HTMLZSelectElement;\n\n /** the id of the input element */\n @Prop()\n htmlid = `id-${randomId()}`;\n\n /** the input select options */\n @Prop()\n items: SelectItem[] | string = [];\n\n /** the input name */\n @Prop()\n name?: string;\n\n /** the input label */\n @Prop()\n label?: string;\n\n /** the input aria-label */\n @Prop()\n ariaLabel = \"\";\n\n /** the input is disabled */\n @Prop()\n disabled?: boolean = false;\n\n /** the input is readonly */\n @Prop()\n readonly?: boolean = false;\n\n /** the input placeholder (optional) */\n @Prop()\n placeholder?: string;\n\n /** the input html title (optional) */\n @Prop()\n htmltitle?: string;\n\n /** the input status (optional) */\n @Prop()\n status?: InputStatus;\n\n /** input helper message (optional) - if set to `false` message won't be displayed */\n @Prop()\n message?: string | boolean = true;\n\n /** the input has autocomplete option */\n @Prop()\n autocomplete?: boolean = false;\n\n /** no result text message */\n @Prop()\n noresultslabel?: string = \"Nessun risultato\";\n\n /** */\n @Prop()\n hasGroupItems?: boolean;\n\n /** */\n @Prop()\n hasTreeItems?: boolean;\n\n /** If true and an item matches the search string, children of matching item are shown even if they don't match the search string */\n @Prop()\n showChildrenOfMatchingParent?: boolean;\n\n /** When fixed, it occupies space and pushes down next elements. */\n @Prop()\n isfixed?: boolean = false;\n\n /** */\n @Prop()\n resetItem?: string;\n\n /** Available sizes: `big`, `small` and `x-small`. Defaults to `big`. */\n @Prop()\n size?: ControlSize = ControlSize.BIG;\n\n @State()\n isOpen = false;\n\n @State()\n selectedItem: null | SelectItem = null;\n\n @State()\n focusedItemId: string;\n\n @State()\n searchString: null | string;\n\n private itemsList: SelectItem[] = [];\n\n constructor() {\n this.toggleSelectUl = this.toggleSelectUl.bind(this);\n this.handleSelectFocus = this.handleSelectFocus.bind(this);\n }\n\n @Watch(\"items\")\n watchItems(): void {\n this.itemsList = this.getInitialItemsArray();\n\n this.selectedItem = this.findSelectedItem(this.itemsList);\n }\n\n /** get the input selected options */\n @Method()\n async getSelectedItem(): Promise<SelectItem> {\n return this.selectedItem;\n }\n\n /** get the input value */\n @Method()\n async getValue(): Promise<string> {\n return this.getSelectedValue();\n }\n\n /** set the input value */\n @Method()\n async setValue(value: string | string[]): Promise<void> {\n let values: string[] = [];\n if (typeof value === \"string\") {\n values.push(value);\n } else {\n values = value;\n }\n\n this.itemsList = this.getInitialItemsArray();\n if (values.length) {\n this.updateSelection(this.itemsList, values[0]);\n }\n this.selectedItem = this.findSelectedItem(this.itemsList);\n }\n\n /** Emitted on select option selection, returns select id, selected item id */\n @Event()\n optionSelect: EventEmitter;\n\n private emitOptionSelect(): void {\n this.optionSelect.emit({\n id: this.htmlid,\n selected: this.getSelectedValue(),\n });\n }\n\n /** Emitted on reset selected item, returns select id, selected item id */\n @Event()\n resetSelect: EventEmitter;\n\n private emitResetSelect(): void {\n this.resetSelect.emit({\n id: this.htmlid,\n });\n }\n\n componentWillLoad(): void {\n this.watchItems();\n }\n\n componentWillRender(): void {\n this.filterItems(this.searchString);\n }\n\n private getInitialItemsArray(): SelectItem[] {\n return typeof this.items === \"string\" ? JSON.parse(this.items) : this.items;\n }\n\n private mapSelectedItemToItemsArray(): SelectItem[] {\n const initialItemsList = this.getInitialItemsArray();\n\n this.updateSelection(initialItemsList, this.selectedItem?.id);\n\n return initialItemsList;\n }\n\n private getSelectedValue(): string {\n return this.selectedItem?.id;\n }\n\n private getOptionId(item: SelectItem): string {\n return `${this.htmlid}_key_${item.id}`;\n }\n\n private getResetOptionId(): string {\n return `${this.htmlid}_key_reset`;\n }\n\n private getItemIdFromOptionId(optionId: string): string {\n return optionId.replace(`${this.htmlid}_key_`, ``);\n }\n\n private getGroupedItems(): [string, SelectItem[]][] {\n if (!this.itemsList.length) {\n return [];\n }\n\n return Object.entries(\n this.itemsList.reduce(\n (group, item) => {\n const category = item.category || \"Altra categoria\";\n group[category] = group[category] || [];\n group[category].push(item);\n\n return group;\n },\n {} as Record<string, SelectItem[]>\n )\n );\n }\n\n private filterItems(searchString: string): void {\n let prevList = this.mapSelectedItemToItemsArray();\n\n if (!searchString?.length) {\n this.itemsList = prevList;\n\n return;\n }\n\n prevList = prevList.map((item) => ({...item, name: getPlainText(item.name)}));\n\n if (this.hasTreeItems) {\n this.itemsList = this.filterTree(prevList, searchString, false);\n } else {\n this.itemsList = prevList\n .filter((item: SelectItem) => item.name.toUpperCase().includes(searchString.toUpperCase()))\n .map((item: SelectItem) => {\n item.name = this.getHighlightedText(item.name, searchString);\n\n return item;\n });\n }\n }\n\n private filterTree(items: SelectItem[], searchString: string, matchingParent: boolean): SelectItem[] {\n if (!items) {\n return [];\n }\n\n return items\n .map((item) => {\n const match = item.name.toUpperCase().includes(searchString.toUpperCase());\n\n const newItem: SelectItem = {...item};\n if (newItem.children && newItem.children.length > 0) {\n newItem.children = this.filterTree(\n newItem.children.map((item) => ({...item, name: getPlainText(item.name)})),\n searchString,\n match\n );\n }\n\n if (match) {\n newItem.name = this.getHighlightedText(newItem.name, searchString);\n }\n if (\n match ||\n (newItem.children && newItem.children.length > 0) ||\n (this.showChildrenOfMatchingParent && matchingParent)\n ) {\n return newItem;\n }\n\n return null;\n })\n .filter((item) => item !== null) as SelectItem[];\n }\n\n private getHighlightedText(text: string, search: string): string {\n const upperText = text.toUpperCase();\n const upperSearch = search.toUpperCase();\n const start = upperText.indexOf(upperSearch);\n\n if (start === -1) {\n return text;\n }\n\n const end = start + search.length;\n\n return text.substring(0, start) + `<strong>${text.substring(start, end)}</strong>` + text.substring(end);\n }\n\n private hasAutocomplete(): boolean {\n return boolean(this.autocomplete) === true;\n }\n\n private handleInputChange(e: CustomEvent): void {\n this.searchString = e.detail.value;\n if (!this.isOpen) {\n this.toggleSelectUl();\n }\n }\n\n private updateSelection(items: SelectItem[], selectedId: string): void {\n if (items) {\n items.forEach((item) => {\n item.selected = item.id === selectedId;\n if (item.children && item.children.length > 0) {\n this.updateSelection(item.children, selectedId);\n }\n });\n }\n }\n\n private findSelectedItem(items: SelectItem[]): SelectItem | null {\n if (items) {\n for (const item of items) {\n if (item.selected) {\n return item;\n }\n if (item.children && item.children.length > 0) {\n const found = this.findSelectedItem(item.children);\n if (found) {\n return found;\n }\n }\n }\n }\n\n return null;\n }\n\n private selectItem(selected: null | SelectItem): void {\n if (selected?.disabled) {\n return;\n }\n\n this.itemsList = this.getInitialItemsArray();\n\n if (selected) {\n this.updateSelection(this.itemsList, selected.id);\n }\n\n this.selectedItem = this.findSelectedItem(this.itemsList);\n this.emitOptionSelect();\n this.toggleSelectUl();\n if (this.searchString) {\n this.searchString = null;\n }\n }\n\n private handleResetClick(): void {\n this.selectedItem = null;\n this.searchString = null;\n this.focusedItemId = \"\";\n this.emitResetSelect();\n this.toggleSelectUl();\n }\n\n private handleInputKeyDown(e: KeyboardEvent): void {\n switch (e.code as KeyboardCode) {\n case KeyboardCode.ENTER:\n case KeyboardCode.SPACE:\n if (this.focusedItemId) {\n if (this.focusedItemId === this.getResetOptionId()) {\n this.handleResetClick();\n } else {\n const itemId = this.getItemIdFromOptionId(this.focusedItemId);\n const item = this.itemsList.find((e) => e.id === itemId) || null;\n if (item) {\n this.selectedItem = item;\n this.emitOptionSelect();\n this.toggleSelectUl();\n }\n }\n }\n break;\n case KeyboardCode.ARROW_DOWN:\n case KeyboardCode.ARROW_UP:\n this.arrowsSelectNav(e);\n break;\n }\n }\n\n private arrowsSelectNav(e: KeyboardEvent): void {\n const arrows = [KeyboardCode.ARROW_DOWN, KeyboardCode.ARROW_UP];\n\n if (!arrows.includes(e.key as KeyboardCode)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const currElem = this.focusedItemId ? this.host.querySelector(`#${this.focusedItemId}`) : null;\n const options = Array.from(this.host.querySelectorAll('[role=\"option\"]'));\n\n if (!options.length) {\n return;\n }\n\n const currElemIndex = currElem ? options.indexOf(currElem) : null;\n const firstElemIndex = 0;\n const lastElemIndex = options.length - 1;\n\n if (!this.isOpen) {\n this.toggleSelectUl();\n\n if (this.selectedItem) {\n this.focusSelectItem(this.getOptionId(this.selectedItem));\n\n return;\n }\n }\n\n let nextElem = null;\n if (e.code === KeyboardCode.ARROW_DOWN) {\n nextElem =\n currElemIndex === null ? options[firstElemIndex] : options[currElemIndex + 1] || options[lastElemIndex];\n } else if (e.code === KeyboardCode.ARROW_UP) {\n nextElem =\n currElemIndex === null ? options[lastElemIndex] : options[currElemIndex - 1] || options[firstElemIndex];\n }\n\n this.focusSelectItem(nextElem.id);\n }\n\n private focusSelectItem(optionId: string): void {\n this.focusedItemId = optionId;\n const elem = this.host.querySelector(`#${optionId}`) as HTMLElement;\n elem.scrollIntoView({block: \"center\"});\n }\n\n private toggleSelectUl(selfFocusOnClose = false): void {\n if (this.disabled || this.readonly) {\n return;\n }\n\n if (!this.isOpen) {\n document.addEventListener(\"click\", this.handleSelectFocus);\n document.addEventListener(\"keyup\", this.handleSelectFocus);\n } else {\n document.removeEventListener(\"click\", this.handleSelectFocus);\n document.removeEventListener(\"keyup\", this.handleSelectFocus);\n if (selfFocusOnClose) {\n (this.host.querySelector(`#${this.htmlid}_select_input`) as HTMLInputElement)?.focus();\n }\n\n if (this.selectedItem && this.searchString) {\n this.searchString = null;\n this.filterItems(this.searchString);\n }\n }\n\n this.focusedItemId = \"\";\n this.isOpen = !this.isOpen;\n }\n\n private handleInputClick(e: MouseEvent | KeyboardEvent): void {\n if ((e.target as HTMLElement).closest(\".reset-icon\")) {\n e.stopPropagation();\n\n return;\n }\n\n this.toggleSelectUl();\n }\n\n private handleSelectFocus(e: MouseEvent | KeyboardEvent): void {\n if (e instanceof KeyboardEvent && e.key === KeyboardCode.ESC) {\n e.stopPropagation();\n\n return this.toggleSelectUl(true);\n }\n\n if (e instanceof KeyboardEvent && e.key !== KeyboardCode.TAB) {\n return;\n }\n\n const clickedElement = getClickedElement();\n if (clickedElement?.hasAttribute(\"disabled\")) {\n return;\n }\n\n if (\n !getElementTree(clickedElement).find(\n (elem: HTMLElement) => elem.nodeName.toLowerCase() === \"z-input\" && elem.id === `${this.htmlid}_input`\n )\n ) {\n const zSelect = getElementTree(clickedElement).find((e) => e.nodeName === \"Z-SELECT\");\n this.toggleSelectUl(zSelect === this.host);\n }\n }\n\n private scrollToLetter(letter: string): void {\n if (!this.itemsList.length) {\n return;\n }\n\n const foundItem = this.itemsList.find(\n (item: SelectItem) => item.name.toLowerCase().charAt(0) === letter.toLowerCase()\n );\n if (foundItem) {\n if (!this.isOpen) {\n this.toggleSelectUl();\n }\n this.focusSelectItem(this.getOptionId(foundItem));\n }\n }\n\n private renderInput(): HTMLElement[] {\n let value = null;\n if (!this.isOpen && this.selectedItem) {\n value = this.selectedItem.name.replace(/<[^>]+>/g, \"\");\n }\n if (this.isOpen && this.searchString) {\n value = this.searchString;\n }\n\n return [\n <z-input\n class={{\n \"active-select\": this.isOpen,\n \"cursor-select\": !this.autocomplete,\n }}\n id={`${this.htmlid}_input`}\n htmlid={`${this.htmlid}_select_input`}\n placeholder={this.placeholder}\n value={value}\n label={this.label}\n autocomplete=\"off\"\n aria-label={this.ariaLabel}\n icon={this.isOpen ? \"caret-up\" : \"caret-down\"}\n hasclearicon={false}\n message={false}\n name={this.name}\n disabled={this.disabled}\n readonly={this.readonly || (!this.hasAutocomplete() && this.isOpen)}\n status={this.isOpen ? undefined : this.status}\n size={this.size}\n role=\"combobox\"\n html-aria-expanded={this.isOpen ? \"true\" : \"false\"}\n html-aria-controls={`${this.htmlid}_list`}\n html-aria-activedescendant={this.isOpen ? this.focusedItemId : \"\"}\n html-aria-autocomplete={this.hasAutocomplete() ? \"list\" : undefined}\n onClick={(e: MouseEvent) => this.handleInputClick(e)}\n onKeyDown={(e: KeyboardEvent) => this.handleInputKeyDown(e)}\n onInputChange={(e: CustomEvent) => this.handleInputChange(e)}\n onKeyPress={(e: KeyboardEvent) => {\n if (!this.hasAutocomplete()) {\n e.preventDefault();\n this.scrollToLetter(e.key);\n }\n }}\n />,\n ];\n }\n\n private renderSelectUl(): HTMLDivElement {\n return (\n <div class={this.isOpen ? \"open\" : \"closed\"}>\n <div\n class={{\n \"ul-scroll-wrapper\": true,\n \"fixed\": this.isfixed,\n }}\n >\n <z-list\n role=\"listbox\"\n aria-label={this.ariaLabel || this.label}\n tabindex={this.disabled || this.readonly || !this.isOpen ? -1 : 0}\n id={`${this.htmlid}_list`}\n aria-multiselectable={false}\n size={this.listSizeType()}\n class={{\n \"disabled\": this.disabled,\n \"readonly\": this.readonly,\n [`input-${this.status}`]: !this.isOpen && !!this.status,\n \"z-scrollbar\": true,\n }}\n >\n {this.resetItem && this.renderResetItem()}\n {this.renderSelectUlItems()}\n </z-list>\n </div>\n </div>\n );\n }\n\n private renderResetItem(): HTMLZListElementElement {\n const hidden = !this.selectedItem || !this.resetItem;\n\n return (\n <z-list-element\n class={{\n \"hide\": hidden,\n \"reset-item\": true,\n \"reset-item-margin\": !this.hasGroupItems,\n }}\n clickable={true}\n disabled={false}\n dividerType={ListDividerType.ELEMENT}\n role={hidden ? \"presentation\" : \"option\"}\n html-tabindex={0}\n aria-selected=\"false\"\n id={this.getResetOptionId()}\n size={this.hasTreeItems ? ListSize.MEDIUM : this.listSizeType()}\n onClickItem={() => this.handleResetClick()}\n >\n <div\n class={{\n \"reset-item-content\": true,\n \"tree-list-reset-item\": this.hasTreeItems,\n \"active\": this.focusedItemId === this.getResetOptionId(),\n }}\n >\n <z-icon name=\"multiply-circled\" />\n <span>{this.resetItem}</span>\n </div>\n </z-list-element>\n );\n }\n\n private renderItem(item: SelectItem, lastItem: boolean): HTMLZListElementElement {\n return (\n <z-list-element\n clickable={!item.disabled}\n disabled={item.disabled}\n dividerType={lastItem ? ListDividerType.HEADER : ListDividerType.ELEMENT}\n role={item.disabled ? \"presentation\" : \"option\"}\n html-tabindex={-1}\n aria-selected={item.selected ? \"true\" : \"false\"}\n id={this.getOptionId(item)}\n size={this.listSizeType()}\n onClickItem={() => this.selectItem(item)}\n >\n <div\n class={{\n \"list-element-container\": true,\n \"active\": this.focusedItemId === this.getOptionId(item),\n }}\n >\n <div\n class={{\n \"selected\": !!item.selected,\n \"list-element-content\": true,\n }}\n innerHTML={item.name}\n />\n {item.icon && <z-tag icon={item.icon}></z-tag>}\n </div>\n </z-list-element>\n );\n }\n\n private listSizeType(): ListSize {\n if (this.hasTreeItems) {\n return ListSize.NONE;\n }\n\n if (this.size === ControlSize.SMALL || this.size === ControlSize.X_SMALL) {\n return ListSize.SMALL;\n }\n\n return ListSize.MEDIUM;\n }\n\n private renderSelectUlItems():\n | HTMLZListElementElement\n | (HTMLZListElementElement | HTMLZListElementElement[])[]\n | HTMLZListGroupElement[] {\n if (!this.itemsList.length) {\n return this.renderNoSearchResults();\n }\n\n if (this.hasGroupItems) {\n if (this.hasTreeItems) {\n return this.renderGroupedTree();\n }\n\n return this.renderSelectGroupItems();\n }\n\n return this.itemsList.map((item: SelectItem, index, array) => {\n const isLastItem = index === array.length - 1;\n const parentHasSiblings = array.length > 1;\n\n if (this.hasTreeItems) {\n return this.renderTreeItems(item, isLastItem, parentHasSiblings, true, item.disabled);\n }\n\n return this.renderItem(item, isLastItem);\n });\n }\n\n private renderTreeItems(\n item: SelectItem,\n isLastChild: boolean,\n parentHasSiblings: boolean,\n isTopLevel?: boolean,\n disabledAncestor?: boolean\n ): HTMLZListElementElement[] {\n const isDisabled = item.disabled || disabledAncestor;\n\n const hasDivider = this.hasGroupItems\n ? undefined\n : this.hasGroupItems\n ? isLastChild && !parentHasSiblings\n ? ListDividerType.ELEMENT\n : undefined\n : isTopLevel && parentHasSiblings && !isLastChild\n ? ListDividerType.ELEMENT\n : undefined;\n\n return (\n <z-list-element\n clickable={!item.disabled}\n disabled={isDisabled}\n class={{\n \"grouped-tree-parent-node\": this.hasGroupItems && !!item.children?.length,\n \"tree-search-item\": this.hasGroupItems && isTopLevel && !item.children?.length && !!this.searchString,\n }}\n size={this.listSizeType()}\n dividerType={hasDivider}\n hasTreeItems={this.hasTreeItems}\n html-tabindex={null}\n role=\"presentation\"\n >\n <div\n id={this.getOptionId(item)}\n role={isDisabled ? \"presentation\" : \"option\"}\n class={{\"list-element\": true, \"active\": this.focusedItemId === this.getOptionId(item)}}\n onClick={() => this.selectItem(item)}\n >\n <span class=\"item ellipsis\">\n <span\n class={{\n \"item-label\": true,\n \"selected\": !!item.selected,\n }}\n title={item.name}\n innerHTML={item.name}\n />\n </span>\n {item.icon && <z-tag icon={item.icon}></z-tag>}\n </div>\n {item.children && item.children.length > 0 ? (\n <z-list role=\"presentation\">\n <div class=\"children-node\">\n {item.children.map((child, index, arr) =>\n this.renderTreeItems(\n child,\n index === arr.length - 1,\n arr.length > 1,\n false, // isTopLevel = false for children\n isDisabled\n )\n )}\n </div>\n </z-list>\n ) : null}\n </z-list-element>\n );\n }\n\n private renderGroupedTree(): HTMLZListGroupElement[] {\n const groupedItems = this.getGroupedItems();\n\n return groupedItems.map(([category, items], index, entries) => {\n const parentHasSiblings = Object.values(groupedItems).some((groupItems) => groupItems.length > 1);\n\n return (\n <z-list-group\n divider-type={index === entries.length - 1 ? undefined : ListDividerType.ELEMENT}\n hasTreeItems={true}\n ariaLabelledby={`${this.htmlid}_tree_${index}`}\n >\n <span\n class=\"body-3-sb z-list-group-title\"\n slot=\"header-title\"\n id={`${this.htmlid}_tree_${index}`}\n aria-hidden=\"true\"\n >\n {category}\n </span>\n <z-list role=\"presentation\">\n {items.map((item, i, arr) => [\n this.renderTreeItems(item, i === arr.length - 1, parentHasSiblings, true, item.disabled),\n i < arr.length - 1 ? (\n <z-divider\n key={`divider-${i}`}\n style={{zIndex: \"100\", height: \"var(--border-size-small)\"}}\n />\n ) : null,\n ])}\n </z-list>\n {index !== entries.length - 1 && <z-divider style={{zIndex: \"100\", height: \"var(--border-size-small)\"}} />}\n </z-list-group>\n );\n });\n }\n\n private renderSelectGroupItems(): HTMLZListElementElement[] {\n const groupedItems = this.getGroupedItems();\n\n return groupedItems.map(([key, items], index) => {\n const isLastGroup = groupedItems.length === index + 1;\n\n return (\n <z-list-group\n divider-type={ListDividerType.ELEMENT}\n ariaLabelledby={`${this.htmlid}_group_${index}`}\n >\n <span\n class=\"body-3-sb z-list-group-title\"\n slot=\"header-title\"\n id={`${this.htmlid}_group_${index}`}\n aria-hidden=\"true\"\n >\n {key}\n </span>\n {items.map((item, subindex) => {\n const isLastItem = items.length === subindex + 1;\n\n return this.renderItem(item, isLastGroup && isLastItem);\n })}\n </z-list-group>\n );\n });\n }\n\n private renderNoSearchResults(): HTMLZListElementElement {\n return (\n <z-list-element\n class=\"no-results\"\n size={this.hasTreeItems ? ListSize.MEDIUM : this.listSizeType()}\n html-tabindex={null}\n role=\"presentation\"\n >\n {this.noresultslabel}\n </z-list-element>\n );\n }\n\n private renderMessage(): HTMLZInputMessageElement {\n if (boolean(this.message) === false) {\n return;\n }\n\n return (\n <z-input-message\n message={boolean(this.message) === true ? undefined : (this.message as string)}\n status={this.status}\n class={this.size}\n disabled={this.disabled}\n />\n );\n }\n\n render(): HTMLDivElement {\n return (\n <div class=\"select-wrapper\">\n {this.renderInput()}\n {this.renderSelectUl()}\n {this.renderMessage()}\n </div>\n );\n }\n}\n"],"mappings":"0MAAA,MAAMA,EAAY,omPAClB,MAAAC,EAAeD,E,MCSFE,EAAO,MA6FlB,WAAAC,CAAAC,G,8FAFQC,KAAAC,UAA0B,G,YAtFzB,MAAMC,M,WAIgB,G,wDAYnB,G,cAIS,M,cAIA,M,uFAgBQ,K,kBAIJ,M,oBAIC,mB,kHAgBN,M,mCAQCC,EAAYC,I,YAGxB,M,kBAGyB,K,yDAWhCJ,KAAKK,eAAiBL,KAAKK,eAAeC,KAAKN,MAC/CA,KAAKO,kBAAoBP,KAAKO,kBAAkBD,KAAKN,K,CAIvD,UAAAQ,GACER,KAAKC,UAAYD,KAAKS,uBAEtBT,KAAKU,aAAeV,KAAKW,iBAAiBX,KAAKC,U,CAKjD,qBAAMW,GACJ,OAAOZ,KAAKU,Y,CAKd,cAAMG,GACJ,OAAOb,KAAKc,kB,CAKd,cAAMC,CAASC,GACb,IAAIC,EAAmB,GACvB,UAAWD,IAAU,SAAU,CAC7BC,EAAOC,KAAKF,E,KACP,CACLC,EAASD,C,CAGXhB,KAAKC,UAAYD,KAAKS,uBACtB,GAAIQ,EAAOE,OAAQ,CACjBnB,KAAKoB,gBAAgBpB,KAAKC,UAAWgB,EAAO,G,CAE9CjB,KAAKU,aAAeV,KAAKW,iBAAiBX,KAAKC,U,CAOzC,gBAAAoB,GACNrB,KAAKsB,aAAaC,KAAK,CACrBC,GAAIxB,KAAKyB,OACTC,SAAU1B,KAAKc,oB,CAQX,eAAAa,GACN3B,KAAK4B,YAAYL,KAAK,CACpBC,GAAIxB,KAAKyB,Q,CAIb,iBAAAI,GACE7B,KAAKQ,Y,CAGP,mBAAAsB,GACE9B,KAAK+B,YAAY/B,KAAKgC,a,CAGhB,oBAAAvB,GACN,cAAcT,KAAKiC,QAAU,SAAWC,KAAKC,MAAMnC,KAAKiC,OAASjC,KAAKiC,K,CAGhE,2BAAAG,G,MACN,MAAMC,EAAmBrC,KAAKS,uBAE9BT,KAAKoB,gBAAgBiB,GAAkBC,EAAAtC,KAAKU,gBAAY,MAAA4B,SAAA,SAAAA,EAAEd,IAE1D,OAAOa,C,CAGD,gBAAAvB,G,MACN,OAAOwB,EAAAtC,KAAKU,gBAAY,MAAA4B,SAAA,SAAAA,EAAEd,E,CAGpB,WAAAe,CAAYC,GAClB,MAAO,GAAGxC,KAAKyB,cAAce,EAAKhB,I,CAG5B,gBAAAiB,GACN,MAAO,GAAGzC,KAAKyB,kB,CAGT,qBAAAiB,CAAsBC,GAC5B,OAAOA,EAASC,QAAQ,GAAG5C,KAAKyB,cAAe,G,CAGzC,eAAAoB,GACN,IAAK7C,KAAKC,UAAUkB,OAAQ,CAC1B,MAAO,E,CAGT,OAAO2B,OAAOC,QACZ/C,KAAKC,UAAU+C,QACb,CAACC,EAAOT,KACN,MAAMU,EAAWV,EAAKU,UAAY,kBAClCD,EAAMC,GAAYD,EAAMC,IAAa,GACrCD,EAAMC,GAAUhC,KAAKsB,GAErB,OAAOS,CAAK,GAEd,I,CAKE,WAAAlB,CAAYC,GAClB,IAAImB,EAAWnD,KAAKoC,8BAEpB,KAAKJ,IAAY,MAAZA,SAAY,SAAZA,EAAcb,QAAQ,CACzBnB,KAAKC,UAAYkD,EAEjB,M,CAGFA,EAAWA,EAASC,KAAKZ,GAAIM,OAAAO,OAAAP,OAAAO,OAAA,GAAUb,GAAI,CAAEc,KAAMC,EAAaf,EAAKc,UAErE,GAAItD,KAAKwD,aAAc,CACrBxD,KAAKC,UAAYD,KAAKyD,WAAWN,EAAUnB,EAAc,M,KACpD,CACLhC,KAAKC,UAAYkD,EACdO,QAAQlB,GAAqBA,EAAKc,KAAKK,cAAcC,SAAS5B,EAAa2B,iBAC3EP,KAAKZ,IACJA,EAAKc,KAAOtD,KAAK6D,mBAAmBrB,EAAKc,KAAMtB,GAE/C,OAAOQ,CAAI,G,EAKX,UAAAiB,CAAWxB,EAAqBD,EAAsB8B,GAC5D,IAAK7B,EAAO,CACV,MAAO,E,CAGT,OAAOA,EACJmB,KAAKZ,IACJ,MAAMuB,EAAQvB,EAAKc,KAAKK,cAAcC,SAAS5B,EAAa2B,eAE5D,MAAMK,EAAOlB,OAAAO,OAAA,GAAmBb,GAChC,GAAIwB,EAAQC,UAAYD,EAAQC,SAAS9C,OAAS,EAAG,CACnD6C,EAAQC,SAAWjE,KAAKyD,WACtBO,EAAQC,SAASb,KAAKZ,GAAIM,OAAAO,OAAAP,OAAAO,OAAA,GAAUb,GAAI,CAAEc,KAAMC,EAAaf,EAAKc,UAClEtB,EACA+B,E,CAIJ,GAAIA,EAAO,CACTC,EAAQV,KAAOtD,KAAK6D,mBAAmBG,EAAQV,KAAMtB,E,CAEvD,GACE+B,GACCC,EAAQC,UAAYD,EAAQC,SAAS9C,OAAS,GAC9CnB,KAAKkE,8BAAgCJ,EACtC,CACA,OAAOE,C,CAGT,OAAO,IAAI,IAEZN,QAAQlB,GAASA,IAAS,M,CAGvB,kBAAAqB,CAAmBM,EAAcC,GACvC,MAAMC,EAAYF,EAAKR,cACvB,MAAMW,EAAcF,EAAOT,cAC3B,MAAMY,EAAQF,EAAUG,QAAQF,GAEhC,GAAIC,KAAW,EAAG,CAChB,OAAOJ,C,CAGT,MAAMM,EAAMF,EAAQH,EAAOjD,OAE3B,OAAOgD,EAAKO,UAAU,EAAGH,GAAS,WAAWJ,EAAKO,UAAUH,EAAOE,cAAkBN,EAAKO,UAAUD,E,CAG9F,eAAAE,GACN,OAAOC,EAAQ5E,KAAK6E,gBAAkB,I,CAGhC,iBAAAC,CAAkBC,GACxB/E,KAAKgC,aAAe+C,EAAEC,OAAOhE,MAC7B,IAAKhB,KAAKiF,OAAQ,CAChBjF,KAAKK,gB,EAID,eAAAe,CAAgBa,EAAqBiD,GAC3C,GAAIjD,EAAO,CACTA,EAAMkD,SAAS3C,IACbA,EAAKd,SAAWc,EAAKhB,KAAO0D,EAC5B,GAAI1C,EAAKyB,UAAYzB,EAAKyB,SAAS9C,OAAS,EAAG,CAC7CnB,KAAKoB,gBAAgBoB,EAAKyB,SAAUiB,E,MAMpC,gBAAAvE,CAAiBsB,GACvB,GAAIA,EAAO,CACT,IAAK,MAAMO,KAAQP,EAAO,CACxB,GAAIO,EAAKd,SAAU,CACjB,OAAOc,C,CAET,GAAIA,EAAKyB,UAAYzB,EAAKyB,SAAS9C,OAAS,EAAG,CAC7C,MAAMiE,EAAQpF,KAAKW,iBAAiB6B,EAAKyB,UACzC,GAAImB,EAAO,CACT,OAAOA,C,IAMf,OAAO,I,CAGD,UAAAC,CAAW3D,GACjB,GAAIA,IAAQ,MAARA,SAAQ,SAARA,EAAU4D,SAAU,CACtB,M,CAGFtF,KAAKC,UAAYD,KAAKS,uBAEtB,GAAIiB,EAAU,CACZ1B,KAAKoB,gBAAgBpB,KAAKC,UAAWyB,EAASF,G,CAGhDxB,KAAKU,aAAeV,KAAKW,iBAAiBX,KAAKC,WAC/CD,KAAKqB,mBACLrB,KAAKK,iBACL,GAAIL,KAAKgC,aAAc,CACrBhC,KAAKgC,aAAe,I,EAIhB,gBAAAuD,GACNvF,KAAKU,aAAe,KACpBV,KAAKgC,aAAe,KACpBhC,KAAKwF,cAAgB,GACrBxF,KAAK2B,kBACL3B,KAAKK,gB,CAGC,kBAAAoF,CAAmBV,GACzB,OAAQA,EAAEW,MACR,KAAKC,EAAaC,MAClB,KAAKD,EAAaE,MAChB,GAAI7F,KAAKwF,cAAe,CACtB,GAAIxF,KAAKwF,gBAAkBxF,KAAKyC,mBAAoB,CAClDzC,KAAKuF,kB,KACA,CACL,MAAMO,EAAS9F,KAAK0C,sBAAsB1C,KAAKwF,eAC/C,MAAMhD,EAAOxC,KAAKC,UAAU8F,MAAMhB,GAAMA,EAAEvD,KAAOsE,KAAW,KAC5D,GAAItD,EAAM,CACRxC,KAAKU,aAAe8B,EACpBxC,KAAKqB,mBACLrB,KAAKK,gB,GAIX,MACF,KAAKsF,EAAaK,WAClB,KAAKL,EAAaM,SAChBjG,KAAKkG,gBAAgBnB,GACrB,M,CAIE,eAAAmB,CAAgBnB,GACtB,MAAMoB,EAAS,CAACR,EAAaK,WAAYL,EAAaM,UAEtD,IAAKE,EAAOvC,SAASmB,EAAEqB,KAAsB,CAC3C,M,CAGFrB,EAAEsB,iBACFtB,EAAEuB,kBAEF,MAAMC,EAAWvG,KAAKwF,cAAgBxF,KAAKwG,KAAKC,cAAc,IAAIzG,KAAKwF,iBAAmB,KAC1F,MAAMkB,EAAUC,MAAMC,KAAK5G,KAAKwG,KAAKK,iBAAiB,oBAEtD,IAAKH,EAAQvF,OAAQ,CACnB,M,CAGF,MAAM2F,EAAgBP,EAAWG,EAAQlC,QAAQ+B,GAAY,KAC7D,MAAMQ,EAAiB,EACvB,MAAMC,EAAgBN,EAAQvF,OAAS,EAEvC,IAAKnB,KAAKiF,OAAQ,CAChBjF,KAAKK,iBAEL,GAAIL,KAAKU,aAAc,CACrBV,KAAKiH,gBAAgBjH,KAAKuC,YAAYvC,KAAKU,eAE3C,M,EAIJ,IAAIwG,EAAW,KACf,GAAInC,EAAEW,OAASC,EAAaK,WAAY,CACtCkB,EACEJ,IAAkB,KAAOJ,EAAQK,GAAkBL,EAAQI,EAAgB,IAAMJ,EAAQM,E,MACtF,GAAIjC,EAAEW,OAASC,EAAaM,SAAU,CAC3CiB,EACEJ,IAAkB,KAAOJ,EAAQM,GAAiBN,EAAQI,EAAgB,IAAMJ,EAAQK,E,CAG5F/G,KAAKiH,gBAAgBC,EAAS1F,G,CAGxB,eAAAyF,CAAgBtE,GACtB3C,KAAKwF,cAAgB7C,EACrB,MAAMwE,EAAOnH,KAAKwG,KAAKC,cAAc,IAAI9D,KACzCwE,EAAKC,eAAe,CAACC,MAAO,U,CAGtB,cAAAhH,CAAeiH,EAAmB,O,MACxC,GAAItH,KAAKsF,UAAYtF,KAAKuH,SAAU,CAClC,M,CAGF,IAAKvH,KAAKiF,OAAQ,CAChBuC,SAASC,iBAAiB,QAASzH,KAAKO,mBACxCiH,SAASC,iBAAiB,QAASzH,KAAKO,kB,KACnC,CACLiH,SAASE,oBAAoB,QAAS1H,KAAKO,mBAC3CiH,SAASE,oBAAoB,QAAS1H,KAAKO,mBAC3C,GAAI+G,EAAkB,EACpBhF,EAACtC,KAAKwG,KAAKC,cAAc,IAAIzG,KAAKyB,0BAA2C,MAAAa,SAAA,SAAAA,EAAEqF,O,CAGjF,GAAI3H,KAAKU,cAAgBV,KAAKgC,aAAc,CAC1ChC,KAAKgC,aAAe,KACpBhC,KAAK+B,YAAY/B,KAAKgC,a,EAI1BhC,KAAKwF,cAAgB,GACrBxF,KAAKiF,QAAUjF,KAAKiF,M,CAGd,gBAAA2C,CAAiB7C,GACvB,GAAKA,EAAE8C,OAAuBC,QAAQ,eAAgB,CACpD/C,EAAEuB,kBAEF,M,CAGFtG,KAAKK,gB,CAGC,iBAAAE,CAAkBwE,GACxB,GAAIA,aAAagD,eAAiBhD,EAAEqB,MAAQT,EAAaqC,IAAK,CAC5DjD,EAAEuB,kBAEF,OAAOtG,KAAKK,eAAe,K,CAG7B,GAAI0E,aAAagD,eAAiBhD,EAAEqB,MAAQT,EAAasC,IAAK,CAC5D,M,CAGF,MAAMC,EAAiBC,IACvB,GAAID,IAAc,MAAdA,SAAc,SAAdA,EAAgBE,aAAa,YAAa,CAC5C,M,CAGF,IACGC,EAAeH,GAAgBnC,MAC7BoB,GAAsBA,EAAKmB,SAASC,gBAAkB,WAAapB,EAAK3F,KAAO,GAAGxB,KAAKyB,iBAE1F,CACA,MAAM+G,EAAUH,EAAeH,GAAgBnC,MAAMhB,GAAMA,EAAEuD,WAAa,aAC1EtI,KAAKK,eAAemI,IAAYxI,KAAKwG,K,EAIjC,cAAAiC,CAAeC,GACrB,IAAK1I,KAAKC,UAAUkB,OAAQ,CAC1B,M,CAGF,MAAMwH,EAAY3I,KAAKC,UAAU8F,MAC9BvD,GAAqBA,EAAKc,KAAKiF,cAAcK,OAAO,KAAOF,EAAOH,gBAErE,GAAII,EAAW,CACb,IAAK3I,KAAKiF,OAAQ,CAChBjF,KAAKK,gB,CAEPL,KAAKiH,gBAAgBjH,KAAKuC,YAAYoG,G,EAIlC,WAAAE,GACN,IAAI7H,EAAQ,KACZ,IAAKhB,KAAKiF,QAAUjF,KAAKU,aAAc,CACrCM,EAAQhB,KAAKU,aAAa4C,KAAKV,QAAQ,WAAY,G,CAErD,GAAI5C,KAAKiF,QAAUjF,KAAKgC,aAAc,CACpChB,EAAQhB,KAAKgC,Y,CAGf,MAAO,CACL8G,EAAA,WACEC,MAAO,CACL,gBAAiB/I,KAAKiF,OACtB,iBAAkBjF,KAAK6E,cAEzBrD,GAAI,GAAGxB,KAAKyB,eACZA,OAAQ,GAAGzB,KAAKyB,sBAChBuH,YAAahJ,KAAKgJ,YAClBhI,MAAOA,EACPiI,MAAOjJ,KAAKiJ,MACZpE,aAAa,MAAK,aACN7E,KAAKkJ,UACjBC,KAAMnJ,KAAKiF,OAAS,WAAa,aACjCmE,aAAc,MACdC,QAAS,MACT/F,KAAMtD,KAAKsD,KACXgC,SAAUtF,KAAKsF,SACfiC,SAAUvH,KAAKuH,WAAcvH,KAAK2E,mBAAqB3E,KAAKiF,OAC5DqE,OAAQtJ,KAAKiF,OAASsE,UAAYvJ,KAAKsJ,OACvCE,KAAMxJ,KAAKwJ,KACXC,KAAK,WAAU,qBACKzJ,KAAKiF,OAAS,OAAS,QAAO,qBAC9B,GAAGjF,KAAKyB,cAAa,6BACbzB,KAAKiF,OAASjF,KAAKwF,cAAgB,GAAE,yBACzCxF,KAAK2E,kBAAoB,OAAS4E,UAC1DG,QAAU3E,GAAkB/E,KAAK4H,iBAAiB7C,GAClD4E,UAAY5E,GAAqB/E,KAAKyF,mBAAmBV,GACzD6E,cAAgB7E,GAAmB/E,KAAK8E,kBAAkBC,GAC1D8E,WAAa9E,IACX,IAAK/E,KAAK2E,kBAAmB,CAC3BI,EAAEsB,iBACFrG,KAAKyI,eAAe1D,EAAEqB,I,MAOxB,cAAA0D,GACN,OACEhB,EAAA,OAAKC,MAAO/I,KAAKiF,OAAS,OAAS,UACjC6D,EAAA,OACEC,MAAO,CACL,oBAAqB,KACrBgB,MAAS/J,KAAKgK,UAGhBlB,EAAA,UACEW,KAAK,UAAS,aACFzJ,KAAKkJ,WAAalJ,KAAKiJ,MACnCgB,SAAUjK,KAAKsF,UAAYtF,KAAKuH,WAAavH,KAAKiF,QAAU,EAAI,EAChEzD,GAAI,GAAGxB,KAAKyB,cAAa,uBACH,MACtB+H,KAAMxJ,KAAKkK,eACXnB,MAAO,CACLzD,SAAYtF,KAAKsF,SACjBiC,SAAYvH,KAAKuH,SACjB,CAAC,SAASvH,KAAKsJ,WAAYtJ,KAAKiF,UAAYjF,KAAKsJ,OACjD,cAAe,OAGhBtJ,KAAKmK,WAAanK,KAAKoK,kBACvBpK,KAAKqK,wB,CAOR,eAAAD,GACN,MAAME,GAAUtK,KAAKU,eAAiBV,KAAKmK,UAE3C,OACErB,EAAA,kBACEC,MAAO,CACLwB,KAAQD,EACR,aAAc,KACd,qBAAsBtK,KAAKwK,eAE7BC,UAAW,KACXnF,SAAU,MACVoF,YAAaC,EAAgBC,QAC7BnB,KAAMa,EAAS,eAAiB,SAAQ,gBACzB,EAAC,gBACF,QACd9I,GAAIxB,KAAKyC,mBACT+G,KAAMxJ,KAAKwD,aAAeqH,EAASC,OAAS9K,KAAKkK,eACjDa,YAAa,IAAM/K,KAAKuF,oBAExBuD,EAAA,OACEC,MAAO,CACL,qBAAsB,KACtB,uBAAwB/I,KAAKwD,aAC7BwH,OAAUhL,KAAKwF,gBAAkBxF,KAAKyC,qBAGxCqG,EAAA,UAAQxF,KAAK,qBACbwF,EAAA,YAAO9I,KAAKmK,Y,CAMZ,UAAAc,CAAWzI,EAAkB0I,GACnC,OACEpC,EAAA,kBACE2B,WAAYjI,EAAK8C,SACjBA,SAAU9C,EAAK8C,SACfoF,YAAaQ,EAAWP,EAAgBQ,OAASR,EAAgBC,QACjEnB,KAAMjH,EAAK8C,SAAW,eAAiB,SAAQ,iBAC/B,EAAC,gBACF9C,EAAKd,SAAW,OAAS,QACxCF,GAAIxB,KAAKuC,YAAYC,GACrBgH,KAAMxJ,KAAKkK,eACXa,YAAa,IAAM/K,KAAKqF,WAAW7C,IAEnCsG,EAAA,OACEC,MAAO,CACL,yBAA0B,KAC1BiC,OAAUhL,KAAKwF,gBAAkBxF,KAAKuC,YAAYC,KAGpDsG,EAAA,OACEC,MAAO,CACLrH,WAAcc,EAAKd,SACnB,uBAAwB,MAE1B0J,UAAW5I,EAAKc,OAEjBd,EAAK2G,MAAQL,EAAA,SAAOK,KAAM3G,EAAK2G,Q,CAMhC,YAAAe,GACN,GAAIlK,KAAKwD,aAAc,CACrB,OAAOqH,EAASQ,I,CAGlB,GAAIrL,KAAKwJ,OAASrJ,EAAYmL,OAAStL,KAAKwJ,OAASrJ,EAAYoL,QAAS,CACxE,OAAOV,EAASS,K,CAGlB,OAAOT,EAASC,M,CAGV,mBAAAT,GAIN,IAAKrK,KAAKC,UAAUkB,OAAQ,CAC1B,OAAOnB,KAAKwL,uB,CAGd,GAAIxL,KAAKwK,cAAe,CACtB,GAAIxK,KAAKwD,aAAc,CACrB,OAAOxD,KAAKyL,mB,CAGd,OAAOzL,KAAK0L,wB,CAGd,OAAO1L,KAAKC,UAAUmD,KAAI,CAACZ,EAAkBmJ,EAAOC,KAClD,MAAMC,EAAaF,IAAUC,EAAMzK,OAAS,EAC5C,MAAM2K,EAAoBF,EAAMzK,OAAS,EAEzC,GAAInB,KAAKwD,aAAc,CACrB,OAAOxD,KAAK+L,gBAAgBvJ,EAAMqJ,EAAYC,EAAmB,KAAMtJ,EAAK8C,S,CAG9E,OAAOtF,KAAKiL,WAAWzI,EAAMqJ,EAAW,G,CAIpC,eAAAE,CACNvJ,EACAwJ,EACAF,EACAG,EACAC,G,QAEA,MAAMC,EAAa3J,EAAK8C,UAAY4G,EAEpC,MAAME,EAAapM,KAAKwK,cACpBjB,UACAvJ,KAAKwK,cACHwB,IAAgBF,EACdnB,EAAgBC,QAChBrB,UACF0C,GAAcH,IAAsBE,EAClCrB,EAAgBC,QAChBrB,UAER,OACET,EAAA,kBACE2B,WAAYjI,EAAK8C,SACjBA,SAAU6G,EACVpD,MAAO,CACL,2BAA4B/I,KAAKwK,mBAAmBlI,EAAAE,EAAKyB,YAAQ,MAAA3B,SAAA,SAAAA,EAAEnB,QACnE,mBAAoBnB,KAAKwK,eAAiByB,MAAeI,EAAA7J,EAAKyB,YAAQ,MAAAoI,SAAA,SAAAA,EAAElL,WAAYnB,KAAKgC,cAE3FwH,KAAMxJ,KAAKkK,eACXQ,YAAa0B,EACb5I,aAAcxD,KAAKwD,aAAY,gBAChB,KACfiG,KAAK,gBAELX,EAAA,OACEtH,GAAIxB,KAAKuC,YAAYC,GACrBiH,KAAM0C,EAAa,eAAiB,SACpCpD,MAAO,CAAC,eAAgB,KAAMiC,OAAUhL,KAAKwF,gBAAkBxF,KAAKuC,YAAYC,IAChFkH,QAAS,IAAM1J,KAAKqF,WAAW7C,IAE/BsG,EAAA,QAAMC,MAAM,iBACVD,EAAA,QACEC,MAAO,CACL,aAAc,KACdrH,WAAcc,EAAKd,UAErB4K,MAAO9J,EAAKc,KACZ8H,UAAW5I,EAAKc,QAGnBd,EAAK2G,MAAQL,EAAA,SAAOK,KAAM3G,EAAK2G,QAEjC3G,EAAKyB,UAAYzB,EAAKyB,SAAS9C,OAAS,EACvC2H,EAAA,UAAQW,KAAK,gBACXX,EAAA,OAAKC,MAAM,iBACRvG,EAAKyB,SAASb,KAAI,CAACmJ,EAAOZ,EAAOa,IAChCxM,KAAK+L,gBACHQ,EACAZ,IAAUa,EAAIrL,OAAS,EACvBqL,EAAIrL,OAAS,EACb,MACAgL,OAKN,K,CAKF,iBAAAV,GACN,MAAMgB,EAAezM,KAAK6C,kBAE1B,OAAO4J,EAAarJ,KAAI,EAAEF,EAAUjB,GAAQ0J,EAAO5I,KACjD,MAAM+I,EAAoBhJ,OAAO7B,OAAOwL,GAAcC,MAAMC,GAAeA,EAAWxL,OAAS,IAE/F,OACE2H,EAAA,+BACgB6C,IAAU5I,EAAQ5B,OAAS,EAAIoI,UAAYoB,EAAgBC,QACzEpH,aAAc,KACdoJ,eAAgB,GAAG5M,KAAKyB,eAAekK,KAEvC7C,EAAA,QACEC,MAAM,+BACN8D,KAAK,eACLrL,GAAI,GAAGxB,KAAKyB,eAAekK,IAAO,cACtB,QAEXzI,GAEH4F,EAAA,UAAQW,KAAK,gBACVxH,EAAMmB,KAAI,CAACZ,EAAMsK,EAAGN,IAAQ,CAC3BxM,KAAK+L,gBAAgBvJ,EAAMsK,IAAMN,EAAIrL,OAAS,EAAG2K,EAAmB,KAAMtJ,EAAK8C,UAC/EwH,EAAIN,EAAIrL,OAAS,EACf2H,EAAA,aACE1C,IAAK,WAAW0G,IAChBC,MAAO,CAACC,OAAQ,MAAOC,OAAQ,8BAE/B,SAGPtB,IAAU5I,EAAQ5B,OAAS,GAAK2H,EAAA,aAAWiE,MAAO,CAACC,OAAQ,MAAOC,OAAQ,8BAC9D,G,CAKb,sBAAAvB,GACN,MAAMe,EAAezM,KAAK6C,kBAE1B,OAAO4J,EAAarJ,KAAI,EAAEgD,EAAKnE,GAAQ0J,KACrC,MAAMuB,EAAcT,EAAatL,SAAWwK,EAAQ,EAEpD,OACE7C,EAAA,+BACgB6B,EAAgBC,QAC9BgC,eAAgB,GAAG5M,KAAKyB,gBAAgBkK,KAExC7C,EAAA,QACEC,MAAM,+BACN8D,KAAK,eACLrL,GAAI,GAAGxB,KAAKyB,gBAAgBkK,IAAO,cACvB,QAEXvF,GAEFnE,EAAMmB,KAAI,CAACZ,EAAM2K,KAChB,MAAMtB,EAAa5J,EAAMd,SAAWgM,EAAW,EAE/C,OAAOnN,KAAKiL,WAAWzI,EAAM0K,GAAerB,EAAW,IAE5C,G,CAKb,qBAAAL,GACN,OACE1C,EAAA,kBACEC,MAAM,aACNS,KAAMxJ,KAAKwD,aAAeqH,EAASC,OAAS9K,KAAKkK,eAAc,gBAChD,KACfT,KAAK,gBAEJzJ,KAAKoN,e,CAKJ,aAAAC,GACN,GAAIzI,EAAQ5E,KAAKqJ,WAAa,MAAO,CACnC,M,CAGF,OACEP,EAAA,mBACEO,QAASzE,EAAQ5E,KAAKqJ,WAAa,KAAOE,UAAavJ,KAAKqJ,QAC5DC,OAAQtJ,KAAKsJ,OACbP,MAAO/I,KAAKwJ,KACZlE,SAAUtF,KAAKsF,U,CAKrB,MAAAgI,GACE,OACExE,EAAA,OAAA1C,IAAA,2CAAK2C,MAAM,kBACR/I,KAAK6I,cACL7I,KAAK8J,iBACL9J,KAAKqN,gB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["stylesCss","ZComboboxStyle0","ZCombobox","watchItems","this","itemsList","items","JSON","parse","selectedCounter","filter","item","checked","length","updateRenderItemsList","watchSearchValue","filterItems","searchValue","emitComboboxChange","comboboxChange","emit","id","inputid","constructor","hostRef","inputType","InputType","TEXT","randomId","ControlSize","BIG","toggleComboBox","bind","closeFilterItems","componentWillLoad","componentWillRender","getControlToListSize","size","X_SMALL","ListSize","SMALL","MEDIUM","LARGE","getOptionId","itemId","getCheckAllOptionId","allOptionsSelected","hasReachedMaxSelections","maxcheckableitems","handleHeaderKeyDown","e","code","KeyboardCode","ENTER","focusedItemId","isopen","hassearch","SPACE","preventDefault","checkOption","ESC","ARROW_DOWN","ARROW_UP","handleArrowsNavigation","handleInputKeyDown","TAB","optionId","map","Object","assign","i","includes","stopPropagation","currElem","element","shadowRoot","querySelector","options","Array","from","querySelectorAll","currElemIndex","indexOf","firstElemIndex","lastElemIndex","nextElem","scrollIntoView","block","resetRenderItemsList","renderItemsList","forEach","push","value","start","name","toUpperCase","end","newName","substring","getComboboxA11yAttributes","isZInput","role","ariaLabel","htmlAriaLabel","ariaExpanded","ariaActivedescendant","ariaControls","renderHeader","comboboxA11yAttributes","h","class","onClick","onKeyDown","tabindex","label","undefined","renderContent","renderSearchInput","join","renderItems","tabIndex","renderList","renderItem","index","isDisabled","htmlTabindex","dividerType","ListDividerType","ELEMENT","NONE","disabled","getPlainText","innerHTML","renderNoSearchResults","hasgroupitems","renderGroups","renderCheckAll","newData","reduce","group","category","zListItem","_a","listGroups","entries","key","ariaLabelledby","slot","noresultslabel","htmlid","searchlabel","placeholder","searchplaceholder","htmltitle","searchtitle","type","message","onInputChange","detail","hascheckall","allChecked","dividerColor","uncheckalltext","checkalltext","render","open","fixed","isfixed"],"sources":["src/components/z-combobox/styles.css?tag=z-combobox&encapsulation=shadow","src/components/z-combobox/index.tsx"],"sourcesContent":["@import \"../css-components/z-label/styles.css\";\n\n:host {\n display: block;\n min-width: 290px;\n color: var(--color-form-default-text);\n fill: var(--color-form-default-icon);\n font-family: var(--font-family-sans);\n}\n\n:host > div.fixed {\n position: relative;\n}\n\n:host > div > .header {\n position: relative;\n z-index: 10;\n display: flex;\n min-height: 42px;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--space-unit) * 1.5);\n border: var(--border-size-small) solid var(--color-form-surface04);\n margin: 0;\n background-color: var(--color-form-background);\n border-radius: var(--border-radius-small);\n cursor: pointer;\n}\n\n:host([size=\"small\"]) > div > .header {\n min-height: 34px;\n font-size: var(--font-size-2);\n}\n\n:host([size=\"x-small\"]) > div > .header {\n min-height: 30px;\n font-size: var(--font-size-2);\n}\n\n:host > div > .header:hover {\n outline: var(--border-size-medium) solid var(--color-form-surface04);\n outline-offset: -2px;\n}\n\n:host > div > div.header:focus:focus-visible {\n z-index: 16;\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\n:host > div > .header > span.body-3 > span {\n font-weight: var(--font-sb);\n}\n\n:host > div > .header > z-icon {\n fill: var(--color-form-default-icon);\n transform: rotate(360deg);\n transition: all 200ms linear;\n}\n\n:host > div > .header > z-icon.small,\n:host > div > .header > z-icon.x-small {\n --z-icon-width: 16px;\n --z-icon-height: 16px;\n}\n\n:host > div.open > .header {\n border: var(--border-size-small) solid var(--color-form-active-primary);\n border-radius: var(--border-radius-small) var(--border-radius-small) 0 0;\n}\n\n:host > div.disabled {\n pointer-events: none;\n}\n\n:host > div.disabled .header {\n border-color: var(--color-form-disabled03);\n fill: var(--color-form-disabled01-icon);\n}\n\n:host > div.disabled .header > span.body-3 {\n color: var(--color-form-disabled03);\n}\n\n:host > div.disabled .header > z-icon:last-child {\n fill: var(--color-form-disabled01-icon);\n}\n\n:host > div.open > .header > z-icon {\n fill: var(--color-form-default-icon);\n transform: rotate(180deg);\n transition: all 200ms linear;\n}\n\n:host > div > div.open-combo-data {\n display: none;\n}\n\n:host > div.open > div.open-combo-data {\n position: relative;\n z-index: 12;\n display: block;\n padding: var(--space-unit) calc(var(--space-unit) * 2);\n border: var(--border-size-small) solid var(--color-form-surface03);\n border-top: 0;\n background-color: var(--color-form-background);\n border-radius: 0;\n box-shadow: var(--shadow-2);\n}\n\n:host .open .open-combo-data z-input .z-label {\n color: var(--color-form-default-text);\n}\n\n:host > div.open > div.open-combo-data > div > div {\n overflow: auto;\n max-height: 235px;\n padding: 0;\n padding-left: var(--space-unit); /* padding left and negative margin in order to enable focus */\n margin-left: calc(var(--space-unit) * -1); /* padding left and negative margin in order to enable focus */\n}\n\n:host > div.open > div.open-combo-data > z-input {\n width: 100%;\n margin-bottom: calc(var(--space-unit) * 2);\n}\n\n:host > div.open > div.open-combo-data > div > div > ul {\n max-height: 235px;\n padding: 0 calc(var(--space-unit) * 0.5); /* needed for checkbox focus shadow */\n margin: 0;\n}\n\n:host .open-combo-data z-list-element {\n --background-color-list-element: var(--color-form-background);\n --background-hover-color-list-element: var(--color-form-surface03);\n --background-active-color-list-element: var(--color-form-surface03);\n}\n\n:host .open-combo-data z-list-element[disabled] {\n pointer-events: none;\n}\n\n:host .open-combo-data z-list-element .option-wrap {\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: pointer;\n gap: var(--space-unit);\n}\n\n:host .open-combo-data z-list-element[size=\"medium\"] .option-wrap,\n:host .open-combo-data z-list-element[size=\"small\"] .option-wrap {\n --z-icon-width: 16px;\n --z-icon-height: 16px;\n\n font-size: var(--font-size-2);\n gap: calc(var(--space-unit) / 2);\n}\n\n:host .open-combo-data z-list-element .option-wrap > z-icon {\n fill: var(--color-primary01);\n}\n\n:host .open-combo-data z-list-element[disabled] .option-wrap > z-icon {\n fill: var(--color-disabled01);\n}\n\n:host .open-combo-data z-list-element .option-wrap > z-icon.focused {\n border-radius: var(--border-radius-small);\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\n:host .open-combo-data z-list-element .option-wrap > [role=\"option\"]:focus,\n:host .open-combo-data z-list-element .option-wrap > [role=\"option\"]:focus-visible {\n outline: none;\n}\n\n::-webkit-scrollbar {\n width: 6px;\n background: linear-gradient(to right, transparent 0 1px, var(--gray200) 1px 5px, transparent 5px 6px);\n}\n\n::-webkit-scrollbar-thumb {\n background-color: var(--color-primary01);\n}\n\n::-webkit-scrollbar-thumb:hover {\n background-color: var(--color-hover-primary);\n}\n\n/* Firefox scrollbar */\n@supports not selector(::-webkit-scrollbar-track) {\n :host {\n scrollbar-color: var(--color-primary01) transparent;\n }\n}\n\n:host > div.open > z-input {\n position: relative;\n z-index: 1;\n width: 238px;\n margin: 0 calc(var(--space-unit) * 2);\n color: var(--color-form-active-primary);\n}\n\n:host > div.open > div.open-combo-data > div > div.search {\n overflow: hidden;\n max-height: none;\n margin-top: 0;\n}\n\n:host > div.open > div.open-combo-data > div > div.search > ul {\n overflow: auto;\n max-height: 180px;\n padding: var(--space-unit) calc(var(--space-unit) * 2);\n}\n\n:host .open .open-combo-data .search .no-results {\n display: flex;\n align-items: center;\n column-gap: var(--space-unit);\n}\n\n:host > .open > .open-combo-data .search .close-search {\n display: flex;\n justify-content: center;\n}\n\n:host > div.open > div.open-combo-data > div > div.search .close-search > a {\n display: inline-block;\n height: 44px;\n color: var(--color-form-active-primary);\n cursor: pointer;\n font-size: 14px;\n font-weight: var(--font-sb);\n line-height: 44px;\n text-align: center;\n text-transform: uppercase;\n}\n\n:host > div.open > div.open-combo-data > div > div.search .close-search > a:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\n:host > div.open > div.open-combo-data > div > div.check-all-wrapper {\n /* padding left and negative margin in order to enable focus */\n padding: calc(var(--space-unit) * 2) calc(var(--space-unit) * 0.5) calc(var(--space-unit) * 2)\n calc(var(--space-unit) * 1.5);\n border-bottom: var(--border-size-small) solid var(--gray800);\n margin-bottom: var(--space-unit);\n margin-left: calc(var(--space-unit) * -1);\n text-align: left;\n}\n\n:host([size=\"small\"]) > div.open > div.open-combo-data > div > div.check-all-wrapper {\n padding: calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 0.5);\n}\n\n:host([size=\"x-small\"]) > div.open > div.open-combo-data > div > div.check-all-wrapper {\n padding: var(--space-unit) calc(var(--space-unit) * 0.5);\n}\n","import {Component, Element, Event, EventEmitter, Prop, State, Watch, h} from \"@stencil/core\";\nimport {ComboItem, ControlSize, InputType, KeyboardCode, ListDividerType, ListSize} from \"../../beans\";\nimport {getPlainText, randomId} from \"../../utils/utils\";\nimport {ZInput} from \"../z-input\";\n\n@Component({\n tag: \"z-combobox\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZCombobox {\n @Element() element: HTMLZComboboxElement;\n\n /** input unique id */\n @Prop()\n inputid = `combo-${randomId()}`;\n\n /** list items array */\n @Prop()\n items: ComboItem[] | string;\n\n /** label text */\n @Prop()\n label: string;\n\n /** the combobox is disabled */\n @Prop({reflect: true})\n disabled?: boolean = false;\n\n /** show search input flag (optional) */\n @Prop()\n hassearch?: boolean = false;\n\n /** search input label text (optional) */\n @Prop()\n searchlabel?: string;\n\n /** search input placeholder text (optional) */\n @Prop()\n searchplaceholder?: string;\n\n /** search input title text (optional) */\n @Prop()\n searchtitle?: string;\n\n /** no result text message */\n @Prop()\n noresultslabel?: string = \"Nessun risultato\";\n\n /** toggle combo list opening flag */\n @Prop({mutable: true})\n isopen = false;\n\n /** fixed style flag */\n @Prop()\n isfixed = false;\n\n /** show \"check all\" checkbox (optional) */\n @Prop()\n hascheckall?: boolean = false;\n\n /** check all label (optional) */\n @Prop()\n checkalltext?: string = \"Seleziona tutti\";\n\n /** uncheck all label (optional) */\n @Prop()\n uncheckalltext?: string = \"Deseleziona tutti\";\n\n /** max number of checkable items (0 = unlimited) */\n @Prop()\n maxcheckableitems = 0;\n\n /** group items by category */\n @Prop()\n hasgroupitems?: boolean;\n\n /** Available sizes: `big`, `small` and `x-small`. Defaults to `big`. */\n @Prop()\n size?: ControlSize = ControlSize.BIG;\n\n /** the combobox aria-label */\n @Prop()\n htmlAriaLabel?: string;\n\n @State()\n searchValue: string;\n\n @State()\n selectedCounter: number;\n\n @State()\n renderItemsList: ComboItem[] = []; // used for render only\n\n @State()\n focusedItemId = \"\";\n\n private itemsList: ComboItem[] = [];\n\n private inputType: InputType = InputType.TEXT;\n\n @Watch(\"items\")\n watchItems(): void {\n this.itemsList = typeof this.items === \"string\" ? JSON.parse(this.items) : this.items;\n this.selectedCounter = this.itemsList.filter((item) => item.checked).length;\n this.updateRenderItemsList();\n }\n\n @Watch(\"searchValue\")\n watchSearchValue(): void {\n this.filterItems(this.searchValue);\n }\n\n /** Emitted when value is checked/unchecked. Returns id, items. */\n @Event()\n comboboxChange: EventEmitter;\n\n private emitComboboxChange(): void {\n this.comboboxChange.emit({id: this.inputid, items: this.itemsList});\n }\n\n constructor() {\n this.toggleComboBox = this.toggleComboBox.bind(this);\n this.closeFilterItems = this.closeFilterItems.bind(this);\n }\n\n componentWillLoad(): void {\n this.watchItems();\n }\n\n componentWillRender(): void {\n this.selectedCounter = this.itemsList.filter((item) => item.checked).length;\n }\n\n private getControlToListSize(): ListSize {\n switch (this.size) {\n case ControlSize.X_SMALL:\n return ListSize.SMALL;\n case ControlSize.SMALL:\n return ListSize.MEDIUM;\n default:\n return ListSize.LARGE;\n }\n }\n\n private getOptionId(itemId: string): string {\n return `${this.inputid}-option-${itemId}`;\n }\n\n private getCheckAllOptionId(): string {\n return `${this.inputid}-check-all`;\n }\n\n private allOptionsSelected(): boolean {\n return this.selectedCounter === this.itemsList.length;\n }\n\n private hasReachedMaxSelections(): boolean {\n return !!(this.maxcheckableitems && this.selectedCounter >= this.maxcheckableitems);\n }\n\n private handleHeaderKeyDown(e: KeyboardEvent): void {\n if (e.code === KeyboardCode.ENTER && !this.focusedItemId) {\n this.toggleComboBox();\n }\n\n if (!this.isopen || this.hassearch) {\n return;\n }\n\n switch (e.code as KeyboardCode) {\n case KeyboardCode.SPACE:\n case KeyboardCode.ENTER:\n if (this.focusedItemId) {\n e.preventDefault();\n this.checkOption(this.focusedItemId);\n }\n break;\n case KeyboardCode.ESC:\n if (this.focusedItemId) {\n this.focusedItemId = \"\";\n }\n break;\n case KeyboardCode.ARROW_DOWN:\n case KeyboardCode.ARROW_UP:\n this.handleArrowsNavigation(e);\n break;\n }\n }\n\n private handleInputKeyDown(e: KeyboardEvent): void {\n switch (e.code as KeyboardCode) {\n case KeyboardCode.ENTER:\n case KeyboardCode.SPACE:\n if (this.focusedItemId) {\n e.preventDefault();\n this.checkOption(this.focusedItemId);\n break;\n }\n break;\n case KeyboardCode.ARROW_DOWN:\n case KeyboardCode.ARROW_UP:\n this.handleArrowsNavigation(e);\n break;\n case KeyboardCode.ESC:\n if (this.focusedItemId) {\n this.focusedItemId = \"\";\n break;\n }\n this.closeFilterItems();\n break;\n case KeyboardCode.TAB:\n this.focusedItemId = \"\";\n break;\n }\n }\n\n private checkOption(optionId: string): void {\n if (optionId === this.getCheckAllOptionId()) {\n this.itemsList = this.itemsList.map((item: ComboItem) => ({\n ...item,\n checked: !this.allOptionsSelected(),\n }));\n\n this.focusedItemId = this.getCheckAllOptionId();\n } else {\n this.itemsList = this.itemsList.map((i: ComboItem) => {\n if (optionId === this.getOptionId(i.id)) {\n i.checked = !i.checked;\n }\n\n return i;\n });\n }\n\n this.updateRenderItemsList();\n this.emitComboboxChange();\n }\n\n private handleArrowsNavigation(e: KeyboardEvent): void {\n if (![KeyboardCode.ARROW_DOWN, KeyboardCode.ARROW_UP].includes(e.code as KeyboardCode) || !this.isopen) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const currElem = this.focusedItemId ? this.element.shadowRoot.querySelector(`#${this.focusedItemId}`) : null;\n const options = Array.from(this.element.shadowRoot.querySelectorAll('[role=\"option\"]'));\n\n if (!options.length) {\n return;\n }\n\n const currElemIndex = currElem ? options.indexOf(currElem) : null;\n const firstElemIndex = 0;\n const lastElemIndex = options.length - 1;\n\n let nextElem = null;\n if (e.code === KeyboardCode.ARROW_DOWN) {\n nextElem =\n currElemIndex === null ? options[firstElemIndex] : options[currElemIndex + 1] || options[lastElemIndex];\n } else if (e.code === KeyboardCode.ARROW_UP) {\n nextElem =\n currElemIndex === null ? options[lastElemIndex] : options[currElemIndex - 1] || options[firstElemIndex];\n }\n\n this.focusedItemId = nextElem.id;\n nextElem.scrollIntoView({block: \"center\"});\n }\n\n private updateRenderItemsList(): void {\n if (this.searchValue) {\n this.filterItems(this.searchValue);\n } else {\n this.resetRenderItemsList();\n }\n }\n\n private resetRenderItemsList(): void {\n const renderItemsList = [];\n this.itemsList.forEach((item: ComboItem) => {\n renderItemsList.push({...item});\n });\n this.renderItemsList = renderItemsList;\n }\n\n private filterItems(value: string): void {\n if (!value) {\n return this.closeFilterItems();\n }\n\n this.resetRenderItemsList();\n this.renderItemsList = this.renderItemsList.filter((item) => {\n const start = item.name.toUpperCase().indexOf(value.toUpperCase());\n const end = start + value.length;\n const newName =\n item.name.substring(0, start) +\n \"<strong>\" +\n item.name.substring(start, end) +\n \"</strong>\" +\n item.name.substring(end, item.name.length);\n\n item.name = newName;\n\n return start >= 0;\n });\n }\n\n private closeFilterItems(): void {\n this.searchValue = \"\";\n this.resetRenderItemsList();\n }\n\n private toggleComboBox(): void {\n this.isopen = !this.isopen;\n }\n\n private getComboboxA11yAttributes(isZInput: boolean): Record<string, string> {\n const role = \"combobox\";\n const ariaLabel = this.htmlAriaLabel;\n const ariaExpanded = this.isopen ? \"true\" : \"false\";\n const ariaActivedescendant = this.isopen ? this.focusedItemId : \"\";\n const ariaControls = `${this.inputid}_list`;\n\n if (isZInput) {\n return {\n \"role\": role,\n \"aria-label\": ariaLabel,\n \"html-aria-expanded\": ariaExpanded,\n \"html-aria-activedescendant\": ariaActivedescendant,\n \"html-aria-controls\": ariaControls,\n };\n }\n\n return {\n \"role\": role,\n \"aria-label\": ariaLabel,\n \"aria-expanded\": ariaExpanded,\n \"aria-activedescendant\": ariaActivedescendant,\n \"aria-controls\": ariaControls,\n };\n }\n\n private renderHeader(): HTMLDivElement {\n const comboboxA11yAttributes = !this.hassearch ? this.getComboboxA11yAttributes(false) : {};\n\n return (\n <div\n class=\"header\"\n onClick={() => this.toggleComboBox()}\n onKeyDown={(e: KeyboardEvent) => this.handleHeaderKeyDown(e)}\n role=\"button\"\n tabindex={0}\n aria-controls=\"open-combo-data\"\n aria-expanded={this.isopen ? \"true\" : \"false\"}\n {...comboboxA11yAttributes}\n >\n <span\n class=\"body-3\"\n aria-label={\n this.label\n ? `${this.label}${this.selectedCounter > 0 ? ` - ${this.selectedCounter} selezionati` : ``}`\n : undefined\n }\n >\n {this.label}\n <span>{this.selectedCounter > 0 && ` (${this.selectedCounter})`}</span>\n </span>\n <z-icon\n name=\"caret-down\"\n class={this.size}\n />\n </div>\n );\n }\n\n private renderContent(): HTMLDivElement {\n return (\n <div\n id=\"open-combo-data\"\n class=\"open-combo-data\"\n >\n {this.hassearch && this.renderSearchInput()}\n <div\n role=\"listbox\"\n aria-label={this.label}\n aria-multiselectable=\"true\"\n id={`${this.inputid}_list`}\n aria-owns={Array.from(this.element.shadowRoot.querySelectorAll(\"[role='option']\"))\n .map((item) => item.id)\n .join(\" \")}\n >\n {this.renderItems()}\n </div>\n </div>\n );\n }\n\n private renderItems(): HTMLDivElement {\n return (\n <div\n class={this.searchValue && \"search\"}\n tabIndex={-1}\n role=\"presentation\"\n >\n {this.renderList(this.renderItemsList)}\n </div>\n );\n }\n\n private renderItem(item: ComboItem, index: number, length: number): HTMLZListElement {\n const optionId = this.getOptionId(item.id);\n const isDisabled = !item.checked && this.hasReachedMaxSelections();\n\n return (\n <z-list-element\n htmlTabindex={-1}\n dividerType={index !== length - 1 ? ListDividerType.ELEMENT : ListDividerType.NONE}\n size={this.getControlToListSize()}\n role=\"presentation\"\n disabled={!!isDisabled}\n >\n <span\n class=\"option-wrap\"\n role=\"presentation\"\n onClick={() => {\n this.focusedItemId = \"\";\n this.checkOption(optionId);\n }}\n >\n <z-icon\n name={item.checked ? \"checkbox-checked\" : \"checkbox\"}\n class={this.focusedItemId === optionId ? \"focused\" : \"\"}\n />\n <span\n id={optionId}\n role={isDisabled ? \"presentation\" : \"option\"}\n aria-selected={item.checked ? \"true\" : \"false\"}\n aria-label={getPlainText(item.name)}\n innerHTML={item.name}\n />\n </span>\n </z-list-element>\n );\n }\n\n private renderList(items: ComboItem[]): HTMLUListElement {\n if (!items) {\n return;\n }\n if (!items.length && this.searchValue) {\n return this.renderNoSearchResults();\n }\n\n if (this.hasgroupitems) {\n return this.renderGroups(items);\n }\n\n return (\n <ul role=\"presentation\">\n {this.renderCheckAll()}\n {items.map((item, i) => {\n return this.renderItem(item, i, items.length);\n })}\n </ul>\n );\n }\n\n private renderGroups(items: ComboItem[]): HTMLUListElement {\n const newData = items.reduce((group, item, index) => {\n const category = item.category || \"Altra categoria\";\n const zListItem = this.renderItem(item, index, items.length);\n\n group[category] = group[category] ?? [];\n group[category].push(zListItem);\n\n return group;\n }, {});\n\n const listGroups = Object.entries(newData as {[key: string]: HTMLZListElementElement[]}).map(\n ([key, value], index) => {\n return (\n <z-list-group\n size={this.getControlToListSize()}\n divider-type={ListDividerType.ELEMENT}\n ariaLabelledby={`${this.inputid}_list_group_${index}`}\n >\n <span\n class=\"body-3-sb z-list-group-title\"\n slot=\"header-title\"\n id={`${this.inputid}_list_group_${index}`}\n aria-hidden=\"true\"\n >\n {key}\n </span>\n {value.map((item) => item)}\n </z-list-group>\n );\n }\n );\n\n return (\n <ul role=\"presentation\">\n {this.renderCheckAll()}\n {listGroups}\n </ul>\n );\n }\n\n private renderNoSearchResults(): HTMLUListElement {\n return (\n <div class=\"no-results\">\n <span>{this.noresultslabel}</span>\n </div>\n );\n }\n\n private renderSearchInput(): ZInput {\n return (\n <z-input\n htmlid={`${this.inputid}_search`}\n label={this.searchlabel}\n placeholder={this.searchplaceholder}\n htmltitle={this.searchtitle}\n type={this.inputType}\n value={this.searchValue}\n message={false}\n size={this.size}\n html-aria-autocomplete=\"list\"\n {...this.getComboboxA11yAttributes(true)}\n onKeyDown={(e: KeyboardEvent) => this.handleInputKeyDown(e)}\n onInputChange={(e: CustomEvent) => {\n this.searchValue = e.detail.value;\n this.focusedItemId = \"\";\n }}\n />\n );\n }\n\n private renderCheckAll(): HTMLDivElement {\n if (!this.hascheckall || this.searchValue) {\n return;\n }\n\n const optionId = this.getCheckAllOptionId();\n const allChecked = this.allOptionsSelected();\n const isDisabled =\n this.hasReachedMaxSelections() || (this.maxcheckableitems && this.maxcheckableitems < this.itemsList.length);\n\n return (\n <z-list-element\n class=\"check-all-wrapper\"\n role=\"presentation\"\n htmlTabindex={-1}\n dividerType={ListDividerType.ELEMENT}\n dividerColor=\"gray800\"\n size={this.getControlToListSize()}\n disabled={!!isDisabled}\n >\n <span\n class=\"option-wrap\"\n role=\"presentation\"\n onClick={() => this.checkOption(optionId)}\n >\n <z-icon\n name={allChecked ? \"checkbox-checked\" : \"checkbox\"}\n class={this.focusedItemId === optionId ? \"focused\" : \"\"}\n />\n <span\n id={optionId}\n role={isDisabled ? \"presentation\" : \"option\"}\n aria-selected={allChecked ? \"true\" : \"false\"}\n >\n {allChecked ? this.uncheckalltext : this.checkalltext}\n </span>\n </span>\n </z-list-element>\n );\n }\n\n render(): HTMLDivElement {\n return (\n <div\n data-action={`combo-${this.inputid}`}\n class={{open: this.isopen, fixed: this.isfixed, disabled: this.disabled}}\n id={this.inputid}\n >\n {this.renderHeader()}\n {!this.disabled && this.renderContent()}\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["stylesCss","ZAppHeaderStyle0","SUPPORT_INTERSECTION_OBSERVER","IntersectionObserver","ZAppHeader","onStuck","scrollParent","this","sticking","emit","_stuck","setMenuFloatingMode","menuElements","length","forEach","element","open","verticalContext","drawerOpen","onStuckChange","container","stuck","_a","stuckIntersecObserver","observe","_b","unobserve","title","hostElement","querySelector","textContent","trim","parent","offsetParent","document","body","documentElement","window","canShowMenu","enableOffcanvas","isMobile","focusableMenu","find","el","htmlTabindex","openDrawer","index","setTimeout","setFocus","closeDrawer","burgerButton","focus","collectMenuElements","Array","from","querySelectorAll","menuLength","menuWidth","reduce","acc","getBoundingClientRect","width","setupMenuResizeObserver","menuResizeObserver","ResizeObserver","entries","containerWidth","contentBoxSize","inlineSize","hasSlot","slotName","moveFocus","current","receiver","onOffcanvasKeydown","ev","key","KeyboardCode","TAB","closestMenu","target","closest","preventDefault","stopPropagation","closeDrawerButton","shiftKey","filter","menu","pop","manageMenus","targetMenu","containsElement","handleKeydown","ESC","some","elem","contains","currentIndex","indexOf","ARROW_RIGHT","ARROW_DOWN","ARROW_LEFT","ARROW_UP","focusLastItem","renderSeachbar","searchPageUrl","isTablet","h","class","variant","ButtonVariant","SECONDARY","href","icon","size","ControlSize","X_SMALL","value","searchString","placeholder","searchPlaceholder","showSearchButton","searchButtonIconOnly","preventSubmit","onSearchTyping","e","detail","renderProductLogos","Fragment","enableZLogo","alt","name","renderMenuButton","ref","onClick","renderOffcanvas","id","OffCanvasVariant","OVERLAY","transitiondirection","TransitionDirection","RIGHT","onCanvasOpenStatusChanged","onKeyDown","slot","disabled","onSlotchange","renderStuck","enableSearch","constructor","hostRef","entry","isIntersecting","threshold","undefined","bind","componentWillLoad","mobileMediaQuery","matchMedia","Breakpoints","MOBILE","matches","addEventListener","tabletMediaQuery","TABLET","componentDidLoad","disconnectedCallback","disconnect","render","hasTopSubtitle","Host","role","ZButtonStyle0","ZButton","ButtonType","BUTTON","PRIMARY","IconPosition","LEFT","BIG","getAttributes","htmlid","renderIcon","Object","assign","ariaLabel","type","htmlrole","ZDividerStyle0","ZDivider","DividerSize","SMALL","DividerOrientation","HORIZONTAL","orientation","style","backgroundColor","color","ZIconStyle0","ZIcon","selectPathOrPolygon","iconValue","startsWith","d","points","svgAttrs","viewBox","height","iconid","fill","ICONS","COLOR_INDICATOR_ICONS","includes","indicatorColor","ZInputStyle0","ZInput","typingtimeout","randomId","LabelPosition","inputCheckListener","data","InputType","RADIO","checked","isChecked","CHECKBOX","console","warn","emitInputChange","isTyping","emitStartTyping","validity","TEXTAREA","getValidity","inputChange","clearTimeout","timer","emitStopTyping","startTyping","stopTyping","emitInputCheck","inputCheck","emitInputFocus","inputFocus","emitInputBlur","inputBlur","input","getTextAttributes","readonly","required","htmltitle","minlength","maxlength","status","autocomplete","onInput","getNumberAttributes","NUMBER","min","max","step","getPatternAttribute","PASSWORD","TEXT","TEL","SEARCH","URL","EMAIL","pattern","getRoleAttribute","getAriaAttrubutes","expanded","htmlAriaExpanded","controls","htmlAriaControls","htmlAriaAutocomplete","activedescendant","htmlAriaActivedescendant","getFocusBlurAttributes","onFocus","onBlur","renderInputText","attr","hasclearicon","renderLabel","passwordHidden","inputRef","renderIcons","renderMessage","label","htmlFor","renderResetIcon","renderShowHidePassword","hidden","boolean","message","renderTextarea","attributes","handleCheck","renderCheckbox","onChange","after","labelPosition","before","innerHTML","renderRadio","ZInputMessageStyle0","ZInputMessage","statusIcons","success","error","warning","onMessageChange","statusRole","ZListStyle0","ZList","ListSize","MEDIUM","ListType","NONE","setChildrenSizeType","children","host","i","setAttribute","listType","toString","ZListElementStyle0","ZListElement","accessibleFocusHandler","listElementId","toFocus","shadowRoot","getElementById","openElementConfig","accordion","close","ExpandableListButtonAlign","ListDividerType","ExpandableListStyle","ACCORDION","handleClick","handleKeyDown","clickItem","expandable","showInnerContent","event","expandByKey","code","ENTER","accessibleFocus","renderExpandableButton","expandableStyle","renderExpandedContent","renderContent","ORDERED","listElementPosition","UNORDERED","ariaDescendantFocus","clickable","tabIndex","hasTreeItems","tabindex","part","dividerType","ELEMENT","dividerColor","dividerSize","ZListGroupStyle0","ZListGroup","hasHeader","ariaLabelledby","HEADER","ZOffcanvasStyle0","ZOffcanvas","allFocusableElements","previouslyFocusedElement","PUSHCONTENT","getFocusableElements","canvasContent","all","getAttribute","isDisabled","hasAttribute","isHidden","trapFocus","first","last","active","activeElement","stopEvent","handlePageOverflow","overflow","UP","onOpenChanged","canvasOpenStatusChanged","listenerCallback","canvasContainer","removeEventListener","_c","skipAnimation","componentDidRender","connectedCallback","showBackdrop","ZSearchbarStyle0","ZSearchbarStyle1","ZSearchbar","resultsItemsList","items","emitSearchSubmit","searchSubmit","emitSearchTyping","search","searchTyping","emitSearchItemClick","item","searchItemClick","selectedItem","watchItems","getResultsItemsList","watchResultsCount","currResultsCount","resultsCount","watchValue","watchSearchString","watchShowResults","showResults","resizeObserver","getDevice","Device","resultsItems","JSON","parse","getGroupedItems","groupedItems","category","subcategory","push","sortResultsItems","keys","sort","obj","a","b","nameA","toUpperCase","nameB","checkResultsCount","counter","handleStopTyping","handleSubmit","handleOutsideClick","cp","composedPath","searchbar","nodeName","classList","renderInput","val","onStopTyping","onKeyUp","handleEnterKeydSubmit","handleArrowsNavigation","htmlAriaLabel","renderButton","iconProp","buttonLabel","defaultProps","renderResults","autocompleteMinChars","renderResultsList","renderSearchHelper","renderItems","renderShowAllResults","listGroups","values","groupItem","array","listGroupsElements","subindex","subarray","isLast","renderItem","renderItemCategory","currentElement","arrows","list","remove","nextIndex","add","prevIndex","setSelectionRange","divider","onMouseEnter","onMouseLeave","renderItemLabel","tag","text","map","child","replace","RegExp","found","hasDivider","searchHelperLabel","onClickItem","ZTagStyle0","ZTag","hasText"],"sources":["src/components/z-app-header/styles.css?tag=z-app-header&encapsulation=shadow","src/components/z-app-header/index.tsx","src/components/z-button/styles.css?tag=z-button&encapsulation=scoped","src/components/z-button/index.tsx","src/components/z-divider/styles.css?tag=z-divider&encapsulation=scoped","src/components/z-divider/index.tsx","src/components/z-icon/styles.css?tag=z-icon&encapsulation=shadow","src/components/z-icon/index.tsx","src/components/z-input/styles.css?tag=z-input&encapsulation=scoped","src/components/z-input/index.tsx","src/components/z-input-message/styles.css?tag=z-input-message&encapsulation=shadow","src/components/z-input-message/index.tsx","src/components/list/z-list/styles.css?tag=z-list&encapsulation=shadow","src/components/list/z-list/index.tsx","src/components/list/z-list-element/styles.css?tag=z-list-element&encapsulation=shadow","src/components/list/z-list-element/index.tsx","src/components/list/z-list-group/styles.css?tag=z-list-group&encapsulation=shadow","src/components/list/z-list-group/index.tsx","src/components/z-offcanvas/styles.css?tag=z-offcanvas&encapsulation=scoped","src/components/z-offcanvas/index.tsx","src/components/z-searchbar/styles.css?tag=z-searchbar&encapsulation=shadow","src/components/css-components/z-label/styles.css?tag=z-searchbar&encapsulation=shadow","src/components/z-searchbar/index.tsx","src/components/z-tag/styles.css?tag=z-tag&encapsulation=scoped","src/components/z-tag/index.tsx"],"sourcesContent":[":host {\n --app-header-content-max-width: ;\n\n /* Variable to set stuck header and drawer's top offset.\n Useful when something is absolutely positioned above the header. */\n --app-header-top-offset: ;\n\n /* Variable to customize header background color. */\n --app-header-bg: ;\n\n /* Variable to customize text and icon color. */\n --app-header-text-color: ;\n\n /* Variable to customize stuck header background color. */\n --app-header-stucked-bg: ;\n\n /* Variable to customize stuck header's text and icon color. */\n --app-header-stucked-text-color: ;\n\n position: relative;\n display: block;\n box-shadow: var(--shadow-2);\n}\n\n:host,\n* {\n box-sizing: border-box;\n}\n\n.heading-panel {\n /* Title's line height. */\n --title-line-height: 1.333;\n --title-font-size: var(--font-size-6);\n\n position: relative;\n display: flex;\n width: 100%;\n max-width: var(--app-header-content-max-width, 100%);\n flex-direction: column;\n flex-grow: 0;\n flex-shrink: 0;\n align-items: baseline;\n padding: calc(var(--space-unit) * 2);\n margin: 0 auto;\n background: var(--app-header-bg, var(--color-surface01));\n}\n\n:host(:empty) .heading-panel {\n padding: 0;\n}\n\n.heading-container {\n position: relative;\n z-index: 1;\n display: flex;\n width: 100%;\n max-width: 100%;\n flex: 1 auto;\n flex-direction: column;\n justify-content: flex-start;\n}\n\n.heading-panel.has-menubar {\n padding-bottom: 0;\n}\n\n.heading-panel .heading-container {\n flex-direction: column-reverse;\n}\n\n:host([enable-search]) .heading-panel .heading-container {\n flex-direction: column;\n}\n\n:host([enable-search][search-page-url]) .heading-panel .heading-container {\n flex-direction: row;\n}\n\n.heading-title {\n display: flex;\n width: 100%;\n flex-direction: row;\n align-items: flex-start;\n}\n\n.heading-title:not(:last-child) {\n margin-right: var(--space-unit);\n}\n\n.z-logo,\n.search-page-button {\n display: flex;\n height: calc(var(--title-font-size) * var(--title-line-height));\n align-items: center;\n}\n\n.z-logo img {\n height: 24px;\n margin: 0 var(--space-unit) 0 0;\n content: url('data:image/svg+xml,<svg width=\"61\" height=\"32\" viewBox=\"0 0 61 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.9874 32C7.1595 32 0 24.8349 0 16C0 7.16513 7.1595 0 15.9874 0H45.0126C53.8405 0 61 7.16513 61 16C61 24.8349 53.8405 32 45.0126 32H15.9874Z\" fill=\"%23E2011A\"/><path d=\"M58.5435 15.9992C58.5435 23.4743 52.4892 29.5403 45.0129 29.5403C37.5367 29.5403 31.4824 23.4813 31.4824 15.9992C31.4824 8.51701 37.5367 2.45801 45.0129 2.45801C52.4892 2.45801 58.5435 8.51701 58.5435 15.9992Z\" fill=\"white\"/><path d=\"M40.7107 8.01862H49.8976V11.3158L44.139 21.7077H50.0384V24.6457H39.9785V21.4048L45.7371 10.9636H40.7107V8.01862Z\" fill=\"%23E2011A\"/><path d=\"M12.2914 24.6449C10.982 24.6449 10.271 23.8136 10.271 22.6722V7.04565H12.1718V22.9822H13.981V24.6449H12.2914Z\" fill=\"white\"/><path d=\"M25.6461 24.6448C24.2452 24.6448 23.675 23.7853 23.5342 22.6439H23.4145C22.8935 24.1446 21.5841 24.9266 19.8735 24.9266C17.2828 24.9266 15.7622 23.4964 15.7622 21.2137C15.7622 18.931 17.4236 17.6206 20.9928 17.6206H23.4145V16.4088C23.4145 14.6756 22.4641 13.7245 20.5141 13.7245C19.0428 13.7245 18.0642 14.4361 17.4025 15.5563L16.262 14.4854C16.9308 13.175 18.4021 12.0829 20.6126 12.0829C23.5623 12.0829 25.3152 13.6259 25.3152 16.2186V22.9751H26.7162V24.6378H25.6461V24.6448ZM23.4145 21.0799V19.0578H20.8942C18.733 19.0578 17.7545 19.7272 17.7545 20.9108V21.411C17.7545 22.6228 18.7049 23.3132 20.1762 23.3132C22.0558 23.3132 23.4074 22.341 23.4074 21.0799H23.4145Z\" fill=\"white\"/></svg>');\n}\n\n.product-logo {\n display: none;\n}\n\n.product-logo ::slotted([slot=\"product-logo\"]) {\n width: 32px;\n height: 32px;\n margin-right: var(--space-unit);\n}\n\n.product-logo ::slotted([slot=\"product-logo\"]) img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n::slotted([slot=\"title\"]),\n::slotted([slot=\"stucked-title\"]),\n.stucked-title {\n margin: 0;\n color: var(--app-header-text-color, var(--color-default-text));\n font-family: var(--font-family-serif);\n font-weight: var(--font-sb);\n}\n\n::slotted([slot=\"title\"]) {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n font-size: var(--title-font-size);\n -webkit-line-clamp: 2;\n line-clamp: 2;\n line-height: var(--title-line-height);\n text-overflow: ellipsis;\n}\n\n::slotted(a:is([slot=\"title\"], [slot=\"stucked-title\"])) {\n text-decoration: none;\n}\n\n:host([enable-search]) ::slotted([slot=\"title\"]) + * {\n margin-left: calc(var(--space-unit) * 2);\n}\n\n:host([enable-offcanvas]:not([menu-length=\"0\"])) .top-subtitle {\n padding-left: calc(var(--space-unit) * 4 + var(--space-unit));\n}\n\n::slotted([slot=\"top-subtitle\"]) {\n display: -webkit-box;\n overflow: hidden;\n max-width: 80%;\n margin: 0;\n -webkit-box-orient: vertical;\n color: var(--color-default-text);\n font-family: var(--font-family-sans);\n font-size: var(--font-size-2);\n font-style: italic;\n font-weight: var(--font-rg);\n -webkit-line-clamp: 2;\n line-clamp: 2;\n}\n\n.search-page-button {\n margin-left: auto;\n}\n\n.menu-container {\n display: flex;\n flex: 1 auto;\n column-gap: calc(var(--space-unit) * 4);\n}\n\n.menu-container:focus:focus-visible {\n outline: none;\n}\n\n:host([menu-length=\"0\"]) .menu-container,\n.menu-container:empty {\n display: none;\n}\n\n.menu-container ::slotted([open]) {\n position: relative;\n z-index: 3;\n}\n\n.menu-container ::slotted([slot=\"menu\"]:not(:last-child))::after {\n position: absolute;\n top: calc(1.5em / 2); /* half the line-height of the label */\n right: calc(var(--space-unit) * -2);\n width: var(--border-size-small);\n height: 1em;\n background-color: var(--color-default-icon);\n content: \"\";\n font-size: var(--font-size-3);\n transform: translateY(-50%);\n}\n\nz-searchbar {\n z-index: 0;\n display: flex;\n width: 100%;\n align-items: center;\n}\n\n.heading-stuck {\n position: fixed;\n z-index: 20;\n top: var(--app-header-top-offset, 48px);\n left: 0;\n width: 100%;\n max-width: 100%;\n animation: slide-stuck-heading-in 250ms ease-out;\n background: var(--app-header-stucked-bg, var(--color-surface01));\n box-shadow: var(--shadow-2);\n color: var(--app-header-stucked-text-color, var(--color-default-text));\n}\n\n.heading-stuck-content {\n display: flex;\n max-width: var(--app-header-content-max-width, 100%);\n align-items: center;\n padding: var(--space-unit) var(--grid-margin);\n margin: 0 auto;\n}\n\n.heading-stuck .heading-title {\n --title-font-size: var(--font-size-5);\n --title-line-height: 1.4;\n\n overflow: hidden;\n align-items: center;\n}\n\n.heading-stuck .stucked-title {\n overflow: hidden;\n font-size: var(--title-font-size);\n line-height: var(--title-line-height);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.drawer-trigger,\n::slotted([slot=\"menu-button\"]) {\n display: flex;\n height: calc(var(--title-font-size) * var(--title-line-height));\n align-items: center;\n padding: 0;\n border: 0;\n margin-right: var(--space-unit);\n appearance: none;\n background: none;\n border-radius: 0;\n color: inherit;\n cursor: pointer;\n outline: none;\n}\n\n.drawer-trigger:focus:focus-visible z-icon {\n box-shadow: var(--shadow-focus-primary);\n}\n\n.drawer-trigger z-icon {\n --z-icon-width: calc(var(--space-unit) * 4);\n --z-icon-height: calc(var(--space-unit) * 4);\n\n fill: var(--color-default-icon);\n}\n\n.drawer-content {\n display: none;\n}\n\nz-offcanvas {\n --z-offcanvas--top-space: var(--app-header-top-offset);\n}\n\nz-offcanvas[open] .drawer-content {\n display: flex;\n width: 100%;\n flex: 1 auto;\n flex-direction: column;\n}\n\nz-offcanvas[open] .drawer-content ::slotted(z-menu) {\n width: 100%;\n}\n\n.drawer-close {\n --z-icon-width: calc(var(--space-unit) * 4);\n --z-icon-height: calc(var(--space-unit) * 4);\n\n padding: 0;\n border: 0;\n margin: var(--space-unit) 0 calc(var(--space-unit) * 2.5);\n appearance: none;\n background: transparent;\n border-radius: 0;\n cursor: pointer;\n outline: none;\n}\n\n.drawer-close z-icon {\n fill: var(--color-default-icon);\n}\n\n.drawer-close:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n}\n\n@media (max-width: 767px) {\n :host([enable-search]) .heading-panel .heading-container {\n row-gap: calc(var(--space-unit) * 1.5);\n }\n}\n\n/* Tablet breakpoint */\n@media (min-width: 768px) {\n .heading-panel {\n --title-font-size: var(--font-size-9);\n\n padding: calc(var(--space-unit) * 1.5) var(--grid-margin) calc(var(--space-unit) * 1.25);\n }\n\n :host([enable-search][search-page-url]) .heading-panel .heading-container {\n flex-direction: column;\n }\n\n .heading-panel .heading-container {\n flex-direction: column;\n margin-right: auto;\n }\n\n .z-logo img {\n height: 32px;\n }\n\n .product-logo {\n display: flex;\n height: calc(var(--title-font-size) * var(--title-line-height));\n align-items: center;\n }\n\n .has-top-subtitle .z-logo {\n display: none;\n }\n\n .top-subtitle.has-product-logo {\n padding-left: calc(32px + var(--space-unit));\n }\n\n z-searchbar {\n width: 30%;\n height: calc(var(--title-font-size) * var(--title-line-height));\n margin-left: auto;\n }\n\n .menu-container {\n flex: initial;\n }\n\n .menu-container > [role=\"menubar\"] {\n display: contents;\n }\n\n :host(:not([enable-offcanvas])) .menu-container {\n margin-top: calc((var(--space-unit) * 1.75));\n }\n\n :host(:not([enable-offcanvas])) .heading-container .drawer-trigger {\n display: none;\n }\n\n .heading-stuck .heading-title {\n --title-font-size: var(--font-size-8);\n --title-line-height: 1.5;\n }\n\n .heading-stuck-content {\n padding: 6px var(--grid-margin);\n }\n\n :host(:not([enable-offcanvas], [menu-length=\"0\"])) {\n padding-left: 0;\n }\n}\n\n/* Desktop breakpoint */\n@media (min-width: 1152px) {\n z-searchbar {\n min-width: calc(var(--space-unit) * 45);\n }\n}\n\n@keyframes slide-stuck-heading-in {\n 0% {\n transform: translate3d(0, -100%, 0);\n }\n\n 100% {\n transform: none;\n }\n}\n","import {Component, Element, Event, EventEmitter, Fragment, Host, Listen, Prop, State, Watch, h} from \"@stencil/core\";\nimport {ButtonVariant, ControlSize, KeyboardCode, OffCanvasVariant, TransitionDirection} from \"../../beans\";\nimport {Breakpoints} from \"../../constants/breakpoints\";\nimport {containsElement} from \"../../utils/utils\";\n\nconst SUPPORT_INTERSECTION_OBSERVER = typeof IntersectionObserver !== \"undefined\";\n\n/**\n * @slot menu-button - Slot for a custom menu button. It will replace the default burger icon.\n * @slot title - Slot for the main title\n * @slot top-subtitle - Slot for the top subtitle. It will not appear in stuck header.\n * @slot stucked-title - Title for the stuck header. By default it uses the text from the `title` slot.\n * @slot product-logo - To insert the product logo, it should be used with an img tag.\n * @cssprop --app-header-content-max-width - Use it to set header's content max width. Useful when the project use a fixed width layout. Defaults to `100%`.\n * @cssprop --app-header-top-offset - Top offset for the stuck header. Useful when there are other fixed elements above the header. Defaults to `48px` (the height of the main topbar).\n * @cssprop --app-header-bg - Header background color. Defaults to `--color-surface01`.\n * @cssprop --app-header-text-color - Header text color. Defaults to `--color-default-text`.\n * @cssprop --app-header-stucked-bg - Stuck header background color. Defaults to `--color-surface01`.\n * @cssprop --app-header-stucked-text-color - Stuck header text color. Defaults to `--color-default-text`.\n */\n@Component({\n tag: \"z-app-header\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZAppHeader {\n @Element() hostElement: HTMLZAppHeaderElement;\n\n /**\n * Stuck mode for the header.\n * You can programmatically set it using an IntersectionObserver.\n */\n @Prop({reflect: true})\n stuck = false;\n\n /**\n * When enabled, the menu bar is not displayed and a burger icon appears to open the offcanvas menu. Automatically enabled on mobile and when the menu items overflow the container.\n */\n @Prop({reflect: true, mutable: true})\n enableOffcanvas = false;\n\n /**\n * Enable the search bar.\n */\n @Prop({reflect: true})\n enableSearch = false;\n\n /**\n * Placeholder text for the search bar.\n */\n @Prop()\n searchPlaceholder = \"Cerca\";\n\n /**\n * Search string for the search bar.\n */\n @Prop({mutable: true})\n searchString = \"\";\n\n /**\n * Url to the search page.\n * Set this prop and `enableSearch` to show a link-button on mobile and tablet viewports, instead of the normal searchbar.\n * The link will also appear on the sticky header.\n */\n @Prop()\n searchPageUrl: string;\n\n /**\n * Enable laZ logo.\n */\n @Prop({reflect: true})\n enableZLogo = true;\n\n /**\n * The opening state of the drawer.\n */\n @Prop({mutable: true})\n drawerOpen = false;\n\n /**\n * Emitted when the `stuck` state of the header changes\n */\n @Event()\n sticking: EventEmitter;\n\n /**\n * The stuck state of the bar.\n */\n @State()\n private _stuck = false;\n\n /**\n * Current count of menu items.\n */\n @State()\n private menuLength: number;\n\n @State()\n private isMobile = true;\n\n @State()\n private isTablet = false;\n\n private container?: HTMLDivElement;\n\n private menuElements: HTMLZMenuElement[] = [];\n\n private menuWidth: number;\n\n private closeDrawerButton: HTMLButtonElement;\n\n private burgerButton: HTMLButtonElement;\n\n private menuResizeObserver: ResizeObserver;\n\n private stuckIntersecObserver?: IntersectionObserver = SUPPORT_INTERSECTION_OBSERVER\n ? new IntersectionObserver(\n ([entry]) => {\n this._stuck = !entry.isIntersecting;\n },\n {threshold: 0.5}\n )\n : undefined;\n\n @Watch(\"_stuck\")\n onStuck(): void {\n const scrollParent = this.scrollParent;\n if (!scrollParent) {\n return;\n }\n\n this.sticking.emit(this._stuck);\n }\n\n @Watch(\"drawerOpen\")\n setMenuFloatingMode(): void {\n if (this.menuElements.length === 0) {\n return;\n }\n\n this.menuElements.forEach((element) => {\n element.open = false;\n element.verticalContext = this.drawerOpen;\n });\n }\n\n @Watch(\"stuck\")\n onStuckChange(): void {\n if (!this.container) {\n return;\n }\n\n if (this.stuck) {\n this.stuckIntersecObserver?.observe(this.container);\n } else {\n this._stuck = false;\n this.stuckIntersecObserver?.unobserve(this.container);\n }\n }\n\n private get title(): string {\n return this.hostElement.querySelector('[slot=\"title\"]')?.textContent.trim();\n }\n\n private get scrollParent(): Window | Element {\n const parent = this.hostElement.offsetParent;\n if (parent === document.body || parent === document.documentElement) {\n return window;\n }\n\n return parent;\n }\n\n private get canShowMenu(): boolean {\n return !this.enableOffcanvas && this.menuElements.length > 0 && !this.isMobile && !this.drawerOpen;\n }\n\n private get focusableMenu(): HTMLZMenuElement {\n return this.menuElements.find((el) => el.htmlTabindex === 0);\n }\n\n private openDrawer(): void {\n this.drawerOpen = true;\n this.menuElements.forEach((element, index) => (element.htmlTabindex = index === 0 ? 0 : -1));\n setTimeout(() => this.menuElements[0].setFocus(), 400); /* wait for the 400ms offcanvas transition */\n }\n\n private closeDrawer(): void {\n this.drawerOpen = false;\n setTimeout(() => this.burgerButton.focus(), 100);\n }\n\n private collectMenuElements(): void {\n this.menuElements = Array.from(this.hostElement.querySelectorAll('[slot=\"menu\"]'));\n this.menuElements.forEach((element, index) => (element.htmlTabindex = index === 0 ? 0 : -1));\n this.menuLength = this.menuElements.length;\n if (!this.enableOffcanvas) {\n this.menuWidth =\n this.menuElements.reduce((acc, el) => acc + el.getBoundingClientRect().width, 0) +\n (this.menuLength - 1) * 32 /* 32px is the gap between each menu item */;\n }\n this.setMenuFloatingMode();\n }\n\n /** Automatically use offcanvas mode when the menubar doesn't fit in the header. */\n private setupMenuResizeObserver(): void {\n if (this.enableOffcanvas) {\n return;\n }\n\n this.menuResizeObserver = new ResizeObserver((entries) => {\n if (this.isMobile) {\n this.enableOffcanvas = true;\n\n return;\n }\n\n const containerWidth = entries[0].contentBoxSize[0].inlineSize;\n if (this.menuWidth === 0) {\n return;\n }\n\n if (this.menuWidth > containerWidth && !this.enableOffcanvas) {\n this.enableOffcanvas = true;\n } else if (this.menuWidth <= containerWidth && this.enableOffcanvas) {\n this.enableOffcanvas = false;\n }\n });\n this.menuResizeObserver.observe(this.container);\n }\n\n private hasSlot(slotName: string): boolean {\n return this.hostElement.querySelector(`[slot=\"${slotName}\"]`) !== null;\n }\n\n private moveFocus(current: HTMLZMenuElement, receiver: HTMLZMenuElement): void {\n current.htmlTabindex = -1;\n receiver.setFocus();\n }\n\n private onOffcanvasKeydown(ev: KeyboardEvent): void {\n if (ev.key !== KeyboardCode.TAB || !this.drawerOpen) {\n return;\n }\n\n const closestMenu = (ev.target as HTMLElement).closest(\"z-menu\");\n if (closestMenu) {\n ev.preventDefault();\n ev.stopPropagation();\n // restore tabindex to the zmenu containing the focused element\n closestMenu.htmlTabindex = 0;\n this.closeDrawerButton.focus();\n } else if (ev.target === this.closeDrawerButton) {\n ev.preventDefault();\n ev.stopPropagation();\n if (ev.shiftKey) {\n // give focus to the last open menu if any or the last menu otherwhise\n (this.menuElements.filter((menu) => menu.open).pop() ?? this.menuElements[this.menuLength - 1]).setFocus();\n } else {\n // give focus to the first open menu if any or the first menu otherwhise\n (this.menuElements.find((menu) => menu.open) ?? this.menuElements[0]).setFocus();\n }\n }\n }\n\n /** Close each menu except the one receiving focus/click, if any */\n @Listen(\"focusin\", {target: \"document\", passive: true})\n @Listen(\"click\", {target: \"document\", passive: true})\n manageMenus(ev: FocusEvent | PointerEvent): void {\n const targetMenu = this.menuElements.find((menu) => containsElement(menu, ev.target as Element));\n if (targetMenu) {\n this.menuElements.forEach((menu) => {\n if (menu === targetMenu) {\n return;\n }\n\n menu.htmlTabindex = -1;\n if (!this.drawerOpen) {\n menu.open = false;\n }\n });\n } else if (!this.drawerOpen) {\n this.menuElements.forEach((menu) => {\n menu.open = false;\n });\n }\n }\n\n @Listen(\"keydown\", {passive: true})\n handleKeydown(ev: KeyboardEvent): void {\n if (ev.key === KeyboardCode.ESC && this.drawerOpen) {\n this.closeDrawer();\n\n return;\n }\n\n if (!this.menuElements.some((elem) => elem.contains(ev.target as HTMLElement))) {\n return;\n }\n\n const current = this.focusableMenu;\n const currentIndex = this.menuElements.indexOf(current);\n let receiver: HTMLZMenuElement;\n if (\n (ev.key === KeyboardCode.ARROW_RIGHT && !current.verticalContext) ||\n (ev.key === KeyboardCode.ARROW_DOWN && current.verticalContext)\n ) {\n receiver = this.menuElements[currentIndex + 1] ?? this.menuElements[0];\n } else if (\n (ev.key === KeyboardCode.ARROW_LEFT && !current.verticalContext) ||\n (ev.key === KeyboardCode.ARROW_UP && current.verticalContext)\n ) {\n receiver = this.menuElements[currentIndex - 1] ?? this.menuElements[this.menuLength - 1];\n }\n if (!receiver) {\n return;\n }\n\n if (ev.key === KeyboardCode.ARROW_UP && current.verticalContext) {\n if (receiver.open) {\n current.htmlTabindex = -1;\n receiver.focusLastItem();\n\n return;\n }\n }\n\n this.moveFocus(current, receiver);\n }\n\n private renderSeachbar(): HTMLZButtonElement | HTMLZSearchbarElement | undefined {\n if (this.isMobile && !this.searchPageUrl && this._stuck) {\n return;\n }\n\n if (this.searchPageUrl && (this.isMobile || this.isTablet)) {\n return (\n <z-button\n class=\"search-page-button\"\n variant={ButtonVariant.SECONDARY}\n href={this.searchPageUrl}\n icon=\"search\"\n size={ControlSize.X_SMALL}\n />\n );\n }\n\n return (\n <z-searchbar\n value={this.searchString}\n placeholder={this.searchPlaceholder}\n showSearchButton={true}\n searchButtonIconOnly={this.isMobile || this.isTablet}\n size={ControlSize.X_SMALL}\n variant={ButtonVariant.SECONDARY}\n preventSubmit={this.searchString.length < 3}\n onSearchTyping={(e) => (this.searchString = e.detail)}\n />\n );\n }\n\n private renderProductLogos(): HTMLElement | null {\n return (\n <Fragment>\n {this.enableZLogo && (\n <span class=\"z-logo\">\n <img alt=\"Logo Zanichelli\" />\n </span>\n )}\n {this.hostElement.querySelector(\"[slot='product-logo']\") && (\n <span class=\"product-logo\">\n <slot name=\"product-logo\" />\n </span>\n )}\n </Fragment>\n );\n }\n\n private renderMenuButton(): HTMLButtonElement {\n return (\n this.menuLength > 0 &&\n (this.enableOffcanvas || this._stuck || this.isMobile) && (\n <button\n ref={(el) => (this.burgerButton = el as HTMLButtonElement)}\n class=\"drawer-trigger\"\n aria-label=\"Apri menu\"\n aria-haspopup=\"menu\"\n aria-expanded={`${this.drawerOpen}`}\n aria-controls=\"offcanvas-menu\"\n onClick={this.openDrawer}\n >\n <z-icon name=\"burger-menu\" />\n </button>\n )\n );\n }\n\n private renderOffcanvas(): HTMLZOffcanvasElement {\n return (\n <z-offcanvas\n id=\"offcanvas-menu\"\n variant={OffCanvasVariant.OVERLAY}\n transitiondirection={TransitionDirection.RIGHT}\n open={this.drawerOpen}\n onCanvasOpenStatusChanged={(ev) => (this.drawerOpen = ev.detail)}\n onKeyDown={this.onOffcanvasKeydown}\n >\n <div slot=\"canvasContent\">\n <button\n ref={(el) => (this.closeDrawerButton = el)}\n class=\"drawer-close\"\n aria-label=\"Chiudi menu\"\n onClick={this.closeDrawer}\n aria-hidden={`${!this.drawerOpen}`}\n disabled={!this.drawerOpen}\n >\n <z-icon name=\"close\" />\n </button>\n\n <div\n class=\"drawer-content\"\n aria-hidden={`${!this.drawerOpen}`}\n >\n <slot\n name=\"menu\"\n onSlotchange={this.collectMenuElements}\n />\n </div>\n </div>\n </z-offcanvas>\n );\n }\n\n private renderStuck(): HTMLElement {\n return (\n <div class=\"heading-stuck\">\n <div class=\"heading-stuck-content\">\n {this.renderMenuButton()}\n <div class=\"heading-title\">\n {this.renderProductLogos()}\n <div class=\"stucked-title\">\n <slot name=\"stucked-title\">{this.title}</slot>\n </div>\n </div>\n {this.enableSearch && this.renderSeachbar()}\n </div>\n </div>\n );\n }\n\n constructor() {\n this.openDrawer = this.openDrawer.bind(this);\n this.closeDrawer = this.closeDrawer.bind(this);\n this.collectMenuElements = this.collectMenuElements.bind(this);\n this.onOffcanvasKeydown = this.onOffcanvasKeydown.bind(this);\n }\n\n componentWillLoad(): void {\n this.collectMenuElements();\n\n // mobile and tablet media queries listeners\n const mobileMediaQuery = window.matchMedia(`(max-width: ${Breakpoints.MOBILE}px)`);\n this.isMobile = mobileMediaQuery.matches;\n mobileMediaQuery.addEventListener(\"change\", (e) => (this.isMobile = e.matches));\n const tabletMediaQuery = window.matchMedia(\n `(min-width: ${Breakpoints.MOBILE + 1}px) and (max-width: ${Breakpoints.TABLET}px)`\n );\n this.isTablet = tabletMediaQuery.matches;\n tabletMediaQuery.addEventListener(\"change\", (e) => (this.isTablet = e.matches));\n }\n\n componentDidLoad(): void {\n this.onStuckChange();\n this.setupMenuResizeObserver();\n }\n\n disconnectedCallback(): void {\n this.menuResizeObserver?.disconnect();\n }\n\n render(): HTMLZAppHeaderElement {\n const hasTopSubtitle = this.hasSlot(\"top-subtitle\");\n\n return (\n <Host menu-length={this.menuLength}>\n <div\n class={{\"heading-panel\": true, \"has-menubar\": this.menuLength > 0 && !this.enableOffcanvas}}\n ref={(el) => (this.container = el)}\n >\n <div class={{\"heading-container\": true, \"has-top-subtitle\": hasTopSubtitle}}>\n {((!this.enableSearch && this.isMobile) || !this.isMobile) && (\n <div class={{\"top-subtitle\": true, \"has-product-logo\": hasTopSubtitle && this.hasSlot(\"product-logo\")}}>\n <slot name=\"top-subtitle\" />\n </div>\n )}\n <div class=\"heading-title\">\n <slot name=\"menu-button\">{this.renderMenuButton()}</slot>\n {!this._stuck && this.renderProductLogos()}\n <slot name=\"title\" />\n {this.enableSearch && !this.isMobile && this.renderSeachbar()}\n </div>\n {this.enableSearch && this.isMobile && this.renderSeachbar()}\n </div>\n\n <nav\n class=\"menu-container\"\n aria-label={this.title || undefined}\n >\n {this.canShowMenu && (\n <div\n role=\"menubar\"\n aria-label={this.title || undefined}\n >\n <slot\n name=\"menu\"\n onSlotchange={this.collectMenuElements}\n />\n </div>\n )}\n </nav>\n </div>\n {this.renderOffcanvas()}\n {this._stuck && this.renderStuck()}\n </Host>\n );\n }\n}\n",":host {\n display: inline-block;\n\n --z-icon-width: 16px;\n --z-icon-height: 16px;\n --z-icon-right-margin: 0;\n --z-icon-left-margin: 0;\n}\n\n:host([disabled]:not([disabled=\"false\"])) {\n pointer-events: none;\n}\n\n:host .z-button--container {\n display: inline-flex;\n width: 100%;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n padding: 0;\n border-width: var(--border-size-medium);\n border-style: solid;\n border-radius: var(--border-radius);\n column-gap: var(--space-unit);\n cursor: pointer;\n fill: currentcolor;\n font-family: var(--font-family-sans);\n font-size: 14px;\n font-weight: var(--font-sb);\n letter-spacing: 0.3px;\n line-height: 1;\n outline: none;\n text-decoration: none;\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n:host .z-button--container:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n}\n\n:host .z-button--container.z-button--has-text {\n min-width: calc(var(--space-unit) * 8);\n padding: 0 calc(var(--space-unit) * 2);\n}\n\n:host([icon-position=\"right\"]) .z-button--container.z-button--has-text {\n flex-direction: row-reverse;\n}\n\n:host([size=\"big\"]) .z-button--container {\n min-width: 44px;\n height: 44px;\n}\n\n:host([size=\"small\"]) .z-button--container {\n min-width: 36px;\n height: 36px;\n}\n\n:host([size=\"x-small\"]) .z-button--container {\n min-width: 32px;\n height: 32px;\n}\n\n:host([variant=\"primary\"]) .z-button--container {\n border-color: var(--color-primary01);\n background-color: var(--color-primary01);\n color: var(--color-text-inverse);\n}\n\n@media (hover: hover) {\n :host([variant=\"primary\"]) .z-button--container:hover {\n border-color: var(--color-hover-primary);\n background-color: var(--color-hover-primary);\n color: var(--color-text-inverse);\n }\n}\n\n:host([variant=\"primary\"]) .z-button--container:active {\n border-color: var(--color-pressed-primary);\n background-color: var(--color-pressed-primary);\n box-shadow: var(--shadow-2);\n color: var(--color-text-inverse);\n}\n\n:host([variant=\"primary\"][disabled]:not([disabled=\"false\"])) .z-button--container {\n border-color: var(--color-disabled01);\n background-color: var(--color-disabled01);\n color: var(--color-disabled03);\n}\n\n:host([variant=\"secondary\"]) .z-button--container {\n border-color: var(--color-primary01);\n background-color: var(--color-button-secondary);\n color: var(--color-primary01);\n}\n\n@media (hover: hover) {\n :host([variant=\"secondary\"]) .z-button--container:hover {\n border-color: var(--color-hover-primary);\n background-color: var(--color-button-secondary);\n color: var(--color-hover-primary);\n }\n}\n\n:host([variant=\"secondary\"]) .z-button--container:active {\n border-color: var(--color-pressed-primary);\n background-color: var(--color-button-secondary);\n box-shadow: var(--shadow-2);\n color: var(--color-pressed-primary);\n}\n\n:host([variant=\"secondary\"][disabled]:not([disabled=\"false\"])) .z-button--container {\n border-color: var(--color-disabled01);\n background-color: var(--color-button-secondary);\n color: var(--color-disabled03);\n}\n\n:host([variant=\"tertiary\"]) .z-button--container {\n border-color: var(--color-primary02);\n background-color: var(--color-primary02);\n color: var(--color-primary01);\n}\n\n@media (hover: hover) {\n :host([variant=\"tertiary\"]) .z-button--container:hover {\n border-color: var(--color-primary03);\n background-color: var(--color-primary03);\n color: var(--color-hover-primary);\n }\n}\n\n:host([variant=\"tertiary\"]) .z-button--container:focus:focus-visible {\n border-color: var(--color-primary02);\n background-color: var(--color-primary02);\n color: var(--color-primary01);\n}\n\n:host([variant=\"tertiary\"]) .z-button--container:active {\n border-color: var(--color-primary02);\n background-color: var(--color-primary02);\n box-shadow: var(--shadow-2);\n color: var(--color-primary01);\n}\n\n:host([variant=\"tertiary\"][disabled]:not([disabled=\"false\"])) .z-button--container {\n border-color: var(--color-disabled01);\n background-color: var(--color-disabled01);\n color: var(--color-disabled03);\n}\n","import {Component, Element, Prop, h} from \"@stencil/core\";\nimport {JSXBase} from \"@stencil/core/internal\";\nimport {ButtonSize, ButtonType, ButtonVariant, ControlSize, IconPosition} from \"../../beans\";\n\n/**\n * @slot - button label\n */\n@Component({\n tag: \"z-button\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZButton {\n @Element() hostElement: HTMLZButtonElement;\n\n /** defines a string value that labels the internal interactive element. Used for accessibility. */\n @Prop()\n ariaLabel: string | undefined = undefined;\n\n /**\n * **Deprecated:** Use `htmlrole` instead.\n * @deprecated This prop has been deprecated in favor of `htmlrole` for better accessibility.\n */\n @Prop()\n role = \"\";\n\n /** defines role attribute, used for accessibility. */\n @Prop()\n htmlrole?: string;\n\n /** HTML <a> href attribute. If it is set, it renders an HTML <a> tag. */\n @Prop()\n href?: string;\n\n /** HTML a target attribute. */\n @Prop()\n target?: string;\n\n /** Identifier, should be unique. */\n @Prop()\n htmlid?: string;\n\n /** HTML button name attribute. */\n @Prop()\n name?: string;\n\n /** HTML button disabled attribute. */\n @Prop({reflect: true})\n disabled?: boolean = false;\n\n /** HTML button type attribute. */\n @Prop()\n type?: ButtonType = ButtonType.BUTTON;\n\n /** Graphical variant: `primary`, `secondary`, `tertiary`. Defaults to `primary`. */\n @Prop({reflect: true})\n variant?: ButtonVariant = ButtonVariant.PRIMARY;\n\n /** `z-icon` name to use (optional). */\n @Prop()\n icon?: string;\n\n /** the button icon position. Defaults to `left` */\n @Prop({reflect: true})\n iconPosition?: IconPosition = IconPosition.LEFT;\n\n /** Available sizes: `big`, `small` and `x-small`. Defaults to `big`. */\n @Prop({reflect: true})\n size?: ButtonSize | ControlSize = ControlSize.BIG;\n\n private getAttributes(): JSXBase.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement> {\n return {\n id: this.htmlid,\n class: {\n \"z-button--container\": true,\n \"z-button--has-text\": !!this.hostElement.textContent.trim(),\n },\n };\n }\n\n private renderIcon(): JSX.Element | undefined {\n return this.icon && <z-icon name={this.icon} />;\n }\n\n render(): HTMLAnchorElement | HTMLButtonElement {\n if (this.href) {\n return (\n <a\n {...this.getAttributes()}\n aria-label={this.ariaLabel || undefined}\n href={this.href}\n target={this.target}\n >\n {this.renderIcon()}\n <slot />\n </a>\n );\n }\n\n return (\n <button\n {...this.getAttributes()}\n aria-label={this.ariaLabel || undefined}\n name={this.name}\n type={this.type}\n disabled={this.disabled}\n role={this.htmlrole || this.role || undefined}\n >\n {this.renderIcon()}\n <slot />\n </button>\n );\n }\n}\n",":host {\n display: block;\n padding: 0;\n margin: 0;\n}\n\n:host.divider-horizontal {\n width: 100%;\n}\n\n:host.divider-vertical {\n height: 100%;\n}\n\n:host.divider-small.divider-horizontal {\n height: var(--border-size-small);\n}\n\n:host.divider-medium.divider-horizontal {\n height: var(--border-size-medium);\n}\n\n:host.divider-large.divider-horizontal {\n height: var(--border-size-large);\n}\n\n:host.divider-small.divider-vertical {\n width: var(--border-size-small);\n}\n\n:host.divider-medium.divider-vertical {\n width: var(--border-size-medium);\n}\n\n:host.divider-large.divider-vertical {\n width: var(--border-size-large);\n}\n","import {Component, Host, Prop, h} from \"@stencil/core\";\nimport {DividerOrientation, DividerSize} from \"../../beans\";\n@Component({\n tag: \"z-divider\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZDivider {\n /** [optional] Divider size */\n @Prop()\n size?: DividerSize = DividerSize.SMALL;\n\n /** [optional] Divider color */\n @Prop()\n color?: string = \"gray200\";\n\n /** [optional] Divider orintation */\n @Prop()\n orientation?: DividerOrientation = DividerOrientation.HORIZONTAL;\n\n render(): HTMLZDividerElement {\n return (\n <Host\n class={`divider-${this.size} divider-${this.orientation}`}\n style={{backgroundColor: `var(--${this.color})`}}\n />\n );\n }\n}\n",":host {\n margin-right: var(--z-icon-right-margin, 0);\n margin-left: var(--z-icon-left-margin, 0);\n line-height: 0;\n vertical-align: middle;\n}\n\n.icon-wrapper {\n position: relative;\n z-index: 0;\n display: block;\n}\n\nsvg:not([width]) {\n width: var(--z-icon-width, 1.125rem);\n}\n\nsvg:not([height]) {\n height: var(--z-icon-height, 1.125rem);\n}\n\nsvg.color-indicator {\n position: absolute;\n z-index: -1;\n bottom: 0;\n left: 0;\n}\n","import {Component, Host, Prop, h} from \"@stencil/core\";\nimport {COLOR_INDICATOR_ICONS, ICONS} from \"../../constants/iconset\";\n\n/**\n * Component to render an SVG icon from the internal icon set, selected by `name`.\n * This component automatically recognizes icons that have an indicator (e.g. `bg-color`, `font-color`, etc.), that can be filled with a custom color via the `indicatorColor` prop.\n */\n@Component({\n tag: \"z-icon\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZIcon {\n /** Icon name */\n @Prop()\n name: string;\n\n /** Icon height (optional) */\n @Prop()\n height?: number | string;\n\n /** Icon width (optional) */\n @Prop()\n width?: number | string;\n\n /** HTML `id` attribute (optional) */\n @Prop()\n iconid?: string;\n\n /** Name of the CSS color token to use for the icon fill color (e.g. `blue500`). */\n @Prop()\n fill?: string;\n\n /**\n * Color to use to fill the icon's color indicator, if it has one.\n * Can be any valid value for the `fill` svg attribute.\n * If the icon passed through the `name` prop doesn't have a color indicator, this prop has no effect.\n */\n @Prop()\n indicatorColor?: string;\n\n /**\n * Selects either a `<path>` or `<polygon>` element based on the format of the icon data.\n * @param iconValue The SVG path data or polygon points from the ICONS set.\n */\n private selectPathOrPolygon(iconValue: string): SVGPathElement | SVGPolygonElement {\n if (iconValue?.startsWith(\"M\")) {\n return <path d={iconValue}></path>;\n }\n\n return <polygon points={iconValue}></polygon>;\n }\n\n render(): SVGElement {\n const svgAttrs = {\n viewBox: \"0 0 1000 1000\",\n width: this.width,\n height: this.height,\n };\n\n return (\n <Host aria-hidden=\"true\">\n <div class=\"icon-wrapper\">\n <svg\n id={this.iconid || undefined}\n fill={this.fill ? `var(--${this.fill})` : undefined}\n {...svgAttrs}\n >\n {this.selectPathOrPolygon(ICONS[this.name])}\n </svg>\n {COLOR_INDICATOR_ICONS.includes(this.name) && (\n <svg\n class=\"color-indicator\"\n fill={this.indicatorColor || \"#FFFFFF00\"}\n {...svgAttrs}\n >\n {this.selectPathOrPolygon(ICONS[\"picker-color\"])}\n </svg>\n )}\n </div>\n </Host>\n );\n }\n}\n","@import \"styles-general.css\";\n@import \"styles-text.css\";\n@import \"styles-textarea.css\";\n@import \"styles-checkbox-radio.css\";\n","import {Component, Element, Event, EventEmitter, Listen, Method, Prop, State, h} from \"@stencil/core\";\nimport {Fragment, Host, JSXBase} from \"@stencil/core/internal\";\nimport {ControlSize, InputStatus, InputType, LabelPosition} from \"../../beans\";\nimport {boolean, randomId} from \"../../utils/utils\";\n\n@Component({\n tag: \"z-input\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZInput {\n @Element() hostElement: HTMLZInputElement;\n\n /** the id of the input element */\n @Prop()\n htmlid = `id-${randomId()}`;\n\n /** input types */\n @Prop()\n type: InputType;\n\n /** the input name */\n @Prop()\n name?: string;\n\n /** the input label */\n @Prop()\n label?: string;\n\n /** the input aria-label */\n @Prop()\n ariaLabel = \"\";\n\n /** the input aria-expaded: available for text, password, number, email */\n @Prop()\n htmlAriaExpanded = \"\";\n\n /** the input aria-controls (optional): available for text, password, number, email */\n @Prop()\n htmlAriaControls?: string;\n\n /** the input aria-autocomplete (optional): available for text, password, number, email */\n @Prop()\n htmlAriaAutocomplete?: string;\n\n /** the input aria-activedescendant (optional): available for text, password, number, email */\n @Prop()\n htmlAriaActivedescendant?: string;\n\n /** the input value */\n @Prop({mutable: true})\n value?: string;\n\n /** the input is disabled */\n @Prop({reflect: true})\n disabled?: boolean = false;\n\n /** the input is readonly */\n @Prop()\n readonly?: boolean = false;\n\n /** the input is required (optional): available for text, password, number, email, textarea, checkbox */\n @Prop()\n required?: boolean = false;\n\n /** checked: available for checkbox, radio */\n @Prop({mutable: true})\n checked?: boolean = false;\n\n /** the input placeholder (optional) */\n @Prop()\n placeholder?: string;\n\n /** the input html title (optional) */\n @Prop()\n htmltitle?: string;\n\n /** the input status (optional): available for text, password, number, email, textarea */\n @Prop()\n status?: InputStatus;\n\n /** input helper message (optional): available for text, password, number, email, textarea - if set to `false` message won't be displayed */\n @Prop()\n message?: string | boolean = true;\n\n /** the input label position: available for checkbox, radio */\n @Prop()\n labelPosition?: LabelPosition = LabelPosition.RIGHT;\n\n /** the input has autocomplete option (optional): available for text, password, number, email */\n @Prop()\n autocomplete?: string;\n\n /** the input role */\n @Prop()\n role = \"\";\n\n /** render clear icon when typing (optional): available for text */\n @Prop()\n hasclearicon?: boolean = true;\n\n /** render icon (optional): available for text */\n @Prop()\n icon?: string;\n\n /** min number value (optional): available for number */\n @Prop()\n min?: number;\n\n /** Min length value (optional): available for text */\n @Prop()\n minlength?: number;\n\n /** max number value (optional): available for number */\n @Prop()\n max?: number;\n\n /** Max length value (optional): available for text */\n @Prop()\n maxlength?: number;\n\n /** step number value (optional): available for number */\n @Prop()\n step?: number;\n\n /** pattern value (optional): available for tel, text, search, url, email, password*/\n @Prop()\n pattern?: string;\n\n /** Available sizes: `big`, `small` and `x-small`. Defaults to `big`. */\n @Prop({reflect: true})\n size?: ControlSize = ControlSize.BIG;\n\n @State()\n isTyping = false;\n\n @State()\n passwordHidden = true;\n\n private timer;\n\n private typingtimeout = 300;\n\n private inputRef: HTMLInputElement;\n\n @Listen(\"inputCheck\", {target: \"document\"})\n inputCheckListener(e: CustomEvent): void {\n const data = e.detail;\n switch (this.type) {\n case InputType.RADIO:\n if (data.type === InputType.RADIO && data.name === this.name && data.id !== this.htmlid) {\n this.checked = false;\n }\n break;\n }\n }\n\n /** get checked status */\n @Method()\n async isChecked(): Promise<boolean> {\n switch (this.type) {\n case InputType.CHECKBOX:\n case InputType.RADIO:\n return this.checked;\n default:\n console.warn(\"`isChecked` method is only available for type `checkbox` and `radio`\");\n\n return false;\n }\n }\n\n /** Emitted on input value change, returns value, validity */\n @Event()\n inputChange: EventEmitter;\n\n private emitInputChange(value: string): void {\n if (!this.isTyping) {\n this.emitStartTyping();\n }\n\n let validity: ValidityState;\n if (this.type === InputType.TEXTAREA) {\n validity = this.getValidity(\"textarea\");\n } else {\n validity = this.getValidity(\"input\");\n }\n this.value = value;\n this.inputChange.emit({value, validity});\n\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.emitStopTyping(this.value, validity);\n }, this.typingtimeout);\n }\n\n /** Emitted when user starts typing */\n @Event()\n startTyping: EventEmitter;\n\n private emitStartTyping(): void {\n this.isTyping = true;\n this.startTyping.emit();\n }\n\n /** Emitted when user stops typing, returns value, validity */\n @Event()\n stopTyping: EventEmitter;\n\n private emitStopTyping(value: string, validity: ValidityState): void {\n this.isTyping = false;\n this.stopTyping.emit({\n value: value,\n validity: validity,\n });\n }\n\n /** Emitted on checkbox check/uncheck, returns id, checked, type, name, value, validity */\n @Event()\n inputCheck: EventEmitter;\n\n private emitInputCheck(checked: boolean): void {\n this.inputCheck.emit({\n id: this.htmlid,\n checked: checked,\n type: this.type,\n name: this.name,\n value: this.value,\n validity: this.getValidity(\"input\"),\n });\n }\n\n /** Emitted on input focus */\n @Event()\n inputFocus: EventEmitter;\n\n private emitInputFocus(): void {\n this.inputFocus.emit({id: this.htmlid});\n }\n\n /** Emitted on input blur */\n @Event()\n inputBlur: EventEmitter;\n\n private emitInputBlur(): void {\n this.inputBlur.emit({id: this.htmlid});\n }\n\n private getValidity(type: string): ValidityState {\n const input = this.hostElement.querySelector(type) as HTMLInputElement;\n\n return input.validity;\n }\n\n /* START text/password/email/number */\n\n private getTextAttributes(): JSXBase.InputHTMLAttributes<HTMLInputElement | HTMLTextAreaElement> {\n return {\n id: this.htmlid,\n name: this.name,\n placeholder: this.placeholder,\n value: this.value,\n disabled: this.disabled,\n readonly: this.readonly,\n required: this.required,\n title: this.htmltitle,\n minlength: this.minlength,\n maxlength: this.maxlength,\n class: {\n [`input-${this.status}`]: !!this.status,\n },\n autocomplete: this.autocomplete,\n onInput: (e: InputEvent) => this.emitInputChange((e.target as HTMLInputElement).value),\n };\n }\n\n private getNumberAttributes(type: InputType): JSXBase.InputHTMLAttributes<HTMLInputElement> {\n if (type != InputType.NUMBER) {\n return;\n }\n\n return {\n min: this.min,\n max: this.max,\n step: this.step,\n };\n }\n\n private getPatternAttribute(type: InputType): JSXBase.InputHTMLAttributes<HTMLInputElement> {\n if (\n type != InputType.PASSWORD &&\n type != InputType.TEXT &&\n type != InputType.TEL &&\n type != InputType.SEARCH &&\n type != InputType.URL &&\n type != InputType.EMAIL\n ) {\n return;\n }\n\n return {\n pattern: this.pattern,\n };\n }\n\n private getRoleAttribute(): JSXBase.InputHTMLAttributes<HTMLInputElement | HTMLTextAreaElement> {\n return this.role ? {role: this.role} : {};\n }\n\n private getAriaAttrubutes(): Record<string, unknown> {\n const expanded = this.htmlAriaExpanded ? {\"aria-expanded\": this.htmlAriaExpanded} : {};\n const controls = this.htmlAriaControls ? {\"aria-controls\": this.htmlAriaControls} : {};\n const autocomplete = this.htmlAriaAutocomplete ? {\"aria-autocomplete\": this.htmlAriaAutocomplete} : {};\n const activedescendant = this.htmlAriaActivedescendant\n ? {\"aria-activedescendant\": this.htmlAriaActivedescendant}\n : {};\n\n return {\n ...expanded,\n ...controls,\n ...autocomplete,\n ...activedescendant,\n };\n }\n\n private getFocusBlurAttributes(): JSXBase.InputHTMLAttributes<HTMLInputElement | HTMLTextAreaElement> {\n return {\n onFocus: () => this.emitInputFocus(),\n onBlur: () => this.emitInputBlur(),\n };\n }\n\n private renderInputText(type: InputType = InputType.TEXT): HTMLDivElement {\n const ariaLabel = this.ariaLabel ? {\"aria-label\": this.ariaLabel} : {};\n const attr = {\n ...this.getTextAttributes(),\n ...this.getNumberAttributes(type),\n ...this.getPatternAttribute(type),\n ...ariaLabel,\n ...this.getRoleAttribute(),\n ...this.getAriaAttrubutes(),\n ...this.getFocusBlurAttributes(),\n };\n if (this.icon || type === InputType.PASSWORD) {\n Object.assign(attr.class, {\"has-icon\": true});\n }\n if (this.hasclearicon && type != InputType.NUMBER) {\n Object.assign(attr.class, {\"has-clear-icon\": true});\n }\n\n return (\n <div class=\"text-wrapper\">\n {this.renderLabel()}\n <div>\n <input\n type={type === InputType.PASSWORD && !this.passwordHidden ? InputType.TEXT : type}\n {...attr}\n ref={(el) => (this.inputRef = el)}\n />\n {this.renderIcons()}\n </div>\n {this.renderMessage()}\n </div>\n );\n }\n\n private renderLabel(): HTMLLabelElement {\n if (!this.label) {\n return;\n }\n\n return (\n <label\n class=\"z-label body-5-sb\"\n id={`${this.htmlid}_label`}\n htmlFor={this.htmlid}\n >\n {this.label}\n </label>\n );\n }\n\n private renderIcons(): HTMLSpanElement {\n return (\n <span class=\"icons-wrapper\">\n {this.renderResetIcon()}\n {this.renderIcon()}\n </span>\n );\n }\n\n private renderIcon(): HTMLButtonElement {\n if (this.type === InputType.PASSWORD) {\n return this.renderShowHidePassword();\n }\n\n if (!this.icon) {\n return;\n }\n\n return (\n <z-icon\n name={this.icon}\n class={{[this.size]: true, \"input-icon\": true}}\n />\n );\n }\n\n private renderResetIcon(): HTMLButtonElement {\n let hidden = false;\n if (!this.hasclearicon || !this.value || this.disabled || this.readonly || this.type == InputType.NUMBER) {\n hidden = true;\n }\n\n return (\n <button\n type=\"button\"\n class={{\"reset-icon\": true, \"input-icon\": true, hidden}}\n aria-label=\"cancella il contenuto dell'input\"\n onClick={() => {\n this.inputRef.value = \"\";\n this.emitInputChange(\"\");\n }}\n >\n <z-icon\n name=\"multiply\"\n class={this.size}\n />\n </button>\n );\n }\n\n private renderShowHidePassword(): HTMLButtonElement {\n return (\n <button\n type=\"button\"\n class=\"input-icon toggle-password-icon\"\n disabled={this.disabled}\n aria-label={this.passwordHidden ? \"mostra password\" : \"nascondi password\"}\n onClick={() => (this.passwordHidden = !this.passwordHidden)}\n >\n <z-icon\n name={this.passwordHidden ? \"view-filled\" : \"view-off-filled\"}\n class={this.size}\n />\n </button>\n );\n }\n\n private renderMessage(): HTMLZInputMessageElement {\n if (boolean(this.message) === false) {\n return;\n }\n\n return (\n <z-input-message\n message={boolean(this.message) === true ? undefined : (this.message as string)}\n status={this.status}\n class={this.size}\n disabled={this.disabled}\n />\n );\n }\n\n /* END text/password/email/number */\n\n /* START textarea */\n\n private renderTextarea(): HTMLDivElement {\n const attributes = this.getTextAttributes();\n\n return (\n <Fragment>\n {this.renderLabel()}\n <div\n class={{\n ...(attributes.class as {[className: string]: boolean}),\n \"textarea-wrapper\": true,\n \"readonly\": !!attributes.readonly,\n }}\n >\n <textarea\n {...attributes}\n class={{\n ...(attributes.class as {[className: string]: boolean}),\n \"z-scrollbar\": true,\n }}\n aria-label={this.ariaLabel || undefined}\n {...this.getRoleAttribute()}\n ></textarea>\n </div>\n {this.renderMessage()}\n </Fragment>\n );\n }\n\n /* END textarea */\n\n private handleCheck(ev: Event): void {\n this.checked = (ev.target as HTMLInputElement).checked;\n this.emitInputCheck(this.checked);\n }\n\n /* START checkbox */\n private renderCheckbox(): HTMLDivElement {\n return (\n <div class=\"checkbox-wrapper\">\n <input\n id={this.htmlid}\n type=\"checkbox\"\n name={this.name}\n checked={this.checked}\n disabled={this.disabled}\n readonly={this.readonly}\n required={this.required}\n onChange={this.handleCheck.bind(this)}\n value={this.value}\n {...this.getRoleAttribute()}\n {...this.getFocusBlurAttributes()}\n />\n\n <label\n htmlFor={this.htmlid}\n class={{\n \"checkbox-label\": true,\n \"after\": this.labelPosition === LabelPosition.RIGHT,\n \"before\": this.labelPosition === LabelPosition.LEFT,\n }}\n >\n <z-icon\n name={this.checked ? \"checkbox-checked\" : \"checkbox\"}\n class={this.size}\n />\n {this.label && <span innerHTML={this.label}></span>}\n </label>\n </div>\n );\n }\n\n /* END checkbox */\n\n /* START radio */\n private renderRadio(): HTMLDivElement {\n return (\n <div class=\"radio-wrapper\">\n <input\n id={this.htmlid}\n type=\"radio\"\n name={this.name}\n checked={this.checked}\n disabled={this.disabled}\n readonly={this.readonly}\n onChange={this.handleCheck.bind(this)}\n value={this.value}\n {...this.getRoleAttribute()}\n {...this.getFocusBlurAttributes()}\n />\n\n <label\n htmlFor={this.htmlid}\n class={{\n \"radio-label\": true,\n \"after\": this.labelPosition === LabelPosition.RIGHT,\n \"before\": this.labelPosition === LabelPosition.LEFT,\n }}\n >\n <z-icon\n name={this.checked ? \"radio-button-checked\" : \"radio-button\"}\n class={this.size}\n />\n {this.label && <span innerHTML={this.label} />}\n </label>\n </div>\n );\n }\n /* END radio */\n\n render(): HTMLInputElement | HTMLDivElement {\n let input;\n switch (this.type) {\n case InputType.TEXTAREA:\n input = this.renderTextarea();\n break;\n case InputType.CHECKBOX:\n input = this.renderCheckbox();\n break;\n case InputType.RADIO:\n input = this.renderRadio();\n break;\n default:\n input = this.renderInputText(this.type);\n }\n\n return <Host>{input}</Host>;\n }\n}\n",":host {\n display: flex;\n min-height: calc(var(--space-unit) * 2.5);\n align-items: start;\n margin-top: var(--space-unit);\n color: var(--color-default-text);\n fill: currentcolor;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-2);\n letter-spacing: 0.16px;\n}\n\n:host(.small),\n:host(.x-small) {\n margin-top: calc(var(--space-unit) * 0.5);\n font-size: var(--font-size-1);\n}\n\n:host([status=\"success\"]) {\n color: var(--color-hover-success);\n}\n\n:host([status=\"error\"]) {\n color: var(--color-hover-error);\n}\n\n:host([status=\"warning\"]) {\n color: var(--color-hover-warning);\n}\n\n:host(:focus) {\n outline: none;\n}\n\n:host > z-icon {\n --z-icon-width: calc(var(--space-unit) * 2);\n --z-icon-height: calc(var(--space-unit) * 2);\n --z-icon-right-margin: var(--space-unit);\n\n margin-top: calc(var(--space-unit) * 0.25);\n}\n\n:host(.small) > z-icon,\n:host(.x-small) > z-icon {\n --z-icon-width: 14px;\n --z-icon-height: 14px;\n --z-icon-right-margin: calc(var(--space-unit) * 0.5);\n}\n\n:host([disabled]) {\n color: var(--color-disabled03);\n fill: var(--color-disabled03);\n}\n","import {Component, Host, Prop, State, Watch, h} from \"@stencil/core\";\nimport {InputStatus} from \"../../beans\";\n\n@Component({\n tag: \"z-input-message\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZInputMessage {\n /** input helper message */\n @Prop()\n message: string;\n\n /** input status (optional) */\n @Prop({reflect: true})\n status?: InputStatus;\n\n /** input disabled status (optional) */\n @Prop({reflect: true})\n disabled?: boolean;\n\n private statusIcons = {\n success: \"checkmark-circle\",\n error: \"multiply-circled\",\n warning: \"exclamation-circle\",\n };\n\n @State()\n statusRole = {};\n\n @Watch(\"message\")\n @Watch(\"status\")\n onMessageChange(): void {\n this.statusRole = this.message && this.status ? {role: \"alert\"} : {};\n }\n\n componentWillLoad(): void {\n this.onMessageChange();\n }\n\n render(): HTMLZInputMessageElement {\n return (\n <Host {...this.statusRole}>\n {this.statusIcons[this.status] && this.message && <z-icon name={this.statusIcons[this.status]}></z-icon>}\n <span innerHTML={this.message} />\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n flex-direction: column;\n font-family: var(--font-family-sans);\n font-weight: var(--font-rg);\n}\n","import {Component, Element, Host, Prop, h} from \"@stencil/core\";\nimport {ListSize, ListType} from \"../../../beans\";\n\n@Component({\n tag: \"z-list\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZList {\n @Element() host: HTMLZListElement;\n\n /**\n * [optional] Sets size of inside elements.\n */\n @Prop({reflect: true})\n size?: ListSize = ListSize.MEDIUM;\n\n /**\n * [optional] type of the list marker for each element\n */\n @Prop({reflect: true})\n listType?: ListType = ListType.NONE;\n\n /**\n * Sets role of the element.\n */\n @Prop({reflect: true})\n role = \"list\";\n\n private setChildrenSizeType(): void {\n const children = this.host.children;\n for (let i = 0; i < children.length; i++) {\n children[i].setAttribute(\"size\", this.size);\n children[i].setAttribute(\"list-type\", this.listType);\n children[i].setAttribute(\"list-element-position\", (i + 1).toString());\n }\n }\n\n componentDidLoad(): void {\n this.setChildrenSizeType();\n }\n\n render(): HTMLZListElement {\n return (\n <Host>\n <slot />\n </Host>\n );\n }\n}\n",":host {\n outline: none;\n}\n\n:host > .container {\n --background-color-list-element: ;\n --background-hover-color-list-element: ;\n --background-active-color-list-element: ;\n\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n justify-content: center;\n background-color: var(--background-color-list-element, var(--color-surface01));\n font-family: var(--font-family-sans);\n font-weight: var(--font-rg);\n outline: none;\n}\n\n/* z-list-element size */\n\n:host([size=\"small\"]) > .container {\n min-height: calc(var(--space-unit) * 4);\n padding: calc(var(--space-unit) / 2) 0;\n}\n\n:host([size=\"medium\"]) > .container {\n min-height: calc(var(--space-unit) * 5);\n padding: var(--space-unit) 0;\n}\n\n:host([size=\"medium\"]) > .tree-element-container {\n padding-top: 0;\n padding-bottom: 0;\n}\n\n:host([size=\"large\"]) > .container {\n min-height: calc(var(--space-unit) * 7);\n padding: calc(var(--space-unit) * 2) 0;\n}\n\n:host([size=\"x-large\"]) > .container {\n min-height: calc(var(--space-unit) * 9);\n padding: calc(var(--space-unit) * 3) 0;\n}\n\n/* ----------------- */\n\n:host([expandable]) > .container,\n:host([clickable]) > .container {\n cursor: pointer;\n}\n\n:host([expandable]:hover) > .container,\n:host([clickable]:hover) > .container {\n background-color: var(--background-hover-color-list-element, var(--color-background));\n}\n\n:host([expandable]:focus:focus-visible) > .container,\n:host([clickable]:focus:focus-visible) > .container {\n position: relative;\n z-index: 1;\n box-shadow: var(--shadow-focus-primary);\n}\n\n:host([expandable]:active) > .container,\n:host([clickable]:active) > .container {\n background-color: var(--background-active-color-list-element, var(--color-background));\n}\n\n:host([align-button=\"left\"][expandable]) > .container > .z-list-element-container {\n display: flex;\n}\n\n:host([align-button=\"right\"][expandable]) > .container > .z-list-element-container {\n display: flex;\n flex-direction: row-reverse;\n justify-content: space-between;\n}\n\n:host([align-button=\"left\"][expandable]) > .container > .z-list-element-container > z-icon {\n margin-right: var(--space-unit);\n}\n\n:host([align-button=\"right\"][expandable]) > .container > .z-list-element-container > z-icon {\n margin-left: var(--space-unit);\n}\n\n:host > .container > .z-list-element-inner-container {\n display: none;\n}\n\n:host > .container > .z-list-element-inner-container.expanded {\n display: block;\n}\n\n.z-list-content-container {\n display: flex;\n align-items: center;\n}\n\n:host .z-tree-list-divider {\n position: absolute;\n z-index: 100;\n left: 0;\n}\n\n:host([disabled]) > .container {\n color: var(--color-form-disabled03);\n cursor: default;\n}\n","import {Component, Element, Event, EventEmitter, h, Host, Listen, Prop, State} from \"@stencil/core\";\nimport {\n DividerSize,\n ExpandableListButtonAlign,\n ExpandableListStyle,\n KeyboardCode,\n ListDividerType,\n ListSize,\n ListType,\n} from \"../../../beans\";\n\n@Component({\n tag: \"z-list-element\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZListElement {\n @Element() host: HTMLZListElementElement;\n\n /** remove filter click event, returns filterid */\n @Event({\n eventName: \"accessibleFocus\",\n composed: true,\n cancelable: true,\n bubbles: true,\n })\n accessibleFocus: EventEmitter<number>;\n\n /** set parent aria-activedescendant on focus event, returns filterid */\n @Event({\n eventName: \"ariaDescendantFocus\",\n composed: true,\n cancelable: true,\n bubbles: true,\n })\n ariaDescendantFocus: EventEmitter<number>;\n\n /** remove filter click event, returns filterid */\n @Event({\n eventName: \"clickItem\",\n composed: true,\n cancelable: true,\n bubbles: true,\n })\n clickItem: EventEmitter;\n\n @Listen(\"accessibleFocus\", {target: \"document\"})\n accessibleFocusHandler(e: CustomEvent): void {\n if (this.listElementId === e.detail) {\n const toFocus = this.host.shadowRoot.getElementById(`z-list-element-id-${e.detail}`);\n toFocus.focus();\n }\n }\n\n /**\n * [optional] Align expandable button left or right.\n */\n @Prop({reflect: true})\n alignButton?: ExpandableListButtonAlign = ExpandableListButtonAlign.LEFT;\n\n /**\n * [optional] Sets element clickable.\n */\n @Prop({reflect: true})\n clickable?: boolean = false;\n\n /**\n * [optional] Sets the divider color.\n */\n @Prop()\n dividerColor?: string = \"color-surface03\";\n\n /**\n * [optional] Sets the position where to insert the divider.\n */\n @Prop()\n dividerType?: ListDividerType = ListDividerType.NONE;\n\n /**\n * [optional] Sets the divider size.\n */\n @Prop()\n dividerSize?: DividerSize = DividerSize.SMALL;\n\n /**\n * [optional] Sets element as expandable.\n */\n @Prop({reflect: true})\n expandable?: boolean = false;\n\n /**\n * [optional] Sets expandable style to element.\n */\n @Prop()\n expandableStyle?: ExpandableListStyle = ExpandableListStyle.ACCORDION;\n\n /**\n * [optional] List element id.\n */\n @Prop({reflect: true})\n listElementId?: number;\n\n /**\n * [optional] Sets size of inside elements.\n */\n @Prop({reflect: true})\n size?: ListSize = ListSize.MEDIUM;\n\n /**\n * [optional] Sets text color of the element.\n */\n @Prop({reflect: true})\n color?: string = \"none\";\n\n /**\n * [optional] Sets disabled style of the element.\n */\n @Prop({reflect: true})\n disabled?: boolean = false;\n\n /**\n * [optional] position of the list element inside the list or the group\n */\n @Prop({reflect: true})\n listElementPosition?: string = \"0\";\n\n /**\n * [optional] type of the list marker for each element\n */\n @Prop({reflect: true})\n listType?: ListType = ListType.NONE;\n\n /**\n * [optional] Sets element as tree item.\n */\n @Prop()\n hasTreeItems?: boolean;\n\n /**\n * Sets element role.\n */\n @Prop({reflect: true})\n role = \"listitem\";\n\n /** set tabindex to Host tag (optional). Defaults to 0. */\n @Prop()\n htmlTabindex?: number | null = 0;\n\n @State()\n showInnerContent = false;\n\n private openElementConfig = {\n accordion: {\n open: \"minus-circled\",\n close: \"plus-circled\",\n },\n menu: {\n open: \"chevron-up\",\n close: \"chevron-down\",\n },\n };\n\n /**\n * Constructor.\n */\n constructor() {\n this.handleClick = this.handleClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n /**\n * Handler for click on element. If element is expandable, change state.\n * @returns void\n */\n private handleClick(): void {\n if (this.disabled) {\n return;\n }\n\n this.clickItem.emit(this.listElementId);\n if (!this.expandable) {\n return;\n }\n this.showInnerContent = !this.showInnerContent;\n }\n\n private handleKeyDown(event): void {\n const expandByKey = event.code === KeyboardCode.ENTER;\n switch (event.code) {\n case KeyboardCode.ARROW_DOWN:\n event.preventDefault();\n this.accessibleFocus.emit(this.listElementId + 1);\n break;\n case KeyboardCode.ARROW_UP:\n event.preventDefault();\n this.accessibleFocus.emit(this.listElementId - 1);\n break;\n case KeyboardCode.ENTER:\n event.preventDefault();\n this.clickItem.emit(this.listElementId);\n break;\n default:\n break;\n }\n\n if (!this.expandable || !expandByKey) {\n return;\n }\n this.showInnerContent = !this.showInnerContent;\n }\n\n /**\n * Renders button to expand element.\n * @returns expadable button\n */\n private renderExpandableButton(): HTMLZIconElement {\n if (!this.expandable) {\n return null;\n }\n\n return (\n <z-icon\n name={\n this.showInnerContent\n ? this.openElementConfig[this.expandableStyle].open\n : this.openElementConfig[this.expandableStyle].close\n }\n />\n );\n }\n\n /**\n * Renders expanded content if element is expandable.\n * @returns expanded content\n */\n private renderExpandedContent(): HTMLDivElement {\n if (!this.expandable) {\n return null;\n }\n\n return (\n <div\n class={{\n \"z-list-element-inner-container\": true,\n \"expanded\": this.showInnerContent,\n }}\n >\n <slot name=\"inner-content\" />\n </div>\n );\n }\n\n /**\n * Renders content of the z-list-element\n * @returns list content\n */\n private renderContent(): HTMLDivElement {\n if (this.listType === ListType.NONE) {\n return <slot />;\n }\n\n if (this.listType === ListType.ORDERED) {\n return (\n <div class=\"z-list-content-container\">\n <div>{this.listElementPosition}.&emsp;</div>\n <slot />\n </div>\n );\n }\n\n if (this.listType === ListType.UNORDERED) {\n return (\n <div class=\"z-list-content-container\">\n <span>&bull;&emsp;</span>\n <slot />\n </div>\n );\n }\n }\n\n render(): HTMLZListElementElement {\n return (\n <Host\n aria-expanded={this.expandable ? this.showInnerContent : null}\n onClick={this.handleClick}\n onFocus={() => this.ariaDescendantFocus.emit(this.listElementId)}\n onKeyDown={this.handleKeyDown}\n clickable={this.clickable && !this.disabled}\n tabIndex={this.hasTreeItems ? undefined : this.htmlTabindex}\n role={this.hasTreeItems ? \"none\" : this.role}\n >\n <div\n class={this.hasTreeItems ? \"tree-element-container\" : \"container\"}\n style={!this.disabled && {color: `var(--${this.color})`}}\n tabindex=\"-1\"\n id={`z-list-element-id-${this.listElementId}`}\n part=\"list-item-container\"\n >\n <div class=\"z-list-element-container\">\n {this.renderExpandableButton()}\n {this.renderContent()}\n </div>\n {this.renderExpandedContent()}\n </div>\n {this.dividerType === ListDividerType.ELEMENT && (\n <z-divider\n class={{\"z-tree-list-divider\": this.hasTreeItems}}\n color={this.dividerColor}\n size={this.dividerSize}\n />\n )}\n </Host>\n );\n }\n}\n",":host {\n font-family: var(--font-family-sans);\n font-weight: var(--font-rg);\n}\n\n:host > .z-list-group-header-container {\n color: var(--gray700);\n font-size: var(--font-size-2);\n font-weight: var(--font-sb) !important;\n letter-spacing: 0.16px;\n line-height: 1.4;\n}\n\n:host > .z-list-group-header-container.has-header {\n padding-top: calc(var(--space-unit) * 1.5);\n padding-bottom: var(--space-unit);\n}\n\n:host > .z-list-group-header-container.has-header > z-divider {\n margin-top: var(--space-unit);\n}\n\n:host > .grouped-tree-list-header {\n padding-top: calc(var(--space-unit) * 1.5);\n padding-bottom: var(--space-unit);\n}\n","import {Component, Element, h, Host, Prop} from \"@stencil/core\";\nimport {DividerSize, ListDividerType, ListSize, ListType} from \"../../../beans\";\n\n@Component({\n tag: \"z-list-group\",\n styleUrl: \"styles.css\",\n shadow: true,\n})\nexport class ZListGroup {\n @Element() host: HTMLZListGroupElement;\n\n /**\n * [optional] Sets size of inside elements.\n */\n @Prop({reflect: true})\n size?: ListSize = ListSize.MEDIUM;\n\n /**\n * [optional] Sets the position where to insert the divider.\n */\n @Prop({reflect: true})\n dividerType?: ListDividerType = ListDividerType.NONE;\n\n /**\n * [optional] Sets the divider size.\n */\n @Prop({reflect: true})\n dividerSize?: DividerSize = DividerSize.SMALL;\n\n /**\n * [optional] Sets the divider color.\n */\n @Prop({reflect: true})\n dividerColor?: string = \"gray200\";\n\n /**\n * [optional] type of the list marker for each element\n */\n @Prop({reflect: true})\n listType?: ListType = ListType.NONE;\n\n /**\n * [optional] check for tree items in grouped lists\n */\n @Prop()\n hasTreeItems?: boolean;\n\n /**\n * Sets element role.\n */\n @Prop({reflect: true})\n role = \"group\";\n\n /**\n * [optional] Sets aria-labelledby attribute\n */\n @Prop({reflect: true})\n ariaLabelledby?: string;\n\n private hasHeader: boolean;\n\n componentDidLoad(): void {\n const children = this.host.children;\n for (let i = 0; i < children.length; i++) {\n if (children.length - 1 > i) {\n children[i].setAttribute(\"divider-type\", this.dividerType);\n children[i].setAttribute(\"divider-size\", this.dividerSize);\n children[i].setAttribute(\"divider-color\", this.dividerColor);\n }\n children[i].setAttribute(\"size\", this.size);\n children[i].setAttribute(\"list-type\", this.listType);\n children[i].setAttribute(\"list-element-position\", i.toString());\n }\n }\n\n componentWillLoad(): void {\n this.hasHeader = !!this.host.querySelector('[slot=\"header-title\"]');\n }\n\n render(): HTMLZListGroupElement {\n return (\n <Host\n role={this.role}\n aria-labelledby={this.ariaLabelledby}\n >\n <div\n class={{\n \"z-list-group-header-container\": true,\n \"has-header\": this.hasHeader && !this.hasTreeItems,\n \"grouped-tree-list-header\": this.hasTreeItems,\n }}\n >\n <slot name=\"header-title\" />\n {this.dividerType === ListDividerType.HEADER && (\n <z-divider\n color={this.dividerColor}\n size={this.dividerSize}\n />\n )}\n </div>\n <slot />\n </Host>\n );\n }\n}\n",":host {\n --z-offcanvas--container-width: ;\n --z-offcanvas--container-height: ;\n --z-offcanvas--top-space: ;\n\n font-family: var(--font-family-sans);\n font-weight: var(--font-rg);\n}\n\n:host([variant=\"pushcontent\"]:not([transitiondirection=\"up\"])) {\n overflow: hidden;\n}\n\n.canvas-container {\n display: flex;\n overflow: hidden;\n min-width: 100%;\n height: 100%;\n background: var(--color-surface01);\n transform: translateX(0);\n transition: transform 0.4s ease-out;\n}\n\n:host > * {\n position: fixed;\n top: var(--z-offcanvas--top-space, 0);\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n:host([open]) > * {\n height: calc(100% - var(--z-offcanvas--top-space, 0px));\n}\n\n:host([transitiondirection=\"right\"]) > .canvas-container {\n transform: translateX(-100%);\n}\n\n:host([transitiondirection=\"left\"]) > .canvas-container {\n transform: translateX(100%);\n}\n\n:host([open][transitiondirection=\"right\"]) > .canvas-container,\n:host([open][transitiondirection=\"left\"]) > .canvas-container {\n transform: translateX(0);\n}\n\n:host([transitiondirection=\"up\"]) > .canvas-container {\n top: auto;\n bottom: 0;\n height: var(--z-offcanvas--container-height, 90%);\n transform: translateY(100%);\n}\n\n:host([transitiondirection=\"up\"], [variant=\"overlay\"]) > .canvas-container {\n z-index: 1001;\n}\n\n:host([open][transitiondirection=\"up\"]) > .canvas-container {\n transform: translateY(0);\n}\n\n:host([variant=\"pushcontent\"]:not([transitiondirection=\"up\"])) > .canvas-container {\n position: relative;\n height: 100%;\n}\n\n:host([variant=\"pushcontent\"]:not([open])) {\n display: none;\n}\n\n:host([skip-animation]) > .canvas-container {\n transition: none;\n}\n\n.backdrop {\n z-index: 1000;\n width: 100%;\n height: 100%;\n background-color: var(--gray900);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.4s ease-out;\n}\n\n:host([open]) > .backdrop {\n opacity: 0.7;\n pointer-events: unset;\n}\n\n.canvas-container > .canvas-content {\n overflow: hidden auto;\n flex: 1 auto;\n padding: 0 calc(var(--space-unit) * 2);\n margin: calc(var(--space-unit) * 2) calc(var(--space-unit) / 2) calc(var(--space-unit) * 2) 0;\n}\n\n/* Tablet / Desktop */\n@media (min-width: 768px) {\n :host([variant=\"pushcontent\"]:not([transitiondirection=\"up\"])) {\n flex: none; /* Prevent unwanted width changes in flex containers */\n }\n\n .canvas-container {\n width: var(--z-offcanvas--container-width, 375px);\n min-width: var(--z-offcanvas--container-width, 375px);\n }\n\n :host([transitiondirection=\"up\"]) > .canvas-container {\n width: 100%;\n }\n\n :host([transitiondirection=\"right\"]) > .canvas-container {\n right: auto;\n left: 0;\n }\n\n :host([transitiondirection=\"left\"]) > .canvas-container {\n right: 0;\n left: auto;\n }\n}\n","import {Component, Event, EventEmitter, h, Host, Listen, Prop, State, Watch} from \"@stencil/core\";\nimport {KeyboardCode, OffCanvasVariant, TransitionDirection} from \"../../beans\";\n\n/**\n * @slot canvasContent - Slot for the offcanvas content.\n * @cssprop --z-offcanvas--top-space - Top offset of the offcanvas, for `overlay` variant. Useful when there is some fixed element above the offcanvas. Default: `0`.\n * @cssprop --z-offcanvas--container-width - Width of the offcanvas for `left` and `right` direction. Default: `375px`.\n * @cssprop --z-offcanvas--container-height - Height of the offcanvas for `up` direction. Default: `90%`.\n */\n@Component({\n tag: \"z-offcanvas\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZOffcanvas {\n /**\n * Offcanvas variant.\n * - `overlay`: The offcanvas covers the page content putting an overlay.\n * - `pushcontent`: The offcanvas isn't absolutely positioned and \"pushes\" the page content.\n * > NB: `pushcontent` variant may need some extra style tuning of the context around the component to work properly.\n * Also, the `pushcontent` variant doesn't have the open/close transition.\n */\n @Prop({reflect: true})\n variant?: OffCanvasVariant = OffCanvasVariant.PUSHCONTENT;\n\n /** Whether the offcanvas is open. Default: false */\n @Prop({reflect: true, mutable: true})\n open = false;\n\n /**\n * Open the content transitioning to a specified direction.\n * The `up` direction always show the `overlay`, also when the variant is `pushcontent`.\n */\n @Prop({reflect: true})\n transitiondirection?: TransitionDirection = TransitionDirection.LEFT;\n\n /**\n * Skip the opening transition when the offcanvas is already open at the first render.\n * @deprecated This prop is not needed anymore, the component will automatically skip the transition\n * when it starts with `open` set to `true`. Only exists for Typescript backward compatibility.\n */\n @Prop()\n skipLoadAnimation = false;\n\n /** Whether to show the backdrop when the offcanvas is open. Default: true */\n @Prop()\n showBackdrop = true;\n\n /** emitted when `open` prop changes */\n @Event()\n canvasOpenStatusChanged: EventEmitter;\n\n /** Used to skip the opening transition when the offcanvas is already open at the first render. */\n @State()\n private skipAnimation = false;\n\n private canvasContainer: HTMLElement;\n\n private canvasContent: HTMLElement;\n\n private allFocusableElements: HTMLElement[] = [];\n\n private previouslyFocusedElement: HTMLElement | null = null;\n\n /**\n * Returns all focusable elements inside the offcanvas content.\n * Elements are considered focusable if:\n * - They are not disabled\n * - They are visible in the layout\n * - They have a non-negative tabIndex or an explicit tabindex=\"0\"\n */\n private getFocusableElements(): HTMLElement[] {\n if (!this.canvasContent) {\n return [];\n }\n\n const all = Array.from(this.canvasContent.querySelectorAll<HTMLElement>(\"*\"));\n\n return all.filter((el) => {\n const tabindex = el.getAttribute(\"tabindex\");\n const isDisabled = el.hasAttribute(\"disabled\");\n const isHidden = el.offsetParent === null;\n\n return !isDisabled && !isHidden && (el.tabIndex >= 0 || tabindex === \"0\");\n });\n }\n\n /**\n * Keeps keyboard navigation trapped inside the offcanvas when it is open.\n * Implements circular tab navigation:\n * - If Shift + Tab is pressed on the first focusable element, move focus to the last.\n * - If Tab is pressed on the last focusable element, move focus to the first.\n */\n private trapFocus(event: KeyboardEvent): void {\n if (!this.allFocusableElements.length) {\n return;\n }\n\n const first = this.allFocusableElements[0];\n const last = this.allFocusableElements[this.allFocusableElements.length - 1];\n const active = document.activeElement as HTMLElement;\n\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n }\n\n if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n }\n\n /**\n * Handles keyboard interactions when the offcanvas is open.\n * - Closes the offcanvas when the Escape key is pressed.\n * - Traps focus inside the component when the Tab key is used.\n */\n @Listen(\"keydown\", {target: \"document\"})\n handleKeyDown(event: KeyboardEvent): void {\n if (!this.open) {\n return;\n }\n\n if (event.key === KeyboardCode.ESC) {\n event.preventDefault();\n this.open = false;\n\n return;\n }\n\n if (event.key === KeyboardCode.TAB) {\n this.trapFocus(event);\n }\n }\n\n /**\n * Stop the event default behavior and propagation when the offcanvas is closed.\n */\n @Listen(\"click\", {capture: true})\n @Listen(\"focusin\", {capture: true})\n stopEvent(event: Event): void {\n if (this.open) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * Hide the body overflow when the offcanvas is open.\n */\n @Watch(\"variant\")\n private handlePageOverflow(): void {\n const overflow =\n this.variant === OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP\n ? \"overflow-y\"\n : \"overflow-x\";\n\n document.body.style[overflow] = this.open ? \"hidden\" : \"\";\n }\n\n @Watch(\"open\")\n onOpenChanged(): void {\n this.canvasOpenStatusChanged.emit(this.open);\n\n if (this.open) {\n // Store the element that was focused before the offcanvas opens, this allows restoring the focus when the offcanvas closes.\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\n\n // Move focus inside the offcanvas once it is rendered.\n if (this.allFocusableElements.length > 0) {\n this.allFocusableElements[0].focus();\n } else {\n this.canvasContent?.focus();\n }\n\n this.handlePageOverflow();\n } else {\n // Restore focus to the element that was focused before the offcanvas was opened.\n this.previouslyFocusedElement?.focus();\n\n // When the offcanvas is closing, wait for the transitionend event before restoring the page overflow.\n const listenerCallback = (): void => {\n this.handlePageOverflow();\n this.canvasContainer.removeEventListener(\"transitionend\", listenerCallback);\n };\n\n this.canvasContainer?.addEventListener(\"transitionend\", listenerCallback);\n }\n }\n\n componentWillLoad(): void {\n if (this.open) {\n this.skipAnimation = true;\n }\n }\n\n componentDidLoad(): void {\n this.handlePageOverflow();\n }\n\n componentDidRender(): void {\n this.skipAnimation = false;\n this.allFocusableElements = this.getFocusableElements();\n }\n\n connectedCallback(): void {\n this.handlePageOverflow();\n }\n\n disconnectedCallback(): void {\n this.open = false;\n }\n\n render(): HTMLZOffcanvasElement {\n return (\n <Host\n skip-animation={this.skipAnimation}\n aria-hidden={!this.open ? \"true\" : null}\n >\n <div\n class=\"canvas-container\"\n role=\"presentation\"\n ref={(el) => (this.canvasContainer = el)}\n >\n <div\n class=\"canvas-content z-scrollbar\"\n role=\"presentation\"\n ref={(el) => (this.canvasContent = el)}\n >\n <slot name=\"canvasContent\"></slot>\n </div>\n </div>\n {(this.variant == OffCanvasVariant.OVERLAY || this.transitiondirection === TransitionDirection.UP) &&\n this.showBackdrop && (\n <div\n class=\"backdrop\"\n onClick={() => (this.open = false)}\n ></div>\n )}\n </Host>\n );\n }\n}\n",":host {\n --z-searchbar-tag-text-color: var(--color-primary03);\n --z-searchbar-tag-bg: var(--color-hover-primary);\n --z-searchbar-item-height: 44px;\n\n z-index: 15;\n display: flex;\n column-gap: calc(var(--space-unit) * 2);\n font-family: var(--font-family-sans);\n font-weight: var(--font-rg);\n}\n\n:host,\n* {\n box-sizing: border-box;\n}\n\n:host::part(list-item-container) {\n display: block;\n min-height: unset;\n padding: 0;\n}\n\n.input-container {\n position: relative;\n display: flex;\n width: 100%;\n flex-direction: column;\n}\n\n.results-wrapper {\n position: absolute;\n top: calc(100% - 1px);\n left: 0;\n width: 100%;\n padding: calc(var(--space-unit) / 4);\n border: var(--border-size-small) solid var(--color-surface03);\n border-top: none;\n background: var(--color-surface01);\n}\n\n.results {\n overflow: auto;\n max-height: var(--z-searchbar-results-height, 540px);\n padding: calc(var(--space-unit) / 2) calc(var(--space-unit) * 1.5);\n}\n\n.results::-webkit-scrollbar {\n width: 6px;\n background: linear-gradient(to right, transparent 0 1px, var(--gray200) 1px 5px, transparent 5px 6px);\n}\n\n.results::-webkit-scrollbar-thumb {\n background-color: var(--color-primary01);\n}\n\n.results::-webkit-scrollbar-thumb:hover {\n background-color: var(--color-hover-primary);\n}\n\n/* Firefox scrollbar */\n@supports not selector(.results::-webkit-scrollbar-track) {\n .results {\n scrollbar-color: var(--color-primary01) transparent;\n }\n}\n\n.results .category-heading {\n display: block;\n font-size: var(--font-size-2);\n font-weight: var(--font-rg);\n line-height: var(--font-size-3);\n}\n\n.results .category-heading > * {\n display: block;\n}\n\n.results .category-heading > .category {\n color: var(--color-text05);\n font-style: italic;\n}\n\n.results .category-heading > .subcategory {\n margin-top: var(--space-unit);\n color: var(--color-default-text);\n text-transform: uppercase;\n}\n\n.results z-list-element {\n position: relative;\n display: block;\n}\n\nz-list-element > .item-search {\n padding: var(--space-unit) 0;\n}\n\nz-list z-list-element::before {\n position: absolute;\n z-index: 100;\n top: 5px;\n left: -20px;\n width: 8px;\n height: 1em;\n border-bottom: 1px solid var(--color-disabled01-icon);\n border-left: 1px solid var(--color-disabled01-icon);\n content: \"\";\n cursor: pointer;\n}\n\nz-list z-list-element::after {\n position: absolute;\n z-index: 100;\n top: 5px;\n left: -20px;\n width: 8px;\n height: 100%;\n border-left: 1px solid var(--color-disabled01-icon);\n content: \"\";\n cursor: pointer;\n}\n\nz-list z-list-element:last-child::after {\n display: none;\n}\n\nz-list > z-list-element::before,\nz-list > z-list-element::after,\nz-list > z-list-group > z-list-element::before,\nz-list > z-list-group > z-list-element::after {\n display: none;\n}\n\nz-list > div.children-node {\n padding-left: calc(var(--space-unit) * 3);\n}\n\n.results z-list-element > .list-element {\n display: flex;\n justify-content: space-between;\n padding: calc(var(--space-unit) * 1.25) 0;\n cursor: pointer;\n}\n\n.results z-list-element > .list-element:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\n.results z-list-element > .list-element .item.ellipsis {\n overflow: hidden;\n}\n\n.results z-list-element .list-element::after {\n position: absolute;\n top: 0;\n right: 0;\n display: block;\n width: 100%;\n height: 44px;\n content: \"\";\n transform: translateX(-100%);\n}\n\n.results z-list-element .list-element.focused.hovered::after {\n padding-left: 6px;\n}\n\n.results z-list-element > .list-element:hover,\n.results z-list-element > .list-element:hover::after {\n background-color: var(--color-background);\n cursor: pointer;\n}\n\n.results z-list-element > .list-element > z-tag {\n border: 1px solid var(--gray800);\n font-size: var(--font-size-1);\n font-weight: var(--font-sb);\n\n --z-tag-bg: var(--z-searchbar-tag-bg);\n --z-tag-text-color: var(--z-searchbar-tag-text-color);\n}\n\n.results .item {\n --z-icon-height: 12px;\n --z-icon-width: 12px;\n\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n color: var(--color-default-text);\n column-gap: calc(var(--space-unit) * 1.5);\n fill: var(--color-default-icon);\n font-size: var(--font-size-2);\n line-height: var(--font-size-6);\n}\n\n.results .item.ellipsis > .item-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.results .item > .item-label mark {\n background: var(--color-primary03);\n}\n\n.results .item.item-search {\n --z-icon-height: 16px;\n --z-icon-width: 16px;\n}\n\n.results .item-show-all {\n text-align: center;\n}\n\n.results .item-no-results {\n display: block;\n font-size: var(--font-size-2);\n font-style: italic;\n line-height: var(--font-size-5);\n}\n\n.results .item-no-results > ul {\n padding-left: calc(var(--space-unit) * 2);\n margin: var(--space-unit);\n}\n\n/* Tablet breakpoint */\n@media (min-width: 768px) {\n .results .category-heading {\n font-size: var(--font-size-3);\n line-height: var(--font-size-6);\n }\n\n .results .item {\n font-size: var(--font-size-3);\n line-height: var(--font-size-6);\n }\n\n .results .item.item-search {\n --z-icon-height: 18px;\n --z-icon-width: 18px;\n }\n\n .results .item.ellipsis > .item-label {\n height: 1.5rem;\n }\n\n .results z-list-element > .list-element > z-tag {\n min-width: max-content;\n }\n}\n\n/* Desktop breakpoint */\n@media (min-width: 1152px) {\n .results .item {\n cursor: pointer;\n }\n\n .results .item-no-results {\n cursor: default;\n font-size: var(--font-size-3);\n line-height: var(--font-size-6);\n }\n}\n\n:host([size=\"small\"]) .results :is(.item, .category-heading),\n:host([size=\"x-small\"]) .results :is(.item, .category-heading) {\n font-size: var(--font-size-2);\n}\n\n:host([size=\"small\"]) .results .item:not(.has-category),\n:host([size=\"x-small\"]) .results .item:not(.has-category) {\n --z-icon-height: 16px;\n --z-icon-width: 16px;\n}\n\n:host([size=\"small\"]) z-list-element > .list-element,\n:host([size=\"small\"]) z-list-element > .item-search {\n padding: calc(var(--space-unit) * 0.75) 0;\n}\n\n:host([size=\"x-small\"]) z-list-element > .list-element,\n:host([size=\"x-small\"]) z-list-element > .item-search {\n padding: calc(var(--space-unit) / 2) 0;\n}\n\n:host([size=\"small\"]) z-list-element .list-element::after {\n height: 36px;\n}\n\n:host([size=\"x-small\"]) z-list-element .list-element::after {\n height: 32px;\n}\n",".z-label {\n display: block;\n padding-bottom: var(--space-unit);\n color: var(--color-default-text);\n font-family: var(--font-family-sans);\n font-size: var(--font-size-1);\n font-weight: var(--font-sb);\n text-align: left;\n text-transform: uppercase;\n}\n","import {Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h} from \"@stencil/core\";\nimport {\n ButtonVariant,\n ControlSize,\n Device,\n KeyboardCode,\n ListDividerType,\n SearchbarGroup,\n SearchbarGroupedItem,\n SearchbarItem,\n} from \"../../beans\";\nimport {getDevice, handleEnterKeydSubmit, randomId} from \"../../utils/utils\";\n\n/**\n * @cssprop --z-searchbar-results-height - Max height of the results container (default: 540px)\n * @cssprop --z-searchbar-tag-text-color - Color of tag's text (default --color-primary03);\n * @cssprop --z-searchbar-tag-bg - Color of tag's background (default --color-hover-primary);\n */\n@Component({\n tag: \"z-searchbar\",\n styleUrls: [\"styles.css\", \"../css-components/z-label/styles.css\"],\n shadow: true,\n})\nexport class ZSearchbar {\n /** the id of the searchbar element */\n @Prop({reflect: true})\n htmlid = `searchbar-${randomId()}`;\n\n /** Prevent submit action */\n @Prop()\n preventSubmit?: boolean = false;\n\n /** the input label */\n @Prop()\n label?: string;\n\n /** the input aria-label */\n @Prop()\n htmlAriaLabel?: string;\n\n /** Input search string */\n @Prop()\n value?: string;\n\n /** Search input placeholder */\n @Prop()\n placeholder?: string;\n\n /** Show autocomplete results */\n @Prop()\n autocomplete?: boolean = false;\n\n /** Minimun number of characters to dispatch typing event */\n @Prop()\n autocompleteMinChars?: number = 3;\n\n /** Number of results shown - default all */\n @Prop()\n resultsCount?: number;\n\n /** Search helper text */\n @Prop()\n searchHelperLabel?: string = \"Cerca {searchString}\";\n\n /** Autocomplete results items */\n @Prop()\n resultsItems?: SearchbarItem[] | string;\n\n /** Sort autocomplete results items */\n @Prop()\n sortResultsItems?: boolean = false;\n\n /** Show submit button */\n @Prop()\n showSearchButton?: boolean = false;\n\n /** Set button icon without label*/\n @Prop()\n searchButtonIconOnly?: boolean = false;\n\n /** Available sizes: `big`, `small` and `x-small`. Defaults to `big`. */\n @Prop()\n size?: ControlSize = ControlSize.BIG;\n\n /** Graphical variant: `primary`, `secondary`, `tertiary`. Defaults to `primary`. */\n @Prop()\n variant?: ButtonVariant = ButtonVariant.PRIMARY;\n\n @State()\n searchString = this.value;\n\n @State()\n currResultsCount = 0;\n\n @State()\n showResults = false;\n\n @State()\n isMobile = false;\n\n @State()\n selectedItem?: SearchbarItem;\n\n @Element() element: HTMLZSearchbarElement;\n\n private resultsItemsList: SearchbarItem[] | undefined = null;\n\n private inputRef: HTMLZInputElement;\n\n private resizeObserver: ResizeObserver;\n\n private items: HTMLElement[] = [];\n\n /** Emitted on search submit, return search string */\n @Event()\n searchSubmit: EventEmitter<string>;\n\n private emitSearchSubmit(): void {\n this.searchSubmit.emit(this.inputRef.value);\n }\n\n /** Emitted on search typing, return search string */\n @Event()\n searchTyping: EventEmitter<string>;\n\n private emitSearchTyping(search: string): void {\n this.searchTyping.emit(search);\n }\n\n /** Emitted on search result click, return item */\n @Event()\n searchItemClick: EventEmitter<SearchbarItem>;\n\n private emitSearchItemClick(item: SearchbarItem): void {\n this.searchItemClick.emit(item);\n this.selectedItem = item;\n this.searchString = \"\";\n }\n\n @Watch(\"resultsItems\")\n watchItems(): void {\n this.resultsItemsList = this.getResultsItemsList();\n }\n\n @Watch(\"resultsCount\")\n watchResultsCount(): void {\n this.currResultsCount = this.resultsCount;\n }\n\n @Watch(\"value\")\n watchValue(): void {\n this.searchString = this.value;\n }\n\n @Watch(\"searchString\")\n watchSearchString(): void {\n this.emitSearchTyping(this.searchString);\n this.items = [];\n if (!this.searchString) {\n this.currResultsCount = this.resultsCount;\n }\n }\n\n @Watch(\"showResults\")\n watchShowResults(): void {\n if (!this.showResults) {\n this.items = [];\n }\n }\n\n disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n }\n\n componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n if (getDevice() === Device.MOBILE && !this.isMobile) {\n this.isMobile = true;\n }\n if (getDevice() !== Device.MOBILE && this.isMobile) {\n this.isMobile = false;\n }\n });\n this.resizeObserver.observe(this.element);\n }\n\n componentWillLoad(): void {\n this.resultsItemsList = this.getResultsItemsList();\n this.currResultsCount = this.resultsCount;\n }\n\n private getResultsItemsList(): SearchbarItem[] | undefined {\n return typeof this.resultsItems === \"string\" ? JSON.parse(this.resultsItems) : this.resultsItems;\n }\n\n private getGroupedItems(items: SearchbarItem[]): SearchbarGroupedItem {\n const groupedItems = {};\n items.forEach((item: SearchbarItem) => {\n const key = `${item?.category}${item?.subcategory}`;\n groupedItems[key] = groupedItems[key] ?? {\n category: item?.category,\n subcategory: item?.subcategory,\n items: [],\n };\n groupedItems[key][\"items\"].push(item);\n });\n\n if (this.sortResultsItems) {\n return Object.keys(groupedItems)\n .sort()\n .reduce((obj, key) => {\n obj[key] = {\n ...groupedItems[key],\n items: groupedItems[key][\"items\"].sort((a: SearchbarItem, b: SearchbarItem) => {\n const nameA = a.label.toUpperCase();\n const nameB = b.label.toUpperCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n }),\n };\n\n return obj;\n }, {});\n }\n\n return groupedItems;\n }\n\n private checkResultsCount(counter: number): boolean {\n if (!this.currResultsCount || counter < this.currResultsCount) {\n return true;\n }\n\n return false;\n }\n\n private handleStopTyping(e: CustomEvent): void {\n e.stopPropagation();\n this.searchString = e.detail.value;\n if (this.selectedItem) {\n this.selectedItem = undefined;\n }\n }\n\n private handleSubmit(): void {\n if (this.preventSubmit) {\n return;\n }\n this.emitSearchSubmit();\n }\n\n @Listen(\"click\", {target: \"document\"})\n private handleOutsideClick(e: MouseEvent): void {\n const cp = e.composedPath();\n\n const searchbar = cp.find((elem: HTMLElement) => elem.nodeName === \"Z-SEARCHBAR\");\n if (!searchbar || (searchbar as HTMLZSearchbarElement).htmlid !== this.htmlid) {\n this.showResults = false;\n\n return;\n }\n\n if (cp.find((elem: HTMLElement) => elem?.nodeName === \"Z-INPUT\" || elem?.classList?.contains(\"results\"))) {\n this.showResults = true;\n\n return;\n }\n\n this.showResults = false;\n }\n\n private renderInput(): HTMLZInputElement {\n return (\n <z-input\n ref={(val) => {\n this.inputRef = val;\n }}\n htmlid={`input-${this.htmlid}`}\n message={false}\n placeholder={this.placeholder}\n onStopTyping={(e: CustomEvent) => this.handleStopTyping(e)}\n onKeyUp={(e: KeyboardEvent) => {\n handleEnterKeydSubmit(e, () => this.handleSubmit());\n this.handleArrowsNavigation(e);\n }}\n value={this.searchString || this.selectedItem?.label}\n size={this.size}\n label={this.label}\n aria-label={this.htmlAriaLabel || this.placeholder}\n />\n );\n }\n\n private renderButton(): HTMLZButtonElement | null {\n if (!this.showSearchButton) {\n return null;\n }\n\n const iconProp = this.searchButtonIconOnly ? {icon: \"search\"} : null;\n const buttonLabel = this.searchButtonIconOnly ? \"\" : \"CERCA\";\n const ariaLabel = this.searchButtonIconOnly ? {\"aria-label\": \"CERCA\"} : null;\n const defaultProps = {\n disabled: this.preventSubmit,\n variant: this.variant,\n size: this.size,\n onClick: () => this.handleSubmit(),\n ...iconProp,\n ...ariaLabel,\n };\n\n return <z-button {...defaultProps}>{buttonLabel}</z-button>;\n }\n\n private renderResults(): HTMLDivElement | null {\n if (\n !this.showResults ||\n !this.autocomplete ||\n !this.searchString ||\n this.searchString.length < this.autocompleteMinChars ||\n !this.resultsItemsList\n ) {\n return null;\n }\n\n return (\n <div class=\"results-wrapper\">\n <div class=\"results\">{this.renderResultsList()}</div>\n </div>\n );\n }\n\n private renderResultsList(): HTMLZListElement | HTMLSpanElement {\n if (this.preventSubmit && !this.resultsItemsList?.length) {\n return (\n <span class=\"item item-no-results\">\n Non abbiamo trovato risultati per <b>{this.searchString}</b>\n <br />\n <br />\n Cosa puoi fare?\n <ul>\n <li>Verificare di aver scritto bene</li>\n <li>Provare a cercare un'altra parola</li>\n <li>Provare a cercare qualcosa di più generico</li>\n </ul>\n </span>\n );\n }\n\n return (\n <z-list\n role=\"listbox\"\n id={`list-${this.htmlid}`}\n aria-label={this.htmlAriaLabel || this.label}\n >\n {this.renderSearchHelper(!!this.resultsItemsList?.length)}\n {this.renderItems()}\n {this.renderShowAllResults()}\n </z-list>\n );\n }\n\n private renderItems(): HTMLZListGroupElement[] {\n if (!this.resultsItemsList?.length) {\n return [];\n }\n\n const groupedItems = this.getGroupedItems(this.resultsItemsList);\n const listGroups: HTMLZListGroupElement[] = [];\n let counter = 0;\n\n Object.values(groupedItems).forEach((groupItem: SearchbarGroup, index: number, array) => {\n if (this.checkResultsCount(counter)) {\n const listGroupsElements: HTMLZListElement[] = [];\n groupItem.items.forEach((item: SearchbarItem, subindex: number, subarray) => {\n if (this.checkResultsCount(counter)) {\n const isLast = index === array.length - 1 && subindex === subarray.length - 1;\n listGroupsElements.push(this.renderItem(item, subindex, !isLast));\n }\n counter++;\n });\n\n if (listGroupsElements.length) {\n listGroups.push(\n <z-list-group divider-type={ListDividerType.ELEMENT}>\n {this.renderItemCategory(groupItem)}\n {listGroupsElements}\n </z-list-group>\n );\n }\n }\n });\n\n return listGroups;\n }\n\n private handleArrowsNavigation(e: KeyboardEvent): void {\n const currentElement = e.target as HTMLElement;\n const arrows = [KeyboardCode.ARROW_DOWN, KeyboardCode.ARROW_UP];\n\n if (!arrows.includes(e.key as KeyboardCode)) {\n e.preventDefault();\n\n return;\n }\n\n if (!this.items.length) {\n const list = this.element.shadowRoot.querySelector(\"z-list\");\n if (!list) {\n return;\n }\n\n this.items = Array.from(list.querySelectorAll(\".list-element\"));\n }\n\n this.items.forEach((item) => item.classList.contains(\"focused\") && item.classList.remove(\"focused\"));\n\n const currentIndex = this.items.indexOf(currentElement as HTMLZListElementElement);\n\n if (e.key === KeyboardCode.ARROW_DOWN) {\n e.preventDefault();\n const nextIndex = currentIndex + 1;\n if (nextIndex < this.items.length) {\n (this.items[nextIndex] as HTMLElement).focus();\n this.items[nextIndex].classList.add(\"focused\");\n }\n }\n\n if (e.key === KeyboardCode.ARROW_UP) {\n e.preventDefault();\n const prevIndex = currentIndex - 1;\n if (prevIndex < 0) {\n this.element.shadowRoot.querySelector(\"input\").focus();\n this.element.shadowRoot\n .querySelector(\"input\")\n .setSelectionRange(this.inputRef.value.length, this.inputRef.value.length);\n }\n if (prevIndex >= 0) {\n (this.items[prevIndex] as HTMLElement).focus();\n this.items[prevIndex].classList.add(\"focused\");\n }\n }\n }\n\n private renderItem(item: SearchbarItem, key: number, divider: boolean): HTMLZListElementElement {\n return (\n <z-list-element\n id={`list-item-${this.htmlid}-${key}`}\n tabIndex={0}\n role=\"option\"\n dividerType={divider ? ListDividerType.ELEMENT : undefined}\n onKeyDown={(e: KeyboardEvent) => this.handleArrowsNavigation(e)}\n >\n <div\n class=\"list-element\"\n tabIndex={0}\n onClick={() => this.emitSearchItemClick(item)}\n onKeyDown={(e: KeyboardEvent) => handleEnterKeydSubmit(e, () => this.emitSearchItemClick(item))}\n onMouseEnter={(e: MouseEvent) => {\n const currentElement = e.target as HTMLElement;\n currentElement.classList.add(\"hovered\");\n }}\n onMouseLeave={(e: MouseEvent) => {\n const currentElement = e.target as HTMLElement;\n currentElement.classList.contains(\"hovered\") && currentElement.classList.remove(\"hovered\");\n }}\n >\n <span class=\"item ellipsis\">\n {item?.icon && (\n <z-icon\n class=\"item-icon\"\n name={item.icon}\n />\n )}\n <span\n class=\"item-label\"\n title={item.label}\n innerHTML={this.renderItemLabel(item.label)}\n />\n </span>\n {item?.tag && <z-tag icon={item.tag.icon}>{!this.isMobile ? item.tag.text : \"\"}</z-tag>}\n </div>\n {item.children && item.children.length > 0 ? (\n <z-list>\n <div class=\"children-node\">{item.children.map((child, index) => this.renderItem(child, index, false))}</div>\n </z-list>\n ) : null}\n </z-list-element>\n );\n }\n\n private renderItemLabel(label: string): string {\n if (!this.searchString) {\n return label;\n }\n\n return label.replace(\n new RegExp(this.searchString.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"), \"gmi\"),\n (found) => `<mark>${found}</mark>`\n );\n }\n\n private renderItemCategory(groupItem: SearchbarGroup): HTMLSpanElement | null {\n if (!groupItem?.category) {\n return null;\n }\n\n return (\n <span\n class=\"category-heading\"\n slot=\"header-title\"\n >\n <span class=\"category\">{groupItem.category}</span>\n {groupItem?.subcategory && <span class=\"subcategory\">{groupItem.subcategory}</span>}\n </span>\n );\n }\n\n private renderSearchHelper(hasDivider = true): HTMLZListElement | null {\n if (!this.autocomplete || this.preventSubmit || !this.searchString) {\n return null;\n }\n\n return (\n <z-list-element\n role=\"option\"\n dividerType={hasDivider ? ListDividerType.ELEMENT : undefined}\n id={`list-item-${this.htmlid}-search`}\n onKeyDown={(e: KeyboardEvent) => this.handleArrowsNavigation(e)}\n >\n <div\n tabindex={0}\n onClick={() => this.emitSearchSubmit()}\n onKeyDown={(e: KeyboardEvent) => handleEnterKeydSubmit(e, () => this.emitSearchSubmit())}\n class=\"list-element\"\n >\n <span class=\"item item-search\">\n <z-icon\n class=\"search-icon\"\n name=\"left-magnifying-glass\"\n />\n <span\n class=\"item-label\"\n innerHTML={this.searchHelperLabel.replace(\"{searchString}\", `<mark>${this.searchString}</mark>`)}\n />\n </span>\n </div>\n </z-list-element>\n );\n }\n\n private renderShowAllResults(): HTMLZListElement | null {\n if (\n !this.currResultsCount ||\n !this.searchString ||\n !this.resultsItemsList?.length ||\n this.currResultsCount >= this.resultsItemsList?.length\n ) {\n return null;\n }\n\n return (\n <z-list-element\n role=\"option\"\n tabindex={0}\n clickable\n id={`list-item-${this.htmlid}-show-all`}\n onClickItem={() => (this.currResultsCount = 0)}\n color=\"color-primary01\"\n >\n <div class=\"item-show-all\">Vedi tutti i risultati</div>\n </z-list-element>\n );\n }\n\n render(): HTMLZSearchbarElement {\n return (\n <Host\n onFocus={() => (this.showResults = true)}\n onClick={(e) => this.handleOutsideClick(e)}\n class={{\"has-submit\": this.showSearchButton, \"has-results\": this.autocomplete}}\n >\n <div class=\"input-container\">\n {this.renderInput()}\n {this.renderResults()}\n </div>\n {this.renderButton()}\n </Host>\n );\n }\n}\n",":host {\n --z-icon-width: 14px;\n --z-icon-height: 14px;\n\n display: flex;\n width: fit-content;\n max-width: inherit;\n height: fit-content;\n max-height: inherit;\n align-items: flex-start;\n padding: calc(var(--space-unit) / 2);\n background-color: var(--z-tag-bg, var(--color-hover-primary));\n border-radius: var(--border-radius);\n color: var(--z-tag-text-color, var(--color-text-inverse));\n fill: currentcolor;\n font-family: var(--font-family-sans);\n font-size: var(--font-size-1);\n font-weight: var(--font-sb);\n letter-spacing: 0.32px;\n line-height: 14px;\n text-transform: uppercase;\n}\n\n:host > z-icon {\n margin-right: 0;\n transition: margin-right 0.3s ease-out;\n}\n\n:host(.has-text):not(.expandable) > z-icon {\n margin-right: var(--space-unit);\n}\n\n:host(.has-text).expandable:hover > z-icon {\n margin-right: var(--space-unit);\n}\n\n:host(.expandable) > div {\n overflow: hidden;\n max-width: 0;\n max-height: 0;\n}\n\n:host(.expandable:hover) > div {\n max-width: 100%;\n max-height: 100%;\n}\n","import {Component, Element, Host, Prop, h} from \"@stencil/core\";\n\n/**\n * Ztag component.\n * @slot - The text of the z-tag.\n * @cssprop --z-tag-text-color - text and icon color using tokens.\n * @cssprop --z-tag-bg - background color of the z-tag.\n */\n@Component({\n tag: \"z-tag\",\n styleUrl: \"styles.css\",\n shadow: false,\n scoped: true,\n})\nexport class ZTag {\n @Element() host: HTMLZTagElement;\n\n /** [optional] Tag icon */\n @Prop()\n icon?: string;\n\n /** [optional] Hide the text and show it on hover*/\n @Prop()\n expandable?: boolean;\n\n render(): HTMLZTagElement {\n const hasText = this.host.textContent?.trim().length > 0;\n\n return (\n <Host\n class={{\n \"expandable\": this.expandable && !!this.icon,\n \"has-text\": hasText,\n }}\n >\n {this.icon && <z-icon name={this.icon} />}\n <div>\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}