@k2b/ui 0.11.0 → 0.13.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 (139) hide show
  1. package/README.md +1 -1
  2. package/dist/browser/content/FileView.js +203 -136
  3. package/dist/browser/content/FileView.js.map +1 -1
  4. package/dist/browser/content/PdfPreview.js +5 -2
  5. package/dist/browser/content/PdfPreview.js.map +1 -1
  6. package/dist/browser/content/markdown-title.js +52 -0
  7. package/dist/browser/content/markdown-title.js.map +1 -0
  8. package/dist/browser/feedback/InstallGuide.js +267 -0
  9. package/dist/browser/feedback/InstallGuide.js.map +1 -0
  10. package/dist/browser/feedback/announce.js +50 -0
  11. package/dist/browser/feedback/announce.js.map +1 -0
  12. package/dist/browser/feedback/dialog-core.js +82 -1
  13. package/dist/browser/feedback/dialog-core.js.map +1 -1
  14. package/dist/browser/feedback/index.js +4 -0
  15. package/dist/browser/feedback/index.js.map +1 -1
  16. package/dist/browser/feedback/install.js +99 -0
  17. package/dist/browser/feedback/install.js.map +1 -0
  18. package/dist/browser/feedback/prompts.js +29 -20
  19. package/dist/browser/feedback/prompts.js.map +1 -1
  20. package/dist/browser/feedback/theme-color.js +15 -0
  21. package/dist/browser/feedback/theme-color.js.map +1 -0
  22. package/dist/browser/feedback/toast.js +329 -122
  23. package/dist/browser/feedback/toast.js.map +1 -1
  24. package/dist/browser/inputs/DatePicker.js +263 -222
  25. package/dist/browser/inputs/DatePicker.js.map +1 -1
  26. package/dist/browser/inputs/MultiSelectInput.js +139 -105
  27. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  28. package/dist/browser/inputs/NumberInput.js +209 -122
  29. package/dist/browser/inputs/NumberInput.js.map +1 -1
  30. package/dist/browser/inputs/QrScanner.js +164 -0
  31. package/dist/browser/inputs/QrScanner.js.map +1 -0
  32. package/dist/browser/inputs/Select.js +184 -92
  33. package/dist/browser/inputs/Select.js.map +1 -1
  34. package/dist/browser/inputs/index.js +1 -0
  35. package/dist/browser/inputs/index.js.map +1 -1
  36. package/dist/browser/intl/messages.js +90 -2
  37. package/dist/browser/intl/messages.js.map +1 -1
  38. package/dist/browser/layout/DetailPanel.js +2 -1
  39. package/dist/browser/layout/DetailPanel.js.map +1 -1
  40. package/dist/browser/layout/Discussion.js +2 -1
  41. package/dist/browser/layout/Discussion.js.map +1 -1
  42. package/dist/browser/layout/MobileShell.js +242 -0
  43. package/dist/browser/layout/MobileShell.js.map +1 -0
  44. package/dist/browser/layout/Navigation.js +1 -0
  45. package/dist/browser/layout/Navigation.js.map +1 -1
  46. package/dist/browser/layout/PanelDialog.js +1 -0
  47. package/dist/browser/layout/PanelDialog.js.map +1 -1
  48. package/dist/browser/layout/Settings.js +2 -2
  49. package/dist/browser/layout/Settings.js.map +1 -1
  50. package/dist/browser/layout/TabBar.js +65 -0
  51. package/dist/browser/layout/TabBar.js.map +1 -0
  52. package/dist/browser/layout/index.js +2 -0
  53. package/dist/browser/layout/index.js.map +1 -1
  54. package/dist/browser/surfaces/NoticeCard.js +55 -60
  55. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  56. package/dist/browser/surfaces/index.js +1 -1
  57. package/dist/browser/surfaces/index.js.map +1 -1
  58. package/dist/ssr/content/FileView.js +141 -81
  59. package/dist/ssr/content/FileView.js.map +1 -1
  60. package/dist/ssr/content/PdfPreview.js +4 -2
  61. package/dist/ssr/content/PdfPreview.js.map +1 -1
  62. package/dist/ssr/content/markdown-title.js +52 -0
  63. package/dist/ssr/content/markdown-title.js.map +1 -0
  64. package/dist/ssr/feedback/InstallGuide.js +201 -0
  65. package/dist/ssr/feedback/InstallGuide.js.map +1 -0
  66. package/dist/ssr/feedback/announce.js +50 -0
  67. package/dist/ssr/feedback/announce.js.map +1 -0
  68. package/dist/ssr/feedback/dialog-core.js +82 -1
  69. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  70. package/dist/ssr/feedback/index.js +4 -0
  71. package/dist/ssr/feedback/index.js.map +1 -1
  72. package/dist/ssr/feedback/install.js +99 -0
  73. package/dist/ssr/feedback/install.js.map +1 -0
  74. package/dist/ssr/feedback/prompts.js +12 -2
  75. package/dist/ssr/feedback/prompts.js.map +1 -1
  76. package/dist/ssr/feedback/theme-color.js +15 -0
  77. package/dist/ssr/feedback/theme-color.js.map +1 -0
  78. package/dist/ssr/feedback/toast.js +329 -122
  79. package/dist/ssr/feedback/toast.js.map +1 -1
  80. package/dist/ssr/inputs/DatePicker.js +78 -52
  81. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  82. package/dist/ssr/inputs/MultiSelectInput.js +52 -32
  83. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  84. package/dist/ssr/inputs/NumberInput.js +93 -40
  85. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  86. package/dist/ssr/inputs/QrScanner.js +128 -0
  87. package/dist/ssr/inputs/QrScanner.js.map +1 -0
  88. package/dist/ssr/inputs/Select.js +108 -29
  89. package/dist/ssr/inputs/Select.js.map +1 -1
  90. package/dist/ssr/inputs/index.js +1 -0
  91. package/dist/ssr/inputs/index.js.map +1 -1
  92. package/dist/ssr/intl/messages.js +90 -2
  93. package/dist/ssr/intl/messages.js.map +1 -1
  94. package/dist/ssr/layout/DetailPanel.js +2 -1
  95. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  96. package/dist/ssr/layout/Discussion.js +2 -1
  97. package/dist/ssr/layout/Discussion.js.map +1 -1
  98. package/dist/ssr/layout/MobileShell.js +211 -0
  99. package/dist/ssr/layout/MobileShell.js.map +1 -0
  100. package/dist/ssr/layout/Navigation.js +1 -0
  101. package/dist/ssr/layout/Navigation.js.map +1 -1
  102. package/dist/ssr/layout/PanelDialog.js +1 -0
  103. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  104. package/dist/ssr/layout/Settings.js +2 -2
  105. package/dist/ssr/layout/Settings.js.map +1 -1
  106. package/dist/ssr/layout/TabBar.js +24 -0
  107. package/dist/ssr/layout/TabBar.js.map +1 -0
  108. package/dist/ssr/layout/index.js +2 -0
  109. package/dist/ssr/layout/index.js.map +1 -1
  110. package/dist/ssr/surfaces/NoticeCard.js +21 -30
  111. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  112. package/dist/ssr/surfaces/index.js +1 -1
  113. package/dist/ssr/surfaces/index.js.map +1 -1
  114. package/dist/styles.css +1 -1
  115. package/dist/tabler.css +1 -1
  116. package/dist/types/content/FileView.d.ts +11 -1
  117. package/dist/types/content/markdown-title.d.ts +9 -0
  118. package/dist/types/feedback/InstallGuide.d.ts +26 -0
  119. package/dist/types/feedback/announce.d.ts +19 -0
  120. package/dist/types/feedback/dialog-core.d.ts +5 -0
  121. package/dist/types/feedback/index.d.ts +8 -1
  122. package/dist/types/feedback/install.d.ts +32 -0
  123. package/dist/types/feedback/prompts.d.ts +2 -0
  124. package/dist/types/feedback/theme-color.d.ts +6 -0
  125. package/dist/types/feedback/toast.d.ts +7 -0
  126. package/dist/types/inputs/DatePicker.d.ts +11 -2
  127. package/dist/types/inputs/MultiSelectInput.d.ts +5 -1
  128. package/dist/types/inputs/NumberInput.d.ts +14 -0
  129. package/dist/types/inputs/QrScanner.d.ts +20 -0
  130. package/dist/types/inputs/Select.d.ts +10 -0
  131. package/dist/types/inputs/index.d.ts +3 -1
  132. package/dist/types/intl/messages.d.ts +44 -0
  133. package/dist/types/layout/MobileShell.d.ts +40 -0
  134. package/dist/types/layout/Settings.d.ts +2 -2
  135. package/dist/types/layout/TabBar.d.ts +23 -0
  136. package/dist/types/layout/index.d.ts +4 -0
  137. package/dist/types/surfaces/NoticeCard.d.ts +4 -4
  138. package/dist/types/surfaces/index.d.ts +1 -1
  139. package/package.json +3 -2
