selectamelo 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/index.cjs +636 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +64 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.global.js +634 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +609 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom.ts","../src/core.ts"],"sourcesContent":["export function isTruthyAttr(v: unknown): boolean {\n if (v === true) return true;\n if (v === false || v == null) return false;\n const s = String(v).toLowerCase().trim();\n return s === \"1\" || s === \"true\" || s === \"yes\" || s === \"on\";\n}\n\nexport function uid(prefix = \"zs-\"): string {\n return prefix + Math.random().toString(36).slice(2);\n}","import { uid } from \"./dom\";\n\nexport type ZSelectI18n = {\n placeholder?: string;\n searchPlaceholder?: string;\n clearTitle?: string;\n clearAriaLabel?: string;\n removeChipAriaLabel?: string;\n noResults?: string;\n};\n\nexport type ZSelectCoreOptions = {\n searchable?: boolean;\n placeholder?: string;\n allowClear?: boolean;\n hideSearch?: boolean;\n\n /** Forces the underlying <select> disabled state (HTML native disabled). */\n disabled?: boolean;\n\n /**\n * Prevents user interaction but does NOT disable the underlying <select>,\n * so its value is still submitted in forms.\n */\n readonly?: boolean;\n\n i18n?: ZSelectI18n;\n};\n\nexport type ZSelectInstance = {\n select: HTMLSelectElement;\n\n destroy(): void;\n open(): void;\n close(): void;\n\n setValue(value: string | string[] | null): void;\n getValue(): string | string[];\n\n clearOptions(keepPlaceholder?: boolean): void;\n setOptions(\n options: Array<{ value: string; label: string; disabled?: boolean }>,\n keepPlaceholder?: boolean\n ): void;\n\n addOption(\n option: { value: string; label: string; disabled?: boolean },\n selectIt?: boolean\n ): void;\n removeOption(value: string): void;\n updateOption(value: string, patch: { label?: string; disabled?: boolean }): void;\n upsertOption(\n option: { value: string; label: string; disabled?: boolean },\n selectIt?: boolean\n ): void;\n\n refresh(): void;\n setLoading(isLoading: boolean): void;\n\n setDisabled(isDisabled: boolean): void;\n setReadonly(isReadonly: boolean): void;\n isDisabled(): boolean;\n isReadonly(): boolean;\n};\n\nconst instances = new WeakMap<HTMLSelectElement, ZSelectInstance>();\n\nfunction dispatch(select: HTMLSelectElement, name: string, detail?: any) {\n select.dispatchEvent(new CustomEvent(name, { bubbles: true, detail }));\n}\n\nfunction getSelected(select: HTMLSelectElement): string | string[] {\n if (select.multiple) return Array.from(select.selectedOptions).map(o => o.value);\n return select.value;\n}\n\nfunction setSelected(select: HTMLSelectElement, value: string | string[] | null) {\n if (select.multiple) {\n const arr = Array.isArray(value)\n ? value.map(String)\n : value == null\n ? []\n : [String(value)];\n\n Array.from(select.options).forEach(o => (o.selected = arr.includes(o.value)));\n } else {\n select.value = value == null ? \"\" : String(value);\n }\n\n select.dispatchEvent(new Event(\"change\", { bubbles: true }));\n}\n\nexport const ZSelectCore = {\n create(select: HTMLSelectElement, options: ZSelectCoreOptions = {}): ZSelectInstance {\n const existing = instances.get(select);\n if (existing) return existing;\n\n const opts: {\n searchable: boolean;\n placeholder: string;\n allowClear: boolean;\n hideSearch: boolean;\n } = {\n searchable: options.searchable ?? true,\n placeholder: options.placeholder ?? \"\",\n allowClear: options.allowClear ?? true,\n hideSearch: options.hideSearch ?? false,\n };\n\n function readBoolAttr(name: string): boolean | null {\n const v = select.getAttribute(name);\n if (v == null) return null;\n if (v === \"\" || v === \"true\" || v === \"1\") return true;\n if (v === \"false\" || v === \"0\") return false;\n return null;\n }\n\n const aAllowClear = readBoolAttr(\"data-allow-clear\");\n if (aAllowClear != null) opts.allowClear = aAllowClear;\n\n const aHideSearch = readBoolAttr(\"data-hide-search\");\n if (aHideSearch != null) opts.hideSearch = aHideSearch;\n\n const aSearchable = readBoolAttr(\"data-searchable\");\n if (aSearchable != null) opts.searchable = aSearchable;\n\n // --- UI scaffold\n const root = document.createElement(\"div\");\n root.className = \"zselect\";\n root.setAttribute(\"data-zselect-core\", \"1\");\n\n const control = document.createElement(\"button\");\n control.type = \"button\";\n control.className = \"zselect__control\";\n control.setAttribute(\"aria-haspopup\", \"listbox\");\n control.setAttribute(\"aria-expanded\", \"false\");\n\n const ds = {\n placeholder: select.getAttribute(\"data-zselect-placeholder\"),\n searchPlaceholder: select.getAttribute(\"data-zselect-search-placeholder\"),\n clearTitle: select.getAttribute(\"data-zselect-clear-title\"),\n clearAriaLabel: select.getAttribute(\"data-zselect-clear-aria-label\"),\n removeChipAriaLabel: select.getAttribute(\"data-zselect-remove-chip-aria-label\"),\n noResults: select.getAttribute(\"data-zselect-no-results\"),\n };\n\n const t = {\n placeholder:\n options.i18n?.placeholder ??\n ds.placeholder ??\n options.placeholder ??\n \"\",\n\n searchPlaceholder:\n options.i18n?.searchPlaceholder ??\n ds.searchPlaceholder ??\n \"Cerca...\",\n\n clearTitle:\n options.i18n?.clearTitle ??\n ds.clearTitle ??\n \"Pulisci\",\n\n clearAriaLabel:\n options.i18n?.clearAriaLabel ??\n ds.clearAriaLabel ??\n \"Pulisci selezione\",\n\n removeChipAriaLabel:\n options.i18n?.removeChipAriaLabel ??\n ds.removeChipAriaLabel ??\n \"Rimuovi\",\n\n noResults:\n options.i18n?.noResults ??\n ds.noResults ??\n \"Nessun risultato\",\n };\n\n const valueWrap = document.createElement(\"span\");\n valueWrap.className = \"zselect__valuewrap\";\n\n const chipsEl = document.createElement(\"span\");\n chipsEl.className = \"zselect__chips\";\n chipsEl.hidden = !select.multiple;\n\n const valueEl = document.createElement(\"span\");\n valueEl.className = \"zselect__value\";\n\n valueWrap.append(chipsEl, valueEl);\n\n const actions = document.createElement(\"span\");\n actions.className = \"zselect__actions\";\n\n const clearEl = document.createElement(\"span\");\n clearEl.className = \"zselect__clear\";\n clearEl.textContent = \"×\";\n clearEl.title = t.clearTitle;\n clearEl.setAttribute(\"aria-hidden\", \"true\");\n clearEl.setAttribute(\"aria-label\", t.clearAriaLabel);\n clearEl.style.display = \"none\";\n\n const arrow = document.createElement(\"span\");\n arrow.className = \"zselect__arrow\";\n arrow.textContent = \"▾\";\n\n actions.append(clearEl, arrow);\n control.append(valueWrap, actions);\n\n const dropdown = document.createElement(\"div\");\n dropdown.className = \"zselect__dropdown\";\n dropdown.hidden = true;\n\n const searchEl = document.createElement(\"input\");\n searchEl.className = \"zselect__search\";\n searchEl.type = \"text\";\n searchEl.autocomplete = \"off\";\n searchEl.placeholder = t.searchPlaceholder;\n searchEl.hidden = opts.hideSearch || !opts.searchable;\n\n const list = document.createElement(\"ul\");\n list.className = \"zselect__list\";\n list.setAttribute(\"role\", \"listbox\");\n\n // accessibility ids\n const listId = `zselect-list-${uid()}`;\n list.id = listId;\n control.setAttribute(\"aria-controls\", listId);\n\n dropdown.append(searchEl, list);\n root.append(control, dropdown);\n\n // hide original select (keep it in DOM for forms)\n const prevStyle = {\n position: select.style.position,\n left: select.style.left,\n width: select.style.width,\n height: select.style.height,\n };\n\n select.style.position = \"absolute\";\n select.style.left = \"-9999px\";\n select.style.width = \"1px\";\n select.style.height = \"1px\";\n\n select.insertAdjacentElement(\"afterend\", root);\n\n let open = false;\n let readonly = !!options.readonly || select.getAttribute(\"data-readonly\") === \"true\";\n const aDisabled = readBoolAttr(\"data-disabled\");\n if (aDisabled != null) select.disabled = !!aDisabled;\n let activeIndex = -1;\n let filterQuery = \"\";\n let hoverArmed = false;\n\n function isDisabled() {\n return select.disabled || select.hasAttribute(\"disabled\");\n }\n\n function isReadonly() {\n return readonly;\n }\n\n function applyStateToUI() {\n const disabledNow = isDisabled();\n const readonlyNow = isReadonly();\n\n root.classList.toggle(\"is-disabled\", disabledNow);\n root.classList.toggle(\"is-readonly\", readonlyNow);\n\n control.disabled = disabledNow || readonlyNow;\n searchEl.disabled = disabledNow || readonlyNow;\n\n control.setAttribute(\"aria-disabled\", disabledNow || readonlyNow ? \"true\" : \"false\");\n\n if ((disabledNow || readonlyNow) && open) close();\n }\n\n function hasValue(): boolean {\n if (select.multiple) return Array.from(select.selectedOptions).some(o => (o.value ?? \"\") !== \"\");\n return (select.value ?? \"\") !== \"\";\n }\n\n function updateClearVisibility() {\n if (!opts.allowClear || isDisabled() || isReadonly()) {\n clearEl.style.display = \"none\";\n return;\n }\n clearEl.style.display = hasValue() ? \"\" : \"none\";\n }\n\n function normalize(s: string) {\n return s.toLowerCase();\n }\n\n function getOptionLabel(opt: HTMLOptionElement) {\n return (opt.textContent ?? \"\").trim();\n }\n\n function allOptions() {\n return Array.from(select.options);\n }\n\n function selectedOptions() {\n return Array.from(select.selectedOptions);\n }\n\n function selectedNonEmpty() {\n return selectedOptions().filter(o => (o.value ?? \"\") !== \"\");\n }\n\n function emitChange() {\n select.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n\n function getFilteredOptions(): HTMLOptionElement[] {\n const q = normalize(filterQuery.trim());\n const all = allOptions();\n if (!q) return all;\n return all.filter(o => normalize(getOptionLabel(o)).includes(q));\n }\n\n function clearValue() {\n if (!opts.allowClear) return;\n if (isReadonly()) return;\n\n if (select.multiple) {\n allOptions().forEach(o => (o.selected = false));\n select.value = \"\";\n } else {\n const hasEmpty = !!select.querySelector('option[value=\"\"]');\n select.value = hasEmpty ? \"\" : (select.options[0]?.value ?? \"\");\n }\n\n emitChange();\n dispatch(select, \"zselect:clear\");\n }\n\n function renderChips() {\n chipsEl.innerHTML = \"\";\n if (!select.multiple) return;\n\n const selected = selectedNonEmpty();\n if (!selected.length) return;\n\n selected.forEach(opt => {\n const chip = document.createElement(\"span\");\n chip.className = \"zselect__chip\";\n chip.dataset.value = opt.value;\n\n const label = document.createElement(\"span\");\n label.className = \"zselect__chip-label\";\n label.textContent = getOptionLabel(opt);\n\n const x = document.createElement(\"button\");\n x.type = \"button\";\n x.className = \"zselect__chip-remove\";\n x.textContent = \"×\";\n x.title = \"Rimuovi\";\n x.setAttribute(\"aria-label\", t.removeChipAriaLabel);\n\n x.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n e.stopPropagation();\n if (isReadonly()) return;\n\n opt.selected = false;\n emitChange();\n });\n\n chip.append(label, x);\n chipsEl.append(chip);\n });\n }\n\n function renderLabel() {\n const selected = selectedOptions();\n\n const isPlaceholder =\n selected.length === 0 ||\n (selected.length === 1 && (selected[0]?.value ?? \"\") === \"\") ||\n (select.multiple && selectedNonEmpty().length === 0);\n\n if (select.multiple) {\n renderChips();\n valueEl.textContent = isPlaceholder ? (t.placeholder || \"Seleziona...\") : \"\";\n valueEl.classList.toggle(\"is-placeholder\", isPlaceholder);\n return;\n }\n\n if (isPlaceholder) {\n valueEl.textContent = t.placeholder || \"Seleziona...\";\n valueEl.classList.add(\"is-placeholder\");\n return;\n }\n\n const first = selected[0];\n valueEl.textContent = (first?.textContent ?? \"\").trim();\n valueEl.classList.remove(\"is-placeholder\");\n }\n\n function getOptionItems(includeDisabled = true) {\n const selector = includeDisabled\n ? \".zselect__option\"\n : \".zselect__option:not(.is-disabled)\";\n return Array.from(list.querySelectorAll<HTMLLIElement>(selector));\n }\n\n function setActiveIndex(items: HTMLLIElement[], idx: number, scroll = true) {\n activeIndex = idx;\n items.forEach((li, i) => li.classList.toggle(\"is-active\", i === activeIndex));\n if (scroll && activeIndex >= 0) items[activeIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n\n function clearActive(items?: HTMLLIElement[]) {\n const all = items ?? getOptionItems();\n activeIndex = -1;\n all.forEach(li => li.classList.remove(\"is-active\"));\n }\n\n function setActiveByValue(val: string) {\n const items = getOptionItems();\n const idx = items.findIndex(li => (li.dataset.value ?? \"\") === val);\n setActiveIndex(items, idx, true);\n }\n\n function renderList() {\n const filtered = getFilteredOptions().filter(opt => (opt.value ?? \"\") !== \"\");\n\n list.innerHTML = \"\";\n\n const selectedValues = new Set(selectedOptions().map(o => o.value));\n\n if (!filtered.length) {\n const empty = document.createElement(\"li\");\n empty.className = \"zselect__empty\";\n empty.textContent = t.noResults;\n list.append(empty);\n activeIndex = -1;\n return;\n }\n\n filtered.forEach((opt, idx) => {\n const li = document.createElement(\"li\");\n li.className = \"zselect__option\";\n li.setAttribute(\"role\", \"option\");\n li.dataset.value = opt.value;\n\n const labelText = getOptionLabel(opt);\n const labelEl = document.createElement(\"span\");\n labelEl.className = \"zselect__option-label\";\n labelEl.textContent = labelText;\n\n const checkEl = document.createElement(\"span\");\n checkEl.className = \"zselect__option-check\";\n checkEl.setAttribute(\"aria-hidden\", \"true\");\n checkEl.textContent = \"✓\";\n\n // Only show the check indicator when the option is selected.\n const isSelected = selectedValues.has(opt.value);\n checkEl.hidden = !isSelected;\n\n li.append(labelEl, checkEl);\n\n if (opt.disabled) li.classList.add(\"is-disabled\");\n\n if (isSelected) {\n li.classList.add(\"is-selected\");\n li.setAttribute(\"aria-selected\", \"true\");\n } else {\n li.setAttribute(\"aria-selected\", \"false\");\n }\n\n li.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n if (opt.disabled) return;\n if (isReadonly()) return;\n\n if (select.multiple) {\n opt.selected = !opt.selected;\n emitChange();\n renderList();\n if (!searchEl.hidden) searchEl.focus();\n } else {\n select.value = opt.value;\n emitChange();\n close();\n control.focus();\n }\n });\n\n li.addEventListener(\"mouseenter\", () => {\n if (!hoverArmed) return;\n if (opt.disabled) return;\n const all = getOptionItems();\n setActiveIndex(all, idx, false);\n });\n\n list.append(li);\n });\n\n // Never auto-activate on open. Only allow hover or keyboard to set active.\n clearActive();\n }\n\n function refresh() {\n renderLabel();\n updateClearVisibility();\n if (open) renderList();\n }\n\n function openDropdown() {\n if (open || isDisabled() || isReadonly()) return;\n\n open = true;\n dropdown.hidden = false;\n control.setAttribute(\"aria-expanded\", \"true\");\n root.classList.add(\"is-open\");\n\n filterQuery = \"\";\n // Prevent immediate activation of the first option just because the dropdown\n // appears under the current mouse cursor position. We only activate on real\n // pointer movement inside the dropdown.\n hoverArmed = false;\n dropdown.addEventListener(\n \"mousemove\",\n () => {\n hoverArmed = true;\n },\n { once: true }\n );\n if (!searchEl.hidden) {\n searchEl.value = \"\";\n renderList();\n queueMicrotask(() => searchEl.focus());\n } else {\n renderList();\n }\n\n dispatch(select, \"zselect:open\");\n }\n\n function close() {\n if (!open) return;\n\n open = false;\n hoverArmed = false;\n dropdown.hidden = true;\n control.setAttribute(\"aria-expanded\", \"false\");\n root.classList.remove(\"is-open\");\n dispatch(select, \"zselect:close\");\n }\n\n function toggle() {\n open ? close() : openDropdown();\n }\n\n function moveActive(delta: number) {\n const items = getOptionItems(false);\n if (!items.length) return;\n\n let i = activeIndex;\n if (i < 0) i = -1;\n i = Math.min(Math.max(i + delta, 0), items.length - 1);\n setActiveIndex(items, i, true);\n }\n\n function selectActive() {\n if (isReadonly()) return;\n\n const items = getOptionItems(false);\n if (!items.length) return;\n\n const li = items[Math.max(0, Math.min(activeIndex, items.length - 1))];\n if (!li) return;\n\n const val = li.dataset.value ?? \"\";\n const opt = Array.from(select.options).find(o => o.value === val);\n if (!opt || opt.disabled) return;\n\n if (select.multiple) {\n opt.selected = !opt.selected;\n emitChange();\n renderList();\n if (!searchEl.hidden) searchEl.focus();\n } else {\n select.value = opt.value;\n emitChange();\n close();\n control.focus();\n }\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (isDisabled() || isReadonly()) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) openDropdown();\n moveActive(+1);\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!open) openDropdown();\n moveActive(-1);\n return;\n }\n if (e.key === \"Enter\") {\n if (!open) return;\n e.preventDefault();\n selectActive();\n return;\n }\n if (e.key === \"Escape\") {\n if (!open) return;\n e.preventDefault();\n close();\n control.focus();\n return;\n }\n if (e.key === \"Tab\") {\n if (open) close();\n return;\n }\n\n if (select.multiple && e.key === \"Backspace\") {\n const searchEmpty = searchEl.hidden || searchEl.value.trim() === \"\";\n if (searchEmpty) {\n const selected = selectedNonEmpty();\n const last = selected[selected.length - 1];\n if (last) {\n last.selected = false;\n emitChange();\n renderList();\n }\n }\n }\n }\n\n const onDocDown = (e: MouseEvent) => {\n if (!root.contains(e.target as Node)) close();\n };\n\n document.addEventListener(\"mousedown\", onDocDown);\n\n control.addEventListener(\"click\", () => toggle());\n control.addEventListener(\"keydown\", onKeydown);\n searchEl.addEventListener(\"keydown\", onKeydown);\n\n searchEl.addEventListener(\"input\", () => {\n filterQuery = searchEl.value ?? \"\";\n renderList();\n dispatch(select, \"zselect:search\", { q: filterQuery });\n });\n\n clearEl.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n if (open) renderList();\n if (!searchEl.hidden) searchEl.focus();\n });\n\n select.addEventListener(\"change\", () => {\n renderLabel();\n updateClearVisibility();\n if (open) renderList();\n dispatch(select, \"zselect:change\", { value: getSelected(select) });\n });\n\n function clearOptions(keepPlaceholder = true) {\n const placeholderOpt = select.querySelector('option[value=\"\"]') as HTMLOptionElement | null;\n\n select.innerHTML = \"\";\n\n if (keepPlaceholder) {\n const opt = document.createElement(\"option\");\n opt.value = \"\";\n opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? \"Seleziona...\";\n select.append(opt);\n }\n\n select.value = \"\";\n emitChange();\n }\n\n function setOptions(\n optionsArr: Array<{ value: string; label: string; disabled?: boolean }>,\n keepPlaceholder = true\n ) {\n const placeholderText =\n (select.querySelector('option[value=\"\"]') as HTMLOptionElement | null)?.textContent ??\n opts.placeholder ??\n \"Seleziona...\";\n\n select.innerHTML = \"\";\n\n if (keepPlaceholder) {\n const ph = document.createElement(\"option\");\n ph.value = \"\";\n ph.textContent = placeholderText;\n select.append(ph);\n }\n\n optionsArr.forEach(o => {\n const opt = document.createElement(\"option\");\n opt.value = String(o.value);\n opt.textContent = o.label;\n if (o.disabled) opt.disabled = true;\n select.append(opt);\n });\n\n select.value = \"\";\n emitChange();\n }\n\n function setLoading(isLoading: boolean) {\n root.classList.toggle(\"is-loading\", !!isLoading);\n\n if (isLoading) {\n control.disabled = true;\n searchEl.disabled = true;\n return;\n }\n\n applyStateToUI();\n }\n\n function findOptionEl(value: string) {\n const v = String(value);\n return Array.from(select.options).find(o => o.value === v) ?? null;\n }\n\n function addOption(\n option: { value: string; label: string; disabled?: boolean },\n selectIt = false\n ) {\n const value = String(option.value);\n if (findOptionEl(value)) return;\n\n const opt = document.createElement(\"option\");\n opt.value = value;\n opt.textContent = option.label;\n if (option.disabled) opt.disabled = true;\n\n select.append(opt);\n\n if (selectIt) {\n if (select.multiple) opt.selected = true;\n else select.value = value;\n emitChange();\n } else {\n refresh();\n }\n }\n\n function removeOption(value: string) {\n const opt = findOptionEl(value);\n if (!opt) return;\n\n const wasSelected = opt.selected;\n opt.remove();\n\n if (wasSelected) {\n emitChange();\n } else {\n refresh();\n }\n }\n\n function updateOption(value: string, patch: { label?: string; disabled?: boolean }) {\n const opt = findOptionEl(value);\n if (!opt) return;\n\n if (patch.label !== undefined) opt.textContent = patch.label;\n if (patch.disabled !== undefined) opt.disabled = !!patch.disabled;\n\n refresh();\n }\n\n function upsertOption(\n option: { value: string; label: string; disabled?: boolean },\n selectIt = false\n ) {\n const value = String(option.value);\n const opt = findOptionEl(value);\n\n if (!opt) {\n addOption(option, selectIt);\n return;\n }\n\n opt.textContent = option.label;\n opt.disabled = !!option.disabled;\n\n if (selectIt) {\n if (select.multiple) opt.selected = true;\n else select.value = value;\n select.dispatchEvent(new Event(\"change\", { bubbles: true }));\n } else {\n refresh();\n }\n }\n\n // initial render\n renderLabel();\n updateClearVisibility();\n\n // apply initial disabled if provided\n if (options.disabled != null) select.disabled = !!options.disabled;\n\n applyStateToUI();\n\n const inst: ZSelectInstance = {\n select,\n\n destroy() {\n document.removeEventListener(\"mousedown\", onDocDown);\n root.remove();\n\n // restore select styles\n select.style.position = prevStyle.position;\n select.style.left = prevStyle.left;\n select.style.width = prevStyle.width;\n select.style.height = prevStyle.height;\n\n instances.delete(select);\n },\n\n open: openDropdown,\n close,\n\n setValue(value: string | string[] | null) {\n setSelected(select, value);\n },\n getValue() {\n return getSelected(select);\n },\n\n clearOptions,\n setOptions,\n addOption,\n removeOption,\n updateOption,\n upsertOption,\n\n refresh,\n setLoading,\n\n setDisabled(v: boolean) {\n select.disabled = !!v;\n applyStateToUI();\n },\n setReadonly(v: boolean) {\n readonly = !!v;\n applyStateToUI();\n },\n isDisabled,\n isReadonly,\n };\n\n instances.set(select, inst);\n return inst;\n },\n\n get(select: HTMLSelectElement): ZSelectInstance | null {\n return instances.get(select) ?? null;\n },\n\n destroy(select: HTMLSelectElement): void {\n const inst = instances.get(select);\n if (inst) inst.destroy();\n },\n};\n"],"mappings":";AAOO,SAAS,IAAI,SAAS,OAAe;AAC1C,SAAO,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AACpD;;;ACwDA,IAAM,YAAY,oBAAI,QAA4C;AAElE,SAAS,SAAS,QAA2B,MAAc,QAAc;AACvE,SAAO,cAAc,IAAI,YAAY,MAAM,EAAE,SAAS,MAAM,OAAO,CAAC,CAAC;AACvE;AAEA,SAAS,YAAY,QAA8C;AACjE,MAAI,OAAO,SAAU,QAAO,MAAM,KAAK,OAAO,eAAe,EAAE,IAAI,OAAK,EAAE,KAAK;AAC/E,SAAO,OAAO;AAChB;AAEA,SAAS,YAAY,QAA2B,OAAiC;AAC/E,MAAI,OAAO,UAAU;AACnB,UAAM,MAAM,MAAM,QAAQ,KAAK,IAC3B,MAAM,IAAI,MAAM,IAChB,SAAS,OACP,CAAC,IACD,CAAC,OAAO,KAAK,CAAC;AAEpB,UAAM,KAAK,OAAO,OAAO,EAAE,QAAQ,OAAM,EAAE,WAAW,IAAI,SAAS,EAAE,KAAK,CAAE;AAAA,EAC9E,OAAO;AACL,WAAO,QAAQ,SAAS,OAAO,KAAK,OAAO,KAAK;AAAA,EAClD;AAEA,SAAO,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,CAAC;AAC7D;AAEO,IAAM,cAAc;AAAA,EACzB,OAAO,QAA2B,UAA8B,CAAC,GAAoB;AACnF,UAAM,WAAW,UAAU,IAAI,MAAM;AACrC,QAAI,SAAU,QAAO;AAErB,UAAM,OAKF;AAAA,MACF,YAAY,QAAQ,cAAc;AAAA,MAClC,aAAa,QAAQ,eAAe;AAAA,MACpC,YAAY,QAAQ,cAAc;AAAA,MAClC,YAAY,QAAQ,cAAc;AAAA,IACpC;AAEA,aAAS,aAAa,MAA8B;AAClD,YAAM,IAAI,OAAO,aAAa,IAAI;AAClC,UAAI,KAAK,KAAM,QAAO;AACtB,UAAI,MAAM,MAAM,MAAM,UAAU,MAAM,IAAK,QAAO;AAClD,UAAI,MAAM,WAAW,MAAM,IAAK,QAAO;AACvC,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,aAAa,kBAAkB;AACnD,QAAI,eAAe,KAAM,MAAK,aAAa;AAE3C,UAAM,cAAc,aAAa,kBAAkB;AACnD,QAAI,eAAe,KAAM,MAAK,aAAa;AAE3C,UAAM,cAAc,aAAa,iBAAiB;AAClD,QAAI,eAAe,KAAM,MAAK,aAAa;AAG3C,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,SAAK,YAAY;AACjB,SAAK,aAAa,qBAAqB,GAAG;AAE1C,UAAM,UAAU,SAAS,cAAc,QAAQ;AAC/C,YAAQ,OAAO;AACf,YAAQ,YAAY;AACpB,YAAQ,aAAa,iBAAiB,SAAS;AAC/C,YAAQ,aAAa,iBAAiB,OAAO;AAE7C,UAAM,KAAK;AAAA,MACT,aAAa,OAAO,aAAa,0BAA0B;AAAA,MAC3D,mBAAmB,OAAO,aAAa,iCAAiC;AAAA,MACxE,YAAY,OAAO,aAAa,0BAA0B;AAAA,MAC1D,gBAAgB,OAAO,aAAa,+BAA+B;AAAA,MACnE,qBAAqB,OAAO,aAAa,qCAAqC;AAAA,MAC9E,WAAW,OAAO,aAAa,yBAAyB;AAAA,IAC1D;AAEA,UAAM,IAAI;AAAA,MACR,aACE,QAAQ,MAAM,eACd,GAAG,eACH,QAAQ,eACR;AAAA,MAEF,mBACE,QAAQ,MAAM,qBACd,GAAG,qBACH;AAAA,MAEF,YACE,QAAQ,MAAM,cACd,GAAG,cACH;AAAA,MAEF,gBACE,QAAQ,MAAM,kBACd,GAAG,kBACH;AAAA,MAEF,qBACE,QAAQ,MAAM,uBACd,GAAG,uBACH;AAAA,MAEF,WACE,QAAQ,MAAM,aACd,GAAG,aACH;AAAA,IACJ;AAEA,UAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,cAAU,YAAY;AAEtB,UAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,YAAQ,YAAY;AACpB,YAAQ,SAAS,CAAC,OAAO;AAEzB,UAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,YAAQ,YAAY;AAEpB,cAAU,OAAO,SAAS,OAAO;AAEjC,UAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,YAAQ,YAAY;AAEpB,UAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,YAAQ,YAAY;AACpB,YAAQ,cAAc;AACtB,YAAQ,QAAQ,EAAE;AAClB,YAAQ,aAAa,eAAe,MAAM;AAC1C,YAAQ,aAAa,cAAc,EAAE,cAAc;AACnD,YAAQ,MAAM,UAAU;AAExB,UAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,UAAM,YAAY;AAClB,UAAM,cAAc;AAEpB,YAAQ,OAAO,SAAS,KAAK;AAC7B,YAAQ,OAAO,WAAW,OAAO;AAEjC,UAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,aAAS,YAAY;AACrB,aAAS,SAAS;AAElB,UAAM,WAAW,SAAS,cAAc,OAAO;AAC/C,aAAS,YAAY;AACrB,aAAS,OAAO;AAChB,aAAS,eAAe;AACxB,aAAS,cAAc,EAAE;AACzB,aAAS,SAAS,KAAK,cAAc,CAAC,KAAK;AAE3C,UAAM,OAAO,SAAS,cAAc,IAAI;AACxC,SAAK,YAAY;AACjB,SAAK,aAAa,QAAQ,SAAS;AAGnC,UAAM,SAAS,gBAAgB,IAAI,CAAC;AACpC,SAAK,KAAK;AACV,YAAQ,aAAa,iBAAiB,MAAM;AAE5C,aAAS,OAAO,UAAU,IAAI;AAC9B,SAAK,OAAO,SAAS,QAAQ;AAG7B,UAAM,YAAY;AAAA,MAChB,UAAU,OAAO,MAAM;AAAA,MACvB,MAAM,OAAO,MAAM;AAAA,MACnB,OAAO,OAAO,MAAM;AAAA,MACpB,QAAQ,OAAO,MAAM;AAAA,IACvB;AAEA,WAAO,MAAM,WAAW;AACxB,WAAO,MAAM,OAAO;AACpB,WAAO,MAAM,QAAQ;AACrB,WAAO,MAAM,SAAS;AAEtB,WAAO,sBAAsB,YAAY,IAAI;AAE7C,QAAI,OAAO;AACX,QAAI,WAAW,CAAC,CAAC,QAAQ,YAAY,OAAO,aAAa,eAAe,MAAM;AAC9E,UAAM,YAAY,aAAa,eAAe;AAC9C,QAAI,aAAa,KAAM,QAAO,WAAW,CAAC,CAAC;AAC3C,QAAI,cAAc;AAClB,QAAI,cAAc;AAClB,QAAI,aAAa;AAEjB,aAAS,aAAa;AACpB,aAAO,OAAO,YAAY,OAAO,aAAa,UAAU;AAAA,IAC1D;AAEA,aAAS,aAAa;AACpB,aAAO;AAAA,IACT;AAEA,aAAS,iBAAiB;AACxB,YAAM,cAAc,WAAW;AAC/B,YAAM,cAAc,WAAW;AAE/B,WAAK,UAAU,OAAO,eAAe,WAAW;AAChD,WAAK,UAAU,OAAO,eAAe,WAAW;AAEhD,cAAQ,WAAW,eAAe;AAClC,eAAS,WAAW,eAAe;AAEnC,cAAQ,aAAa,iBAAiB,eAAe,cAAc,SAAS,OAAO;AAEnF,WAAK,eAAe,gBAAgB,KAAM,OAAM;AAAA,IAClD;AAEA,aAAS,WAAoB;AAC3B,UAAI,OAAO,SAAU,QAAO,MAAM,KAAK,OAAO,eAAe,EAAE,KAAK,QAAM,EAAE,SAAS,QAAQ,EAAE;AAC/F,cAAQ,OAAO,SAAS,QAAQ;AAAA,IAClC;AAEA,aAAS,wBAAwB;AAC/B,UAAI,CAAC,KAAK,cAAc,WAAW,KAAK,WAAW,GAAG;AACpD,gBAAQ,MAAM,UAAU;AACxB;AAAA,MACF;AACA,cAAQ,MAAM,UAAU,SAAS,IAAI,KAAK;AAAA,IAC5C;AAEA,aAAS,UAAU,GAAW;AAC5B,aAAO,EAAE,YAAY;AAAA,IACvB;AAEA,aAAS,eAAe,KAAwB;AAC9C,cAAQ,IAAI,eAAe,IAAI,KAAK;AAAA,IACtC;AAEA,aAAS,aAAa;AACpB,aAAO,MAAM,KAAK,OAAO,OAAO;AAAA,IAClC;AAEA,aAAS,kBAAkB;AACzB,aAAO,MAAM,KAAK,OAAO,eAAe;AAAA,IAC1C;AAEA,aAAS,mBAAmB;AAC1B,aAAO,gBAAgB,EAAE,OAAO,QAAM,EAAE,SAAS,QAAQ,EAAE;AAAA,IAC7D;AAEA,aAAS,aAAa;AACpB,aAAO,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,IAC7D;AAEA,aAAS,qBAA0C;AACjD,YAAM,IAAI,UAAU,YAAY,KAAK,CAAC;AACtC,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,EAAG,QAAO;AACf,aAAO,IAAI,OAAO,OAAK,UAAU,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAAA,IACjE;AAEA,aAAS,aAAa;AACpB,UAAI,CAAC,KAAK,WAAY;AACtB,UAAI,WAAW,EAAG;AAElB,UAAI,OAAO,UAAU;AACnB,mBAAW,EAAE,QAAQ,OAAM,EAAE,WAAW,KAAM;AAC9C,eAAO,QAAQ;AAAA,MACjB,OAAO;AACL,cAAM,WAAW,CAAC,CAAC,OAAO,cAAc,kBAAkB;AAC1D,eAAO,QAAQ,WAAW,KAAM,OAAO,QAAQ,CAAC,GAAG,SAAS;AAAA,MAC9D;AAEA,iBAAW;AACX,eAAS,QAAQ,eAAe;AAAA,IAClC;AAEA,aAAS,cAAc;AACrB,cAAQ,YAAY;AACpB,UAAI,CAAC,OAAO,SAAU;AAEtB,YAAM,WAAW,iBAAiB;AAClC,UAAI,CAAC,SAAS,OAAQ;AAEtB,eAAS,QAAQ,SAAO;AACtB,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,YAAY;AACjB,aAAK,QAAQ,QAAQ,IAAI;AAEzB,cAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,cAAM,YAAY;AAClB,cAAM,cAAc,eAAe,GAAG;AAEtC,cAAM,IAAI,SAAS,cAAc,QAAQ;AACzC,UAAE,OAAO;AACT,UAAE,YAAY;AACd,UAAE,cAAc;AAChB,UAAE,QAAQ;AACV,UAAE,aAAa,cAAc,EAAE,mBAAmB;AAElD,UAAE,iBAAiB,aAAa,OAAK;AACnC,YAAE,eAAe;AACjB,YAAE,gBAAgB;AAClB,cAAI,WAAW,EAAG;AAElB,cAAI,WAAW;AACf,qBAAW;AAAA,QACb,CAAC;AAED,aAAK,OAAO,OAAO,CAAC;AACpB,gBAAQ,OAAO,IAAI;AAAA,MACrB,CAAC;AAAA,IACH;AAEA,aAAS,cAAc;AACrB,YAAM,WAAW,gBAAgB;AAEjC,YAAM,gBACJ,SAAS,WAAW,KACnB,SAAS,WAAW,MAAM,SAAS,CAAC,GAAG,SAAS,QAAQ,MACxD,OAAO,YAAY,iBAAiB,EAAE,WAAW;AAEpD,UAAI,OAAO,UAAU;AACnB,oBAAY;AACZ,gBAAQ,cAAc,gBAAiB,EAAE,eAAe,iBAAkB;AAC1E,gBAAQ,UAAU,OAAO,kBAAkB,aAAa;AACxD;AAAA,MACF;AAEA,UAAI,eAAe;AACjB,gBAAQ,cAAc,EAAE,eAAe;AACvC,gBAAQ,UAAU,IAAI,gBAAgB;AACtC;AAAA,MACF;AAEA,YAAM,QAAQ,SAAS,CAAC;AACxB,cAAQ,eAAe,OAAO,eAAe,IAAI,KAAK;AACtD,cAAQ,UAAU,OAAO,gBAAgB;AAAA,IAC3C;AAEA,aAAS,eAAe,kBAAkB,MAAM;AAC9C,YAAM,WAAW,kBACb,qBACA;AACJ,aAAO,MAAM,KAAK,KAAK,iBAAgC,QAAQ,CAAC;AAAA,IAClE;AAEA,aAAS,eAAe,OAAwB,KAAa,SAAS,MAAM;AAC1E,oBAAc;AACd,YAAM,QAAQ,CAAC,IAAI,MAAM,GAAG,UAAU,OAAO,aAAa,MAAM,WAAW,CAAC;AAC5E,UAAI,UAAU,eAAe,EAAG,OAAM,WAAW,GAAG,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,IACzF;AAEA,aAAS,YAAY,OAAyB;AAC5C,YAAM,MAAM,SAAS,eAAe;AACpC,oBAAc;AACd,UAAI,QAAQ,QAAM,GAAG,UAAU,OAAO,WAAW,CAAC;AAAA,IACpD;AAEA,aAAS,iBAAiB,KAAa;AACrC,YAAM,QAAQ,eAAe;AAC7B,YAAM,MAAM,MAAM,UAAU,SAAO,GAAG,QAAQ,SAAS,QAAQ,GAAG;AAClE,qBAAe,OAAO,KAAK,IAAI;AAAA,IACjC;AAEA,aAAS,aAAa;AACpB,YAAM,WAAW,mBAAmB,EAAE,OAAO,UAAQ,IAAI,SAAS,QAAQ,EAAE;AAE5E,WAAK,YAAY;AAEjB,YAAM,iBAAiB,IAAI,IAAI,gBAAgB,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAElE,UAAI,CAAC,SAAS,QAAQ;AACpB,cAAM,QAAQ,SAAS,cAAc,IAAI;AACzC,cAAM,YAAY;AAClB,cAAM,cAAc,EAAE;AACtB,aAAK,OAAO,KAAK;AACjB,sBAAc;AACd;AAAA,MACF;AAEA,eAAS,QAAQ,CAAC,KAAK,QAAQ;AAC7B,cAAM,KAAK,SAAS,cAAc,IAAI;AACtC,WAAG,YAAY;AACf,WAAG,aAAa,QAAQ,QAAQ;AAChC,WAAG,QAAQ,QAAQ,IAAI;AAEvB,cAAM,YAAY,eAAe,GAAG;AACpC,cAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,gBAAQ,YAAY;AACpB,gBAAQ,cAAc;AAEtB,cAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,gBAAQ,YAAY;AACpB,gBAAQ,aAAa,eAAe,MAAM;AAC1C,gBAAQ,cAAc;AAGtB,cAAM,aAAa,eAAe,IAAI,IAAI,KAAK;AAC/C,gBAAQ,SAAS,CAAC;AAElB,WAAG,OAAO,SAAS,OAAO;AAE1B,YAAI,IAAI,SAAU,IAAG,UAAU,IAAI,aAAa;AAEhD,YAAI,YAAY;AACd,aAAG,UAAU,IAAI,aAAa;AAC9B,aAAG,aAAa,iBAAiB,MAAM;AAAA,QACzC,OAAO;AACL,aAAG,aAAa,iBAAiB,OAAO;AAAA,QAC1C;AAEA,WAAG,iBAAiB,aAAa,OAAK;AACpC,YAAE,eAAe;AACjB,cAAI,IAAI,SAAU;AAClB,cAAI,WAAW,EAAG;AAElB,cAAI,OAAO,UAAU;AACnB,gBAAI,WAAW,CAAC,IAAI;AACpB,uBAAW;AACX,uBAAW;AACX,gBAAI,CAAC,SAAS,OAAQ,UAAS,MAAM;AAAA,UACvC,OAAO;AACL,mBAAO,QAAQ,IAAI;AACnB,uBAAW;AACX,kBAAM;AACN,oBAAQ,MAAM;AAAA,UAChB;AAAA,QACF,CAAC;AAED,WAAG,iBAAiB,cAAc,MAAM;AACtC,cAAI,CAAC,WAAY;AACjB,cAAI,IAAI,SAAU;AAClB,gBAAM,MAAM,eAAe;AAC3B,yBAAe,KAAK,KAAK,KAAK;AAAA,QAChC,CAAC;AAED,aAAK,OAAO,EAAE;AAAA,MAChB,CAAC;AAGD,kBAAY;AAAA,IACd;AAEA,aAAS,UAAU;AACjB,kBAAY;AACZ,4BAAsB;AACtB,UAAI,KAAM,YAAW;AAAA,IACvB;AAEA,aAAS,eAAe;AACtB,UAAI,QAAQ,WAAW,KAAK,WAAW,EAAG;AAE1C,aAAO;AACP,eAAS,SAAS;AAClB,cAAQ,aAAa,iBAAiB,MAAM;AAC5C,WAAK,UAAU,IAAI,SAAS;AAE5B,oBAAc;AAId,mBAAa;AACb,eAAS;AAAA,QACP;AAAA,QACA,MAAM;AACJ,uBAAa;AAAA,QACf;AAAA,QACA,EAAE,MAAM,KAAK;AAAA,MACf;AACA,UAAI,CAAC,SAAS,QAAQ;AACpB,iBAAS,QAAQ;AACjB,mBAAW;AACX,uBAAe,MAAM,SAAS,MAAM,CAAC;AAAA,MACvC,OAAO;AACL,mBAAW;AAAA,MACb;AAEA,eAAS,QAAQ,cAAc;AAAA,IACjC;AAEA,aAAS,QAAQ;AACf,UAAI,CAAC,KAAM;AAEX,aAAO;AACP,mBAAa;AACb,eAAS,SAAS;AAClB,cAAQ,aAAa,iBAAiB,OAAO;AAC7C,WAAK,UAAU,OAAO,SAAS;AAC/B,eAAS,QAAQ,eAAe;AAAA,IAClC;AAEA,aAAS,SAAS;AAChB,aAAO,MAAM,IAAI,aAAa;AAAA,IAChC;AAEA,aAAS,WAAW,OAAe;AACjC,YAAM,QAAQ,eAAe,KAAK;AAClC,UAAI,CAAC,MAAM,OAAQ;AAEnB,UAAI,IAAI;AACR,UAAI,IAAI,EAAG,KAAI;AACf,UAAI,KAAK,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,SAAS,CAAC;AACrD,qBAAe,OAAO,GAAG,IAAI;AAAA,IAC/B;AAEA,aAAS,eAAe;AACtB,UAAI,WAAW,EAAG;AAElB,YAAM,QAAQ,eAAe,KAAK;AAClC,UAAI,CAAC,MAAM,OAAQ;AAEnB,YAAM,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,aAAa,MAAM,SAAS,CAAC,CAAC,CAAC;AACrE,UAAI,CAAC,GAAI;AAET,YAAM,MAAM,GAAG,QAAQ,SAAS;AAChC,YAAM,MAAM,MAAM,KAAK,OAAO,OAAO,EAAE,KAAK,OAAK,EAAE,UAAU,GAAG;AAChE,UAAI,CAAC,OAAO,IAAI,SAAU;AAE1B,UAAI,OAAO,UAAU;AACnB,YAAI,WAAW,CAAC,IAAI;AACpB,mBAAW;AACX,mBAAW;AACX,YAAI,CAAC,SAAS,OAAQ,UAAS,MAAM;AAAA,MACvC,OAAO;AACL,eAAO,QAAQ,IAAI;AACnB,mBAAW;AACX,cAAM;AACN,gBAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AAEA,aAAS,UAAU,GAAkB;AACnC,UAAI,WAAW,KAAK,WAAW,EAAG;AAElC,UAAI,EAAE,QAAQ,aAAa;AACzB,UAAE,eAAe;AACjB,YAAI,CAAC,KAAM,cAAa;AACxB,mBAAW,CAAE;AACb;AAAA,MACF;AACA,UAAI,EAAE,QAAQ,WAAW;AACvB,UAAE,eAAe;AACjB,YAAI,CAAC,KAAM,cAAa;AACxB,mBAAW,EAAE;AACb;AAAA,MACF;AACA,UAAI,EAAE,QAAQ,SAAS;AACrB,YAAI,CAAC,KAAM;AACX,UAAE,eAAe;AACjB,qBAAa;AACb;AAAA,MACF;AACA,UAAI,EAAE,QAAQ,UAAU;AACtB,YAAI,CAAC,KAAM;AACX,UAAE,eAAe;AACjB,cAAM;AACN,gBAAQ,MAAM;AACd;AAAA,MACF;AACA,UAAI,EAAE,QAAQ,OAAO;AACnB,YAAI,KAAM,OAAM;AAChB;AAAA,MACF;AAEA,UAAI,OAAO,YAAY,EAAE,QAAQ,aAAa;AAC5C,cAAM,cAAc,SAAS,UAAU,SAAS,MAAM,KAAK,MAAM;AACjE,YAAI,aAAa;AACf,gBAAM,WAAW,iBAAiB;AAClC,gBAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,cAAI,MAAM;AACR,iBAAK,WAAW;AAChB,uBAAW;AACX,uBAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,CAAC,MAAkB;AACnC,UAAI,CAAC,KAAK,SAAS,EAAE,MAAc,EAAG,OAAM;AAAA,IAC9C;AAEA,aAAS,iBAAiB,aAAa,SAAS;AAEhD,YAAQ,iBAAiB,SAAS,MAAM,OAAO,CAAC;AAChD,YAAQ,iBAAiB,WAAW,SAAS;AAC7C,aAAS,iBAAiB,WAAW,SAAS;AAE9C,aAAS,iBAAiB,SAAS,MAAM;AACvC,oBAAc,SAAS,SAAS;AAChC,iBAAW;AACX,eAAS,QAAQ,kBAAkB,EAAE,GAAG,YAAY,CAAC;AAAA,IACvD,CAAC;AAED,YAAQ,iBAAiB,aAAa,OAAK;AACzC,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,iBAAW;AACX,UAAI,KAAM,YAAW;AACrB,UAAI,CAAC,SAAS,OAAQ,UAAS,MAAM;AAAA,IACvC,CAAC;AAED,WAAO,iBAAiB,UAAU,MAAM;AACtC,kBAAY;AACZ,4BAAsB;AACtB,UAAI,KAAM,YAAW;AACrB,eAAS,QAAQ,kBAAkB,EAAE,OAAO,YAAY,MAAM,EAAE,CAAC;AAAA,IACnE,CAAC;AAED,aAAS,aAAa,kBAAkB,MAAM;AAC5C,YAAM,iBAAiB,OAAO,cAAc,kBAAkB;AAE9D,aAAO,YAAY;AAEnB,UAAI,iBAAiB;AACnB,cAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,YAAI,QAAQ;AACZ,YAAI,cAAc,gBAAgB,eAAe,KAAK,eAAe;AACrE,eAAO,OAAO,GAAG;AAAA,MACnB;AAEA,aAAO,QAAQ;AACf,iBAAW;AAAA,IACb;AAEA,aAAS,WACP,YACA,kBAAkB,MAClB;AACA,YAAM,kBACH,OAAO,cAAc,kBAAkB,GAAgC,eACxE,KAAK,eACL;AAEF,aAAO,YAAY;AAEnB,UAAI,iBAAiB;AACnB,cAAM,KAAK,SAAS,cAAc,QAAQ;AAC1C,WAAG,QAAQ;AACX,WAAG,cAAc;AACjB,eAAO,OAAO,EAAE;AAAA,MAClB;AAEA,iBAAW,QAAQ,OAAK;AACtB,cAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,YAAI,QAAQ,OAAO,EAAE,KAAK;AAC1B,YAAI,cAAc,EAAE;AACpB,YAAI,EAAE,SAAU,KAAI,WAAW;AAC/B,eAAO,OAAO,GAAG;AAAA,MACnB,CAAC;AAED,aAAO,QAAQ;AACf,iBAAW;AAAA,IACb;AAEA,aAAS,WAAW,WAAoB;AACtC,WAAK,UAAU,OAAO,cAAc,CAAC,CAAC,SAAS;AAE/C,UAAI,WAAW;AACb,gBAAQ,WAAW;AACnB,iBAAS,WAAW;AACpB;AAAA,MACF;AAEA,qBAAe;AAAA,IACjB;AAEA,aAAS,aAAa,OAAe;AACnC,YAAM,IAAI,OAAO,KAAK;AACtB,aAAO,MAAM,KAAK,OAAO,OAAO,EAAE,KAAK,OAAK,EAAE,UAAU,CAAC,KAAK;AAAA,IAChE;AAEA,aAAS,UACP,QACA,WAAW,OACX;AACA,YAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,UAAI,aAAa,KAAK,EAAG;AAEzB,YAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,UAAI,QAAQ;AACZ,UAAI,cAAc,OAAO;AACzB,UAAI,OAAO,SAAU,KAAI,WAAW;AAEpC,aAAO,OAAO,GAAG;AAEjB,UAAI,UAAU;AACZ,YAAI,OAAO,SAAU,KAAI,WAAW;AAAA,YAC/B,QAAO,QAAQ;AACpB,mBAAW;AAAA,MACb,OAAO;AACL,gBAAQ;AAAA,MACV;AAAA,IACF;AAEA,aAAS,aAAa,OAAe;AACnC,YAAM,MAAM,aAAa,KAAK;AAC9B,UAAI,CAAC,IAAK;AAEV,YAAM,cAAc,IAAI;AACxB,UAAI,OAAO;AAEX,UAAI,aAAa;AACf,mBAAW;AAAA,MACb,OAAO;AACL,gBAAQ;AAAA,MACV;AAAA,IACF;AAEA,aAAS,aAAa,OAAe,OAA+C;AAClF,YAAM,MAAM,aAAa,KAAK;AAC9B,UAAI,CAAC,IAAK;AAEV,UAAI,MAAM,UAAU,OAAW,KAAI,cAAc,MAAM;AACvD,UAAI,MAAM,aAAa,OAAW,KAAI,WAAW,CAAC,CAAC,MAAM;AAEzD,cAAQ;AAAA,IACV;AAEA,aAAS,aACP,QACA,WAAW,OACX;AACA,YAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,YAAM,MAAM,aAAa,KAAK;AAE9B,UAAI,CAAC,KAAK;AACR,kBAAU,QAAQ,QAAQ;AAC1B;AAAA,MACF;AAEA,UAAI,cAAc,OAAO;AACzB,UAAI,WAAW,CAAC,CAAC,OAAO;AAExB,UAAI,UAAU;AACZ,YAAI,OAAO,SAAU,KAAI,WAAW;AAAA,YAC/B,QAAO,QAAQ;AACpB,eAAO,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,MAC7D,OAAO;AACL,gBAAQ;AAAA,MACV;AAAA,IACF;AAGA,gBAAY;AACZ,0BAAsB;AAGtB,QAAI,QAAQ,YAAY,KAAM,QAAO,WAAW,CAAC,CAAC,QAAQ;AAE1D,mBAAe;AAEf,UAAM,OAAwB;AAAA,MAC5B;AAAA,MAEA,UAAU;AACR,iBAAS,oBAAoB,aAAa,SAAS;AACnD,aAAK,OAAO;AAGZ,eAAO,MAAM,WAAW,UAAU;AAClC,eAAO,MAAM,OAAO,UAAU;AAC9B,eAAO,MAAM,QAAQ,UAAU;AAC/B,eAAO,MAAM,SAAS,UAAU;AAEhC,kBAAU,OAAO,MAAM;AAAA,MACzB;AAAA,MAEA,MAAM;AAAA,MACN;AAAA,MAEA,SAAS,OAAiC;AACxC,oBAAY,QAAQ,KAAK;AAAA,MAC3B;AAAA,MACA,WAAW;AACT,eAAO,YAAY,MAAM;AAAA,MAC3B;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MAEA,YAAY,GAAY;AACtB,eAAO,WAAW,CAAC,CAAC;AACpB,uBAAe;AAAA,MACjB;AAAA,MACA,YAAY,GAAY;AACtB,mBAAW,CAAC,CAAC;AACb,uBAAe;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,cAAU,IAAI,QAAQ,IAAI;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAAmD;AACrD,WAAO,UAAU,IAAI,MAAM,KAAK;AAAA,EAClC;AAAA,EAEA,QAAQ,QAAiC;AACvC,UAAM,OAAO,UAAU,IAAI,MAAM;AACjC,QAAI,KAAM,MAAK,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "selectamelo",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Vanilla JS select enhancer core (no framework integration)",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"select",
|
|
7
|
+
"dropdown",
|
|
8
|
+
"vanilla-js",
|
|
9
|
+
"javascript",
|
|
10
|
+
"ui",
|
|
11
|
+
"form",
|
|
12
|
+
"html-select",
|
|
13
|
+
"accessibility",
|
|
14
|
+
"no-jquery"
|
|
15
|
+
],
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "Zycon",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/zycon/zselect-core"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/zycon/zselect-core/issues"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/zycon/zselect-core",
|
|
26
|
+
"type": "module",
|
|
27
|
+
"main": "./dist/index.cjs",
|
|
28
|
+
"module": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"require": "./dist/index.cjs"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"dist",
|
|
39
|
+
"README.md",
|
|
40
|
+
"LICENSE"
|
|
41
|
+
],
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsup src/index.ts --format esm,cjs,iife --global-name ZSelectCore --dts --sourcemap --clean",
|
|
47
|
+
"dev": "tsup src/index.ts --format esm,cjs,iife --global-name ZSelectCore --dts --sourcemap --watch",
|
|
48
|
+
"typecheck": "tsc --noEmit",
|
|
49
|
+
"prepublishOnly": "npm run build"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"tsup": "^8.0.0",
|
|
53
|
+
"typescript": "^5.0.0"
|
|
54
|
+
},
|
|
55
|
+
"sideEffects": false
|
|
56
|
+
}
|