@k2b/ui 0.31.0 → 0.32.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 (116) hide show
  1. package/dist/base.css +2 -0
  2. package/dist/browser/actions/ViewTabs.js +8 -0
  3. package/dist/browser/actions/ViewTabs.js.map +1 -1
  4. package/dist/browser/content/Chart.js +104 -55
  5. package/dist/browser/content/Chart.js.map +1 -1
  6. package/dist/browser/content/ChartExplorer.js +5 -3
  7. package/dist/browser/content/ChartExplorer.js.map +1 -1
  8. package/dist/browser/content/MapView.js +4 -4
  9. package/dist/browser/content/MapView.js.map +1 -1
  10. package/dist/browser/content/chart-inspection-core.js +4 -1
  11. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  12. package/dist/browser/content/code-highlight.js +66 -0
  13. package/dist/browser/content/code-highlight.js.map +1 -1
  14. package/dist/browser/content/index.js +1 -0
  15. package/dist/browser/content/index.js.map +1 -1
  16. package/dist/browser/content/map-view-live.js +47 -10
  17. package/dist/browser/content/map-view-live.js.map +1 -1
  18. package/dist/browser/content/map-view-types.js.map +1 -1
  19. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  20. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  21. package/dist/browser/inputs/RichSelect.js +1474 -0
  22. package/dist/browser/inputs/RichSelect.js.map +1 -0
  23. package/dist/browser/inputs/TextInput.js +95 -60
  24. package/dist/browser/inputs/TextInput.js.map +1 -1
  25. package/dist/browser/inputs/choice.js +19 -8
  26. package/dist/browser/inputs/choice.js.map +1 -1
  27. package/dist/browser/inputs/index.js +1 -0
  28. package/dist/browser/inputs/index.js.map +1 -1
  29. package/dist/browser/inputs/rich-select-messages.js +46 -0
  30. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  31. package/dist/browser/layout/AppWorkspace.js +177 -135
  32. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  33. package/dist/browser/layout/DetailPanel.js +10 -1
  34. package/dist/browser/layout/DetailPanel.js.map +1 -1
  35. package/dist/browser/layout/Navigation.js +14 -5
  36. package/dist/browser/layout/Navigation.js.map +1 -1
  37. package/dist/browser/layout/PageTitle.js +9 -3
  38. package/dist/browser/layout/PageTitle.js.map +1 -1
  39. package/dist/browser/layout/ResizeSeparator.js +8 -2
  40. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  41. package/dist/browser/layout/app-workspace-controller.js +192 -31
  42. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  43. package/dist/browser/layout/navigation-model.js.map +1 -1
  44. package/dist/browser/layout/resize-separator.js +25 -1
  45. package/dist/browser/layout/resize-separator.js.map +1 -1
  46. package/dist/browser/surfaces/Skeleton.js +14 -0
  47. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  48. package/dist/browser/surfaces/index.js +1 -0
  49. package/dist/browser/surfaces/index.js.map +1 -1
  50. package/dist/ssr/actions/ViewTabs.js +8 -0
  51. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  52. package/dist/ssr/content/Chart.js +27 -7
  53. package/dist/ssr/content/Chart.js.map +1 -1
  54. package/dist/ssr/content/ChartExplorer.js +5 -3
  55. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  56. package/dist/ssr/content/MapView.js +4 -4
  57. package/dist/ssr/content/MapView.js.map +1 -1
  58. package/dist/ssr/content/chart-inspection-core.js +4 -1
  59. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  60. package/dist/ssr/content/code-highlight.js +66 -0
  61. package/dist/ssr/content/code-highlight.js.map +1 -1
  62. package/dist/ssr/content/index.js +1 -0
  63. package/dist/ssr/content/index.js.map +1 -1
  64. package/dist/ssr/content/map-view-types.js.map +1 -1
  65. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  66. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  67. package/dist/ssr/inputs/RichSelect.js +950 -0
  68. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  69. package/dist/ssr/inputs/TextInput.js +40 -16
  70. package/dist/ssr/inputs/TextInput.js.map +1 -1
  71. package/dist/ssr/inputs/choice.js +19 -8
  72. package/dist/ssr/inputs/choice.js.map +1 -1
  73. package/dist/ssr/inputs/index.js +1 -0
  74. package/dist/ssr/inputs/index.js.map +1 -1
  75. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  76. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  77. package/dist/ssr/layout/AppWorkspace.js +36 -7
  78. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  79. package/dist/ssr/layout/DetailPanel.js +1 -1
  80. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  81. package/dist/ssr/layout/Navigation.js +1 -1
  82. package/dist/ssr/layout/Navigation.js.map +1 -1
  83. package/dist/ssr/layout/PageTitle.js +9 -3
  84. package/dist/ssr/layout/PageTitle.js.map +1 -1
  85. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  86. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  87. package/dist/ssr/layout/app-workspace-controller.js +192 -31
  88. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  89. package/dist/ssr/layout/navigation-model.js.map +1 -1
  90. package/dist/ssr/layout/resize-separator.js +25 -1
  91. package/dist/ssr/layout/resize-separator.js.map +1 -1
  92. package/dist/ssr/surfaces/Skeleton.js +8 -0
  93. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  94. package/dist/ssr/surfaces/index.js +1 -0
  95. package/dist/ssr/surfaces/index.js.map +1 -1
  96. package/dist/styles.css +1 -1
  97. package/dist/types/content/Chart.d.ts +4 -2
  98. package/dist/types/content/ChartExplorer.d.ts +0 -1
  99. package/dist/types/content/code-highlight.d.ts +3 -1
  100. package/dist/types/content/index.d.ts +1 -0
  101. package/dist/types/content/map-view-live.d.ts +1 -1
  102. package/dist/types/content/map-view-types.d.ts +2 -0
  103. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  104. package/dist/types/inputs/RichSelect.d.ts +93 -0
  105. package/dist/types/inputs/TextInput.d.ts +5 -2
  106. package/dist/types/inputs/choice.d.ts +24 -4
  107. package/dist/types/inputs/index.d.ts +2 -0
  108. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  109. package/dist/types/layout/AppWorkspace.d.ts +7 -0
  110. package/dist/types/layout/DetailPanel.d.ts +2 -0
  111. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  112. package/dist/types/layout/navigation-model.d.ts +2 -0
  113. package/dist/types/layout/resize-separator.d.ts +1 -0
  114. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  115. package/dist/types/surfaces/index.d.ts +1 -0
  116. package/package.json +4 -4