@@ -25,16 +25,17 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-multi-select-trigger__more
25
25
  _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-choice-status><i class="ti ti-loader-2 k2b-spin"aria-hidden=true></i><span>`),
26
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
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>`);
28
+ _tmpl$0 = /*#__PURE__*/_$template(`<button type=button tabindex=-1><i class="ti ti-x"aria-hidden=true>`),
29
+ _tmpl$1 = /*#__PURE__*/_$template(`<span class=k2b-choice-pill><!$><!/><!$><!/>`),
30
+ _tmpl$10 = /*#__PURE__*/_$template(`<span>`),
31
+ _tmpl$11 = /*#__PURE__*/_$template(`<span class=k2b-choice-pill__content>`),
32
+ _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-choice-status data-tone=danger><span></span><button type=button>`),
33
+ _tmpl$13 = /*#__PURE__*/_$template(`<div class=k2b-choice-status>`),
34
+ _tmpl$14 = /*#__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>`),
35
+ _tmpl$15 = /*#__PURE__*/_$template(`<span class=k2b-choice-dot aria-hidden=true>`),
36
+ _tmpl$16 = /*#__PURE__*/_$template(`<strong>`),
37
+ _tmpl$17 = /*#__PURE__*/_$template(`<small>`),
38
+ _tmpl$18 = /*#__PURE__*/_$template(`<input type=hidden>`);
38
39
  import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
39
40
  import { colorTintStyle, normalizeHexColor } from "../internal/color";
40
41
  import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
@@ -98,7 +99,8 @@ export function MultiSelectInput(props) {
98
99
  value,
99
100
  label: value
100
101
  }));
101
- const hasClearAction = () => Boolean(props.clearable && selected().length > 0 && !props.disabled);
102
+ const plain = () => props.appearance === "plain";
103
+ const hasClearAction = () => Boolean(props.clearable && selected().length > 0 && !props.disabled && !plain());
102
104
  const selectedValues = createMemo(() => new Set(values()));
103
105
  const popover = createChoicePopover(() => Boolean(props.disabled));
104
106
  const focusedOption = () => visibleOptions()[focusedIndex()];
