@mattilsynet/design 0.5.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/mtds/card/card.stories.d.ts +3 -2
  2. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +250 -0
  3. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +1 -0
  4. package/mtds/external/@u-elements/u-tags/dist/u-tags.js +367 -0
  5. package/mtds/external/@u-elements/u-tags/dist/u-tags.js.map +1 -0
  6. package/mtds/field/field-observer.js +42 -34
  7. package/mtds/field/field-observer.js.map +1 -1
  8. package/mtds/field/field.stories.d.ts +2 -0
  9. package/mtds/helptext/helptext-observer.d.ts +1 -0
  10. package/mtds/helptext/helptext.d.ts +2 -0
  11. package/mtds/{togglegroup/togglegroup.stories.d.ts → helptext/helptext.story.d.ts} +3 -0
  12. package/mtds/index.d.ts +7 -4
  13. package/mtds/index.iife.js +5 -2
  14. package/mtds/index.iife.js.map +1 -1
  15. package/mtds/index.js.map +1 -1
  16. package/mtds/input/input.stories.d.ts +1 -0
  17. package/mtds/layout/layout-observer.js +21 -13
  18. package/mtds/layout/layout-observer.js.map +1 -1
  19. package/mtds/layout/layout.d.ts +4 -3
  20. package/mtds/layout/layout.js.map +1 -1
  21. package/mtds/logo/logo-observer.js +16 -16
  22. package/mtds/logo/logo-observer.js.map +1 -1
  23. package/mtds/popover/popover.js +3 -3
  24. package/mtds/popover/popover.js.map +1 -1
  25. package/mtds/popover/popover.stories.d.ts +1 -0
  26. package/mtds/react.d.ts +1 -1
  27. package/mtds/react.js +1 -1
  28. package/mtds/styles.css +1 -1
  29. package/mtds/styles.json +34 -33
  30. package/mtds/styles.module.css.js +67 -65
  31. package/mtds/styles.module.css.js.map +1 -1
  32. package/mtds/{heading/heading.js → typography/typography.js} +1 -1
  33. package/mtds/typography/typography.js.map +1 -0
  34. package/mtds/{heading/heading.stories.d.ts → typography/typography.stories.d.ts} +2 -1
  35. package/mtds/utils.d.ts +2 -2
  36. package/mtds/utils.js.map +1 -1
  37. package/mtds/validation/validation.stories.d.ts +1 -0
  38. package/package.json +17 -17
  39. package/mtds/heading/heading.js.map +0 -1
  40. /package/mtds/{heading/heading.d.ts → typography/typography.d.ts} +0 -0
