@devslab/dds-solid 0.21.2 → 0.22.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 (72) hide show
  1. package/README.ko.md +6 -0
  2. package/README.md +6 -0
  3. package/dist/assets/calendar-view-1RO2mtf1.js +456 -0
  4. package/dist/assets/calendar-view-1RO2mtf1.js.map +1 -0
  5. package/dist/assets/choice-DoXiK8nc.js +443 -0
  6. package/dist/assets/choice-DoXiK8nc.js.map +1 -0
  7. package/dist/assets/utils-Ou0UJRlO.js +11 -0
  8. package/dist/assets/utils-Ou0UJRlO.js.map +1 -0
  9. package/dist/calendar-view-CTBTPB4T.js +444 -0
  10. package/dist/calendar-view-CTBTPB4T.js.map +1 -0
  11. package/dist/calendar-view.d.ts +16 -0
  12. package/dist/calendar-view.d.ts.map +1 -0
  13. package/dist/calendar.d.ts +19 -0
  14. package/dist/calendar.d.ts.map +1 -0
  15. package/dist/calendar.js +95 -0
  16. package/dist/calendar.js.map +1 -0
  17. package/dist/calendar.server.js +95 -0
  18. package/dist/calendar.server.js.map +1 -0
  19. package/dist/choice-BPMiJlPJ.js +395 -0
  20. package/dist/choice-BPMiJlPJ.js.map +1 -0
  21. package/dist/choice-types.d.ts +56 -0
  22. package/dist/choice-types.d.ts.map +1 -0
  23. package/dist/combobox.d.ts +4 -0
  24. package/dist/combobox.d.ts.map +1 -0
  25. package/dist/combobox.js +10 -0
  26. package/dist/combobox.js.map +1 -0
  27. package/dist/combobox.server.js +10 -0
  28. package/dist/combobox.server.js.map +1 -0
  29. package/dist/date-only.d.ts +36 -0
  30. package/dist/date-only.d.ts.map +1 -0
  31. package/dist/date-picker.d.ts +10 -1
  32. package/dist/date-picker.d.ts.map +1 -1
  33. package/dist/date-picker.js +258 -0
  34. package/dist/date-picker.js.map +1 -0
  35. package/dist/date-picker.server.js +260 -0
  36. package/dist/date-picker.server.js.map +1 -0
  37. package/dist/dropdown-menu.d.ts +31 -0
  38. package/dist/dropdown-menu.d.ts.map +1 -0
  39. package/dist/dropdown-menu.js +101 -0
  40. package/dist/dropdown-menu.js.map +1 -0
  41. package/dist/dropdown-menu.server.js +111 -0
  42. package/dist/dropdown-menu.server.js.map +1 -0
  43. package/dist/index.d.ts +6 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +232 -647
  46. package/dist/index.js.map +1 -1
  47. package/dist/input.d.ts +26 -0
  48. package/dist/input.d.ts.map +1 -0
  49. package/dist/input.js +130 -0
  50. package/dist/input.js.map +1 -0
  51. package/dist/input.server.js +120 -0
  52. package/dist/input.server.js.map +1 -0
  53. package/dist/internal/choice.d.ts +5 -0
  54. package/dist/internal/choice.d.ts.map +1 -0
  55. package/dist/popover.d.ts +22 -0
  56. package/dist/popover.d.ts.map +1 -0
  57. package/dist/popover.js +76 -0
  58. package/dist/popover.js.map +1 -0
  59. package/dist/popover.server.js +79 -0
  60. package/dist/popover.server.js.map +1 -0
  61. package/dist/select-picker.d.ts +4 -0
  62. package/dist/select-picker.d.ts.map +1 -0
  63. package/dist/select-picker.js +10 -0
  64. package/dist/select-picker.js.map +1 -0
  65. package/dist/select-picker.server.js +10 -0
  66. package/dist/select-picker.server.js.map +1 -0
  67. package/dist/server.js +28 -445
  68. package/dist/server.js.map +1 -1
  69. package/dist/utils-oKxhg9RG.js +11 -0
  70. package/dist/utils-oKxhg9RG.js.map +1 -0
  71. package/package.json +63 -6
  72. package/styles.css +10 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.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,EAASC,GAAsB;CAC7C,IAAMX,UAAeW,EAAMX,UAAU,SACnCY,UAAalB,EAAaM,EAAO,GAAGW,EAAMJ,QAAQ;CACpD,OAAAM,EACGxB,EAAcyB,MAAI;EAAA,OAAA;EAAA,IAAA,eAAA;GAAA,OAELH,EAAMd;EAAK;EACvBmB,MAAI;EACJC,QAAM;EAAA,IACNjB,SAAM;GAAA,OAAEA,EAAO;EAAC;EAAA,IAChBC,WAAQ;GAAA,OAAEU,EAAMV,YAAY;EAAY;EAAA,IACxCG,WAAQ;GAAA,OAAEO,EAAMP;EAAQ;EAAA,IACxBC,WAAQ;GAAA,OAAEM,EAAMN;EAAQ;EAAA,IACxBH,MAAG;GAAA,OACDgB,QAAA,CAAA,EAAAP,EAAMT,OAAOV,EAAemB,EAAMT,GAAG,EAAC,CAAA,CAAA,IAClCZ,EAAUqB,EAAMT,GAAG,IACnBiB,KAAAA;EAAS;EAAA,IAEfhB,MAAG;GAAA,OACDe,QAAA,CAAA,EAAAP,EAAMR,OAAOX,EAAemB,EAAMR,GAAG,EAAC,CAAA,CAAA,IAClCb,EAAUqB,EAAMR,GAAG,IACnBgB,KAAAA;EAAS;EAAA,IAEfb,cAAW;GAAA,OAAEK,EAAML,eAAe;EAAC;EACnCc,SAAO;EACPC,SAAO;EACPC,YAAU;EAAA,IACVxB,QAAK;GAAA,OAAEoB,QAAA,CAAA,CAAA1B,EAAemB,EAAMb,KAAK,CAAC,CAAA,CAAA,IAAG,CAACR,EAAUqB,EAAMb,KAAK,CAAC,IAAI,CAAA;EAAE;EAAA,IAClEyB,eAAY;GAAA,OAAE;IACZC,UAAUC,MAAUb,EAAK,CAAC,CAACc,WAAWD,EAAME,SAAS;IACrDC,cAAchB,EAAK,CAAC,CAACiB;GACvB;EAAC;EACDC,gBAAgBC,MAAY;GAC1B,IAAMC,IAAOD,EAAQjC,MAAM,EAAE,EAAEmC,SAAS,KAAK;GAC7C,AACE,CAACtB,EAAMP,YACP,CAACO,EAAMN,YACPZ,EAAcuC,GAAM,IAAOrB,EAAMT,KAAKS,EAAMR,KAAKH,EAAO,CAAC,CAAC,CAACkC,SAE3DvB,EAAMZ,SAASiC,CAAI;EACvB;EAAC,IAAAG,WAAA;GAAA,OAAAtB,EAEAxB,EAAc+C,SAAO;IAAA,OAAA;IAAA,IAAA,eAAA;KAAA,OAERzB,EAAMd;IAAK;IAAA,IAAAsC,WAAA;KAAA,OAAAtB,EAEtBtB,GAAY;MAAA,IACXU,WAAQ;OAAA,OAAEU,EAAMV;MAAQ;MAAA,IACxBC,MAAG;OAAA,OAAES,EAAMT;MAAG;MAAA,IACdC,MAAG;OAAA,OAAEQ,EAAMR;MAAG;MAAA,IACdH,SAAM;OAAA,OAAEA,EAAO;MAAC;MAAA,IAChBO,WAAQ;OAAA,OAAEI,EAAMJ;MAAQ;MAAA,IACxBH,WAAQ;OAAA,OAAEO,EAAMP;MAAQ;MAAA,IACxBC,WAAQ;OAAA,OAAEM,EAAMN;MAAQ;MAAA,IACxBG,YAAS;OAAA,OAAEG,EAAMH;MAAS;MAAA,IAC1B6B,YAAS;OAAA,OAAE1B,EAAMF;MAAS;KAAA,CAAA;IAAA;GAAA,CAAA;EAAA;CAAA,CAAA;AAKpC"}