@@ -115,6 +117,12 @@ export function MultiSelectInput(props) {
115
117
  const fitValues = () => {
116
118
  const values = valuesRef;
117
119
  if (!values?.isConnected) return;
120
+ // Plain pills wrap, so every one stays visible.
121
+ if (plain()) {
122
+ values.style.width = "";
123
+ setVisibleCount(Number.POSITIVE_INFINITY);
124
+ return;
125
+ }
118
126
  // Measuring releases a truncated first pill to its natural width; the
119
127
  // browser paints only the final state.
120
128
  values.dataset.measuring = "true";
@@ -286,11 +294,20 @@ export function MultiSelectInput(props) {
286
294
  return selected().length > 0;
287
295
  },
288
296
  get fallback() {
289
- return (() => {
297
+ return [_$createComponent(Show, {
298
+ get when() {
299
+ return props.placeholderIcon;
300
+ },
301
+ children: icon => (() => {
302
+ var _el$42 = _$getNextElement(_tmpl$3);
303
+ _$effect(() => _$className(_el$42, `${icon()} k2b-choice-trigger__placeholder-icon`));
304
+ return _el$42;
305
+ })()
306
+ }), (() => {
290
307
  var _el$41 = _$getNextElement(_tmpl$9);
291
308
  _$insert(_el$41, () => props.placeholder ?? messages().select);
292
309
  return _el$41;
293
- })();
310
+ })()];
294
311
  },
295
312
  get children() {
296
313
  var _el$3 = _$getNextElement(_tmpl$2),
@@ -305,11 +322,12 @@ export function MultiSelectInput(props) {
305
322
  return selected();
306
323
  },
307
324
  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, {
325
+ var _el$43 = _$getNextElement(_tmpl$1),
326
+ _el$45 = _el$43.firstChild,
327
+ [_el$46, _co$11] = _$getNextMarker(_el$45.nextSibling),
328
+ _el$47 = _el$46.nextSibling,
329
+ [_el$48, _co$12] = _$getNextMarker(_el$47.nextSibling);
330
+ _$insert(_el$43, _$createComponent(Show, {
313
331
  get when() {
314
332
  return props.renderValue;
315
333
  },
@@ -319,54 +337,67 @@ export function MultiSelectInput(props) {
319
337
  return option.icon;
320
338
  },
321
339
  children: icon => (() => {
322
- var _el$47 = _$getNextElement(_tmpl$3);
323
- _$effect(() => _$className(_el$47, icon()));
324
- return _el$47;
340
+ var _el$50 = _$getNextElement(_tmpl$3);
341
+ _$effect(() => _$className(_el$50, icon()));
342
+ return _el$50;
325
343
  })()
326
344
  }), (() => {
327
- var _el$46 = _$getNextElement(_tmpl$1);
328
- _$insert(_el$46, () => option.label);
329
- return _el$46;
345
+ var _el$49 = _$getNextElement(_tmpl$10);
346
+ _$insert(_el$49, () => option.label);
347
+ return _el$49;
330
348
  })()];
331
349
  },
332
350
  children: render => (() => {
333
- var _el$48 = _$getNextElement(_tmpl$10);
334
- _$insert(_el$48, () => render()(option));
335
- return _el$48;
351
+ var _el$51 = _$getNextElement(_tmpl$11);
352
+ _$insert(_el$51, () => render()(option));
353
+ return _el$51;
336
354
  })()
337
- }), _el$45, _co$11);
338
- _el$43.$$click = event => {
339
- event.stopPropagation();
340
- remove(option.value);
341
- };
355
+ }), _el$46, _co$11);
356
+ _$insert(_el$43, _$createComponent(Show, {
357
+ get when() {
358
+ return !plain();
359
+ },
360
+ get children() {
361
+ var _el$44 = _$getNextElement(_tmpl$0);
362
+ _el$44.$$click = event => {
363
+ event.stopPropagation();
364
+ remove(option.value);
365
+ };
366
+ _$effect(_p$ => {
367
+ var _v$9 = messages().removeNamed({
368
+ name: option.label
369
+ }),
370
+ _v$0 = props.disabled;
371
+ _v$9 !== _p$.e && _$setAttribute(_el$44, "aria-label", _p$.e = _v$9);
372
+ _v$0 !== _p$.t && _$setProperty(_el$44, "disabled", _p$.t = _v$0);
373
+ return _p$;
374
+ }, {
375
+ e: undefined,
376
+ t: undefined
377
+ });
378
+ _$runHydrationEvents();
379
+ return _el$44;
380
+ }
381
+ }), _el$48, _co$12);
342
382
  _$effect(_p$ => {
343
- var _v$8 = colorTintStyle(option.color),
344
- _v$9 = option.label,
345
- _v$0 = index() >= visibleCount() ? "true" : undefined,
346
- _v$1 = messages().removeNamed({
347
- name: option.label
348
- }),
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);
383
+ var _v$1 = colorTintStyle(option.color),
384
+ _v$10 = option.label,
385
+ _v$11 = index() >= visibleCount() ? "true" : undefined;
386
+ _p$.e = _$style(_el$43, _v$1, _p$.e);
387
+ _v$10 !== _p$.t && _$setAttribute(_el$43, "title", _p$.t = _v$10);
388
+ _v$11 !== _p$.a && _$setAttribute(_el$43, "data-hidden", _p$.a = _v$11);
355
389
  return _p$;
356
390
  }, {
357
391
  e: undefined,
358
392
  t: undefined,
359
- a: undefined,
360
- o: undefined,
361
- i: undefined
393
+ a: undefined
362
394
  });
363
- _$runHydrationEvents();
364
- return _el$42;
395
+ return _el$43;
365
396
  })()
366
397
  }), _el$1, _co$2);
367
398
  _$insert(_el$3, _$createComponent(Show, {
368
399
  get when() {
369
- return selected().length > 1;
400
+ return _$memo(() => selected().length > 1)() && !plain();
370
401
  },
371
402
  get children() {
372
403
  var _el$4 = _$getNextElement(_tmpl$),
@@ -493,14 +524,14 @@ export function MultiSelectInput(props) {
493
524
  return asyncOptions.error();
494
525
  },
495
526
  children: message => (() => {
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);
527
+ var _el$52 = _$getNextElement(_tmpl$12),
528
+ _el$53 = _el$52.firstChild,
529
+ _el$54 = _el$53.nextSibling;
530
+ _$insert(_el$53, message);
531
+ _$addEventListener(_el$54, "click", asyncOptions.retry, true);
532
+ _$insert(_el$54, () => props.retryLabel ?? messages().retry);
502
533
  _$runHydrationEvents();
503
- return _el$49;
534
+ return _el$52;
504
535
  })()
505
536
  }), _el$28, _co$6);
