@k2b/ui 0.7.0 → 0.9.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 (59) hide show
  1. package/dist/browser/content/Calendar.js +12 -5
  2. package/dist/browser/content/Calendar.js.map +1 -1
  3. package/dist/browser/content/DataTable.js +25 -10
  4. package/dist/browser/content/DataTable.js.map +1 -1
  5. package/dist/browser/content/PdfPreview.js +170 -72
  6. package/dist/browser/content/PdfPreview.js.map +1 -1
  7. package/dist/browser/feedback/dialog-core.js +2 -1
  8. package/dist/browser/feedback/dialog-core.js.map +1 -1
  9. package/dist/browser/feedback/prompts.js +20 -6
  10. package/dist/browser/feedback/prompts.js.map +1 -1
  11. package/dist/browser/feedback/toast.js +4 -2
  12. package/dist/browser/feedback/toast.js.map +1 -1
  13. package/dist/browser/inputs/MultiSelectInput.js +258 -174
  14. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  15. package/dist/browser/inputs/choice.js +27 -0
  16. package/dist/browser/inputs/choice.js.map +1 -1
  17. package/dist/browser/intl/messages.js +54 -2
  18. package/dist/browser/intl/messages.js.map +1 -1
  19. package/dist/browser/layout/Navigation.js +8 -5
  20. package/dist/browser/layout/Navigation.js.map +1 -1
  21. package/dist/browser/layout/SettingsModal.js +32 -10
  22. package/dist/browser/layout/SettingsModal.js.map +1 -1
  23. package/dist/browser/layout/navigation-model.js +1 -0
  24. package/dist/browser/layout/navigation-model.js.map +1 -1
  25. package/dist/browser/surfaces/Placeholder.js +3 -0
  26. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  27. package/dist/ssr/content/Calendar.js +13 -6
  28. package/dist/ssr/content/Calendar.js.map +1 -1
  29. package/dist/ssr/content/DataTable.js +25 -10
  30. package/dist/ssr/content/DataTable.js.map +1 -1
  31. package/dist/ssr/content/PdfPreview.js +79 -22
  32. package/dist/ssr/content/PdfPreview.js.map +1 -1
  33. package/dist/ssr/feedback/dialog-core.js +2 -1
  34. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  35. package/dist/ssr/feedback/prompts.js +19 -5
  36. package/dist/ssr/feedback/prompts.js.map +1 -1
  37. package/dist/ssr/feedback/toast.js +4 -2
  38. package/dist/ssr/feedback/toast.js.map +1 -1
  39. package/dist/ssr/inputs/MultiSelectInput.js +87 -42
  40. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  41. package/dist/ssr/inputs/choice.js +27 -0
  42. package/dist/ssr/inputs/choice.js.map +1 -1
  43. package/dist/ssr/intl/messages.js +54 -2
  44. package/dist/ssr/intl/messages.js.map +1 -1
  45. package/dist/ssr/layout/Navigation.js +8 -5
  46. package/dist/ssr/layout/Navigation.js.map +1 -1
  47. package/dist/ssr/layout/SettingsModal.js +30 -5
  48. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  49. package/dist/ssr/layout/navigation-model.js +1 -0
  50. package/dist/ssr/layout/navigation-model.js.map +1 -1
  51. package/dist/ssr/surfaces/Placeholder.js +3 -0
  52. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  53. package/dist/styles.css +1 -1
  54. package/dist/types/content/PdfPreview.d.ts +8 -0
  55. package/dist/types/inputs/choice.d.ts +12 -0
  56. package/dist/types/intl/messages.d.ts +26 -0
  57. package/dist/types/layout/navigation-model.d.ts +5 -0
  58. package/dist/types/surfaces/Placeholder.d.ts +2 -1
  59. package/package.json +2 -1
@@ -5,10 +5,10 @@ import { addEventListener as _$addEventListener } from "solid-js/web";
5
5
  import { style as _$style } from "solid-js/web";
6
6
  import { setProperty as _$setProperty } from "solid-js/web";
7
7
  import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
8
- import { getNextMarker as _$getNextMarker } from "solid-js/web";
9
8
  import { className as _$className } from "solid-js/web";
10
9
  import { effect as _$effect } from "solid-js/web";
11
10
  import { getNextElement as _$getNextElement } from "solid-js/web";
11
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
12
12
  import { insert as _$insert } from "solid-js/web";
13
13
  import { createComponent as _$createComponent } from "solid-js/web";
14
14
  import { setAttribute as _$setAttribute } from "solid-js/web";
@@ -16,30 +16,31 @@ import { use as _$use } from "solid-js/web";
16
16
  import { spread as _$spread } from "solid-js/web";
17
17
  import { mergeProps as _$mergeProps } from "solid-js/web";
18
18
  import { memo as _$memo } from "solid-js/web";
