@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
@@ -0,0 +1,287 @@
1
+ import { l as e, t } from "./calendar-view-CZLsC57_.js";
2
+ import { n } from "./utils-oKxhg9RG.js";
3
+ import { a as r, c as i, l as a, m as o, n as s, s as c, u as l } from "./date-only-Bu4UmsTP.js";
4
+ import { Show as u, createEffect as d, createMemo as f, createSignal as p, createUniqueId as m, on as h, onCleanup as g, onMount as _ } from "solid-js";
5
+ import { Portal as ee, addEventListener as te, className as ne, createComponent as v, delegateEvents as y, effect as b, getNextElement as x, getNextMarker as S, insert as C, memo as w, runHydrationEvents as re, setAttribute as T, setProperty as E, template as D, use as ie } from "solid-js/web";
6
+ import { DatePicker as O, parseDate as k } from "@ark-ui/solid/date-picker";
7
+ //#region src/month-picker.tsx
8
+ var A = /*#__PURE__*/ D("<svg width=20 height=20 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=1.5 aria-hidden=true><rect x=3.5 y=5.5 width=17 height=15 rx=2></rect><path d=\"M7.5 3v5M16.5 3v5M3.5 10.5h17\">"), ae = /*#__PURE__*/ D("<span aria-hidden=true> *"), oe = /*#__PURE__*/ D("<label class=dds-field__label><!$><!/><!$><!/>"), se = /*#__PURE__*/ D("<input type=text autocomplete=off autocorrect=off>"), ce = /*#__PURE__*/ D("<input type=hidden>"), le = /*#__PURE__*/ D("<span class=dds-field__error role=alert>"), ue = /*#__PURE__*/ D("<div role=group><!$><!/><!$><!/><!$><!/><!$><!/>"), j = (e) => c(e) ? [k(`${e}-01`)] : [];
9
+ function de() {
10
+ return x(A);
11
+ }
12
+ function M(y) {
13
+ let D = () => y.locale ?? "ko-KR", A = y.id ?? `dds-month-${m()}`, M = `${A}-error`, N = () => l(D(), y.messages), [P, F] = e({
14
+ value: () => y.value,
15
+ defaultValue: y.defaultValue ?? "",
16
+ onChange: void 0
17
+ }), [I, fe] = p({
18
+ text: r(P(), D()),
19
+ locale: D()
20
+ }), L = f(() => {
21
+ let e = I(), t = s(e.text);
22
+ return e.locale !== D() && c(t) ? r(t, D()) : e.text;
23
+ }), R = (e) => fe({
24
+ text: e,
25
+ locale: D()
26
+ }), [pe, z] = p(j(P())), [me, B] = p(!1), V, H, U = P(), W, [G, he] = p();
27
+ _(() => {
28
+ V && he(V.closest("[role=\"dialog\"], [role=\"alertdialog\"]") ?? V.ownerDocument.body);
29
+ });
30
+ let K = () => y.disabled || y.readOnly, q = f(() => a(y.min, y.max)), J = f(() => o(L(), y.required ?? !1, y.min, y.max)), Y = () => J().valid ? void 0 : J().reason === "required" ? N().required : N().invalid, X = () => y.invalid || !J().valid, Z = () => y.label ?? y["aria-label"] ?? "";
31
+ d(h(P, (e) => {
32
+ e !== U && (U = e, R(r(e, D())), z(j(e)));
33
+ }, { defer: !0 })), d(() => V?.setCustomValidity(Y() ?? "")), d(() => {
34
+ K() && (B(!1), W !== void 0 && cancelAnimationFrame(W));
35
+ }), _(() => {
36
+ let e = V?.ownerDocument;
37
+ if (!e) return;
38
+ let t = (t) => {
39
+ let n = y.form ? e.getElementById(y.form) : V?.form;
40
+ !n || t.target !== n || setTimeout(() => {
41
+ if (t.defaultPrevented) return;
42
+ let e = y.value ?? y.defaultValue ?? "";
43
+ U = e, F(e);
44
+ let n = r(e, D());
45
+ R(n), z(j(e)), V && (V.value = n);
46
+ }, 0);
47
+ };
48
+ e.addEventListener("reset", t, !0), g(() => e.removeEventListener("reset", t, !0));
49
+ }), g(() => {
50
+ W !== void 0 && cancelAnimationFrame(W);
51
+ });
52
+ function Q(e, t = 1) {
53
+ W !== void 0 && cancelAnimationFrame(W);
54
+ let n = (t) => {
55
+ W = requestAnimationFrame(() => {
56
+ if (t > 1) return n(t - 1);
57
+ K() || e()?.focus({ preventScroll: !0 });
58
+ });
59
+ };
60
+ n(t);
61
+ }
62
+ function $(e) {
63
+ K() || (z(j(e)), e !== U && (U = e, F(e), y.onValueChange?.(e)));
64
+ }
65
+ function ge(e) {
66
+ if (K()) return;
67
+ let t = o(e, !1, y.min, y.max);
68
+ R(t.valid ? r(t.value ?? "", D()) : e), t.valid && $(t.value ?? "");
69
+ }
70
+ return (() => {
71
+ var e = x(ue), a = e.firstChild, [s, c] = S(a.nextSibling), l = s.nextSibling, [d, f] = S(l.nextSibling), p = d.nextSibling, [m, h] = S(p.nextSibling), _ = m.nextSibling, [F, I] = S(_.nextSibling);
72
+ return C(e, v(u, {
73
+ get when() {
74
+ return y.label;
75
+ },
76
+ get children() {
77
+ var e = x(oe), t = e.firstChild, [n, r] = S(t.nextSibling), i = n.nextSibling, [a, o] = S(i.nextSibling);
78
+ return T(e, "for", A), C(e, () => y.label, n, r), C(e, v(u, {
79
+ get when() {
80
+ return y.required;
81
+ },
82
+ get children() {
83
+ return x(ae);
84
+ }
85
+ }), a, o), e;
86
+ }
87
+ }), s, c), C(e, v(O.Root, {
88
+ get locale() {
89
+ return D();
90
+ },
91
+ get timeZone() {
92
+ return y.timeZone ?? "Asia/Seoul";
93
+ },
94
+ get disabled() {
95
+ return y.disabled;
96
+ },
97
+ get readOnly() {
98
+ return y.readOnly;
99
+ },
100
+ get required() {
101
+ return y.required;
102
+ },
103
+ get invalid() {
104
+ return X();
105
+ },
106
+ get open() {
107
+ return w(() => !!me())() && !K();
108
+ },
109
+ onOpenChange: (e) => {
110
+ B(e.open && !K()), e.open || z(j(U));
111
+ },
112
+ get min() {
113
+ return w(() => !!q().min)() ? k(q().min) : void 0;
114
+ },
115
+ get max() {
116
+ return w(() => !!q().max)() ? k(q().max) : void 0;
117
+ },
118
+ minView: "month",
119
+ maxView: "month",
120
+ defaultView: "month",
121
+ get translations() {
122
+ return { clearTrigger: N().clear };
123
+ },
124
+ get value() {
125
+ return pe();
126
+ },
127
+ onValueChange: (e) => {
128
+ if (K()) return;
129
+ let t = e.value[0]?.toString().slice(0, 7) ?? "";
130
+ t !== "" && !o(t, !1, y.min, y.max).valid || (R(r(t, D())), $(t), Q(() => V, 2));
131
+ },
132
+ get positioning() {
133
+ return {
134
+ placement: "bottom-start",
135
+ gutter: 8,
136
+ strategy: G()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]") ? "fixed" : "absolute",
137
+ hideWhenDetached: !!G()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]")
138
+ };
139
+ },
140
+ get children() {
141
+ return [v(O.Control, {
142
+ class: "dds-date-picker-control",
143
+ get "data-filled"() {
144
+ return L() === "" ? void 0 : "true";
145
+ },
146
+ get children() {
147
+ return [(() => {
148
+ var e = x(se);
149
+ e.$$keydown = (e) => {
150
+ e.key === "Enter" && !e.isComposing && (e.preventDefault(), e.stopPropagation());
151
+ }, te(e, "input", (e) => {
152
+ e.stopPropagation(), ge(e.currentTarget.value);
153
+ });
154
+ var t = V;
155
+ return typeof t == "function" ? ie(t, e) : V = e, T(e, "id", A), T(e, "spellcheck", !1), b((t) => {
156
+ var r = y.form, a = y.label ? void 0 : y["aria-label"], o = y["aria-labelledby"], s = X() ? "true" : void 0, c = y.required ? "true" : void 0, l = n(y["aria-describedby"], Y() && M), u = y.required, d = y.readOnly, f = y.disabled, p = i(D()) ? "YYYY/MM" : "YYYY-MM";
157
+ return r !== t.e && T(e, "form", t.e = r), a !== t.t && T(e, "aria-label", t.t = a), o !== t.a && T(e, "aria-labelledby", t.a = o), s !== t.o && T(e, "aria-invalid", t.o = s), c !== t.i && T(e, "aria-required", t.i = c), l !== t.n && T(e, "aria-describedby", t.n = l), u !== t.s && E(e, "required", t.s = u), d !== t.h && E(e, "readOnly", t.h = d), f !== t.r && E(e, "disabled", t.r = f), p !== t.d && T(e, "placeholder", t.d = p), t;
158
+ }, {
159
+ e: void 0,
160
+ t: void 0,
161
+ a: void 0,
162
+ o: void 0,
163
+ i: void 0,
164
+ n: void 0,
165
+ s: void 0,
166
+ h: void 0,
167
+ r: void 0,
168
+ d: void 0
169
+ }), b(() => E(e, "value", L())), re(), e;
170
+ })(), v(O.Trigger, {
171
+ ref(e) {
172
+ var t = H;
173
+ typeof t == "function" ? t(e) : H = e;
174
+ },
175
+ class: "dds-btn dds-btn--secondary",
176
+ get "aria-label"() {
177
+ return `${Z()} ${N().openCalendar}`.trim();
178
+ },
179
+ get children() {
180
+ return v(de, {});
181
+ }
182
+ })];
183
+ }
184
+ }), v(u, {
185
+ get when() {
186
+ return G();
187
+ },
188
+ children: (e) => v(ee, {
189
+ get mount() {
190
+ return e();
191
+ },
192
+ get children() {
193
+ return v(O.Positioner, {
194
+ class: "dds-date-picker-positioner",
195
+ get children() {
196
+ return v(O.Content, {
197
+ ref: (e) => {
198
+ let t = (e) => {
199
+ e.key === "Escape" && Q(() => H, 2);
200
+ };
201
+ e.addEventListener("keydown", t, !0), g(() => e.removeEventListener("keydown", t, !0));
202
+ },
203
+ class: "dds-date-picker-content dds-month-picker-content",
204
+ get "aria-label"() {
205
+ return `${Z()} ${N().chooseMonth}`.trim();
206
+ },
207
+ get children() {
208
+ return v(t, {
209
+ view: "month",
210
+ get timeZone() {
211
+ return y.timeZone;
212
+ },
213
+ get min() {
214
+ return q().min;
215
+ },
216
+ get max() {
217
+ return q().max;
218
+ },
219
+ get locale() {
220
+ return D();
221
+ },
222
+ get messages() {
223
+ return N();
224
+ },
225
+ get disabled() {
226
+ return y.disabled;
227
+ },
228
+ get readOnly() {
229
+ return y.readOnly;
230
+ },
231
+ get showToday() {
232
+ return y.showThisMonth;
233
+ },
234
+ get showClear() {
235
+ return y.clearable;
236
+ },
237
+ onClear: () => {
238
+ R(""), $("");
239
+ }
240
+ });
241
+ }
242
+ });
243
+ }
244
+ });
245
+ }
246
+ })
247
+ })];
248
+ }
249
+ }), d, f), C(e, v(u, {
250
+ get when() {
251
+ return y.name;
252
+ },
253
+ get children() {
254
+ var e = x(ce);
255
+ return b((t) => {
256
+ var n = y.name, r = y.form, i = y.disabled;
257
+ return n !== t.e && T(e, "name", t.e = n), r !== t.t && T(e, "form", t.t = r), i !== t.a && E(e, "disabled", t.a = i), t;
258
+ }, {
259
+ e: void 0,
260
+ t: void 0,
261
+ a: void 0
262
+ }), b(() => E(e, "value", P())), e;
263
+ }
264
+ }), m, h), C(e, v(u, {
265
+ get when() {
266
+ return Y();
267
+ },
268
+ get children() {
269
+ var e = x(le);
270
+ return T(e, "id", M), C(e, Y), e;
271
+ }
272
+ }), F, I), b((t) => {
273
+ var n = `dds-field dds-date-picker dds-month-picker dds-date-picker--${y.labelPlacement ?? "outside"}${Y() ? " dds-field--error" : ""}`, r = L() === "" ? void 0 : "true", i = X() ? "" : void 0, a = y.disabled ? "" : void 0;
274
+ return n !== t.e && ne(e, t.e = n), r !== t.t && T(e, "data-filled", t.t = r), i !== t.a && T(e, "data-invalid", t.a = i), a !== t.o && T(e, "data-disabled", t.o = a), t;
275
+ }, {
276
+ e: void 0,
277
+ t: void 0,
278
+ a: void 0,
279
+ o: void 0
280
+ }), e;
281
+ })();
282
+ }
283
+ y(["keydown"]);
284
+ //#endregion
285
+ export { M as MonthPicker };
286
+
287
+ //# sourceMappingURL=month-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"month-picker.js","names":["DatePicker","ArkDatePicker","parseDate","DateValue","Portal","createEffect","createMemo","createSignal","createUniqueId","on","onCleanup","onMount","Show","CalendarView","createControllableSignal","canonicalMonth","displayMonth","isCalendarMonth","isKorean","monthBounds","monthMessages","validateMonth","MonthPickerMessages","describedBy","MonthPickerValidity","MonthPickerProps","label","labelPlacement","id","value","defaultValue","onValueChange","next","locale","timeZone","min","max","messages","clearable","showThisMonth","required","disabled","readOnly","invalid","name","form","selectionOf","month","CalendarIcon","_$getNextElement","_tmpl$","MonthPicker","props","errorId","text","setValue","onChange","undefined","draftState","setDraftState","draft","state","canonical","setDraft","selection","setSelection","open","setOpen","input","HTMLInputElement","trigger","HTMLButtonElement","emitted","focusFrame","portalMount","setPortalMount","HTMLElement","closest","ownerDocument","body","blocked","bounds","validity","error","valid","reason","fieldName","defer","setCustomValidity","cancelAnimationFrame","doc","reset","event","Event","getElementById","target","setTimeout","defaultPrevented","shown","addEventListener","removeEventListener","focusSoon","frames","run","left","requestAnimationFrame","focus","preventScroll","commit","changeDraft","typed","_el$2","_tmpl$7","_el$10","firstChild","_el$11","_co$3","_$getNextMarker","nextSibling","_el$12","_el$13","_co$4","_el$14","_el$15","_co$5","_el$16","_el$17","_co$6","_$insert","_$createComponent","when","children","_el$3","_tmpl$3","_el$5","_el$6","_co$","_el$7","_el$8","_co$2","_$setAttribute","_tmpl$2","Root","_$memo","onOpenChange","details","minView","maxView","defaultView","translations","clearTrigger","clear","toString","slice","positioning","placement","gutter","strategy","matches","hideWhenDetached","Control","data-filled","_el$9","_tmpl$4","$$keydown","key","isComposing","preventDefault","stopPropagation","_$addEventListener","currentTarget","_ref$","_$use","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","e","t","a","o","i","n","s","_$setProperty","h","r","d","_$runHydrationEvents","Trigger","ref","r$","_ref$2","aria-label","openCalendar","trim","mount","Positioner","Content","node","restoreTrigger","KeyboardEvent","chooseMonth","view","showToday","showClear","onClear","_el$0","_tmpl$5","_v$1","_v$10","_v$11","_el$1","_tmpl$6","_v$12","_v$13","_v$14","_v$15","_$className","_$delegateEvents"],"sources":["../src/month-picker.tsx"],"sourcesContent":["import {\n DatePicker as ArkDatePicker,\n parseDate,\n type DateValue,\n} from \"@ark-ui/solid/date-picker\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n on,\n onCleanup,\n onMount,\n Show,\n} from \"solid-js\";\nimport { CalendarView } from \"./calendar-view\";\nimport { createControllableSignal } from \"./controllable\";\nimport {\n canonicalMonth,\n displayMonth,\n isCalendarMonth,\n isKorean,\n monthBounds,\n monthMessages,\n validateMonth,\n type MonthPickerMessages,\n} from \"./date-only\";\nimport { describedBy } from \"./utils\";\nexport type { MonthPickerMessages, MonthPickerValidity } from \"./date-only\";\n\nexport interface MonthPickerProps {\n label?: string;\n labelPlacement?: \"outside\" | \"inside\" | \"hidden\";\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n id?: string;\n /** YYYY-MM or \"\" (no month). */\n value?: string;\n defaultValue?: string;\n /** Called on user changes only, with YYYY-MM or \"\". */\n onValueChange?: (next: string) => void;\n locale?: string;\n /** Decides the current month for \"This month\" and its marker. */\n timeZone?: string;\n /** Inclusive YYYY-MM bounds. */\n min?: string;\n max?: string;\n messages?: MonthPickerMessages;\n clearable?: boolean;\n showThisMonth?: boolean;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n invalid?: boolean;\n /** Form field name submitting YYYY-MM (or \"\"), never the display text. */\n name?: string;\n form?: string;\n}\n\nconst selectionOf = (month: string): DateValue[] =>\n isCalendarMonth(month) ? [parseDate(`${month}-01`)] : [];\n\nfunction CalendarIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n aria-hidden=\"true\"\n >\n <rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"15\" rx=\"2\" />\n <path d=\"M7.5 3v5M16.5 3v5M3.5 10.5h17\" />\n </svg>\n );\n}\n\nexport function MonthPicker(props: MonthPickerProps) {\n const locale = () => props.locale ?? \"ko-KR\",\n id = props.id ?? `dds-month-${createUniqueId()}`,\n errorId = `${id}-error`;\n const text = () => monthMessages(locale(), props.messages);\n const [value, setValue] = createControllableSignal<string>({\n value: () => props.value,\n defaultValue: props.defaultValue ?? \"\",\n onChange: undefined,\n });\n // The draft keeps its formatting locale so a locale change re-displays complete months only.\n const [draftState, setDraftState] = createSignal({\n text: displayMonth(value(), locale()),\n locale: locale(),\n });\n const draft = createMemo(() => {\n const state = draftState(),\n canonical = canonicalMonth(state.text);\n return state.locale !== locale() && isCalendarMonth(canonical)\n ? displayMonth(canonical, locale())\n : state.text;\n });\n const setDraft = (next: string) =>\n setDraftState({ text: next, locale: locale() });\n const [selection, setSelection] = createSignal(selectionOf(value()));\n const [open, setOpen] = createSignal(false);\n let input: HTMLInputElement | undefined,\n trigger: HTMLButtonElement | undefined,\n emitted = value(),\n focusFrame: number | undefined;\n const [portalMount, setPortalMount] = createSignal<HTMLElement>();\n onMount(() => {\n if (input)\n setPortalMount(\n input.closest<HTMLElement>('[role=\"dialog\"], [role=\"alertdialog\"]') ??\n input.ownerDocument.body,\n );\n });\n const blocked = () => props.disabled || props.readOnly;\n const bounds = createMemo(() => monthBounds(props.min, props.max));\n const validity = createMemo(() =>\n validateMonth(draft(), props.required ?? false, props.min, props.max),\n );\n const error = () =>\n validity().valid\n ? undefined\n : validity().reason === \"required\"\n ? text().required\n : text().invalid;\n const invalid = () => props.invalid || !validity().valid;\n const fieldName = () => props.label ?? props[\"aria-label\"] ?? \"\";\n\n createEffect(\n on(\n value,\n (next) => {\n if (next === emitted) return;\n emitted = next;\n setDraft(displayMonth(next, locale()));\n setSelection(selectionOf(next));\n },\n { defer: true },\n ),\n );\n createEffect(() => input?.setCustomValidity(error() ?? \"\"));\n createEffect(() => {\n if (blocked()) {\n setOpen(false);\n if (focusFrame !== undefined) cancelAnimationFrame(focusFrame);\n }\n });\n // Resolve the owning form when a reset happens: the field may mount before it joins its form.\n onMount(() => {\n const doc = input?.ownerDocument;\n if (!doc) return;\n const reset = (event: Event) => {\n const form = props.form ? doc.getElementById(props.form) : input?.form;\n if (!form || event.target !== form) return;\n // A task, not a microtask: a user-triggered reset runs its listeners before rewriting the controls.\n setTimeout(() => {\n if (event.defaultPrevented) return;\n const next = props.value ?? props.defaultValue ?? \"\";\n emitted = next;\n setValue(next);\n const shown = displayMonth(next, locale());\n setDraft(shown);\n setSelection(selectionOf(next));\n // Native reset rewrote the visible input; the draft may not have changed.\n if (input) input.value = shown;\n }, 0);\n };\n doc.addEventListener(\"reset\", reset, true);\n onCleanup(() => doc.removeEventListener(\"reset\", reset, true));\n });\n onCleanup(() => {\n if (focusFrame !== undefined) cancelAnimationFrame(focusFrame);\n });\n\n function focusSoon(target: () => HTMLElement | undefined, frames = 1) {\n if (focusFrame !== undefined) cancelAnimationFrame(focusFrame);\n const run = (left: number) => {\n focusFrame = requestAnimationFrame(() => {\n if (left > 1) return run(left - 1);\n if (!blocked()) target()?.focus({ preventScroll: true });\n });\n };\n run(frames);\n }\n function commit(next: string) {\n if (blocked()) return;\n setSelection(selectionOf(next));\n if (next === emitted) return;\n emitted = next;\n setValue(next);\n props.onValueChange?.(next);\n }\n /** Committing ignores `required` like DatePicker: an emptied field is still reported. */\n function changeDraft(typed: string) {\n if (blocked()) return;\n const state = validateMonth(typed, false, props.min, props.max);\n setDraft(state.valid ? displayMonth(state.value ?? \"\", locale()) : typed);\n if (state.valid) commit(state.value ?? \"\");\n }\n\n return (\n <div\n class={`dds-field dds-date-picker dds-month-picker dds-date-picker--${props.labelPlacement ?? \"outside\"}${error() ? \" dds-field--error\" : \"\"}`}\n data-filled={draft() !== \"\" ? \"true\" : undefined}\n data-invalid={invalid() ? \"\" : undefined}\n data-disabled={props.disabled ? \"\" : undefined}\n role=\"group\"\n >\n <Show when={props.label}>\n <label class=\"dds-field__label\" for={id}>\n {props.label}\n <Show when={props.required}>\n <span aria-hidden=\"true\"> *</span>\n </Show>\n </label>\n </Show>\n <ArkDatePicker.Root\n locale={locale()}\n timeZone={props.timeZone ?? \"Asia/Seoul\"}\n disabled={props.disabled}\n readOnly={props.readOnly}\n required={props.required}\n invalid={invalid()}\n open={open() && !blocked()}\n onOpenChange={(details) => {\n setOpen(details.open && !blocked());\n if (!details.open) setSelection(selectionOf(emitted));\n }}\n min={bounds().min ? parseDate(bounds().min!) : undefined}\n max={bounds().max ? parseDate(bounds().max!) : undefined}\n minView=\"month\"\n maxView=\"month\"\n defaultView=\"month\"\n translations={{ clearTrigger: text().clear }}\n value={selection()}\n onValueChange={(details) => {\n if (blocked()) return;\n const next = details.value[0]?.toString().slice(0, 7) ?? \"\";\n if (\n next !== \"\" &&\n !validateMonth(next, false, props.min, props.max).valid\n )\n return;\n setDraft(displayMonth(next, locale()));\n commit(next);\n focusSoon(() => input, 2);\n }}\n positioning={{\n placement: \"bottom-start\",\n gutter: 8,\n strategy: portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n )\n ? \"fixed\"\n : \"absolute\",\n hideWhenDetached: !!portalMount()?.matches(\n '[role=\"dialog\"], [role=\"alertdialog\"]',\n ),\n }}\n >\n <ArkDatePicker.Control\n class=\"dds-date-picker-control\"\n data-filled={draft() !== \"\" ? \"true\" : undefined}\n >\n <input\n id={id}\n ref={input}\n form={props.form}\n aria-label={props.label ? undefined : props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-invalid={invalid() ? \"true\" : undefined}\n aria-required={props.required ? \"true\" : undefined}\n aria-describedby={describedBy(\n props[\"aria-describedby\"],\n error() && errorId,\n )}\n type=\"text\"\n value={draft()}\n required={props.required}\n readOnly={props.readOnly}\n disabled={props.disabled}\n placeholder={isKorean(locale()) ? \"YYYY/MM\" : \"YYYY-MM\"}\n autocomplete=\"off\"\n autocorrect=\"off\"\n spellcheck={false}\n on:input={(event) => {\n event.stopPropagation();\n changeDraft(event.currentTarget.value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.isComposing) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n />\n <ArkDatePicker.Trigger\n ref={trigger}\n class=\"dds-btn dds-btn--secondary\"\n aria-label={`${fieldName()} ${text().openCalendar}`.trim()}\n >\n <CalendarIcon />\n </ArkDatePicker.Trigger>\n </ArkDatePicker.Control>\n <Show when={portalMount()}>\n {(mount) => (\n <Portal mount={mount()}>\n <ArkDatePicker.Positioner class=\"dds-date-picker-positioner\">\n <ArkDatePicker.Content\n ref={(node) => {\n const restoreTrigger = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") focusSoon(() => trigger, 2);\n };\n node.addEventListener(\"keydown\", restoreTrigger, true);\n onCleanup(() =>\n node.removeEventListener(\"keydown\", restoreTrigger, true),\n );\n }}\n class=\"dds-date-picker-content dds-month-picker-content\"\n aria-label={`${fieldName()} ${text().chooseMonth}`.trim()}\n >\n <CalendarView\n view=\"month\"\n timeZone={props.timeZone}\n min={bounds().min}\n max={bounds().max}\n locale={locale()}\n messages={text()}\n disabled={props.disabled}\n readOnly={props.readOnly}\n showToday={props.showThisMonth}\n showClear={props.clearable}\n onClear={() => {\n setDraft(\"\");\n commit(\"\");\n }}\n />\n </ArkDatePicker.Content>\n </ArkDatePicker.Positioner>\n </Portal>\n )}\n </Show>\n </ArkDatePicker.Root>\n <Show when={props.name}>\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={value()}\n disabled={props.disabled}\n />\n </Show>\n <Show when={error()}>\n <span id={errorId} class=\"dds-field__error\" role=\"alert\">\n {error()}\n </span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,282 @@
1
+ import { l as createControllableSignal, t as CalendarView } from "./assets/calendar-view-BBQGmkJ7.js";
2
+ import { n as describedBy } from "./assets/utils-Ou0UJRlO.js";
3
+ import { a as displayMonth, c as isKorean, l as monthBounds, m as validateMonth, n as canonicalMonth, s as isCalendarMonth, u as monthMessages } from "./assets/date-only-0Ldsjp43.js";
4
+ import { Show, createEffect, createMemo, createSignal, createUniqueId, on, onCleanup, onMount } from "solid-js";
5
+ import { Portal, createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
6
+ import { DatePicker, parseDate } from "@ark-ui/solid/date-picker";
7
+ //#region src/month-picker.tsx
8
+ var _tmpl$ = ["<svg", " width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\"><rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"15\" rx=\"2\"></rect><path d=\"M7.5 3v5M16.5 3v5M3.5 10.5h17\"></path></svg>"];
9
+ var _tmpl$2 = ["<span", " aria-hidden=\"true\"> *</span>"];
10
+ var _tmpl$3 = [
11
+ "<label",
12
+ " class=\"dds-field__label\"",
13
+ "><!--$-->",
14
+ "<!--/--><!--$-->",
15
+ "<!--/--></label>"
16
+ ];
17
+ var _tmpl$4 = [
18
+ "<input",
19
+ " type=\"text\"",
20
+ "",
21
+ "",
22
+ " autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\">"
23
+ ];
24
+ var _tmpl$5 = [
25
+ "<input",
26
+ " type=\"hidden\"",
27
+ "",
28
+ ">"
29
+ ];
30
+ var _tmpl$6 = [
31
+ "<span",
32
+ " class=\"dds-field__error\" role=\"alert\">",
33
+ "</span>"
34
+ ];
35
+ var _tmpl$7 = [
36
+ "<div",
37
+ " class=\"",
38
+ "\"",
39
+ " role=\"group\"><!--$-->",
40
+ "<!--/--><!--$-->",
41
+ "<!--/--><!--$-->",
42
+ "<!--/--><!--$-->",
43
+ "<!--/--></div>"
44
+ ];
45
+ var selectionOf = (month) => isCalendarMonth(month) ? [parseDate(`${month}-01`)] : [];
46
+ function CalendarIcon() {
47
+ return ssr(_tmpl$, ssrHydrationKey());
48
+ }
49
+ function MonthPicker(props) {
50
+ const locale = () => props.locale ?? "ko-KR", id = props.id ?? `dds-month-${createUniqueId()}`, errorId = `${id}-error`;
51
+ const text = () => monthMessages(locale(), props.messages);
52
+ const [value, setValue] = createControllableSignal({
53
+ value: () => props.value,
54
+ defaultValue: props.defaultValue ?? "",
55
+ onChange: void 0
56
+ });
57
+ const [draftState, setDraftState] = createSignal({
58
+ text: displayMonth(value(), locale()),
59
+ locale: locale()
60
+ });
61
+ const draft = createMemo(() => {
62
+ const state = draftState(), canonical = canonicalMonth(state.text);
63
+ return state.locale !== locale() && isCalendarMonth(canonical) ? displayMonth(canonical, locale()) : state.text;
64
+ });
65
+ const setDraft = (next) => setDraftState({
66
+ text: next,
67
+ locale: locale()
68
+ });
69
+ const [selection, setSelection] = createSignal(selectionOf(value()));
70
+ const [open, setOpen] = createSignal(false);
71
+ let input, emitted = value(), focusFrame;
72
+ const [portalMount, setPortalMount] = createSignal();
73
+ onMount(() => {});
74
+ const blocked = () => props.disabled || props.readOnly;
75
+ const bounds = createMemo(() => monthBounds(props.min, props.max));
76
+ const validity = createMemo(() => validateMonth(draft(), props.required ?? false, props.min, props.max));
77
+ const error = () => validity().valid ? void 0 : validity().reason === "required" ? text().required : text().invalid;
78
+ const invalid = () => props.invalid || !validity().valid;
79
+ const fieldName = () => props.label ?? props["aria-label"] ?? "";
80
+ createEffect(on(value, (next) => {
81
+ if (next === emitted) return;
82
+ emitted = next;
83
+ setDraft(displayMonth(next, locale()));
84
+ setSelection(selectionOf(next));
85
+ }, { defer: true }));
86
+ createEffect(() => void 0);
87
+ createEffect(() => {
88
+ if (blocked()) {
89
+ setOpen(false);
90
+ if (focusFrame !== void 0) cancelAnimationFrame(focusFrame);
91
+ }
92
+ });
93
+ onMount(() => {});
94
+ onCleanup(() => {
95
+ if (focusFrame !== void 0) cancelAnimationFrame(focusFrame);
96
+ });
97
+ function focusSoon(target, frames = 1) {
98
+ if (focusFrame !== void 0) cancelAnimationFrame(focusFrame);
99
+ const run = (left) => {
100
+ focusFrame = requestAnimationFrame(() => {
101
+ if (left > 1) return run(left - 1);
102
+ if (!blocked()) target()?.focus({ preventScroll: true });
103
+ });
104
+ };
105
+ run(frames);
106
+ }
107
+ function commit(next) {
108
+ if (blocked()) return;
109
+ setSelection(selectionOf(next));
110
+ if (next === emitted) return;
111
+ emitted = next;
112
+ setValue(next);
113
+ props.onValueChange?.(next);
114
+ }
115
+ return ssr(_tmpl$7, ssrHydrationKey(), `dds-field dds-date-picker dds-month-picker dds-date-picker--${escape(props.labelPlacement ?? "outside", true)}${error() ? " dds-field--error" : ""}`, ssrAttribute("data-filled", draft() !== "" ? "true" : escape(void 0, true), false) + ssrAttribute("data-invalid", invalid() ? "" : escape(void 0, true), false) + ssrAttribute("data-disabled", props.disabled ? "" : escape(void 0, true), false), escape(createComponent(Show, {
116
+ get when() {
117
+ return props.label;
118
+ },
119
+ get children() {
120
+ return ssr(_tmpl$3, ssrHydrationKey(), ssrAttribute("for", escape(id, true), false), escape(props.label), escape(createComponent(Show, {
121
+ get when() {
122
+ return props.required;
123
+ },
124
+ get children() {
125
+ return ssr(_tmpl$2, ssrHydrationKey());
126
+ }
127
+ })));
128
+ }
129
+ })), escape(createComponent(DatePicker.Root, {
130
+ get locale() {
131
+ return locale();
132
+ },
133
+ get timeZone() {
134
+ return props.timeZone ?? "Asia/Seoul";
135
+ },
136
+ get disabled() {
137
+ return props.disabled;
138
+ },
139
+ get readOnly() {
140
+ return props.readOnly;
141
+ },
142
+ get required() {
143
+ return props.required;
144
+ },
145
+ get invalid() {
146
+ return invalid();
147
+ },
148
+ get open() {
149
+ return memo(() => !!open())() && !blocked();
150
+ },
151
+ onOpenChange: (details) => {
152
+ setOpen(details.open && !blocked());
153
+ if (!details.open) setSelection(selectionOf(emitted));
154
+ },
155
+ get min() {
156
+ return memo(() => !!bounds().min)() ? parseDate(bounds().min) : void 0;
157
+ },
158
+ get max() {
159
+ return memo(() => !!bounds().max)() ? parseDate(bounds().max) : void 0;
160
+ },
161
+ minView: "month",
162
+ maxView: "month",
163
+ defaultView: "month",
164
+ get translations() {
165
+ return { clearTrigger: text().clear };
166
+ },
167
+ get value() {
168
+ return selection();
169
+ },
170
+ onValueChange: (details) => {
171
+ if (blocked()) return;
172
+ const next = details.value[0]?.toString().slice(0, 7) ?? "";
173
+ if (next !== "" && !validateMonth(next, false, props.min, props.max).valid) return;
174
+ setDraft(displayMonth(next, locale()));
175
+ commit(next);
176
+ focusSoon(() => input, 2);
177
+ },
178
+ get positioning() {
179
+ return {
180
+ placement: "bottom-start",
181
+ gutter: 8,
182
+ strategy: portalMount()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]") ? "fixed" : "absolute",
183
+ hideWhenDetached: !!portalMount()?.matches("[role=\"dialog\"], [role=\"alertdialog\"]")
184
+ };
185
+ },
186
+ get children() {
187
+ return [createComponent(DatePicker.Control, {
188
+ "class": "dds-date-picker-control",
189
+ get ["data-filled"]() {
190
+ return draft() !== "" ? "true" : void 0;
191
+ },
192
+ get children() {
193
+ return [ssr(_tmpl$4, ssrHydrationKey() + ssrAttribute("id", escape(id, true), false) + ssrAttribute("form", escape(props.form, true), false) + ssrAttribute("aria-label", props.label ? escape(void 0, true) : escape(props["aria-label"], true), false) + ssrAttribute("aria-labelledby", escape(props["aria-labelledby"], true), false) + ssrAttribute("aria-invalid", invalid() ? "true" : escape(void 0, true), false) + ssrAttribute("aria-required", props.required ? "true" : escape(void 0, true), false) + ssrAttribute("aria-describedby", escape(describedBy(props["aria-describedby"], error() && errorId), true), false), ssrAttribute("value", escape(draft(), true), false), ssrAttribute("required", props.required, true) + ssrAttribute("readonly", escape(props.readOnly, true), false), ssrAttribute("disabled", props.disabled, true) + ssrAttribute("placeholder", isKorean(locale()) ? "YYYY/MM" : "YYYY-MM", false)), createComponent(DatePicker.Trigger, {
194
+ "class": "dds-btn dds-btn--secondary",
195
+ get ["aria-label"]() {
196
+ return `${fieldName()} ${text().openCalendar}`.trim();
197
+ },
198
+ get children() {
199
+ return createComponent(CalendarIcon, {});
200
+ }
201
+ })];
202
+ }
203
+ }), createComponent(Show, {
204
+ get when() {
205
+ return portalMount();
206
+ },
207
+ children: (mount) => createComponent(Portal, {
208
+ get mount() {
209
+ return mount();
210
+ },
211
+ get children() {
212
+ return createComponent(DatePicker.Positioner, {
213
+ "class": "dds-date-picker-positioner",
214
+ get children() {
215
+ return createComponent(DatePicker.Content, {
216
+ "class": "dds-date-picker-content dds-month-picker-content",
217
+ get ["aria-label"]() {
218
+ return `${fieldName()} ${text().chooseMonth}`.trim();
219
+ },
220
+ get children() {
221
+ return createComponent(CalendarView, {
222
+ view: "month",
223
+ get timeZone() {
224
+ return props.timeZone;
225
+ },
226
+ get min() {
227
+ return bounds().min;
228
+ },
229
+ get max() {
230
+ return bounds().max;
231
+ },
232
+ get locale() {
233
+ return locale();
234
+ },
235
+ get messages() {
236
+ return text();
237
+ },
238
+ get disabled() {
239
+ return props.disabled;
240
+ },
241
+ get readOnly() {
242
+ return props.readOnly;
243
+ },
244
+ get showToday() {
245
+ return props.showThisMonth;
246
+ },
247
+ get showClear() {
248
+ return props.clearable;
249
+ },
250
+ onClear: () => {
251
+ setDraft("");
252
+ commit("");
253
+ }
254
+ });
255
+ }
256
+ });
257
+ }
258
+ });
259
+ }
260
+ })
261
+ })];
262
+ }
263
+ })), escape(createComponent(Show, {
264
+ get when() {
265
+ return props.name;
266
+ },
267
+ get children() {
268
+ return ssr(_tmpl$5, ssrHydrationKey(), ssrAttribute("name", escape(props.name, true), false) + ssrAttribute("form", escape(props.form, true), false) + ssrAttribute("value", escape(value(), true), false), ssrAttribute("disabled", props.disabled, true));
269
+ }
270
+ })), escape(createComponent(Show, {
271
+ get when() {
272
+ return error();
273
+ },
274
+ get children() {
275
+ return ssr(_tmpl$6, ssrHydrationKey() + ssrAttribute("id", escape(errorId, true), false), escape(error()));
276
+ }
277
+ })));
278
+ }
279
+ //#endregion
280
+ export { MonthPicker };
281
+
282
+ //# sourceMappingURL=month-picker.server.js.map