506
537
  _$insert(_el$23, _$createComponent(Show, {
@@ -525,24 +556,24 @@ export function MultiSelectInput(props) {
525
556
  return _$memo(() => !!!asyncOptions.loading())() && !asyncOptions.error();
526
557
  },
527
558
  get children() {
528
- var _el$52 = _$getNextElement(_tmpl$12);
529
- _$insert(_el$52, (() => {
559
+ var _el$55 = _$getNextElement(_tmpl$13);
560
+ _$insert(_el$55, (() => {
530
561
  var _c$ = _$memo(() => !!(isAsync() || query()));
531
562
  return () => _c$() ? props.noResultsLabel ?? messages().noResults : props.emptyLabel ?? messages().noOptions;
532
563
  })());
533
- return _el$52;
564
+ return _el$55;
534
565
  }
535
566
  });
536
567
  },
537
568
  children: (option, index) => (() => {
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, {
569
+ var _el$56 = _$getNextElement(_tmpl$14),
570
+ _el$57 = _el$56.firstChild,
571
+ _el$59 = _el$57.nextSibling,
572
+ [_el$60, _co$13] = _$getNextMarker(_el$59.nextSibling),
573
+ _el$58 = _el$60.nextSibling;
574
+ _el$56.$$click = () => toggleOption(option);
575
+ _el$56.$$pointermove = () => !option.disabled && setFocusedIndex(index());
576
+ _$insert(_el$56, _$createComponent(Show, {
546
577
  get when() {
547
578
  return option.icon;
548
579
  },
@@ -552,60 +583,60 @@ export function MultiSelectInput(props) {
552
583
  return normalizeHexColor(option.color);
553
584
  },
554
585
  children: color => (() => {
555
- var _el$58 = _$getNextElement(_tmpl$14);
556
- _$effect(_$p => _$setStyleProperty(_el$58, "background", color()));
557
- return _el$58;
586
+ var _el$61 = _$getNextElement(_tmpl$15);
587
+ _$effect(_$p => _$setStyleProperty(_el$61, "background", color()));
588
+ return _el$61;
558
589
  })()
559
590
  });
560
591
  },
561
592
  children: icon => (() => {
562
- var _el$59 = _$getNextElement(_tmpl$3);
593
+ var _el$62 = _$getNextElement(_tmpl$3);
563
594
  _$effect(_p$ => {
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);
595
+ var _v$17 = icon(),
596
+ _v$18 = iconColor(option.color);
597
+ _v$17 !== _p$.e && _$className(_el$62, _p$.e = _v$17);
598
+ _p$.t = _$style(_el$62, _v$18, _p$.t);
568
599
  return _p$;
569
600
  }, {
570
601
  e: undefined,
571
602
  t: undefined
572
603
  });
573
- return _el$59;
604
+ return _el$62;
574
605
  })()
575
- }), _el$57, _co$12);
576
- _$insert(_el$55, _$createComponent(Show, {
606
+ }), _el$60, _co$13);
607
+ _$insert(_el$58, _$createComponent(Show, {
577
608
  get when() {
578
609
  return props.renderOption;
579
610
  },
580
611
  get fallback() {
581
612
  return [(() => {
582
- var _el$60 = _$getNextElement(_tmpl$15);
583
- _$insert(_el$60, () => option.label);
584
- return _el$60;
613
+ var _el$63 = _$getNextElement(_tmpl$16);
614
+ _$insert(_el$63, () => option.label);
615
+ return _el$63;
585
616
  })(), _$createComponent(Show, {
586
617
  get when() {
587
618
  return option.description;
588
619
  },
589
620
  children: description => (() => {
590
- var _el$61 = _$getNextElement(_tmpl$16);
591
- _$insert(_el$61, description);
592
- return _el$61;
621
+ var _el$64 = _$getNextElement(_tmpl$17);
622
+ _$insert(_el$64, description);
623
+ return _el$64;
593
624
  })()
594
625
  })];
595
626
  },
596
627
  children: render => render()(option)
597
628
  }));
598
629
  _$effect(_p$ => {
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);
630
+ var _v$12 = `${listboxId}-${index()}`,
631
+ _v$13 = option.label,
632
+ _v$14 = isSelected(option.value),
633
+ _v$15 = index() === focusedIndex() ? "true" : undefined,
634
+ _v$16 = option.disabled;
635
+ _v$12 !== _p$.e && _$setAttribute(_el$56, "id", _p$.e = _v$12);
636
+ _v$13 !== _p$.t && _$setAttribute(_el$56, "aria-label", _p$.t = _v$13);
637
+ _v$14 !== _p$.a && _$setAttribute(_el$56, "aria-selected", _p$.a = _v$14);
638
+ _v$15 !== _p$.o && _$setAttribute(_el$56, "data-focused", _p$.o = _v$15);
639
+ _v$16 !== _p$.i && _$setProperty(_el$56, "disabled", _p$.i = _v$16);
609
640
  return _p$;
610
641
  }, {
611
642
  e: undefined,
@@ -615,7 +646,7 @@ export function MultiSelectInput(props) {
615
646
  i: undefined
616
647
  });
617
648
  _$runHydrationEvents();
618
- return _el$53;
649
+ return _el$56;
619
650
  })()
620
651
  }), _el$32, _co$8);
621
652
  _$insert(_el$, _$createComponent(Show, {
@@ -623,21 +654,24 @@ export function MultiSelectInput(props) {
623
654
  return props.name;
624
655
  },
625
656
  children: name => (() => {
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;
657
+ var _el$65 = _$getNextElement(_tmpl$18);
658
+ _$effect(() => _$setAttribute(_el$65, "name", name()));
659
+ _$effect(() => _$setProperty(_el$65, "value", values().join(",")));
660
+ return _el$65;
630
661
  })()
631
662
  }), _el$40, _co$10);
632
663
  _$effect(_p$ => {
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);
664
+ var _v$6 = props.appearance ?? "field",
665
+ _v$7 = error() ? "true" : undefined,
666
+ _v$8 = typeof props.label === "string" ? props.label : props["aria-label"] ?? messages().options;
667
+ _v$6 !== _p$.e && _$setAttribute(_el$, "data-appearance", _p$.e = _v$6);
668
+ _v$7 !== _p$.t && _$setAttribute(_el$, "data-invalid", _p$.t = _v$7);
669
+ _v$8 !== _p$.a && _$setAttribute(_el$18, "aria-label", _p$.a = _v$8);
637
670
  return _p$;
638
671
  }, {
639
672
  e: undefined,
640
- t: undefined
673
+ t: undefined,
674
+ a: undefined
641
675
  });
642
676
  _$runHydrationEvents();