19
- var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-multi-select-trigger__values>`),
20
- _tmpl$2 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
21
- _tmpl$3 = /*#__PURE__*/_$template(`<button type=button class="k2b-choice-control__clear k2b-input-clear-action"><i class="ti ti-x"aria-hidden=true>`),
22
- _tmpl$4 = /*#__PURE__*/_$template(`<div class=k2b-choice-search><i class="ti ti-search"aria-hidden=true></i><input type=search>`),
23
- _tmpl$5 = /*#__PURE__*/_$template(`<div class=k2b-choice-toolbar>`),
24
- _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-choice-status><i class="ti ti-loader-2 k2b-spin"aria-hidden=true></i><span>`),
25
- _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-choice-control><div class=k2b-multi-select-trigger role=combobox aria-haspopup=listbox><!$><!/><!$><!/></div><!$><!/><div popover=manual class=k2b-choice-popover role=group><!$><!/><!$><!/><div class=k2b-choice-options role=listbox aria-multiselectable=true><!$><!/><!$><!/><!$><!/></div></div><!$><!/>`),
26
- _tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-choice-trigger__value data-placeholder=true>`),
27
- _tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-choice-pill><!$><!/><button type=button tabindex=-1><i class="ti ti-x"aria-hidden=true>`),
28
- _tmpl$0 = /*#__PURE__*/_$template(`<span>`),
29
- _tmpl$1 = /*#__PURE__*/_$template(`<span class=k2b-choice-pill__content>`),
30
- _tmpl$10 = /*#__PURE__*/_$template(`<div class=k2b-choice-status data-tone=danger><span></span><button type=button>`),
31
- _tmpl$11 = /*#__PURE__*/_$template(`<div class=k2b-choice-status>`),
32
- _tmpl$12 = /*#__PURE__*/_$template(`<button type=button class=k2b-choice-option role=option><span class=k2b-choice-option__checkbox aria-hidden=true><i class="ti ti-check"></i></span><!$><!/><span class=k2b-choice-option__content>`),
33
- _tmpl$13 = /*#__PURE__*/_$template(`<span class=k2b-choice-dot aria-hidden=true>`),
34
- _tmpl$14 = /*#__PURE__*/_$template(`<strong>`),
35
- _tmpl$15 = /*#__PURE__*/_$template(`<small>`),
36
- _tmpl$16 = /*#__PURE__*/_$template(`<input type=hidden>`);
37
- import { createMemo, createSignal, For, Show } from "solid-js";
19
+ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-multi-select-trigger__more><span aria-hidden=true>+<!$><!/></span><span class=k2b-sr-only>`),
20
+ _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-multi-select-trigger__values><!$><!/><!$><!/>`),
21
+ _tmpl$3 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
22
+ _tmpl$4 = /*#__PURE__*/_$template(`<button type=button class="k2b-choice-control__clear k2b-input-clear-action"><i class="ti ti-x"aria-hidden=true>`),
23
+ _tmpl$5 = /*#__PURE__*/_$template(`<div class=k2b-choice-search><i class="ti ti-search"aria-hidden=true></i><input type=search>`),
24
+ _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-choice-toolbar>`),
25
+ _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-choice-status><i class="ti ti-loader-2 k2b-spin"aria-hidden=true></i><span>`),
26
+ _tmpl$8 = /*#__PURE__*/_$template(`<div class=k2b-choice-control><div class=k2b-multi-select-trigger role=combobox aria-haspopup=listbox><!$><!/><!$><!/></div><!$><!/><div popover=manual class=k2b-choice-popover role=group><!$><!/><!$><!/><div class=k2b-choice-options role=listbox aria-multiselectable=true><!$><!/><!$><!/><!$><!/></div></div><!$><!/>`),
27
+ _tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-choice-trigger__value data-placeholder=true>`),
28
+ _tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-choice-pill><!$><!/><button type=button tabindex=-1><i class="ti ti-x"aria-hidden=true>`),
29
+ _tmpl$1 = /*#__PURE__*/_$template(`<span>`),
30
+ _tmpl$10 = /*#__PURE__*/_$template(`<span class=k2b-choice-pill__content>`),
31
+ _tmpl$11 = /*#__PURE__*/_$template(`<div class=k2b-choice-status data-tone=danger><span></span><button type=button>`),
32
+ _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-choice-status>`),
33
+ _tmpl$13 = /*#__PURE__*/_$template(`<button type=button class=k2b-choice-option role=option><span class=k2b-choice-option__checkbox aria-hidden=true><i class="ti ti-check"></i></span><!$><!/><span class=k2b-choice-option__content>`),
34
+ _tmpl$14 = /*#__PURE__*/_$template(`<span class=k2b-choice-dot aria-hidden=true>`),
35
+ _tmpl$15 = /*#__PURE__*/_$template(`<strong>`),
36
+ _tmpl$16 = /*#__PURE__*/_$template(`<small>`),
37
+ _tmpl$17 = /*#__PURE__*/_$template(`<input type=hidden>`);
38
+ import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
38
39
  import { colorTintStyle, normalizeHexColor } from "../internal/color";
39
40
  import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
40
41
  import { useUiMessages } from "../intl/messages";
41
42
  import { ChoiceGroups } from "./ChoiceGroups";