@@ -0,0 +1,95 @@
1
+ import { a as isCalendarDate, r as dateMessages, s as validateInput, t as CalendarView } from "./assets/calendar-view-1RO2mtf1.js";
2
+ import { createComponent, memo } from "solid-js/web";
3
+ import { DatePicker, parseDate } from "@ark-ui/solid/date-picker";
4
+ //#region src/calendar.tsx
5
+ function Calendar(props) {
6
+ const locale = () => props.locale ?? "ko-KR", text = () => dateMessages(locale(), props.messages);
7
+ return createComponent(DatePicker.Root, {
8
+ "class": "dds-calendar",
9
+ get ["aria-label"]() {
10
+ return props.label;
11
+ },
12
+ role: "group",
13
+ inline: true,
14
+ get locale() {
15
+ return locale();
16
+ },
17
+ get timeZone() {
18
+ return props.timeZone ?? "Asia/Seoul";
19
+ },
20
+ get disabled() {
21
+ return props.disabled;
22
+ },
23
+ get readOnly() {
24
+ return props.readOnly;
25
+ },
26
+ get min() {
27
+ return memo(() => !!(props.min && isCalendarDate(props.min)))() ? parseDate(props.min) : void 0;
28
+ },
29
+ get max() {
30
+ return memo(() => !!(props.max && isCalendarDate(props.max)))() ? parseDate(props.max) : void 0;
31
+ },
32
+ get startOfWeek() {
33
+ return props.startOfWeek ?? 0;
34
+ },
35
+ minView: "day",
36
+ maxView: "day",
37
+ fixedWeeks: true,
38
+ get value() {
39
+ return memo(() => !!isCalendarDate(props.value))() ? [parseDate(props.value)] : [];
40
+ },
41
+ get translations() {
42
+ return {
43
+ dayCell: (state) => text().selectDate(state.valueText),
44
+ clearTrigger: text().clear
45
+ };
46
+ },
47
+ onValueChange: (details) => {
48
+ const next = details.value[0]?.toString() ?? "";
49
+ if (!props.disabled && !props.readOnly && validateInput(next, false, props.min, props.max, locale()).valid) props.onChange(next);
50
+ },
51
+ get children() {
52
+ return createComponent(DatePicker.Content, {
53
+ "class": "dds-date-picker-content",
54
+ get ["aria-label"]() {
55
+ return props.label;
56
+ },
57
+ get children() {
58
+ return createComponent(CalendarView, {
59
+ get timeZone() {
60
+ return props.timeZone;
61
+ },
62
+ get min() {
63
+ return props.min;
64
+ },
65
+ get max() {
66
+ return props.max;
67
+ },
68
+ get locale() {
69
+ return locale();
70
+ },
71
+ get messages() {
72
+ return props.messages;
73
+ },
74
+ get disabled() {
75
+ return props.disabled;
76
+ },
77
+ get readOnly() {
78
+ return props.readOnly;
79
+ },
80
+ get showToday() {
81
+ return props.showToday;
82
+ },
83
+ get showClear() {
84
+ return props.clearable;
85
+ }
86
+ });
87
+ }
88
+ });
89
+ }
90
+ });
91
+ }
92
+ //#endregion
93
+ export { Calendar };
94
+
95
+ //# sourceMappingURL=calendar.server.js.map
@@ -0,0 +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"}
@@ -0,0 +1,395 @@
1
+ import { For as e, Show as t, createEffect as n, createMemo as r, createSignal as i, createUniqueId as a, onCleanup as o, onMount as s, untrack as c } from "solid-js";
2
+ import { Portal as ee, createComponent as l, delegateEvents as u, effect as d, getNextElement as f, getNextMarker as p, insert as m, memo as h, mergeProps as te, runHydrationEvents as g, setAttribute as _, setProperty as v, style as y, template as b, use as ne } from "solid-js/web";
3
+ import { Combobox as x, createListCollection as re } from "@ark-ui/solid/combobox";
4
+ import { Select as ie } from "@ark-ui/solid/select";
5
+ import { createVirtualizer as ae, defaultRangeExtractor as oe } from "@tanstack/solid-virtual";
6
+ //#region src/choice-types.ts
7
+ function S(e) {
8
+ let t = /* @__PURE__ */ new Set();
9
+ for (let n of e) {
10
+ if (!n.value || t.has(n.value)) throw Error(`DDS choice: option IDs must be nonempty and unique (${JSON.stringify(n.value)})`);
11
+ t.add(n.value);
12
+ }
13
+ }
14
+ var se = {
15
+ open: "선택 열기",
16
+ clear: "선택 지우기",
17
+ loading: "불러오는 중",
18
+ empty: "결과 없음",
19
+ error: "불러오지 못했습니다",
20
+ retry: "다시 시도"
21
+ };
22
+ function ce() {
23
+ return globalThis.process?.env?.NODE_ENV !== "production";
24
+ }
25
+ //#endregion
26
+ //#region src/internal/choice.tsx
27
+ var le = /*#__PURE__*/ b("<button class=dds-choice-clear type=button>×"), ue = /*#__PURE__*/ b("<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>"), de = /*#__PURE__*/ b("<button class=dds-choice-retry type=button>"), fe = /*#__PURE__*/ b("<div class=dds-choice-status role=status aria-live=polite><!$><!/><!$><!/>"), C = /*#__PURE__*/ b("<span class=dds-choice-value>"), w = /*#__PURE__*/ b("<div>"), pe = /*#__PURE__*/ b("<span class=dds-choice-description>");
28
+ function T(u) {
29
+ let b = a(), [T, E] = i(u.defaultValue ?? ""), D = () => u.value ?? T(), O = r(() => u.items.find((e) => e.value === D())?.label ?? (u.selectedOption?.value === D() ? u.selectedOption.label : D())), [me, k] = i(u.defaultInputValue ?? O()), A = () => u.inputValue ?? me(), [j, M] = i(!1), [N, P] = i(null), F, I, [L, R] = i(null), [z, he] = i();
30
+ s(() => {
31
+ F && he(F.closest("[role=\"dialog\"], [role=\"alertdialog\"]") ?? F.ownerDocument.body);
32
+ });
33
+ let B = !1, V = null, ge = (e) => u.items.find((t) => t.value === e)?.label ?? (u.selectedOption?.value === e ? u.selectedOption.label : e), H = () => u.disabled || u.readOnly, U = () => ({
34
+ ...se,
35
+ ...u.messages
36
+ }), W = (e) => {
37
+ (V?.from !== A() || V.to !== e) && (V = null, u.inputValue === void 0 && k(e), u.onInputValueChange?.(e));
38
+ }, G = (e) => {
39
+ let t = A();
40
+ e !== t && (V?.from !== t || V.to !== e) && (V = {
41
+ from: t,
42
+ to: e
43
+ }, u.inputValue === void 0 ? k(e) : u.onInputValueChange?.(e));
44
+ }, K = (e) => {
45
+ u.value === void 0 && E(e), u.onValueChange?.(e);
46
+ };
47
+ n(() => {
48
+ S(u.items);
49
+ }), n(() => {
50
+ ce() && D() && !u.items.some((e) => e.value === D()) && u.selectedOption?.value !== D() && console.warn(`DDS choice: no label supplied for selected ID ${JSON.stringify(D())}; pass selectedOption when the selection is outside items.`);
51
+ });
52
+ let q = {
53
+ value: D(),
54
+ label: O()
55
+ };
56
+ n(() => {
57
+ let e = {
58
+ value: D(),
59
+ label: O()
60
+ };
61
+ (q.value !== e.value || q.label !== e.label) && (q = e, c(() => G(e.label)));
62
+ }), n(() => {
63
+ let e = u.form, t = e ? I?.ownerDocument.getElementById(e) : I?.form;
64
+ if (!t) return;
65
+ let n = (e) => queueMicrotask(() => {
66
+ if (e.defaultPrevented) return;
67
+ let t = u.value ?? u.defaultValue ?? "", n = ge(t);
68
+ q = {
69
+ value: t,
70
+ label: n
71
+ }, u.value === void 0 && E(t), G(u.defaultInputValue ?? n), M(!1), F instanceof HTMLInputElement && (F.value = A()), I && (I.value = D());
72
+ });
73
+ t.addEventListener("reset", n), o(() => t.removeEventListener("reset", n));
74
+ });
75
+ let J = r(() => u.searchable && u.filterMode !== "external" && A() !== O() ? u.items.filter((e) => e.label.toLocaleLowerCase().includes(A().toLocaleLowerCase())) : u.items), _e = r(() => re({
76
+ items: J(),
77
+ itemToString: (e) => e.label,
78
+ itemToValue: (e) => e.value,
79
+ isItemDisabled: (e) => !!e.disabled
80
+ })), Y = () => !!u.virtualization, X = () => {
81
+ let e = u.virtualization ? u.virtualization.itemHeight : void 0;
82
+ return Number.isFinite(e) ? Math.max(40, e) : 40;
83
+ }, Z = () => J().findIndex((e) => e.value === N()), Q = ae({
84
+ get count() {
85
+ return J().length;
86
+ },
87
+ getScrollElement: L,
88
+ estimateSize: X,
89
+ get overscan() {
90
+ return u.virtualization ? u.virtualization.overscan ?? 5 : 5;
91
+ },
92
+ get enabled() {
93
+ return Y() && j();
94
+ },
95
+ initialRect: {
96
+ width: 0,
97
+ height: 320
98
+ },
99
+ get rangeExtractor() {
100
+ let e = Z();
101
+ return (t) => {
102
+ let n = oe(t);
103
+ return e >= 0 && !n.includes(e) && n.push(e), n.sort((e, t) => e - t);
104
+ };
105
+ }
106
+ });
107
+ n(() => {
108
+ J();
109
+ let e = j();
110
+ P(null), Y() && e && Q.scrollToIndex(Math.max(0, J().findIndex((e) => e.value === D())), { align: "auto" });
111
+ });
112
+ let $ = u.searchable ? x : ie, ve = r(() => {
113
+ let e = Y() ? Q.getVirtualItems().map((e) => ({
114
+ index: e.index,
115
+ start: e.start
116
+ })) : J().map((e, t) => ({
117
+ index: t,
118
+ start: 0
119
+ })), t = Z();
120
+ return Y() && t >= 0 && !e.some((e) => e.index === t) && e.push({
121
+ index: t,
122
+ start: t * X()
123
+ }), e;
124
+ }), ye = () => u.loading ? U().loading : u.error ? typeof u.error == "string" ? u.error : U().error : J().length === 0 ? U().empty : "", be = {
125
+ get collection() {
126
+ return _e();
127
+ },
128
+ get value() {
129
+ return D() ? [D()] : [];
130
+ },
131
+ get open() {
132
+ return j() && !H();
133
+ },
134
+ get disabled() {
135
+ return u.disabled;
136
+ },
137
+ get readOnly() {
138
+ return u.readOnly;
139
+ },
140
+ onOpenChange: (e) => {
141
+ H() || M(e.open);
142
+ },
143
+ onValueChange: (e) => {
144
+ if (H() || B) return;
145
+ let t = e.value[0] ?? "";
146
+ t !== D() && K(t);
147
+ },
148
+ onHighlightChange: (e) => P(e.highlightedValue),
149
+ get scrollToIndexFn() {
150
+ return Y() ? ({ index: e }) => Q.scrollToIndex(e, { align: "auto" }) : void 0;
151
+ },
152
+ get positioning() {
153
+ return {
154
+ placement: "bottom-start",
155
+ sameWidth: !0,
156
+ gutter: 4,
157
+ strategy: z()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]") ? "fixed" : "absolute",
158
+ hideWhenDetached: !!z()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]")
159
+ };
160
+ }
161
+ }, xe = u.searchable ? {
162
+ get inputValue() {
163
+ return A();
164
+ },
165
+ onInputValueChange: (e) => {
166
+ !H() && e.inputValue !== A() && W(e.inputValue);
167
+ },
168
+ selectionBehavior: "preserve"
169
+ } : {};
170
+ return l($.Root, te(be, xe, {
171
+ get id() {
172
+ return u.id ?? b;
173
+ },
174
+ class: "dds-choice",
175
+ get "data-label-placement"() {
176
+ return u.labelPlacement ?? "outside";
177
+ },
178
+ get "data-has-value"() {
179
+ return D() || A() ? "" : void 0;
180
+ },
181
+ get children() {
182
+ return [
183
+ l(t, {
184
+ get when() {
185
+ return u.label;
186
+ },
187
+ get children() {
188
+ return l($.Label, {
189
+ class: "dds-choice-label",
190
+ onClick: () => F?.focus(),
191
+ get children() {
192
+ return u.label;
193
+ }
194
+ });
195
+ }
196
+ }),
197
+ l($.Control, {
198
+ class: "dds-choice-control",
199
+ get children() {
200
+ return [
201
+ l(t, {
202
+ get when() {
203
+ return u.searchable;
204
+ },
205
+ get children() {
206
+ return l(x.Input, {
207
+ ref: (e) => {
208
+ F = e;
209
+ },
210
+ class: "dds-choice-input",
211
+ get "aria-label"() {
212
+ return u["aria-label"];
213
+ },
214
+ get "aria-labelledby"() {
215
+ return u["aria-labelledby"];
216
+ },
217
+ get "aria-describedby"() {
218
+ return u["aria-describedby"];
219
+ },
220
+ get "aria-required"() {
221
+ return u.required;
222
+ },
223
+ get placeholder() {
224
+ return u.placeholder;
225
+ },
226
+ onCompositionStart: () => {
227
+ B = !0;
228
+ },
229
+ onCompositionEnd: () => {
230
+ B = !1;
231
+ },
232
+ onKeyDown: (e) => {
233
+ B && e.key === "Enter" && (e.preventDefault(), e.stopPropagation());
234
+ },
235
+ onBlur: () => {
236
+ D() && G(O());
237
+ }
238
+ });
239
+ }
240
+ }),
241
+ l($.Trigger, {
242
+ ref: (e) => {
243
+ u.searchable || (F = e);
244
+ },
245
+ class: "dds-choice-trigger",
246
+ get "aria-label"() {
247
+ return h(() => !!u.searchable)() ? U().open : u["aria-label"];
248
+ },
249
+ get "aria-labelledby"() {
250
+ return u["aria-labelledby"];
251
+ },
252
+ get "aria-describedby"() {
253
+ return u["aria-describedby"];
254
+ },
255
+ get "aria-required"() {
256
+ return u.required;
257
+ },
258
+ get children() {
259
+ return h(() => !!u.searchable)() ? "⌄" : (() => {
260
+ var e = f(C);
261
+ return m(e, () => O() || u.placeholder || U().open), e;
262
+ })();
263
+ }
264
+ }),
265
+ l(t, {
266
+ get when() {
267
+ return h(() => !!(u.clearable && !H()))() && (D() || A());
268
+ },
269
+ get children() {
270
+ var e = f(le);
271
+ return e.$$click = () => {
272
+ K(""), W(""), M(!1), F?.focus();
273
+ }, e.$$pointerdown = (e) => e.preventDefault(), d(() => _(e, "aria-label", U().clear)), g(), e;
274
+ }
275
+ })
276
+ ];
277
+ }
278
+ }),
279
+ (() => {
280
+ var e = f(ue);
281
+ e.addEventListener("invalid", (e) => {
282
+ e.preventDefault(), F?.focus();
283
+ }), e.$$input = (e) => {
284
+ e.currentTarget.value = D();
285
+ };
286
+ var t = I;
287
+ return typeof t == "function" ? ne(t, e) : I = e, d((t) => {
288
+ var n = u.name, r = u.form, i = u.required, a = u.disabled;
289
+ return n !== t.e && _(e, "name", t.e = n), r !== t.t && _(e, "form", t.t = r), i !== t.a && v(e, "required", t.a = i), a !== t.o && v(e, "disabled", t.o = a), t;
290
+ }, {
291
+ e: void 0,
292
+ t: void 0,
293
+ a: void 0,
294
+ o: void 0
295
+ }), d(() => v(e, "value", D())), g(), e;
296
+ })(),
297
+ (() => {
298
+ var e = f(fe), n = e.firstChild, [r, i] = p(n.nextSibling), a = r.nextSibling, [o, s] = p(a.nextSibling);
299
+ return m(e, ye, r, i), m(e, l(t, {
300
+ get when() {
301
+ return h(() => !!u.error)() && u.onRetry;
302
+ },
303
+ get children() {
304
+ var e = f(de);
305
+ return e.$$click = () => u.onRetry?.(), m(e, () => U().retry), g(), e;
306
+ }
307
+ }), o, s), e;
308
+ })(),
309
+ l(t, {
310
+ get when() {
311
+ return z();
312
+ },
313
+ children: (n) => l(ee, {
314
+ get mount() {
315
+ return n();
316
+ },
317
+ get children() {
318
+ return l($.Positioner, {
319
+ class: "dds-choice-positioner",
320
+ get children() {
321
+ return l($.Content, {
322
+ ref: R,
323
+ class: "dds-choice-content",
324
+ style: {
325
+ "max-height": "min(320px, var(--available-height, 320px))",
326
+ overflow: "auto"
327
+ },
328
+ get children() {
329
+ var n = f(w);
330
+ return m(n, l(e, {
331
+ get each() {
332
+ return ve();
333
+ },
334
+ children: (e) => {
335
+ let n = () => J()[e.index];
336
+ return l($.Item, {
337
+ get item() {
338
+ return n();
339
+ },
340
+ class: "dds-choice-item",
341
+ get "aria-posinset"() {
342
+ return e.index + 1;
343
+ },
344
+ get "aria-setsize"() {
345
+ return J().length;
346
+ },
347
+ get style() {
348
+ return h(() => !!Y())() ? {
349
+ position: "absolute",
350
+ top: "0",
351
+ left: "0",
352
+ width: "100%",
353
+ height: `${X()}px`,
354
+ transform: `translateY(${e.start}px)`
355
+ } : void 0;
356
+ },
357
+ get children() {
358
+ return [l($.ItemText, { get children() {
359
+ return n().label;
360
+ } }), l(t, {
361
+ get when() {
362
+ return n().description;
363
+ },
364
+ get children() {
365
+ var e = f(pe);
366
+ return m(e, () => n().description), e;
367
+ }
368
+ })];
369
+ }
370
+ });
371
+ }
372
+ })), d((e) => y(n, Y() ? {
373
+ height: `${Q.getTotalSize()}px`,
374
+ position: "relative"
375
+ } : void 0, e)), n;
376
+ }
377
+ });
378
+ }
379
+ });
380
+ }
381
+ })
382
+ })
383
+ ];
384
+ }
385
+ }));
386
+ }
387
+ u([
388
+ "pointerdown",
389
+ "click",
390
+ "input"
391
+ ]);
392
+ //#endregion
393
+ export { T as t };
394
+
395
+ //# sourceMappingURL=choice-BPMiJlPJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-BPMiJlPJ.js","names":["Combobox","C","createListCollection","Select","S","Portal","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","untrack","createVirtualizer","defaultRangeExtractor","Range","choiceMessages","choiceWarningsEnabled","validateOptions","ComboboxProps","Choice","props","searchable","id","internal","setInternal","defaultValue","value","label","items","find","item","selectedOption","draft","setDraft","defaultInputValue","inputValue","open","setOpen","highlight","setHighlight","visible","HTMLInputElement","HTMLButtonElement","validation","scroll","setScroll","HTMLDivElement","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","composing","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","queueMicrotask","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","Parts","rows","result","getVirtualItems","map","row","index","start","_","status","loading","error","empty","rootProps","onOpenChange","details","onHighlightChange","highlightedValue","scrollToIndexFn","positioning","placement","const","sameWidth","gutter","strategy","matches","hideWhenDetached","inputProps","selectionBehavior","_$createComponent","Root","_$mergeProps","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","Trigger","_$memo","_el$9","_$getNextElement","_tmpl$5","_$insert","clearable","_el$","_tmpl$","$$click","$$pointerdown","_$effect","_$setAttribute","clear","_$runHydrationEvents","_el$2","_tmpl$2","$$input","currentTarget","_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","top","left","transform","ItemText","description","_el$1","_tmpl$7","_$p","_$style","getTotalSize","_$delegateEvents"],"sources":["../src/choice-types.ts","../src/internal/choice.tsx"],"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","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} 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 ComboboxProps,\n} from \"../choice-types\";\n\nexport function Choice(props: ComboboxProps & { searchable: boolean }) {\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 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 const reset = (event: Event) =>\n queueMicrotask(() => {\n if (event.defaultPrevented) return;\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 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: \"auto\" },\n );\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 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: { inputValue: string }) => {\n if (!blocked() && details.inputValue !== inputValue())\n setInput(details.inputValue);\n },\n selectionBehavior: \"preserve\" as const,\n }\n : {};\n return (\n <Parts.Root\n {...rootProps}\n {...inputProps}\n id={props.id ?? id}\n class=\"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 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={() => {\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 \"⌄\"\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":"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"}
@@ -0,0 +1,56 @@
1
+ export interface ChoiceOption {
2
+ value: string;
3
+ label: string;
4
+ description?: string;
5
+ disabled?: boolean;
6
+ }
7
+ export interface ChoiceMessages {
8
+ open?: string;
9
+ clear?: string;
10
+ loading?: string;
11
+ empty?: string;
12
+ error?: string;
13
+ retry?: string;
14
+ }
15
+ export type ChoiceVirtualization = false | {
16
+ itemHeight?: number;
17
+ overscan?: number;
18
+ };
19
+ export interface ChoiceProps {
20
+ items: ChoiceOption[];
21
+ value?: string;
22
+ defaultValue?: string;
23
+ onValueChange?: (value: string) => void;
24
+ selectedOption?: ChoiceOption;
25
+ disabled?: boolean;
26
+ readOnly?: boolean;
27
+ required?: boolean;
28
+ name?: string;
29
+ form?: string;
30
+ id?: string;
31
+ label?: string;
32
+ labelPlacement?: "outside" | "inside" | "hidden";
33
+ "aria-label"?: string;
34
+ "aria-labelledby"?: string;
35
+ "aria-describedby"?: string;
36
+ placeholder?: string;
37
+ clearable?: boolean;
38
+ messages?: ChoiceMessages;
39
+ virtualization?: ChoiceVirtualization;
40
+ }
41
+ export interface ComboboxProps extends ChoiceProps {
42
+ inputValue?: string;
43
+ defaultInputValue?: string;
44
+ onInputValueChange?: (value: string) => void;
45
+ filterMode?: "local" | "external";
46
+ loading?: boolean;
47
+ error?: string | boolean;
48
+ onRetry?: () => void;
49
+ }
50
+ export interface SelectPickerProps extends ChoiceProps {
51
+ }
52
+ export declare function validateOptions(items: ChoiceOption[]): void;
53
+ export declare const choiceMessages: Required<ChoiceMessages>;
54
+ /** Read the consumer environment at runtime, rather than the library build mode. */
55
+ export declare function choiceWarningsEnabled(): boolean;
56
+ //# sourceMappingURL=choice-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-types.d.ts","sourceRoot":"","sources":["../src/choice-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AACD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AACD,MAAM,WAAW,iBAAkB,SAAQ,WAAW;CAAG;AAEzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,QASpD;AACD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,cAAc,CAOnD,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,qBAAqB,YAKpC"}
@@ -0,0 +1,4 @@
1
+ import type { ComboboxProps } from "./choice-types";
2
+ export type { ComboboxProps, ChoiceOption, ChoiceMessages, ChoiceVirtualization, } from "./choice-types";
3
+ export declare function Combobox(props: ComboboxProps): import("solid-js").JSX.Element;
4
+ //# sourceMappingURL=combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../src/combobox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kCAE5C"}