@devslab/dds-solid 0.23.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +15 -3
- package/README.md +15 -3
- package/dist/assets/{calendar-view-1RO2mtf1.js → calendar-view-BBQGmkJ7.js} +181 -145
- package/dist/assets/calendar-view-BBQGmkJ7.js.map +1 -0
- package/dist/assets/{choice-DoXiK8nc.js → choice-DPmk9AHn.js} +41 -29
- package/dist/assets/choice-DPmk9AHn.js.map +1 -0
- package/dist/assets/choice-types-h4YVL8xH.js +24 -0
- package/dist/assets/choice-types-h4YVL8xH.js.map +1 -0
- package/dist/assets/date-only-0Ldsjp43.js +174 -0
- package/dist/assets/date-only-0Ldsjp43.js.map +1 -0
- package/dist/assets/direction-BpTqmXs-.js +24 -0
- package/dist/assets/direction-BpTqmXs-.js.map +1 -0
- package/dist/calendar-view-CZLsC57_.js +481 -0
- package/dist/calendar-view-CZLsC57_.js.map +1 -0
- package/dist/calendar-view.d.ts +10 -0
- package/dist/calendar-view.d.ts.map +1 -1
- package/dist/calendar.js +7 -6
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.server.js +2 -1
- package/dist/calendar.server.js.map +1 -1
- package/dist/choice-CTNeFOVo.js +403 -0
- package/dist/choice-CTNeFOVo.js.map +1 -0
- package/dist/choice-types-kSaEnZPr.js +23 -0
- package/dist/choice-types-kSaEnZPr.js.map +1 -0
- package/dist/combobox.js +1 -1
- package/dist/combobox.server.js +1 -1
- package/dist/date-only-Bu4UmsTP.js +151 -0
- package/dist/date-only-Bu4UmsTP.js.map +1 -0
- package/dist/date-only.d.ts +92 -0
- package/dist/date-only.d.ts.map +1 -1
- package/dist/date-picker.js +51 -50
- package/dist/date-picker.js.map +1 -1
- package/dist/date-picker.server.js +2 -1
- package/dist/date-picker.server.js.map +1 -1
- package/dist/date-range-picker.d.ts +41 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +368 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-range-picker.server.js +347 -0
- package/dist/date-range-picker.server.js.map +1 -0
- package/dist/direction-CS85IDNU.js +21 -0
- package/dist/direction-CS85IDNU.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +168 -179
- package/dist/index.js.map +1 -1
- package/dist/internal/choice.d.ts +25 -3
- package/dist/internal/choice.d.ts.map +1 -1
- package/dist/month-picker.d.ts +33 -0
- package/dist/month-picker.d.ts.map +1 -0
- package/dist/month-picker.js +287 -0
- package/dist/month-picker.js.map +1 -0
- package/dist/month-picker.server.js +282 -0
- package/dist/month-picker.server.js.map +1 -0
- package/dist/number-input.d.ts +53 -0
- package/dist/number-input.d.ts.map +1 -0
- package/dist/number-input.js +267 -0
- package/dist/number-input.js.map +1 -0
- package/dist/number-input.server.js +237 -0
- package/dist/number-input.server.js.map +1 -0
- package/dist/segmented-control.d.ts +40 -0
- package/dist/segmented-control.d.ts.map +1 -0
- package/dist/segmented-control.js +133 -0
- package/dist/segmented-control.js.map +1 -0
- package/dist/segmented-control.server.js +138 -0
- package/dist/segmented-control.server.js.map +1 -0
- package/dist/select-picker.js +1 -1
- package/dist/select-picker.server.js +1 -1
- package/dist/server.js +8 -22
- package/dist/server.js.map +1 -1
- package/dist/time-only.d.ts +32 -0
- package/dist/time-only.d.ts.map +1 -0
- package/dist/time-picker-BlMWCQwk.js +113 -0
- package/dist/time-picker-BlMWCQwk.js.map +1 -0
- package/dist/time-picker.d.ts +34 -0
- package/dist/time-picker.d.ts.map +1 -0
- package/dist/time-picker.js +2 -0
- package/dist/time-picker.server.js +152 -0
- package/dist/time-picker.server.js.map +1 -0
- package/package.json +44 -4
- package/styles.css +31 -1
- package/dist/assets/calendar-view-1RO2mtf1.js.map +0 -1
- package/dist/assets/choice-DoXiK8nc.js.map +0 -1
- package/dist/calendar-view-CTBTPB4T.js +0 -444
- package/dist/calendar-view-CTBTPB4T.js.map +0 -1
- package/dist/choice-BPMiJlPJ.js +0 -395
- 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
|
|
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
|
|
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 {
|
|
3
|
-
import {
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
415
|
-
|
|
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
|
|
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
|
-
})
|
|
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(
|
|
434
|
-
|
|
435
|
-
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
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
|
|
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 {
|
|
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-
|
|
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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"}
|