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