@@ -0,0 +1,367 @@
1
+ var vt = Object.defineProperty, X = Object.getOwnPropertySymbols, mt = Object.prototype.hasOwnProperty, _t = Object.prototype.propertyIsEnumerable, W = (t, e, n) => e in t ? vt(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, Z = (t, e) => {
2
+ for (var n in e || (e = {}))
3
+ mt.call(e, n) && W(t, n, e[n]);
4
+ if (X)
5
+ for (var n of X(e))
6
+ _t.call(e, n) && W(t, n, e[n]);
7
+ return t;
8
+ }, h = typeof window < "u" && typeof window.document < "u" && typeof window.navigator < "u", tt = h && /android/i.test(navigator.userAgent), bt = h && /firefox/i.test(navigator.userAgent), L = h && /iPad|iPhone|iPod/.test(navigator.userAgent), et = h && /^((?!chrome|android).)*safari/i.test(navigator.userAgent), q, gt = h && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474
9
+ /^Mac/i.test(((q = navigator.userAgentData) == null ? void 0 : q.platform) || navigator.platform), Et = `${tt ? "data" : "aria"}-labelledby`, N = `${et ? "aria" : "data"}-multiselectable`, nt = ":host(:not([hidden])) { display: block }", it = "outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color", H = typeof HTMLElement > "u" ? class {
10
+ } : HTMLElement;
11
+ function a(t, e, n) {
12
+ var i;
13
+ return n === void 0 ? (i = t.getAttribute(e)) != null ? i : null : (n === null ? t.removeAttribute(e) : t.getAttribute(e) !== n && t.setAttribute(e, n), null);
14
+ }
15
+ var ot = (t, e, n) => {
16
+ for (const i of n[0].split(","))
17
+ n[0] = i, Element.prototype[`${t}EventListener`].apply(e, n);
18
+ }, I = (t, ...e) => ot("add", t, e), x = (t, ...e) => ot("remove", t, e), rt = (t, e) => t.attachShadow({ mode: "open" }).append(
19
+ _("slot"),
20
+ // Unnamed slot does automatically render all top element nodes
21
+ _("style", e)
22
+ ), T = /* @__PURE__ */ new WeakMap(), w = (t, e) => {
23
+ if (e === void 0) return T.get(t);
24
+ try {
25
+ T.get(t).disconnect(), T.delete(t);
26
+ } catch {
27
+ }
28
+ if (e) {
29
+ const n = new MutationObserver(
30
+ (i) => t.handleEvent({ type: "mutation", detail: i })
31
+ );
32
+ n.observe(t, e), T.set(t, n);
33
+ }
34
+ }, yt = (t) => {
35
+ const e = "key" in t && (t.key === " " || t.key === "Enter");
36
+ return e && t.preventDefault(), e && t.target instanceof HTMLElement && t.target.click(), e;
37
+ }, O = (t) => {
38
+ var e;
39
+ const n = ((e = t.getRootNode) == null ? void 0 : e.call(t)) || t.ownerDocument;
40
+ return n instanceof Document || n instanceof ShadowRoot ? n : document;
41
+ }, It = 0, M = (t) => t ? (t.id || (t.id = `:${t.nodeName.toLowerCase()}${(++It).toString(32)}`), t.id) : "", _ = (t, e, n) => {
42
+ const i = document.createElement(t);
43
+ if (e && (i.textContent = e), n) for (const [o, l] of Object.entries(n)) a(i, o, l);
44
+ return i;
45
+ }, B = {
46
+ define: (t, e) => !h || window.customElements.get(t) || window.customElements.define(t, e)
47
+ }, at = (t) => {
48
+ if (!h) return null;
49
+ const e = _("div");
50
+ return e.style.cssText = "position:fixed;overflow:hidden;width:1px;white-space:nowrap", a(e, "aria-live", t), document.body.appendChild(e);
51
+ };
52
+ function A(t, e, n) {
53
+ if (!e) return Object.keys(t).map((o) => `data-sr-${o}`);
54
+ const i = (e == null ? void 0 : e.startsWith("data-sr-")) && e.slice(8);
55
+ return i && n && t[i] && (t[i] = n), [];
56
+ }
57
+ var R = "disabled", g = "selected", xt = class extends H {
58
+ // Using ES2015 syntax for backwards compatibility
59
+ static get observedAttributes() {
60
+ return [R, g];
61
+ }
62
+ constructor() {
63
+ super(), rt(
64
+ this,
65
+ `${nt}:host(:focus){${it}}:host{ cursor: pointer }`
66
+ );
67
+ }
68
+ connectedCallback() {
69
+ L || (this.tabIndex = -1), a(this, "role") || a(this, "role", "option"), this.attributeChangedCallback();
70
+ }
71
+ attributeChangedCallback() {
72
+ a(this, "aria-disabled", `${this.disabled}`), a(this, "aria-selected", `${this.selected}`);
73
+ }
74
+ /** Sets or retrieves whether the option in the list box is the default item. */
75
+ get defaultSelected() {
76
+ return this[g];
77
+ }
78
+ set defaultSelected(t) {
79
+ this[g] = t;
80
+ }
81
+ get disabled() {
82
+ return a(this, R) !== null;
83
+ }
84
+ set disabled(t) {
85
+ a(this, R, t ? "" : null);
86
+ }
87
+ /** Retrieves a reference to the form that the object is embedded in. */
88
+ get form() {
89
+ return this.closest("form");
90
+ }
91
+ /** Sets or retrieves the ordinal position of an option in a list box. */
92
+ get index() {
93
+ var t;
94
+ const e = (t = this.closest("u-datalist")) == null ? void 0 : t.getElementsByTagName("u-option");
95
+ return Array.from(e || [this]).indexOf(this);
96
+ }
97
+ /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */
98
+ get label() {
99
+ return a(this, "label") || this.text;
100
+ }
101
+ set label(t) {
102
+ a(this, "label", t);
103
+ }
104
+ get selected() {
105
+ return a(this, g) !== null;
106
+ }
107
+ set selected(t) {
108
+ a(this, g, t ? "" : null);
109
+ }
110
+ /** Sets or retrieves the text string specified by the option tag. */
111
+ get text() {
112
+ var t;
113
+ return ((t = this.textContent) == null ? void 0 : t.trim()) || "";
114
+ }
115
+ set text(t) {
116
+ this.textContent = t;
117
+ }
118
+ /** Sets or retrieves the value which is returned to the server when the form control is submitted. */
119
+ get value() {
120
+ return a(this, "value") || this.text;
121
+ }
122
+ set value(t) {
123
+ a(this, "value", t);
124
+ }
125
+ };
126
+ B.define("u-option", xt);
127
+ var P = !1, Y, Ct = 0, E = at("assertive"), Tt = et && !L, ut = "click,focusout,input,keydown,mousedown,mouseup", z = {
128
+ singular: "%d hit",
129
+ plural: "%d hits"
130
+ }, wt = class extends H {
131
+ constructor() {
132
+ super(), this._blurTimer = 0, this._input = null, this._root = null, this._value = "", this._texts = Z({}, z), rt(
133
+ this,
134
+ `${nt}::slotted(u-option[disabled]) { display: none !important }`
135
+ // Hide disabled options
136
+ );
137
+ }
138
+ // Speed up translated texts
139
+ // Using ES2015 syntax for backwards compatibility
140
+ static get observedAttributes() {
141
+ return ["id", ...A(z)];
142
+ }
143
+ connectedCallback() {
144
+ this.hidden = !0, this._root = O(this), E && !E.isConnected && document.body.append(E), a(this, "role", "listbox"), I(this._root, "focusin", this), I(this._root, "focus", this, !0), setTimeout(() => this.attributeChangedCallback());
145
+ }
146
+ disconnectedCallback() {
147
+ x(this._root || this, "focus", this, !0), x(this._root || this, "focusin", this), U(this), this._root = null;
148
+ }
149
+ attributeChangedCallback(t, e, n) {
150
+ var i;
151
+ A(this._texts, t, n);
152
+ const o = (i = this._root) == null ? void 0 : i.querySelectorAll(`input[list="${this.id}"]`);
153
+ for (const l of o || []) lt(this, l);
154
+ }
155
+ handleEvent(t) {
156
+ const { type: e } = t;
157
+ t.defaultPrevented || (e === "click" && kt(this, t), (e === "focus" || e === "focusin") && At(this, t), e === "focusout" && St(this), e === "keydown" && Lt(this, t), (e === "mutation" || e === "input") && dt(this, t), e === "mouseup" && (P = !1), e === "mousedown" && (P = this.contains(t.target)));
158
+ }
159
+ get options() {
160
+ return this.getElementsByTagName("u-option");
161
+ }
162
+ }, At = (t, { target: e }) => {
163
+ var n;
164
+ const i = t._input === e;
165
+ if (i || t.contains(e)) return clearTimeout(t._blurTimer);
166
+ !i && e instanceof HTMLInputElement && a(e, "list") === t.id && (t._input && U(t), t._input = e, a(t, Et, M((n = t._input.labels) == null ? void 0 : n[0])), I(t._root || t, ut, t), w(t, {
167
+ attributeFilter: ["value"],
168
+ // Listen for value changes to show u-options
169
+ attributes: !0,
170
+ childList: !0,
171
+ subtree: !0
172
+ }), b(t, !0));
173
+ }, St = (t) => {
174
+ P || (t._blurTimer = setTimeout(() => U(t)));
175
+ }, kt = (t, { target: e }) => {
176
+ var n, i, o, l, d;
177
+ const u = a(t, N) !== "true", s = [...t.options].find((r) => r.contains(e));
178
+ if (t._input === e)
179
+ b(t, !0);
180
+ else if (s && S(s)) {
181
+ for (const r of t.options)
182
+ r === s ? r.selected = !0 : u && (r.selected = !1);
183
+ (i = (n = Object.getOwnPropertyDescriptor(
184
+ HTMLInputElement.prototype,
185
+ "value"
186
+ )) == null ? void 0 : n.set) == null || i.call(t._input, s.value), u && ((o = t._input) == null || o.focus(), b(t, !1)), (l = t._input) == null || l.dispatchEvent(
187
+ new Event("input", { bubbles: !0, composed: !0 })
188
+ ), (d = t._input) == null || d.dispatchEvent(new Event("change", { bubbles: !0 }));
189
+ }
190
+ }, Lt = (t, e) => {
191
+ var n, i;
192
+ if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) return;
193
+ e.key !== "Escape" && b(t, !0);
194
+ const { key: o } = e, l = (n = t._root) == null ? void 0 : n.activeElement, d = st(t), u = d.indexOf(l);
195
+ let s = -1;
196
+ if (o === "ArrowDown" && (s = (u + 1) % d.length), o === "ArrowUp" && (s = (~u ? u : d.length) - 1), ~u && ((o === "Home" || o === "PageUp") && (s = 0), (o === "End" || o === "PageDown") && (s = d.length - 1), o === "Enter"))
197
+ return d[u].click(), e.preventDefault();
198
+ if (d[s]) for (const r of d) r.tabIndex = -1;
199
+ d[s] && e.preventDefault(), (i = d[s] || t._input) == null || i.focus(), o === "Escape" && b(t, !1);
200
+ }, b = (t, e) => {
201
+ t.hidden = !e, t.popover && t.togglePopover(e), t._input && lt(t, t._input, e), e && dt(t);
202
+ }, U = (t) => {
203
+ x(t._root || t, ut, t), w(t, !1), b(t, !1), t._input = null;
204
+ }, st = (t) => [...t.options].filter(
205
+ (e) => !e.disabled && e.offsetWidth && e.offsetHeight
206
+ // Checks disabled or visibility (since hidden attribute can be overwritten by display: block)
207
+ ), S = (t) => t instanceof HTMLOptionElement || t.getAttribute("role") === "option", lt = (t, e, n = !1) => {
208
+ a(e, "popovertarget", M(t)), a(e, "aria-autocomplete", "list"), a(e, "aria-controls", M(t)), a(e, "aria-expanded", `${Tt || n}`), a(e, "autocomplete", "off"), a(e, "role", "combobox");
209
+ }, G = (t) => (t == null ? void 0 : t.toLowerCase().trim()) || "", dt = (t, e) => {
210
+ var n;
211
+ const i = G((n = t._input) == null ? void 0 : n.value);
212
+ if (!((e == null ? void 0 : e.type) === "mutation" || t._value !== i)) return;
213
+ const l = t.hidden, d = a(t, N) !== "true", u = e instanceof InputEvent && !ft(e);
214
+ t.hidden = !0, t._value = i;
215
+ for (const r of t.options) {
216
+ const c = [r.value, r.label, r.text].map(G);
217
+ r.hidden = !c.some((p) => p.includes(i)), d && u && S(r) && (r.selected = c.includes(i));
218
+ }
219
+ t.hidden = l;
220
+ const s = st(t);
221
+ clearTimeout(Y), Y = setTimeout(() => {
222
+ const { length: r } = s.filter(S), c = ++Ct % 2 ? " " : "", p = `${`${t._texts[r === 1 ? "singular" : "plural"]}`.replace("%d", `${r}`)}`;
223
+ E && (E.textContent = `${!r && t.innerText.trim() || p}${c}`);
224
+ }, 1e3), L && s.map((r, c, p) => {
225
+ r.title = `${c + 1}/${p}`;
226
+ });
227
+ };
228
+ h && Object.defineProperty(HTMLInputElement.prototype, "list", {
229
+ configurable: !0,
230
+ enumerable: !0,
231
+ get() {
232
+ return O(this).getElementById(a(this, "list") || "");
233
+ }
234
+ });
235
+ B.define("u-datalist", wt);
236
+ var ct = " ".repeat(100), Ot = "insertReplacementText", F = ({
237
+ value: t
238
+ }) => t.split(ct)[0];
239
+ function ft(t) {
240
+ var e;
241
+ const n = t instanceof Event && t.type === "input" && t.target instanceof HTMLInputElement && (!t.inputType || t.inputType === Ot);
242
+ if (n) {
243
+ const i = t.target.value, o = Array.from(((e = t.target.list) == null ? void 0 : e.options) || []).some(
244
+ (l) => l.value === i && !S(l)
245
+ );
246
+ t.target.value = i.split(ct)[o ? 1 : 0];
247
+ }
248
+ return n;
249
+ }
250
+ var $t = tt || L, Dt = bt || gt, y = at("polite"), J = "input,focusin,focusout,keydown", Q = {
251
+ added: "Added",
252
+ remove: "Press to remove",
253
+ removed: "Removed",
254
+ empty: "No selected",
255
+ found: "Navigate left to find %d selected",
256
+ of: "of"
257
+ }, Rt = class extends H {
258
+ constructor() {
259
+ super(), this._blurAnnounceReset = !1, this._blurTimer = 0, this._focusIndex = null, this._root = null, this._texts = Z({}, Q), this.attachShadow({ mode: "open" }).append(
260
+ _("slot"),
261
+ // Content slot
262
+ _(
263
+ "style",
264
+ `:host(:not([hidden])){ display: inline-block }
265
+ ::slotted(data) { cursor: pointer; display: inline-block; outline: none; pointer-events: none }
266
+ ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
267
+ ::slotted(data:focus)::after { ${it} }`
268
+ // Show focus outline around ::after only
269
+ )
270
+ );
271
+ }
272
+ // Using ES2015 syntax for backwards compatibility
273
+ static get observedAttributes() {
274
+ return A(Q);
275
+ }
276
+ connectedCallback() {
277
+ this._root = O(this), y && !y.isConnected && document.body.append(y), w(this, { childList: !0 }), I(this._root, "click", this), I(this, J, this), setTimeout(() => k(this));
278
+ }
279
+ attributeChangedCallback(t, e, n) {
280
+ A(this._texts, t, n);
281
+ }
282
+ disconnectedCallback() {
283
+ w(this, !1), x(this._root || this, "click", this), x(this, J, this), this._root = null;
284
+ }
285
+ handleEvent(t) {
286
+ t.defaultPrevented || (t.type === "click" && Ft(this, t), t.type === "focusin" && Mt(this, t), t.type === "focusout" && Pt(this), t.type === "input" && Nt(this, t), t.type === "keydown" && Ht(this, t), t.type === "mutation" && k(this, t));
287
+ }
288
+ get items() {
289
+ return this.querySelectorAll("data");
290
+ }
291
+ get control() {
292
+ return this.querySelector("input");
293
+ }
294
+ }, V = (t, e) => t.dispatchEvent(
295
+ new CustomEvent("tags", {
296
+ bubbles: !0,
297
+ cancelable: !0,
298
+ detail: { item: e, action: e.isConnected ? "remove" : "add" }
299
+ })
300
+ ), k = (t, e) => {
301
+ var n, i, o, l, d;
302
+ const u = t._texts, s = Number.isNaN(t._focusIndex) ? null : e == null ? void 0 : e.detail[0], r = (s == null ? void 0 : s.addedNodes[0]) || (s == null ? void 0 : s.removedNodes[0]), c = `${r ? `${r.isConnected ? u.added : u.removed} ${r.textContent}, ` : ""}`, p = ((o = (i = (n = t.control) == null ? void 0 : n.labels) == null ? void 0 : i[0]) == null ? void 0 : o.textContent) || "", v = [];
303
+ a(t, "role", "group"), a(t, "aria-label", p), t.items.forEach((f, $, { length: D }) => {
304
+ var j;
305
+ const ht = `${c}${f.textContent}, ${u.remove}, ${$ + 1} ${u.of} ${D}`;
306
+ a(f, "aria-label", ht), a(f, "role", "button"), f.tabIndex = -1, f.value = f.value || ((j = f.textContent) == null ? void 0 : j.trim()) || "", v.push(f.value);
307
+ });
308
+ const m = t.control, pt = `${c}${p}, ${v.length ? u.found.replace("%d", `${v.length}`) : u.empty}`, C = m && document.getElementById(a(m, "list") || ""), K = C == null ? void 0 : C.children;
309
+ m && a(m, "aria-label", pt), C && a(C, N, "true");
310
+ for (const f of K || [])
311
+ f.selected = v.includes(F(f));
312
+ if (c) {
313
+ const f = t.items[(t._focusIndex || 1) - 1] || m, $ = f === ((l = O(t)) == null ? void 0 : l.activeElement), D = K || t.items;
314
+ t._blurAnnounceReset = !1, f === m ? ($ && ($t && y ? y.textContent = c : (d = D[0]) == null || d.focus()), setTimeout(() => f == null ? void 0 : f.focus(), 100)) : f == null || f.focus(), setTimeout(() => {
315
+ if (!Dt) return k(t);
316
+ t._blurAnnounceReset = !0;
317
+ }, 500);
318
+ }
319
+ }, Mt = (t, { target: e }) => {
320
+ clearTimeout(t._blurTimer), t._focusIndex = [...t.items].indexOf(e);
321
+ }, Pt = (t) => {
322
+ t._blurAnnounceReset && k(t), t._blurTimer = setTimeout(() => {
323
+ t._focusIndex = null;
324
+ });
325
+ }, Ft = (t, { target: e, clientX: n, clientY: i }) => {
326
+ var o;
327
+ const l = t.contains(e) ? [...t.items] : null, d = l == null ? void 0 : l.find((s) => s.contains(e)), u = l == null ? void 0 : l.find((s) => {
328
+ const { top: r, right: c, bottom: p, left: v } = s.getBoundingClientRect();
329
+ return i >= r && i <= p && n >= v && n <= c;
330
+ });
331
+ d ? V(t, d) && d.remove() : u ? u.focus() : e === t && ((o = t.control) == null || o.focus());
332
+ }, Nt = (t, e) => {
333
+ var n;
334
+ const i = e.target;
335
+ if (!ft(e) || !(i != null && i.value.trim())) return;
336
+ const o = F(i), l = [...t.items], u = [...((n = i == null ? void 0 : i.list) == null ? void 0 : n.children) || []].find((c) => F(c) === o), s = l.find((c) => c.value === o), r = _("data", (u == null ? void 0 : u.text) || o, {
337
+ value: o
338
+ });
339
+ if (i.value = "", !!V(t, s || r)) {
340
+ if (s) return s.remove();
341
+ if (!l[0]) return t.prepend(r);
342
+ l[l.length - 1].insertAdjacentElement("afterend", r);
343
+ }
344
+ }, Ht = (t, e) => {
345
+ var n, i;
346
+ const { key: o, repeat: l, target: d } = e, u = t.control === d ? t.control : null, s = u == null ? void 0 : u.selectionEnd;
347
+ let r = u ? t.items.length : (n = t._focusIndex) != null ? n : -1;
348
+ if (!(r === -1 || !u && yt(e))) {
349
+ if (o === "ArrowRight" && !u) r += 1;
350
+ else if (o === "ArrowLeft" && !s) r -= 1;
351
+ else {
352
+ if (o === "Enter" && u)
353
+ return e.preventDefault(), u.dispatchEvent(new Event("input", { bubbles: !0 }));
354
+ if ((o === "Backspace" || o === "Delete") && !s) {
355
+ const c = !l && t.items[r];
356
+ if (e.preventDefault(), c) return V(t, c) && c.remove();
357
+ u && (r -= 1);
358
+ } else return;
359
+ }
360
+ e.preventDefault(), (i = t.items[Math.max(0, r)] || t.control) == null || i.focus();
361
+ }
362
+ };
363
+ B.define("u-tags", Rt);
364
+ export {
365
+ Rt as UHTMLTagsElement
366
+ };
367
+ //# sourceMappingURL=u-tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"u-tags.js","sources":["../../../../../node_modules/@u-elements/u-tags/dist/u-tags.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// ../utils.ts\nvar IS_BROWSER = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.navigator !== \"undefined\";\nvar IS_ANDROID = IS_BROWSER && /android/i.test(navigator.userAgent);\nvar IS_FIREFOX = IS_BROWSER && /firefox/i.test(navigator.userAgent);\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nvar _a;\nvar IS_MAC = IS_BROWSER && // @ts-expect-error Typescript has not implemented userAgentData yet https://stackoverflow.com/a/71392474\n/^Mac/i.test(((_a = navigator.userAgentData) == null ? undefined : _a.platform) || navigator.platform);\nvar SAFE_LABELLEDBY = `${IS_ANDROID ? \"data\" : \"aria\"}-labelledby`;\nvar SAFE_MULTISELECTABLE = `${IS_SAFARI ? \"aria\" : \"data\"}-multiselectable`;\nvar DISPLAY_BLOCK = \":host(:not([hidden])) { display: block }\";\nvar FOCUS_OUTLINE = \"outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color\";\nvar UHTMLElement = typeof HTMLElement === \"undefined\" ? class {\n} : HTMLElement;\nfunction attr(el, name, value) {\n var _a2;\n if (value === undefined) return (_a2 = el.getAttribute(name)) != null ? _a2 : null;\n if (value === null) el.removeAttribute(name);\n else if (el.getAttribute(name) !== value) el.setAttribute(name, value);\n return null;\n}\nvar events = (action, element, rest) => {\n for (const type of rest[0].split(\",\")) {\n rest[0] = type;\n Element.prototype[`${action}EventListener`].apply(element, rest);\n }\n};\nvar on = (element, ...rest) => events(\"add\", element, rest);\nvar off = (element, ...rest) => events(\"remove\", element, rest);\nvar attachStyle = (element, css) => element.attachShadow({ mode: \"open\" }).append(\n createElement(\"slot\"),\n // Unnamed slot does automatically render all top element nodes\n createElement(\"style\", css)\n);\nvar observers = /* @__PURE__ */ new WeakMap();\nvar mutationObserver = (element, options) => {\n if (options === undefined) return observers.get(element);\n try {\n observers.get(element).disconnect();\n observers.delete(element);\n } catch (err) {\n }\n if (options) {\n const observer = new MutationObserver(\n (detail) => element.handleEvent({ type: \"mutation\", detail })\n );\n observer.observe(element, options);\n observers.set(element, observer);\n }\n};\nvar asButton = (event) => {\n const isClick = \"key\" in event && (event.key === \" \" || event.key === \"Enter\");\n if (isClick) event.preventDefault();\n if (isClick && event.target instanceof HTMLElement) event.target.click();\n return isClick;\n};\nvar getRoot = (node) => {\n var _a2;\n const root = ((_a2 = node.getRootNode) == null ? undefined : _a2.call(node)) || node.ownerDocument;\n return root instanceof Document || root instanceof ShadowRoot ? root : document;\n};\nvar id = 0;\nvar useId = (el) => {\n if (!el) return \"\";\n if (!el.id) el.id = `:${el.nodeName.toLowerCase()}${(++id).toString(32)}`;\n return el.id;\n};\nvar createElement = (tagName, text, attrs) => {\n const el = document.createElement(tagName);\n if (text) el.textContent = text;\n if (attrs) for (const [key, val] of Object.entries(attrs)) attr(el, key, val);\n return el;\n};\nvar customElements = {\n define: (name, instance) => !IS_BROWSER || window.customElements.get(name) || window.customElements.define(name, instance)\n};\nvar createAriaLive = (mode) => {\n if (!IS_BROWSER) return null;\n const live = createElement(\"div\");\n live.style.cssText = \"position:fixed;overflow:hidden;width:1px;white-space:nowrap\";\n attr(live, \"aria-live\", mode);\n return document.body.appendChild(live);\n};\nfunction attributeTexts(texts, prop, value) {\n if (!prop) return Object.keys(texts).map((key2) => `data-sr-${key2}`);\n const key = (prop == null ? undefined : prop.startsWith(\"data-sr-\")) && prop.slice(8);\n if (key && value && texts[key]) texts[key] = value;\n return [];\n}\n\n// ../u-datalist/u-option.ts\nvar DISABLED = \"disabled\";\nvar SELECTED = \"selected\";\nvar UHTMLOptionElement = class extends UHTMLElement {\n // Using ES2015 syntax for backwards compatibility\n static get observedAttributes() {\n return [DISABLED, SELECTED];\n }\n constructor() {\n super();\n attachStyle(\n this,\n `${DISPLAY_BLOCK}:host(:focus){${FOCUS_OUTLINE}}:host{ cursor: pointer }`\n );\n }\n connectedCallback() {\n if (!IS_IOS) this.tabIndex = -1;\n if (!attr(this, \"role\")) attr(this, \"role\", \"option\");\n this.attributeChangedCallback();\n }\n attributeChangedCallback() {\n attr(this, \"aria-disabled\", `${this.disabled}`);\n attr(this, \"aria-selected\", `${this.selected}`);\n }\n /** Sets or retrieves whether the option in the list box is the default item. */\n get defaultSelected() {\n return this[SELECTED];\n }\n set defaultSelected(value) {\n this[SELECTED] = value;\n }\n get disabled() {\n return attr(this, DISABLED) !== null;\n }\n set disabled(value) {\n attr(this, DISABLED, value ? \"\" : null);\n }\n /** Retrieves a reference to the form that the object is embedded in. */\n get form() {\n return this.closest(\"form\");\n }\n /** Sets or retrieves the ordinal position of an option in a list box. */\n get index() {\n var _a2;\n const options = (_a2 = this.closest(\"u-datalist\")) == null ? undefined : _a2.getElementsByTagName(\"u-option\");\n return Array.from(options || [this]).indexOf(this);\n }\n /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */\n get label() {\n return attr(this, \"label\") || this.text;\n }\n set label(value) {\n attr(this, \"label\", value);\n }\n get selected() {\n return attr(this, SELECTED) !== null;\n }\n set selected(value) {\n attr(this, SELECTED, value ? \"\" : null);\n }\n /** Sets or retrieves the text string specified by the option tag. */\n get text() {\n var _a2;\n return ((_a2 = this.textContent) == null ? undefined : _a2.trim()) || \"\";\n }\n set text(text) {\n this.textContent = text;\n }\n /** Sets or retrieves the value which is returned to the server when the form control is submitted. */\n get value() {\n return attr(this, \"value\") || this.text;\n }\n set value(value) {\n attr(this, \"value\", value);\n }\n};\ncustomElements.define(\"u-option\", UHTMLOptionElement);\n\n// ../u-datalist/u-datalist.ts\nvar IS_PRESS = false;\nvar LIVE_TIMER;\nvar LIVE_SR_FIX = 0;\nvar LIVE = createAriaLive(\"assertive\");\nvar IS_SAFARI_MAC = IS_SAFARI && !IS_IOS;\nvar EVENTS = \"click,focusout,input,keydown,mousedown,mouseup\";\nvar TEXTS = {\n singular: \"%d hit\",\n plural: \"%d hits\"\n};\nvar UHTMLDataListElement = class extends UHTMLElement {\n constructor() {\n super();\n // Using underscore instead of private fields for backwards compatibility\n // _announceCount = 0;\n // _announceTimer: ReturnType<typeof setTimeout> | number = 0;\n this._blurTimer = 0;\n this._input = null;\n this._root = null;\n this._value = \"\";\n // Store sanitized value to speed up option filtering\n this._texts = __spreadValues({}, TEXTS);\n attachStyle(\n this,\n `${DISPLAY_BLOCK}::slotted(u-option[disabled]) { display: none !important }`\n // Hide disabled options\n );\n }\n // Speed up translated texts\n // Using ES2015 syntax for backwards compatibility\n static get observedAttributes() {\n return [\"id\", ...attributeTexts(TEXTS)];\n }\n connectedCallback() {\n this.hidden = true;\n this._root = getRoot(this);\n if (LIVE && !LIVE.isConnected) document.body.append(LIVE);\n attr(this, \"role\", \"listbox\");\n on(this._root, \"focusin\", this);\n on(this._root, \"focus\", this, true);\n setTimeout(() => this.attributeChangedCallback());\n }\n disconnectedCallback() {\n off(this._root || this, \"focus\", this, true);\n off(this._root || this, \"focusin\", this);\n disconnectInput(this);\n this._root = null;\n }\n attributeChangedCallback(prop, _prev, next) {\n var _a2;\n attributeTexts(this._texts, prop, next);\n const inputs = (_a2 = this._root) == null ? undefined : _a2.querySelectorAll(`input[list=\"${this.id}\"]`);\n for (const input of inputs || []) setupInput(this, input);\n }\n handleEvent(event) {\n const { type } = event;\n if (event.defaultPrevented) return;\n if (type === \"click\") onClick(this, event);\n if (type === \"focus\" || type === \"focusin\") onFocusIn(this, event);\n if (type === \"focusout\") onFocusOut(this);\n if (type === \"keydown\") onKeyDown(this, event);\n if (type === \"mutation\" || type === \"input\") setupOptions(this, event);\n if (type === \"mouseup\") IS_PRESS = false;\n if (type === \"mousedown\") IS_PRESS = this.contains(event.target);\n }\n get options() {\n return this.getElementsByTagName(\"u-option\");\n }\n};\nvar onFocusIn = (self, { target }) => {\n var _a2;\n const isInput = self._input === target;\n const isInside = isInput || self.contains(target);\n if (isInside) return clearTimeout(self._blurTimer);\n if (!isInput && target instanceof HTMLInputElement && attr(target, \"list\") === self.id) {\n if (self._input) disconnectInput(self);\n self._input = target;\n attr(self, SAFE_LABELLEDBY, useId((_a2 = self._input.labels) == null ? undefined : _a2[0]));\n on(self._root || self, EVENTS, self);\n mutationObserver(self, {\n attributeFilter: [\"value\"],\n // Listen for value changes to show u-options\n attributes: true,\n childList: true,\n subtree: true\n });\n setExpanded(self, true);\n }\n};\nvar onFocusOut = (self) => {\n if (!IS_PRESS) self._blurTimer = setTimeout(() => disconnectInput(self));\n};\nvar onClick = (self, { target }) => {\n var _a2, _b, _c, _d, _e;\n const isSingle = attr(self, SAFE_MULTISELECTABLE) !== \"true\";\n const option = [...self.options].find((opt) => opt.contains(target));\n if (self._input === target) {\n setExpanded(self, true);\n } else if (option && isInteractiveOption(option)) {\n for (const opt of self.options) {\n if (opt === option) opt.selected = true;\n else if (isSingle) opt.selected = false;\n }\n (_b = (_a2 = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n \"value\"\n )) == null ? undefined : _a2.set) == null ? undefined : _b.call(self._input, option.value);\n if (isSingle) {\n (_c = self._input) == null ? undefined : _c.focus();\n setExpanded(self, false);\n }\n (_d = self._input) == null ? undefined : _d.dispatchEvent(\n new Event(\"input\", { bubbles: true, composed: true })\n );\n (_e = self._input) == null ? undefined : _e.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n};\nvar onKeyDown = (self, event) => {\n var _a2, _b;\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (event.key !== \"Escape\") setExpanded(self, true);\n const { key } = event;\n const active = (_a2 = self._root) == null ? undefined : _a2.activeElement;\n const options = getVisibleOptions(self);\n const index = options.indexOf(active);\n let next = -1;\n if (key === \"ArrowDown\") next = (index + 1) % options.length;\n if (key === \"ArrowUp\") next = (~index ? index : options.length) - 1;\n if (~index) {\n if (key === \"Home\" || key === \"PageUp\") next = 0;\n if (key === \"End\" || key === \"PageDown\") next = options.length - 1;\n if (key === \"Enter\") {\n options[index].click();\n return event.preventDefault();\n }\n }\n if (options[next]) for (const option of options) option.tabIndex = -1;\n if (options[next]) event.preventDefault();\n (_b = options[next] || self._input) == null ? undefined : _b.focus();\n if (key === \"Escape\") setExpanded(self, false);\n};\nvar setExpanded = (self, open) => {\n self.hidden = !open;\n if (self.popover) self.togglePopover(open);\n if (self._input) setupInput(self, self._input, open);\n if (open) setupOptions(self);\n};\nvar disconnectInput = (self) => {\n off(self._root || self, EVENTS, self);\n mutationObserver(self, false);\n setExpanded(self, false);\n self._input = null;\n};\nvar getVisibleOptions = (self) => [...self.options].filter(\n (opt) => !opt.disabled && opt.offsetWidth && opt.offsetHeight\n // Checks disabled or visibility (since hidden attribute can be overwritten by display: block)\n);\nvar isInteractiveOption = (option) => option instanceof HTMLOptionElement || option.getAttribute(\"role\") === \"option\";\nvar setupInput = (self, input, open = false) => {\n attr(input, \"popovertarget\", useId(self));\n attr(input, \"aria-autocomplete\", \"list\");\n attr(input, \"aria-controls\", useId(self));\n attr(input, \"aria-expanded\", `${IS_SAFARI_MAC || open}`);\n attr(input, \"autocomplete\", \"off\");\n attr(input, \"role\", \"combobox\");\n};\nvar sanitize = (str) => (str == null ? undefined : str.toLowerCase().trim()) || \"\";\nvar setupOptions = (self, event) => {\n var _a2;\n const value = sanitize((_a2 = self._input) == null ? undefined : _a2.value);\n const hasChange = (event == null ? undefined : event.type) === \"mutation\" || self._value !== value;\n if (!hasChange) return;\n const hidden = self.hidden;\n const isSingle = attr(self, SAFE_MULTISELECTABLE) !== \"true\";\n const isTyping = event instanceof InputEvent && !isDatalistClick(event);\n self.hidden = true;\n self._value = value;\n for (const opt of self.options) {\n const content = [opt.value, opt.label, opt.text].map(sanitize);\n opt.hidden = !content.some((str) => str.includes(value));\n if (isSingle && isTyping && isInteractiveOption(opt))\n opt.selected = content.includes(value);\n }\n self.hidden = hidden;\n const visible = getVisibleOptions(self);\n clearTimeout(LIVE_TIMER);\n LIVE_TIMER = setTimeout(() => {\n const { length } = visible.filter(isInteractiveOption);\n const liveSrFix = ++LIVE_SR_FIX % 2 ? \"\\xA0\" : \"\";\n const countText = `${`${self._texts[length === 1 ? \"singular\" : \"plural\"]}`.replace(\"%d\", `${length}`)}`;\n if (LIVE)\n LIVE.textContent = `${!length && self.innerText.trim() || countText}${liveSrFix}`;\n }, 1e3);\n if (IS_IOS)\n visible.map((opt, index, length) => {\n opt.title = `${index + 1}/${length}`;\n });\n};\nif (IS_BROWSER)\n Object.defineProperty(HTMLInputElement.prototype, \"list\", {\n configurable: true,\n enumerable: true,\n get() {\n return getRoot(this).getElementById(attr(this, \"list\") || \"\");\n }\n });\ncustomElements.define(\"u-datalist\", UHTMLDataListElement);\nvar SPLIT_CHAR = \"\\u2001\".repeat(100);\nvar FIREFOX_OPTION_CLICK = \"insertReplacementText\";\nvar getDatalistValue = ({\n value\n}) => value.split(SPLIT_CHAR)[0];\nfunction isDatalistClick(event) {\n var _a2;\n const isClick = event instanceof Event && event.type === \"input\" && event.target instanceof HTMLInputElement && (!event.inputType || event.inputType === FIREFOX_OPTION_CLICK);\n if (isClick) {\n const value = event.target.value;\n const ignored = Array.from(((_a2 = event.target.list) == null ? undefined : _a2.options) || []).some(\n (opt) => opt.value === value && !isInteractiveOption(opt)\n );\n event.target.value = value.split(SPLIT_CHAR)[ignored ? 1 : 0];\n }\n return isClick;\n}\n\n// u-tags.ts\nvar IS_MOBILE = IS_ANDROID || IS_IOS;\nvar IS_FIREFOX_MAC = IS_FIREFOX || IS_MAC;\nvar LIVE2 = createAriaLive(\"polite\");\nvar EVENTS2 = \"input,focusin,focusout,keydown\";\nvar TEXTS2 = {\n added: \"Added\",\n remove: \"Press to remove\",\n removed: \"Removed\",\n empty: \"No selected\",\n found: \"Navigate left to find %d selected\",\n of: \"of\"\n};\nvar UHTMLTagsElement = class extends UHTMLElement {\n constructor() {\n super();\n // Using underscore instead of private fields for backwards compatibility\n this._blurAnnounceReset = false;\n this._blurTimer = 0;\n this._focusIndex = null;\n this._root = null;\n this._texts = __spreadValues({}, TEXTS2);\n this.attachShadow({ mode: \"open\" }).append(\n createElement(\"slot\"),\n // Content slot\n createElement(\n \"style\",\n `:host(:not([hidden])){ display: inline-block }\n ::slotted(data) { cursor: pointer; display: inline-block; outline: none; pointer-events: none }\n ::slotted(data)::after { content: '\\\\00D7'; content: '\\\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }\n ::slotted(data:focus)::after { ${FOCUS_OUTLINE} }`\n // Show focus outline around ::after only\n )\n );\n }\n // Using ES2015 syntax for backwards compatibility\n static get observedAttributes() {\n return attributeTexts(TEXTS2);\n }\n connectedCallback() {\n this._root = getRoot(this);\n if (LIVE2 && !LIVE2.isConnected) document.body.append(LIVE2);\n mutationObserver(this, { childList: true });\n on(this._root, \"click\", this);\n on(this, EVENTS2, this);\n setTimeout(() => render(this));\n }\n attributeChangedCallback(prop, _prev, next) {\n attributeTexts(this._texts, prop, next);\n }\n disconnectedCallback() {\n mutationObserver(this, false);\n off(this._root || this, \"click\", this);\n off(this, EVENTS2, this);\n this._root = null;\n }\n handleEvent(event) {\n if (event.defaultPrevented) return;\n if (event.type === \"click\") onClick2(this, event);\n if (event.type === \"focusin\") onFocusIn2(this, event);\n if (event.type === \"focusout\") onFocusOut2(this);\n if (event.type === \"input\") onInputOptionClick(this, event);\n if (event.type === \"keydown\") onKeyDown2(this, event);\n if (event.type === \"mutation\") render(this, event);\n }\n get items() {\n return this.querySelectorAll(\"data\");\n }\n get control() {\n return this.querySelector(\"input\");\n }\n};\nvar dispatchChange = (self, item) => {\n return self.dispatchEvent(\n new CustomEvent(\"tags\", {\n bubbles: true,\n cancelable: true,\n detail: { item, action: item.isConnected ? \"remove\" : \"add\" }\n })\n );\n};\nvar render = (self, event) => {\n var _a2, _b, _c, _d, _e;\n const texts = self._texts;\n const change = Number.isNaN(self._focusIndex) ? null : event == null ? undefined : event.detail[0];\n const changeItem = (change == null ? undefined : change.addedNodes[0]) || (change == null ? undefined : change.removedNodes[0]);\n const changeText = `${changeItem ? `${changeItem.isConnected ? texts.added : texts.removed} ${changeItem.textContent}, ` : \"\"}`;\n const label = ((_c = (_b = (_a2 = self.control) == null ? undefined : _a2.labels) == null ? undefined : _b[0]) == null ? undefined : _c.textContent) || \"\";\n const values = [];\n attr(self, \"role\", \"group\");\n attr(self, \"aria-label\", label);\n self.items.forEach((item, index, { length }) => {\n var _a3;\n const label2 = `${changeText}${item.textContent}, ${texts.remove}, ${index + 1} ${texts.of} ${length}`;\n attr(item, \"aria-label\", label2);\n attr(item, \"role\", \"button\");\n item.tabIndex = -1;\n item.value = item.value || ((_a3 = item.textContent) == null ? undefined : _a3.trim()) || \"\";\n values.push(item.value);\n });\n const control = self.control;\n const controlLabel = `${changeText}${label}, ${values.length ? texts.found.replace(\"%d\", `${values.length}`) : texts.empty}`;\n const list = control && document.getElementById(attr(control, \"list\") || \"\");\n const options = list == null ? undefined : list.children;\n if (control) attr(control, \"aria-label\", controlLabel);\n if (list) attr(list, SAFE_MULTISELECTABLE, \"true\");\n for (const option of options || [])\n option.selected = values.includes(getDatalistValue(option));\n if (changeText) {\n const nextFocus = self.items[(self._focusIndex || 1) - 1] || control;\n const sameFocus = nextFocus === ((_d = getRoot(self)) == null ? undefined : _d.activeElement);\n const tmpFocus = options || self.items;\n self._blurAnnounceReset = false;\n if (nextFocus === control) {\n if (sameFocus) {\n if (IS_MOBILE && LIVE2) LIVE2.textContent = changeText;\n else (_e = tmpFocus[0]) == null ? undefined : _e.focus();\n }\n setTimeout(() => nextFocus == null ? undefined : nextFocus.focus(), 100);\n } else nextFocus == null ? undefined : nextFocus.focus();\n setTimeout(() => {\n if (!IS_FIREFOX_MAC) return render(self);\n self._blurAnnounceReset = true;\n }, 500);\n }\n};\nvar onFocusIn2 = (self, { target }) => {\n clearTimeout(self._blurTimer);\n self._focusIndex = [...self.items].indexOf(target);\n};\nvar onFocusOut2 = (self) => {\n if (self._blurAnnounceReset) render(self);\n self._blurTimer = setTimeout(() => {\n self._focusIndex = null;\n });\n};\nvar onClick2 = (self, { target, clientX: x, clientY: y }) => {\n var _a2;\n const items = self.contains(target) ? [...self.items] : null;\n const itemRemove = items == null ? undefined : items.find((item) => item.contains(target));\n const itemClicked = items == null ? undefined : items.find((item) => {\n const { top, right, bottom, left } = item.getBoundingClientRect();\n return y >= top && y <= bottom && x >= left && x <= right;\n });\n if (itemRemove) dispatchChange(self, itemRemove) && itemRemove.remove();\n else if (itemClicked) itemClicked.focus();\n else if (target === self) (_a2 = self.control) == null ? undefined : _a2.focus();\n};\nvar onInputOptionClick = (self, event) => {\n var _a2;\n const input = event.target;\n if (!isDatalistClick(event) || !(input == null ? undefined : input.value.trim())) return;\n const value = getDatalistValue(input);\n const items = [...self.items];\n const options = [...((_a2 = input == null ? undefined : input.list) == null ? undefined : _a2.children) || []];\n const optionClicked = options.find((opt) => getDatalistValue(opt) === value);\n const itemRemove = items.find((item) => item.value === value);\n const itemAdd = createElement(\"data\", (optionClicked == null ? undefined : optionClicked.text) || value, {\n value\n });\n input.value = \"\";\n if (!dispatchChange(self, itemRemove || itemAdd)) return;\n if (itemRemove) return itemRemove.remove();\n if (!items[0]) return self.prepend(itemAdd);\n items[items.length - 1].insertAdjacentElement(\"afterend\", itemAdd);\n};\nvar onKeyDown2 = (self, event) => {\n var _a2, _b;\n const { key, repeat, target } = event;\n const input = self.control === target ? self.control : null;\n const isCaretInside = input == null ? undefined : input.selectionEnd;\n let index = input ? self.items.length : (_a2 = self._focusIndex) != null ? _a2 : -1;\n if (index === -1 || !input && asButton(event)) return;\n if (key === \"ArrowRight\" && !input) index += 1;\n else if (key === \"ArrowLeft\" && !isCaretInside) index -= 1;\n else if (key === \"Enter\" && input) {\n event.preventDefault();\n return input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n } else if ((key === \"Backspace\" || key === \"Delete\") && !isCaretInside) {\n const remove = !repeat && self.items[index];\n event.preventDefault();\n if (remove) return dispatchChange(self, remove) && remove.remove();\n if (input) index -= 1;\n } else return;\n event.preventDefault();\n (_b = self.items[Math.max(0, index)] || self.control) == null ? undefined : _b.focus();\n};\ncustomElements.define(\"u-tags\", UHTMLTagsElement);\n\nexport { UHTMLTagsElement };\n"],"names":["__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","value","__spreadValues","a","b","prop","IS_BROWSER","IS_ANDROID","IS_FIREFOX","IS_IOS","IS_SAFARI","_a","IS_MAC","SAFE_LABELLEDBY","SAFE_MULTISELECTABLE","DISPLAY_BLOCK","FOCUS_OUTLINE","UHTMLElement","attr","el","name","_a2","events","action","element","rest","type","on","off","attachStyle","css","createElement","observers","mutationObserver","options","observer","detail","asButton","event","isClick","getRoot","node","root","id","useId","tagName","text","attrs","val","customElements","instance","createAriaLive","mode","live","attributeTexts","texts","key2","DISABLED","SELECTED","UHTMLOptionElement","IS_PRESS","LIVE_TIMER","LIVE_SR_FIX","LIVE","IS_SAFARI_MAC","EVENTS","TEXTS","UHTMLDataListElement","disconnectInput","_prev","next","inputs","input","setupInput","onClick","onFocusIn","onFocusOut","onKeyDown","setupOptions","self","target","isInput","setExpanded","_b","_c","_d","_e","isSingle","option","opt","isInteractiveOption","active","getVisibleOptions","index","open","sanitize","str","hidden","isTyping","isDatalistClick","content","visible","length","liveSrFix","countText","SPLIT_CHAR","FIREFOX_OPTION_CLICK","getDatalistValue","ignored","IS_MOBILE","IS_FIREFOX_MAC","LIVE2","EVENTS2","TEXTS2","UHTMLTagsElement","render","onClick2","onFocusIn2","onFocusOut2","onInputOptionClick","onKeyDown2","dispatchChange","item","change","changeItem","changeText","label","values","_a3","label2","control","controlLabel","list","nextFocus","sameFocus","tmpFocus","x","y","items","itemRemove","itemClicked","top","right","bottom","left","optionClicked","itemAdd","repeat","isCaretInside","remove"],"mappings":"AAAA,IAAIA,KAAY,OAAO,gBACnBC,IAAsB,OAAO,uBAC7BC,KAAe,OAAO,UAAU,gBAChCC,KAAe,OAAO,UAAU,sBAChCC,IAAkB,CAACC,GAAKC,GAAKC,MAAUD,KAAOD,IAAML,GAAUK,GAAKC,GAAK,EAAE,YAAY,IAAM,cAAc,IAAM,UAAU,IAAM,OAAAC,EAAK,CAAE,IAAIF,EAAIC,CAAG,IAAIC,GACtJC,IAAiB,CAACC,GAAGC,MAAM;AAC7B,WAASC,KAAQD,MAAMA,IAAI,CAAA;AACzB,IAAIR,GAAa,KAAKQ,GAAGC,CAAI,KAC3BP,EAAgBK,GAAGE,GAAMD,EAAEC,CAAI,CAAC;AACpC,MAAIV;AACF,aAASU,KAAQV,EAAoBS,CAAC;AACpC,MAAIP,GAAa,KAAKO,GAAGC,CAAI,KAC3BP,EAAgBK,GAAGE,GAAMD,EAAEC,CAAI,CAAC;AAEtC,SAAOF;AACT,GAGIG,IAAa,OAAO,SAAW,OAAe,OAAO,OAAO,WAAa,OAAe,OAAO,OAAO,YAAc,KACpHC,KAAaD,KAAc,WAAW,KAAK,UAAU,SAAS,GAC9DE,KAAaF,KAAc,WAAW,KAAK,UAAU,SAAS,GAC9DG,IAASH,KAAc,mBAAmB,KAAK,UAAU,SAAS,GAClEI,KAAYJ,KAAc,iCAAiC,KAAK,UAAU,SAAS,GACnFK,GACAC,KAASN;AACb,QAAQ,OAAOK,IAAK,UAAU,kBAAkB,OAAO,SAAYA,EAAG,aAAa,UAAU,QAAQ,GACjGE,KAAkB,GAAGN,KAAa,SAAS,MAAM,eACjDO,IAAuB,GAAGJ,KAAY,SAAS,MAAM,oBACrDK,KAAgB,4CAChBC,KAAgB,gGAChBC,IAAe,OAAO,cAAgB,MAAc,MAAM;AAC9D,IAAI;AACJ,SAASC,EAAKC,GAAIC,GAAMnB,GAAO;AAC7B,MAAIoB;AACJ,SAAIpB,MAAU,UAAmBoB,IAAMF,EAAG,aAAaC,CAAI,MAAM,OAAOC,IAAM,QAC1EpB,MAAU,OAAMkB,EAAG,gBAAgBC,CAAI,IAClCD,EAAG,aAAaC,CAAI,MAAMnB,KAAOkB,EAAG,aAAaC,GAAMnB,CAAK,GAC9D;AACT;AACA,IAAIqB,KAAS,CAACC,GAAQC,GAASC,MAAS;AACtC,aAAWC,KAAQD,EAAK,CAAC,EAAE,MAAM,GAAG;AAClC,IAAAA,EAAK,CAAC,IAAIC,GACV,QAAQ,UAAU,GAAGH,CAAM,eAAe,EAAE,MAAMC,GAASC,CAAI;AAEnE,GACIE,IAAK,CAACH,MAAYC,MAASH,GAAO,OAAOE,GAASC,CAAI,GACtDG,IAAM,CAACJ,MAAYC,MAASH,GAAO,UAAUE,GAASC,CAAI,GAC1DI,KAAc,CAACL,GAASM,MAAQN,EAAQ,aAAa,EAAE,MAAM,OAAQ,CAAA,EAAE;AAAA,EACzEO,EAAc,MAAM;AAAA;AAAA,EAEpBA,EAAc,SAASD,CAAG;AAC5B,GACIE,IAA4B,oBAAI,QAAS,GACzCC,IAAmB,CAACT,GAASU,MAAY;AAC3C,MAAIA,MAAY,OAAW,QAAOF,EAAU,IAAIR,CAAO;AACvD,MAAI;AACF,IAAAQ,EAAU,IAAIR,CAAO,EAAE,WAAY,GACnCQ,EAAU,OAAOR,CAAO;AAAA,EACzB,QAAa;AAAA,EAChB;AACE,MAAIU,GAAS;AACX,UAAMC,IAAW,IAAI;AAAA,MACnB,CAACC,MAAWZ,EAAQ,YAAY,EAAE,MAAM,YAAY,QAAAY,EAAQ,CAAA;AAAA,IAC7D;AACD,IAAAD,EAAS,QAAQX,GAASU,CAAO,GACjCF,EAAU,IAAIR,GAASW,CAAQ;AAAA,EACnC;AACA,GACIE,KAAW,CAACC,MAAU;AACxB,QAAMC,IAAU,SAASD,MAAUA,EAAM,QAAQ,OAAOA,EAAM,QAAQ;AACtE,SAAIC,KAASD,EAAM,eAAgB,GAC/BC,KAAWD,EAAM,kBAAkB,eAAaA,EAAM,OAAO,MAAO,GACjEC;AACT,GACIC,IAAU,CAACC,MAAS;AACtB,MAAIpB;AACJ,QAAMqB,MAASrB,IAAMoB,EAAK,gBAAgB,OAAO,SAAYpB,EAAI,KAAKoB,CAAI,MAAMA,EAAK;AACrF,SAAOC,aAAgB,YAAYA,aAAgB,aAAaA,IAAO;AACzE,GACIC,KAAK,GACLC,IAAQ,CAACzB,MACNA,KACAA,EAAG,OAAIA,EAAG,KAAK,IAAIA,EAAG,SAAS,YAAW,CAAE,IAAI,EAAEwB,IAAI,SAAS,EAAE,CAAC,KAChExB,EAAG,MAFM,IAIdY,IAAgB,CAACc,GAASC,GAAMC,MAAU;AAC5C,QAAM5B,IAAK,SAAS,cAAc0B,CAAO;AAEzC,MADIC,MAAM3B,EAAG,cAAc2B,IACvBC,EAAO,YAAW,CAAC/C,GAAKgD,CAAG,KAAK,OAAO,QAAQD,CAAK,EAAG,CAAA7B,EAAKC,GAAInB,GAAKgD,CAAG;AAC5E,SAAO7B;AACT,GACI8B,IAAiB;AAAA,EACnB,QAAQ,CAAC7B,GAAM8B,MAAa,CAAC5C,KAAc,OAAO,eAAe,IAAIc,CAAI,KAAK,OAAO,eAAe,OAAOA,GAAM8B,CAAQ;AAC3H,GACIC,KAAiB,CAACC,MAAS;AAC7B,MAAI,CAAC9C,EAAY,QAAO;AACxB,QAAM+C,IAAOtB,EAAc,KAAK;AAChC,SAAAsB,EAAK,MAAM,UAAU,+DACrBnC,EAAKmC,GAAM,aAAaD,CAAI,GACrB,SAAS,KAAK,YAAYC,CAAI;AACvC;AACA,SAASC,EAAeC,GAAOlD,GAAMJ,GAAO;AAC1C,MAAI,CAACI,EAAM,QAAO,OAAO,KAAKkD,CAAK,EAAE,IAAI,CAACC,MAAS,WAAWA,CAAI,EAAE;AACpE,QAAMxD,KAAOK,KAAQ,OAAO,SAAYA,EAAK,WAAW,UAAU,MAAMA,EAAK,MAAM,CAAC;AACpF,SAAIL,KAAOC,KAASsD,EAAMvD,CAAG,MAAGuD,EAAMvD,CAAG,IAAIC,IACtC,CAAE;AACX;AAGA,IAAIwD,IAAW,YACXC,IAAW,YACXC,KAAqB,cAAc1C,EAAa;AAAA;AAAA,EAElD,WAAW,qBAAqB;AAC9B,WAAO,CAACwC,GAAUC,CAAQ;AAAA,EAC9B;AAAA,EACE,cAAc;AACZ,UAAO,GACP7B;AAAA,MACE;AAAA,MACA,GAAGd,EAAa,iBAAiBC,EAAa;AAAA,IAC/C;AAAA,EACL;AAAA,EACE,oBAAoB;AAClB,IAAKP,MAAQ,KAAK,WAAW,KACxBS,EAAK,MAAM,MAAM,KAAGA,EAAK,MAAM,QAAQ,QAAQ,GACpD,KAAK,yBAA0B;AAAA,EACnC;AAAA,EACE,2BAA2B;AACzB,IAAAA,EAAK,MAAM,iBAAiB,GAAG,KAAK,QAAQ,EAAE,GAC9CA,EAAK,MAAM,iBAAiB,GAAG,KAAK,QAAQ,EAAE;AAAA,EAClD;AAAA;AAAA,EAEE,IAAI,kBAAkB;AACpB,WAAO,KAAKwC,CAAQ;AAAA,EACxB;AAAA,EACE,IAAI,gBAAgBzD,GAAO;AACzB,SAAKyD,CAAQ,IAAIzD;AAAA,EACrB;AAAA,EACE,IAAI,WAAW;AACb,WAAOiB,EAAK,MAAMuC,CAAQ,MAAM;AAAA,EACpC;AAAA,EACE,IAAI,SAASxD,GAAO;AAClB,IAAAiB,EAAK,MAAMuC,GAAUxD,IAAQ,KAAK,IAAI;AAAA,EAC1C;AAAA;AAAA,EAEE,IAAI,OAAO;AACT,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA;AAAA,EAEE,IAAI,QAAQ;AACV,QAAIoB;AACJ,UAAMa,KAAWb,IAAM,KAAK,QAAQ,YAAY,MAAM,OAAO,SAAYA,EAAI,qBAAqB,UAAU;AAC5G,WAAO,MAAM,KAAKa,KAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI;AAAA,EACrD;AAAA;AAAA,EAEE,IAAI,QAAQ;AACV,WAAOhB,EAAK,MAAM,OAAO,KAAK,KAAK;AAAA,EACvC;AAAA,EACE,IAAI,MAAMjB,GAAO;AACf,IAAAiB,EAAK,MAAM,SAASjB,CAAK;AAAA,EAC7B;AAAA,EACE,IAAI,WAAW;AACb,WAAOiB,EAAK,MAAMwC,CAAQ,MAAM;AAAA,EACpC;AAAA,EACE,IAAI,SAASzD,GAAO;AAClB,IAAAiB,EAAK,MAAMwC,GAAUzD,IAAQ,KAAK,IAAI;AAAA,EAC1C;AAAA;AAAA,EAEE,IAAI,OAAO;AACT,QAAIoB;AACJ,aAASA,IAAM,KAAK,gBAAgB,OAAO,SAAYA,EAAI,KAAI,MAAO;AAAA,EAC1E;AAAA,EACE,IAAI,KAAKyB,GAAM;AACb,SAAK,cAAcA;AAAA,EACvB;AAAA;AAAA,EAEE,IAAI,QAAQ;AACV,WAAO5B,EAAK,MAAM,OAAO,KAAK,KAAK;AAAA,EACvC;AAAA,EACE,IAAI,MAAMjB,GAAO;AACf,IAAAiB,EAAK,MAAM,SAASjB,CAAK;AAAA,EAC7B;AACA;AACAgD,EAAe,OAAO,YAAYU,EAAkB;AAGpD,IAAIC,IAAW,IACXC,GACAC,KAAc,GACdC,IAAOZ,GAAe,WAAW,GACjCa,KAAgBtD,MAAa,CAACD,GAC9BwD,KAAS,kDACTC,IAAQ;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AACV,GACIC,KAAuB,cAAclD,EAAa;AAAA,EACpD,cAAc;AACZ,UAAO,GAIP,KAAK,aAAa,GAClB,KAAK,SAAS,MACd,KAAK,QAAQ,MACb,KAAK,SAAS,IAEd,KAAK,SAASf,EAAe,CAAA,GAAIgE,CAAK,GACtCrC;AAAA,MACE;AAAA,MACA,GAAGd,EAAa;AAAA;AAAA,IAEjB;AAAA,EACL;AAAA;AAAA;AAAA,EAGE,WAAW,qBAAqB;AAC9B,WAAO,CAAC,MAAM,GAAGuC,EAAeY,CAAK,CAAC;AAAA,EAC1C;AAAA,EACE,oBAAoB;AAClB,SAAK,SAAS,IACd,KAAK,QAAQ1B,EAAQ,IAAI,GACrBuB,KAAQ,CAACA,EAAK,eAAa,SAAS,KAAK,OAAOA,CAAI,GACxD7C,EAAK,MAAM,QAAQ,SAAS,GAC5BS,EAAG,KAAK,OAAO,WAAW,IAAI,GAC9BA,EAAG,KAAK,OAAO,SAAS,MAAM,EAAI,GAClC,WAAW,MAAM,KAAK,0BAA0B;AAAA,EACpD;AAAA,EACE,uBAAuB;AACrB,IAAAC,EAAI,KAAK,SAAS,MAAM,SAAS,MAAM,EAAI,GAC3CA,EAAI,KAAK,SAAS,MAAM,WAAW,IAAI,GACvCwC,EAAgB,IAAI,GACpB,KAAK,QAAQ;AAAA,EACjB;AAAA,EACE,yBAAyB/D,GAAMgE,GAAOC,GAAM;AAC1C,QAAIjD;AACJ,IAAAiC,EAAe,KAAK,QAAQjD,GAAMiE,CAAI;AACtC,UAAMC,KAAUlD,IAAM,KAAK,UAAU,OAAO,SAAYA,EAAI,iBAAiB,eAAe,KAAK,EAAE,IAAI;AACvG,eAAWmD,KAASD,KAAU,CAAE,EAAE,CAAAE,GAAW,MAAMD,CAAK;AAAA,EAC5D;AAAA,EACE,YAAYlC,GAAO;AACjB,UAAM,EAAE,MAAAZ,EAAI,IAAKY;AACjB,IAAIA,EAAM,qBACNZ,MAAS,WAASgD,GAAQ,MAAMpC,CAAK,IACrCZ,MAAS,WAAWA,MAAS,cAAWiD,GAAU,MAAMrC,CAAK,GAC7DZ,MAAS,cAAYkD,GAAW,IAAI,GACpClD,MAAS,aAAWmD,GAAU,MAAMvC,CAAK,IACzCZ,MAAS,cAAcA,MAAS,YAASoD,GAAa,MAAMxC,CAAK,GACjEZ,MAAS,cAAWkC,IAAW,KAC/BlC,MAAS,gBAAakC,IAAW,KAAK,SAAStB,EAAM,MAAM;AAAA,EACnE;AAAA,EACE,IAAI,UAAU;AACZ,WAAO,KAAK,qBAAqB,UAAU;AAAA,EAC/C;AACA,GACIqC,KAAY,CAACI,GAAM,EAAE,QAAAC,QAAa;AACpC,MAAI3D;AACJ,QAAM4D,IAAUF,EAAK,WAAWC;AAEhC,MADiBC,KAAWF,EAAK,SAASC,CAAM,EAClC,QAAO,aAAaD,EAAK,UAAU;AACjD,EAAI,CAACE,KAAWD,aAAkB,oBAAoB9D,EAAK8D,GAAQ,MAAM,MAAMD,EAAK,OAC9EA,EAAK,UAAQX,EAAgBW,CAAI,GACrCA,EAAK,SAASC,GACd9D,EAAK6D,GAAMlE,IAAiB+B,GAAOvB,IAAM0D,EAAK,OAAO,WAAW,OAAO,SAAY1D,EAAI,CAAC,CAAC,CAAC,GAC1FM,EAAGoD,EAAK,SAASA,GAAMd,IAAQc,CAAI,GACnC9C,EAAiB8C,GAAM;AAAA,IACrB,iBAAiB,CAAC,OAAO;AAAA;AAAA,IAEzB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,EACf,CAAK,GACDG,EAAYH,GAAM,EAAI;AAE1B,GACIH,KAAa,CAACG,MAAS;AACzB,EAAKnB,MAAUmB,EAAK,aAAa,WAAW,MAAMX,EAAgBW,CAAI,CAAC;AACzE,GACIL,KAAU,CAACK,GAAM,EAAE,QAAAC,QAAa;AAClC,MAAI3D,GAAK8D,GAAIC,GAAIC,GAAIC;AACrB,QAAMC,IAAWrE,EAAK6D,GAAMjE,CAAoB,MAAM,QAChD0E,IAAS,CAAC,GAAGT,EAAK,OAAO,EAAE,KAAK,CAACU,MAAQA,EAAI,SAAST,CAAM,CAAC;AACnE,MAAID,EAAK,WAAWC;AAClB,IAAAE,EAAYH,GAAM,EAAI;AAAA,WACbS,KAAUE,EAAoBF,CAAM,GAAG;AAChD,eAAWC,KAAOV,EAAK;AACrB,MAAIU,MAAQD,IAAQC,EAAI,WAAW,KAC1BF,MAAUE,EAAI,WAAW;AAEpC,KAACN,KAAM9D,IAAM,OAAO;AAAA,MAClB,iBAAiB;AAAA,MACjB;AAAA,IACD,MAAK,OAAO,SAAYA,EAAI,QAAQ,QAAmB8D,EAAG,KAAKJ,EAAK,QAAQS,EAAO,KAAK,GACrFD,OACDH,IAAKL,EAAK,WAAW,QAAmBK,EAAG,MAAO,GACnDF,EAAYH,GAAM,EAAK,KAExBM,IAAKN,EAAK,WAAW,QAAmBM,EAAG;AAAA,MAC1C,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM,UAAU,GAAM,CAAA;AAAA,IACrD,IACAC,IAAKP,EAAK,WAAW,QAAmBO,EAAG,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,GAAM,CAAA,CAAC;AAAA,EACpG;AACA,GACIT,KAAY,CAACE,GAAMzC,MAAU;AAC/B,MAAIjB,GAAK8D;AACT,MAAI7C,EAAM,UAAUA,EAAM,WAAWA,EAAM,WAAWA,EAAM,SAAU;AACtE,EAAIA,EAAM,QAAQ,YAAU4C,EAAYH,GAAM,EAAI;AAClD,QAAM,EAAE,KAAA/E,EAAG,IAAKsC,GACVqD,KAAUtE,IAAM0D,EAAK,UAAU,OAAO,SAAY1D,EAAI,eACtDa,IAAU0D,GAAkBb,CAAI,GAChCc,IAAQ3D,EAAQ,QAAQyD,CAAM;AACpC,MAAIrB,IAAO;AAGX,MAFItE,MAAQ,gBAAasE,KAAQuB,IAAQ,KAAK3D,EAAQ,SAClDlC,MAAQ,cAAWsE,KAAQ,CAACuB,IAAQA,IAAQ3D,EAAQ,UAAU,IAC9D,CAAC2D,OACC7F,MAAQ,UAAUA,MAAQ,cAAUsE,IAAO,KAC3CtE,MAAQ,SAASA,MAAQ,gBAAYsE,IAAOpC,EAAQ,SAAS,IAC7DlC,MAAQ;AACV,WAAAkC,EAAQ2D,CAAK,EAAE,MAAO,GACfvD,EAAM,eAAgB;AAGjC,MAAIJ,EAAQoC,CAAI,EAAG,YAAWkB,KAAUtD,EAAS,CAAAsD,EAAO,WAAW;AACnE,EAAItD,EAAQoC,CAAI,KAAGhC,EAAM,eAAgB,IACxC6C,IAAKjD,EAAQoC,CAAI,KAAKS,EAAK,WAAW,QAAmBI,EAAG,MAAO,GAChEnF,MAAQ,YAAUkF,EAAYH,GAAM,EAAK;AAC/C,GACIG,IAAc,CAACH,GAAMe,MAAS;AAChC,EAAAf,EAAK,SAAS,CAACe,GACXf,EAAK,WAASA,EAAK,cAAce,CAAI,GACrCf,EAAK,UAAQN,GAAWM,GAAMA,EAAK,QAAQe,CAAI,GAC/CA,KAAMhB,GAAaC,CAAI;AAC7B,GACIX,IAAkB,CAACW,MAAS;AAC9B,EAAAnD,EAAImD,EAAK,SAASA,GAAMd,IAAQc,CAAI,GACpC9C,EAAiB8C,GAAM,EAAK,GAC5BG,EAAYH,GAAM,EAAK,GACvBA,EAAK,SAAS;AAChB,GACIa,KAAoB,CAACb,MAAS,CAAC,GAAGA,EAAK,OAAO,EAAE;AAAA,EAClD,CAACU,MAAQ,CAACA,EAAI,YAAYA,EAAI,eAAeA,EAAI;AAAA;AAEnD,GACIC,IAAsB,CAACF,MAAWA,aAAkB,qBAAqBA,EAAO,aAAa,MAAM,MAAM,UACzGf,KAAa,CAACM,GAAMP,GAAOsB,IAAO,OAAU;AAC9C,EAAA5E,EAAKsD,GAAO,iBAAiB5B,EAAMmC,CAAI,CAAC,GACxC7D,EAAKsD,GAAO,qBAAqB,MAAM,GACvCtD,EAAKsD,GAAO,iBAAiB5B,EAAMmC,CAAI,CAAC,GACxC7D,EAAKsD,GAAO,iBAAiB,GAAGR,MAAiB8B,CAAI,EAAE,GACvD5E,EAAKsD,GAAO,gBAAgB,KAAK,GACjCtD,EAAKsD,GAAO,QAAQ,UAAU;AAChC,GACIuB,IAAW,CAACC,OAASA,KAAO,OAAO,SAAYA,EAAI,YAAW,EAAG,KAAI,MAAO,IAC5ElB,KAAe,CAACC,GAAMzC,MAAU;AAClC,MAAIjB;AACJ,QAAMpB,IAAQ8F,GAAU1E,IAAM0D,EAAK,WAAW,OAAO,SAAY1D,EAAI,KAAK;AAE1E,MAAI,GADeiB,KAAS,OAAO,SAAYA,EAAM,UAAU,cAAcyC,EAAK,WAAW9E,GAC7E;AAChB,QAAMgG,IAASlB,EAAK,QACdQ,IAAWrE,EAAK6D,GAAMjE,CAAoB,MAAM,QAChDoF,IAAW5D,aAAiB,cAAc,CAAC6D,GAAgB7D,CAAK;AACtE,EAAAyC,EAAK,SAAS,IACdA,EAAK,SAAS9E;AACd,aAAWwF,KAAOV,EAAK,SAAS;AAC9B,UAAMqB,IAAU,CAACX,EAAI,OAAOA,EAAI,OAAOA,EAAI,IAAI,EAAE,IAAIM,CAAQ;AAC7D,IAAAN,EAAI,SAAS,CAACW,EAAQ,KAAK,CAACJ,MAAQA,EAAI,SAAS/F,CAAK,CAAC,GACnDsF,KAAYW,KAAYR,EAAoBD,CAAG,MACjDA,EAAI,WAAWW,EAAQ,SAASnG,CAAK;AAAA,EAC3C;AACE,EAAA8E,EAAK,SAASkB;AACd,QAAMI,IAAUT,GAAkBb,CAAI;AACtC,eAAalB,CAAU,GACvBA,IAAa,WAAW,MAAM;AAC5B,UAAM,EAAE,QAAAyC,EAAQ,IAAGD,EAAQ,OAAOX,CAAmB,GAC/Ca,IAAY,EAAEzC,KAAc,IAAI,MAAS,IACzC0C,IAAY,GAAG,GAAGzB,EAAK,OAAOuB,MAAW,IAAI,aAAa,QAAQ,CAAC,GAAG,QAAQ,MAAM,GAAGA,CAAM,EAAE,CAAC;AACtG,IAAIvC,MACFA,EAAK,cAAc,GAAG,CAACuC,KAAUvB,EAAK,UAAU,KAAM,KAAIyB,CAAS,GAAGD,CAAS;AAAA,EAClF,GAAE,GAAG,GACF9F,KACF4F,EAAQ,IAAI,CAACZ,GAAKI,GAAOS,MAAW;AAClC,IAAAb,EAAI,QAAQ,GAAGI,IAAQ,CAAC,IAAIS,CAAM;AAAA,EACxC,CAAK;AACL;AACIhG,KACF,OAAO,eAAe,iBAAiB,WAAW,QAAQ;AAAA,EACxD,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,MAAM;AACJ,WAAOkC,EAAQ,IAAI,EAAE,eAAetB,EAAK,MAAM,MAAM,KAAK,EAAE;AAAA,EAClE;AACA,CAAG;AACH+B,EAAe,OAAO,cAAckB,EAAoB;AACxD,IAAIsC,KAAa,IAAS,OAAO,GAAG,GAChCC,KAAuB,yBACvBC,IAAmB,CAAC;AAAA,EACtB,OAAA1G;AACF,MAAMA,EAAM,MAAMwG,EAAU,EAAE,CAAC;AAC/B,SAASN,GAAgB7D,GAAO;AAC9B,MAAIjB;AACJ,QAAMkB,IAAUD,aAAiB,SAASA,EAAM,SAAS,WAAWA,EAAM,kBAAkB,qBAAqB,CAACA,EAAM,aAAaA,EAAM,cAAcoE;AACzJ,MAAInE,GAAS;AACX,UAAMtC,IAAQqC,EAAM,OAAO,OACrBsE,IAAU,MAAM,OAAOvF,IAAMiB,EAAM,OAAO,SAAS,OAAO,SAAYjB,EAAI,YAAY,CAAA,CAAE,EAAE;AAAA,MAC9F,CAACoE,MAAQA,EAAI,UAAUxF,KAAS,CAACyF,EAAoBD,CAAG;AAAA,IACzD;AACD,IAAAnD,EAAM,OAAO,QAAQrC,EAAM,MAAMwG,EAAU,EAAEG,IAAU,IAAI,CAAC;AAAA,EAChE;AACE,SAAOrE;AACT;AAGA,IAAIsE,KAAYtG,MAAcE,GAC1BqG,KAAiBtG,MAAcI,IAC/BmG,IAAQ5D,GAAe,QAAQ,GAC/B6D,IAAU,kCACVC,IAAS;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,IAAI;AACN,GACIC,KAAmB,cAAcjG,EAAa;AAAA,EAChD,cAAc;AACZ,UAAO,GAEP,KAAK,qBAAqB,IAC1B,KAAK,aAAa,GAClB,KAAK,cAAc,MACnB,KAAK,QAAQ,MACb,KAAK,SAASf,EAAe,CAAA,GAAI+G,CAAM,GACvC,KAAK,aAAa,EAAE,MAAM,OAAM,CAAE,EAAE;AAAA,MAClClF,EAAc,MAAM;AAAA;AAAA,MAEpBA;AAAA,QACE;AAAA,QACA;AAAA;AAAA;AAAA,yCAGiCf,EAAa;AAAA;AAAA,MAEtD;AAAA,IACK;AAAA,EACL;AAAA;AAAA,EAEE,WAAW,qBAAqB;AAC9B,WAAOsC,EAAe2D,CAAM;AAAA,EAChC;AAAA,EACE,oBAAoB;AAClB,SAAK,QAAQzE,EAAQ,IAAI,GACrBuE,KAAS,CAACA,EAAM,eAAa,SAAS,KAAK,OAAOA,CAAK,GAC3D9E,EAAiB,MAAM,EAAE,WAAW,GAAI,CAAE,GAC1CN,EAAG,KAAK,OAAO,SAAS,IAAI,GAC5BA,EAAG,MAAMqF,GAAS,IAAI,GACtB,WAAW,MAAMG,EAAO,IAAI,CAAC;AAAA,EACjC;AAAA,EACE,yBAAyB9G,GAAMgE,GAAOC,GAAM;AAC1C,IAAAhB,EAAe,KAAK,QAAQjD,GAAMiE,CAAI;AAAA,EAC1C;AAAA,EACE,uBAAuB;AACrB,IAAArC,EAAiB,MAAM,EAAK,GAC5BL,EAAI,KAAK,SAAS,MAAM,SAAS,IAAI,GACrCA,EAAI,MAAMoF,GAAS,IAAI,GACvB,KAAK,QAAQ;AAAA,EACjB;AAAA,EACE,YAAY1E,GAAO;AACjB,IAAIA,EAAM,qBACNA,EAAM,SAAS,WAAS8E,GAAS,MAAM9E,CAAK,GAC5CA,EAAM,SAAS,aAAW+E,GAAW,MAAM/E,CAAK,GAChDA,EAAM,SAAS,cAAYgF,GAAY,IAAI,GAC3ChF,EAAM,SAAS,WAASiF,GAAmB,MAAMjF,CAAK,GACtDA,EAAM,SAAS,aAAWkF,GAAW,MAAMlF,CAAK,GAChDA,EAAM,SAAS,cAAY6E,EAAO,MAAM7E,CAAK;AAAA,EACrD;AAAA,EACE,IAAI,QAAQ;AACV,WAAO,KAAK,iBAAiB,MAAM;AAAA,EACvC;AAAA,EACE,IAAI,UAAU;AACZ,WAAO,KAAK,cAAc,OAAO;AAAA,EACrC;AACA,GACImF,IAAiB,CAAC1C,GAAM2C,MACnB3C,EAAK;AAAA,EACV,IAAI,YAAY,QAAQ;AAAA,IACtB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ,EAAE,MAAA2C,GAAM,QAAQA,EAAK,cAAc,WAAW,MAAK;AAAA,EAC5D,CAAA;AACF,GAECP,IAAS,CAACpC,GAAMzC,MAAU;AAC5B,MAAIjB,GAAK8D,GAAIC,GAAIC,GAAIC;AACrB,QAAM/B,IAAQwB,EAAK,QACb4C,IAAS,OAAO,MAAM5C,EAAK,WAAW,IAAI,OAAOzC,KAAS,OAAO,SAAYA,EAAM,OAAO,CAAC,GAC3FsF,KAAcD,KAAU,OAAO,SAAYA,EAAO,WAAW,CAAC,OAAOA,KAAU,OAAO,SAAYA,EAAO,aAAa,CAAC,IACvHE,IAAa,GAAGD,IAAa,GAAGA,EAAW,cAAcrE,EAAM,QAAQA,EAAM,OAAO,IAAIqE,EAAW,WAAW,OAAO,EAAE,IACvHE,MAAU1C,KAAMD,KAAM9D,IAAM0D,EAAK,YAAY,OAAO,SAAY1D,EAAI,WAAW,OAAO,SAAY8D,EAAG,CAAC,MAAM,OAAO,SAAYC,EAAG,gBAAgB,IAClJ2C,IAAS,CAAE;AACjB,EAAA7G,EAAK6D,GAAM,QAAQ,OAAO,GAC1B7D,EAAK6D,GAAM,cAAc+C,CAAK,GAC9B/C,EAAK,MAAM,QAAQ,CAAC2C,GAAM7B,GAAO,EAAE,QAAAS,QAAa;AAC9C,QAAI0B;AACJ,UAAMC,KAAS,GAAGJ,CAAU,GAAGH,EAAK,WAAW,KAAKnE,EAAM,MAAM,KAAKsC,IAAQ,CAAC,IAAItC,EAAM,EAAE,IAAI+C,CAAM;AACpG,IAAApF,EAAKwG,GAAM,cAAcO,EAAM,GAC/B/G,EAAKwG,GAAM,QAAQ,QAAQ,GAC3BA,EAAK,WAAW,IAChBA,EAAK,QAAQA,EAAK,WAAWM,IAAMN,EAAK,gBAAgB,OAAO,SAAYM,EAAI,KAAI,MAAO,IAC1FD,EAAO,KAAKL,EAAK,KAAK;AAAA,EAC1B,CAAG;AACD,QAAMQ,IAAUnD,EAAK,SACfoD,KAAe,GAAGN,CAAU,GAAGC,CAAK,KAAKC,EAAO,SAASxE,EAAM,MAAM,QAAQ,MAAM,GAAGwE,EAAO,MAAM,EAAE,IAAIxE,EAAM,KAAK,IACpH6E,IAAOF,KAAW,SAAS,eAAehH,EAAKgH,GAAS,MAAM,KAAK,EAAE,GACrEhG,IAAUkG,KAAQ,OAAO,SAAYA,EAAK;AAChD,EAAIF,KAAShH,EAAKgH,GAAS,cAAcC,EAAY,GACjDC,KAAMlH,EAAKkH,GAAMtH,GAAsB,MAAM;AACjD,aAAW0E,KAAUtD,KAAW,CAAE;AAChC,IAAAsD,EAAO,WAAWuC,EAAO,SAASpB,EAAiBnB,CAAM,CAAC;AAC5D,MAAIqC,GAAY;AACd,UAAMQ,IAAYtD,EAAK,OAAOA,EAAK,eAAe,KAAK,CAAC,KAAKmD,GACvDI,IAAYD,QAAgBhD,IAAK7C,EAAQuC,CAAI,MAAM,OAAO,SAAYM,EAAG,gBACzEkD,IAAWrG,KAAW6C,EAAK;AACjC,IAAAA,EAAK,qBAAqB,IACtBsD,MAAcH,KACZI,MACEzB,MAAaE,IAAOA,EAAM,cAAcc,KACtCvC,IAAKiD,EAAS,CAAC,MAAM,QAAmBjD,EAAG,MAAO,IAE1D,WAAW,MAAM+C,KAAa,OAAO,SAAYA,EAAU,MAAO,GAAE,GAAG,KAClEA,KAAa,QAAmBA,EAAU,MAAO,GACxD,WAAW,MAAM;AACf,UAAI,CAACvB,GAAgB,QAAOK,EAAOpC,CAAI;AACvC,MAAAA,EAAK,qBAAqB;AAAA,IAC3B,GAAE,GAAG;AAAA,EACV;AACA,GACIsC,KAAa,CAACtC,GAAM,EAAE,QAAAC,QAAa;AACrC,eAAaD,EAAK,UAAU,GAC5BA,EAAK,cAAc,CAAC,GAAGA,EAAK,KAAK,EAAE,QAAQC,CAAM;AACnD,GACIsC,KAAc,CAACvC,MAAS;AAC1B,EAAIA,EAAK,sBAAoBoC,EAAOpC,CAAI,GACxCA,EAAK,aAAa,WAAW,MAAM;AACjC,IAAAA,EAAK,cAAc;AAAA,EACvB,CAAG;AACH,GACIqC,KAAW,CAACrC,GAAM,EAAE,QAAAC,GAAQ,SAASwD,GAAG,SAASC,QAAQ;AAC3D,MAAIpH;AACJ,QAAMqH,IAAQ3D,EAAK,SAASC,CAAM,IAAI,CAAC,GAAGD,EAAK,KAAK,IAAI,MAClD4D,IAAaD,KAAS,OAAO,SAAYA,EAAM,KAAK,CAAChB,MAASA,EAAK,SAAS1C,CAAM,CAAC,GACnF4D,IAAcF,KAAS,OAAO,SAAYA,EAAM,KAAK,CAAChB,MAAS;AACnE,UAAM,EAAE,KAAAmB,GAAK,OAAAC,GAAO,QAAAC,GAAQ,MAAAC,EAAM,IAAGtB,EAAK,sBAAuB;AACjE,WAAOe,KAAKI,KAAOJ,KAAKM,KAAUP,KAAKQ,KAAQR,KAAKM;AAAA,EACxD,CAAG;AACD,EAAIH,IAAYlB,EAAe1C,GAAM4D,CAAU,KAAKA,EAAW,OAAQ,IAC9DC,IAAaA,EAAY,MAAO,IAChC5D,MAAWD,OAAO1D,IAAM0D,EAAK,YAAY,QAAmB1D,EAAI,MAAO;AAClF,GACIkG,KAAqB,CAACxC,GAAMzC,MAAU;AACxC,MAAIjB;AACJ,QAAMmD,IAAQlC,EAAM;AACpB,MAAI,CAAC6D,GAAgB7D,CAAK,KAAK,EAAEkC,KAAS,QAAmBA,EAAM,MAAM,KAAM,GAAG;AAClF,QAAMvE,IAAQ0G,EAAiBnC,CAAK,GAC9BkE,IAAQ,CAAC,GAAG3D,EAAK,KAAK,GAEtBkE,IADU,CAAC,KAAK5H,IAAMmD,KAAS,OAAO,SAAYA,EAAM,SAAS,OAAO,SAAYnD,EAAI,aAAa,CAAA,CAAE,EAC/E,KAAK,CAACoE,MAAQkB,EAAiBlB,CAAG,MAAMxF,CAAK,GACrE0I,IAAaD,EAAM,KAAK,CAAChB,MAASA,EAAK,UAAUzH,CAAK,GACtDiJ,IAAUnH,EAAc,SAASkH,KAAiB,OAAO,SAAYA,EAAc,SAAShJ,GAAO;AAAA,IACvG,OAAAA;AAAA,EACJ,CAAG;AAED,MADAuE,EAAM,QAAQ,IACV,EAACiD,EAAe1C,GAAM4D,KAAcO,CAAO,GAC/C;AAAA,QAAIP,EAAY,QAAOA,EAAW,OAAQ;AAC1C,QAAI,CAACD,EAAM,CAAC,EAAG,QAAO3D,EAAK,QAAQmE,CAAO;AAC1C,IAAAR,EAAMA,EAAM,SAAS,CAAC,EAAE,sBAAsB,YAAYQ,CAAO;AAAA;AACnE,GACI1B,KAAa,CAACzC,GAAMzC,MAAU;AAChC,MAAIjB,GAAK8D;AACT,QAAM,EAAE,KAAAnF,GAAK,QAAAmJ,GAAQ,QAAAnE,EAAQ,IAAG1C,GAC1BkC,IAAQO,EAAK,YAAYC,IAASD,EAAK,UAAU,MACjDqE,IAAgB5E,KAAS,OAAO,SAAYA,EAAM;AACxD,MAAIqB,IAAQrB,IAAQO,EAAK,MAAM,UAAU1D,IAAM0D,EAAK,gBAAgB,OAAO1D,IAAM;AACjF,MAAI,EAAAwE,MAAU,MAAM,CAACrB,KAASnC,GAASC,CAAK,IAC5C;AAAA,QAAItC,MAAQ,gBAAgB,CAACwE,EAAO,CAAAqB,KAAS;AAAA,aACpC7F,MAAQ,eAAe,CAACoJ,EAAe,CAAAvD,KAAS;AAAA,SACpD;AAAA,UAAI7F,MAAQ,WAAWwE;AAC1B,eAAAlC,EAAM,eAAgB,GACfkC,EAAM,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,GAAI,CAAE,CAAC;AAC3D,WAAKxE,MAAQ,eAAeA,MAAQ,aAAa,CAACoJ,GAAe;AACtE,cAAMC,IAAS,CAACF,KAAUpE,EAAK,MAAMc,CAAK;AAE1C,YADAvD,EAAM,eAAgB,GAClB+G,EAAQ,QAAO5B,EAAe1C,GAAMsE,CAAM,KAAKA,EAAO,OAAQ;AAClE,QAAI7E,MAAOqB,KAAS;AAAA,MACxB,MAAS;AAAA;AACP,IAAAvD,EAAM,eAAgB,IACrB6C,IAAKJ,EAAK,MAAM,KAAK,IAAI,GAAGc,CAAK,CAAC,KAAKd,EAAK,YAAY,QAAmBI,EAAG,MAAO;AAAA;AACxF;AACAlC,EAAe,OAAO,UAAUiE,EAAgB;","x_google_ignoreList":[0]}
@@ -1,51 +1,59 @@
1
- import m from "../styles.module.css.js";
2
- import { onMutation as p, on as u, QUICK_EVENT as v, isInputLike as h, attr as l, off as d, useId as c } from "../utils.js";
3
- const r = m.field.split(" ")[0], _ = "--mtds-text-count-over", P = "--mtds-text-count-under", S = m.validation.split(" "), x = S[0];
4
- function A(e) {
5
- for (const n of e) {
6
- const i = [], s = [];
7
- let o = null, a = !0;
8
- for (const t of n.getElementsByTagName("*"))
9
- t instanceof HTMLLabelElement ? i.push(t) : h(t) ? o = t : t.classList.contains(x) ? (a = l(t, "data-color") === "success", s.unshift(c(t))) : t instanceof HTMLParagraphElement && s.push(c(t));
1
+ import { UHTMLDataListElement as P } from "../external/@u-elements/u-datalist/dist/u-datalist.js";
2
+ import "../external/@u-elements/u-tags/dist/u-tags.js";
3
+ import p from "../styles.module.css.js";
4
+ import { onMutation as g, on as d, QUICK_EVENT as h, isInputLike as v, attr as s, off as m, useId as c } from "../utils.js";
5
+ const f = p.field.split(" ")[0], x = "--mtds-text-count-over", V = "--mtds-text-count-under", S = p.validation.split(" "), _ = S[0];
6
+ function A(t) {
7
+ for (const e of t) {
8
+ const l = [], i = [];
9
+ let o = null, r = null, a = !0;
10
+ for (const n of e.getElementsByTagName("*"))
11
+ n instanceof HTMLLabelElement ? l.push(n) : n instanceof P ? r = n : v(n) ? o = n : n.classList.contains(_) ? (a = s(n, "data-color") === "success", i.unshift(c(n))) : n instanceof HTMLParagraphElement && i.push(c(n));
10
12
  if (o) {
11
- for (const t of i) t.htmlFor = c(o);
12
- I(o), E(o), l(o, "aria-describedby", s.join(" ")), l(o, "aria-invalid", `${!a}`);
13
+ for (const n of l) n.htmlFor = c(o);
14
+ D(o, r), E(o), y(o), s(o, "aria-describedby", i.join(" ")), s(o, "aria-invalid", `${!a}`);
13
15
  }
14
16
  }
15
17
  }
16
- function g({ target: e }) {
17
- h(e) && (I(e), E(e));
18
+ function y(t) {
19
+ t instanceof HTMLTextAreaElement && (t.style.height = "auto", t.style.height = `${t.scrollHeight}px`);
18
20
  }
19
- function E(e) {
20
- e instanceof HTMLTextAreaElement && (e.style.height = "auto", e.style.height = `${e.scrollHeight}px`);
21
+ function D(t, e) {
22
+ if (s(t, "list", e ? c(e) : null), !e) return;
23
+ t.hasAttribute("placeholder") || s(t, "placeholder", "");
24
+ const l = window.getComputedStyle(e), i = l.getPropertyValue("--mtds-text-datalist-singular"), o = l.getPropertyValue("--mtds-text-datalist-plural");
25
+ s(e, "data-sr-plural", o), s(e, "data-sr-singular", i);
21
26
  }
22
- function I(e) {
23
- var s, o;
24
- const n = e == null ? void 0 : e.nextElementSibling, i = n && l(n, "data-count");
25
- if (n && i) {
26
- const a = Number(i) - e.value.length, t = a < 0, b = l(n, "aria-live") === "polite", f = window.getComputedStyle(n || e), L = ((s = f.getPropertyValue(_)) == null ? void 0 : s.slice(1, -1)) || "", y = ((o = f.getPropertyValue(P)) == null ? void 0 : o.slice(1, -1)) || "";
27
- if (b !== t) {
28
- l(n, "aria-live", t ? "polite" : "off");
29
- for (const C of S) n.classList.toggle(C, t);
27
+ function E(t) {
28
+ var i, o;
29
+ const e = t == null ? void 0 : t.nextElementSibling, l = e && s(e, "data-count");
30
+ if (e && l) {
31
+ const r = Number(l) - t.value.length, a = r < 0, n = s(e, "aria-live") === "polite", u = window.getComputedStyle(e || t), T = ((i = u.getPropertyValue(x)) == null ? void 0 : i.slice(1, -1)) || "", b = ((o = u.getPropertyValue(V)) == null ? void 0 : o.slice(1, -1)) || "";
32
+ if (n !== a) {
33
+ s(e, "aria-live", a ? "polite" : "off");
34
+ for (const C of S) e.classList.toggle(C, a);
30
35
  }
31
- n.textContent = (t ? L : y).replace(
36
+ e.textContent = (a ? T : b).replace(
32
37
  "%d",
33
- `${Math.abs(a)}`
38
+ `${Math.abs(r)}`
34
39
  );
35
40
  }
36
41
  }
37
- function T(e) {
38
- var n, i;
39
- (i = (n = e.target) == null ? void 0 : n.closest) != null && i.call(n, `.${r}`) && e.preventDefault();
42
+ function I({ target: t }) {
43
+ v(t) && (E(t), y(t));
40
44
  }
41
- function V(e) {
42
- p(e, r, A), u(e, "input", g, v), u(e, "invalid", T, !0);
45
+ function L(t) {
46
+ var e, l;
47
+ (l = (e = t.target) == null ? void 0 : e.closest) != null && l.call(e, `.${f}`) && t.preventDefault();
43
48
  }
44
- function D(e) {
45
- p(e, r, !1), d(e, "input", g, v), d(e, "invalid", T, !0);
49
+ function O(t) {
50
+ g(t, f, A), d(t, "input", I, h), d(t, "invalid", L, !0);
51
+ }
52
+ function w(t) {
53
+ g(t, f, !1), m(t, "input", I, h), m(t, "invalid", L, !0);
46
54
  }
47
55
  export {
48
- V as observe,
49
- D as unobserve
56
+ O as observe,
57
+ w as unobserve
50
58
  };
51
59
  //# sourceMappingURL=field-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-observer.js","sources":["../../designsystem/field/field-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport {\n QUICK_EVENT,\n attr,\n isInputLike,\n off,\n on,\n onMutation,\n useId,\n} from \"../utils\";\n\nconst CSS_FIELD = styles.field.split(\" \")[0];\nconst CSS_PROPERTY_OVER = \"--mtds-text-count-over\";\nconst CSS_PROPERTY_UNDER = \"--mtds-text-count-under\";\nconst CSS_VALIDATIONS = styles.validation.split(\" \");\nconst CSS_VALIDATION = CSS_VALIDATIONS[0];\n\nfunction renderAria(fields: HTMLCollectionOf<Element>) {\n for (const field of fields) {\n const labels: HTMLLabelElement[] = [];\n const descs: string[] = [];\n let input: HTMLInputElement | null = null;\n let valid = true;\n\n for (const el of field.getElementsByTagName(\"*\")) {\n if (el instanceof HTMLLabelElement) labels.push(el);\n else if (isInputLike(el)) input = el;\n else if (el.classList.contains(CSS_VALIDATION)) {\n // Must be before instanceof HTMLParagraphElement since validation can also be a <p>\n valid = attr(el, \"data-color\") === \"success\";\n descs.unshift(useId(el));\n } else if (el instanceof HTMLParagraphElement) descs.push(useId(el));\n }\n\n if (input) {\n for (const label of labels) label.htmlFor = useId(input);\n renderCounter(input);\n renderTextareaSize(input);\n attr(input, \"aria-describedby\", descs.join(\" \"));\n attr(input, \"aria-invalid\", `${!valid}`);\n }\n }\n}\nfunction handleInput({ target }: Event) {\n if (isInputLike(target)) {\n renderCounter(target);\n renderTextareaSize(target);\n }\n}\n\n// iOS does not support field-sizing: content, so we need to manually resize\nfunction renderTextareaSize(textarea: Element) {\n if (textarea instanceof HTMLTextAreaElement) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n}\n\nfunction renderCounter(input: HTMLInputElement) {\n const el = input?.nextElementSibling;\n const limit = el && attr(el, \"data-count\");\n\n if (el && limit) {\n const remainder = Number(limit) - input.value.length;\n const nextInvalid = remainder < 0;\n const prevInvalid = attr(el, \"aria-live\") === \"polite\";\n const style = window.getComputedStyle(el || input);\n const over = style.getPropertyValue(CSS_PROPERTY_OVER)?.slice(1, -1) || \"\"; // slice to trim quotes\n const under =\n style.getPropertyValue(CSS_PROPERTY_UNDER)?.slice(1, -1) || \"\"; // slice to trim quotes\n\n if (prevInvalid !== nextInvalid) {\n attr(el, \"aria-live\", nextInvalid ? \"polite\" : \"off\");\n for (const css of CSS_VALIDATIONS) el.classList.toggle(css, nextInvalid);\n }\n el.textContent = (nextInvalid ? over : under).replace(\n \"%d\",\n `${Math.abs(remainder)}`\n );\n }\n}\n\n// Prevent browsers from showing default validation bubbles\nfunction handleInvalid(event: Event) {\n if ((event.target as Element)?.closest?.(`.${CSS_FIELD}`))\n event.preventDefault();\n}\n\nexport function observe(el: Element) {\n onMutation(el, CSS_FIELD, renderAria);\n on(el, \"input\", handleInput, QUICK_EVENT);\n on(el, \"invalid\", handleInvalid, true); // Use capture as invalid does noe buttle\n}\n\nexport function unobserve(el: Element) {\n onMutation(el, CSS_FIELD, false);\n off(el, \"input\", handleInput, QUICK_EVENT);\n off(el, \"invalid\", handleInvalid, true);\n}\n"],"names":["CSS_FIELD","styles","CSS_PROPERTY_OVER","CSS_PROPERTY_UNDER","CSS_VALIDATIONS","CSS_VALIDATION","renderAria","fields","field","labels","descs","input","valid","el","isInputLike","attr","useId","label","renderCounter","renderTextareaSize","handleInput","target","textarea","limit","remainder","nextInvalid","prevInvalid","style","over","_a","under","_b","css","handleInvalid","event","observe","onMutation","on","QUICK_EVENT","unobserve","off"],"mappings":";;AAWA,MAAMA,IAAYC,EAAO,MAAM,MAAM,GAAG,EAAE,CAAC,GACrCC,IAAoB,0BACpBC,IAAqB,2BACrBC,IAAkBH,EAAO,WAAW,MAAM,GAAG,GAC7CI,IAAiBD,EAAgB,CAAC;AAExC,SAASE,EAAWC,GAAmC;AACrD,aAAWC,KAASD,GAAQ;AAC1B,UAAME,IAA6B,CAAC,GAC9BC,IAAkB,CAAC;AACzB,QAAIC,IAAiC,MACjCC,IAAQ;AAEZ,eAAWC,KAAML,EAAM,qBAAqB,GAAG;AAC7C,MAAIK,aAAc,mBAAyBJ,EAAA,KAAKI,CAAE,IACzCC,EAAYD,CAAE,IAAWF,IAAAE,IACzBA,EAAG,UAAU,SAASR,CAAc,KAEnCO,IAAAG,EAAKF,GAAI,YAAY,MAAM,WAC7BH,EAAA,QAAQM,EAAMH,CAAE,CAAC,KACdA,aAAc,0BAA4B,KAAKG,EAAMH,CAAE,CAAC;AAGrE,QAAIF,GAAO;AACT,iBAAWM,KAASR,EAAc,CAAAQ,EAAA,UAAUD,EAAML,CAAK;AACvD,MAAAO,EAAcP,CAAK,GACnBQ,EAAmBR,CAAK,GACxBI,EAAKJ,GAAO,oBAAoBD,EAAM,KAAK,GAAG,CAAC,GAC/CK,EAAKJ,GAAO,gBAAgB,GAAG,CAACC,CAAK,EAAE;AAAA,IAAA;AAAA,EACzC;AAEJ;AACA,SAASQ,EAAY,EAAE,QAAAC,KAAiB;AAClC,EAAAP,EAAYO,CAAM,MACpBH,EAAcG,CAAM,GACpBF,EAAmBE,CAAM;AAE7B;AAGA,SAASF,EAAmBG,GAAmB;AAC7C,EAAIA,aAAoB,wBACtBA,EAAS,MAAM,SAAS,QACxBA,EAAS,MAAM,SAAS,GAAGA,EAAS,YAAY;AAEpD;AAEA,SAASJ,EAAcP,GAAyB;;AAC9C,QAAME,IAAKF,KAAA,gBAAAA,EAAO,oBACZY,IAAQV,KAAME,EAAKF,GAAI,YAAY;AAEzC,MAAIA,KAAMU,GAAO;AACf,UAAMC,IAAY,OAAOD,CAAK,IAAIZ,EAAM,MAAM,QACxCc,IAAcD,IAAY,GAC1BE,IAAcX,EAAKF,GAAI,WAAW,MAAM,UACxCc,IAAQ,OAAO,iBAAiBd,KAAMF,CAAK,GAC3CiB,MAAOC,IAAAF,EAAM,iBAAiBzB,CAAiB,MAAxC,gBAAA2B,EAA2C,MAAM,GAAG,QAAO,IAClEC,MACJC,IAAAJ,EAAM,iBAAiBxB,CAAkB,MAAzC,gBAAA4B,EAA4C,MAAM,GAAG,QAAO;AAE9D,QAAIL,MAAgBD,GAAa;AAC/B,MAAAV,EAAKF,GAAI,aAAaY,IAAc,WAAW,KAAK;AACpD,iBAAWO,KAAO5B,EAAiB,CAAAS,EAAG,UAAU,OAAOmB,GAAKP,CAAW;AAAA,IAAA;AAEtE,IAAAZ,EAAA,eAAeY,IAAcG,IAAOE,GAAO;AAAA,MAC5C;AAAA,MACA,GAAG,KAAK,IAAIN,CAAS,CAAC;AAAA,IACxB;AAAA,EAAA;AAEJ;AAGA,SAASS,EAAcC,GAAc;;AACnC,GAAKH,KAAAF,IAAAK,EAAM,WAAN,gBAAAL,EAA0B,YAA1B,QAAAE,EAAA,KAAAF,GAAoC,IAAI7B,CAAS,OACpDkC,EAAM,eAAe;AACzB;AAEO,SAASC,EAAQtB,GAAa;AACxB,EAAAuB,EAAAvB,GAAIb,GAAWM,CAAU,GACjC+B,EAAAxB,GAAI,SAASO,GAAakB,CAAW,GACrCD,EAAAxB,GAAI,WAAWoB,GAAe,EAAI;AACvC;AAEO,SAASM,EAAU1B,GAAa;AAC1B,EAAAuB,EAAAvB,GAAIb,GAAW,EAAK,GAC3BwC,EAAA3B,GAAI,SAASO,GAAakB,CAAW,GACrCE,EAAA3B,GAAI,WAAWoB,GAAe,EAAI;AACxC;"}
1
+ {"version":3,"file":"field-observer.js","sources":["../../designsystem/field/field-observer.ts"],"sourcesContent":["import \"@u-elements/u-datalist\";\nimport \"@u-elements/u-tags\";\nimport { UHTMLDataListElement } from \"@u-elements/u-datalist\";\nimport styles from \"../styles.module.css\";\nimport {\n QUICK_EVENT,\n attr,\n isInputLike,\n off,\n on,\n onMutation,\n useId,\n} from \"../utils\";\n\nconst CSS_FIELD = styles.field.split(\" \")[0];\nconst CSS_PROPERTY_OVER = \"--mtds-text-count-over\";\nconst CSS_PROPERTY_UNDER = \"--mtds-text-count-under\";\nconst CSS_VALIDATIONS = styles.validation.split(\" \");\nconst CSS_VALIDATION = CSS_VALIDATIONS[0];\n\nfunction renderAria(fields: HTMLCollectionOf<Element>) {\n for (const field of fields) {\n const labels: HTMLLabelElement[] = [];\n const descs: string[] = [];\n let input: HTMLInputElement | null = null;\n let datalist: UHTMLDataListElement | null = null;\n let valid = true;\n\n for (const el of field.getElementsByTagName(\"*\")) {\n if (el instanceof HTMLLabelElement) labels.push(el);\n else if (el instanceof UHTMLDataListElement) datalist = el;\n else if (isInputLike(el)) input = el;\n else if (el.classList.contains(CSS_VALIDATION)) {\n // Must be before instanceof HTMLParagraphElement since validation can also be a <p>\n valid = attr(el, \"data-color\") === \"success\";\n descs.unshift(useId(el));\n } else if (el instanceof HTMLParagraphElement) descs.push(useId(el));\n }\n\n if (input) {\n for (const label of labels) label.htmlFor = useId(input);\n renderDatalist(input, datalist);\n renderCounter(input);\n renderTextareaSize(input);\n attr(input, \"aria-describedby\", descs.join(\" \"));\n attr(input, \"aria-invalid\", `${!valid}`);\n }\n }\n}\n\n// iOS does not support field-sizing: content, so we need to manually resize\nfunction renderTextareaSize(textarea: Element) {\n if (textarea instanceof HTMLTextAreaElement) {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n}\n\nfunction renderDatalist(\n input: HTMLInputElement,\n list?: UHTMLDataListElement | null\n) {\n attr(input, \"list\", list ? useId(list) : null);\n\n if (!list) return;\n if (!input.hasAttribute(\"placeholder\")) attr(input, \"placeholder\", \"\"); // Needed to render dropdown chevron when <datalist> is present\n\n const style = window.getComputedStyle(list);\n const singular = style.getPropertyValue(\"--mtds-text-datalist-singular\");\n const plural = style.getPropertyValue(\"--mtds-text-datalist-plural\");\n\n attr(list, \"data-sr-plural\", plural);\n attr(list, \"data-sr-singular\", singular);\n}\n\nfunction renderCounter(input: HTMLInputElement) {\n const el = input?.nextElementSibling;\n const limit = el && attr(el, \"data-count\");\n\n if (el && limit) {\n const remainder = Number(limit) - input.value.length;\n const nextInvalid = remainder < 0;\n const prevInvalid = attr(el, \"aria-live\") === \"polite\";\n const style = window.getComputedStyle(el || input);\n const over = style.getPropertyValue(CSS_PROPERTY_OVER)?.slice(1, -1) || \"\"; // slice to trim quotes\n const under =\n style.getPropertyValue(CSS_PROPERTY_UNDER)?.slice(1, -1) || \"\"; // slice to trim quotes\n\n if (prevInvalid !== nextInvalid) {\n attr(el, \"aria-live\", nextInvalid ? \"polite\" : \"off\");\n for (const css of CSS_VALIDATIONS) el.classList.toggle(css, nextInvalid);\n }\n el.textContent = (nextInvalid ? over : under).replace(\n \"%d\",\n `${Math.abs(remainder)}`\n );\n }\n}\n\n// Update when typing\nfunction handleInput({ target }: Event) {\n if (isInputLike(target)) {\n renderCounter(target);\n renderTextareaSize(target);\n }\n}\n\n// Prevent browsers from showing default validation bubbles\nfunction handleInvalid(event: Event) {\n if ((event.target as Element)?.closest?.(`.${CSS_FIELD}`))\n event.preventDefault();\n}\n\nexport function observe(el: Element) {\n onMutation(el, CSS_FIELD, renderAria);\n on(el, \"input\", handleInput, QUICK_EVENT);\n on(el, \"invalid\", handleInvalid, true); // Use capture as invalid does noe buttle\n}\n\nexport function unobserve(el: Element) {\n onMutation(el, CSS_FIELD, false);\n off(el, \"input\", handleInput, QUICK_EVENT);\n off(el, \"invalid\", handleInvalid, true);\n}\n"],"names":["CSS_FIELD","styles","CSS_PROPERTY_OVER","CSS_PROPERTY_UNDER","CSS_VALIDATIONS","CSS_VALIDATION","renderAria","fields","field","labels","descs","input","datalist","valid","el","UHTMLDataListElement","isInputLike","attr","useId","label","renderDatalist","renderCounter","renderTextareaSize","textarea","list","style","singular","plural","limit","remainder","nextInvalid","prevInvalid","over","_a","under","_b","css","handleInput","target","handleInvalid","event","observe","onMutation","on","QUICK_EVENT","unobserve","off"],"mappings":"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"}
@@ -14,3 +14,5 @@ export declare const Toggles: Story;
14
14
  export declare const WithValidation: Story;
15
15
  export declare const WithAffixes: Story;
16
16
  export declare const WithCharacterCount: Story;
17
+ export declare const WithSuggestion: Story;
18
+ export declare const WithMultiSuggestion: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export type HelpTextProps = React.ComponentPropsWithoutRef<"button">;
2
+ export declare const HelpText: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
@@ -1,7 +1,10 @@
1
1
  import { StoryObj } from '@storybook/react';
2
2
  declare const meta: {
3
3
  title: string;
4
+ tags: string[];
4
5
  };
5
6
  export default meta;
6
7
  type Story = StoryObj<typeof meta>;
7
8
  export declare const Default: Story;
9
+ export declare const InField: Story;
10
+ export declare const React: Story;