@devslab/dds-solid 0.23.0 → 0.25.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 (92) hide show
  1. package/README.ko.md +15 -3
  2. package/README.md +15 -3
  3. package/dist/assets/{calendar-view-1RO2mtf1.js → calendar-view-BBQGmkJ7.js} +181 -145
  4. package/dist/assets/calendar-view-BBQGmkJ7.js.map +1 -0
  5. package/dist/assets/{choice-DoXiK8nc.js → choice-DPmk9AHn.js} +41 -29
  6. package/dist/assets/choice-DPmk9AHn.js.map +1 -0
  7. package/dist/assets/choice-types-h4YVL8xH.js +24 -0
  8. package/dist/assets/choice-types-h4YVL8xH.js.map +1 -0
  9. package/dist/assets/date-only-0Ldsjp43.js +174 -0
  10. package/dist/assets/date-only-0Ldsjp43.js.map +1 -0
  11. package/dist/assets/direction-BpTqmXs-.js +24 -0
  12. package/dist/assets/direction-BpTqmXs-.js.map +1 -0
  13. package/dist/calendar-view-CZLsC57_.js +481 -0
  14. package/dist/calendar-view-CZLsC57_.js.map +1 -0
  15. package/dist/calendar-view.d.ts +10 -0
  16. package/dist/calendar-view.d.ts.map +1 -1
  17. package/dist/calendar.js +7 -6
  18. package/dist/calendar.js.map +1 -1
  19. package/dist/calendar.server.js +2 -1
  20. package/dist/calendar.server.js.map +1 -1
  21. package/dist/choice-CTNeFOVo.js +403 -0
  22. package/dist/choice-CTNeFOVo.js.map +1 -0
  23. package/dist/choice-types-kSaEnZPr.js +23 -0
  24. package/dist/choice-types-kSaEnZPr.js.map +1 -0
  25. package/dist/combobox.js +1 -1
  26. package/dist/combobox.server.js +1 -1
  27. package/dist/date-only-Bu4UmsTP.js +151 -0
  28. package/dist/date-only-Bu4UmsTP.js.map +1 -0
  29. package/dist/date-only.d.ts +92 -0
  30. package/dist/date-only.d.ts.map +1 -1
  31. package/dist/date-picker.js +51 -50
  32. package/dist/date-picker.js.map +1 -1
  33. package/dist/date-picker.server.js +2 -1
  34. package/dist/date-picker.server.js.map +1 -1
  35. package/dist/date-range-picker.d.ts +41 -0
  36. package/dist/date-range-picker.d.ts.map +1 -0
  37. package/dist/date-range-picker.js +368 -0
  38. package/dist/date-range-picker.js.map +1 -0
  39. package/dist/date-range-picker.server.js +347 -0
  40. package/dist/date-range-picker.server.js.map +1 -0
  41. package/dist/direction-CS85IDNU.js +21 -0
  42. package/dist/direction-CS85IDNU.js.map +1 -0
  43. package/dist/index.d.ts +5 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +168 -179
  46. package/dist/index.js.map +1 -1
  47. package/dist/input.d.ts.map +1 -1
  48. package/dist/input.js +1 -1
  49. package/dist/input.js.map +1 -1
  50. package/dist/input.server.js +1 -1
  51. package/dist/input.server.js.map +1 -1
  52. package/dist/internal/choice.d.ts +25 -3
  53. package/dist/internal/choice.d.ts.map +1 -1
  54. package/dist/month-picker.d.ts +33 -0
  55. package/dist/month-picker.d.ts.map +1 -0
  56. package/dist/month-picker.js +287 -0
  57. package/dist/month-picker.js.map +1 -0
  58. package/dist/month-picker.server.js +282 -0
  59. package/dist/month-picker.server.js.map +1 -0
  60. package/dist/number-input.d.ts +53 -0
  61. package/dist/number-input.d.ts.map +1 -0
  62. package/dist/number-input.js +267 -0
  63. package/dist/number-input.js.map +1 -0
  64. package/dist/number-input.server.js +237 -0
  65. package/dist/number-input.server.js.map +1 -0
  66. package/dist/segmented-control.d.ts +40 -0
  67. package/dist/segmented-control.d.ts.map +1 -0
  68. package/dist/segmented-control.js +133 -0
  69. package/dist/segmented-control.js.map +1 -0
  70. package/dist/segmented-control.server.js +138 -0
  71. package/dist/segmented-control.server.js.map +1 -0
  72. package/dist/select-picker.js +1 -1
  73. package/dist/select-picker.server.js +1 -1
  74. package/dist/server.js +8 -22
  75. package/dist/server.js.map +1 -1
  76. package/dist/time-only.d.ts +32 -0
  77. package/dist/time-only.d.ts.map +1 -0
  78. package/dist/time-picker-BlMWCQwk.js +113 -0
  79. package/dist/time-picker-BlMWCQwk.js.map +1 -0
  80. package/dist/time-picker.d.ts +34 -0
  81. package/dist/time-picker.d.ts.map +1 -0
  82. package/dist/time-picker.js +2 -0
  83. package/dist/time-picker.server.js +152 -0
  84. package/dist/time-picker.server.js.map +1 -0
  85. package/package.json +44 -4
  86. package/styles.css +31 -1
  87. package/dist/assets/calendar-view-1RO2mtf1.js.map +0 -1
  88. package/dist/assets/choice-DoXiK8nc.js.map +0 -1
  89. package/dist/calendar-view-CTBTPB4T.js +0 -444
  90. package/dist/calendar-view-CTBTPB4T.js.map +0 -1
  91. package/dist/choice-BPMiJlPJ.js +0 -395
  92. package/dist/choice-BPMiJlPJ.js.map +0 -1
@@ -1,4 +1,5 @@
1
- import { a as isCalendarDate, r as dateMessages, s as validateInput, t as CalendarView } from "./assets/calendar-view-1RO2mtf1.js";
1
+ import { t as CalendarView } from "./assets/calendar-view-BBQGmkJ7.js";
2
+ import { o as isCalendarDate, p as validateInput, r as dateMessages } from "./assets/date-only-0Ldsjp43.js";
2
3
  import { createComponent, memo } from "solid-js/web";
3
4
  import { DatePicker, parseDate } from "@ark-ui/solid/date-picker";
4
5
  //#region src/calendar.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.server.js","names":["DatePicker","ArkDatePicker","parseDate","CalendarView","isCalendarDate","validateInput","dateMessages","CalendarMessages","CalendarProps","label","value","onChange","locale","timeZone","min","max","disabled","readOnly","startOfWeek","messages","showToday","clearable","Calendar","props","text","_$createComponent","Root","aria-label","role","inline","_$memo","undefined","minView","maxView","fixedWeeks","translations","dayCell","state","selectDate","valueText","clearTrigger","clear","onValueChange","details","next","toString","valid","children","Content","showClear"],"sources":["../src/calendar.tsx"],"sourcesContent":["import {\n DatePicker as ArkDatePicker,\n parseDate,\n} from \"@ark-ui/solid/date-picker\";\nimport { CalendarView } from \"./calendar-view\";\nimport {\n isCalendarDate,\n validateInput,\n dateMessages,\n type CalendarMessages,\n} from \"./date-only\";\nexport interface CalendarProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n locale?: string;\n timeZone?: string;\n min?: string;\n max?: string;\n disabled?: boolean;\n readOnly?: boolean;\n startOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n messages?: CalendarMessages;\n showToday?: boolean;\n clearable?: boolean;\n}\nexport type { CalendarMessages } from \"./date-only\";\nexport function Calendar(props: CalendarProps) {\n const locale = () => props.locale ?? \"ko-KR\",\n text = () => dateMessages(locale(), props.messages);\n return (\n <ArkDatePicker.Root\n class=\"dds-calendar\"\n aria-label={props.label}\n role=\"group\"\n inline\n locale={locale()}\n timeZone={props.timeZone ?? \"Asia/Seoul\"}\n disabled={props.disabled}\n readOnly={props.readOnly}\n min={\n props.min && isCalendarDate(props.min)\n ? parseDate(props.min)\n : undefined\n }\n max={\n props.max && isCalendarDate(props.max)\n ? parseDate(props.max)\n : undefined\n }\n startOfWeek={props.startOfWeek ?? 0}\n minView=\"day\"\n maxView=\"day\"\n fixedWeeks\n value={isCalendarDate(props.value) ? [parseDate(props.value)] : []}\n translations={{\n dayCell: (state) => text().selectDate(state.valueText),\n clearTrigger: text().clear,\n }}\n onValueChange={(details) => {\n const next = details.value[0]?.toString() ?? \"\";\n if (\n !props.disabled &&\n !props.readOnly &&\n validateInput(next, false, props.min, props.max, locale()).valid\n )\n props.onChange(next);\n }}\n >\n <ArkDatePicker.Content\n class=\"dds-date-picker-content\"\n aria-label={props.label}\n >\n <CalendarView\n timeZone={props.timeZone}\n min={props.min}\n max={props.max}\n locale={locale()}\n messages={props.messages}\n disabled={props.disabled}\n readOnly={props.readOnly}\n showToday={props.showToday}\n showClear={props.clearable}\n />\n </ArkDatePicker.Content>\n </ArkDatePicker.Root>\n );\n}\n"],"mappings":";;;;AA2BA,SAAgBsB,SAASC,OAAsB;CAC7C,MAAMX,eAAeW,MAAMX,UAAU,SACnCY,aAAalB,aAAaM,OAAO,GAAGW,MAAMJ,QAAQ;CACpD,OAAAM,gBACGxB,WAAcyB,MAAI;EAAA,SAAA;EAAA,KAAA,gBAAA;GAAA,OAELH,MAAMd;EAAK;EACvBmB,MAAI;EACJC,QAAM;EAAA,IACNjB,SAAM;GAAA,OAAEA,OAAO;EAAC;EAAA,IAChBC,WAAQ;GAAA,OAAEU,MAAMV,YAAY;EAAY;EAAA,IACxCG,WAAQ;GAAA,OAAEO,MAAMP;EAAQ;EAAA,IACxBC,WAAQ;GAAA,OAAEM,MAAMN;EAAQ;EAAA,IACxBH,MAAG;GAAA,OACDgB,WAAA,CAAA,EAAAP,MAAMT,OAAOV,eAAemB,MAAMT,GAAG,EAAC,CAAA,CAAA,IAClCZ,UAAUqB,MAAMT,GAAG,IACnBiB,KAAAA;EAAS;EAAA,IAEfhB,MAAG;GAAA,OACDe,WAAA,CAAA,EAAAP,MAAMR,OAAOX,eAAemB,MAAMR,GAAG,EAAC,CAAA,CAAA,IAClCb,UAAUqB,MAAMR,GAAG,IACnBgB,KAAAA;EAAS;EAAA,IAEfb,cAAW;GAAA,OAAEK,MAAML,eAAe;EAAC;EACnCc,SAAO;EACPC,SAAO;EACPC,YAAU;EAAA,IACVxB,QAAK;GAAA,OAAEoB,WAAA,CAAA,CAAA1B,eAAemB,MAAMb,KAAK,CAAC,CAAA,CAAA,IAAG,CAACR,UAAUqB,MAAMb,KAAK,CAAC,IAAI,CAAA;EAAE;EAAA,IAClEyB,eAAY;GAAA,OAAE;IACZC,UAAUC,UAAUb,KAAK,CAAC,CAACc,WAAWD,MAAME,SAAS;IACrDC,cAAchB,KAAK,CAAC,CAACiB;GACvB;EAAC;EACDC,gBAAgBC,YAAY;GAC1B,MAAMC,OAAOD,QAAQjC,MAAM,EAAE,EAAEmC,SAAS,KAAK;GAC7C,IACE,CAACtB,MAAMP,YACP,CAACO,MAAMN,YACPZ,cAAcuC,MAAM,OAAOrB,MAAMT,KAAKS,MAAMR,KAAKH,OAAO,CAAC,CAAC,CAACkC,OAE3DvB,MAAMZ,SAASiC,IAAI;EACvB;EAAC,IAAAG,WAAA;GAAA,OAAAtB,gBAEAxB,WAAc+C,SAAO;IAAA,SAAA;IAAA,KAAA,gBAAA;KAAA,OAERzB,MAAMd;IAAK;IAAA,IAAAsC,WAAA;KAAA,OAAAtB,gBAEtBtB,cAAY;MAAA,IACXU,WAAQ;OAAA,OAAEU,MAAMV;MAAQ;MAAA,IACxBC,MAAG;OAAA,OAAES,MAAMT;MAAG;MAAA,IACdC,MAAG;OAAA,OAAEQ,MAAMR;MAAG;MAAA,IACdH,SAAM;OAAA,OAAEA,OAAO;MAAC;MAAA,IAChBO,WAAQ;OAAA,OAAEI,MAAMJ;MAAQ;MAAA,IACxBH,WAAQ;OAAA,OAAEO,MAAMP;MAAQ;MAAA,IACxBC,WAAQ;OAAA,OAAEM,MAAMN;MAAQ;MAAA,IACxBG,YAAS;OAAA,OAAEG,MAAMH;MAAS;MAAA,IAC1B6B,YAAS;OAAA,OAAE1B,MAAMF;MAAS;KAAA,CAAA;IAAA;GAAA,CAAA;EAAA;CAAA,CAAA;AAKpC"}