643
677
  return _el$;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["inputs/MultiSelectInput.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { colorTintStyle, normalizeHexColor } from \"../internal/color\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport {\n type ChoiceOption,\n createChoiceLoader,\n createChoicePopover,\n filterChoiceOptions,\n fitChoicePills,\n nextEnabledChoiceIndex,\n} from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport type { SelectGroup } from \"./Select\";\n\nexport type MultiSelectOption =\n | string\n | { id: string; label?: string; description?: string; icon?: string; color?: string; groups?: readonly string[] }\n | ChoiceOption<string>;\ntype NormalizedOption = ChoiceOption<string>;\nexport type MultiSelectFetchDataFn = (query: string, signal: AbortSignal, group: string | null) => Promise<MultiSelectOption[]>;\n\nexport type MultiSelectInputProps = ValueFieldProps<string[]> & {\n options?: MultiSelectOption[];\n fetchData?: MultiSelectFetchDataFn;\n selectedOptions?: () => MultiSelectOption[];\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n fetchDebounceMs?: number;\n debounceMs?: number;\n loadOptions?: (query: string, signal: AbortSignal, group: string | null) => Promise<readonly ChoiceOption<string>[]>;\n groups?: readonly SelectGroup[];\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n searchable?: boolean;\n clearable?: boolean;\n name?: string;\n renderOption?: (option: ChoiceOption<string>) => JSX.Element;\n renderValue?: (option: ChoiceOption<string>) => JSX.Element;\n searchPlaceholder?: string;\n loadingLabel?: string;\n noResultsLabel?: string;\n emptyLabel?: string;\n retryLabel?: string;\n clearLabel?: string;\n};\n\n/** Cloud tints the option icon with the option color instead of adding a dot. */\nconst iconColor = (color: string | undefined): JSX.CSSProperties | undefined => {\n const normalized = normalizeHexColor(color);\n return normalized ? { color: normalized } : undefined;\n};\n\nconst normalize = (option: MultiSelectOption): NormalizedOption =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : \"value\" in option\n ? option\n : { ...option, value: option.id, label: option.label || option.id };\n\nexport function MultiSelectInput(props: MultiSelectInputProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [query, setQuery] = createSignal(\"\");\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [cache, setCache] = createSignal<Record<string, NormalizedOption>>({});\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n let searchRef: HTMLInputElement | undefined;\n\n const values = () => resolveMaybeAccessor(props.value) ?? [];\n const error = () => resolveMaybeAccessor(props.error);\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n const asyncOptions = createChoiceLoader(\n () =>\n props.fetchData\n ? async (query, signal) => (await props.fetchData!(query, signal, activeGroup())).map(normalize)\n : props.loadOptions\n ? (query, signal) => props.loadOptions!(query, signal, activeGroup())\n : undefined,\n () => props.fetchDebounceMs ?? props.debounceMs ?? 200,\n );\n const isAsync = () => Boolean(props.fetchData || props.loadOptions);\n const sourceOptions = createMemo(() => (isAsync() ? asyncOptions.options() : (props.options ?? []).map(normalize)));\n const groupedOptions = createMemo(() => {\n const group = activeGroup();\n return !isAsync() && group ? sourceOptions().filter((option) => option.groups?.includes(group)) : sourceOptions();\n });\n // Cloud's multi-select always renders its search field, and filters a static\n // option list client-side while a remote loader filters server-side.\n const searchable = () => isAsync() || (props.searchable ?? true);\n const visibleOptions = createMemo(() =>\n isAsync() ? groupedOptions() : filterChoiceOptions(groupedOptions(), searchable() ? query() : \"\"),\n );\n const optionByValue = createMemo(() => {\n const options = new Map<string, NormalizedOption>();\n for (const option of Object.values(cache())) options.set(option.value, option);\n for (const option of (props.selectedOptions?.() ?? []).map(normalize)) options.set(option.value, option);\n for (const option of sourceOptions()) options.set(option.value, option);\n return options;\n });\n const selected = createMemo(() => values().map((value) => optionByValue().get(value) ?? ({ value, label: value } as NormalizedOption)));\n const hasClearAction = () => Boolean(props.clearable && selected().length > 0 && !props.disabled);\n const selectedValues = createMemo(() => new Set(values()));\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const focusedOption = () => visibleOptions()[focusedIndex()];\n\n // Pills that do not fit the trigger collapse into a \"+N\" summary. Until the\n // browser measures them (server HTML, hidden containers) every pill stays.\n let valuesRef: HTMLSpanElement | undefined;\n let moreRef: HTMLSpanElement | undefined;\n const [visibleCount, setVisibleCount] = createSignal(Number.POSITIVE_INFINITY);\n const hiddenOptions = createMemo(() => selected().slice(visibleCount()));\n // While every pill fits, the invisible summary carries the largest count it\n // could show, so measuring it reserves enough room for the real one.\n const moreCount = () => hiddenOptions().length || selected().length - 1;\n const fitValues = () => {\n const values = valuesRef;\n if (!values?.isConnected) return;\n // Measuring releases a truncated first pill to its natural width; the\n // browser paints only the final state.\n values.dataset.measuring = \"true\";\n const pills = Array.from(\n values.querySelectorAll<HTMLElement>(\":scope > .k2b-choice-pill\"),\n (pill) => pill.getBoundingClientRect().width,\n );\n const fit = fitChoicePills(\n values.getBoundingClientRect().width,\n pills,\n Number.parseFloat(getComputedStyle(values).columnGap) || 0,\n moreRef?.isConnected ? moreRef.getBoundingClientRect().width : 0,\n );\n delete values.dataset.measuring;\n // Hidden pills leave the flow. While any are hidden the strip keeps the\n // whole row as its preferred width, so a container sized by its content\n // does not shrink with the collapse and grows back once it has room. The\n // strip still flexes to the trigger's width.\n values.style.width = fit.visible < pills.length ? `${fit.rowWidth}px` : \"\";\n setVisibleCount(fit.visible);\n };\n const resizeObserver = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(() => fitValues());\n onCleanup(() => resizeObserver?.disconnect());\n createEffect(() => {\n selected();\n fitValues();\n });\n onMount(() => {\n if (\"fonts\" in document) void document.fonts.ready.then(fitValues);\n });\n\n const emit = (next: readonly string[]) => {\n const unique = [...new Set(next)];\n commitFieldValue(props, unique);\n };\n const isSelected = (value: string) => selectedValues().has(value);\n const focusFirst = () => setFocusedIndex(nextEnabledChoiceIndex(visibleOptions(), -1, 1));\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n focusFirst();\n if (isAsync()) asyncOptions.load(query(), true);\n };\n const open = () => {\n if (props.disabled) return;\n setQuery(\"\");\n if (isAsync()) asyncOptions.load(\"\", true);\n focusFirst();\n popover.show();\n if (searchable()) queueMicrotask(() => searchRef?.focus());\n };\n const close = (restoreFocus = false) => {\n asyncOptions.cancel();\n setQuery(\"\");\n setFocusedIndex(-1);\n popover.hide(restoreFocus);\n };\n const toggleOption = (option: NormalizedOption) => {\n if (option.disabled) return;\n setCache({ ...cache(), [option.value]: option });\n emit(isSelected(option.value) ? values().filter((value) => value !== option.value) : [...values(), option.value]);\n };\n const remove = (value: string) => emit(values().filter((item) => item !== value));\n const move = (direction: 1 | -1) => {\n setFocusedIndex(nextEnabledChoiceIndex(visibleOptions(), focusedIndex(), direction));\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n const inToolbar = Boolean((event.target as HTMLElement | null)?.closest?.(\".k2b-choice-toolbar\"));\n if (inToolbar && event.key !== \"Escape\" && event.key !== \"Tab\") return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else move(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if ((event.key === \"Enter\" || event.key === \" \") && !popover.open()) {\n event.preventDefault();\n open();\n return;\n }\n if (event.key === \"Enter\" && popover.open()) {\n const option = focusedOption();\n if (option) {\n event.preventDefault();\n toggleOption(option);\n }\n return;\n }\n if (event.key === \"Backspace\" && popover.open() && !query() && values().length > 0) {\n event.preventDefault();\n const last = values().at(-1);\n if (last) remove(last);\n return;\n }\n if (event.key === \"Escape\" && popover.open()) {\n event.preventDefault();\n close(true);\n } else if (event.key === \"Tab\" && popover.open()) {\n close();\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n labelFor={false}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-choice-control\" data-invalid={error() ? \"true\" : undefined}>\n <div\n ref={(element) => {\n popover.setTrigger(element);\n resizeObserver?.observe(element);\n }}\n id={meta.controlId}\n class=\"k2b-multi-select-trigger\"\n role=\"combobox\"\n tabIndex={props.disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n {...fieldControlAria(meta, props)}\n aria-disabled={props.disabled}\n data-disabled={props.disabled ? \"true\" : undefined}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={handleKeyDown}\n >\n <Show\n when={selected().length > 0}\n fallback={\n <span class=\"k2b-choice-trigger__value\" data-placeholder=\"true\">\n {props.placeholder ?? messages().select}\n </span>\n }\n >\n <span\n ref={valuesRef}\n class=\"k2b-multi-select-trigger__values\"\n data-overflowing={hiddenOptions().length > 0 ? \"true\" : undefined}\n >\n <For each={selected()}>\n {(option, index) => (\n <span\n class=\"k2b-choice-pill\"\n style={colorTintStyle(option.color)}\n title={option.label}\n data-hidden={index() >= visibleCount() ? \"true\" : undefined}\n >\n <Show\n when={props.renderValue}\n fallback={\n <>\n <Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{option.label}</span>\n </>\n }\n >\n {(render) => <span class=\"k2b-choice-pill__content\">{render()(option)}</span>}\n </Show>\n <button\n type=\"button\"\n aria-label={messages().removeNamed({ name: option.label })}\n disabled={props.disabled}\n tabIndex={-1}\n onClick={(event) => {\n event.stopPropagation();\n remove(option.value);\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </span>\n )}\n </For>\n <Show when={selected().length > 1}>\n <span\n ref={(element) => {\n moreRef = element;\n resizeObserver?.observe(element);\n onCleanup(() => resizeObserver?.unobserve(element));\n }}\n class=\"k2b-multi-select-trigger__more\"\n title={\n hiddenOptions()\n .map((option) => option.label)\n .join(\", \") || undefined\n }\n data-hidden={hiddenOptions().length === 0 ? \"true\" : undefined}\n >\n <span aria-hidden=\"true\">+{moreCount()}</span>\n <span class=\"k2b-sr-only\">{messages().moreSelected({ count: moreCount() })}</span>\n </span>\n </Show>\n </span>\n </Show>\n <Show when={!hasClearAction()}>\n <i\n class={`${popover.open() ? (props.activeIcon ?? \"ti ti-chevron-up\") : (props.icon ?? \"ti ti-chevron-down\")} k2b-multi-select-trigger__chevron`}\n aria-hidden=\"true\"\n />\n </Show>\n </div>\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n aria-label={props.clearLabel ?? messages().clearSelection}\n onClick={(event) => {\n event.stopPropagation();\n emit([]);\n popover.trigger()?.focus();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <div\n ref={popover.setPopover}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n onKeyDown={handleKeyDown}\n aria-label={typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? messages().options)}\n >\n <Show when={searchable()}>\n <div class=\"k2b-choice-search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().searchOptions}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n onInput={(event) => {\n const next = event.currentTarget.value;\n setQuery(next);\n if (isAsync()) asyncOptions.load(next);\n focusFirst();\n }}\n />\n </div>\n </Show>\n <Show when={(props.groups?.length ?? 0) > 0}>\n <div class=\"k2b-choice-toolbar\">\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </div>\n </Show>\n <div id={listboxId} class=\"k2b-choice-options\" role=\"listbox\" aria-multiselectable=\"true\">\n <Show when={asyncOptions.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={asyncOptions.retry}>\n {props.retryLabel ?? messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={asyncOptions.loading() && visibleOptions().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{props.loadingLabel ?? messages().loading}</span>\n </div>\n </Show>\n <For\n each={asyncOptions.error() ? [] : visibleOptions()}\n fallback={\n <Show when={!asyncOptions.loading() && !asyncOptions.error()}>\n <div class=\"k2b-choice-status\">\n {isAsync() || query() ? (props.noResultsLabel ?? messages().noResults) : (props.emptyLabel ?? messages().noOptions)}\n </div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={isSelected(option.value)}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => !option.disabled && setFocusedIndex(index())}\n onClick={() => toggleOption(option)}\n >\n <span class=\"k2b-choice-option__checkbox\" aria-hidden=\"true\">\n <i class=\"ti ti-check\" />\n </span>\n <Show\n when={option.icon}\n fallback={\n <Show when={normalizeHexColor(option.color)}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ background: color() }} aria-hidden=\"true\" />}\n </Show>\n }\n >\n {(icon) => <i class={icon()} style={iconColor(option.color)} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-option__content\">\n <Show\n when={props.renderOption}\n fallback={\n <>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </>\n }\n >\n {(render) => render()(option)}\n </Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={values().join(\",\")} />}</Show>\n </div>\n </Field>\n );\n}\n\nexport default MultiSelectInput;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/MultiSelectInput.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { colorTintStyle, normalizeHexColor } from \"../internal/color\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport {\n type ChoiceOption,\n createChoiceLoader,\n createChoicePopover,\n filterChoiceOptions,\n fitChoicePills,\n nextEnabledChoiceIndex,\n} from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport type { ChoiceAppearance, SelectGroup } from \"./Select\";\n\nexport type MultiSelectOption =\n | string\n | { id: string; label?: string; description?: string; icon?: string; color?: string; groups?: readonly string[] }\n | ChoiceOption<string>;\ntype NormalizedOption = ChoiceOption<string>;\nexport type MultiSelectFetchDataFn = (query: string, signal: AbortSignal, group: string | null) => Promise<MultiSelectOption[]>;\n\nexport type MultiSelectInputProps = ValueFieldProps<string[]> & {\n options?: MultiSelectOption[];\n fetchData?: MultiSelectFetchDataFn;\n selectedOptions?: () => MultiSelectOption[];\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n fetchDebounceMs?: number;\n debounceMs?: number;\n loadOptions?: (query: string, signal: AbortSignal, group: string | null) => Promise<readonly ChoiceOption<string>[]>;\n groups?: readonly SelectGroup[];\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n searchable?: boolean;\n clearable?: boolean;\n name?: string;\n renderOption?: (option: ChoiceOption<string>) => JSX.Element;\n renderValue?: (option: ChoiceOption<string>) => JSX.Element;\n searchPlaceholder?: string;\n loadingLabel?: string;\n noResultsLabel?: string;\n emptyLabel?: string;\n retryLabel?: string;\n clearLabel?: string;\n /** `plain` shows the selection as wrapping pills without a box; options are removed in the list. */\n appearance?: ChoiceAppearance;\n /** Icon class shown before the placeholder while nothing is selected. */\n placeholderIcon?: string;\n};\n\n/** Cloud tints the option icon with the option color instead of adding a dot. */\nconst iconColor = (color: string | undefined): JSX.CSSProperties | undefined => {\n const normalized = normalizeHexColor(color);\n return normalized ? { color: normalized } : undefined;\n};\n\nconst normalize = (option: MultiSelectOption): NormalizedOption =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : \"value\" in option\n ? option\n : { ...option, value: option.id, label: option.label || option.id };\n\nexport function MultiSelectInput(props: MultiSelectInputProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [query, setQuery] = createSignal(\"\");\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [cache, setCache] = createSignal<Record<string, NormalizedOption>>({});\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n let searchRef: HTMLInputElement | undefined;\n\n const values = () => resolveMaybeAccessor(props.value) ?? [];\n const error = () => resolveMaybeAccessor(props.error);\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n const asyncOptions = createChoiceLoader(\n () =>\n props.fetchData\n ? async (query, signal) => (await props.fetchData!(query, signal, activeGroup())).map(normalize)\n : props.loadOptions\n ? (query, signal) => props.loadOptions!(query, signal, activeGroup())\n : undefined,\n () => props.fetchDebounceMs ?? props.debounceMs ?? 200,\n );\n const isAsync = () => Boolean(props.fetchData || props.loadOptions);\n const sourceOptions = createMemo(() => (isAsync() ? asyncOptions.options() : (props.options ?? []).map(normalize)));\n const groupedOptions = createMemo(() => {\n const group = activeGroup();\n return !isAsync() && group ? sourceOptions().filter((option) => option.groups?.includes(group)) : sourceOptions();\n });\n // Cloud's multi-select always renders its search field, and filters a static\n // option list client-side while a remote loader filters server-side.\n const searchable = () => isAsync() || (props.searchable ?? true);\n const visibleOptions = createMemo(() =>\n isAsync() ? groupedOptions() : filterChoiceOptions(groupedOptions(), searchable() ? query() : \"\"),\n );\n const optionByValue = createMemo(() => {\n const options = new Map<string, NormalizedOption>();\n for (const option of Object.values(cache())) options.set(option.value, option);\n for (const option of (props.selectedOptions?.() ?? []).map(normalize)) options.set(option.value, option);\n for (const option of sourceOptions()) options.set(option.value, option);\n return options;\n });\n const selected = createMemo(() => values().map((value) => optionByValue().get(value) ?? ({ value, label: value } as NormalizedOption)));\n const plain = () => props.appearance === \"plain\";\n const hasClearAction = () => Boolean(props.clearable && selected().length > 0 && !props.disabled && !plain());\n const selectedValues = createMemo(() => new Set(values()));\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const focusedOption = () => visibleOptions()[focusedIndex()];\n\n // Pills that do not fit the trigger collapse into a \"+N\" summary. Until the\n // browser measures them (server HTML, hidden containers) every pill stays.\n let valuesRef: HTMLSpanElement | undefined;\n let moreRef: HTMLSpanElement | undefined;\n const [visibleCount, setVisibleCount] = createSignal(Number.POSITIVE_INFINITY);\n const hiddenOptions = createMemo(() => selected().slice(visibleCount()));\n // While every pill fits, the invisible summary carries the largest count it\n // could show, so measuring it reserves enough room for the real one.\n const moreCount = () => hiddenOptions().length || selected().length - 1;\n const fitValues = () => {\n const values = valuesRef;\n if (!values?.isConnected) return;\n // Plain pills wrap, so every one stays visible.\n if (plain()) {\n values.style.width = \"\";\n setVisibleCount(Number.POSITIVE_INFINITY);\n return;\n }\n // Measuring releases a truncated first pill to its natural width; the\n // browser paints only the final state.\n values.dataset.measuring = \"true\";\n const pills = Array.from(\n values.querySelectorAll<HTMLElement>(\":scope > .k2b-choice-pill\"),\n (pill) => pill.getBoundingClientRect().width,\n );\n const fit = fitChoicePills(\n values.getBoundingClientRect().width,\n pills,\n Number.parseFloat(getComputedStyle(values).columnGap) || 0,\n moreRef?.isConnected ? moreRef.getBoundingClientRect().width : 0,\n );\n delete values.dataset.measuring;\n // Hidden pills leave the flow. While any are hidden the strip keeps the\n // whole row as its preferred width, so a container sized by its content\n // does not shrink with the collapse and grows back once it has room. The\n // strip still flexes to the trigger's width.\n values.style.width = fit.visible < pills.length ? `${fit.rowWidth}px` : \"\";\n setVisibleCount(fit.visible);\n };\n const resizeObserver = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(() => fitValues());\n onCleanup(() => resizeObserver?.disconnect());\n createEffect(() => {\n selected();\n fitValues();\n });\n onMount(() => {\n if (\"fonts\" in document) void document.fonts.ready.then(fitValues);\n });\n\n const emit = (next: readonly string[]) => {\n const unique = [...new Set(next)];\n commitFieldValue(props, unique);\n };\n const isSelected = (value: string) => selectedValues().has(value);\n const focusFirst = () => setFocusedIndex(nextEnabledChoiceIndex(visibleOptions(), -1, 1));\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n focusFirst();\n if (isAsync()) asyncOptions.load(query(), true);\n };\n const open = () => {\n if (props.disabled) return;\n setQuery(\"\");\n if (isAsync()) asyncOptions.load(\"\", true);\n focusFirst();\n popover.show();\n if (searchable()) queueMicrotask(() => searchRef?.focus());\n };\n const close = (restoreFocus = false) => {\n asyncOptions.cancel();\n setQuery(\"\");\n setFocusedIndex(-1);\n popover.hide(restoreFocus);\n };\n const toggleOption = (option: NormalizedOption) => {\n if (option.disabled) return;\n setCache({ ...cache(), [option.value]: option });\n emit(isSelected(option.value) ? values().filter((value) => value !== option.value) : [...values(), option.value]);\n };\n const remove = (value: string) => emit(values().filter((item) => item !== value));\n const move = (direction: 1 | -1) => {\n setFocusedIndex(nextEnabledChoiceIndex(visibleOptions(), focusedIndex(), direction));\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n const inToolbar = Boolean((event.target as HTMLElement | null)?.closest?.(\".k2b-choice-toolbar\"));\n if (inToolbar && event.key !== \"Escape\" && event.key !== \"Tab\") return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else move(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if ((event.key === \"Enter\" || event.key === \" \") && !popover.open()) {\n event.preventDefault();\n open();\n return;\n }\n if (event.key === \"Enter\" && popover.open()) {\n const option = focusedOption();\n if (option) {\n event.preventDefault();\n toggleOption(option);\n }\n return;\n }\n if (event.key === \"Backspace\" && popover.open() && !query() && values().length > 0) {\n event.preventDefault();\n const last = values().at(-1);\n if (last) remove(last);\n return;\n }\n if (event.key === \"Escape\" && popover.open()) {\n event.preventDefault();\n close(true);\n } else if (event.key === \"Tab\" && popover.open()) {\n close();\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n labelFor={false}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-choice-control\" data-appearance={props.appearance ?? \"field\"} data-invalid={error() ? \"true\" : undefined}>\n <div\n ref={(element) => {\n popover.setTrigger(element);\n resizeObserver?.observe(element);\n }}\n id={meta.controlId}\n class=\"k2b-multi-select-trigger\"\n role=\"combobox\"\n tabIndex={props.disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n {...fieldControlAria(meta, props)}\n aria-disabled={props.disabled}\n data-disabled={props.disabled ? \"true\" : undefined}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={handleKeyDown}\n >\n <Show\n when={selected().length > 0}\n fallback={\n <>\n <Show when={props.placeholderIcon}>\n {(icon) => <i class={`${icon()} k2b-choice-trigger__placeholder-icon`} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder=\"true\">\n {props.placeholder ?? messages().select}\n </span>\n </>\n }\n >\n <span\n ref={valuesRef}\n class=\"k2b-multi-select-trigger__values\"\n data-overflowing={hiddenOptions().length > 0 ? \"true\" : undefined}\n >\n <For each={selected()}>\n {(option, index) => (\n <span\n class=\"k2b-choice-pill\"\n style={colorTintStyle(option.color)}\n title={option.label}\n data-hidden={index() >= visibleCount() ? \"true\" : undefined}\n >\n <Show\n when={props.renderValue}\n fallback={\n <>\n <Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <span>{option.label}</span>\n </>\n }\n >\n {(render) => <span class=\"k2b-choice-pill__content\">{render()(option)}</span>}\n </Show>\n <Show when={!plain()}>\n <button\n type=\"button\"\n aria-label={messages().removeNamed({ name: option.label })}\n disabled={props.disabled}\n tabIndex={-1}\n onClick={(event) => {\n event.stopPropagation();\n remove(option.value);\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n </span>\n )}\n </For>\n <Show when={selected().length > 1 && !plain()}>\n <span\n ref={(element) => {\n moreRef = element;\n resizeObserver?.observe(element);\n onCleanup(() => resizeObserver?.unobserve(element));\n }}\n class=\"k2b-multi-select-trigger__more\"\n title={\n hiddenOptions()\n .map((option) => option.label)\n .join(\", \") || undefined\n }\n data-hidden={hiddenOptions().length === 0 ? \"true\" : undefined}\n >\n <span aria-hidden=\"true\">+{moreCount()}</span>\n <span class=\"k2b-sr-only\">{messages().moreSelected({ count: moreCount() })}</span>\n </span>\n </Show>\n </span>\n </Show>\n <Show when={!hasClearAction()}>\n <i\n class={`${popover.open() ? (props.activeIcon ?? \"ti ti-chevron-up\") : (props.icon ?? \"ti ti-chevron-down\")} k2b-multi-select-trigger__chevron`}\n aria-hidden=\"true\"\n />\n </Show>\n </div>\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n aria-label={props.clearLabel ?? messages().clearSelection}\n onClick={(event) => {\n event.stopPropagation();\n emit([]);\n popover.trigger()?.focus();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <div\n ref={popover.setPopover}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n onKeyDown={handleKeyDown}\n aria-label={typeof props.label === \"string\" ? props.label : (props[\"aria-label\"] ?? messages().options)}\n >\n <Show when={searchable()}>\n <div class=\"k2b-choice-search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().searchOptions}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n onInput={(event) => {\n const next = event.currentTarget.value;\n setQuery(next);\n if (isAsync()) asyncOptions.load(next);\n focusFirst();\n }}\n />\n </div>\n </Show>\n <Show when={(props.groups?.length ?? 0) > 0}>\n <div class=\"k2b-choice-toolbar\">\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </div>\n </Show>\n <div id={listboxId} class=\"k2b-choice-options\" role=\"listbox\" aria-multiselectable=\"true\">\n <Show when={asyncOptions.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={asyncOptions.retry}>\n {props.retryLabel ?? messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={asyncOptions.loading() && visibleOptions().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{props.loadingLabel ?? messages().loading}</span>\n </div>\n </Show>\n <For\n each={asyncOptions.error() ? [] : visibleOptions()}\n fallback={\n <Show when={!asyncOptions.loading() && !asyncOptions.error()}>\n <div class=\"k2b-choice-status\">\n {isAsync() || query() ? (props.noResultsLabel ?? messages().noResults) : (props.emptyLabel ?? messages().noOptions)}\n </div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={isSelected(option.value)}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => !option.disabled && setFocusedIndex(index())}\n onClick={() => toggleOption(option)}\n >\n <span class=\"k2b-choice-option__checkbox\" aria-hidden=\"true\">\n <i class=\"ti ti-check\" />\n </span>\n <Show\n when={option.icon}\n fallback={\n <Show when={normalizeHexColor(option.color)}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ background: color() }} aria-hidden=\"true\" />}\n </Show>\n }\n >\n {(icon) => <i class={icon()} style={iconColor(option.color)} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-option__content\">\n <Show\n when={props.renderOption}\n fallback={\n <>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </>\n }\n >\n {(render) => render()(option)}\n </Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={values().join(\",\")} />}</Show>\n </div>\n </Field>\n );\n}\n\nexport default MultiSelectInput;\n"],"mappings":"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","ignoreList":[]}