selectamelo 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/index.cjs +25 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.global.js +25 -23
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +24 -22
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -52,11 +52,11 @@ npm run build
|
|
|
52
52
|
|
|
53
53
|
### JavaScript (ESM)
|
|
54
54
|
```js
|
|
55
|
-
import {
|
|
55
|
+
import { Selectamelo } from "selectamelo";
|
|
56
56
|
|
|
57
57
|
const select = document.querySelector("#role");
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
Selectamelo.create(select, {
|
|
60
60
|
placeholder: "Select a role"
|
|
61
61
|
});
|
|
62
62
|
```
|
|
@@ -66,7 +66,7 @@ ZSelectCore.create(select, {
|
|
|
66
66
|
## Options
|
|
67
67
|
|
|
68
68
|
```ts
|
|
69
|
-
type
|
|
69
|
+
type SelectameloOptions = {
|
|
70
70
|
searchable?: boolean; // default true
|
|
71
71
|
placeholder?: string; // default ""
|
|
72
72
|
allowClear?: boolean; // default true
|
|
@@ -100,8 +100,8 @@ HTML-driven options are also supported:
|
|
|
100
100
|
|
|
101
101
|
### Create / Get
|
|
102
102
|
```js
|
|
103
|
-
const inst =
|
|
104
|
-
const same =
|
|
103
|
+
const inst = Selectamelo.create(select);
|
|
104
|
+
const same = Selectamelo.get(select);
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
---
|
package/dist/index.cjs
CHANGED
|
@@ -20,7 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
-
|
|
23
|
+
Selectamelo: () => Selectamelo
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(index_exports);
|
|
26
26
|
|
|
@@ -31,6 +31,8 @@ function uid(prefix = "zs-") {
|
|
|
31
31
|
|
|
32
32
|
// src/core.ts
|
|
33
33
|
var instances = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
var ICON_ANGLE_DOWN = '<svg class="zselect__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6 9l6 6 6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>';
|
|
35
|
+
var ICON_X = '<svg class="zselect__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6 6l12 12M18 6l-12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>';
|
|
34
36
|
function dispatch(select, name, detail) {
|
|
35
37
|
select.dispatchEvent(new CustomEvent(name, { bubbles: true, detail }));
|
|
36
38
|
}
|
|
@@ -47,7 +49,7 @@ function setSelected(select, value) {
|
|
|
47
49
|
}
|
|
48
50
|
select.dispatchEvent(new Event("change", { bubbles: true }));
|
|
49
51
|
}
|
|
50
|
-
var
|
|
52
|
+
var Selectamelo = {
|
|
51
53
|
create(select, options = {}) {
|
|
52
54
|
const existing = instances.get(select);
|
|
53
55
|
if (existing) return existing;
|
|
@@ -72,27 +74,27 @@ var ZSelectCore = {
|
|
|
72
74
|
if (aSearchable != null) opts.searchable = aSearchable;
|
|
73
75
|
const root = document.createElement("div");
|
|
74
76
|
root.className = "zselect";
|
|
75
|
-
root.setAttribute("data-
|
|
77
|
+
root.setAttribute("data-selectamelo-core", "1");
|
|
76
78
|
const control = document.createElement("button");
|
|
77
79
|
control.type = "button";
|
|
78
80
|
control.className = "zselect__control";
|
|
79
81
|
control.setAttribute("aria-haspopup", "listbox");
|
|
80
82
|
control.setAttribute("aria-expanded", "false");
|
|
81
83
|
const ds = {
|
|
82
|
-
placeholder: select.getAttribute("data-
|
|
83
|
-
searchPlaceholder: select.getAttribute("data-
|
|
84
|
-
clearTitle: select.getAttribute("data-
|
|
85
|
-
clearAriaLabel: select.getAttribute("data-
|
|
86
|
-
removeChipAriaLabel: select.getAttribute("data-
|
|
87
|
-
noResults: select.getAttribute("data-
|
|
84
|
+
placeholder: select.getAttribute("data-selectamelo-placeholder"),
|
|
85
|
+
searchPlaceholder: select.getAttribute("data-selectamelo-search-placeholder"),
|
|
86
|
+
clearTitle: select.getAttribute("data-selectamelo-clear-title"),
|
|
87
|
+
clearAriaLabel: select.getAttribute("data-selectamelo-clear-aria-label"),
|
|
88
|
+
removeChipAriaLabel: select.getAttribute("data-selectamelo-remove-chip-aria-label"),
|
|
89
|
+
noResults: select.getAttribute("data-selectamelo-no-results")
|
|
88
90
|
};
|
|
89
91
|
const t = {
|
|
90
92
|
placeholder: options.i18n?.placeholder ?? ds.placeholder ?? options.placeholder ?? "",
|
|
91
|
-
searchPlaceholder: options.i18n?.searchPlaceholder ?? ds.searchPlaceholder ?? "
|
|
92
|
-
clearTitle: options.i18n?.clearTitle ?? ds.clearTitle ?? "
|
|
93
|
-
clearAriaLabel: options.i18n?.clearAriaLabel ?? ds.clearAriaLabel ?? "
|
|
94
|
-
removeChipAriaLabel: options.i18n?.removeChipAriaLabel ?? ds.removeChipAriaLabel ?? "
|
|
95
|
-
noResults: options.i18n?.noResults ?? ds.noResults ?? "
|
|
93
|
+
searchPlaceholder: options.i18n?.searchPlaceholder ?? ds.searchPlaceholder ?? "Search...",
|
|
94
|
+
clearTitle: options.i18n?.clearTitle ?? ds.clearTitle ?? "Clear",
|
|
95
|
+
clearAriaLabel: options.i18n?.clearAriaLabel ?? ds.clearAriaLabel ?? "Clear selection",
|
|
96
|
+
removeChipAriaLabel: options.i18n?.removeChipAriaLabel ?? ds.removeChipAriaLabel ?? "Remove",
|
|
97
|
+
noResults: options.i18n?.noResults ?? ds.noResults ?? "No results"
|
|
96
98
|
};
|
|
97
99
|
const valueWrap = document.createElement("span");
|
|
98
100
|
valueWrap.className = "zselect__valuewrap";
|
|
@@ -106,14 +108,14 @@ var ZSelectCore = {
|
|
|
106
108
|
actions.className = "zselect__actions";
|
|
107
109
|
const clearEl = document.createElement("span");
|
|
108
110
|
clearEl.className = "zselect__clear";
|
|
109
|
-
clearEl.
|
|
111
|
+
clearEl.innerHTML = ICON_X;
|
|
110
112
|
clearEl.title = t.clearTitle;
|
|
111
113
|
clearEl.setAttribute("aria-hidden", "true");
|
|
112
114
|
clearEl.setAttribute("aria-label", t.clearAriaLabel);
|
|
113
115
|
clearEl.style.display = "none";
|
|
114
116
|
const arrow = document.createElement("span");
|
|
115
117
|
arrow.className = "zselect__arrow";
|
|
116
|
-
arrow.
|
|
118
|
+
arrow.innerHTML = ICON_ANGLE_DOWN;
|
|
117
119
|
actions.append(clearEl, arrow);
|
|
118
120
|
control.append(valueWrap, actions);
|
|
119
121
|
const dropdown = document.createElement("div");
|
|
@@ -230,8 +232,8 @@ var ZSelectCore = {
|
|
|
230
232
|
const x = document.createElement("button");
|
|
231
233
|
x.type = "button";
|
|
232
234
|
x.className = "zselect__chip-remove";
|
|
233
|
-
x.
|
|
234
|
-
x.title = "
|
|
235
|
+
x.innerHTML = ICON_X;
|
|
236
|
+
x.title = "Remove";
|
|
235
237
|
x.setAttribute("aria-label", t.removeChipAriaLabel);
|
|
236
238
|
x.addEventListener("mousedown", (e) => {
|
|
237
239
|
e.preventDefault();
|
|
@@ -249,12 +251,12 @@ var ZSelectCore = {
|
|
|
249
251
|
const isPlaceholder = selected.length === 0 || selected.length === 1 && (selected[0]?.value ?? "") === "" || select.multiple && selectedNonEmpty().length === 0;
|
|
250
252
|
if (select.multiple) {
|
|
251
253
|
renderChips();
|
|
252
|
-
valueEl.textContent = isPlaceholder ? t.placeholder || "
|
|
254
|
+
valueEl.textContent = isPlaceholder ? t.placeholder || "Select..." : "";
|
|
253
255
|
valueEl.classList.toggle("is-placeholder", isPlaceholder);
|
|
254
256
|
return;
|
|
255
257
|
}
|
|
256
258
|
if (isPlaceholder) {
|
|
257
|
-
valueEl.textContent = t.placeholder || "
|
|
259
|
+
valueEl.textContent = t.placeholder || "Select...";
|
|
258
260
|
valueEl.classList.add("is-placeholder");
|
|
259
261
|
return;
|
|
260
262
|
}
|
|
@@ -487,14 +489,14 @@ var ZSelectCore = {
|
|
|
487
489
|
if (keepPlaceholder) {
|
|
488
490
|
const opt = document.createElement("option");
|
|
489
491
|
opt.value = "";
|
|
490
|
-
opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? "
|
|
492
|
+
opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? "Select...";
|
|
491
493
|
select.append(opt);
|
|
492
494
|
}
|
|
493
495
|
select.value = "";
|
|
494
496
|
emitChange();
|
|
495
497
|
}
|
|
496
498
|
function setOptions(optionsArr, keepPlaceholder = true) {
|
|
497
|
-
const placeholderText = select.querySelector('option[value=""]')?.textContent ?? opts.placeholder ?? "
|
|
499
|
+
const placeholderText = select.querySelector('option[value=""]')?.textContent ?? opts.placeholder ?? "Select...";
|
|
498
500
|
select.innerHTML = "";
|
|
499
501
|
if (keepPlaceholder) {
|
|
500
502
|
const ph = document.createElement("option");
|
|
@@ -631,6 +633,6 @@ var ZSelectCore = {
|
|
|
631
633
|
};
|
|
632
634
|
// Annotate the CommonJS export names for ESM import in node:
|
|
633
635
|
0 && (module.exports = {
|
|
634
|
-
|
|
636
|
+
Selectamelo
|
|
635
637
|
});
|
|
636
638
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/dom.ts","../src/core.ts"],"sourcesContent":["export { ZSelectCore } from \"./core\";\nexport type { ZSelectCoreOptions, ZSelectInstance } from \"./core\";","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":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/dom.ts","../src/core.ts"],"sourcesContent":["export { Selectamelo } from \"./core\";\nexport type { SelectameloOptions, SelectameloInstance } from \"./core\";\n","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 SelectameloI18n = {\n placeholder?: string;\n searchPlaceholder?: string;\n clearTitle?: string;\n clearAriaLabel?: string;\n removeChipAriaLabel?: string;\n noResults?: string;\n};\n\nexport type SelectameloOptions = {\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?: SelectameloI18n;\n};\n\nexport type SelectameloInstance = {\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, SelectameloInstance>();\nconst ICON_ANGLE_DOWN =\n '<svg class=\"zselect__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 9l6 6 6-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\nconst ICON_X =\n '<svg class=\"zselect__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 6l12 12M18 6l-12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\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 Selectamelo = {\n create(select: HTMLSelectElement, options: SelectameloOptions = {}): SelectameloInstance {\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-selectamelo-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-selectamelo-placeholder\"),\n searchPlaceholder: select.getAttribute(\"data-selectamelo-search-placeholder\"),\n clearTitle: select.getAttribute(\"data-selectamelo-clear-title\"),\n clearAriaLabel: select.getAttribute(\"data-selectamelo-clear-aria-label\"),\n removeChipAriaLabel: select.getAttribute(\"data-selectamelo-remove-chip-aria-label\"),\n noResults: select.getAttribute(\"data-selectamelo-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 \"Search...\",\n\n clearTitle:\n options.i18n?.clearTitle ??\n ds.clearTitle ??\n \"Clear\",\n\n clearAriaLabel:\n options.i18n?.clearAriaLabel ??\n ds.clearAriaLabel ??\n \"Clear selection\",\n\n removeChipAriaLabel:\n options.i18n?.removeChipAriaLabel ??\n ds.removeChipAriaLabel ??\n \"Remove\",\n\n noResults:\n options.i18n?.noResults ??\n ds.noResults ??\n \"No results\",\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.innerHTML = ICON_X;\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.innerHTML = ICON_ANGLE_DOWN;\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.innerHTML = ICON_X;\n x.title = \"Remove\";\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 || \"Select...\") : \"\";\n valueEl.classList.toggle(\"is-placeholder\", isPlaceholder);\n return;\n }\n\n if (isPlaceholder) {\n valueEl.textContent = t.placeholder || \"Select...\";\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 ?? \"Select...\";\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 \"Select...\";\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: SelectameloInstance = {\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): SelectameloInstance | 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":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type
|
|
1
|
+
type SelectameloI18n = {
|
|
2
2
|
placeholder?: string;
|
|
3
3
|
searchPlaceholder?: string;
|
|
4
4
|
clearTitle?: string;
|
|
@@ -6,7 +6,7 @@ type ZSelectI18n = {
|
|
|
6
6
|
removeChipAriaLabel?: string;
|
|
7
7
|
noResults?: string;
|
|
8
8
|
};
|
|
9
|
-
type
|
|
9
|
+
type SelectameloOptions = {
|
|
10
10
|
searchable?: boolean;
|
|
11
11
|
placeholder?: string;
|
|
12
12
|
allowClear?: boolean;
|
|
@@ -18,9 +18,9 @@ type ZSelectCoreOptions = {
|
|
|
18
18
|
* so its value is still submitted in forms.
|
|
19
19
|
*/
|
|
20
20
|
readonly?: boolean;
|
|
21
|
-
i18n?:
|
|
21
|
+
i18n?: SelectameloI18n;
|
|
22
22
|
};
|
|
23
|
-
type
|
|
23
|
+
type SelectameloInstance = {
|
|
24
24
|
select: HTMLSelectElement;
|
|
25
25
|
destroy(): void;
|
|
26
26
|
open(): void;
|
|
@@ -55,10 +55,10 @@ type ZSelectInstance = {
|
|
|
55
55
|
isDisabled(): boolean;
|
|
56
56
|
isReadonly(): boolean;
|
|
57
57
|
};
|
|
58
|
-
declare const
|
|
59
|
-
create(select: HTMLSelectElement, options?:
|
|
60
|
-
get(select: HTMLSelectElement):
|
|
58
|
+
declare const Selectamelo: {
|
|
59
|
+
create(select: HTMLSelectElement, options?: SelectameloOptions): SelectameloInstance;
|
|
60
|
+
get(select: HTMLSelectElement): SelectameloInstance | null;
|
|
61
61
|
destroy(select: HTMLSelectElement): void;
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
export {
|
|
64
|
+
export { Selectamelo, type SelectameloInstance, type SelectameloOptions };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type
|
|
1
|
+
type SelectameloI18n = {
|
|
2
2
|
placeholder?: string;
|
|
3
3
|
searchPlaceholder?: string;
|
|
4
4
|
clearTitle?: string;
|
|
@@ -6,7 +6,7 @@ type ZSelectI18n = {
|
|
|
6
6
|
removeChipAriaLabel?: string;
|
|
7
7
|
noResults?: string;
|
|
8
8
|
};
|
|
9
|
-
type
|
|
9
|
+
type SelectameloOptions = {
|
|
10
10
|
searchable?: boolean;
|
|
11
11
|
placeholder?: string;
|
|
12
12
|
allowClear?: boolean;
|
|
@@ -18,9 +18,9 @@ type ZSelectCoreOptions = {
|
|
|
18
18
|
* so its value is still submitted in forms.
|
|
19
19
|
*/
|
|
20
20
|
readonly?: boolean;
|
|
21
|
-
i18n?:
|
|
21
|
+
i18n?: SelectameloI18n;
|
|
22
22
|
};
|
|
23
|
-
type
|
|
23
|
+
type SelectameloInstance = {
|
|
24
24
|
select: HTMLSelectElement;
|
|
25
25
|
destroy(): void;
|
|
26
26
|
open(): void;
|
|
@@ -55,10 +55,10 @@ type ZSelectInstance = {
|
|
|
55
55
|
isDisabled(): boolean;
|
|
56
56
|
isReadonly(): boolean;
|
|
57
57
|
};
|
|
58
|
-
declare const
|
|
59
|
-
create(select: HTMLSelectElement, options?:
|
|
60
|
-
get(select: HTMLSelectElement):
|
|
58
|
+
declare const Selectamelo: {
|
|
59
|
+
create(select: HTMLSelectElement, options?: SelectameloOptions): SelectameloInstance;
|
|
60
|
+
get(select: HTMLSelectElement): SelectameloInstance | null;
|
|
61
61
|
destroy(select: HTMLSelectElement): void;
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
export {
|
|
64
|
+
export { Selectamelo, type SelectameloInstance, type SelectameloOptions };
|
package/dist/index.global.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
2
|
+
var Selectamelo = (() => {
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -21,7 +21,7 @@ var ZSelectCore = (() => {
|
|
|
21
21
|
// src/index.ts
|
|
22
22
|
var index_exports = {};
|
|
23
23
|
__export(index_exports, {
|
|
24
|
-
|
|
24
|
+
Selectamelo: () => Selectamelo
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
// src/dom.ts
|
|
@@ -31,6 +31,8 @@ var ZSelectCore = (() => {
|
|
|
31
31
|
|
|
32
32
|
// src/core.ts
|
|
33
33
|
var instances = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
var ICON_ANGLE_DOWN = '<svg class="zselect__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6 9l6 6 6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>';
|
|
35
|
+
var ICON_X = '<svg class="zselect__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6 6l12 12M18 6l-12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>';
|
|
34
36
|
function dispatch(select, name, detail) {
|
|
35
37
|
select.dispatchEvent(new CustomEvent(name, { bubbles: true, detail }));
|
|
36
38
|
}
|
|
@@ -47,7 +49,7 @@ var ZSelectCore = (() => {
|
|
|
47
49
|
}
|
|
48
50
|
select.dispatchEvent(new Event("change", { bubbles: true }));
|
|
49
51
|
}
|
|
50
|
-
var
|
|
52
|
+
var Selectamelo = {
|
|
51
53
|
create(select, options = {}) {
|
|
52
54
|
const existing = instances.get(select);
|
|
53
55
|
if (existing) return existing;
|
|
@@ -72,27 +74,27 @@ var ZSelectCore = (() => {
|
|
|
72
74
|
if (aSearchable != null) opts.searchable = aSearchable;
|
|
73
75
|
const root = document.createElement("div");
|
|
74
76
|
root.className = "zselect";
|
|
75
|
-
root.setAttribute("data-
|
|
77
|
+
root.setAttribute("data-selectamelo-core", "1");
|
|
76
78
|
const control = document.createElement("button");
|
|
77
79
|
control.type = "button";
|
|
78
80
|
control.className = "zselect__control";
|
|
79
81
|
control.setAttribute("aria-haspopup", "listbox");
|
|
80
82
|
control.setAttribute("aria-expanded", "false");
|
|
81
83
|
const ds = {
|
|
82
|
-
placeholder: select.getAttribute("data-
|
|
83
|
-
searchPlaceholder: select.getAttribute("data-
|
|
84
|
-
clearTitle: select.getAttribute("data-
|
|
85
|
-
clearAriaLabel: select.getAttribute("data-
|
|
86
|
-
removeChipAriaLabel: select.getAttribute("data-
|
|
87
|
-
noResults: select.getAttribute("data-
|
|
84
|
+
placeholder: select.getAttribute("data-selectamelo-placeholder"),
|
|
85
|
+
searchPlaceholder: select.getAttribute("data-selectamelo-search-placeholder"),
|
|
86
|
+
clearTitle: select.getAttribute("data-selectamelo-clear-title"),
|
|
87
|
+
clearAriaLabel: select.getAttribute("data-selectamelo-clear-aria-label"),
|
|
88
|
+
removeChipAriaLabel: select.getAttribute("data-selectamelo-remove-chip-aria-label"),
|
|
89
|
+
noResults: select.getAttribute("data-selectamelo-no-results")
|
|
88
90
|
};
|
|
89
91
|
const t = {
|
|
90
92
|
placeholder: options.i18n?.placeholder ?? ds.placeholder ?? options.placeholder ?? "",
|
|
91
|
-
searchPlaceholder: options.i18n?.searchPlaceholder ?? ds.searchPlaceholder ?? "
|
|
92
|
-
clearTitle: options.i18n?.clearTitle ?? ds.clearTitle ?? "
|
|
93
|
-
clearAriaLabel: options.i18n?.clearAriaLabel ?? ds.clearAriaLabel ?? "
|
|
94
|
-
removeChipAriaLabel: options.i18n?.removeChipAriaLabel ?? ds.removeChipAriaLabel ?? "
|
|
95
|
-
noResults: options.i18n?.noResults ?? ds.noResults ?? "
|
|
93
|
+
searchPlaceholder: options.i18n?.searchPlaceholder ?? ds.searchPlaceholder ?? "Search...",
|
|
94
|
+
clearTitle: options.i18n?.clearTitle ?? ds.clearTitle ?? "Clear",
|
|
95
|
+
clearAriaLabel: options.i18n?.clearAriaLabel ?? ds.clearAriaLabel ?? "Clear selection",
|
|
96
|
+
removeChipAriaLabel: options.i18n?.removeChipAriaLabel ?? ds.removeChipAriaLabel ?? "Remove",
|
|
97
|
+
noResults: options.i18n?.noResults ?? ds.noResults ?? "No results"
|
|
96
98
|
};
|
|
97
99
|
const valueWrap = document.createElement("span");
|
|
98
100
|
valueWrap.className = "zselect__valuewrap";
|
|
@@ -106,14 +108,14 @@ var ZSelectCore = (() => {
|
|
|
106
108
|
actions.className = "zselect__actions";
|
|
107
109
|
const clearEl = document.createElement("span");
|
|
108
110
|
clearEl.className = "zselect__clear";
|
|
109
|
-
clearEl.
|
|
111
|
+
clearEl.innerHTML = ICON_X;
|
|
110
112
|
clearEl.title = t.clearTitle;
|
|
111
113
|
clearEl.setAttribute("aria-hidden", "true");
|
|
112
114
|
clearEl.setAttribute("aria-label", t.clearAriaLabel);
|
|
113
115
|
clearEl.style.display = "none";
|
|
114
116
|
const arrow = document.createElement("span");
|
|
115
117
|
arrow.className = "zselect__arrow";
|
|
116
|
-
arrow.
|
|
118
|
+
arrow.innerHTML = ICON_ANGLE_DOWN;
|
|
117
119
|
actions.append(clearEl, arrow);
|
|
118
120
|
control.append(valueWrap, actions);
|
|
119
121
|
const dropdown = document.createElement("div");
|
|
@@ -230,8 +232,8 @@ var ZSelectCore = (() => {
|
|
|
230
232
|
const x = document.createElement("button");
|
|
231
233
|
x.type = "button";
|
|
232
234
|
x.className = "zselect__chip-remove";
|
|
233
|
-
x.
|
|
234
|
-
x.title = "
|
|
235
|
+
x.innerHTML = ICON_X;
|
|
236
|
+
x.title = "Remove";
|
|
235
237
|
x.setAttribute("aria-label", t.removeChipAriaLabel);
|
|
236
238
|
x.addEventListener("mousedown", (e) => {
|
|
237
239
|
e.preventDefault();
|
|
@@ -249,12 +251,12 @@ var ZSelectCore = (() => {
|
|
|
249
251
|
const isPlaceholder = selected.length === 0 || selected.length === 1 && (selected[0]?.value ?? "") === "" || select.multiple && selectedNonEmpty().length === 0;
|
|
250
252
|
if (select.multiple) {
|
|
251
253
|
renderChips();
|
|
252
|
-
valueEl.textContent = isPlaceholder ? t.placeholder || "
|
|
254
|
+
valueEl.textContent = isPlaceholder ? t.placeholder || "Select..." : "";
|
|
253
255
|
valueEl.classList.toggle("is-placeholder", isPlaceholder);
|
|
254
256
|
return;
|
|
255
257
|
}
|
|
256
258
|
if (isPlaceholder) {
|
|
257
|
-
valueEl.textContent = t.placeholder || "
|
|
259
|
+
valueEl.textContent = t.placeholder || "Select...";
|
|
258
260
|
valueEl.classList.add("is-placeholder");
|
|
259
261
|
return;
|
|
260
262
|
}
|
|
@@ -487,14 +489,14 @@ var ZSelectCore = (() => {
|
|
|
487
489
|
if (keepPlaceholder) {
|
|
488
490
|
const opt = document.createElement("option");
|
|
489
491
|
opt.value = "";
|
|
490
|
-
opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? "
|
|
492
|
+
opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? "Select...";
|
|
491
493
|
select.append(opt);
|
|
492
494
|
}
|
|
493
495
|
select.value = "";
|
|
494
496
|
emitChange();
|
|
495
497
|
}
|
|
496
498
|
function setOptions(optionsArr, keepPlaceholder = true) {
|
|
497
|
-
const placeholderText = select.querySelector('option[value=""]')?.textContent ?? opts.placeholder ?? "
|
|
499
|
+
const placeholderText = select.querySelector('option[value=""]')?.textContent ?? opts.placeholder ?? "Select...";
|
|
498
500
|
select.innerHTML = "";
|
|
499
501
|
if (keepPlaceholder) {
|
|
500
502
|
const ph = document.createElement("option");
|
package/dist/index.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/dom.ts","../src/core.ts"],"sourcesContent":["export { ZSelectCore } from \"./core\";\nexport type { ZSelectCoreOptions, ZSelectInstance } from \"./core\";","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":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/dom.ts","../src/core.ts"],"sourcesContent":["export { Selectamelo } from \"./core\";\nexport type { SelectameloOptions, SelectameloInstance } from \"./core\";\n","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 SelectameloI18n = {\n placeholder?: string;\n searchPlaceholder?: string;\n clearTitle?: string;\n clearAriaLabel?: string;\n removeChipAriaLabel?: string;\n noResults?: string;\n};\n\nexport type SelectameloOptions = {\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?: SelectameloI18n;\n};\n\nexport type SelectameloInstance = {\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, SelectameloInstance>();\nconst ICON_ANGLE_DOWN =\n '<svg class=\"zselect__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 9l6 6 6-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\nconst ICON_X =\n '<svg class=\"zselect__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 6l12 12M18 6l-12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\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 Selectamelo = {\n create(select: HTMLSelectElement, options: SelectameloOptions = {}): SelectameloInstance {\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-selectamelo-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-selectamelo-placeholder\"),\n searchPlaceholder: select.getAttribute(\"data-selectamelo-search-placeholder\"),\n clearTitle: select.getAttribute(\"data-selectamelo-clear-title\"),\n clearAriaLabel: select.getAttribute(\"data-selectamelo-clear-aria-label\"),\n removeChipAriaLabel: select.getAttribute(\"data-selectamelo-remove-chip-aria-label\"),\n noResults: select.getAttribute(\"data-selectamelo-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 \"Search...\",\n\n clearTitle:\n options.i18n?.clearTitle ??\n ds.clearTitle ??\n \"Clear\",\n\n clearAriaLabel:\n options.i18n?.clearAriaLabel ??\n ds.clearAriaLabel ??\n \"Clear selection\",\n\n removeChipAriaLabel:\n options.i18n?.removeChipAriaLabel ??\n ds.removeChipAriaLabel ??\n \"Remove\",\n\n noResults:\n options.i18n?.noResults ??\n ds.noResults ??\n \"No results\",\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.innerHTML = ICON_X;\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.innerHTML = ICON_ANGLE_DOWN;\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.innerHTML = ICON_X;\n x.title = \"Remove\";\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 || \"Select...\") : \"\";\n valueEl.classList.toggle(\"is-placeholder\", isPlaceholder);\n return;\n }\n\n if (isPlaceholder) {\n valueEl.textContent = t.placeholder || \"Select...\";\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 ?? \"Select...\";\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 \"Select...\";\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: SelectameloInstance = {\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): SelectameloInstance | 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":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,8 @@ function uid(prefix = "zs-") {
|
|
|
5
5
|
|
|
6
6
|
// src/core.ts
|
|
7
7
|
var instances = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
var ICON_ANGLE_DOWN = '<svg class="zselect__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6 9l6 6 6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>';
|
|
9
|
+
var ICON_X = '<svg class="zselect__icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M6 6l12 12M18 6l-12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>';
|
|
8
10
|
function dispatch(select, name, detail) {
|
|
9
11
|
select.dispatchEvent(new CustomEvent(name, { bubbles: true, detail }));
|
|
10
12
|
}
|
|
@@ -21,7 +23,7 @@ function setSelected(select, value) {
|
|
|
21
23
|
}
|
|
22
24
|
select.dispatchEvent(new Event("change", { bubbles: true }));
|
|
23
25
|
}
|
|
24
|
-
var
|
|
26
|
+
var Selectamelo = {
|
|
25
27
|
create(select, options = {}) {
|
|
26
28
|
const existing = instances.get(select);
|
|
27
29
|
if (existing) return existing;
|
|
@@ -46,27 +48,27 @@ var ZSelectCore = {
|
|
|
46
48
|
if (aSearchable != null) opts.searchable = aSearchable;
|
|
47
49
|
const root = document.createElement("div");
|
|
48
50
|
root.className = "zselect";
|
|
49
|
-
root.setAttribute("data-
|
|
51
|
+
root.setAttribute("data-selectamelo-core", "1");
|
|
50
52
|
const control = document.createElement("button");
|
|
51
53
|
control.type = "button";
|
|
52
54
|
control.className = "zselect__control";
|
|
53
55
|
control.setAttribute("aria-haspopup", "listbox");
|
|
54
56
|
control.setAttribute("aria-expanded", "false");
|
|
55
57
|
const ds = {
|
|
56
|
-
placeholder: select.getAttribute("data-
|
|
57
|
-
searchPlaceholder: select.getAttribute("data-
|
|
58
|
-
clearTitle: select.getAttribute("data-
|
|
59
|
-
clearAriaLabel: select.getAttribute("data-
|
|
60
|
-
removeChipAriaLabel: select.getAttribute("data-
|
|
61
|
-
noResults: select.getAttribute("data-
|
|
58
|
+
placeholder: select.getAttribute("data-selectamelo-placeholder"),
|
|
59
|
+
searchPlaceholder: select.getAttribute("data-selectamelo-search-placeholder"),
|
|
60
|
+
clearTitle: select.getAttribute("data-selectamelo-clear-title"),
|
|
61
|
+
clearAriaLabel: select.getAttribute("data-selectamelo-clear-aria-label"),
|
|
62
|
+
removeChipAriaLabel: select.getAttribute("data-selectamelo-remove-chip-aria-label"),
|
|
63
|
+
noResults: select.getAttribute("data-selectamelo-no-results")
|
|
62
64
|
};
|
|
63
65
|
const t = {
|
|
64
66
|
placeholder: options.i18n?.placeholder ?? ds.placeholder ?? options.placeholder ?? "",
|
|
65
|
-
searchPlaceholder: options.i18n?.searchPlaceholder ?? ds.searchPlaceholder ?? "
|
|
66
|
-
clearTitle: options.i18n?.clearTitle ?? ds.clearTitle ?? "
|
|
67
|
-
clearAriaLabel: options.i18n?.clearAriaLabel ?? ds.clearAriaLabel ?? "
|
|
68
|
-
removeChipAriaLabel: options.i18n?.removeChipAriaLabel ?? ds.removeChipAriaLabel ?? "
|
|
69
|
-
noResults: options.i18n?.noResults ?? ds.noResults ?? "
|
|
67
|
+
searchPlaceholder: options.i18n?.searchPlaceholder ?? ds.searchPlaceholder ?? "Search...",
|
|
68
|
+
clearTitle: options.i18n?.clearTitle ?? ds.clearTitle ?? "Clear",
|
|
69
|
+
clearAriaLabel: options.i18n?.clearAriaLabel ?? ds.clearAriaLabel ?? "Clear selection",
|
|
70
|
+
removeChipAriaLabel: options.i18n?.removeChipAriaLabel ?? ds.removeChipAriaLabel ?? "Remove",
|
|
71
|
+
noResults: options.i18n?.noResults ?? ds.noResults ?? "No results"
|
|
70
72
|
};
|
|
71
73
|
const valueWrap = document.createElement("span");
|
|
72
74
|
valueWrap.className = "zselect__valuewrap";
|
|
@@ -80,14 +82,14 @@ var ZSelectCore = {
|
|
|
80
82
|
actions.className = "zselect__actions";
|
|
81
83
|
const clearEl = document.createElement("span");
|
|
82
84
|
clearEl.className = "zselect__clear";
|
|
83
|
-
clearEl.
|
|
85
|
+
clearEl.innerHTML = ICON_X;
|
|
84
86
|
clearEl.title = t.clearTitle;
|
|
85
87
|
clearEl.setAttribute("aria-hidden", "true");
|
|
86
88
|
clearEl.setAttribute("aria-label", t.clearAriaLabel);
|
|
87
89
|
clearEl.style.display = "none";
|
|
88
90
|
const arrow = document.createElement("span");
|
|
89
91
|
arrow.className = "zselect__arrow";
|
|
90
|
-
arrow.
|
|
92
|
+
arrow.innerHTML = ICON_ANGLE_DOWN;
|
|
91
93
|
actions.append(clearEl, arrow);
|
|
92
94
|
control.append(valueWrap, actions);
|
|
93
95
|
const dropdown = document.createElement("div");
|
|
@@ -204,8 +206,8 @@ var ZSelectCore = {
|
|
|
204
206
|
const x = document.createElement("button");
|
|
205
207
|
x.type = "button";
|
|
206
208
|
x.className = "zselect__chip-remove";
|
|
207
|
-
x.
|
|
208
|
-
x.title = "
|
|
209
|
+
x.innerHTML = ICON_X;
|
|
210
|
+
x.title = "Remove";
|
|
209
211
|
x.setAttribute("aria-label", t.removeChipAriaLabel);
|
|
210
212
|
x.addEventListener("mousedown", (e) => {
|
|
211
213
|
e.preventDefault();
|
|
@@ -223,12 +225,12 @@ var ZSelectCore = {
|
|
|
223
225
|
const isPlaceholder = selected.length === 0 || selected.length === 1 && (selected[0]?.value ?? "") === "" || select.multiple && selectedNonEmpty().length === 0;
|
|
224
226
|
if (select.multiple) {
|
|
225
227
|
renderChips();
|
|
226
|
-
valueEl.textContent = isPlaceholder ? t.placeholder || "
|
|
228
|
+
valueEl.textContent = isPlaceholder ? t.placeholder || "Select..." : "";
|
|
227
229
|
valueEl.classList.toggle("is-placeholder", isPlaceholder);
|
|
228
230
|
return;
|
|
229
231
|
}
|
|
230
232
|
if (isPlaceholder) {
|
|
231
|
-
valueEl.textContent = t.placeholder || "
|
|
233
|
+
valueEl.textContent = t.placeholder || "Select...";
|
|
232
234
|
valueEl.classList.add("is-placeholder");
|
|
233
235
|
return;
|
|
234
236
|
}
|
|
@@ -461,14 +463,14 @@ var ZSelectCore = {
|
|
|
461
463
|
if (keepPlaceholder) {
|
|
462
464
|
const opt = document.createElement("option");
|
|
463
465
|
opt.value = "";
|
|
464
|
-
opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? "
|
|
466
|
+
opt.textContent = placeholderOpt?.textContent ?? opts.placeholder ?? "Select...";
|
|
465
467
|
select.append(opt);
|
|
466
468
|
}
|
|
467
469
|
select.value = "";
|
|
468
470
|
emitChange();
|
|
469
471
|
}
|
|
470
472
|
function setOptions(optionsArr, keepPlaceholder = true) {
|
|
471
|
-
const placeholderText = select.querySelector('option[value=""]')?.textContent ?? opts.placeholder ?? "
|
|
473
|
+
const placeholderText = select.querySelector('option[value=""]')?.textContent ?? opts.placeholder ?? "Select...";
|
|
472
474
|
select.innerHTML = "";
|
|
473
475
|
if (keepPlaceholder) {
|
|
474
476
|
const ph = document.createElement("option");
|
|
@@ -604,6 +606,6 @@ var ZSelectCore = {
|
|
|
604
606
|
}
|
|
605
607
|
};
|
|
606
608
|
export {
|
|
607
|
-
|
|
609
|
+
Selectamelo
|
|
608
610
|
};
|
|
609
611
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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":"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","names":[]}
|
|
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 SelectameloI18n = {\n placeholder?: string;\n searchPlaceholder?: string;\n clearTitle?: string;\n clearAriaLabel?: string;\n removeChipAriaLabel?: string;\n noResults?: string;\n};\n\nexport type SelectameloOptions = {\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?: SelectameloI18n;\n};\n\nexport type SelectameloInstance = {\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, SelectameloInstance>();\nconst ICON_ANGLE_DOWN =\n '<svg class=\"zselect__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 9l6 6 6-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\nconst ICON_X =\n '<svg class=\"zselect__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 6l12 12M18 6l-12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>';\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 Selectamelo = {\n create(select: HTMLSelectElement, options: SelectameloOptions = {}): SelectameloInstance {\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-selectamelo-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-selectamelo-placeholder\"),\n searchPlaceholder: select.getAttribute(\"data-selectamelo-search-placeholder\"),\n clearTitle: select.getAttribute(\"data-selectamelo-clear-title\"),\n clearAriaLabel: select.getAttribute(\"data-selectamelo-clear-aria-label\"),\n removeChipAriaLabel: select.getAttribute(\"data-selectamelo-remove-chip-aria-label\"),\n noResults: select.getAttribute(\"data-selectamelo-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 \"Search...\",\n\n clearTitle:\n options.i18n?.clearTitle ??\n ds.clearTitle ??\n \"Clear\",\n\n clearAriaLabel:\n options.i18n?.clearAriaLabel ??\n ds.clearAriaLabel ??\n \"Clear selection\",\n\n removeChipAriaLabel:\n options.i18n?.removeChipAriaLabel ??\n ds.removeChipAriaLabel ??\n \"Remove\",\n\n noResults:\n options.i18n?.noResults ??\n ds.noResults ??\n \"No results\",\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.innerHTML = ICON_X;\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.innerHTML = ICON_ANGLE_DOWN;\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.innerHTML = ICON_X;\n x.title = \"Remove\";\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 || \"Select...\") : \"\";\n valueEl.classList.toggle(\"is-placeholder\", isPlaceholder);\n return;\n }\n\n if (isPlaceholder) {\n valueEl.textContent = t.placeholder || \"Select...\";\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 ?? \"Select...\";\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 \"Select...\";\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: SelectameloInstance = {\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): SelectameloInstance | 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":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "selectamelo",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Vanilla JS select enhancer core (no framework integration)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"select",
|
|
@@ -14,15 +14,15 @@
|
|
|
14
14
|
"no-jquery"
|
|
15
15
|
],
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"author": "
|
|
17
|
+
"author": "Zyc0n",
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "https://github.com/
|
|
20
|
+
"url": "https://github.com/zyc0n/selectamelo"
|
|
21
21
|
},
|
|
22
22
|
"bugs": {
|
|
23
|
-
"url": "https://github.com/
|
|
23
|
+
"url": "https://github.com/zyc0n/selectamelo/issues"
|
|
24
24
|
},
|
|
25
|
-
"homepage": "https://github.
|
|
25
|
+
"homepage": "https://zyc0n.github.io/selectamelo/",
|
|
26
26
|
"type": "module",
|
|
27
27
|
"main": "./dist/index.cjs",
|
|
28
28
|
"module": "./dist/index.js",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
|
-
"build": "tsup src/index.ts --format esm,cjs,iife --global-name
|
|
47
|
-
"dev": "tsup src/index.ts --format esm,cjs,iife --global-name
|
|
46
|
+
"build": "tsup src/index.ts --format esm,cjs,iife --global-name Selectamelo --dts --sourcemap --clean",
|
|
47
|
+
"dev": "tsup src/index.ts --format esm,cjs,iife --global-name Selectamelo --dts --sourcemap --watch",
|
|
48
48
|
"typecheck": "tsc --noEmit",
|
|
49
49
|
"prepublishOnly": "npm run build"
|
|
50
50
|
},
|