1
+ {"version":3,"file":"calendar.server.js","names":["DatePicker","ArkDatePicker","parseDate","CalendarView","isCalendarDate","validateInput","dateMessages","CalendarMessages","CalendarProps","label","value","onChange","locale","timeZone","min","max","disabled","readOnly","startOfWeek","messages","showToday","clearable","Calendar","props","text","_$createComponent","Root","aria-label","role","inline","_$memo","undefined","minView","maxView","fixedWeeks","translations","dayCell","state","selectDate","valueText","clearTrigger","clear","onValueChange","details","next","toString","valid","children","Content","showClear"],"sources":["../src/calendar.tsx"],"sourcesContent":["import {\n DatePicker as ArkDatePicker,\n parseDate,\n} from \"@ark-ui/solid/date-picker\";\nimport { CalendarView } from \"./calendar-view\";\nimport {\n isCalendarDate,\n validateInput,\n dateMessages,\n type CalendarMessages,\n} from \"./date-only\";\nexport interface CalendarProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n locale?: string;\n timeZone?: string;\n min?: string;\n max?: string;\n disabled?: boolean;\n readOnly?: boolean;\n startOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n messages?: CalendarMessages;\n showToday?: boolean;\n clearable?: boolean;\n}\nexport type { CalendarMessages } from \"./date-only\";\nexport function Calendar(props: CalendarProps) {\n const locale = () => props.locale ?? \"ko-KR\",\n text = () => dateMessages(locale(), props.messages);\n return (\n <ArkDatePicker.Root\n class=\"dds-calendar\"\n aria-label={props.label}\n role=\"group\"\n inline\n locale={locale()}\n timeZone={props.timeZone ?? \"Asia/Seoul\"}\n disabled={props.disabled}\n readOnly={props.readOnly}\n min={\n props.min && isCalendarDate(props.min)\n ? parseDate(props.min)\n : undefined\n }\n max={\n props.max && isCalendarDate(props.max)\n ? parseDate(props.max)\n : undefined\n }\n startOfWeek={props.startOfWeek ?? 0}\n minView=\"day\"\n maxView=\"day\"\n fixedWeeks\n value={isCalendarDate(props.value) ? [parseDate(props.value)] : []}\n translations={{\n dayCell: (state) => text().selectDate(state.valueText),\n clearTrigger: text().clear,\n }}\n onValueChange={(details) => {\n const next = details.value[0]?.toString() ?? \"\";\n if (\n !props.disabled &&\n !props.readOnly &&\n validateInput(next, false, props.min, props.max, locale()).valid\n )\n props.onChange(next);\n }}\n >\n <ArkDatePicker.Content\n class=\"dds-date-picker-content\"\n aria-label={props.label}\n >\n <CalendarView\n timeZone={props.timeZone}\n min={props.min}\n max={props.max}\n locale={locale()}\n messages={props.messages}\n disabled={props.disabled}\n readOnly={props.readOnly}\n showToday={props.showToday}\n showClear={props.clearable}\n />\n </ArkDatePicker.Content>\n </ArkDatePicker.Root>\n );\n}\n"],"mappings":";;;;;AA2BA,SAAgBsB,SAASC,OAAsB;CAC7C,MAAMX,eAAeW,MAAMX,UAAU,SACnCY,aAAalB,aAAaM,OAAO,GAAGW,MAAMJ,QAAQ;CACpD,OAAAM,gBACGxB,WAAcyB,MAAI;EAAA,SAAA;EAAA,KAAA,gBAAA;GAAA,OAELH,MAAMd;EAAK;EACvBmB,MAAI;EACJC,QAAM;EAAA,IACNjB,SAAM;GAAA,OAAEA,OAAO;EAAC;EAAA,IAChBC,WAAQ;GAAA,OAAEU,MAAMV,YAAY;EAAY;EAAA,IACxCG,WAAQ;GAAA,OAAEO,MAAMP;EAAQ;EAAA,IACxBC,WAAQ;GAAA,OAAEM,MAAMN;EAAQ;EAAA,IACxBH,MAAG;GAAA,OACDgB,WAAA,CAAA,EAAAP,MAAMT,OAAOV,eAAemB,MAAMT,GAAG,EAAC,CAAA,CAAA,IAClCZ,UAAUqB,MAAMT,GAAG,IACnBiB,KAAAA;EAAS;EAAA,IAEfhB,MAAG;GAAA,OACDe,WAAA,CAAA,EAAAP,MAAMR,OAAOX,eAAemB,MAAMR,GAAG,EAAC,CAAA,CAAA,IAClCb,UAAUqB,MAAMR,GAAG,IACnBgB,KAAAA;EAAS;EAAA,IAEfb,cAAW;GAAA,OAAEK,MAAML,eAAe;EAAC;EACnCc,SAAO;EACPC,SAAO;EACPC,YAAU;EAAA,IACVxB,QAAK;GAAA,OAAEoB,WAAA,CAAA,CAAA1B,eAAemB,MAAMb,KAAK,CAAC,CAAA,CAAA,IAAG,CAACR,UAAUqB,MAAMb,KAAK,CAAC,IAAI,CAAA;EAAE;EAAA,IAClEyB,eAAY;GAAA,OAAE;IACZC,UAAUC,UAAUb,KAAK,CAAC,CAACc,WAAWD,MAAME,SAAS;IACrDC,cAAchB,KAAK,CAAC,CAACiB;GACvB;EAAC;EACDC,gBAAgBC,YAAY;GAC1B,MAAMC,OAAOD,QAAQjC,MAAM,EAAE,EAAEmC,SAAS,KAAK;GAC7C,IACE,CAACtB,MAAMP,YACP,CAACO,MAAMN,YACPZ,cAAcuC,MAAM,OAAOrB,MAAMT,KAAKS,MAAMR,KAAKH,OAAO,CAAC,CAAC,CAACkC,OAE3DvB,MAAMZ,SAASiC,IAAI;EACvB;EAAC,IAAAG,WAAA;GAAA,OAAAtB,gBAEAxB,WAAc+C,SAAO;IAAA,SAAA;IAAA,KAAA,gBAAA;KAAA,OAERzB,MAAMd;IAAK;IAAA,IAAAsC,WAAA;KAAA,OAAAtB,gBAEtBtB,cAAY;MAAA,IACXU,WAAQ;OAAA,OAAEU,MAAMV;MAAQ;MAAA,IACxBC,MAAG;OAAA,OAAES,MAAMT;MAAG;MAAA,IACdC,MAAG;OAAA,OAAEQ,MAAMR;MAAG;MAAA,IACdH,SAAM;OAAA,OAAEA,OAAO;MAAC;MAAA,IAChBO,WAAQ;OAAA,OAAEI,MAAMJ;MAAQ;MAAA,IACxBH,WAAQ;OAAA,OAAEO,MAAMP;MAAQ;MAAA,IACxBC,WAAQ;OAAA,OAAEM,MAAMN;MAAQ;MAAA,IACxBG,YAAS;OAAA,OAAEG,MAAMH;MAAS;MAAA,IAC1B6B,YAAS;OAAA,OAAE1B,MAAMF;MAAS;KAAA,CAAA;IAAA;GAAA,CAAA;EAAA;CAAA,CAAA;AAKpC"}
@@ -0,0 +1,403 @@
1
+ import { n as e, r as t, t as n } from "./choice-types-kSaEnZPr.js";
2
+ import { For as r, Show as i, createEffect as a, createMemo as o, createSignal as s, createUniqueId as ee, onCleanup as c, onMount as te, untrack as ne } from "solid-js";
3
+ import { Portal as l, createComponent as u, delegateEvents as d, effect as f, getNextElement as p, getNextMarker as m, insert as h, memo as g, mergeProps as _, runHydrationEvents as v, setAttribute as y, setProperty as b, style as x, template as S, use as re } from "solid-js/web";
4
+ import { Combobox as C, createListCollection as ie } from "@ark-ui/solid/combobox";
5
+ import { Select as ae } from "@ark-ui/solid/select";
6
+ import { createVirtualizer as oe, defaultRangeExtractor as se } from "@tanstack/solid-virtual";
7
+ //#region src/internal/choice.tsx
8
+ var ce = /*#__PURE__*/ S("<button class=dds-choice-clear type=button>×"), le = /*#__PURE__*/ S("<input class=dds-choice-validation tabindex=-1 aria-hidden=true style=position:absolute;width:1px;height:1px;padding:0;border:0;clip-path:inset(50%);overflow:hidden;white-space:nowrap>"), ue = /*#__PURE__*/ S("<button class=dds-choice-retry type=button>"), w = /*#__PURE__*/ S("<div class=dds-choice-status role=status aria-live=polite><!$><!/><!$><!/>"), de = /*#__PURE__*/ S("<span class=dds-choice-value>"), fe = /*#__PURE__*/ S("<div>"), pe = /*#__PURE__*/ S("<span class=dds-choice-description>");
9
+ function T(d) {
10
+ let S = ee(), [T, E] = s(d.defaultValue ?? ""), D = () => d.value ?? T(), O = o(() => d.items.find((e) => e.value === D())?.label ?? (d.selectedOption?.value === D() ? d.selectedOption.label : D())), [me, k] = s(d.defaultInputValue ?? O()), A = () => d.inputValue ?? me(), [j, M] = s(!1), [he, N] = s(null), P, F, [I, L] = s(null), [R, ge] = s();
11
+ te(() => {
12
+ P && ge(P.closest("[role=\"dialog\"], [role=\"alertdialog\"]") ?? P.ownerDocument.body);
13
+ });
14
+ let z = !1, B = null, V = null, _e = (e) => d.items.find((t) => t.value === e)?.label ?? (d.selectedOption?.value === e ? d.selectedOption.label : e), H = () => d.disabled || d.readOnly, U = () => ({
15
+ ...n,
16
+ ...d.messages
17
+ }), W = (e) => {
18
+ (V?.from !== A() || V.to !== e) && (V = null, d.inputValue === void 0 && k(e), d.onInputValueChange?.(e));
19
+ }, G = (e) => {
20
+ let t = A();
21
+ e !== t && (V?.from !== t || V.to !== e) && (V = {
22
+ from: t,
23
+ to: e
24
+ }, d.inputValue === void 0 ? k(e) : d.onInputValueChange?.(e));
25
+ }, K = (e) => {
26
+ d.value === void 0 && E(e), d.onValueChange?.(e);
27
+ };
28
+ a(() => {
29
+ t(d.items);
30
+ }), a(() => {
31
+ e() && D() && !d.items.some((e) => e.value === D()) && d.selectedOption?.value !== D() && console.warn(`DDS choice: no label supplied for selected ID ${JSON.stringify(D())}; pass selectedOption when the selection is outside items.`);
32
+ });
33
+ let q = {
34
+ value: D(),
35
+ label: O()
36
+ };
37
+ a(() => {
38
+ let e = {
39
+ value: D(),
40
+ label: O()
41
+ };
42
+ (q.value !== e.value || q.label !== e.label) && (q = e, ne(() => G(e.label)));
43
+ }), a(() => {
44
+ let e = d.form, t = e ? F?.ownerDocument.getElementById(e) : F?.form;
45
+ if (!t) return;
46
+ let n = (e) => setTimeout(() => {
47
+ if (e.defaultPrevented) return;
48
+ d.onFormReset?.();
49
+ let t = d.value ?? d.defaultValue ?? "", n = _e(t);
50
+ q = {
51
+ value: t,
52
+ label: n
53
+ }, d.value === void 0 && E(t), G(d.defaultInputValue ?? n), M(!1), P instanceof HTMLInputElement && (P.value = A()), F && (F.value = D());
54
+ });
55
+ t.addEventListener("reset", n), c(() => t.removeEventListener("reset", n));
56
+ });
57
+ let J = o(() => d.searchable && d.filterMode !== "external" && A() !== O() ? d.items.filter((e) => d.matchItem ? d.matchItem(e, A()) : e.label.toLocaleLowerCase().includes(A().toLocaleLowerCase())) : d.items), ve = o(() => ie({
58
+ items: J(),
59
+ itemToString: (e) => e.label,
60
+ itemToValue: (e) => e.value,
61
+ isItemDisabled: (e) => !!e.disabled
62
+ })), Y = () => !!d.virtualization, X = () => {
63
+ let e = d.virtualization ? d.virtualization.itemHeight : void 0;
64
+ return Number.isFinite(e) ? Math.max(40, e) : 40;
65
+ }, Z = () => J().findIndex((e) => e.value === he()), Q = oe({
66
+ get count() {
67
+ return J().length;
68
+ },
69
+ getScrollElement: I,
70
+ estimateSize: X,
71
+ get overscan() {
72
+ return d.virtualization ? d.virtualization.overscan ?? 5 : 5;
73
+ },
74
+ get enabled() {
75
+ return Y() && j();
76
+ },
77
+ initialRect: {
78
+ width: 0,
79
+ height: 320
80
+ },
81
+ get rangeExtractor() {
82
+ let e = Z();
83
+ return (t) => {
84
+ let n = se(t);
85
+ return e >= 0 && !n.includes(e) && n.push(e), n.sort((e, t) => e - t);
86
+ };
87
+ }
88
+ });
89
+ a(() => {
90
+ J();
91
+ let e = j();
92
+ N(null), Y() && e && Q.scrollToIndex(Math.max(0, J().findIndex((e) => e.value === D())), { align: d.centerSelected ? "center" : "auto" });
93
+ }), a(() => {
94
+ let e = I();
95
+ if (!d.centerSelected || !j() || Y() || !e) return;
96
+ let t = requestAnimationFrame(() => {
97
+ let t = e.querySelector("[data-part=\"item\"][data-state=\"checked\"]");
98
+ if (!t) return;
99
+ let n = e.getBoundingClientRect(), r = t.getBoundingClientRect();
100
+ e.scrollTop += r.top - n.top - (e.clientHeight - r.height) / 2;
101
+ });
102
+ c(() => cancelAnimationFrame(t));
103
+ });
104
+ let $ = d.searchable ? C : ae, ye = o(() => {
105
+ let e = Y() ? Q.getVirtualItems().map((e) => ({
106
+ index: e.index,
107
+ start: e.start
108
+ })) : J().map((e, t) => ({
109
+ index: t,
110
+ start: 0
111
+ })), t = Z();
112
+ return Y() && t >= 0 && !e.some((e) => e.index === t) && e.push({
113
+ index: t,
114
+ start: t * X()
115
+ }), e;
116
+ }), be = () => d.loading ? U().loading : d.error ? typeof d.error == "string" ? d.error : U().error : J().length === 0 ? U().empty : "", xe = {
117
+ get collection() {
118
+ return ve();
119
+ },
120
+ get value() {
121
+ return D() ? [D()] : [];
122
+ },
123
+ get open() {
124
+ return j() && !H();
125
+ },
126
+ get disabled() {
127
+ return d.disabled;
128
+ },
129
+ get readOnly() {
130
+ return d.readOnly;
131
+ },
132
+ get invalid() {
133
+ return d.invalid;
134
+ },
135
+ onOpenChange: (e) => {
136
+ H() || M(e.open);
137
+ },
138
+ onValueChange: (e) => {
139
+ if (H() || z) return;
140
+ let t = e.value[0] ?? "";
141
+ t !== D() && K(t);
142
+ },
143
+ onHighlightChange: (e) => N(e.highlightedValue),
144
+ get scrollToIndexFn() {
145
+ return Y() ? ({ index: e }) => Q.scrollToIndex(e, { align: "auto" }) : void 0;
146
+ },
147
+ get positioning() {
148
+ return {
149
+ placement: "bottom-start",
150
+ sameWidth: !0,
151
+ gutter: 4,
152
+ strategy: R()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]") ? "fixed" : "absolute",
153
+ hideWhenDetached: !!R()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]")
154
+ };
155
+ }
156
+ }, Se = d.searchable ? {
157
+ get inputValue() {
158
+ return A();
159
+ },
160
+ onInputValueChange: (e) => {
161
+ let t = B === e.inputValue && e.reason === "input-change" && P?.ownerDocument.activeElement !== P;
162
+ B = null, !t && !H() && e.inputValue !== A() && W(e.inputValue);
163
+ },
164
+ selectionBehavior: "preserve",
165
+ ...d.autoHighlight ? { inputBehavior: "autohighlight" } : {}
166
+ } : {};
167
+ return u($.Root, _(xe, Se, {
168
+ get id() {
169
+ return d.id ?? S;
170
+ },
171
+ get class() {
172
+ return g(() => !!d.rootClass)() ? `dds-choice ${d.rootClass}` : "dds-choice";
173
+ },
174
+ get "data-label-placement"() {
175
+ return d.labelPlacement ?? "outside";
176
+ },
177
+ get "data-has-value"() {
178
+ return D() || A() ? "" : void 0;
179
+ },
180
+ get children() {
181
+ return [
182
+ u(i, {
183
+ get when() {
184
+ return d.label;
185
+ },
186
+ get children() {
187
+ return u($.Label, {
188
+ class: "dds-choice-label",
189
+ onClick: () => P?.focus(),
190
+ get children() {
191
+ return d.label;
192
+ }
193
+ });
194
+ }
195
+ }),
196
+ u($.Control, {
197
+ class: "dds-choice-control",
198
+ get children() {
199
+ return [
200
+ u(i, {
201
+ get when() {
202
+ return d.searchable;
203
+ },
204
+ get children() {
205
+ return u(C.Input, {
206
+ ref: (e) => {
207
+ P = e;
208
+ },
209
+ class: "dds-choice-input",
210
+ get "aria-label"() {
211
+ return d["aria-label"];
212
+ },
213
+ get "aria-labelledby"() {
214
+ return d["aria-labelledby"];
215
+ },
216
+ get "aria-describedby"() {
217
+ return d["aria-describedby"];
218
+ },
219
+ get "aria-required"() {
220
+ return d.required;
221
+ },
222
+ get placeholder() {
223
+ return d.placeholder;
224
+ },
225
+ get inputMode() {
226
+ return d.inputMode;
227
+ },
228
+ onCompositionStart: () => {
229
+ z = !0;
230
+ },
231
+ onCompositionEnd: () => {
232
+ z = !1;
233
+ },
234
+ onKeyDown: (e) => {
235
+ z && e.key === "Enter" && (e.preventDefault(), e.stopPropagation());
236
+ },
237
+ onBlur: (e) => {
238
+ if (d.commitDraft) {
239
+ B = e.currentTarget.value;
240
+ let t = H() ? null : d.commitDraft(B);
241
+ t !== null && t !== D() && K(t), G(O());
242
+ return;
243
+ }
244
+ D() && G(O());
245
+ }
246
+ });
247
+ }
248
+ }),
249
+ u($.Trigger, {
250
+ ref: (e) => {
251
+ d.searchable || (P = e);
252
+ },
253
+ class: "dds-choice-trigger",
254
+ get "aria-label"() {
255
+ return g(() => !!d.searchable)() ? U().open : d["aria-label"];
256
+ },
257
+ get "aria-labelledby"() {
258
+ return d["aria-labelledby"];
259
+ },
260
+ get "aria-describedby"() {
261
+ return d["aria-describedby"];
262
+ },
263
+ get "aria-required"() {
264
+ return d.required;
265
+ },
266
+ get children() {
267
+ return g(() => !!d.searchable)() ? g(() => !!d.triggerContent)() ? d.triggerContent() : "⌄" : (() => {
268
+ var e = p(de);
269
+ return h(e, () => O() || d.placeholder || U().open), e;
270
+ })();
271
+ }
272
+ }),
273
+ u(i, {
274
+ get when() {
275
+ return g(() => !!(d.clearable && !H()))() && (D() || A());
276
+ },
277
+ get children() {
278
+ var e = p(ce);
279
+ return e.$$click = () => {
280
+ K(""), W(""), M(!1), P?.focus();
281
+ }, e.$$pointerdown = (e) => e.preventDefault(), f(() => y(e, "aria-label", U().clear)), v(), e;
282
+ }
283
+ })
284
+ ];
285
+ }
286
+ }),
287
+ (() => {
288
+ var e = p(le);
289
+ e.addEventListener("invalid", (e) => {
290
+ e.preventDefault(), P?.focus();
291
+ }), e.$$input = (e) => {
292
+ e.currentTarget.value = D();
293
+ };
294
+ var t = F;
295
+ return typeof t == "function" ? re(t, e) : F = e, f((t) => {
296
+ var n = d.name, r = d.form, i = d.required, a = d.disabled;
297
+ return n !== t.e && y(e, "name", t.e = n), r !== t.t && y(e, "form", t.t = r), i !== t.a && b(e, "required", t.a = i), a !== t.o && b(e, "disabled", t.o = a), t;
298
+ }, {
299
+ e: void 0,
300
+ t: void 0,
301
+ a: void 0,
302
+ o: void 0
303
+ }), f(() => b(e, "value", D())), v(), e;
304
+ })(),
305
+ (() => {
306
+ var e = p(w), t = e.firstChild, [n, r] = m(t.nextSibling), a = n.nextSibling, [o, s] = m(a.nextSibling);
307
+ return h(e, be, n, r), h(e, u(i, {
308
+ get when() {
309
+ return g(() => !!d.error)() && d.onRetry;
310
+ },
311
+ get children() {
312
+ var e = p(ue);
313
+ return e.$$click = () => d.onRetry?.(), h(e, () => U().retry), v(), e;
314
+ }
315
+ }), o, s), e;
316
+ })(),
317
+ u(i, {
318
+ get when() {
319
+ return R();
320
+ },
321
+ children: (e) => u(l, {
322
+ get mount() {
323
+ return e();
324
+ },
325
+ get children() {
326
+ return u($.Positioner, {
327
+ class: "dds-choice-positioner",
328
+ get children() {
329
+ return u($.Content, {
330
+ ref: L,
331
+ class: "dds-choice-content",
332
+ style: {
333
+ "max-height": "min(320px, var(--available-height, 320px))",
334
+ overflow: "auto"
335
+ },
336
+ get children() {
337
+ var e = p(fe);
338
+ return h(e, u(r, {
339
+ get each() {
340
+ return ye();
341
+ },
342
+ children: (e) => {
343
+ let t = () => J()[e.index];
344
+ return u($.Item, {
345
+ get item() {
346
+ return t();
347
+ },
348
+ class: "dds-choice-item",
349
+ get "aria-posinset"() {
350
+ return e.index + 1;
351
+ },
352
+ get "aria-setsize"() {
353
+ return J().length;
354
+ },
355
+ get style() {
356
+ return g(() => !!Y())() ? {
357
+ position: "absolute",
358
+ top: "0",
359
+ left: "0",
360
+ width: "100%",
361
+ height: `${X()}px`,
362
+ transform: `translateY(${e.start}px)`
363
+ } : void 0;
364
+ },
365
+ get children() {
366
+ return [u($.ItemText, { get children() {
367
+ return t().label;
368
+ } }), u(i, {
369
+ get when() {
370
+ return t().description;
371
+ },
372
+ get children() {
373
+ var e = p(pe);
374
+ return h(e, () => t().description), e;
375
+ }
376
+ })];
377
+ }
378
+ });
379
+ }
380
+ })), f((t) => x(e, Y() ? {
381
+ height: `${Q.getTotalSize()}px`,
382
+ position: "relative"
383
+ } : void 0, t)), e;
384
+ }
385
+ });
386
+ }
387
+ });
388
+ }
389
+ })
390
+ })
391
+ ];
392
+ }
393
+ }));
394
+ }
395
+ d([
396
+ "pointerdown",
397
+ "click",
398
+ "input"
399
+ ]);
400
+ //#endregion
401
+ export { T as t };
402
+
403
+ //# sourceMappingURL=choice-CTNeFOVo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-CTNeFOVo.js","names":["Combobox","C","createListCollection","Select","S","Portal","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","JSX","createVirtualizer","defaultRangeExtractor","Range","choiceMessages","choiceWarningsEnabled","validateOptions","ChoiceOption","ComboboxProps","ChoiceInternals","searchable","matchItem","item","query","commitDraft","text","triggerContent","Element","rootClass","invalid","autoHighlight","centerSelected","inputMode","HTMLAttributes","HTMLInputElement","onFormReset","Choice","props","id","internal","setInternal","defaultValue","value","label","items","find","selectedOption","draft","setDraft","defaultInputValue","inputValue","open","setOpen","highlight","setHighlight","visible","HTMLButtonElement","validation","scroll","setScroll","HTMLDivElement","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","composing","consumedOnBlur","pendingRestore","from","to","resolveLabel","blocked","disabled","readOnly","messages","setInput","next","undefined","onInputValueChange","restoreInput","current","setValue","onValueChange","some","console","warn","JSON","stringify","previousSelection","associatedForm","form","getElementById","HTMLFormElement","reset","event","Event","setTimeout","defaultPrevented","resetValue","resetLabel","addEventListener","removeEventListener","filterMode","filter","toLocaleLowerCase","includes","collection","itemToString","itemToValue","isItemDisabled","virtual","virtualization","height","configured","itemHeight","Number","isFinite","Math","max","activeIndex","findIndex","virtualizer","count","length","getScrollElement","estimateSize","overscan","enabled","initialRect","width","rangeExtractor","active","range","indexes","push","sort","a","b","opened","scrollToIndex","align","content","frame","requestAnimationFrame","selected","querySelector","list","getBoundingClientRect","row","scrollTop","top","clientHeight","cancelAnimationFrame","Parts","rows","result","getVirtualItems","map","index","start","_","status","loading","error","empty","rootProps","onOpenChange","details","onHighlightChange","highlightedValue","scrollToIndexFn","positioning","placement","const","sameWidth","gutter","strategy","matches","hideWhenDetached","inputProps","reason","stale","activeElement","selectionBehavior","inputBehavior","_$createComponent","Root","_$mergeProps","class","_$memo","data-label-placement","labelPlacement","data-has-value","children","when","Label","onClick","focus","Control","Input","ref","node","aria-label","aria-labelledby","aria-describedby","aria-required","required","placeholder","onCompositionStart","onCompositionEnd","onKeyDown","key","preventDefault","stopPropagation","onBlur","currentTarget","Trigger","_el$9","_$getNextElement","_tmpl$5","_$insert","clearable","_el$","_tmpl$","$$click","$$pointerdown","_$effect","_$setAttribute","clear","_$runHydrationEvents","_el$2","_tmpl$2","$$input","_ref$","_$use","_p$","_v$","name","_v$2","_v$3","_v$4","e","t","_$setProperty","o","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_co$","_$getNextMarker","nextSibling","_el$7","_el$8","_co$2","onRetry","_el$4","_tmpl$3","retry","mount","Positioner","Content","style","overflow","_el$0","_tmpl$6","each","Item","aria-posinset","aria-setsize","position","left","transform","ItemText","description","_el$1","_tmpl$7","_$p","_$style","getTotalSize","_$delegateEvents"],"sources":["../src/internal/choice.tsx"],"sourcesContent":["import { Combobox as C, createListCollection } from \"@ark-ui/solid/combobox\";\nimport { Select as S } from \"@ark-ui/solid/select\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n onCleanup,\n onMount,\n Show,\n untrack,\n type JSX,\n} from \"solid-js\";\nimport {\n createVirtualizer,\n defaultRangeExtractor,\n type Range,\n} from \"@tanstack/solid-virtual\";\nimport {\n choiceMessages,\n choiceWarningsEnabled,\n validateOptions,\n type ChoiceOption,\n type ComboboxProps,\n} from \"../choice-types\";\n\n/**\n * Options for DDS components built on Choice (TimePicker). They are not part\n * of the public Combobox/SelectPicker props; every default keeps the existing\n * Combobox and SelectPicker behavior.\n */\nexport interface ChoiceInternals {\n searchable: boolean;\n /** Replaces the default case-insensitive label substring filter. */\n matchItem?: (item: ChoiceOption, query: string) => boolean;\n /** On blur, the value the typed text stands for, \"\" to clear, or null to restore the label. */\n commitDraft?: (text: string) => string | null;\n /** Content of the searchable trigger button (default \"⌄\"). */\n triggerContent?: () => JSX.Element;\n rootClass?: string;\n invalid?: boolean;\n /** Highlight the first match while typing so Enter picks it. */\n autoHighlight?: boolean;\n /** Scroll the selected option to the middle of the list when it opens. */\n centerSelected?: boolean;\n inputMode?: JSX.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n /** Called before a native form reset restores the value. */\n onFormReset?: () => void;\n}\n\nexport function Choice(props: ComboboxProps & ChoiceInternals) {\n const id = createUniqueId();\n const [internal, setInternal] = createSignal(props.defaultValue ?? \"\");\n const value = () => props.value ?? internal();\n const label = createMemo(\n () =>\n props.items.find((item) => item.value === value())?.label ??\n (props.selectedOption?.value === value()\n ? props.selectedOption.label\n : value()),\n );\n const [draft, setDraft] = createSignal(props.defaultInputValue ?? label());\n const inputValue = () => props.inputValue ?? draft();\n const [open, setOpen] = createSignal(false),\n [highlight, setHighlight] = createSignal<string | null>(null);\n let visible: HTMLInputElement | HTMLButtonElement | undefined,\n validation: HTMLInputElement | undefined;\n const [scroll, setScroll] = createSignal<HTMLDivElement | null>(null);\n const [portalMount, setPortalMount] = createSignal<HTMLElement>();\n onMount(() => {\n // Preserve the enclosing modal's isolation boundary for nested options.\n if (visible)\n setPortalMount(\n visible.closest<HTMLElement>('[role=\"dialog\"], [role=\"alertdialog\"]') ??\n visible.ownerDocument.body,\n );\n });\n let composing = false;\n let consumedOnBlur: string | null = null;\n let pendingRestore: { from: string; to: string } | null = null;\n const resolveLabel = (id: string) =>\n props.items.find((item) => item.value === id)?.label ??\n (props.selectedOption?.value === id ? props.selectedOption.label : id);\n const blocked = () => props.disabled || props.readOnly;\n const messages = () => ({ ...choiceMessages, ...props.messages });\n const setInput = (next: string) => {\n if (pendingRestore?.from === inputValue() && pendingRestore.to === next)\n return;\n pendingRestore = null;\n if (props.inputValue === undefined) setDraft(next);\n props.onInputValueChange?.(next);\n };\n const restoreInput = (next: string) => {\n const current = inputValue();\n if (next === current) return;\n if (pendingRestore?.from === current && pendingRestore.to === next) return;\n pendingRestore = { from: current, to: next };\n if (props.inputValue === undefined) setDraft(next);\n else props.onInputValueChange?.(next);\n };\n const setValue = (next: string) => {\n if (props.value === undefined) setInternal(next);\n props.onValueChange?.(next);\n };\n createEffect(() => {\n validateOptions(props.items);\n });\n createEffect(() => {\n if (\n choiceWarningsEnabled() &&\n value() &&\n !props.items.some((item) => item.value === value()) &&\n props.selectedOption?.value !== value()\n )\n console.warn(\n `DDS choice: no label supplied for selected ID ${JSON.stringify(value())}; pass selectedOption when the selection is outside items.`,\n );\n });\n let previousSelection = { value: value(), label: label() };\n createEffect(() => {\n const current = { value: value(), label: label() };\n if (\n previousSelection.value !== current.value ||\n previousSelection.label !== current.label\n ) {\n previousSelection = current;\n untrack(() => restoreInput(current.label));\n }\n });\n createEffect(() => {\n const associatedForm = props.form;\n const form = associatedForm\n ? (validation?.ownerDocument.getElementById(\n associatedForm,\n ) as HTMLFormElement | null)\n : validation?.form;\n if (!form) return;\n // A task, not a microtask: after a reset-button click, microtasks run\n // before the browser resets the controls and would be overwritten.\n const reset = (event: Event) =>\n setTimeout(() => {\n if (event.defaultPrevented) return;\n props.onFormReset?.();\n const resetValue = props.value ?? props.defaultValue ?? \"\";\n const resetLabel = resolveLabel(resetValue);\n previousSelection = { value: resetValue, label: resetLabel };\n if (props.value === undefined) setInternal(resetValue);\n restoreInput(props.defaultInputValue ?? resetLabel);\n setOpen(false);\n if (visible instanceof HTMLInputElement) visible.value = inputValue();\n if (validation) validation.value = value();\n });\n form.addEventListener(\"reset\", reset);\n onCleanup(() => form.removeEventListener(\"reset\", reset));\n });\n const items = createMemo(() =>\n props.searchable &&\n props.filterMode !== \"external\" &&\n inputValue() !== label()\n ? props.items.filter((item) =>\n props.matchItem\n ? props.matchItem(item, inputValue())\n : item.label\n .toLocaleLowerCase()\n .includes(inputValue().toLocaleLowerCase()),\n )\n : props.items,\n );\n const collection = createMemo(() =>\n createListCollection({\n items: items(),\n itemToString: (item) => item.label,\n itemToValue: (item) => item.value,\n isItemDisabled: (item) => !!item.disabled,\n }),\n );\n const virtual = () => !!props.virtualization;\n const height = () => {\n const configured = props.virtualization\n ? props.virtualization.itemHeight\n : undefined;\n return Number.isFinite(configured) ? Math.max(40, configured!) : 40;\n };\n const activeIndex = () =>\n items().findIndex((item) => item.value === highlight());\n const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({\n get count() {\n return items().length;\n },\n getScrollElement: scroll,\n estimateSize: height,\n get overscan() {\n return props.virtualization ? (props.virtualization.overscan ?? 5) : 5;\n },\n get enabled() {\n return virtual() && open();\n },\n initialRect: { width: 0, height: 320 },\n get rangeExtractor() {\n const active = activeIndex();\n return (range: Range) => {\n const indexes = defaultRangeExtractor(range);\n if (active >= 0 && !indexes.includes(active)) indexes.push(active);\n return indexes.sort((a, b) => a - b);\n };\n },\n });\n createEffect(() => {\n items();\n const opened = open();\n setHighlight(null);\n if (virtual() && opened)\n virtualizer.scrollToIndex(\n Math.max(\n 0,\n items().findIndex((item) => item.value === value()),\n ),\n { align: props.centerSelected ? \"center\" : \"auto\" },\n );\n });\n createEffect(() => {\n const content = scroll();\n if (!props.centerSelected || !open() || virtual() || !content) return;\n // Ark only scrolls the highlighted option to the nearest edge.\n const frame = requestAnimationFrame(() => {\n const selected = content.querySelector<HTMLElement>(\n '[data-part=\"item\"][data-state=\"checked\"]',\n );\n if (!selected) return;\n const list = content.getBoundingClientRect(),\n row = selected.getBoundingClientRect();\n content.scrollTop +=\n row.top - list.top - (content.clientHeight - row.height) / 2;\n });\n onCleanup(() => cancelAnimationFrame(frame));\n });\n const Parts = props.searchable ? C : S;\n const rows = createMemo(() => {\n const result = virtual()\n ? virtualizer\n .getVirtualItems()\n .map((row) => ({ index: row.index, start: row.start }))\n : items().map((_, index) => ({ index, start: 0 }));\n const active = activeIndex();\n if (virtual() && active >= 0 && !result.some((row) => row.index === active))\n result.push({ index: active, start: active * height() });\n return result;\n });\n const status = () =>\n props.loading\n ? messages().loading\n : props.error\n ? typeof props.error === \"string\"\n ? props.error\n : messages().error\n : items().length === 0\n ? messages().empty\n : \"\";\n const rootProps = {\n get collection() {\n return collection();\n },\n get value() {\n return value() ? [value()] : [];\n },\n get open() {\n return open() && !blocked();\n },\n get disabled() {\n return props.disabled;\n },\n get readOnly() {\n return props.readOnly;\n },\n get invalid() {\n return props.invalid;\n },\n onOpenChange: (details: { open: boolean }) => {\n if (!blocked()) setOpen(details.open);\n },\n onValueChange: (details: { value: string[] }) => {\n if (blocked() || composing) return;\n const next = details.value[0] ?? \"\";\n if (next !== value()) setValue(next);\n },\n onHighlightChange: (details: { highlightedValue: string | null }) =>\n setHighlight(details.highlightedValue),\n get scrollToIndexFn() {\n return virtual()\n ? ({ index }: { index: number }) =>\n virtualizer.scrollToIndex(index, { align: \"auto\" })\n : undefined;\n },\n get positioning() {\n return {\n placement: \"bottom-start\" as const,\n sameWidth: true,\n gutter: 4,\n strategy: portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n )\n ? (\"fixed\" as const)\n : (\"absolute\" as const),\n hideWhenDetached: !!portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n ),\n };\n },\n };\n const inputProps = props.searchable\n ? {\n get inputValue() {\n return inputValue();\n },\n onInputValueChange: (details: {\n inputValue: string;\n reason?: string | undefined;\n }) => {\n // Ark reports a keystroke after the blur that already committed it.\n const stale =\n consumedOnBlur === details.inputValue &&\n details.reason === \"input-change\" &&\n visible?.ownerDocument.activeElement !== visible;\n consumedOnBlur = null;\n if (stale) return;\n if (!blocked() && details.inputValue !== inputValue())\n setInput(details.inputValue);\n },\n selectionBehavior: \"preserve\" as const,\n ...(props.autoHighlight\n ? { inputBehavior: \"autohighlight\" as const }\n : {}),\n }\n : {};\n return (\n <Parts.Root\n {...rootProps}\n {...inputProps}\n id={props.id ?? id}\n class={props.rootClass ? `dds-choice ${props.rootClass}` : \"dds-choice\"}\n data-label-placement={props.labelPlacement ?? \"outside\"}\n data-has-value={value() || inputValue() ? \"\" : undefined}\n >\n <Show when={props.label}>\n <Parts.Label class=\"dds-choice-label\" onClick={() => visible?.focus()}>\n {props.label}\n </Parts.Label>\n </Show>\n <Parts.Control class=\"dds-choice-control\">\n <Show when={props.searchable}>\n <C.Input\n ref={(node) => {\n visible = node;\n }}\n class=\"dds-choice-input\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n placeholder={props.placeholder}\n inputMode={props.inputMode}\n onCompositionStart={() => {\n composing = true;\n }}\n onCompositionEnd={() => {\n composing = false;\n }}\n onKeyDown={(event) => {\n if (composing && event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onBlur={(event) => {\n if (props.commitDraft) {\n // The DOM holds the latest keystroke; Ark's input state may still be queued.\n consumedOnBlur = event.currentTarget.value;\n const next = blocked()\n ? null\n : props.commitDraft(consumedOnBlur);\n if (next !== null && next !== value()) setValue(next);\n restoreInput(label());\n return;\n }\n if (value()) restoreInput(label());\n }}\n />\n </Show>\n <Parts.Trigger\n ref={(node) => {\n if (!props.searchable) visible = node;\n }}\n class=\"dds-choice-trigger\"\n aria-label={props.searchable ? messages().open : props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={props.required}\n >\n {props.searchable ? (\n props.triggerContent ? (\n props.triggerContent()\n ) : (\n \"⌄\"\n )\n ) : (\n <span class=\"dds-choice-value\">\n {label() || props.placeholder || messages().open}\n </span>\n )}\n </Parts.Trigger>\n <Show when={props.clearable && !blocked() && (value() || inputValue())}>\n <button\n class=\"dds-choice-clear\"\n type=\"button\"\n aria-label={messages().clear}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n setValue(\"\");\n setInput(\"\");\n setOpen(false);\n visible?.focus();\n }}\n >\n ×\n </button>\n </Show>\n </Parts.Control>\n <input\n ref={validation}\n class=\"dds-choice-validation\"\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n border: \"0\",\n \"clip-path\": \"inset(50%)\",\n overflow: \"hidden\",\n \"white-space\": \"nowrap\",\n }}\n tabIndex={-1}\n aria-hidden=\"true\"\n name={props.name}\n form={props.form}\n value={value()}\n required={props.required}\n disabled={props.disabled}\n onInput={(event) => {\n event.currentTarget.value = value();\n }}\n onInvalid={(event) => {\n event.preventDefault();\n visible?.focus();\n }}\n />\n <div class=\"dds-choice-status\" role=\"status\" aria-live=\"polite\">\n {status()}\n <Show when={props.error && props.onRetry}>\n <button\n class=\"dds-choice-retry\"\n type=\"button\"\n onClick={() => props.onRetry?.()}\n >\n {messages().retry}\n </button>\n </Show>\n </div>\n <Show when={portalMount()}>\n {(mount) => (\n <Portal mount={mount()}>\n <Parts.Positioner class=\"dds-choice-positioner\">\n <Parts.Content\n ref={setScroll}\n class=\"dds-choice-content\"\n style={{\n \"max-height\": \"min(320px, var(--available-height, 320px))\",\n overflow: \"auto\",\n }}\n >\n <div\n style={\n virtual()\n ? {\n height: `${virtualizer.getTotalSize()}px`,\n position: \"relative\",\n }\n : undefined\n }\n >\n <For each={rows()}>\n {(row) => {\n const item = () => items()[row.index]!;\n return (\n <Parts.Item\n item={item()}\n class=\"dds-choice-item\"\n aria-posinset={row.index + 1}\n aria-setsize={items().length}\n style={\n virtual()\n ? {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${height()}px`,\n transform: `translateY(${row.start}px)`,\n }\n : undefined\n }\n >\n <Parts.ItemText>{item().label}</Parts.ItemText>\n <Show when={item().description}>\n <span class=\"dds-choice-description\">\n {item().description}\n </span>\n </Show>\n </Parts.Item>\n );\n }}\n </For>\n </div>\n </Parts.Content>\n </Parts.Positioner>\n </Portal>\n )}\n </Show>\n </Parts.Root>\n );\n}\n"],"mappings":";;;;;;;;AAoDA,SAAgByC,EAAOC,GAAwC;CAC7D,IAAMC,IAAKlC,GAAe,GACpB,CAACmC,GAAUC,KAAerC,EAAakC,EAAMI,gBAAgB,EAAE,GAC/DC,UAAcL,EAAMK,SAASH,EAAS,GACtCI,IAAQzC,QAEVmC,EAAMO,MAAMC,MAAMvB,MAASA,EAAKoB,UAAUA,EAAM,CAAC,CAAC,EAAEC,UACnDN,EAAMS,gBAAgBJ,UAAUA,EAAM,IACnCL,EAAMS,eAAeH,QACrBD,EAAM,EACd,GACM,CAACK,IAAOC,KAAY7C,EAAakC,EAAMY,qBAAqBN,EAAM,CAAC,GACnEO,UAAmBb,EAAMa,cAAcH,GAAM,GAC7C,CAACI,GAAMC,KAAWjD,EAAa,EAAK,GACxC,CAACkD,IAAWC,KAAgBnD,EAA4B,IAAI,GAC1DoD,GACFE,GACI,CAACC,GAAQC,KAAaxD,EAAoC,IAAI,GAC9D,CAAC0D,GAAaC,MAAkB3D,EAA0B;CAChEI,SAAc;EAEZ,AAAIgD,KACFO,GACEP,EAAQS,QAAqB,2CAAuC,KAClET,EAAQU,cAAcC,IAC1B;CACJ,CAAC;CACD,IAAIC,IAAY,IACZC,IAAgC,MAChCC,IAAsD,MACpDG,MAAgBlC,MACpBD,EAAMO,MAAMC,MAAMvB,MAASA,EAAKoB,UAAUJ,CAAE,CAAC,EAAEK,UAC9CN,EAAMS,gBAAgBJ,UAAUJ,IAAKD,EAAMS,eAAeH,QAAQL,IAC/DmC,UAAgBpC,EAAMqC,YAAYrC,EAAMsC,UACxCC,WAAkB;EAAE,GAAG9D;EAAgB,GAAGuB,EAAMuC;CAAS,IACzDC,KAAYC,MAAiB;EAC7BT,IAAgBC,SAASpB,EAAW,KAAKmB,EAAeE,OAAOO,OAEnET,IAAiB,MACbhC,EAAMa,eAAe6B,KAAAA,KAAW/B,EAAS8B,CAAI,GACjDzC,EAAM2C,qBAAqBF,CAAI;CACjC,GACMG,KAAgBH,MAAiB;EACrC,IAAMI,IAAUhC,EAAW;EACvB4B,MAASI,MACTb,GAAgBC,SAASY,KAAWb,EAAeE,OAAOO,OAC9DT,IAAiB;GAAEC,MAAMY;GAASX,IAAIO;EAAK,GACvCzC,EAAMa,eAAe6B,KAAAA,IAAW/B,EAAS8B,CAAI,IAC5CzC,EAAM2C,qBAAqBF,CAAI;CACtC,GACMK,KAAYL,MAAiB;EAEjCzC,AADIA,EAAMK,UAAUqC,KAAAA,KAAWvC,EAAYsC,CAAI,GAC/CzC,EAAM+C,gBAAgBN,CAAI;CAC5B;CAIA7E,AAHAA,QAAmB;EACjBe,EAAgBqB,EAAMO,KAAK;CAC7B,CAAC,GACD3C,QAAmB;EACjB,AACEc,EAAsB,KACtB2B,EAAM,KACN,CAACL,EAAMO,MAAMyC,MAAM/D,MAASA,EAAKoB,UAAUA,EAAM,CAAC,KAClDL,EAAMS,gBAAgBJ,UAAUA,EAAM,KAEtC4C,QAAQC,KACN,iDAAiDC,KAAKC,UAAU/C,EAAM,CAAC,EAAC,2DAC1E;CACJ,CAAC;CACD,IAAIgD,IAAoB;EAAEhD,OAAOA,EAAM;EAAGC,OAAOA,EAAM;CAAE;CAWzD1C,AAVAA,QAAmB;EACjB,IAAMiF,IAAU;GAAExC,OAAOA,EAAM;GAAGC,OAAOA,EAAM;EAAE;EACjD,CACE+C,EAAkBhD,UAAUwC,EAAQxC,SACpCgD,EAAkB/C,UAAUuC,EAAQvC,WAEpC+C,IAAoBR,GACpBzE,SAAcwE,EAAaC,EAAQvC,KAAK,CAAC;CAE7C,CAAC,GACD1C,QAAmB;EACjB,IAAM0F,IAAiBtD,EAAMuD,MACvBA,IAAOD,IACRlC,GAAYQ,cAAc4B,eACzBF,CACF,IACAlC,GAAYmC;EAChB,IAAI,CAACA,GAAM;EAGX,IAAMG,KAASC,MACbE,iBAAiB;GACf,IAAIF,EAAMG,kBAAkB;GAC5B9D,EAAMF,cAAc;GACpB,IAAMiE,IAAa/D,EAAMK,SAASL,EAAMI,gBAAgB,IAClD4D,IAAa7B,GAAa4B,CAAU;GAM1C,AALAV,IAAoB;IAAEhD,OAAO0D;IAAYzD,OAAO0D;GAAW,GACvDhE,EAAMK,UAAUqC,KAAAA,KAAWvC,EAAY4D,CAAU,GACrDnB,EAAa5C,EAAMY,qBAAqBoD,CAAU,GAClDjD,EAAQ,EAAK,GACTG,aAAmBrB,qBAAkBqB,EAAQb,QAAQQ,EAAW,IAChEO,MAAYA,EAAWf,QAAQA,EAAM;EAC3C,CAAC;EAEHpC,AADAsF,EAAKU,iBAAiB,SAASP,CAAK,GACpCzF,QAAgBsF,EAAKW,oBAAoB,SAASR,CAAK,CAAC;CAC1D,CAAC;CACD,IAAMnD,IAAQ1C,QACZmC,EAAMjB,cACNiB,EAAMmE,eAAe,cACrBtD,EAAW,MAAMP,EAAM,IACnBN,EAAMO,MAAM6D,QAAQnF,MAClBe,EAAMhB,YACFgB,EAAMhB,UAAUC,GAAM4B,EAAW,CAAC,IAClC5B,EAAKqB,MACF+D,kBAAkB,CAAC,CACnBC,SAASzD,EAAW,CAAC,CAACwD,kBAAkB,CAAC,CAClD,IACArE,EAAMO,KACZ,GACMgE,KAAa1G,QACjBL,GAAqB;EACnB+C,OAAOA,EAAM;EACbiE,eAAevF,MAASA,EAAKqB;EAC7BmE,cAAcxF,MAASA,EAAKoB;EAC5BqE,iBAAiBzF,MAAS,CAAC,CAACA,EAAKoD;CACnC,CAAC,CACH,GACMsC,UAAgB,CAAC,CAAC3E,EAAM4E,gBACxBC,UAAe;EACnB,IAAMC,IAAa9E,EAAM4E,iBACrB5E,EAAM4E,eAAeG,aACrBrC,KAAAA;EACJ,OAAOsC,OAAOC,SAASH,CAAU,IAAII,KAAKC,IAAI,IAAIL,CAAW,IAAI;CACnE,GACMM,UACJ7E,EAAM,CAAC,CAAC8E,WAAWpG,MAASA,EAAKoB,UAAUW,GAAU,CAAC,GAClDsE,IAAchH,GAAkD;EACpE,IAAIiH,QAAQ;GACV,OAAOhF,EAAM,CAAC,CAACiF;EACjB;EACAC,kBAAkBpE;EAClBqE,cAAcb;EACd,IAAIc,WAAW;GACb,OAAO3F,EAAM4E,iBAAkB5E,EAAM4E,eAAee,YAAY,IAAK;EACvE;EACA,IAAIC,UAAU;GACZ,OAAOjB,EAAQ,KAAK7D,EAAK;EAC3B;EACA+E,aAAa;GAAEC,OAAO;GAAGjB,QAAQ;EAAI;EACrC,IAAIkB,iBAAiB;GACnB,IAAMC,IAASZ,EAAY;GAC3B,QAAQa,MAAiB;IACvB,IAAMC,IAAU3H,GAAsB0H,CAAK;IAE3C,OADID,KAAU,KAAK,CAACE,EAAQ5B,SAAS0B,CAAM,KAAGE,EAAQC,KAAKH,CAAM,GAC1DE,EAAQE,MAAMC,GAAGC,MAAMD,IAAIC,CAAC;GACrC;EACF;CACF,CAAC;CAcD1I,AAbAA,QAAmB;EACjB2C,EAAM;EACN,IAAMgG,IAASzF,EAAK;EAEpB,AADAG,EAAa,IAAI,GACb0D,EAAQ,KAAK4B,KACfjB,EAAYkB,cACVtB,KAAKC,IACH,GACA5E,EAAM,CAAC,CAAC8E,WAAWpG,MAASA,EAAKoB,UAAUA,EAAM,CAAC,CACpD,GACA,EAAEoG,OAAOzG,EAAMN,iBAAiB,WAAW,OAAO,CACpD;CACJ,CAAC,GACD9B,QAAmB;EACjB,IAAM8I,IAAUrF,EAAO;EACvB,IAAI,CAACrB,EAAMN,kBAAkB,CAACoB,EAAK,KAAK6D,EAAQ,KAAK,CAAC+B,GAAS;EAE/D,IAAMC,IAAQC,4BAA4B;GACxC,IAAMC,IAAWH,EAAQI,cACvB,8CACF;GACA,IAAI,CAACD,GAAU;GACf,IAAME,IAAOL,EAAQM,sBAAsB,GACzCC,IAAMJ,EAASG,sBAAsB;GACvCN,EAAQQ,aACND,EAAIE,MAAMJ,EAAKI,OAAOT,EAAQU,eAAeH,EAAIpC,UAAU;EAC/D,CAAC;EACD5G,QAAgBoJ,qBAAqBV,CAAK,CAAC;CAC7C,CAAC;CACD,IAAMW,IAAQtH,EAAMjB,aAAaxB,IAAIG,IAC/B6J,KAAO1J,QAAiB;EAC5B,IAAM2J,IAAS7C,EAAQ,IACnBW,EACGmC,gBAAgB,CAAC,CACjBC,KAAKT,OAAS;GAAEU,OAAOV,EAAIU;GAAOC,OAAOX,EAAIW;EAAM,EAAE,IACxDrH,EAAM,CAAC,CAACmH,KAAKG,GAAGF,OAAW;GAAEA;GAAOC,OAAO;EAAE,EAAE,GAC7C5B,IAASZ,EAAY;EAG3B,OAFIT,EAAQ,KAAKqB,KAAU,KAAK,CAACwB,EAAOxE,MAAMiE,MAAQA,EAAIU,UAAU3B,CAAM,KACxEwB,EAAOrB,KAAK;GAAEwB,OAAO3B;GAAQ4B,OAAO5B,IAASnB,EAAO;EAAE,CAAC,GAClD2C;CACT,CAAC,GACKM,WACJ9H,EAAM+H,UACFxF,EAAS,CAAC,CAACwF,UACX/H,EAAMgI,QACJ,OAAOhI,EAAMgI,SAAU,WACrBhI,EAAMgI,QACNzF,EAAS,CAAC,CAACyF,QACbzH,EAAM,CAAC,CAACiF,WAAW,IACjBjD,EAAS,CAAC,CAAC0F,QACX,IACJC,KAAY;EAChB,IAAI3D,aAAa;GACf,OAAOA,GAAW;EACpB;EACA,IAAIlE,QAAQ;GACV,OAAOA,EAAM,IAAI,CAACA,EAAM,CAAC,IAAI,CAAA;EAC/B;EACA,IAAIS,OAAO;GACT,OAAOA,EAAK,KAAK,CAACsB,EAAQ;EAC5B;EACA,IAAIC,WAAW;GACb,OAAOrC,EAAMqC;EACf;EACA,IAAIC,WAAW;GACb,OAAOtC,EAAMsC;EACf;EACA,IAAI9C,UAAU;GACZ,OAAOQ,EAAMR;EACf;EACA2I,eAAeC,MAA+B;GAC5C,AAAKhG,EAAQ,KAAGrB,EAAQqH,EAAQtH,IAAI;EACtC;EACAiC,gBAAgBqF,MAAiC;GAC/C,IAAIhG,EAAQ,KAAKN,GAAW;GAC5B,IAAMW,IAAO2F,EAAQ/H,MAAM,MAAM;GACjC,AAAIoC,MAASpC,EAAM,KAAGyC,EAASL,CAAI;EACrC;EACA4F,oBAAoBD,MAClBnH,EAAamH,EAAQE,gBAAgB;EACvC,IAAIC,kBAAkB;GACpB,OAAO5D,EAAQ,KACV,EAAEgD,eACDrC,EAAYkB,cAAcmB,GAAO,EAAElB,OAAO,OAAO,CAAC,IACpD/D,KAAAA;EACN;EACA,IAAI8F,cAAc;GAChB,OAAO;IACLC,WAAW;IACXE,WAAW;IACXC,QAAQ;IACRC,UAAUrH,EAAY,CAAC,EAAEsH,QACvB,2CACF,IACK,UACA;IACLC,kBAAkB,CAAC,CAACvH,EAAY,CAAC,EAAEsH,QACjC,2CACF;GACF;EACF;CACF,GACME,KAAahJ,EAAMjB,aACrB;EACE,IAAI8B,aAAa;GACf,OAAOA,EAAW;EACpB;EACA8B,qBAAqByF,MAGf;GAEJ,IAAMc,IACJnH,MAAmBqG,EAAQvH,cAC3BuH,EAAQa,WAAW,kBACnB/H,GAASU,cAAcuH,kBAAkBjI;GAC3Ca,IAAiB,MACbmH,MACA,CAAC9G,EAAQ,KAAKgG,EAAQvH,eAAeA,EAAW,KAClD2B,EAAS4F,EAAQvH,UAAU;EAC/B;EACAuI,mBAAmB;EACnB,GAAIpJ,EAAMP,gBACN,EAAE4J,eAAe,gBAAyB,IAC1C,CAAC;CACP,IACA,CAAC;CACL,OAAAC,EACGhC,EAAMiC,MAAIC,EACLtB,IACAc,IAAU;EAAA,IACd/I,KAAE;GAAA,OAAED,EAAMC,MAAMA;EAAE;EAAA,IAAA,QAAA;GAAA,OACXyJ,QAAA,CAAA,CAAA1J,EAAMT,SAAS,CAAA,CAAA,IAAG,cAAcS,EAAMT,cAAc;EAAY;EAAA,IAAA,yBAAA;GAAA,OACjDS,EAAM4J,kBAAkB;EAAS;EAAA,IAAA,mBAAA;GAAA,OACvCvJ,EAAM,KAAKQ,EAAW,IAAI,KAAK6B,KAAAA;EAAS;EAAA,IAAAoH,WAAA;GAAA,OAAA;IAAAR,EAEvDnL,GAAI;KAAA,IAAC4L,OAAI;MAAA,OAAE/J,EAAMM;KAAK;KAAA,IAAAwJ,WAAA;MAAA,OAAAR,EACpBhC,EAAM0C,OAAK;OAAA,OAAA;OAA0BC,eAAe/I,GAASgJ,MAAM;OAAC,IAAAJ,WAAA;QAAA,OAClE9J,EAAMM;OAAK;MAAA,CAAA;KAAA;IAAA,CAAA;IAAAgJ,EAGfhC,EAAM6C,SAAO;KAAA,OAAA;KAAA,IAAAL,WAAA;MAAA,OAAA;OAAAR,EACXnL,GAAI;QAAA,IAAC4L,OAAI;SAAA,OAAE/J,EAAMjB;QAAU;QAAA,IAAA+K,WAAA;SAAA,OAAAR,EACzB/L,EAAE6M,OAAK;UAAAC,MACAC,MAAS;WACbpJ,IAAUoJ;UACZ;UAAC,OAAA;UAAA,IAAA,eAAA;WAAA,OAEWtK,EAAM;UAAa;UAAA,IAAA,oBAAA;WAAA,OACdA,EAAM;UAAkB;UAAA,IAAA,qBAAA;WAAA,OACvBA,EAAM;UAAmB;UAAA,IAAA,kBAAA;WAAA,OAC5BA,EAAM2K;UAAQ;UAAA,IAC7BC,cAAW;WAAA,OAAE5K,EAAM4K;UAAW;UAAA,IAC9BjL,YAAS;WAAA,OAAEK,EAAML;UAAS;UAC1BkL,0BAA0B;WACxB/I,IAAY;UACd;UACAgJ,wBAAwB;WACtBhJ,IAAY;UACd;UACAiJ,YAAYpH,MAAU;WACpB,AAAI7B,KAAa6B,EAAMqH,QAAQ,YAC7BrH,EAAMsH,eAAe,GACrBtH,EAAMuH,gBAAgB;UAE1B;UACAC,SAASxH,MAAU;WACjB,IAAI3D,EAAMb,aAAa;YAErB4C,IAAiB4B,EAAMyH,cAAc/K;YACrC,IAAMoC,IAAOL,EAAQ,IACjB,OACApC,EAAMb,YAAY4C,CAAc;YAEpCa,AADIH,MAAS,QAAQA,MAASpC,EAAM,KAAGyC,EAASL,CAAI,GACpDG,EAAatC,EAAM,CAAC;YACpB;WACF;WACA,AAAID,EAAM,KAAGuC,EAAatC,EAAM,CAAC;UACnC;SAAC,CAAA;QAAA;OAAA,CAAA;OAAAgJ,EAGJhC,EAAM+D,SAAO;QAAAhB,MACNC,MAAS;SACb,AAAKtK,EAAMjB,eAAYmC,IAAUoJ;QACnC;QAAC,OAAA;QAAA,IAAA,eAAA;SAAA,OAEWZ,QAAA,CAAA,CAAA1J,EAAMjB,UAAU,CAAA,CAAA,IAAGwD,EAAS,CAAC,CAACzB,OAAOd,EAAM;QAAa;QAAA,IAAA,oBAAA;SAAA,OACnDA,EAAM;QAAkB;QAAA,IAAA,qBAAA;SAAA,OACvBA,EAAM;QAAmB;QAAA,IAAA,kBAAA;SAAA,OAC5BA,EAAM2K;QAAQ;QAAA,IAAAb,WAAA;SAAA,OAE5BJ,QAAA,CAAA,CAAA1J,EAAMjB,UAAU,CAAA,CAAA,IACf2K,QAAA,CAAA,CAAA1J,EAAMX,cAAc,CAAA,CAAA,IAClBW,EAAMX,eAAe,IAErB,aACD;UAAA,IAAAiM,IAAAC,EAAAC,EAAA;UAGiD,OAHjDC,EAAAH,SAGEhL,EAAM,KAAKN,EAAM4K,eAAerI,EAAS,CAAC,CAACzB,IAAI,GAAAwK;SAAA,EAAA,CAAA;QAEnD;OAAA,CAAA;OAAAhC,EAEFnL,GAAI;QAAA,IAAC4L,OAAI;SAAA,OAAEL,QAAA,CAAA,EAAA1J,EAAM0L,aAAa,CAACtJ,EAAQ,EAAC,CAAA,CAAA,MAAK/B,EAAM,KAAKQ,EAAW;QAAE;QAAA,IAAAiJ,WAAA;SAAA,IAAA6B,IAAAJ,EAAAK,EAAA;SAItC,OAJsCD,EAAAE,gBAMnD;UAIb3K,AAHA4B,EAAS,EAAE,GACXN,EAAS,EAAE,GACXzB,EAAQ,EAAK,GACbG,GAASgJ,MAAM;SACjB,GAACyB,EAAAG,iBANenI,MAAUA,EAAMsH,eAAe,GAACc,QAAAC,EAAAL,GAAA,cADpCpJ,EAAS,CAAC,CAAC0J,KAAK,CAAA,GAAAC,EAAA,GAAAP;QAAA;OAAA,CAAA;MAAA;KAAA;IAAA,CAAA;WAAA;KAAA,IAAAQ,IAAAZ,EAAAa,EAAA;KAuC/BD,AAvC+BA,EAAAlI,iBAAA,YAoCpBN,MAAU;MAEpBzC,AADAyC,EAAMsH,eAAe,GACrB/J,GAASgJ,MAAM;KACjB,CAAC,GAAAiC,EAAAE,WANS1I,MAAU;MAClBA,EAAMyH,cAAc/K,QAAQA,EAAM;KACpC;KAAC,IAAAiM,IArBIlL;KAgBS,OAhBC,OAAAkL,KAAA,aAAAC,GAAAD,GAAAH,CAAA,IAAV/K,IAAU+K,GAAAJ,GAAAS,MAAA;MAAA,IAAAC,IAcTzM,EAAM0M,MAAIC,IACV3M,EAAMuD,MAAIqJ,IAEN5M,EAAM2K,UAAQkC,IACd7M,EAAMqC;MAAQ,OAAAoK,MAAAD,EAAAM,KAAAd,EAAAG,GAAA,QAAAK,EAAAM,IAAAL,CAAA,GAAAE,MAAAH,EAAAO,KAAAf,EAAAG,GAAA,QAAAK,EAAAO,IAAAJ,CAAA,GAAAC,MAAAJ,EAAAnG,KAAA2G,EAAAb,GAAA,YAAAK,EAAAnG,IAAAuG,CAAA,GAAAC,MAAAL,EAAAS,KAAAD,EAAAb,GAAA,YAAAK,EAAAS,IAAAJ,CAAA,GAAAL;KAAA,GAAA;MAAAM,GAAApK,KAAAA;MAAAqK,GAAArK,KAAAA;MAAA2D,GAAA3D,KAAAA;MAAAuK,GAAAvK,KAAAA;KAAA,CAAA,GAAAqJ,QAAAiB,EAAAb,GAAA,SAFjB9L,EAAM,CAAC,CAAA,GAAA6L,EAAA,GAAAC;IAAA,EAAA,CAAA;WAAA;KAAA,IAAAe,IAAA3B,EAAA4B,CAAA,GAAAC,IAAAF,EAAAG,YAAA,CAAAC,GAAAC,KAAAC,EAAAJ,EAAAK,WAAA,GAAAC,IAAAJ,EAAAG,aAAA,CAAAE,GAAAC,KAAAJ,EAAAE,EAAAD,WAAA;KAmBO,OAnBPhC,EAAAyB,GAYbpF,IAAMwF,GAAAC,CAAA,GAAA9B,EAAAyB,GAAA5D,EACNnL,GAAI;MAAA,IAAC4L,OAAI;OAAA,OAAEL,QAAA,CAAA,CAAA1J,EAAMgI,KAAK,CAAA,CAAA,KAAIhI,EAAM6N;MAAO;MAAA,IAAA/D,WAAA;OAAA,IAAAgE,IAAAvC,EAAAwC,EAAA;OAMnB,OANmBD,EAAAjC,gBAIrB7L,EAAM6N,UAAU,GAACpC,EAAAqC,SAE/BvL,EAAS,CAAC,CAACyL,KAAK,GAAA9B,EAAA,GAAA4B;MAAA;KAAA,CAAA,GAAAH,GAAAC,CAAA,GAAAV;IAAA,EAAA,CAAA;IAAA5D,EAItBnL,GAAI;KAAA,IAAC4L,OAAI;MAAA,OAAEvI,EAAY;KAAC;KAAAsI,WACrBmE,MAAK3E,EACJ3L,GAAM;MAAA,IAACsQ,QAAK;OAAA,OAAEA,EAAM;MAAC;MAAA,IAAAnE,WAAA;OAAA,OAAAR,EACnBhC,EAAM4G,YAAU;QAAA,OAAA;QAAA,IAAApE,WAAA;SAAA,OAAAR,EACdhC,EAAM6G,SAAO;UAAA9D,KACP/I;UAAS,OAAA;UAEd8M,OAAO;WACL,cAAc;WACdC,UAAU;UACZ;UAAC,IAAAvE,WAAA;WAAA,IAAAwE,IAAA/C,EAAAgD,EAAA;WASgB,OAThB9C,EAAA6C,GAAAhF,EAYEtL,GAAG;YAAA,IAACwQ,OAAI;aAAA,OAAEjH,GAAK;YAAC;YAAAuC,WACb7C,MAAQ;aACR,IAAMhI,UAAasB,EAAM,CAAC,CAAC0G,EAAIU;aAC/B,OAAA2B,EACGhC,EAAMmH,MAAI;cAAA,IACTxP,OAAI;eAAA,OAAEA,EAAK;cAAC;cAAA,OAAA;cAAA,IAAA,kBAAA;eAAA,OAEGgI,EAAIU,QAAQ;cAAC;cAAA,IAAA,iBAAA;eAAA,OACdpH,EAAM,CAAC,CAACiF;cAAM;cAAA,IAC5B4I,QAAK;eAAA,OACH1E,QAAA,CAAA,CAAA/E,EAAQ,CAAC,CAAA,CAAA,IACL;gBACEiK,UAAU;gBACVzH,KAAK;gBACL0H,MAAM;gBACN/I,OAAO;gBACPjB,QAAQ,GAAGA,EAAO,EAAC;gBACnBiK,WAAW,cAAc7H,EAAIW,MAAK;eACpC,IACAlF,KAAAA;cAAS;cAAA,IAAAoH,WAAA;eAAA,OAAA,CAAAR,EAGdhC,EAAMyH,UAAQ,EAAA,IAAAjF,WAAA;gBAAA,OAAE7K,EAAK,CAAC,CAACqB;eAAK,EAAA,CAAA,GAAAgJ,EAC5BnL,GAAI;gBAAA,IAAC4L,OAAI;iBAAA,OAAE9K,EAAK,CAAC,CAAC+P;gBAAW;gBAAA,IAAAlF,WAAA;iBAAA,IAAAmF,IAAA1D,EAAA2D,EAAA;iBAEP,OAFOzD,EAAAwD,SAEzBhQ,EAAK,CAAC,CAAC+P,WAAW,GAAAC;gBAAA;eAAA,CAAA,CAAA;cAAA;aAAA,CAAA;YAK7B;WAAC,CAAA,CAAA,GAAAlD,GAAAoD,MAAAC,EAAAd,GAtCD3J,EAAQ,IACJ;YACEE,QAAQ,GAAGS,EAAY+J,aAAa,EAAC;YACrCT,UAAU;WACZ,IACAlM,KAAAA,GAASyM,CAAA,CAAA,GAAAb;UAAA;SAAA,CAAA;QAAA;OAAA,CAAA;MAAA;KAAA,CAAA;IAuCxB,CAAA;GAAA;EAAA;CAAA,CAAA,CAAA;AAIT;AAACgB,EAAA;CAAA;CAAA;CAAA;AAAA,CAAA"}
@@ -0,0 +1,23 @@
1
+ //#region src/choice-types.ts
2
+ function e(e) {
3
+ let t = /* @__PURE__ */ new Set();
4
+ for (let n of e) {
5
+ if (!n.value || t.has(n.value)) throw Error(`DDS choice: option IDs must be nonempty and unique (${JSON.stringify(n.value)})`);
6
+ t.add(n.value);
7
+ }
8
+ }
9
+ var t = {
10
+ open: "선택 열기",
11
+ clear: "선택 지우기",
12
+ loading: "불러오는 중",
13
+ empty: "결과 없음",
14
+ error: "불러오지 못했습니다",
15
+ retry: "다시 시도"
16
+ };
17
+ function n() {
18
+ return globalThis.process?.env?.NODE_ENV !== "production";
19
+ }
20
+ //#endregion
21
+ export { n, e as r, t };
22
+
23
+ //# sourceMappingURL=choice-types-kSaEnZPr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-types-kSaEnZPr.js","names":[],"sources":["../src/choice-types.ts"],"sourcesContent":["export interface ChoiceOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\nexport interface ChoiceMessages {\n open?: string;\n clear?: string;\n loading?: string;\n empty?: string;\n error?: string;\n retry?: string;\n}\nexport type ChoiceVirtualization =\n | false\n | { itemHeight?: number; overscan?: number };\nexport interface ChoiceProps {\n items: ChoiceOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n selectedOption?: ChoiceOption;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n id?: string;\n label?: string;\n labelPlacement?: \"outside\" | \"inside\" | \"hidden\";\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n placeholder?: string;\n clearable?: boolean;\n messages?: ChoiceMessages;\n virtualization?: ChoiceVirtualization;\n}\nexport interface ComboboxProps extends ChoiceProps {\n inputValue?: string;\n defaultInputValue?: string;\n onInputValueChange?: (value: string) => void;\n filterMode?: \"local\" | \"external\";\n loading?: boolean;\n error?: string | boolean;\n onRetry?: () => void;\n}\nexport interface SelectPickerProps extends ChoiceProps {}\n\nexport function validateOptions(items: ChoiceOption[]) {\n const ids = new Set<string>();\n for (const item of items) {\n if (!item.value || ids.has(item.value))\n throw new Error(\n `DDS choice: option IDs must be nonempty and unique (${JSON.stringify(item.value)})`,\n );\n ids.add(item.value);\n }\n}\nexport const choiceMessages: Required<ChoiceMessages> = {\n open: \"선택 열기\",\n clear: \"선택 지우기\",\n loading: \"불러오는 중\",\n empty: \"결과 없음\",\n error: \"불러오지 못했습니다\",\n retry: \"다시 시도\",\n};\n\n/** Read the consumer environment at runtime, rather than the library build mode. */\nexport function choiceWarningsEnabled() {\n return (\n (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV !== \"production\"\n );\n}\n"],"mappings":";AAkDA,SAAgB,EAAgB,GAAuB;CACrD,IAAM,oBAAM,IAAI,IAAY;CAC5B,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAI,CAAC,EAAK,SAAS,EAAI,IAAI,EAAK,KAAK,GACnC,MAAU,MACR,uDAAuD,KAAK,UAAU,EAAK,KAAK,EAAE,EACpF;EACF,EAAI,IAAI,EAAK,KAAK;CACpB;AACF;AACA,IAAa,IAA2C;CACtD,MAAM;CACN,OAAO;CACP,SAAS;CACT,OAAO;CACP,OAAO;CACP,OAAO;AACT;AAGA,SAAgB,IAAwB;CACtC,OACG,WAA6D,SAAS,KACnE,aAAa;AAErB"}
package/dist/combobox.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./choice-BPMiJlPJ.js";
1
+ import { t as e } from "./choice-CTNeFOVo.js";
2
2
  import { createComponent as t, mergeProps as n } from "solid-js/web";
3
3
  //#region src/combobox.tsx
4
4
  function r(r) {
@@ -1,4 +1,4 @@
1
- import { t as Choice } from "./assets/choice-DoXiK8nc.js";
1
+ import { t as Choice } from "./assets/choice-DPmk9AHn.js";
2
2
  import { createComponent, mergeProps } from "solid-js/web";
3
3
  //#region src/combobox.tsx
4
4
  function Combobox(props) {