@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
package/README.ko.md CHANGED
@@ -68,10 +68,22 @@ const [date, setDate] = createSignal("");
68
68
  <DatePicker label="시작 날짜" value={date()} onChange={setDate} />
69
69
  ```
70
70
 
71
- Ark UI owns focus, selection and keyboard navigation; DDS owns styling. Controlled `value` uses `YYYY-MM-DD` or an empty string. `locale` defaults to `ko-KR`, `timeZone` to `Asia/Seoul`; optional `min`, `max` and `disabled` constrain selection. Time remains a separate field.
71
+ Ark UI owns focus, selection and keyboard navigation; DDS owns styling. Controlled `value` uses `YYYY-MM-DD` or an empty string. `locale` defaults to `ko-KR`, `timeZone` to `Asia/Seoul`; optional `min`, `max` and `disabled` constrain selection. Time of day uses TimePicker.
72
+
73
+ ## TimePicker
74
+
75
+ ```tsx
76
+ import { TimePicker } from "@devslab/dds-solid";
77
+ const [closing, setClosing] = createSignal("18:00");
78
+ <TimePicker label="마감 시간" value={closing()} onValueChange={setClosing} clearable />
79
+ ```
80
+
81
+ 브라우저 기본 `type="time"` 드롭다운 대신 Combobox와 같은 컨트롤과 목록을 씁니다. 값은 24시간 `HH:MM` 또는 빈 문자열이며, 서버가 보낸 `HH:MM:SS`는 `HH:MM`으로 보여 줍니다. 목록은 `step`분 간격(기본 10분)이고 선택한 시간이 가운데에 오도록 열립니다. `10`을 입력하면 10:00–10:50만 남고, 끝까지 입력한 시간(간격에 맞지 않는 `10:45`도)은 Enter나 칸을 벗어날 때 확정됩니다.
72
82
 
73
83
  ## 입력·선택·메뉴·공유 달력
74
84
 
75
- Input/InputGroup은 검색 전용이 아닌 일반 입력 기반이며 라벨 배치·내용 지우기를 지원합니다. Combobox/SelectPicker는 가상화를, DropdownMenu/Popover는 접근 가능한 팝업을, Calendar/DatePicker는 공유 달력을 제공합니다.
85
+ Input/InputGroup은 검색 전용이 아닌 일반 입력 기반이며 라벨 배치·내용 지우기를 지원합니다. Combobox/SelectPicker는 가상화를, DropdownMenu/Popover는 접근 가능한 팝업을, Calendar/DatePicker는 공유 달력을 제공합니다. SegmentedControl은 눈에 보이는 몇 가지 중 하나를 고르는 라디오 그룹이고, NumberInput은 − / + 버튼과 단위를 붙일 수 있는 숫자 입력으로 값은 숫자 또는 null입니다.
86
+
87
+ 상세 import: `@devslab/dds-solid/input`, `/combobox`, `/select-picker`, `/dropdown-menu`, `/popover`, `/calendar`, `/date-picker`, `/time-picker`, `/segmented-control`, `/number-input`, `/date-range-picker`, `/month-picker`. 기존 루트 import와 `styles.css`는 유지합니다. [공통 사용 가이드](https://github.com/devslab-kr/dds/blob/main/docs/components-input-choice-calendar.ko.md)를 참고하세요.
88
+ Input/InputGroup은 검색 전용이 아닌 일반 입력 기반이며 라벨 배치·내용 지우기를 지원합니다. Combobox/SelectPicker는 가상화를, DropdownMenu/Popover는 접근 가능한 팝업을, Calendar/DatePicker는 공유 달력을 제공합니다. DateRangePicker(시작일~종료일 기간)와 MonthPicker(YYYY-MM 월)도 같은 달력을 씁니다.
76
89
 
77
- 상세 import: `@devslab/dds-solid/input`, `/combobox`, `/select-picker`, `/dropdown-menu`, `/popover`, `/calendar`, `/date-picker`. 기존 루트 import와 `styles.css`는 유지합니다. [공통 사용 가이드](https://github.com/devslab-kr/dds/blob/main/docs/components-input-choice-calendar.ko.md)를 참고하세요.
package/README.md CHANGED
@@ -65,10 +65,22 @@ const [date, setDate] = createSignal("");
65
65
  <DatePicker label="시작 날짜" value={date()} onChange={setDate} />
66
66
  ```
67
67
 
68
- Ark UI owns focus, selection and keyboard navigation; DDS owns styling. Controlled `value` uses `YYYY-MM-DD` or an empty string. `locale` defaults to `ko-KR`, `timeZone` to `Asia/Seoul`; optional `min`, `max` and `disabled` constrain selection. Time remains a separate field.
68
+ Ark UI owns focus, selection and keyboard navigation; DDS owns styling. Controlled `value` uses `YYYY-MM-DD` or an empty string. `locale` defaults to `ko-KR`, `timeZone` to `Asia/Seoul`; optional `min`, `max` and `disabled` constrain selection. Time of day uses TimePicker.
69
+
70
+ ## TimePicker
71
+
72
+ ```tsx
73
+ import { TimePicker } from "@devslab/dds-solid";
74
+ const [closing, setClosing] = createSignal("18:00");
75
+ <TimePicker label="마감 시간" value={closing()} onValueChange={setClosing} clearable />
76
+ ```
77
+
78
+ Replaces the native `type="time"` dropdown with the Combobox control and list. Values are 24-hour `HH:MM` or an empty string; `HH:MM:SS` from a server is shown as `HH:MM`. The list steps every `step` minutes (default 10) and opens centered on the selection; typing `10` filters to 10:00–10:50, and a complete typed time (even off the step, e.g. `10:45`) is accepted with Enter or on leaving the field.
69
79
 