@@ -0,0 +1,1474 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { addEventListener as _$addEventListener } from "solid-js/web";
4
+ import { spread as _$spread } from "solid-js/web";
5
+ import { mergeProps as _$mergeProps } from "solid-js/web";
6
+ import { setProperty as _$setProperty } from "solid-js/web";
7
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
8
+ import { use as _$use } from "solid-js/web";
9
+ import { setAttribute as _$setAttribute } from "solid-js/web";
10
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
11
+ import { memo as _$memo } from "solid-js/web";
12
+ import { className as _$className } from "solid-js/web";
13
+ import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
14
+ import { effect as _$effect } from "solid-js/web";
15
+ import { getNextElement as _$getNextElement } from "solid-js/web";
16
+ import { insert as _$insert } from "solid-js/web";
17
+ import { createComponent as _$createComponent } from "solid-js/web";
18
+ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-rich-select__visual>`),
19
+ _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-rich-select__visual aria-hidden=true><span class=k2b-rich-select__dot>`),
20
+ _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-rich-select__visual aria-hidden=true><i>`),
21
+ _tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-rich-select__text><span class=k2b-rich-select__label></span><!$><!/>`),
22
+ _tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-rich-select__line>`),
23
+ _tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-rich-select__placeholder-visual>`),
24
+ _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__placeholder aria-hidden=true><!$><!/><span class=k2b-rich-select__placeholder-lines><span></span><span>`),
25
+ _tmpl$8 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__state-text>`),
26
+ _tmpl$9 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__state><span class=k2b-rich-select__state-icon aria-hidden=true><i></i></span><!$><!/>`),
27
+ _tmpl$0 = /*#__PURE__*/_$template(`<i class="ti ti-refresh"aria-hidden=true>`),
28
+ _tmpl$1 = /*#__PURE__*/_$template(`<div><h3 class=k2b-rich-select__preview-title><!$><!/><span></span></h3><!$><!/>`),
29
+ _tmpl$10 = /*#__PURE__*/_$template(`<ul class=k2b-rich-select__facts>`),
30
+ _tmpl$11 = /*#__PURE__*/_$template(`<li><i aria-hidden=true></i><span>`),
31
+ _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__footer>`),
32
+ _tmpl$13 = /*#__PURE__*/_$template(`<button type=button class=k2b-rich-select__footer-action><span class=k2b-rich-select__visual aria-hidden=true><i></i></span><span class=k2b-rich-select__label>`),
33
+ _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__create><input class=k2b-rich-select__create-input autocomplete=off><!$><!/>`),
34
+ _tmpl$15 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__title aria-hidden=true>`),
35
+ _tmpl$16 = /*#__PURE__*/_$template(`<div role=listbox>`),
36
+ _tmpl$17 = /*#__PURE__*/_$template(`<div class="k2b-choice-search k2b-rich-select__search"><i class="ti ti-search"aria-hidden=true></i><input type=search role=combobox aria-autocomplete=list autocomplete=off>`),
37
+ _tmpl$18 = /*#__PURE__*/_$template(`<span class=k2b-sr-only>`),
38
+ _tmpl$19 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__body><div class=k2b-rich-select__column><!$><!/><div class=k2b-rich-select__list role=listbox data-choice-scroll><!$><!/><!$><!/></div><!$><!/></div><!$><!/>`),
39
+ _tmpl$20 = /*#__PURE__*/_$template(`<div class="k2b-choice-control k2b-rich-select"><button type=button class="k2b-choice-trigger k2b-rich-select__trigger"role=combobox></button><!$><!/><div popover=manual class="k2b-choice-popover k2b-rich-select__popover"role=group><!$><!/><!$><!/>`),
40
+ _tmpl$21 = /*#__PURE__*/_$template(`<span class=k2b-choice-trigger__value>`),
41
+ _tmpl$22 = /*#__PURE__*/_$template(`<i class="ti ti-selector k2b-choice-trigger__chevron"aria-hidden=true>`),
42
+ _tmpl$23 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
43
+ _tmpl$24 = /*#__PURE__*/_$template(`<input type=hidden>`),
44
+ _tmpl$25 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__no-results>`),
45
+ _tmpl$26 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__heading role=presentation>`),
46
+ _tmpl$27 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__option role=option><!$><!/><!$><!/><i class="ti ti-check k2b-rich-select__check"aria-hidden=true>`),
47
+ _tmpl$28 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__preview-placeholder aria-hidden=true><span></span><span style=width:86%></span><span style=width:72%></span><span style=width:80%>`),
48
+ _tmpl$29 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__preview data-choice-scroll><!$><!/><!$><!/>`),
49
+ _tmpl$30 = /*#__PURE__*/_$template(`<button type=button class=k2b-dialog__close><i class="ti ti-chevron-left"aria-hidden=true>`),
50
+ _tmpl$31 = /*#__PURE__*/_$template(`<header class=k2b-rich-select__sheet-header><!$><!/><h2></h2><button type=button class=k2b-dialog__close><i class="ti ti-x"aria-hidden=true>`),
51
+ _tmpl$32 = /*#__PURE__*/_$template(`<div class="k2b-choice-search k2b-rich-select__search"><i class="ti ti-search"aria-hidden=true></i><input type=search autocomplete=off>`),
52
+ _tmpl$33 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__list role=list><!$><!/><!$><!/>`),
53
+ _tmpl$34 = /*#__PURE__*/_$template(`<button type=button class=k2b-rich-select__info><i class="ti ti-info-circle"aria-hidden=true>`),
54
+ _tmpl$35 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__sheet-row role=listitem><button type=button class=k2b-rich-select__option><!$><!/><!$><!/><i class="ti ti-check k2b-rich-select__check"aria-hidden=true></i></button><!$><!/>`),
55
+ _tmpl$36 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__heading>`),
56
+ _tmpl$37 = /*#__PURE__*/_$template(`<div class=k2b-rich-select__preview data-level=detail>`),
57
+ _tmpl$38 = /*#__PURE__*/_$template(`<i class="ti ti-check"aria-hidden=true>`);
58
+ import { createEffect, createMemo, createSignal, createUniqueId, For, Match, onCleanup, onMount, Show, Switch, untrack } from "solid-js";
59
+ import { Button } from "../actions/Button";
60
+ import { dialogCore } from "../feedback/dialog-core";
61
+ import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
62
+ import { LocaleProvider, useLocale } from "../intl/locale";
63
+ import BottomSheet, { bottomSheetOptions } from "../layout/BottomSheet";
64
+ import { createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from "./choice";
65
+ import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
66
+ import { useRichSelectMessages } from "./rich-select-messages";
67
+
68
+ /** One option: a name plus at most one short line. */
69
+
70
+ /** Search and section headings appear from this many options. */
71
+ export const RICH_SELECT_SEARCH_FROM = 8;
72
+ const PHONE_QUERY = "(max-width: 47.999rem)";
73
+ const PLACEHOLDER_ROWS = 4;
74
+ const isPhone = () => typeof matchMedia === "function" && matchMedia(PHONE_QUERY).matches;
75
+ function RichSelectVisual(props) {
76
+ return _$createComponent(Switch, {
77
+ get children() {
78
+ return [_$createComponent(Match, {
79
+ get when() {
80
+ return props.item.visual;
81
+ },
82
+ children: visual => (() => {
83
+ var _el$ = _$getNextElement(_tmpl$);
84
+ _$insert(_el$, () => visual()());
85
+ return _el$;
86
+ })()
87
+ }), _$createComponent(Match, {
88
+ get when() {
89
+ return props.item.color;
90
+ },
91
+ children: color => (() => {
92
+ var _el$2 = _$getNextElement(_tmpl$2),
93
+ _el$3 = _el$2.firstChild;
94
+ _$effect(_$p => _$setStyleProperty(_el$3, "background-color", color()));
95
+ return _el$2;
96
+ })()
97
+ }), _$createComponent(Match, {
98
+ get when() {
99
+ return props.item.icon;
100
+ },
101
+ children: icon => (() => {
102
+ var _el$4 = _$getNextElement(_tmpl$3),
103
+ _el$5 = _el$4.firstChild;
104
+ _$effect(() => _$className(_el$5, icon()));
105
+ return _el$4;
106
+ })()
107
+ })];
108
+ }
109
+ });
110
+ }
111
+ const hasVisual = item => Boolean(item.visual || item.color || item.icon);
112
+
113
+ /** Name and second line. The reason of an unavailable row replaces the description. */
114
+ function RichSelectRowText(props) {
115
+ return (() => {
116
+ var _el$6 = _$getNextElement(_tmpl$4),
117
+ _el$7 = _el$6.firstChild,
118
+ _el$8 = _el$7.nextSibling,
119
+ [_el$9, _co$] = _$getNextMarker(_el$8.nextSibling);
120
+ _$insert(_el$7, () => props.item.label);
121
+ _$insert(_el$6, _$createComponent(Show, {
122
+ get when() {
123
+ return props.item.disabledReason ?? props.item.description;
124
+ },
125
+ children: line => (() => {
126
+ var _el$0 = _$getNextElement(_tmpl$5);
127
+ _$insert(_el$0, line);
128
+ _$effect(_p$ => {
129
+ var _v$ = props.lineId,
130
+ _v$2 = props.item.disabledReason ? "true" : undefined;
131
+ _v$ !== _p$.e && _$setAttribute(_el$0, "id", _p$.e = _v$);
132
+ _v$2 !== _p$.t && _$setAttribute(_el$0, "data-reason", _p$.t = _v$2);
133
+ return _p$;
134
+ }, {
135
+ e: undefined,
136
+ t: undefined
137
+ });
138
+ return _el$0;
139
+ })()
140
+ }), _el$9, _co$);
141
+ _$effect(() => _$setAttribute(_el$7, "id", props.labelId));
142
+ return _el$6;
143
+ })();
144
+ }
145
+ function RichSelectPlaceholders(props) {
146
+ return _$createComponent(For, {
147
+ get each() {
148
+ return Array.from({
149
+ length: PLACEHOLDER_ROWS
150
+ }, (_, index) => index);
151
+ },
152
+ children: index => (() => {
153
+ var _el$1 = _$getNextElement(_tmpl$7),
154
+ _el$14 = _el$1.firstChild,
155
+ [_el$15, _co$2] = _$getNextMarker(_el$14.nextSibling),
156
+ _el$11 = _el$15.nextSibling,
157
+ _el$12 = _el$11.firstChild,
158
+ _el$13 = _el$12.nextSibling;
159
+ _$insert(_el$1, _$createComponent(Show, {
160
+ get when() {
161
+ return props.visual;
162
+ },
163
+ get children() {
164
+ return _$getNextElement(_tmpl$6);
165
+ }
166
+ }), _el$15, _co$2);
167
+ _$effect(_p$ => {
168
+ var _v$3 = props.visual ? "true" : undefined,
169
+ _v$4 = `${[58, 46, 66, 50][index % 4]}%`,
170
+ _v$5 = `${[34, 28, 40, 30][index % 4]}%`;
171
+ _v$3 !== _p$.e && _$setAttribute(_el$1, "data-visual", _p$.e = _v$3);
172
+ _v$4 !== _p$.t && _$setStyleProperty(_el$12, "width", _p$.t = _v$4);
173
+ _v$5 !== _p$.a && _$setStyleProperty(_el$13, "width", _p$.a = _v$5);
174
+ return _p$;
175
+ }, {
176
+ e: undefined,
177
+ t: undefined,
178
+ a: undefined
179
+ });
180
+ return _el$1;
181
+ })()
182
+ });
183
+ }
184
+ function RichSelectState(props) {
185
+ let retryButton;
186
+ onCleanup(() => {
187
+ if (retryButton && document.activeElement === retryButton) queueMicrotask(() => props.restoreFocus?.());
188
+ });
189
+ return (() => {
190
+ var _el$16 = _$getNextElement(_tmpl$9),
191
+ _el$17 = _el$16.firstChild,
192
+ _el$18 = _el$17.firstChild,
193
+ _el$20 = _el$17.nextSibling,
194
+ [_el$21, _co$3] = _$getNextMarker(_el$20.nextSibling);
195
+ _$insert(_el$16, _$createComponent(Show, {
196
+ get when() {
197
+ return props.status === "error";
198
+ },
199
+ get fallback() {
200
+ return (() => {
201
+ var _el$22 = _$getNextElement(_tmpl$8);
202
+ _$insert(_el$22, () => props.empty ?? props.messages.noOptions);
203
+ return _el$22;
204
+ })();
205
+ },
206
+ get children() {
207
+ return [(() => {
208
+ var _el$19 = _$getNextElement(_tmpl$8);
209
+ _$insert(_el$19, () => props.messages.couldNotLoad);
210
+ return _el$19;
211
+ })(), _$createComponent(Show, {
212
+ get when() {
213
+ return props.onRetry;
214
+ },
215
+ children: retry => _$createComponent(Button, {
216
+ ref(r$) {
217
+ var _ref$ = retryButton;
218
+ typeof _ref$ === "function" ? _ref$(r$) : retryButton = r$;
219
+ },
220
+ variant: "secondary",
221
+ size: "sm",
222
+ onClick: () => retry()(),
223
+ get children() {
224
+ return [_$getNextElement(_tmpl$0), _$memo(() => props.messages.retry)];
225
+ }
226
+ })
227
+ })];
228
+ }
229
+ }), _el$21, _co$3);
230
+ _$effect(_p$ => {
231
+ var _v$6 = props.status,
232
+ _v$7 = props.status === "error" ? "alert" : "status",
233
+ _v$8 = props.status === "error" ? "ti ti-alert-triangle" : "ti ti-list-search";
234
+ _v$6 !== _p$.e && _$setAttribute(_el$16, "data-status", _p$.e = _v$6);
235
+ _v$7 !== _p$.t && _$setAttribute(_el$16, "role", _p$.t = _v$7);
236
+ _v$8 !== _p$.a && _$className(_el$18, _p$.a = _v$8);
237
+ return _p$;
238
+ }, {
239
+ e: undefined,
240
+ t: undefined,
241
+ a: undefined
242
+ });
243
+ return _el$16;
244
+ })();
245
+ }
246
+ function RichSelectPreview(props) {
247
+ return (() => {
248
+ var _el$24 = _$getNextElement(_tmpl$1),
249
+ _el$25 = _el$24.firstChild,
250
+ _el$27 = _el$25.firstChild,
251
+ [_el$28, _co$4] = _$getNextMarker(_el$27.nextSibling),
252
+ _el$26 = _el$28.nextSibling,
253
+ _el$29 = _el$25.nextSibling,
254
+ [_el$30, _co$5] = _$getNextMarker(_el$29.nextSibling);
255
+ _$insert(_el$25, _$createComponent(RichSelectVisual, {
256
+ get item() {
257
+ return props.item;
258
+ }
259
+ }), _el$28, _co$4);
260
+ _$insert(_el$26, () => props.item.label);
261
+ _$insert(_el$24, () => props.render(props.item), _el$30, _co$5);
262
+ _$effect(() => _$setAttribute(_el$24, "id", props.id));
263
+ return _el$24;
264
+ })();
265
+ }
266
+
267
+ /** Up to three short facts for a preview, each with an icon; warnings in the warning tone. */
268
+ export function RichSelectFacts(props) {
269
+ return (() => {
270
+ var _el$31 = _$getNextElement(_tmpl$10);
271
+ _$insert(_el$31, _$createComponent(For, {
272
+ get each() {
273
+ return props.facts.slice(0, 3);
274
+ },
275
+ children: fact => (() => {
276
+ var _el$32 = _$getNextElement(_tmpl$11),
277
+ _el$33 = _el$32.firstChild,
278
+ _el$34 = _el$33.nextSibling;
279
+ _$insert(_el$34, () => fact.text);
280
+ _$effect(_p$ => {
281
+ var _v$9 = fact.tone === "warning" ? "warning" : undefined,
282
+ _v$0 = fact.icon;
283
+ _v$9 !== _p$.e && _$setAttribute(_el$32, "data-tone", _p$.e = _v$9);
284
+ _v$0 !== _p$.t && _$className(_el$33, _p$.t = _v$0);
285
+ return _p$;
286
+ }, {
287
+ e: undefined,
288
+ t: undefined
289
+ });
290
+ return _el$32;
291
+ })()
292
+ }));
293
+ return _el$31;
294
+ })();
295
+ }
296
+ function RichSelectFooterControl(props) {
297
+ const [creating, setCreating] = createSignal(false);
298
+ const [name, setName] = createSignal("");
299
+ let input;
300
+ let start;
301
+ let controls;
302
+ onCleanup(() => {
303
+ if (controls?.contains(document.activeElement)) queueMicrotask(props.restoreFocus);
304
+ });
305
+ const create = () => {
306
+ const footer = props.footer;
307
+ const value = name().trim();
308
+ if (!("create" in footer) || !value) return;
309
+ props.done(() => footer.create.onCreate(value));
310
+ };
311
+ return (() => {
312
+ var _el$35 = _$getNextElement(_tmpl$12);
313
+ var _ref$2 = controls;
314
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$35) : controls = _el$35;
315
+ _$insert(_el$35, _$createComponent(Show, {
316
+ get when() {
317
+ return _$memo(() => !!(creating() && "create" in props.footer))() ? props.footer.create : undefined;
318
+ },
319
+ get fallback() {
320
+ return (() => {
321
+ var _el$36 = _$getNextElement(_tmpl$13),
322
+ _el$37 = _el$36.firstChild,
323
+ _el$38 = _el$37.firstChild,
324
+ _el$39 = _el$37.nextSibling;
325
+ _el$36.$$click = () => {
326
+ const footer = props.footer;
327
+ if ("create" in footer) {
328
+ setName(props.initialName());
329
+ setCreating(true);
330
+ queueMicrotask(() => input?.focus());
331
+ } else props.done(footer.onActivate);
332
+ };
333
+ var _ref$3 = start;
334
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$36) : start = _el$36;
335
+ _$insert(_el$39, () => props.footer.label);
336
+ _$effect(() => _$className(_el$38, props.footer.icon ?? "ti ti-plus"));
337
+ _$runHydrationEvents();
338
+ return _el$36;
339
+ })();
340
+ },
341
+ children: create_ => (() => {
342
+ var _el$40 = _$getNextElement(_tmpl$14),
343
+ _el$41 = _el$40.firstChild,
344
+ _el$42 = _el$41.nextSibling,
345
+ [_el$43, _co$6] = _$getNextMarker(_el$42.nextSibling);
346
+ _el$41.$$keydown = event => {
347
+ event.stopPropagation();
348
+ if (event.key === "Escape") {
349
+ event.preventDefault();
350
+ setCreating(false);
351
+ queueMicrotask(() => start?.focus());
352
+ } else if (event.key === "Enter" && !event.isComposing) {
353
+ event.preventDefault();
354
+ create();
355
+ }
356
+ };
357
+ _el$41.$$input = event => setName(event.currentTarget.value);
358
+ var _ref$4 = input;
359
+ typeof _ref$4 === "function" ? _$use(_ref$4, _el$41) : input = _el$41;
360
+ _$insert(_el$40, _$createComponent(Button, {
361
+ type: "button",
362
+ variant: "primary",
363
+ size: "sm",
364
+ get disabled() {
365
+ return !name().trim();
366
+ },
367
+ onClick: create,
368
+ get children() {
369
+ return props.messages.create;
370
+ }
371
+ }), _el$43, _co$6);
372
+ _$effect(_p$ => {
373
+ var _v$1 = create_().placeholder,
374
+ _v$10 = props.footer.label;
375
+ _v$1 !== _p$.e && _$setAttribute(_el$41, "placeholder", _p$.e = _v$1);
376
+ _v$10 !== _p$.t && _$setAttribute(_el$41, "aria-label", _p$.t = _v$10);
377
+ return _p$;
378
+ }, {
379
+ e: undefined,
380
+ t: undefined
381
+ });
382
+ _$effect(() => _$setProperty(_el$41, "value", name()));
383
+ _$runHydrationEvents();
384
+ return _el$40;
385
+ })()
386
+ }));
387
+ return _el$35;
388
+ })();
389
+ }
390
+
391
+ /**
392
+ * A dropdown whose rows explain each choice: a name plus one short line, an
393
+ * unavailable row with its reason, and an optional preview of what a choice
394
+ * changes. Desktop opens a popover beside the trigger; a phone opens a bottom
395
+ * sheet whose info buttons show the preview as a second level.
396
+ */
397
+ export function RichSelect(props) {
398
+ const messages = useRichSelectMessages();
399
+ const locale = useLocale();
400
+ const meta = createFieldMeta(props.id);
401
+ const listboxId = `${meta.controlId}-listbox`;
402
+ const previewId = `${meta.controlId}-preview`;
403
+ const [query, setQuery] = createSignal("");
404
+ const [active, setActive] = createSignal(-1);
405
+ const [height, setHeight] = createSignal();
406
+ const [sheetOpen, setSheetOpen] = createSignal(false);
407
+ const [phone, setPhone] = createSignal(false);
408
+ const [sheetId, setSheetId] = createSignal();
409
+ onMount(() => {
410
+ const media = window.matchMedia(PHONE_QUERY);
411
+ setPhone(media.matches);
412
+ const update = () => setPhone(media.matches);
413
+ media.addEventListener("change", update);
414
+ onCleanup(() => media.removeEventListener("change", update));
415
+ });
416
+ let searchRef;
417
+ let closeSheet;
418
+ const value = () => resolveMaybeAccessor(props.value) ?? null;
419
+ const error = () => resolveMaybeAccessor(props.error);
420
+ const status = () => props.status ?? "ready";
421
+ const withPreview = () => Boolean(props.renderPreview);
422
+ const title = () => props.title ?? (typeof props.label === "string" ? props.label : props["aria-label"] ?? props.placeholder ?? messages().chooseOption);
423
+ const searchable = () => status() === "ready" && props.items.length >= RICH_SELECT_SEARCH_FROM;
424
+ const visible = createMemo(() => searchable() ? filterChoiceOptions(props.items, query()) : props.items);
425
+ const anyVisual = createMemo(() => props.items.some(hasVisual));
426
+ const rows = createMemo(() => {
427
+ const headings = props.items.length >= RICH_SELECT_SEARCH_FROM && props.sections ? props.sections : undefined;
428
+ const result = [];
429
+ let section;
430
+ visible().forEach((item, index) => {
431
+ if (headings && item.section && item.section !== section) {
432
+ const heading = headings.find(candidate => candidate.id === item.section);
433
+ if (heading) result.push({
434
+ kind: "heading",
435
+ id: heading.id,
436
+ label: heading.label
437
+ });
438
+ }
439
+ section = item.section;
440
+ result.push({
441
+ kind: "item",
442
+ item,
443
+ index
444
+ });
445
+ });
446
+ return result;
447
+ });
448
+ const selected = createMemo(() => {
449
+ const current = value();
450
+ return current === null ? undefined : props.items.find(item => item.value === current);
451
+ });
452
+ const activeItem = () => status() === "ready" ? visible()[active()] : undefined;
453
+ const optionId = index => `${listboxId}-${index}`;
454
+ const popover = createChoicePopover(() => Boolean(props.disabled), () => ({
455
+ width: "own",
456
+ side: props.placement === "top-start" ? "above" : "below"
457
+ }));
458
+ const expanded = () => popover.open() || sheetOpen();
459
+ const restorePopoverFocus = () => {
460
+ if (popover.open()) (searchable() ? searchRef : popover.trigger())?.focus();
461
+ };
462
+ createEffect(() => {
463
+ if (props.disabled) {
464
+ popover.hide();
465
+ closeSheet?.();
466
+ }
467
+ });
468
+ createEffect(() => {
469
+ const count = visible().length;
470
+ if (!popover.open() || status() !== "ready") return;
471
+ const current = untrack(active);
472
+ if (current < 0 || current >= count) setActive(startIndex());
473
+ });
474
+ const scrollToActive = () => {
475
+ const element = document.getElementById(optionId(active()));
476
+ element?.scrollIntoView({
477
+ block: "nearest"
478
+ });
479
+ };
480
+ const move = next => {
481
+ if (next < 0) return;
482
+ setActive(next);
483
+ queueMicrotask(scrollToActive);
484
+ };
485
+ const startIndex = () => {
486
+ const index = visible().findIndex(item => item.value === value());
487
+ return index >= 0 ? index : visible().length > 0 ? 0 : -1;
488
+ };
489
+ const openPopover = () => {
490
+ setQuery("");
491
+ setActive(startIndex());
492
+ // The preview popover keeps one height while it is open, so moving
493
+ // through rows, filtering, or the end of loading never resizes it.
494
+ const rowsTall = status() === "ready" ? props.items.length : PLACEHOLDER_ROWS;
495
+ const rem = Math.min(27.5, Math.max(18.75, rowsTall * 3.625 + 1.5));
496
+ setHeight(props.size?.height ?? (withPreview() ? `${rem}rem` : undefined));
497
+ popover.show();
498
+ if (searchable()) queueMicrotask(() => searchRef?.focus());
499
+ queueMicrotask(scrollToActive);
500
+ };
501
+ const open = () => {
502
+ if (props.disabled || expanded()) return;
503
+ if (isPhone()) openSheet();else openPopover();
504
+ };
505
+ const close = (restoreFocus = false) => {
506
+ popover.hide(restoreFocus);
507
+ setQuery("");
508
+ setActive(-1);
509
+ };
510
+ const choose = item => {
511
+ if (props.disabled || status() !== "ready" || !item || item.disabledReason) return;
512
+ // Hide first: the old list must never stay visible with the next value.
513
+ close(true);
514
+ commitFieldValue(props, item.value);
515
+ };
516
+ const runFooter = run => {
517
+ close(true);
518
+ run();
519
+ };
520
+ const onKeyDown = event => {
521
+ if (event.isComposing) return;
522
+ const target = event.target;
523
+ if (event.key !== "Escape" && target instanceof Element && target !== popover.trigger() && target !== searchRef && target.closest("input, button, textarea, a, [contenteditable]")) return;
524
+ const isOpen = popover.open();
525
+ const count = visible().length;
526
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
527
+ event.preventDefault();
528
+ if (!isOpen) open();else if (status() === "ready") move(nextEnabledChoiceIndex(visible(), active(), event.key === "ArrowDown" ? 1 : -1));
529
+ } else if ((event.key === "Home" || event.key === "End") && isOpen) {
530
+ event.preventDefault();
531
+ if (status() === "ready" && count > 0) move(event.key === "Home" ? 0 : count - 1);
532
+ } else if ((event.key === "Enter" || event.key === " ") && !isOpen && event.target === popover.trigger()) {
533
+ event.preventDefault();
534
+ open();
535
+ } else if (event.key === "Enter" && isOpen) {
536
+ // Enter on an unavailable row does nothing; the list stays open.
537
+ event.preventDefault();
538
+ choose(activeItem());
539
+ } else if (event.key === "Escape" && isOpen) {
540
+ // A closed picker lets Escape reach an enclosing dialog.
541
+ event.preventDefault();
542
+ event.stopPropagation();
543
+ close(true);
544
+ } else if (isOpen && searchable() && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && event.target !== searchRef) {
545
+ // Typing anywhere in the open picker goes to the search field.
546
+ event.preventDefault();
547
+ setQuery(query() + event.key);
548
+ setActive(visible().length > 0 ? 0 : -1);
549
+ searchRef?.focus();
550
+ }
551
+ };
552
+ const onFocusOut = event => {
553
+ const next = event.relatedTarget;
554
+ if (!popover.open() || !(next instanceof Node)) return;
555
+ if (popover.trigger()?.contains(next) || popoverElement?.contains(next)) return;
556
+ close();
557
+ };
558
+ let popoverElement;
559
+ const openSheet = () => {
560
+ const current = locale();
561
+ const lifetime = new AbortController();
562
+ // dialogCore can wait for a previous sheet's history traversal. Disabling
563
+ // or unmounting the field must also cancel an opening that is still queued.
564
+ closeSheet = () => lifetime.abort();
565
+ let after;
566
+ setSheetOpen(true);
567
+ void dialogCore.open((closeDialog, context) => {
568
+ context.dialog.id ||= `${meta.controlId}-sheet`;
569
+ setSheetId(context.dialog.id);
570
+ return _$createComponent(LocaleProvider, {
571
+ locale: current,
572
+ get children() {
573
+ return _$createComponent(BottomSheet, {
574
+ get onDismiss() {
575
+ return context.requestDismiss;
576
+ },
577
+ get children() {
578
+ return _$createComponent(RichSelectSheet, {
579
+ props: props,
580
+ get title() {
581
+ return title();
582
+ },
583
+ value: value,
584
+ get dialog() {
585
+ return context.dialog;
586
+ },
587
+ close: () => closeDialog(),
588
+ done: run => {
589
+ after = run;
590
+ closeDialog();
591
+ }
592
+ });
593
+ }
594
+ });
595
+ }
596
+ });
597
+ }, {
598
+ ...bottomSheetOptions,
599
+ history: true,
600
+ signal: lifetime.signal,
601
+ // A phone keyboard must not cover the list as it opens: focus starts on the sheet.
602
+ initialFocus: dialog => {
603
+ dialog.tabIndex = -1;
604
+ return dialog;
605
+ }
606
+ }).then(() => {
607
+ if (!lifetime.signal.aborted) after?.();
608
+ }).finally(() => {
609
+ closeSheet = undefined;
610
+ setSheetOpen(false);
611
+ });
612
+ };
613
+ onCleanup(() => closeSheet?.());
614
+ const triggerText = () => props.triggerLabel ?? selected()?.label ?? props.placeholder ?? messages().chooseOption;
615
+ return _$createComponent(Field, {
616
+ get ["class"]() {
617
+ return props.class;
618
+ },
619
+ get label() {
620
+ return props.label;
621
+ },
622
+ get description() {
623
+ return props.description;
624
+ },
625
+ get error() {
626
+ return error();
627
+ },
628
+ meta: meta,
629
+ get required() {
630
+ return props.required;
631
+ },
632
+ get disabled() {
633
+ return props.disabled;
634
+ },
635
+ get children() {
636
+ var _el$44 = _$getNextElement(_tmpl$20),
637
+ _el$45 = _el$44.firstChild,
638
+ _el$71 = _el$45.nextSibling,
639
+ [_el$72, _co$12] = _$getNextMarker(_el$71.nextSibling),
640
+ _el$46 = _el$72.nextSibling,
641
+ _el$67 = _el$46.firstChild,
642
+ [_el$68, _co$10] = _$getNextMarker(_el$67.nextSibling),
643
+ _el$69 = _el$68.nextSibling,
644
+ [_el$70, _co$11] = _$getNextMarker(_el$69.nextSibling);
645
+ _el$44.$$focusout = onFocusOut;
646
+ var _ref$5 = popover.setTrigger;
647
+ typeof _ref$5 === "function" ? _$use(_ref$5, _el$45) : popover.setTrigger = _el$45;
648
+ _$spread(_el$45, _$mergeProps({
649
+ get id() {
650
+ return meta.controlId;
651
+ },
652
+ get ["aria-haspopup"]() {
653
+ return sheetOpen() || !popover.open() && phone() ? "dialog" : "listbox";
654
+ },
655
+ get ["aria-expanded"]() {
656
+ return expanded();
657
+ },
658
+ get ["aria-controls"]() {
659
+ return _$memo(() => !!sheetOpen())() ? sheetId() : popover.open() ? listboxId : undefined;
660
+ },
661
+ get ["aria-activedescendant"]() {
662
+ return _$memo(() => !!(popover.open() && activeItem()))() ? optionId(active()) : undefined;
663
+ },
664
+ get ["data-tone"]() {
665
+ return props.tone === "warning" ? "warning" : undefined;
666
+ }
667
+ }, () => fieldControlAria(meta, {
668
+ ...props,
669
+ "aria-label": props["aria-label"] ?? (typeof props.label === "string" ? undefined : title())
670
+ }), {
671
+ get disabled() {
672
+ return props.disabled;
673
+ },
674
+ "onClick": () => popover.open() ? close() : open(),
675
+ "onKeyDown": onKeyDown
676
+ }), false, true);
677
+ _$insert(_el$45, _$createComponent(Show, {
678
+ get when() {
679
+ return props.renderTrigger;
680
+ },
681
+ get fallback() {
682
+ return [_$createComponent(Show, {
683
+ get when() {
684
+ return _$memo(() => !!(selected() && hasVisual(selected())))() ? selected() : undefined;
685
+ },
686
+ get fallback() {
687
+ return _$createComponent(Show, {
688
+ get when() {
689
+ return props.icon;
690
+ },
691
+ children: icon => (() => {
692
+ var _el$75 = _$getNextElement(_tmpl$23);
693
+ _$effect(() => _$className(_el$75, icon()));
694
+ return _el$75;
695
+ })()
696
+ });
697
+ },
698
+ children: item => _$createComponent(RichSelectVisual, {
699
+ get item() {
700
+ return item();
701
+ }
702
+ })
703
+ }), (() => {
704
+ var _el$73 = _$getNextElement(_tmpl$21);
705
+ _$insert(_el$73, triggerText);
706
+ _$effect(() => _$setAttribute(_el$73, "data-placeholder", selected() || props.triggerLabel ? undefined : "true"));
707
+ return _el$73;
708
+ })(), _$getNextElement(_tmpl$22)];
709
+ },
710
+ children: render => render()(selected())
711
+ }));
712
+ _$insert(_el$44, _$createComponent(Show, {
713
+ get when() {
714
+ return props.name;
715
+ },
716
+ children: name => (() => {
717
+ var _el$76 = _$getNextElement(_tmpl$24);
718
+ _$effect(() => _$setAttribute(_el$76, "name", name()));
719
+ _$effect(() => _$setProperty(_el$76, "value", value() ?? ""));
720
+ return _el$76;
721
+ })()
722
+ }), _el$72, _co$12);
723
+ _el$46.$$pointerdown = event => {
724
+ // Keep focus on the trigger or search field, so the keys keep working after a click on the preview.
725
+ if (!event.target.closest("input, button, textarea, a")) event.preventDefault();
726
+ };
727
+ _el$46.$$keydown = onKeyDown;
728
+ _$use(element => {
729
+ popoverElement = element;
730
+ popover.setPopover(element);
731
+ }, _el$46);
732
+ _$insert(_el$46, _$createComponent(Show, {
733
+ get when() {
734
+ return !withPreview();
735
+ },
736
+ get children() {
737
+ var _el$47 = _$getNextElement(_tmpl$15);
738
+ _$insert(_el$47, title);
739
+ return _el$47;
740
+ }
741
+ }), _el$68, _co$10);
742
+ _$insert(_el$46, _$createComponent(Switch, {
743
+ get children() {
744
+ return [_$createComponent(Match, {
745
+ get when() {
746
+ return status() === "error";
747
+ },
748
+ get children() {
749
+ return [(() => {
750
+ var _el$48 = _$getNextElement(_tmpl$16);
751
+ _$setAttribute(_el$48, "id", listboxId);
752
+ _$effect(() => _$setAttribute(_el$48, "aria-label", title()));
753
+ return _el$48;
754
+ })(), _$createComponent(RichSelectState, {
755
+ status: "error",
756
+ get messages() {
757
+ return messages();
758
+ },
759
+ get onRetry() {
760
+ return props.onRetry;
761
+ },
762
+ restoreFocus: restorePopoverFocus
763
+ })];
764
+ }
765
+ }), _$createComponent(Match, {
766
+ get when() {
767
+ return _$memo(() => status() === "ready")() && props.items.length === 0;
768
+ },
769
+ get children() {
770
+ return [(() => {
771
+ var _el$49 = _$getNextElement(_tmpl$16);
772
+ _$setAttribute(_el$49, "id", listboxId);
773
+ _$effect(() => _$setAttribute(_el$49, "aria-label", title()));
774
+ return _el$49;
775
+ })(), _$createComponent(RichSelectState, {
776
+ status: "empty",
777
+ get messages() {
778
+ return messages();
779
+ },
780
+ get empty() {
781
+ return props.empty;
782
+ }
783
+ }), _$createComponent(Show, {
784
+ get when() {
785
+ return props.footer;
786
+ },
787
+ children: footer => _$createComponent(RichSelectFooterControl, {
788
+ get footer() {
789
+ return footer();
790
+ },
791
+ initialName: query,
792
+ get messages() {
793
+ return messages();
794
+ },
795
+ done: runFooter,
796
+ restoreFocus: restorePopoverFocus
797
+ })
798
+ })];
799
+ }
800
+ }), _$createComponent(Match, {
801
+ when: true,
802
+ get children() {
803
+ var _el$50 = _$getNextElement(_tmpl$19),
804
+ _el$51 = _el$50.firstChild,
805
+ _el$61 = _el$51.firstChild,
806
+ [_el$62, _co$9] = _$getNextMarker(_el$61.nextSibling),
807
+ _el$55 = _el$62.nextSibling,
808
+ _el$57 = _el$55.firstChild,
809
+ [_el$58, _co$7] = _$getNextMarker(_el$57.nextSibling),
810
+ _el$59 = _el$58.nextSibling,
811
+ [_el$60, _co$8] = _$getNextMarker(_el$59.nextSibling),
812
+ _el$63 = _el$55.nextSibling,
813
+ [_el$64, _co$0] = _$getNextMarker(_el$63.nextSibling),
814
+ _el$65 = _el$51.nextSibling,
815
+ [_el$66, _co$1] = _$getNextMarker(_el$65.nextSibling);
816
+ _$insert(_el$51, _$createComponent(Show, {
817
+ get when() {
818
+ return searchable();
819
+ },
820
+ get children() {
821
+ var _el$52 = _$getNextElement(_tmpl$17),
822
+ _el$53 = _el$52.firstChild,
823
+ _el$54 = _el$53.nextSibling;
824
+ _el$54.$$input = event => {
825
+ setQuery(event.currentTarget.value);
826
+ setActive(visible().length > 0 ? 0 : -1);
827
+ };
828
+ _$use(input => {
829
+ searchRef = input;
830
+ onCleanup(() => {
831
+ if (document.activeElement === input) queueMicrotask(() => {
832
+ if (popover.open()) popover.trigger()?.focus();
833
+ });
834
+ });
835
+ }, _el$54);
836
+ _$setAttribute(_el$54, "aria-controls", listboxId);
837
+ _$effect(_p$ => {
838
+ var _v$11 = popover.open(),
839
+ _v$12 = props.searchPlaceholder ?? messages().search,
840
+ _v$13 = props.searchPlaceholder ?? messages().search,
841
+ _v$14 = activeItem() ? optionId(active()) : undefined;
842
+ _v$11 !== _p$.e && _$setAttribute(_el$54, "aria-expanded", _p$.e = _v$11);
843
+ _v$12 !== _p$.t && _$setAttribute(_el$54, "placeholder", _p$.t = _v$12);
844
+ _v$13 !== _p$.a && _$setAttribute(_el$54, "aria-label", _p$.a = _v$13);
845
+ _v$14 !== _p$.o && _$setAttribute(_el$54, "aria-activedescendant", _p$.o = _v$14);
846
+ return _p$;
847
+ }, {
848
+ e: undefined,
849
+ t: undefined,
850
+ a: undefined,
851
+ o: undefined
852
+ });
853
+ _$effect(() => _$setProperty(_el$54, "value", query()));
854
+ _$runHydrationEvents();
855
+ return _el$52;
856
+ }
857
+ }), _el$62, _co$9);
858
+ _$setAttribute(_el$55, "id", listboxId);
859
+ _$insert(_el$55, _$createComponent(Show, {
860
+ get when() {
861
+ return status() === "loading";
862
+ },
863
+ get children() {
864
+ return [(() => {
865
+ var _el$56 = _$getNextElement(_tmpl$18);
866
+ _$insert(_el$56, () => messages().loading);
867
+ return _el$56;
868
+ })(), _$createComponent(RichSelectPlaceholders, {
869
+ get visual() {
870
+ return anyVisual() || props.items.length === 0;
871
+ }
872
+ })];
873
+ }
874
+ }), _el$58, _co$7);
875
+ _$insert(_el$55, _$createComponent(Show, {
876
+ get when() {
877
+ return status() === "ready";
878
+ },
879
+ get children() {
880
+ return _$createComponent(For, {
881
+ get each() {
882
+ return rows();
883
+ },
884
+ get fallback() {
885
+ return (() => {
886
+ var _el$77 = _$getNextElement(_tmpl$25);
887
+ _$insert(_el$77, () => messages().noResults);
888
+ return _el$77;
889
+ })();
890
+ },
891
+ children: row => row.kind === "heading" ? (() => {
892
+ var _el$78 = _$getNextElement(_tmpl$26);
893
+ _$insert(_el$78, () => row.label);
894
+ return _el$78;
895
+ })() : // biome-ignore lint/a11y/useKeyWithClickEvents: the trigger or search field handles the keys through aria-activedescendant.
896
+ (() => {
897
+ var _el$79 = _$getNextElement(_tmpl$27),
898
+ _el$81 = _el$79.firstChild,
899
+ [_el$82, _co$13] = _$getNextMarker(_el$81.nextSibling),
900
+ _el$83 = _el$82.nextSibling,
901
+ [_el$84, _co$14] = _$getNextMarker(_el$83.nextSibling),
902
+ _el$80 = _el$84.nextSibling;
903
+ _el$79.$$click = () => choose(row.item);
904
+ _el$79.$$pointermove = () => {
905
+ if (active() !== row.index) setActive(row.index);
906
+ };
907
+ _$insert(_el$79, _$createComponent(Show, {
908
+ get when() {
909
+ return anyVisual();
910
+ },
911
+ get children() {
912
+ return _$createComponent(Show, {
913
+ get when() {
914
+ return hasVisual(row.item);
915
+ },
916
+ get fallback() {
917
+ return _$getNextElement(_tmpl$);
918
+ },
919
+ get children() {
920
+ return _$createComponent(RichSelectVisual, {
921
+ get item() {
922
+ return row.item;
923
+ }
924
+ });
925
+ }
926
+ });
927
+ }
928
+ }), _el$82, _co$13);
929
+ _$insert(_el$79, _$createComponent(RichSelectRowText, {
930
+ get item() {
931
+ return row.item;
932
+ },
933
+ get labelId() {
934
+ return `${optionId(row.index)}-label`;
935
+ },
936
+ get lineId() {
937
+ return `${optionId(row.index)}-line`;
938
+ }
939
+ }), _el$84, _co$14);
940
+ _$effect(_p$ => {
941
+ var _v$25 = optionId(row.index),
942
+ _v$26 = row.item.value === value(),
943
+ _v$27 = row.item.disabledReason ? "true" : undefined,
944
+ _v$28 = `${optionId(row.index)}-label`,
945
+ _v$29 = [row.item.disabledReason || row.item.description ? `${optionId(row.index)}-line` : "", withPreview() && row.index === active() ? previewId : ""].filter(Boolean).join(" ") || undefined,
946
+ _v$30 = row.index === active() ? "true" : undefined;
947
+ _v$25 !== _p$.e && _$setAttribute(_el$79, "id", _p$.e = _v$25);
948
+ _v$26 !== _p$.t && _$setAttribute(_el$79, "aria-selected", _p$.t = _v$26);
949
+ _v$27 !== _p$.a && _$setAttribute(_el$79, "aria-disabled", _p$.a = _v$27);
950
+ _v$28 !== _p$.o && _$setAttribute(_el$79, "aria-labelledby", _p$.o = _v$28);
951
+ _v$29 !== _p$.i && _$setAttribute(_el$79, "aria-describedby", _p$.i = _v$29);
952
+ _v$30 !== _p$.n && _$setAttribute(_el$79, "data-active", _p$.n = _v$30);
953
+ return _p$;
954
+ }, {
955
+ e: undefined,
956
+ t: undefined,
957
+ a: undefined,
958
+ o: undefined,
959
+ i: undefined,
960
+ n: undefined
961
+ });
962
+ _$runHydrationEvents();
963
+ return _el$79;
964
+ })()
965
+ });
966
+ }
967
+ }), _el$60, _co$8);
968
+ _$insert(_el$51, _$createComponent(Show, {
969
+ get when() {
970
+ return _$memo(() => !!props.footer)() && status() === "ready";
971
+ },
972
+ get children() {
973
+ return _$createComponent(RichSelectFooterControl, {
974
+ get footer() {
975
+ return props.footer;
976
+ },
977
+ initialName: query,
978
+ get messages() {
979
+ return messages();
980
+ },
981
+ done: runFooter,
982
+ restoreFocus: restorePopoverFocus
983
+ });
984
+ }
985
+ }), _el$64, _co$0);
986
+ _$insert(_el$50, _$createComponent(Show, {
987
+ get when() {
988
+ return props.renderPreview;
989
+ },
990
+ children: render => (() => {
991
+ var _el$86 = _$getNextElement(_tmpl$29),
992
+ _el$92 = _el$86.firstChild,
993
+ [_el$93, _co$15] = _$getNextMarker(_el$92.nextSibling),
994
+ _el$94 = _el$93.nextSibling,
995
+ [_el$95, _co$16] = _$getNextMarker(_el$94.nextSibling);
996
+ _$insert(_el$86, _$createComponent(Show, {
997
+ get when() {
998
+ return status() === "loading";
999
+ },
1000
+ get children() {
1001
+ var _el$87 = _$getNextElement(_tmpl$28),
1002
+ _el$88 = _el$87.firstChild,
1003
+ _el$89 = _el$88.nextSibling,
1004
+ _el$90 = _el$89.nextSibling,
1005
+ _el$91 = _el$90.nextSibling;
1006
+ return _el$87;
1007
+ }
1008
+ }), _el$93, _co$15);
1009
+ _$insert(_el$86, _$createComponent(Show, {
1010
+ get when() {
1011
+ return activeItem();
1012
+ },
1013
+ children: item => _$createComponent(RichSelectPreview, {
1014
+ id: previewId,
1015
+ get item() {
1016
+ return item();
1017
+ },
1018
+ get render() {
1019
+ return render();
1020
+ }
1021
+ })
1022
+ }), _el$95, _co$16);
1023
+ return _el$86;
1024
+ })()
1025
+ }), _el$66, _co$1);
1026
+ _$effect(_p$ => {
1027
+ var _v$15 = title(),
1028
+ _v$16 = status() === "loading" ? "true" : undefined,
1029
+ _v$17 = anyVisual() ? "true" : undefined;
1030
+ _v$15 !== _p$.e && _$setAttribute(_el$55, "aria-label", _p$.e = _v$15);
1031
+ _v$16 !== _p$.t && _$setAttribute(_el$55, "aria-busy", _p$.t = _v$16);
1032
+ _v$17 !== _p$.a && _$setAttribute(_el$55, "data-visual", _p$.a = _v$17);
1033
+ return _p$;
1034
+ }, {
1035
+ e: undefined,
1036
+ t: undefined,
1037
+ a: undefined
1038
+ });
1039
+ return _el$50;
1040
+ }
1041
+ })];
1042
+ }
1043
+ }), _el$70, _co$11);
1044
+ _$effect(_p$ => {
1045
+ var _v$18 = props.appearance ?? "field",
1046
+ _v$19 = error() ? "true" : undefined,
1047
+ _v$20 = title(),
1048
+ _v$21 = withPreview() ? "true" : undefined,
1049
+ _v$22 = status(),
1050
+ _v$23 = props.size?.width,
1051
+ _v$24 = height();
1052
+ _v$18 !== _p$.e && _$setAttribute(_el$44, "data-appearance", _p$.e = _v$18);
1053
+ _v$19 !== _p$.t && _$setAttribute(_el$44, "data-invalid", _p$.t = _v$19);
1054
+ _v$20 !== _p$.a && _$setAttribute(_el$46, "aria-label", _p$.a = _v$20);
1055
+ _v$21 !== _p$.o && _$setAttribute(_el$46, "data-preview", _p$.o = _v$21);
1056
+ _v$22 !== _p$.i && _$setAttribute(_el$46, "data-status", _p$.i = _v$22);
1057
+ _v$23 !== _p$.n && _$setStyleProperty(_el$46, "width", _p$.n = _v$23);
1058
+ _v$24 !== _p$.s && _$setStyleProperty(_el$46, "height", _p$.s = _v$24);
1059
+ return _p$;
1060
+ }, {
1061
+ e: undefined,
1062
+ t: undefined,
1063
+ a: undefined,
1064
+ o: undefined,
1065
+ i: undefined,
1066
+ n: undefined,
1067
+ s: undefined
1068
+ });
1069
+ _$runHydrationEvents();
1070
+ return _el$44;
1071
+ }
1072
+ });
1073
+ }
1074
+
1075
+ /**
1076
+ * The phone presentation: a bottom sheet with the list. With a preview, an
1077
+ * info button beside each row, unavailable rows included, opens the preview as
1078
+ * a second level with Back and Choose.
1079
+ */
1080
+ function RichSelectSheet(sheet) {
1081
+ const messages = useRichSelectMessages();
1082
+ const props = sheet.props;
1083
+ const uid = createUniqueId();
1084
+ const [query, setQuery] = createSignal("");
1085
+ const [detailValue, setDetailValue] = createSignal();
1086
+ // Resolve from the current snapshot: access and availability can change while
1087
+ // the detail level is open.
1088
+ const detail = createMemo(() => props.items.find(item => item.value === detailValue()));
1089
+ let back;
1090
+ let returnValue;
1091
+ const status = () => props.status ?? "ready";
1092
+ const searchable = () => status() === "ready" && props.items.length >= RICH_SELECT_SEARCH_FROM;
1093
+ const visible = createMemo(() => searchable() ? filterChoiceOptions(props.items, query()) : props.items);
1094
+ const anyVisual = createMemo(() => props.items.some(hasVisual));
1095
+ const headings = () => props.items.length >= RICH_SELECT_SEARCH_FROM && props.sections ? props.sections : undefined;
1096
+ const restoreSheetFocus = () => {
1097
+ if (sheet.dialog.open) sheet.dialog.focus();
1098
+ };
1099
+ const headingBefore = index => {
1100
+ const item = visible()[index];
1101
+ const list = headings();
1102
+ if (!list || !item?.section || visible()[index - 1]?.section === item.section) return undefined;
1103
+ return list.find(candidate => candidate.id === item.section)?.label;
1104
+ };
1105
+ const choose = item => {
1106
+ if (props.disabled || status() !== "ready" || item.disabledReason) return;
1107
+ sheet.done(() => {
1108
+ const current = props.items.find(candidate => candidate.value === item.value);
1109
+ if (!props.disabled && status() === "ready" && current && !current.disabledReason) commitFieldValue(props, current.value);
1110
+ });
1111
+ };
1112
+ const rowId = index => `k2b-rich-select-sheet-${uid}-${index}`;
1113
+ const showDetail = item => {
1114
+ returnValue = item.value;
1115
+ // The second level keeps the sheet's height, so Back and Choose stay where they are.
1116
+ sheet.dialog.style.minHeight = `${sheet.dialog.getBoundingClientRect().height}px`;
1117
+ setDetailValue(item.value);
1118
+ queueMicrotask(() => back?.focus());
1119
+ };
1120
+ const leaveDetail = () => {
1121
+ sheet.dialog.style.minHeight = "";
1122
+ setDetailValue(undefined);
1123
+ const value = returnValue;
1124
+ queueMicrotask(() => {
1125
+ const index = visible().findIndex(item => item.value === value);
1126
+ const original = index >= 0 ? document.getElementById(`${rowId(index)}-info`) : undefined;
1127
+ const fallback = sheet.dialog.querySelector(".k2b-rich-select__sheet-row > button");
1128
+ (original ?? fallback ?? sheet.dialog).focus();
1129
+ });
1130
+ };
1131
+ createEffect(() => {
1132
+ if (detailValue() !== undefined && (!detail() || status() !== "ready")) leaveDetail();
1133
+ });
1134
+ // Escape on the second level goes back to the list instead of closing the sheet.
1135
+ const onEscape = event => {
1136
+ if (event.key !== "Escape" || !detail()) return;
1137
+ event.preventDefault();
1138
+ event.stopPropagation();
1139
+ leaveDetail();
1140
+ };
1141
+ onMount(() => {
1142
+ sheet.dialog.addEventListener("keydown", onEscape, true);
1143
+ onCleanup(() => {
1144
+ sheet.dialog.removeEventListener("keydown", onEscape, true);
1145
+ // dialogCore may reuse the dialog element for the next dialog.
1146
+ sheet.dialog.style.minHeight = "";
1147
+ });
1148
+ });
1149
+ return [(() => {
1150
+ var _el$96 = _$getNextElement(_tmpl$31),
1151
+ _el$100 = _el$96.firstChild,
1152
+ [_el$101, _co$17] = _$getNextMarker(_el$100.nextSibling),
1153
+ _el$98 = _el$101.nextSibling,
1154
+ _el$99 = _el$98.nextSibling;
1155
+ _$insert(_el$96, _$createComponent(Show, {
1156
+ get when() {
1157
+ return detail();
1158
+ },
1159
+ get children() {
1160
+ var _el$97 = _$getNextElement(_tmpl$30);
1161
+ _el$97.$$click = leaveDetail;
1162
+ var _ref$6 = back;
1163
+ typeof _ref$6 === "function" ? _$use(_ref$6, _el$97) : back = _el$97;
1164
+ _$effect(() => _$setAttribute(_el$97, "aria-label", messages().back));
1165
+ _$runHydrationEvents();
1166
+ return _el$97;
1167
+ }
1168
+ }), _el$101, _co$17);
1169
+ _$insert(_el$98, () => detail()?.label ?? sheet.title);
1170
+ _$addEventListener(_el$99, "click", sheet.close, true);
1171
+ _$effect(() => _$setAttribute(_el$99, "aria-label", messages().close));
1172
+ _$runHydrationEvents();
1173
+ return _el$96;
1174
+ })(), _$createComponent(Show, {
1175
+ get when() {
1176
+ return detail();
1177
+ },
1178
+ get fallback() {
1179
+ return _$createComponent(BottomSheet.Body, {
1180
+ get children() {
1181
+ return _$createComponent(Switch, {
1182
+ get children() {
1183
+ return [_$createComponent(Match, {
1184
+ get when() {
1185
+ return status() === "error";
1186
+ },
1187
+ get children() {
1188
+ return _$createComponent(RichSelectState, {
1189
+ status: "error",
1190
+ get messages() {
1191
+ return messages();
1192
+ },
1193
+ get onRetry() {
1194
+ return props.onRetry;
1195
+ },
1196
+ restoreFocus: restoreSheetFocus
1197
+ });
1198
+ }
1199
+ }), _$createComponent(Match, {
1200
+ get when() {
1201
+ return _$memo(() => status() === "ready")() && props.items.length === 0;
1202
+ },
1203
+ get children() {
1204
+ return [_$createComponent(RichSelectState, {
1205
+ status: "empty",
1206
+ get messages() {
1207
+ return messages();
1208
+ },
1209
+ get empty() {
1210
+ return props.empty;
1211
+ }
1212
+ }), _$createComponent(Show, {
1213
+ get when() {
1214
+ return props.footer;
1215
+ },
1216
+ children: footer => _$createComponent(RichSelectFooterControl, {
1217
+ get footer() {
1218
+ return footer();
1219
+ },
1220
+ initialName: query,
1221
+ get messages() {
1222
+ return messages();
1223
+ },
1224
+ get done() {
1225
+ return sheet.done;
1226
+ },
1227
+ restoreFocus: restoreSheetFocus
1228
+ })
1229
+ })];
1230
+ }
1231
+ }), _$createComponent(Match, {
1232
+ when: true,
1233
+ get children() {
1234
+ return [_$createComponent(Show, {
1235
+ get when() {
1236
+ return searchable();
1237
+ },
1238
+ get children() {
1239
+ var _el$102 = _$getNextElement(_tmpl$32),
1240
+ _el$103 = _el$102.firstChild,
1241
+ _el$104 = _el$103.nextSibling;
1242
+ _el$104.$$input = event => setQuery(event.currentTarget.value);
1243
+ _$use(input => {
1244
+ onCleanup(() => {
1245
+ if (document.activeElement === input) queueMicrotask(restoreSheetFocus);
1246
+ });
1247
+ }, _el$104);
1248
+ _$effect(_p$ => {
1249
+ var _v$31 = props.searchPlaceholder ?? messages().search,
1250
+ _v$32 = props.searchPlaceholder ?? messages().search;
1251
+ _v$31 !== _p$.e && _$setAttribute(_el$104, "placeholder", _p$.e = _v$31);
1252
+ _v$32 !== _p$.t && _$setAttribute(_el$104, "aria-label", _p$.t = _v$32);
1253
+ return _p$;
1254
+ }, {
1255
+ e: undefined,
1256
+ t: undefined
1257
+ });
1258
+ _$effect(() => _$setProperty(_el$104, "value", query()));
1259
+ _$runHydrationEvents();
1260
+ return _el$102;
1261
+ }
1262
+ }), (() => {
1263
+ var _el$105 = _$getNextElement(_tmpl$33),
1264
+ _el$107 = _el$105.firstChild,
1265
+ [_el$108, _co$18] = _$getNextMarker(_el$107.nextSibling),
1266
+ _el$109 = _el$108.nextSibling,
1267
+ [_el$110, _co$19] = _$getNextMarker(_el$109.nextSibling);
1268
+ _$insert(_el$105, _$createComponent(Show, {
1269
+ get when() {
1270
+ return status() === "loading";
1271
+ },
1272
+ get children() {
1273
+ return [(() => {
1274
+ var _el$106 = _$getNextElement(_tmpl$18);
1275
+ _$insert(_el$106, () => messages().loading);
1276
+ return _el$106;
1277
+ })(), _$createComponent(RichSelectPlaceholders, {
1278
+ get visual() {
1279
+ return anyVisual() || props.items.length === 0;
1280
+ }
1281
+ })];
1282
+ }
1283
+ }), _el$108, _co$18);
1284
+ _$insert(_el$105, _$createComponent(Show, {
1285
+ get when() {
1286
+ return status() === "ready";
1287
+ },
1288
+ get children() {
1289
+ return _$createComponent(For, {
1290
+ get each() {
1291
+ return visible();
1292
+ },
1293
+ get fallback() {
1294
+ return (() => {
1295
+ var _el$111 = _$getNextElement(_tmpl$25);
1296
+ _$insert(_el$111, () => messages().noResults);
1297
+ return _el$111;
1298
+ })();
1299
+ },
1300
+ children: (item, index) => [_$createComponent(Show, {
1301
+ get when() {
1302
+ return headingBefore(index());
1303
+ },
1304
+ children: label => (() => {
1305
+ var _el$122 = _$getNextElement(_tmpl$36);
1306
+ _$insert(_el$122, label);
1307
+ return _el$122;
1308
+ })()
1309
+ }), (() => {
1310
+ var _el$112 = _$getNextElement(_tmpl$35),
1311
+ _el$113 = _el$112.firstChild,
1312
+ _el$115 = _el$113.firstChild,
1313
+ [_el$116, _co$20] = _$getNextMarker(_el$115.nextSibling),
1314
+ _el$117 = _el$116.nextSibling,
1315
+ [_el$118, _co$21] = _$getNextMarker(_el$117.nextSibling),
1316
+ _el$114 = _el$118.nextSibling,
1317
+ _el$120 = _el$113.nextSibling,
1318
+ [_el$121, _co$22] = _$getNextMarker(_el$120.nextSibling);
1319
+ _el$113.$$click = () => choose(item);
1320
+ _$insert(_el$113, _$createComponent(Show, {
1321
+ get when() {
1322
+ return anyVisual();
1323
+ },
1324
+ get children() {
1325
+ return _$createComponent(Show, {
1326
+ get when() {
1327
+ return hasVisual(item);
1328
+ },
1329
+ get fallback() {
1330
+ return _$getNextElement(_tmpl$);
1331
+ },
1332
+ get children() {
1333
+ return _$createComponent(RichSelectVisual, {
1334
+ item: item
1335
+ });
1336
+ }
1337
+ });
1338
+ }
1339
+ }), _el$116, _co$20);
1340
+ _$insert(_el$113, _$createComponent(RichSelectRowText, {
1341
+ item: item,
1342
+ get labelId() {
1343
+ return `${rowId(index())}-label`;
1344
+ },
1345
+ get lineId() {
1346
+ return `${rowId(index())}-line`;
1347
+ }
1348
+ }), _el$118, _co$21);
1349
+ _$insert(_el$112, _$createComponent(Show, {
1350
+ get when() {
1351
+ return props.renderPreview;
1352
+ },
1353
+ get children() {
1354
+ var _el$119 = _$getNextElement(_tmpl$34);
1355
+ _el$119.$$click = () => showDetail(item);
1356
+ _$effect(_p$ => {
1357
+ var _v$36 = `${rowId(index())}-info`,
1358
+ _v$37 = messages().detailsFor({
1359
+ name: item.label
1360
+ });
1361
+ _v$36 !== _p$.e && _$setAttribute(_el$119, "id", _p$.e = _v$36);
1362
+ _v$37 !== _p$.t && _$setAttribute(_el$119, "aria-label", _p$.t = _v$37);
1363
+ return _p$;
1364
+ }, {
1365
+ e: undefined,
1366
+ t: undefined
1367
+ });
1368
+ _$runHydrationEvents();
1369
+ return _el$119;
1370
+ }
1371
+ }), _el$121, _co$22);
1372
+ _$effect(_p$ => {
1373
+ var _v$38 = props.renderPreview ? "true" : undefined,
1374
+ _v$39 = rowId(index()),
1375
+ _v$40 = item.value === sheet.value() ? "true" : undefined,
1376
+ _v$41 = item.disabledReason ? "true" : undefined,
1377
+ _v$42 = `${rowId(index())}-label`,
1378
+ _v$43 = item.disabledReason || item.description ? `${rowId(index())}-line` : undefined;
1379
+ _v$38 !== _p$.e && _$setAttribute(_el$112, "data-info", _p$.e = _v$38);
1380
+ _v$39 !== _p$.t && _$setAttribute(_el$113, "id", _p$.t = _v$39);
1381
+ _v$40 !== _p$.a && _$setAttribute(_el$113, "aria-current", _p$.a = _v$40);
1382
+ _v$41 !== _p$.o && _$setAttribute(_el$113, "aria-disabled", _p$.o = _v$41);
1383
+ _v$42 !== _p$.i && _$setAttribute(_el$113, "aria-labelledby", _p$.i = _v$42);
1384
+ _v$43 !== _p$.n && _$setAttribute(_el$113, "aria-describedby", _p$.n = _v$43);
1385
+ return _p$;
1386
+ }, {
1387
+ e: undefined,
1388
+ t: undefined,
1389
+ a: undefined,
1390
+ o: undefined,
1391
+ i: undefined,
1392
+ n: undefined
1393
+ });
1394
+ _$runHydrationEvents();
1395
+ return _el$112;
1396
+ })()]
1397
+ });
1398
+ }
1399
+ }), _el$110, _co$19);
1400
+ _$effect(_p$ => {
1401
+ var _v$33 = sheet.title,
1402
+ _v$34 = status() === "loading" ? "true" : undefined,
1403
+ _v$35 = anyVisual() ? "true" : undefined;
1404
+ _v$33 !== _p$.e && _$setAttribute(_el$105, "aria-label", _p$.e = _v$33);
1405
+ _v$34 !== _p$.t && _$setAttribute(_el$105, "aria-busy", _p$.t = _v$34);
1406
+ _v$35 !== _p$.a && _$setAttribute(_el$105, "data-visual", _p$.a = _v$35);
1407
+ return _p$;
1408
+ }, {
1409
+ e: undefined,
1410
+ t: undefined,
1411
+ a: undefined
1412
+ });
1413
+ return _el$105;
1414
+ })(), _$createComponent(Show, {
1415
+ get when() {
1416
+ return _$memo(() => !!props.footer)() && status() === "ready";
1417
+ },
1418
+ get children() {
1419
+ return _$createComponent(RichSelectFooterControl, {
1420
+ get footer() {
1421
+ return props.footer;
1422
+ },
1423
+ initialName: query,
1424
+ get messages() {
1425
+ return messages();
1426
+ },
1427
+ get done() {
1428
+ return sheet.done;
1429
+ },
1430
+ restoreFocus: restoreSheetFocus
1431
+ });
1432
+ }
1433
+ })];
1434
+ }
1435
+ })];
1436
+ }
1437
+ });
1438
+ }
1439
+ });
1440
+ },
1441
+ children: item => [_$createComponent(BottomSheet.Body, {
1442
+ get children() {
1443
+ var _el$124 = _$getNextElement(_tmpl$37);
1444
+ _$insert(_el$124, _$createComponent(RichSelectPreview, {
1445
+ get item() {
1446
+ return item();
1447
+ },
1448
+ get render() {
1449
+ return props.renderPreview;
1450
+ }
1451
+ }));
1452
+ return _el$124;
1453
+ }
1454
+ }), _$createComponent(BottomSheet.Footer, {
1455
+ get children() {
1456
+ return _$createComponent(Button, {
1457
+ variant: "primary",
1458
+ size: "lg",
1459
+ "class": "k2b-rich-select__choose",
1460
+ get disabled() {
1461
+ return Boolean(item().disabledReason);
1462
+ },
1463
+ onClick: () => choose(item()),
1464
+ get children() {
1465
+ return [_$getNextElement(_tmpl$38), _$memo(() => messages().choose)];
1466
+ }
1467
+ });
1468
+ }
1469
+ })]
1470
+ })];
1471
+ }
1472
+ export default RichSelect;
1473
+ _$delegateEvents(["click", "input", "keydown", "focusout", "pointerdown", "pointermove"]);
1474
+ //# sourceMappingURL=RichSelect.js.map