42
- import { createChoiceLoader, createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from "./choice";
43
+ import { createChoiceLoader, createChoicePopover, filterChoiceOptions, fitChoicePills, nextEnabledChoiceIndex } from "./choice";
43
44
  import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
44
45
  /** Cloud tints the option icon with the option color instead of adding a dot. */
45
46
  const iconColor = color => {
@@ -101,6 +102,41 @@ export function MultiSelectInput(props) {
101
102
  const selectedValues = createMemo(() => new Set(values()));
102
103
  const popover = createChoicePopover(() => Boolean(props.disabled));
103
104
  const focusedOption = () => visibleOptions()[focusedIndex()];
105
+
106
+ // Pills that do not fit the trigger collapse into a "+N" summary. Until the
107
+ // browser measures them (server HTML, hidden containers) every pill stays.
108
+ let valuesRef;
109
+ let moreRef;
110
+ const [visibleCount, setVisibleCount] = createSignal(Number.POSITIVE_INFINITY);
111
+ const hiddenOptions = createMemo(() => selected().slice(visibleCount()));
112
+ // While every pill fits, the invisible summary carries the largest count it
113
+ // could show, so measuring it reserves enough room for the real one.
114
+ const moreCount = () => hiddenOptions().length || selected().length - 1;
115
+ const fitValues = () => {
116
+ const values = valuesRef;
117
+ if (!values?.isConnected) return;
118
+ // Measuring releases a truncated first pill to its natural width; the
119
+ // browser paints only the final state.
120
+ values.dataset.measuring = "true";
121
+ const pills = Array.from(values.querySelectorAll(":scope > .k2b-choice-pill"), pill => pill.getBoundingClientRect().width);
122
+ const fit = fitChoicePills(values.getBoundingClientRect().width, pills, Number.parseFloat(getComputedStyle(values).columnGap) || 0, moreRef?.isConnected ? moreRef.getBoundingClientRect().width : 0);
123
+ delete values.dataset.measuring;
124
+ // Hidden pills leave the flow. While any are hidden the strip keeps the
125
+ // whole row as its preferred width, so a container sized by its content
126
+ // does not shrink with the collapse and grows back once it has room. The
127
+ // strip still flexes to the trigger's width.
128
+ values.style.width = fit.visible < pills.length ? `${fit.rowWidth}px` : "";
129
+ setVisibleCount(fit.visible);
130
+ };
131
+ const resizeObserver = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(() => fitValues());
132
+ onCleanup(() => resizeObserver?.disconnect());
133
+ createEffect(() => {
134
+ selected();
135
+ fitValues();
136
+ });
137
+ onMount(() => {
138
+ if ("fonts" in document) void document.fonts.ready.then(fitValues);
139
+ });
104
140
  const emit = next => {
105
141
  const unique = [...new Set(next)];
106
142
  commitFieldValue(props, unique);
@@ -195,30 +231,32 @@ export function MultiSelectInput(props) {
195
231
  return props.disabled;
196
232
  },
197
233
  get children() {
198
- var _el$ = _$getNextElement(_tmpl$7),
234
+ var _el$ = _$getNextElement(_tmpl$8),
199
235
  _el$2 = _el$.firstChild,
200
- _el$5 = _el$2.firstChild,
201
- [_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
202
- _el$7 = _el$6.nextSibling,
203
- [_el$8, _co$2] = _$getNextMarker(_el$7.nextSibling),
204
- _el$27 = _el$2.nextSibling,
205
- [_el$28, _co$8] = _$getNextMarker(_el$27.nextSibling),
206
- _el$0 = _el$28.nextSibling,
207
- _el$23 = _el$0.firstChild,
208
- [_el$24, _co$6] = _$getNextMarker(_el$23.nextSibling),
209
- _el$25 = _el$24.nextSibling,
210
- [_el$26, _co$7] = _$getNextMarker(_el$25.nextSibling),
211
- _el$13 = _el$26.nextSibling,
212
- _el$17 = _el$13.firstChild,
213
- [_el$18, _co$3] = _$getNextMarker(_el$17.nextSibling),
214
- _el$19 = _el$18.nextSibling,
215
- [_el$20, _co$4] = _$getNextMarker(_el$19.nextSibling),
216
- _el$21 = _el$20.nextSibling,
217
- [_el$22, _co$5] = _$getNextMarker(_el$21.nextSibling),
218
- _el$29 = _el$0.nextSibling,
219
- [_el$30, _co$9] = _$getNextMarker(_el$29.nextSibling);
220
- var _ref$ = popover.setTrigger;
221
- typeof _ref$ === "function" ? _$use(_ref$, _el$2) : popover.setTrigger = _el$2;
236
+ _el$13 = _el$2.firstChild,
237
+ [_el$14, _co$4] = _$getNextMarker(_el$13.nextSibling),
238
+ _el$15 = _el$14.nextSibling,
239
+ [_el$16, _co$5] = _$getNextMarker(_el$15.nextSibling),
240
+ _el$37 = _el$2.nextSibling,
241
+ [_el$38, _co$1] = _$getNextMarker(_el$37.nextSibling),
242
+ _el$18 = _el$38.nextSibling,
243
+ _el$33 = _el$18.firstChild,
244
+ [_el$34, _co$9] = _$getNextMarker(_el$33.nextSibling),
245
+ _el$35 = _el$34.nextSibling,
246
+ [_el$36, _co$0] = _$getNextMarker(_el$35.nextSibling),
247
+ _el$23 = _el$36.nextSibling,
248
+ _el$27 = _el$23.firstChild,
249
+ [_el$28, _co$6] = _$getNextMarker(_el$27.nextSibling),
250
+ _el$29 = _el$28.nextSibling,
251
+ [_el$30, _co$7] = _$getNextMarker(_el$29.nextSibling),
252
+ _el$31 = _el$30.nextSibling,
253
+ [_el$32, _co$8] = _$getNextMarker(_el$31.nextSibling),
254
+ _el$39 = _el$18.nextSibling,
255
+ [_el$40, _co$10] = _$getNextMarker(_el$39.nextSibling);
256
+ _$use(element => {
257
+ popover.setTrigger(element);
258
+ resizeObserver?.observe(element);
259
+ }, _el$2);
222
260
  _$setAttribute(_el$2, "aria-controls", listboxId);
223
261
  _$spread(_el$2, _$mergeProps({
224
262
  get id() {
@@ -249,23 +287,29 @@ export function MultiSelectInput(props) {
249
287
  },
250
288
  get fallback() {
251
289
  return (() => {
252
- var _el$31 = _$getNextElement(_tmpl$8);
253
- _$insert(_el$31, () => props.placeholder ?? messages().select);
254
- return _el$31;
290
+ var _el$41 = _$getNextElement(_tmpl$9);
291
+ _$insert(_el$41, () => props.placeholder ?? messages().select);
292
+ return _el$41;
255
293
  })();
256
294
  },
257
295
  get children() {
258
- var _el$3 = _$getNextElement(_tmpl$);
296
+ var _el$3 = _$getNextElement(_tmpl$2),
297
+ _el$0 = _el$3.firstChild,
298
+ [_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling),
299
+ _el$10 = _el$1.nextSibling,
300
+ [_el$11, _co$3] = _$getNextMarker(_el$10.nextSibling);
301
+ var _ref$ = valuesRef;
302
+ typeof _ref$ === "function" ? _$use(_ref$, _el$3) : valuesRef = _el$3;
259
303
  _$insert(_el$3, _$createComponent(For, {
260
304
  get each() {
261
305
  return selected();
262
306
  },
263
- children: option => (() => {
264
- var _el$32 = _$getNextElement(_tmpl$9),
265
- _el$34 = _el$32.firstChild,
266
- [_el$35, _co$0] = _$getNextMarker(_el$34.nextSibling),
267
- _el$33 = _el$35.nextSibling;
268
- _$insert(_el$32, _$createComponent(Show, {
307
+ children: (option, index) => (() => {
308
+ var _el$42 = _$getNextElement(_tmpl$0),
309
+ _el$44 = _el$42.firstChild,
310
+ [_el$45, _co$11] = _$getNextMarker(_el$44.nextSibling),
311
+ _el$43 = _el$45.nextSibling;
312
+ _$insert(_el$42, _$createComponent(Show, {
269
313
  get when() {
270
314
  return props.renderValue;
271
315
  },
@@ -275,119 +319,159 @@ export function MultiSelectInput(props) {
275
319
  return option.icon;
276
320
  },
277
321
  children: icon => (() => {
278
- var _el$37 = _$getNextElement(_tmpl$2);
279
- _$effect(() => _$className(_el$37, icon()));
280
- return _el$37;
322
+ var _el$47 = _$getNextElement(_tmpl$3);
323
+ _$effect(() => _$className(_el$47, icon()));
324
+ return _el$47;
281
325
  })()
282
326
  }), (() => {
283
- var _el$36 = _$getNextElement(_tmpl$0);
284
- _$insert(_el$36, () => option.label);
285
- return _el$36;
327
+ var _el$46 = _$getNextElement(_tmpl$1);
328
+ _$insert(_el$46, () => option.label);
329
+ return _el$46;
286
330
  })()];
287
331
  },
288
332
  children: render => (() => {
289
- var _el$38 = _$getNextElement(_tmpl$1);
290
- _$insert(_el$38, () => render()(option));
291
- return _el$38;
333
+ var _el$48 = _$getNextElement(_tmpl$10);
334
+ _$insert(_el$48, () => render()(option));
335
+ return _el$48;
292
336
  })()
293
- }), _el$35, _co$0);
294
- _el$33.$$click = event => {
337
+ }), _el$45, _co$11);
338
+ _el$43.$$click = event => {
295
339
  event.stopPropagation();
296
340
  remove(option.value);
297
341
  };
298
342
  _$effect(_p$ => {
299
- var _v$6 = colorTintStyle(option.color),
300
- _v$7 = messages().removeNamed({
343
+ var _v$8 = colorTintStyle(option.color),
344
+ _v$9 = option.label,
345
+ _v$0 = index() >= visibleCount() ? "true" : undefined,
346
+ _v$1 = messages().removeNamed({
301
347
  name: option.label
302
348
  }),
303
- _v$8 = props.disabled;
304
- _p$.e = _$style(_el$32, _v$6, _p$.e);
305
- _v$7 !== _p$.t && _$setAttribute(_el$33, "aria-label", _p$.t = _v$7);
306
- _v$8 !== _p$.a && _$setProperty(_el$33, "disabled", _p$.a = _v$8);
349
+ _v$10 = props.disabled;
350
+ _p$.e = _$style(_el$42, _v$8, _p$.e);
351
+ _v$9 !== _p$.t && _$setAttribute(_el$42, "title", _p$.t = _v$9);
352
+ _v$0 !== _p$.a && _$setAttribute(_el$42, "data-hidden", _p$.a = _v$0);
353
+ _v$1 !== _p$.o && _$setAttribute(_el$43, "aria-label", _p$.o = _v$1);
354
+ _v$10 !== _p$.i && _$setProperty(_el$43, "disabled", _p$.i = _v$10);
307
355
  return _p$;
308
356
  }, {
309
357
  e: undefined,
310
358
  t: undefined,
311
- a: undefined
359
+ a: undefined,
360
+ o: undefined,
361
+ i: undefined
312
362
  });
313
363
  _$runHydrationEvents();
314
- return _el$32;
364
+ return _el$42;
315
365
  })()
316
- }));
366
+ }), _el$1, _co$2);
367
+ _$insert(_el$3, _$createComponent(Show, {
368
+ get when() {
369
+ return selected().length > 1;
370
+ },
371
+ get children() {
372
+ var _el$4 = _$getNextElement(_tmpl$),
373
+ _el$5 = _el$4.firstChild,
374
+ _el$6 = _el$5.firstChild,
375
+ _el$7 = _el$6.nextSibling,
376
+ [_el$8, _co$] = _$getNextMarker(_el$7.nextSibling),
377
+ _el$9 = _el$5.nextSibling;
378
+ _$use(element => {
379
+ moreRef = element;
380
+ resizeObserver?.observe(element);
381
+ onCleanup(() => resizeObserver?.unobserve(element));
382
+ }, _el$4);
383
+ _$insert(_el$5, moreCount, _el$8, _co$);
384
+ _$insert(_el$9, () => messages().moreSelected({
385
+ count: moreCount()
386
+ }));
387
+ _$effect(_p$ => {
388
+ var _v$ = hiddenOptions().map(option => option.label).join(", ") || undefined,
389
+ _v$2 = hiddenOptions().length === 0 ? "true" : undefined;
390
+ _v$ !== _p$.e && _$setAttribute(_el$4, "title", _p$.e = _v$);
391
+ _v$2 !== _p$.t && _$setAttribute(_el$4, "data-hidden", _p$.t = _v$2);
392
+ return _p$;
393
+ }, {
394
+ e: undefined,
395
+ t: undefined
396
+ });
397
+ return _el$4;
398
+ }
399
+ }), _el$11, _co$3);
400
+ _$effect(() => _$setAttribute(_el$3, "data-overflowing", hiddenOptions().length > 0 ? "true" : undefined));
317
401
  return _el$3;
318
402
  }
319
- }), _el$6, _co$);
403
+ }), _el$14, _co$4);
320
404
  _$insert(_el$2, _$createComponent(Show, {
321
405
  get when() {
322
406
  return !hasClearAction();
323
407
  },
324
408
  get children() {
325
- var _el$4 = _$getNextElement(_tmpl$2);
326
- _$effect(() => _$className(_el$4, `${popover.open() ? props.activeIcon ?? "ti ti-chevron-up" : props.icon ?? "ti ti-chevron-down"} k2b-multi-select-trigger__chevron`));
327
- return _el$4;
409
+ var _el$12 = _$getNextElement(_tmpl$3);
410
+ _$effect(() => _$className(_el$12, `${popover.open() ? props.activeIcon ?? "ti ti-chevron-up" : props.icon ?? "ti ti-chevron-down"} k2b-multi-select-trigger__chevron`));
411
+ return _el$12;
328
412
  }
329
- }), _el$8, _co$2);
413
+ }), _el$16, _co$5);
330
414
  _$insert(_el$, _$createComponent(Show, {
331
415
  get when() {
332
416
  return hasClearAction();
333
417
  },
334
418
  get children() {
335
- var _el$9 = _$getNextElement(_tmpl$3);
336
- _el$9.$$click = event => {
419
+ var _el$17 = _$getNextElement(_tmpl$4);
420
+ _el$17.$$click = event => {
337
421
  event.stopPropagation();
338
422
  emit([]);
339
423
  popover.trigger()?.focus();
340
424
  };
341
- _$effect(() => _$setAttribute(_el$9, "aria-label", props.clearLabel ?? messages().clearSelection));
425
+ _$effect(() => _$setAttribute(_el$17, "aria-label", props.clearLabel ?? messages().clearSelection));
342
426
  _$runHydrationEvents();
343
- return _el$9;
427
+ return _el$17;
344
428
  }
345
- }), _el$28, _co$8);
346
- _el$0.$$keydown = handleKeyDown;
429
+ }), _el$38, _co$1);
430
+ _el$18.$$keydown = handleKeyDown;
347
431
  var _ref$2 = popover.setPopover;
