@pichetch08/trip-ui 0.1.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.md +46 -0
- package/dist/accordion.d.ts +18 -0
- package/dist/accordion.js +76 -0
- package/dist/agreement-modal.d.ts +16 -0
- package/dist/agreement-modal.js +67 -0
- package/dist/alert.d.ts +13 -0
- package/dist/alert.js +47 -0
- package/dist/auth-hero.d.ts +7 -0
- package/dist/auth-hero.js +63 -0
- package/dist/avatar.d.ts +21 -0
- package/dist/avatar.js +114 -0
- package/dist/badge.d.ts +13 -0
- package/dist/badge.js +36 -0
- package/dist/banner.d.ts +14 -0
- package/dist/banner.js +57 -0
- package/dist/breadcrumb.d.ts +15 -0
- package/dist/breadcrumb.js +37 -0
- package/dist/button.d.ts +15 -0
- package/dist/button.js +81 -0
- package/dist/card.d.ts +30 -0
- package/dist/card.js +66 -0
- package/dist/change-summary-modal.d.ts +35 -0
- package/dist/change-summary-modal.js +128 -0
- package/dist/channel-badge.d.ts +8 -0
- package/dist/channel-badge.js +17 -0
- package/dist/checkbox.d.ts +28 -0
- package/dist/checkbox.js +108 -0
- package/dist/chunk-ORMEWXMH.js +37 -0
- package/dist/color-picker.d.ts +15 -0
- package/dist/color-picker.js +159 -0
- package/dist/confirm-dialog.d.ts +23 -0
- package/dist/confirm-dialog.js +108 -0
- package/dist/copy-button.d.ts +13 -0
- package/dist/copy-button.js +69 -0
- package/dist/dashed-add-button.d.ts +8 -0
- package/dist/dashed-add-button.js +24 -0
- package/dist/data-table.d.ts +27 -0
- package/dist/data-table.js +152 -0
- package/dist/date-picker.d.ts +19 -0
- package/dist/date-picker.js +234 -0
- package/dist/date-range-picker.d.ts +25 -0
- package/dist/date-range-picker.js +456 -0
- package/dist/dev-auto-fill.d.ts +12 -0
- package/dist/dev-auto-fill.js +22 -0
- package/dist/divider.d.ts +10 -0
- package/dist/divider.js +44 -0
- package/dist/drawer.d.ts +16 -0
- package/dist/drawer.js +111 -0
- package/dist/dropdown-menu.d.ts +20 -0
- package/dist/dropdown-menu.js +94 -0
- package/dist/empty-state.d.ts +13 -0
- package/dist/empty-state.js +24 -0
- package/dist/file-upload.d.ts +32 -0
- package/dist/file-upload.js +212 -0
- package/dist/filter-tabs.d.ts +16 -0
- package/dist/filter-tabs.js +30 -0
- package/dist/footer-action-bar.d.ts +21 -0
- package/dist/footer-action-bar.js +95 -0
- package/dist/form-input.d.ts +16 -0
- package/dist/form-input.js +58 -0
- package/dist/form-textarea.d.ts +13 -0
- package/dist/form-textarea.js +41 -0
- package/dist/icon-button.d.ts +12 -0
- package/dist/icon-button.js +54 -0
- package/dist/icon-picker.d.ts +15 -0
- package/dist/icon-picker.js +311 -0
- package/dist/icon-wrapper.d.ts +15 -0
- package/dist/icon-wrapper.js +52 -0
- package/dist/image-upload.d.ts +24 -0
- package/dist/image-upload.js +122 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.js +155 -0
- package/dist/kbd.d.ts +15 -0
- package/dist/kbd.js +27 -0
- package/dist/mobile-preview.d.ts +36 -0
- package/dist/mobile-preview.js +167 -0
- package/dist/modal.d.ts +19 -0
- package/dist/modal.js +110 -0
- package/dist/multi-select.d.ts +30 -0
- package/dist/multi-select.js +261 -0
- package/dist/number-input.d.ts +21 -0
- package/dist/number-input.js +129 -0
- package/dist/otp-input.d.ts +13 -0
- package/dist/otp-input.js +114 -0
- package/dist/page-header.d.ts +15 -0
- package/dist/page-header.js +43 -0
- package/dist/page-state.d.ts +14 -0
- package/dist/page-state.js +29 -0
- package/dist/pagination.d.ts +20 -0
- package/dist/pagination.js +87 -0
- package/dist/popover.d.ts +11 -0
- package/dist/popover.js +70 -0
- package/dist/preview-drawer.d.ts +33 -0
- package/dist/preview-drawer.js +74 -0
- package/dist/progress-bar.d.ts +15 -0
- package/dist/progress-bar.js +56 -0
- package/dist/qr-code-display.d.ts +10 -0
- package/dist/qr-code-display.js +43 -0
- package/dist/radio-group.d.ts +19 -0
- package/dist/radio-group.js +78 -0
- package/dist/rating.d.ts +12 -0
- package/dist/rating.js +123 -0
- package/dist/rich-editor.d.ts +13 -0
- package/dist/rich-editor.js +97 -0
- package/dist/search-bar.d.ts +14 -0
- package/dist/search-bar.js +64 -0
- package/dist/section-header.d.ts +12 -0
- package/dist/section-header.js +41 -0
- package/dist/segmented-control.d.ts +24 -0
- package/dist/segmented-control.js +38 -0
- package/dist/select-picker.d.ts +24 -0
- package/dist/select-picker.js +157 -0
- package/dist/skeleton.d.ts +14 -0
- package/dist/skeleton.js +53 -0
- package/dist/slider.d.ts +17 -0
- package/dist/slider.js +151 -0
- package/dist/spinner.d.ts +13 -0
- package/dist/spinner.js +38 -0
- package/dist/stat-card.d.ts +20 -0
- package/dist/stat-card.js +87 -0
- package/dist/stats-summary.d.ts +13 -0
- package/dist/stats-summary.js +28 -0
- package/dist/status-badge.d.ts +19 -0
- package/dist/status-badge.js +41 -0
- package/dist/stepper.d.ts +12 -0
- package/dist/stepper.js +89 -0
- package/dist/tabs.d.ts +18 -0
- package/dist/tabs.js +70 -0
- package/dist/tag.d.ts +23 -0
- package/dist/tag.js +158 -0
- package/dist/time-picker.d.ts +19 -0
- package/dist/time-picker.js +222 -0
- package/dist/timeline.d.ts +15 -0
- package/dist/timeline.js +49 -0
- package/dist/toast.d.ts +18 -0
- package/dist/toast.js +108 -0
- package/dist/toggle-switch.d.ts +12 -0
- package/dist/toggle-switch.js +34 -0
- package/dist/tooltip.d.ts +9 -0
- package/dist/tooltip.js +69 -0
- package/dist/trip-day-map-lazy.d.ts +15 -0
- package/dist/trip-day-map-lazy.js +16 -0
- package/dist/trip-day-map.d.ts +15 -0
- package/dist/trip-day-map.js +62 -0
- package/package.json +73 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "./chunk-ORMEWXMH.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useState, useRef, useEffect, useCallback } from "react";
|
|
5
|
+
const DAYS_TH = ["\u0E2D\u0E32", "\u0E08", "\u0E2D", "\u0E1E", "\u0E1E\u0E24", "\u0E28", "\u0E2A"];
|
|
6
|
+
const MONTHS_TH = [
|
|
7
|
+
"\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21",
|
|
8
|
+
"\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C",
|
|
9
|
+
"\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21",
|
|
10
|
+
"\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19",
|
|
11
|
+
"\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21",
|
|
12
|
+
"\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19",
|
|
13
|
+
"\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21",
|
|
14
|
+
"\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21",
|
|
15
|
+
"\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19",
|
|
16
|
+
"\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21",
|
|
17
|
+
"\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19",
|
|
18
|
+
"\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21"
|
|
19
|
+
];
|
|
20
|
+
function daysInMonth(year, month) {
|
|
21
|
+
return new Date(year, month + 1, 0).getDate();
|
|
22
|
+
}
|
|
23
|
+
function firstDayOfMonth(year, month) {
|
|
24
|
+
return new Date(year, month, 1).getDay();
|
|
25
|
+
}
|
|
26
|
+
function toDateStr(d) {
|
|
27
|
+
const y = d.getFullYear();
|
|
28
|
+
const m = String(d.getMonth() + 1).padStart(2, "0");
|
|
29
|
+
const day = String(d.getDate()).padStart(2, "0");
|
|
30
|
+
return `${y}-${m}-${day}`;
|
|
31
|
+
}
|
|
32
|
+
function parseDate(s) {
|
|
33
|
+
if (!s) return null;
|
|
34
|
+
const d = /* @__PURE__ */ new Date(s + "T00:00:00");
|
|
35
|
+
return isNaN(d.getTime()) ? null : d;
|
|
36
|
+
}
|
|
37
|
+
function isSameDay(a, b) {
|
|
38
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
39
|
+
}
|
|
40
|
+
function DatePicker({
|
|
41
|
+
label,
|
|
42
|
+
value,
|
|
43
|
+
onChange,
|
|
44
|
+
placeholder = "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48",
|
|
45
|
+
todayLabel = "\u0E27\u0E31\u0E19\u0E19\u0E35\u0E49",
|
|
46
|
+
clearLabel = "\u0E25\u0E49\u0E32\u0E07",
|
|
47
|
+
min,
|
|
48
|
+
max,
|
|
49
|
+
required,
|
|
50
|
+
error,
|
|
51
|
+
icon = "calendar_today",
|
|
52
|
+
name,
|
|
53
|
+
dayNames = DAYS_TH,
|
|
54
|
+
monthNames = MONTHS_TH
|
|
55
|
+
}) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
const [open, setOpen] = useState(false);
|
|
58
|
+
const containerRef = useRef(null);
|
|
59
|
+
const selectedDate = parseDate(value);
|
|
60
|
+
const minDate = parseDate(min != null ? min : "");
|
|
61
|
+
const maxDate = parseDate(max != null ? max : "");
|
|
62
|
+
const today = /* @__PURE__ */ new Date();
|
|
63
|
+
const [viewYear, setViewYear] = useState((_a = selectedDate == null ? void 0 : selectedDate.getFullYear()) != null ? _a : today.getFullYear());
|
|
64
|
+
const [viewMonth, setViewMonth] = useState((_b = selectedDate == null ? void 0 : selectedDate.getMonth()) != null ? _b : today.getMonth());
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (selectedDate) {
|
|
67
|
+
setViewYear(selectedDate.getFullYear());
|
|
68
|
+
setViewMonth(selectedDate.getMonth());
|
|
69
|
+
}
|
|
70
|
+
}, [value]);
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (!open) return;
|
|
73
|
+
function handleClick(e) {
|
|
74
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
75
|
+
setOpen(false);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function handleKeyDown(e) {
|
|
79
|
+
if (e.key === "Escape") setOpen(false);
|
|
80
|
+
}
|
|
81
|
+
document.addEventListener("mousedown", handleClick);
|
|
82
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
83
|
+
return () => {
|
|
84
|
+
document.removeEventListener("mousedown", handleClick);
|
|
85
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
86
|
+
};
|
|
87
|
+
}, [open]);
|
|
88
|
+
const prevMonth = useCallback(() => {
|
|
89
|
+
setViewMonth((m) => {
|
|
90
|
+
if (m === 0) {
|
|
91
|
+
setViewYear((y) => y - 1);
|
|
92
|
+
return 11;
|
|
93
|
+
}
|
|
94
|
+
return m - 1;
|
|
95
|
+
});
|
|
96
|
+
}, []);
|
|
97
|
+
const nextMonth = useCallback(() => {
|
|
98
|
+
setViewMonth((m) => {
|
|
99
|
+
if (m === 11) {
|
|
100
|
+
setViewYear((y) => y + 1);
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
return m + 1;
|
|
104
|
+
});
|
|
105
|
+
}, []);
|
|
106
|
+
const handleSelect = useCallback((day) => {
|
|
107
|
+
const d = new Date(viewYear, viewMonth, day);
|
|
108
|
+
onChange(toDateStr(d));
|
|
109
|
+
setOpen(false);
|
|
110
|
+
}, [viewYear, viewMonth, onChange]);
|
|
111
|
+
const isDisabled = useCallback((day) => {
|
|
112
|
+
const d = new Date(viewYear, viewMonth, day);
|
|
113
|
+
if (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) return true;
|
|
114
|
+
if (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate())) return true;
|
|
115
|
+
return false;
|
|
116
|
+
}, [viewYear, viewMonth, minDate, maxDate]);
|
|
117
|
+
const totalDays = daysInMonth(viewYear, viewMonth);
|
|
118
|
+
const startDay = firstDayOfMonth(viewYear, viewMonth);
|
|
119
|
+
const cells = [];
|
|
120
|
+
for (let i = 0; i < startDay; i++) cells.push(null);
|
|
121
|
+
for (let d = 1; d <= totalDays; d++) cells.push(d);
|
|
122
|
+
while (cells.length % 7 !== 0) cells.push(null);
|
|
123
|
+
const displayValue = selectedDate ? selectedDate.toLocaleDateString("th-TH", { day: "2-digit", month: "2-digit", year: "numeric" }) : "";
|
|
124
|
+
const triggerId = label ? `datepicker-${label.replace(/\s+/g, "-").toLowerCase()}` : void 0;
|
|
125
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative flex flex-col gap-2", ref: containerRef, children: [
|
|
126
|
+
name && /* @__PURE__ */ jsx("input", { type: "hidden", name, value }),
|
|
127
|
+
label && /* @__PURE__ */ jsxs("label", { htmlFor: triggerId, className: "text-xs font-bold text-on-surface-variant uppercase tracking-widest px-1", children: [
|
|
128
|
+
label,
|
|
129
|
+
required && /* @__PURE__ */ jsx("span", { className: "text-red-500 ml-0.5", children: "*" })
|
|
130
|
+
] }),
|
|
131
|
+
/* @__PURE__ */ jsxs(
|
|
132
|
+
"button",
|
|
133
|
+
{
|
|
134
|
+
id: triggerId,
|
|
135
|
+
type: "button",
|
|
136
|
+
"aria-expanded": open,
|
|
137
|
+
"aria-haspopup": "dialog",
|
|
138
|
+
"aria-required": required,
|
|
139
|
+
onClick: () => setOpen(!open),
|
|
140
|
+
className: `relative w-full bg-surface-container-low border rounded-xl py-4 px-6 text-left transition-all font-medium outline-none active:scale-[0.99] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30 ${icon ? "pl-12" : ""} ${open ? "bg-surface ring-2 ring-primary/20 border-primary" : error ? "border-red-400 bg-red-50/30" : "border-transparent hover:border-outline-variant"}`,
|
|
141
|
+
children: [
|
|
142
|
+
icon && /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined absolute left-4 top-1/2 -translate-y-1/2 text-on-surface-variant", children: icon }),
|
|
143
|
+
displayValue ? /* @__PURE__ */ jsx("span", { className: "text-on-surface", children: displayValue }) : /* @__PURE__ */ jsx("span", { className: "text-outline/40", children: placeholder })
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
),
|
|
147
|
+
error && /* @__PURE__ */ jsxs("p", { className: "text-xs text-red-500 px-1 flex items-center gap-1", children: [
|
|
148
|
+
/* @__PURE__ */ jsx("span", { className: "material-symbols-outlined text-sm", children: "error" }),
|
|
149
|
+
error
|
|
150
|
+
] }),
|
|
151
|
+
open && /* @__PURE__ */ jsxs(
|
|
152
|
+
"div",
|
|
153
|
+
{
|
|
154
|
+
className: "absolute top-full mt-1 z-50 bg-surface rounded-2xl shadow-2xl border border-outline-variant/30 p-4 w-75 animate-in fade-in slide-in-from-top-2 duration-150",
|
|
155
|
+
children: [
|
|
156
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
|
|
157
|
+
/* @__PURE__ */ jsx(
|
|
158
|
+
"button",
|
|
159
|
+
{
|
|
160
|
+
type: "button",
|
|
161
|
+
onClick: prevMonth,
|
|
162
|
+
className: "w-8 h-8 rounded-lg flex items-center justify-center hover:bg-surface-variant transition-colors active:scale-[0.98] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",
|
|
163
|
+
children: /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined text-lg text-on-surface-variant", children: "chevron_left" })
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
/* @__PURE__ */ jsxs("span", { className: "text-sm font-bold text-on-surface", children: [
|
|
167
|
+
monthNames[viewMonth],
|
|
168
|
+
" ",
|
|
169
|
+
viewYear + 543
|
|
170
|
+
] }),
|
|
171
|
+
/* @__PURE__ */ jsx(
|
|
172
|
+
"button",
|
|
173
|
+
{
|
|
174
|
+
type: "button",
|
|
175
|
+
onClick: nextMonth,
|
|
176
|
+
className: "w-8 h-8 rounded-lg flex items-center justify-center hover:bg-surface-variant transition-colors active:scale-[0.98] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",
|
|
177
|
+
children: /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined text-lg text-on-surface-variant", children: "chevron_right" })
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
] }),
|
|
181
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-0.5 mb-1", children: dayNames.map((d) => /* @__PURE__ */ jsx("div", { className: "text-center text-[10px] font-bold text-on-surface-variant uppercase tracking-wider", children: d }, d)) }),
|
|
182
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-0.5", children: cells.map((day, i) => {
|
|
183
|
+
if (day === null) return /* @__PURE__ */ jsx("div", { className: "aspect-square" }, `e-${i}`);
|
|
184
|
+
const d = new Date(viewYear, viewMonth, day);
|
|
185
|
+
const isToday = isSameDay(d, today);
|
|
186
|
+
const isSelected = selectedDate ? isSameDay(d, selectedDate) : false;
|
|
187
|
+
const disabled = isDisabled(day);
|
|
188
|
+
return /* @__PURE__ */ jsx(
|
|
189
|
+
"button",
|
|
190
|
+
{
|
|
191
|
+
type: "button",
|
|
192
|
+
disabled,
|
|
193
|
+
onClick: () => handleSelect(day),
|
|
194
|
+
className: `aspect-square rounded-lg text-xs font-semibold transition-all duration-150 flex items-center justify-center ${isSelected ? "bg-primary text-on-primary shadow-md shadow-primary/25" : isToday ? "bg-primary-container text-(--on-primary-container) font-bold focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30" : disabled ? "text-outline/30 cursor-not-allowed" : "text-on-surface hover:bg-surface-variant focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30"}`,
|
|
195
|
+
children: day
|
|
196
|
+
},
|
|
197
|
+
`d-${day}`
|
|
198
|
+
);
|
|
199
|
+
}) }),
|
|
200
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-3 pt-3 border-t border-outline-variant/20", children: [
|
|
201
|
+
/* @__PURE__ */ jsx(
|
|
202
|
+
"button",
|
|
203
|
+
{
|
|
204
|
+
type: "button",
|
|
205
|
+
onClick: () => {
|
|
206
|
+
onChange("");
|
|
207
|
+
setOpen(false);
|
|
208
|
+
},
|
|
209
|
+
className: "text-xs font-bold text-on-surface-variant hover:text-red-500 transition-colors px-2 py-1 rounded-lg hover:bg-red-50",
|
|
210
|
+
children: clearLabel
|
|
211
|
+
}
|
|
212
|
+
),
|
|
213
|
+
/* @__PURE__ */ jsx(
|
|
214
|
+
"button",
|
|
215
|
+
{
|
|
216
|
+
type: "button",
|
|
217
|
+
onClick: () => {
|
|
218
|
+
handleSelect(today.getDate());
|
|
219
|
+
setViewYear(today.getFullYear());
|
|
220
|
+
setViewMonth(today.getMonth());
|
|
221
|
+
},
|
|
222
|
+
className: "text-xs font-bold text-primary hover:bg-primary-container transition-colors px-3 py-1 rounded-lg",
|
|
223
|
+
children: todayLabel
|
|
224
|
+
}
|
|
225
|
+
)
|
|
226
|
+
] })
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
)
|
|
230
|
+
] });
|
|
231
|
+
}
|
|
232
|
+
export {
|
|
233
|
+
DatePicker
|
|
234
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
interface DateRangePickerProps {
|
|
2
|
+
label?: string;
|
|
3
|
+
startDate: string;
|
|
4
|
+
endDate: string;
|
|
5
|
+
onStartChange: (date: string) => void;
|
|
6
|
+
onEndChange: (date: string) => void;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
error?: string;
|
|
9
|
+
placeholder?: {
|
|
10
|
+
start?: string;
|
|
11
|
+
end?: string;
|
|
12
|
+
};
|
|
13
|
+
clearLabel?: string;
|
|
14
|
+
confirmLabel?: string;
|
|
15
|
+
minDate?: string;
|
|
16
|
+
maxDate?: string;
|
|
17
|
+
icon?: string;
|
|
18
|
+
nameStart?: string;
|
|
19
|
+
nameEnd?: string;
|
|
20
|
+
monthNames?: string[];
|
|
21
|
+
dayNames?: string[];
|
|
22
|
+
}
|
|
23
|
+
declare function DateRangePicker({ label, startDate, endDate, onStartChange, onEndChange, required, error, placeholder, clearLabel, confirmLabel, minDate: minDateStr, maxDate: maxDateStr, icon, nameStart, nameEnd, monthNames, dayNames, }: DateRangePickerProps): React.ReactNode;
|
|
24
|
+
|
|
25
|
+
export { DateRangePicker };
|