70
80
  ## Inputs, choices, overlays and shared calendars
71
81
 
72
- Input/InputGroup are general-purpose native inputs, not search-only, with label placement and clear actions. Combobox/SelectPicker support fixed-row virtualization; DropdownMenu/Popover provide accessible overlays; Calendar/DatePicker share a calendar view.
82
+ Input/InputGroup are general-purpose native inputs, not search-only, with label placement and clear actions. Combobox/SelectPicker support fixed-row virtualization; DropdownMenu/Popover provide accessible overlays; Calendar/DatePicker share a calendar view. SegmentedControl picks one of a few visible options (radio-group semantics); NumberInput is a localized number field with optional − / + buttons and a unit, whose value is a number or null.
83
+
84
+ Use explicit subpaths `@devslab/dds-solid/input`, `/combobox`, `/select-picker`, `/dropdown-menu`, `/popover`, `/calendar`, `/date-picker`, `/time-picker`, `/segmented-control`, `/number-input`, `/date-range-picker`, `/month-picker`, or the existing root exports. Keep importing `styles.css` once. See the [common usage guide](https://github.com/devslab-kr/dds/blob/main/docs/components-input-choice-calendar.md).
85
+ Input/InputGroup are general-purpose native inputs, not search-only, with label placement and clear actions. Combobox/SelectPicker support fixed-row virtualization; DropdownMenu/Popover provide accessible overlays; Calendar/DatePicker share a calendar view, which DateRangePicker (start ~ end period) and MonthPicker (YYYY-MM) also use.
73
86
 
74
- Use explicit subpaths `@devslab/dds-solid/input`, `/combobox`, `/select-picker`, `/dropdown-menu`, `/popover`, `/calendar`, `/date-picker`, or the existing root exports. Keep importing `styles.css` once. See the [common usage guide](https://github.com/devslab-kr/dds/blob/main/docs/components-input-choice-calendar.md).
@@ -1,6 +1,7 @@
1
1
  import { n as describedBy, t as classes } from "./utils-Ou0UJRlO.js";
2
- import { For, Show, createSignal, createUniqueId, splitProps } from "solid-js";
3
- import { createComponent, escape, mergeProps as mergeProps$1, ssr, ssrAttribute, ssrElement, ssrHydrationKey } from "solid-js/web";
2
+ import { c as isKorean, f as todayDate, p as validateInput, r as dateMessages } from "./date-only-0Ldsjp43.js";
3
+ import { For, Index, Show, createSignal, createUniqueId, splitProps } from "solid-js";
4
+ import { createComponent, escape, memo, mergeProps as mergeProps$1, ssr, ssrAttribute, ssrElement, ssrHydrationKey } from "solid-js/web";
4
5
  import { useCheckbox } from "@ark-ui/solid/checkbox";
5
6
  import { useSwitch } from "@ark-ui/solid/switch";
6
7
  import { Field } from "@ark-ui/solid/field";
@@ -22,12 +23,12 @@ function createControllableSignal(options) {
22
23
  //#region src/controls.tsx
23
24
  var _tmpl$$1 = ["<span", " class=\"dds-spinner\" aria-hidden=\"true\"></span>"];
24
25
  var _tmpl$2$1 = ["<span", " aria-hidden=\"true\"> *</span>"];
25
- var _tmpl$3 = [
26
+ var _tmpl$3$1 = [
26
27
  "<span",
27
28
  ">",
28
29
  "</span>"
29
30
  ];
30
- var _tmpl$4 = [
31
+ var _tmpl$4$1 = [
31
32
  "<label",
32
33
  ">",
33
34
  "<span>",
@@ -156,7 +157,7 @@ function Select(props) {
156
157
  "invalid",
157
158
  "children"
158
159
  ]);
159
- return ssr(_tmpl$3, ssrHydrationKey() + ssrAttribute("class", escape(classes("dds-select", local.class), true), false), ssrElement("select", mergeProps$1(rest, {
160
+ return ssr(_tmpl$3$1, ssrHydrationKey() + ssrAttribute("class", escape(classes("dds-select", local.class), true), false), ssrElement("select", mergeProps$1(rest, {
160
161
  "class": "dds-select__input",
161
162
  get ["aria-invalid"]() {
162
163
  return local.invalid ? "true" : void 0;
@@ -179,7 +180,7 @@ function Checkable(props) {
179
180
  defaultValue: local.defaultChecked ?? false,
180
181
  onChange: local.onCheckedChange
181
182
  });
182
- return ssr(_tmpl$4, ssrHydrationKey() + ssrAttribute("class", escape(classes(local.role === "switch" ? "dds-switch" : "dds-check", local.class), true), false), ssrElement("input", mergeProps$1(rest, {
183
+ return ssr(_tmpl$4$1, ssrHydrationKey() + ssrAttribute("class", escape(classes(local.role === "switch" ? "dds-switch" : "dds-check", local.class), true), false), ssrElement("input", mergeProps$1(rest, {
183
184
  get type() {
184
185
  return local.type;
185
186
  },
@@ -251,77 +252,6 @@ function ArkCheckable(props) {
251
252
  }), void 0, false), ssrElement("span", api().getLabelProps(), () => escape(local.label), false)], true);
252
253
  }
253
254
  //#endregion
254
- //#region src/date-only.ts
255
- function isCalendarDate(value) {
256
- if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return false;
257
- const year = Number(value.slice(0, 4)), month = Number(value.slice(5, 7)), day = Number(value.slice(8, 10));
258
- if (year < 1 || month < 1 || month > 12 || day < 1) return false;
259
- return day <= [
260
- 31,
261
- year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,
262
- 31,
263
- 30,
264
- 31,
265
- 30,
266
- 31,
267
- 31,
268
- 30,
269
- 31,
270
- 30,
271
- 31
272
- ][month - 1];
273
- }
274
- function isKorean(locale) {
275
- return /^ko(?:-|$)/i.test(locale);
276
- }
277
- function displayDate(value, locale) {
278
- return isKorean(locale) && isCalendarDate(value) ? value.replaceAll("-", "/") : value;
279
- }
280
- function canonicalInput(inputValue, locale) {
281
- return isKorean(locale) && /^\d{4}\/\d{2}\/\d{2}$/.test(inputValue) ? inputValue.replaceAll("/", "-") : inputValue;
282
- }
283
- function validateInput(inputValue, required, min, max, locale = "en-US") {
284
- const canonical = canonicalInput(inputValue, locale);
285
- const incomplete = inputValue.length < 10 && (/^\d{0,4}(?:-\d{0,2}(?:-\d{0,2})?)?$/.test(inputValue) || isKorean(locale) && /^\d{0,4}(?:\/\d{0,2}(?:\/\d{0,2})?)?$/.test(inputValue));
286
- let reason = "valid";
287
- if (inputValue === "") reason = required ? "required" : "valid";
288
- else if (!isCalendarDate(canonical)) reason = incomplete ? "incomplete" : "invalid";
289
- else if (min && !isCalendarDate(min) || max && !isCalendarDate(max) || min && max && min > max) reason = "invalid";
290
- else if (min && canonical < min) reason = "rangeUnderflow";
291
- else if (max && canonical > max) reason = "rangeOverflow";
292
- return {
293
- inputValue,
294
- value: reason === "valid" ? canonical : null,
295
- valid: reason === "valid",
296
- reason
297
- };
298
- }
299
- function dateMessages(locale, messages = {}) {
300
- const ko = isKorean(locale);
301
- return {
302
- previousMonth: ko ? "이전 달" : "Previous month",
303
- nextMonth: ko ? "다음 달" : "Next month",
304
- today: ko ? "오늘" : "Today",
305
- clear: ko ? "선택 날짜 지우기" : "Clear selected date",
306
- openCalendar: ko ? "달력 열기" : "Open calendar",
307
- selectDate: (text) => ko ? `${text} 선택` : `Choose ${text}`,
308
- required: ko ? "날짜를 입력해 주세요." : "Enter a date.",
309
- invalid: ko ? "YYYY/MM/DD 형식의 유효한 범위 내 날짜를 입력해 주세요." : "Enter a valid date within the allowed range (YYYY-MM-DD).",
310
- ...messages
311
- };
312
- }
313
- /** Today is the sole timestamp boundary; stored dates remain Gregorian date-only strings. */
314
- function todayDate(timeZone) {
315
- const parts = new Intl.DateTimeFormat("en-US-u-ca-gregory-nu-latn", {
316
- timeZone,
317
- year: "numeric",
318
- month: "2-digit",
319
- day: "2-digit"
320
- }).formatToParts(/* @__PURE__ */ new Date());
321
- const part = (type) => parts.find((item) => item.type === type).value;
322
- return `${part("year").padStart(4, "0")}-${part("month")}-${part("day")}`;
323
- }
324
- //#endregion
325
255
  //#region src/calendar-view.tsx
326
256
  var _tmpl$ = [
327
257
  "<svg",
@@ -329,9 +259,21 @@ var _tmpl$ = [
329
259
  "></path></svg>"
330
260
  ];
331
261
  var _tmpl$2 = [
262
+ "<span",
263
+ " class=\"dds-date-picker-year\" aria-live=\"polite\">",
264
+ "</span>"
265
+ ];
266
+ var _tmpl$3 = [
267
+ "<div",
268
+ " class=\"dds-date-picker-presets\" role=\"group\"",
269
+ ">",
270
+ "</div>"
271
+ ];
272
+ var _tmpl$4 = [
332
273
  "<div",
333
274
  " class=\"dds-date-picker-footer\"><!--$-->",
334
275
  "<!--/--><!--$-->",
276
+ "<!--/--><!--$-->",
335
277
  "<!--/--></div>"
336
278
  ];
337
279
  function Chevron(props) {
@@ -339,9 +281,11 @@ function Chevron(props) {
339
281
  }
340
282
  /** Internal view: the caller owns the single Ark root and its selection. */
341
283
  function CalendarView(props) {
342
- const text = () => dateMessages(props.locale ?? "ko-KR", props.messages), locked = () => props.disabled || props.readOnly;
284
+ const text = () => dateMessages(props.locale ?? "ko-KR", props.messages), locked = () => props.disabled || props.readOnly, months = () => props.view === "month", presets = () => props.presets ?? [], todayAllowed = () => validateInput(todayDate(props.timeZone ?? "Asia/Seoul"), false, props.min, props.max, props.locale).valid;
343
285
  return createComponent(DatePicker.View, {
344
- view: "day",
286
+ get view() {
287
+ return months() ? "month" : "day";
288
+ },
345
289
  get children() {
346
290
  return createComponent(DatePicker.Context, { children: (picker) => [
347
291
  createComponent(DatePicker.ViewControl, {
@@ -351,17 +295,27 @@ function CalendarView(props) {
351
295
  createComponent(DatePicker.PrevTrigger, {
352
296
  "class": "dds-btn dds-btn--secondary",
353
297
  get ["aria-label"]() {
354
- return text().previousMonth;
298
+ return memo(() => !!months())() ? text().previousYear : text().previousMonth;
355
299
  },
356
300
  get children() {
357
301
  return createComponent(Chevron, {});
358
302
  }
359
303
  }),
360
- createComponent(DatePicker.RangeText, {}),
304
+ createComponent(Show, {
305
+ get when() {
306
+ return months();
307
+ },
308
+ get fallback() {
309
+ return createComponent(DatePicker.RangeText, {});
310
+ },
311
+ get children() {
312
+ return ssr(_tmpl$2, ssrHydrationKey(), isKorean(props.locale ?? "ko-KR") ? `${escape(picker().focusedValue.year)}년` : escape(picker().focusedValue.year));
313
+ }
314
+ }),
361
315
  createComponent(DatePicker.NextTrigger, {
362
316
  "class": "dds-btn dds-btn--secondary",
363
317
  get ["aria-label"]() {
364
- return text().nextMonth;
318
+ return memo(() => !!months())() ? text().nextYear : text().nextMonth;
365
319
  },
366
320
  get children() {
367
321
  return createComponent(Chevron, { next: true });
@@ -370,87 +324,169 @@ function CalendarView(props) {
370
324
  ];
371
325
  }
372
326
  }),
373
- createComponent(DatePicker.Table, {
374
- "class": "dds-date-picker-table",
375
- get children() {
376
- return [createComponent(DatePicker.TableHead, { get children() {
377
- return createComponent(DatePicker.TableRow, { get children() {
378
- return createComponent(For, {
379
- get each() {
380
- return picker().weekDays;
381
- },
382
- children: (day) => createComponent(DatePicker.TableHeader, { get children() {
383
- return day.short;
384
- } })
385
- });
386
- } });
387
- } }), createComponent(DatePicker.TableBody, { get children() {
388
- return createComponent(For, {
389
- get each() {
390
- return picker().weeks;
391
- },
392
- children: (week) => createComponent(DatePicker.TableRow, { get children() {
393
- return createComponent(For, {
394
- each: week,
395
- children: (day) => createComponent(DatePicker.TableCell, {
396
- value: day,
397
- get children() {
398
- return createComponent(DatePicker.TableCellTrigger, { get children() {
399
- return day.day;
400
- } });
401
- }
402
- })
403
- });
404
- } })
405
- });
406
- } })];
407
- }
408
- }),
409
- ssr(_tmpl$2, ssrHydrationKey(), escape(createComponent(Show, {
327
+ createComponent(Show, {
410
328
  get when() {
411
- return props.showToday !== false;
329
+ return months();
330
+ },
331
+ get fallback() {
332
+ return createComponent(DatePicker.Table, {
333
+ "class": "dds-date-picker-table",
334
+ get children() {
335
+ return [createComponent(DatePicker.TableHead, { get children() {
336
+ return createComponent(DatePicker.TableRow, { get children() {
337
+ return createComponent(Index, {
338
+ get each() {
339
+ return picker().weekDays;
340
+ },
341
+ children: (day) => createComponent(DatePicker.TableHeader, { get children() {
342
+ return day().short;
343
+ } })
344
+ });
345
+ } });
346
+ } }), createComponent(DatePicker.TableBody, { get children() {
347
+ return createComponent(Index, {
348
+ get each() {
349
+ return picker().weeks;
350
+ },
351
+ children: (week) => createComponent(DatePicker.TableRow, { get children() {
352
+ return createComponent(Index, {
353
+ get each() {
354
+ return week();
355
+ },
356
+ children: (day) => createComponent(DatePicker.TableCell, {
357
+ get value() {
358
+ return day();
359
+ },
360
+ get children() {
361
+ return createComponent(DatePicker.TableCellTrigger, { get children() {
362
+ return day().day;
363
+ } });
364
+ }
365
+ })
366
+ });
367
+ } })
368
+ });
369
+ } })];
370
+ }
371
+ });
412
372
  },
413
373
  get children() {
414
- return createComponent(Button, {
415
- type: "button",
416
- tone: "secondary",
417
- get disabled() {
418
- return locked() || !validateInput(todayDate(props.timeZone ?? "Asia/Seoul"), false, props.min, props.max, props.locale).valid;
419
- },
420
- onClick: () => {
421
- if (!locked() && validateInput(todayDate(props.timeZone ?? "Asia/Seoul"), false, props.min, props.max, props.locale).valid) picker().selectToday();
422
- },
374
+ return createComponent(DatePicker.Table, {
375
+ "class": "dds-date-picker-table dds-date-picker-table--months",
423
376
  get children() {
424
- return text().today;
377
+ return createComponent(DatePicker.TableBody, { get children() {
378
+ return createComponent(Index, {
379
+ get each() {
380
+ return picker().getMonthsGrid({
381
+ columns: 3,
382
+ format: "short"
383
+ });
384
+ },
385
+ children: (row) => createComponent(DatePicker.TableRow, { get children() {
386
+ return createComponent(Index, {
387
+ get each() {
388
+ return row();
389
+ },
390
+ children: (month) => createComponent(DatePicker.TableCell, {
391
+ get value() {
392
+ return month().value;
393
+ },
394
+ get children() {
395
+ return createComponent(DatePicker.TableCellTrigger, {
396
+ get ["data-today"]() {
397
+ return todayDate(props.timeZone ?? "Asia/Seoul").slice(0, 7) === `${String(picker().focusedValue.year).padStart(4, "0")}-${String(month().value).padStart(2, "0")}` ? "" : void 0;
398
+ },
399
+ get children() {
400
+ return month().label;
401
+ }
402
+ });
403
+ }
404
+ })
405
+ });
406
+ } })
407
+ });
408
+ } });
425
409
  }
426
410
  });
427
411
  }
428
- })), escape(createComponent(Show, {
412
+ }),
413
+ createComponent(Show, {
429
414
  get when() {
430
- return props.showClear !== false;
415
+ return presets().length > 0 || props.showToday !== false || props.showClear !== false;
431
416
  },
432
417
  get children() {
433
- return createComponent(DatePicker.ClearTrigger, {
434
- hidden: false,
435
- "class": "dds-btn dds-btn--secondary",
436
- get disabled() {
437
- return locked();
418
+ return ssr(_tmpl$4, ssrHydrationKey(), escape(createComponent(Show, {
419
+ get when() {
420
+ return presets().length > 0;
438
421
  },
439
- onPointerDown: (event) => event.preventDefault(),
440
- onClick: () => {
441
- if (!locked()) props.onClear?.();
422
+ get children() {
423
+ return ssr(_tmpl$3, ssrHydrationKey(), ssrAttribute("aria-label", escape(props.presetsLabel, true), false), escape(createComponent(For, {
424
+ get each() {
425
+ return presets();
426
+ },
427
+ children: (preset) => createComponent(Button, {
428
+ type: "button",
429
+ tone: "secondary",
430
+ size: "sm",
431
+ get disabled() {
432
+ return locked() || preset.disabled;
433
+ },
434
+ onClick: () => {
435
+ if (!locked() && !preset.disabled) preset.onSelect();
436
+ },
437
+ get children() {
438
+ return preset.label;
439
+ }
440
+ })
441
+ })));
442
+ }
443
+ })), escape(createComponent(Show, {
444
+ get when() {
445
+ return props.showToday !== false;
442
446
  },
443
447
  get children() {
444
- return text().clear;
448
+ return createComponent(Button, {
449
+ type: "button",
450
+ tone: "secondary",
451
+ get disabled() {
452
+ return locked() || !todayAllowed();
453
+ },
454
+ onClick: () => {
455
+ if (!locked() && todayAllowed()) picker().selectToday();
456
+ },
457
+ get children() {
458
+ return months() ? text().thisMonth : text().today;
459
+ }
460
+ });
445
461
  }
446
- });
462
+ })), escape(createComponent(Show, {
463
+ get when() {
464
+ return props.showClear !== false;
465
+ },
466
+ get children() {
467
+ return createComponent(DatePicker.ClearTrigger, {
468
+ hidden: false,
469
+ "class": "dds-btn dds-btn--secondary",
470
+ get disabled() {
471
+ return locked();
472
+ },
473
+ onPointerDown: (event) => event.preventDefault(),
474
+ onClick: () => {
475
+ if (!locked()) props.onClear?.();
476
+ },
477
+ get children() {
478
+ return text().clear;
479
+ }
480
+ });
481
+ }
482
+ })));
447
483
  }
448
- })))
484
+ })
449
485
  ] });
450
486
  }
451
487
  });
452
488
  }
453
489
  //#endregion
454
- export { isCalendarDate as a, Button as c, IconButton as d, Radio as f, createControllableSignal as h, displayDate as i, Checkbox as l, Switch as m, canonicalInput as n, isKorean as o, Select as p, dateMessages as r, validateInput as s, CalendarView as t, Field$1 as u };
490
+ export { IconButton as a, Switch as c, Field$1 as i, createControllableSignal as l, Button as n, Radio as o, Checkbox as r, Select as s, CalendarView as t };
455
491
 
456
- //# sourceMappingURL=calendar-view-1RO2mtf1.js.map
492
+ //# sourceMappingURL=calendar-view-BBQGmkJ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-view-BBQGmkJ7.js","names":["createUniqueId","splitProps","JSX","ParentProps","createControllableSignal","useCheckbox","useSwitch","Field","ArkField","classes","describedBy","ButtonTone","ControlSize","ButtonProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","class","tone","size","loading","Button","props","local","rest","_$ssrElement","_$mergeProps","type","undefined","disabled","aria-busy","_tmpl$","_$ssrHydrationKey","_$escape","children","IconButtonProps","Element","IconButton","FieldControlProps","id","FieldProps","label","helpText","error","required","generated","helpId","errorId","control","_$createComponent","Root","invalid","Boolean","ids","helperText","errorText","Label","for","_$ssr","_tmpl$2","HelperText","ErrorText","role","SelectProps","SelectHTMLAttributes","HTMLSelectElement","Select","_tmpl$3","_$ssrAttribute","aria-invalid","CheckableProps","InputHTMLAttributes","HTMLInputElement","checked","defaultChecked","onCheckedChange","inputClass","Checkable","setChecked","value","defaultValue","onChange","_tmpl$4","CheckboxProps","Checkbox","ArkCheckable","kind","RadioProps","Radio","SwitchProps","Switch","options","hiddenInput","details","readOnly","readonly","name","form","String","api","rootProps","attributes","getRootProps","getHiddenInputProps","style","getLabelProps","callInputHandler","handler","FocusEventHandlerUnion","FocusEvent","event","currentTarget","target","DatePicker","ArkDatePicker","For","Index","Show","Button","dateMessages","isKorean","todayDate","validateInput","CalendarMessages","Chevron","props","next","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","CalendarViewPreset","label","disabled","onSelect","CalendarViewProps","timeZone","min","max","locale","messages","readOnly","showToday","showClear","onClear","view","presets","presetsLabel","CalendarView","text","locked","months","todayAllowed","valid","_$createComponent","View","children","Context","picker","ViewControl","PrevTrigger","aria-label","_$memo","previousYear","previousMonth","when","fallback","RangeText","_tmpl$2","_$escape","focusedValue","year","NextTrigger","nextYear","nextMonth","Table","TableHead","TableRow","each","weekDays","day","TableHeader","short","TableBody","weeks","week","TableCell","value","TableCellTrigger","getMonthsGrid","columns","format","row","month","data-today","slice","String","padStart","undefined","length","_tmpl$4","_tmpl$3","preset","type","tone","size","onClick","selectToday","thisMonth","today","ClearTrigger","hidden","onPointerDown","event","preventDefault","clear"],"sources":["../../src/controllable.ts","../../src/controls.tsx","../../src/calendar-view.tsx"],"sourcesContent":["import { createSignal, type Accessor } from \"solid-js\";\n\nexport interface ControllableOptions<T> {\n value: Accessor<T | undefined>;\n defaultValue: T;\n onChange: ((value: T) => void) | undefined;\n}\n\nexport type ControllableSetter<T> = (next: T | ((previous: T) => T)) => T;\n\nexport function createControllableSignal<T>(options: ControllableOptions<T>): [Accessor<T>, ControllableSetter<T>] {\n const [internal, setInternal] = createSignal(options.defaultValue);\n const value: Accessor<T> = () => options.value() ?? internal();\n const setInternalValue = setInternal as unknown as ControllableSetter<T>;\n const setValue: ControllableSetter<T> = (next) => {\n const resolved = typeof next === \"function\"\n ? (next as (previous: T) => T)(value())\n : next;\n if (options.value() === undefined) setInternalValue(() => resolved);\n options.onChange?.(resolved);\n return resolved;\n };\n return [value, setValue];\n}\n","import {\n createUniqueId,\n splitProps,\n type JSX,\n type ParentProps,\n} from \"solid-js\";\n\nimport { createControllableSignal } from \"./controllable\";\nimport { useCheckbox } from \"@ark-ui/solid/checkbox\";\nimport { useSwitch } from \"@ark-ui/solid/switch\";\nimport { Field as ArkField } from \"@ark-ui/solid/field\";\nimport { classes, describedBy } from \"./utils\";\n\nexport type ButtonTone = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ControlSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"class\"> {\n class?: string;\n tone?: ButtonTone;\n size?: ControlSize;\n loading?: boolean;\n}\n\nexport function Button(props: ParentProps<ButtonProps>) {\n const [local, rest] = splitProps(props, [\"class\", \"tone\", \"size\", \"loading\", \"disabled\", \"type\", \"children\"]);\n return (\n <button\n {...rest}\n type={local.type ?? \"button\"}\n class={classes(\"dds-btn\", `dds-btn--${local.tone ?? \"primary\"}`, local.size !== \"md\" && local.size ? `dds-btn--${local.size}` : undefined, local.class)}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n {local.loading && <span class=\"dds-spinner\" aria-hidden=\"true\" />}\n {local.children}\n </button>\n );\n}\n\nexport interface IconButtonProps extends Omit<ButtonProps, \"tone\" | \"children\"> {\n \"aria-label\": string;\n tone?: \"ghost\" | \"secondary\" | \"danger\";\n children: JSX.Element;\n}\n\nexport function IconButton(props: IconButtonProps) {\n const [local, rest] = splitProps(props, [\"class\", \"tone\", \"size\", \"loading\", \"disabled\", \"type\", \"children\"]);\n return (\n <button\n {...rest}\n type={local.type ?? \"button\"}\n class={classes(\"dds-iconbtn\", local.tone && local.tone !== \"ghost\" ? `dds-iconbtn--${local.tone}` : undefined, local.size !== \"md\" && local.size ? `dds-iconbtn--${local.size}` : undefined, local.class)}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n {local.loading ? <span class=\"dds-spinner\" aria-hidden=\"true\" /> : local.children}\n </button>\n );\n}\n\nexport interface FieldControlProps {\n id: string;\n \"aria-describedby\": string | undefined;\n \"aria-invalid\": \"true\" | undefined;\n \"aria-required\": \"true\" | undefined;\n}\n\nexport interface FieldProps {\n id?: string;\n label: JSX.Element;\n helpText?: JSX.Element;\n error?: JSX.Element;\n required?: boolean;\n class?: string;\n children: JSX.Element | ((props: FieldControlProps) => JSX.Element);\n}\n\nexport function Field(props: FieldProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-field-${generated}`;\n const helpId = () => props.helpText ? `${id()}-help` : undefined;\n const errorId = () => props.error ? `${id()}-error` : undefined;\n const control = (): FieldControlProps => ({\n id: id(),\n \"aria-describedby\": describedBy(helpId(), errorId()),\n \"aria-invalid\": props.error ? \"true\" : undefined,\n \"aria-required\": props.required ? \"true\" : undefined,\n });\n return (\n <ArkField.Root id={id()} required={props.required ?? false} invalid={Boolean(props.error)} ids={{ control: `${id()}-root`, helperText: `${id()}-help`, errorText: `${id()}-error` }} class={classes(\"dds-field\", props.error ? \"dds-field--error\" : undefined, props.class)}>\n <ArkField.Label class=\"dds-field__label\" for={id()}>{props.label}{props.required && <span aria-hidden=\"true\"> *</span>}</ArkField.Label>\n {typeof props.children === \"function\" ? props.children(control()) : props.children}\n {props.helpText && <ArkField.HelperText class=\"dds-field__help\">{props.helpText}</ArkField.HelperText>}\n {props.error && <ArkField.ErrorText class=\"dds-field__error\" role=\"alert\">{props.error}</ArkField.ErrorText>}\n </ArkField.Root>\n );\n}\n\nexport interface SelectProps extends Omit<JSX.SelectHTMLAttributes<HTMLSelectElement>, \"class\"> {\n class?: string;\n invalid?: boolean;\n}\n\nexport function Select(props: ParentProps<SelectProps>) {\n const [local, rest] = splitProps(props, [\"class\", \"invalid\", \"children\"]);\n return (\n <span class={classes(\"dds-select\", local.class)}>\n <select {...rest} class=\"dds-select__input\" aria-invalid={local.invalid ? \"true\" : undefined}>\n {local.children}\n </select>\n </span>\n );\n}\n\ninterface CheckableProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, \"checked\" | \"class\" | \"onChange\" | \"role\" | \"type\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n label: JSX.Element;\n class?: string;\n inputClass?: string;\n}\n\nfunction Checkable(props: CheckableProps & { type: \"checkbox\" | \"radio\"; role?: \"switch\" }) {\n const [local, rest] = splitProps(props, [\"checked\", \"defaultChecked\", \"onCheckedChange\", \"label\", \"class\", \"inputClass\", \"type\", \"role\"]);\n const [checked, setChecked] = createControllableSignal({\n value: () => local.checked,\n defaultValue: local.defaultChecked ?? false,\n onChange: local.onCheckedChange,\n });\n return (\n <label class={classes(local.role === \"switch\" ? \"dds-switch\" : \"dds-check\", local.class)}>\n <input\n {...rest}\n type={local.type}\n role={local.role}\n class={classes(local.role === \"switch\" ? \"dds-switch__input\" : \"dds-check__input\", local.inputClass)}\n checked={checked()}\n onChange={(event) => setChecked(event.currentTarget.checked)}\n />\n <span>{local.label}</span>\n </label>\n );\n}\n\nexport type CheckboxProps = CheckableProps;\nexport const Checkbox = (props: CheckboxProps) => <ArkCheckable {...props} kind=\"checkbox\" />;\n\nexport type RadioProps = CheckableProps;\nexport const Radio = (props: RadioProps) => <Checkable {...props} type=\"radio\" />;\n\nexport type SwitchProps = CheckableProps;\nexport const Switch = (props: SwitchProps) => <ArkCheckable {...props} kind=\"switch\" />;\n\nfunction ArkCheckable(props: CheckableProps & { kind: \"checkbox\" | \"switch\" }) {\n const generated = createUniqueId();\n const [local, rest] = splitProps(props, [\"checked\", \"defaultChecked\", \"onCheckedChange\", \"label\", \"class\", \"inputClass\", \"kind\", \"id\", \"onClick\", \"onFocusIn\", \"onFocusOut\", \"style\"]);\n const options = () => ({\n id: `dds-check-${generated}`,\n ids: { hiddenInput: local.id ?? `dds-check-${generated}-input` },\n checked: local.checked, defaultChecked: local.defaultChecked,\n onCheckedChange: (details: { checked: boolean | \"indeterminate\" }) => local.onCheckedChange?.(details.checked === true),\n disabled: rest.disabled, required: rest.required, readOnly: rest.readonly,\n name: rest.name, form: rest.form, value: String(rest.value ?? \"on\"),\n });\n const api = local.kind === \"switch\" ? useSwitch(options) : useCheckbox(options);\n const inputClass = () => local.kind === \"switch\" ? \"dds-switch__input\" : \"dds-check__input\";\n const rootProps = () => {\n const [, attributes] = splitProps(api().getRootProps(), [\"onClick\"]);\n return attributes;\n };\n return <label {...rootProps()} class={classes(local.kind === \"switch\" ? \"dds-switch\" : \"dds-check\", local.class)}>\n <input {...api().getHiddenInputProps()} {...rest}\n ref={(input) => {\n // Ark normalizes defaultChecked to checked. Preserve the native reset\n // baseline as well when rendering its input visibly with DDS CSS.\n input.defaultChecked = local.checked ?? local.defaultChecked ?? false;\n if (typeof rest.ref === \"function\") rest.ref(input);\n }}\n type=\"checkbox\" role={local.kind === \"switch\" ? \"switch\" : undefined}\n class={classes(inputClass(), local.inputClass)}\n style={local.style ?? {}} checked={api().checked}\n onFocusIn={(event) => {\n callInputHandler(api().getHiddenInputProps().onFocusIn, event);\n callInputHandler(local.onFocusIn, event);\n }}\n onFocusOut={(event) => {\n callInputHandler(api().getHiddenInputProps().onFocusOut, event);\n callInputHandler(local.onFocusOut, event);\n }}\n onClick={(event) => {\n if (typeof local.onClick === \"function\") local.onClick(event);\n else if (local.onClick) local.onClick[0](local.onClick[1], event);\n if (!event.defaultPrevented) {\n const handler = api().getHiddenInputProps().onClick;\n if (typeof handler === \"function\") handler(event);\n else if (handler) handler[0](handler[1], event);\n }\n }}\n />\n <span {...api().getLabelProps()}>{local.label}</span>\n </label>;\n}\n\nfunction callInputHandler(handler: JSX.FocusEventHandlerUnion<HTMLInputElement, FocusEvent> | undefined, event: FocusEvent & { currentTarget: HTMLInputElement; target: HTMLInputElement }) {\n if (typeof handler === \"function\") handler(event);\n else if (handler) handler[0](handler[1], event);\n}\n","import { DatePicker as ArkDatePicker } from \"@ark-ui/solid/date-picker\";\nimport { For, Index, Show } from \"solid-js\";\nimport { Button } from \"./controls\";\nimport {\n dateMessages,\n isKorean,\n todayDate,\n validateInput,\n type CalendarMessages,\n} from \"./date-only\";\nfunction Chevron(props: { next?: boolean }) {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n aria-hidden=\"true\"\n >\n <path d={props.next ? \"m9 5 7 7-7 7\" : \"m15 5-7 7 7 7\"} />\n </svg>\n );\n}\n/** A consumer-supplied footer shortcut (DateRangePicker presets). */\nexport interface CalendarViewPreset {\n label: string;\n disabled?: boolean | undefined;\n onSelect: () => void;\n}\nexport interface CalendarViewProps {\n timeZone?: string | undefined;\n min?: string | undefined;\n max?: string | undefined;\n locale?: string | undefined;\n messages?: CalendarMessages | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n showToday?: boolean | undefined;\n showClear?: boolean | undefined;\n onClear?: (() => void) | undefined;\n /** \"month\" renders a 3 × 4 month grid paged by year; the caller sets Ark minView/maxView to match. */\n view?: \"day\" | \"month\" | undefined;\n presets?: CalendarViewPreset[] | undefined;\n presetsLabel?: string | undefined;\n}\n/** Internal view: the caller owns the single Ark root and its selection. */\nexport function CalendarView(props: CalendarViewProps) {\n const text = () => dateMessages(props.locale ?? \"ko-KR\", props.messages),\n locked = () => props.disabled || props.readOnly,\n months = () => props.view === \"month\",\n presets = () => props.presets ?? [],\n todayAllowed = () =>\n validateInput(\n todayDate(props.timeZone ?? \"Asia/Seoul\"),\n false,\n props.min,\n props.max,\n props.locale,\n ).valid;\n return (\n <ArkDatePicker.View view={months() ? \"month\" : \"day\"}>\n <ArkDatePicker.Context>\n {(picker) => (\n <>\n <ArkDatePicker.ViewControl class=\"dds-date-picker-header\">\n <ArkDatePicker.PrevTrigger\n class=\"dds-btn dds-btn--secondary\"\n aria-label={months() ? text().previousYear : text().previousMonth}\n >\n <Chevron />\n </ArkDatePicker.PrevTrigger>\n <Show when={months()} fallback={<ArkDatePicker.RangeText />}>\n <span class=\"dds-date-picker-year\" aria-live=\"polite\">\n {isKorean(props.locale ?? \"ko-KR\")\n ? `${picker().focusedValue.year}년`\n : picker().focusedValue.year}\n </span>\n </Show>\n <ArkDatePicker.NextTrigger\n class=\"dds-btn dds-btn--secondary\"\n aria-label={months() ? text().nextYear : text().nextMonth}\n >\n <Chevron next />\n </ArkDatePicker.NextTrigger>\n </ArkDatePicker.ViewControl>\n <Show\n when={months()}\n fallback={\n <ArkDatePicker.Table class=\"dds-date-picker-table\">\n <ArkDatePicker.TableHead>\n <ArkDatePicker.TableRow>\n <Index each={picker().weekDays}>\n {(day) => (\n <ArkDatePicker.TableHeader>\n {day().short}\n </ArkDatePicker.TableHeader>\n )}\n </Index>\n </ArkDatePicker.TableRow>\n </ArkDatePicker.TableHead>\n <ArkDatePicker.TableBody>\n <Index each={picker().weeks}>\n {(week) => (\n <ArkDatePicker.TableRow>\n <Index each={week()}>\n {(day) => (\n <ArkDatePicker.TableCell value={day()}>\n <ArkDatePicker.TableCellTrigger>\n {day().day}\n </ArkDatePicker.TableCellTrigger>\n </ArkDatePicker.TableCell>\n )}\n </Index>\n </ArkDatePicker.TableRow>\n )}\n </Index>\n </ArkDatePicker.TableBody>\n </ArkDatePicker.Table>\n }\n >\n <ArkDatePicker.Table class=\"dds-date-picker-table dds-date-picker-table--months\">\n <ArkDatePicker.TableBody>\n <Index each={picker().getMonthsGrid({ columns: 3, format: \"short\" })}>\n {(row) => (\n <ArkDatePicker.TableRow>\n <Index each={row()}>\n {(month) => (\n <ArkDatePicker.TableCell value={month().value}>\n <ArkDatePicker.TableCellTrigger\n data-today={\n todayDate(props.timeZone ?? \"Asia/Seoul\").slice(0, 7) ===\n `${String(picker().focusedValue.year).padStart(4, \"0\")}-${String(month().value).padStart(2, \"0\")}`\n ? \"\"\n : undefined\n }\n >\n {month().label}\n </ArkDatePicker.TableCellTrigger>\n </ArkDatePicker.TableCell>\n )}\n </Index>\n </ArkDatePicker.TableRow>\n )}\n </Index>\n </ArkDatePicker.TableBody>\n </ArkDatePicker.Table>\n </Show>\n <Show\n when={\n presets().length > 0 ||\n props.showToday !== false ||\n props.showClear !== false\n }\n >\n <div class=\"dds-date-picker-footer\">\n <Show when={presets().length > 0}>\n <div\n class=\"dds-date-picker-presets\"\n role=\"group\"\n aria-label={props.presetsLabel}\n >\n <For each={presets()}>\n {(preset) => (\n <Button\n type=\"button\"\n tone=\"secondary\"\n size=\"sm\"\n disabled={locked() || preset.disabled}\n onClick={() => {\n if (!locked() && !preset.disabled) preset.onSelect();\n }}\n >\n {preset.label}\n </Button>\n )}\n </For>\n </div>\n </Show>\n <Show when={props.showToday !== false}>\n <Button\n type=\"button\"\n tone=\"secondary\"\n disabled={locked() || !todayAllowed()}\n onClick={() => {\n if (!locked() && todayAllowed()) picker().selectToday();\n }}\n >\n {months() ? text().thisMonth : text().today}\n </Button>\n </Show>\n <Show when={props.showClear !== false}>\n <ArkDatePicker.ClearTrigger\n hidden={false}\n class=\"dds-btn dds-btn--secondary\"\n disabled={locked()}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => {\n if (!locked()) props.onClear?.();\n }}\n >\n {text().clear}\n </ArkDatePicker.ClearTrigger>\n </Show>\n </div>\n </Show>\n </>\n )}\n </ArkDatePicker.Context>\n </ArkDatePicker.View>\n );\n}\n"],"mappings":"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"}