348
- typeof _ref$2 === "function" ? _$use(_ref$2, _el$0) : popover.setPopover = _el$0;
349
- _$insert(_el$0, _$createComponent(Show, {
432
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$18) : popover.setPopover = _el$18;
433
+ _$insert(_el$18, _$createComponent(Show, {
350
434
  get when() {
351
435
  return searchable();
352
436
  },
353
437
  get children() {
354
- var _el$1 = _$getNextElement(_tmpl$4),
355
- _el$10 = _el$1.firstChild,
356
- _el$11 = _el$10.nextSibling;
357
- _el$11.$$input = event => {
438
+ var _el$19 = _$getNextElement(_tmpl$5),
439
+ _el$20 = _el$19.firstChild,
440
+ _el$21 = _el$20.nextSibling;
441
+ _el$21.$$input = event => {
358
442
  const next = event.currentTarget.value;
359
443
  setQuery(next);
360
444
  if (isAsync()) asyncOptions.load(next);
361
445
  focusFirst();
362
446
  };
363
447
  var _ref$3 = searchRef;
364
- typeof _ref$3 === "function" ? _$use(_ref$3, _el$11) : searchRef = _el$11;
365
- _$setAttribute(_el$11, "aria-controls", listboxId);
448
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$21) : searchRef = _el$21;
449
+ _$setAttribute(_el$21, "aria-controls", listboxId);
366
450
  _$effect(_p$ => {
367
- var _v$ = props.searchPlaceholder ?? messages().search,
368
- _v$2 = props.searchPlaceholder ?? messages().searchOptions,
369
- _v$3 = focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined;
370
- _v$ !== _p$.e && _$setAttribute(_el$11, "placeholder", _p$.e = _v$);
371
- _v$2 !== _p$.t && _$setAttribute(_el$11, "aria-label", _p$.t = _v$2);
372
- _v$3 !== _p$.a && _$setAttribute(_el$11, "aria-activedescendant", _p$.a = _v$3);
451
+ var _v$3 = props.searchPlaceholder ?? messages().search,
452
+ _v$4 = props.searchPlaceholder ?? messages().searchOptions,
453
+ _v$5 = focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined;
454
+ _v$3 !== _p$.e && _$setAttribute(_el$21, "placeholder", _p$.e = _v$3);
455
+ _v$4 !== _p$.t && _$setAttribute(_el$21, "aria-label", _p$.t = _v$4);
456
+ _v$5 !== _p$.a && _$setAttribute(_el$21, "aria-activedescendant", _p$.a = _v$5);
373
457
  return _p$;
374
458
  }, {
375
459
  e: undefined,
376
460
  t: undefined,
377
461
  a: undefined
378
462
  });
379
- _$effect(() => _$setProperty(_el$11, "value", query()));
463
+ _$effect(() => _$setProperty(_el$21, "value", query()));
380
464
  _$runHydrationEvents();
381
- return _el$1;
465
+ return _el$19;
382
466
  }
383
- }), _el$24, _co$6);
384
- _$insert(_el$0, _$createComponent(Show, {
467
+ }), _el$34, _co$9);
468
+ _$insert(_el$18, _$createComponent(Show, {
385
469
  get when() {
386
470
  return (props.groups?.length ?? 0) > 0;
387
471
  },
388
472
  get children() {
389
- var _el$12 = _$getNextElement(_tmpl$5);
390
- _$insert(_el$12, _$createComponent(ChoiceGroups, {
473
+ var _el$22 = _$getNextElement(_tmpl$6);
474
+ _$insert(_el$22, _$createComponent(ChoiceGroups, {
391
475
  get choices() {
392
476
  return groupChoices();
393
477
  },
@@ -400,38 +484,38 @@ export function MultiSelectInput(props) {
400
484
  },
401
485
  controls: listboxId
402
486
  }));
403
- return _el$12;
487
+ return _el$22;
404
488
  }
405
- }), _el$26, _co$7);
406
- _$setAttribute(_el$13, "id", listboxId);
407
- _$insert(_el$13, _$createComponent(Show, {
489
+ }), _el$36, _co$0);
490
+ _$setAttribute(_el$23, "id", listboxId);
491
+ _$insert(_el$23, _$createComponent(Show, {
408
492
  get when() {
409
493
  return asyncOptions.error();
410
494
  },
411
495
  children: message => (() => {
412
- var _el$39 = _$getNextElement(_tmpl$10),
413
- _el$40 = _el$39.firstChild,
414
- _el$41 = _el$40.nextSibling;
415
- _$insert(_el$40, message);
416
- _$addEventListener(_el$41, "click", asyncOptions.retry, true);
417
- _$insert(_el$41, () => props.retryLabel ?? messages().retry);
496
+ var _el$49 = _$getNextElement(_tmpl$11),
497
+ _el$50 = _el$49.firstChild,
498
+ _el$51 = _el$50.nextSibling;
499
+ _$insert(_el$50, message);
500
+ _$addEventListener(_el$51, "click", asyncOptions.retry, true);
501
+ _$insert(_el$51, () => props.retryLabel ?? messages().retry);
418
502
  _$runHydrationEvents();
419
- return _el$39;
503
+ return _el$49;
420
504
  })()
421
- }), _el$18, _co$3);
422
- _$insert(_el$13, _$createComponent(Show, {
505
+ }), _el$28, _co$6);
506
+ _$insert(_el$23, _$createComponent(Show, {
423
507
  get when() {
424
508
  return _$memo(() => !!asyncOptions.loading())() && visibleOptions().length === 0;
425
509
  },
426
510
  get children() {
427
- var _el$14 = _$getNextElement(_tmpl$6),
428
- _el$15 = _el$14.firstChild,
429
- _el$16 = _el$15.nextSibling;
430
- _$insert(_el$16, () => props.loadingLabel ?? messages().loading);
431
- return _el$14;
511
+ var _el$24 = _$getNextElement(_tmpl$7),
512
+ _el$25 = _el$24.firstChild,
513
+ _el$26 = _el$25.nextSibling;
514
+ _$insert(_el$26, () => props.loadingLabel ?? messages().loading);
515
+ return _el$24;
432
516
  }
433
- }), _el$20, _co$4);
434
- _$insert(_el$13, _$createComponent(For, {
517
+ }), _el$30, _co$7);
518
+ _$insert(_el$23, _$createComponent(For, {
435
519
  get each() {
436
520
  return _$memo(() => !!asyncOptions.error())() ? [] : visibleOptions();
437
521
  },
@@ -441,24 +525,24 @@ export function MultiSelectInput(props) {
441
525
  return _$memo(() => !!!asyncOptions.loading())() && !asyncOptions.error();
442
526
  },
443
527
  get children() {
444
- var _el$42 = _$getNextElement(_tmpl$11);
445
- _$insert(_el$42, (() => {
528
+ var _el$52 = _$getNextElement(_tmpl$12);
529
+ _$insert(_el$52, (() => {
446
530
  var _c$ = _$memo(() => !!(isAsync() || query()));
447
531
  return () => _c$() ? props.noResultsLabel ?? messages().noResults : props.emptyLabel ?? messages().noOptions;
448
532
  })());
449
- return _el$42;
533
+ return _el$52;
450
534
  }
451
535
  });
452
536
  },
453
537
  children: (option, index) => (() => {
454
- var _el$43 = _$getNextElement(_tmpl$12),
455
- _el$44 = _el$43.firstChild,
456
- _el$46 = _el$44.nextSibling,
457
- [_el$47, _co$1] = _$getNextMarker(_el$46.nextSibling),
458
- _el$45 = _el$47.nextSibling;
459
- _el$43.$$click = () => toggleOption(option);
460
- _el$43.$$pointermove = () => !option.disabled && setFocusedIndex(index());
461
- _$insert(_el$43, _$createComponent(Show, {
538
+ var _el$53 = _$getNextElement(_tmpl$13),
539
+ _el$54 = _el$53.firstChild,
540
+ _el$56 = _el$54.nextSibling,
541
+ [_el$57, _co$12] = _$getNextMarker(_el$56.nextSibling),
542
+ _el$55 = _el$57.nextSibling;
543
+ _el$53.$$click = () => toggleOption(option);
544
+ _el$53.$$pointermove = () => !option.disabled && setFocusedIndex(index());
545
+ _$insert(_el$53, _$createComponent(Show, {
462
546
  get when() {
463
547
  return option.icon;
464
548
  },
@@ -468,60 +552,60 @@ export function MultiSelectInput(props) {
468
552
  return normalizeHexColor(option.color);
469
553
  },
470
554
  children: color => (() => {
471
- var _el$48 = _$getNextElement(_tmpl$13);
472
- _$effect(_$p => _$setStyleProperty(_el$48, "background", color()));
473
- return _el$48;
555
+ var _el$58 = _$getNextElement(_tmpl$14);
556
+ _$effect(_$p => _$setStyleProperty(_el$58, "background", color()));
557
+ return _el$58;
474
558
  })()
475
559
  });
476
560
  },
477
561
  children: icon => (() => {
478
- var _el$49 = _$getNextElement(_tmpl$2);
562
+ var _el$59 = _$getNextElement(_tmpl$3);
479
563
  _$effect(_p$ => {
480
- var _v$12 = icon(),
481
- _v$13 = iconColor(option.color);
482
- _v$12 !== _p$.e && _$className(_el$49, _p$.e = _v$12);
483
- _p$.t = _$style(_el$49, _v$13, _p$.t);
564
+ var _v$16 = icon(),
565
+ _v$17 = iconColor(option.color);
566
+ _v$16 !== _p$.e && _$className(_el$59, _p$.e = _v$16);
567
+ _p$.t = _$style(_el$59, _v$17, _p$.t);
484
568
  return _p$;
485
569
  }, {
486
570
  e: undefined,
487
571
  t: undefined
488
572
  });
489
- return _el$49;
573
+ return _el$59;
490
574
  })()
491
- }), _el$47, _co$1);
492
- _$insert(_el$45, _$createComponent(Show, {
575
+ }), _el$57, _co$12);
576
+ _$insert(_el$55, _$createComponent(Show, {
493
577
  get when() {
494
578
  return props.renderOption;
495
579
  },
496
580
  get fallback() {
497
581
  return [(() => {
498
- var _el$50 = _$getNextElement(_tmpl$14);
499
- _$insert(_el$50, () => option.label);
500
- return _el$50;
582
+ var _el$60 = _$getNextElement(_tmpl$15);
583
+ _$insert(_el$60, () => option.label);
584
+ return _el$60;
501
585
  })(), _$createComponent(Show, {
502
586
  get when() {
503
587
  return option.description;
504
588
  },
505
589
  children: description => (() => {
506
- var _el$51 = _$getNextElement(_tmpl$15);
507
- _$insert(_el$51, description);
508
- return _el$51;
590
+ var _el$61 = _$getNextElement(_tmpl$16);
591
+ _$insert(_el$61, description);
592
+ return _el$61;
509
593
  })()
510
594
  })];
511
595
  },
512
596
  children: render => render()(option)
513
597
  }));
514
598
  _$effect(_p$ => {
515
- var _v$9 = `${listboxId}-${index()}`,
516
- _v$0 = option.label,
517
- _v$1 = isSelected(option.value),
518
- _v$10 = index() === focusedIndex() ? "true" : undefined,
519
- _v$11 = option.disabled;
520
- _v$9 !== _p$.e && _$setAttribute(_el$43, "id", _p$.e = _v$9);
521
- _v$0 !== _p$.t && _$setAttribute(_el$43, "aria-label", _p$.t = _v$0);
522
- _v$1 !== _p$.a && _$setAttribute(_el$43, "aria-selected", _p$.a = _v$1);
523
- _v$10 !== _p$.o && _$setAttribute(_el$43, "data-focused", _p$.o = _v$10);
524
- _v$11 !== _p$.i && _$setProperty(_el$43, "disabled", _p$.i = _v$11);
599
+ var _v$11 = `${listboxId}-${index()}`,
600
+ _v$12 = option.label,
601
+ _v$13 = isSelected(option.value),
602
+ _v$14 = index() === focusedIndex() ? "true" : undefined,
603
+ _v$15 = option.disabled;
604
+ _v$11 !== _p$.e && _$setAttribute(_el$53, "id", _p$.e = _v$11);
605
+ _v$12 !== _p$.t && _$setAttribute(_el$53, "aria-label", _p$.t = _v$12);
606
+ _v$13 !== _p$.a && _$setAttribute(_el$53, "aria-selected", _p$.a = _v$13);
607
+ _v$14 !== _p$.o && _$setAttribute(_el$53, "data-focused", _p$.o = _v$14);
608
+ _v$15 !== _p$.i && _$setProperty(_el$53, "disabled", _p$.i = _v$15);
525
609
  return _p$;
526
610
  }, {
527
611
  e: undefined,
@@ -531,25 +615,25 @@ export function MultiSelectInput(props) {
531
615
  i: undefined
532
616
  });
533
617
  _$runHydrationEvents();
534
- return _el$43;
618
+ return _el$53;
535
619
  })()
536
- }), _el$22, _co$5);
620
+ }), _el$32, _co$8);
537
621
  _$insert(_el$, _$createComponent(Show, {
538
622
  get when() {
539
623
  return props.name;
540
624
  },
541
625
  children: name => (() => {
542
- var _el$52 = _$getNextElement(_tmpl$16);
543
- _$effect(() => _$setAttribute(_el$52, "name", name()));
544
- _$effect(() => _$setProperty(_el$52, "value", values().join(",")));
545
- return _el$52;
626
+ var _el$62 = _$getNextElement(_tmpl$17);
627
+ _$effect(() => _$setAttribute(_el$62, "name", name()));
628
+ _$effect(() => _$setProperty(_el$62, "value", values().join(",")));
629
+ return _el$62;
546
630
  })()
547
- }), _el$30, _co$9);
631
+ }), _el$40, _co$10);
548
632
  _$effect(_p$ => {
549
- var _v$4 = error() ? "true" : undefined,
550
- _v$5 = typeof props.label === "string" ? props.label : props["aria-label"] ?? messages().options;
551
- _v$4 !== _p$.e && _$setAttribute(_el$, "data-invalid", _p$.e = _v$4);
552
- _v$5 !== _p$.t && _$setAttribute(_el$0, "aria-label", _p$.t = _v$5);
633
+ var _v$6 = error() ? "true" : undefined,
634
+ _v$7 = typeof props.label === "string" ? props.label : props["aria-label"] ?? messages().options;
635
+ _v$6 !== _p$.e && _$setAttribute(_el$, "data-invalid", _p$.e = _v$6);
636
+ _v$7 !== _p$.t && _$setAttribute(_el$18, "aria-label", _p$.t = _v$7);
553
637
  return _p$;
554
638
  }, {
555
639
  e: undefined,