@deepnoid/ui 0.1.109 → 0.1.111

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 (59) hide show
  1. package/.turbo/turbo-build.log +446 -466
  2. package/dist/chunk-CV6IVDL6.mjs +356 -0
  3. package/dist/{chunk-2EECKYM4.mjs → chunk-YCLB7ZNK.mjs} +1 -1
  4. package/dist/{chunk-7VS6YXNB.mjs → chunk-ZWLRSZTC.mjs} +2 -2
  5. package/dist/components/charts/circularProgress.js +2 -2
  6. package/dist/components/charts/circularProgress.mjs +1 -1
  7. package/dist/components/charts/index.js +2 -2
  8. package/dist/components/charts/index.mjs +1 -1
  9. package/dist/components/picker/index.d.mts +4 -0
  10. package/dist/components/picker/index.d.ts +4 -0
  11. package/dist/components/{dateTimePicker/calendar.js → picker/index.js} +716 -173
  12. package/dist/components/{dateTimePicker/calendar.mjs → picker/index.mjs} +7 -6
  13. package/dist/components/picker/timePicker.d.mts +251 -0
  14. package/dist/components/picker/timePicker.d.ts +251 -0
  15. package/dist/components/{dateTimePicker/dateTimePicker.js → picker/timePicker.js} +617 -904
  16. package/dist/components/{dateTimePicker → picker}/timePicker.mjs +7 -6
  17. package/dist/components/select/index.js +1 -1
  18. package/dist/components/select/index.mjs +1 -1
  19. package/dist/components/select/select.js +1 -1
  20. package/dist/components/select/select.mjs +1 -1
  21. package/dist/components/table/index.mjs +3 -3
  22. package/dist/components/table/table-body.mjs +3 -3
  23. package/dist/components/table/table-head.mjs +3 -3
  24. package/dist/components/table/table.mjs +3 -3
  25. package/dist/components/toast/index.mjs +2 -2
  26. package/dist/components/toast/use-toast.mjs +2 -2
  27. package/dist/index.d.mts +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +383 -777
  30. package/dist/index.mjs +41 -45
  31. package/package.json +1 -1
  32. package/dist/chunk-FWJ2ZKH6.mjs +0 -87
  33. package/dist/chunk-P732YGHO.mjs +0 -18
  34. package/dist/chunk-X5XJWJSO.mjs +0 -122
  35. package/dist/chunk-Y4W76B42.mjs +0 -210
  36. package/dist/chunk-ZSQQFMEC.mjs +0 -366
  37. package/dist/components/dateTimePicker/calendar.d.mts +0 -68
  38. package/dist/components/dateTimePicker/calendar.d.ts +0 -68
  39. package/dist/components/dateTimePicker/dateTimePicker.d.mts +0 -288
  40. package/dist/components/dateTimePicker/dateTimePicker.d.ts +0 -288
  41. package/dist/components/dateTimePicker/dateTimePicker.mjs +0 -23
  42. package/dist/components/dateTimePicker/index.d.mts +0 -4
  43. package/dist/components/dateTimePicker/index.d.ts +0 -4
  44. package/dist/components/dateTimePicker/index.js +0 -6040
  45. package/dist/components/dateTimePicker/index.mjs +0 -22
  46. package/dist/components/dateTimePicker/timePicker.d.mts +0 -11
  47. package/dist/components/dateTimePicker/timePicker.d.ts +0 -11
  48. package/dist/components/dateTimePicker/timePicker.js +0 -5417
  49. package/dist/components/dateTimePicker/useDateTimePicker.d.mts +0 -34
  50. package/dist/components/dateTimePicker/useDateTimePicker.d.ts +0 -34
  51. package/dist/components/dateTimePicker/useDateTimePicker.js +0 -117
  52. package/dist/components/dateTimePicker/useDateTimePicker.mjs +0 -9
  53. package/dist/components/dateTimePicker/util.d.mts +0 -4
  54. package/dist/components/dateTimePicker/util.d.ts +0 -4
  55. package/dist/components/dateTimePicker/util.js +0 -42
  56. package/dist/components/dateTimePicker/util.mjs +0 -10
  57. package/dist/{chunk-75HLCORR.mjs → chunk-BG7VAVOX.mjs} +0 -0
  58. package/dist/{chunk-2OK3VF75.mjs → chunk-U3O7RIXM.mjs} +3 -3
  59. package/dist/{chunk-IQYWSATB.mjs → chunk-X67ELNP6.mjs} +3 -3
package/dist/index.mjs CHANGED
@@ -3,6 +3,16 @@ import "./chunk-MBLZYQCN.mjs";
3
3
  import {
4
4
  tree_default
5
5
  } from "./chunk-HBEPQQOM.mjs";
6
+ import "./chunk-HIE2YRGA.mjs";
7
+ import {
8
+ tooltip_default
9
+ } from "./chunk-YBVJFHH6.mjs";
10
+ import "./chunk-ZMOAFSYE.mjs";
11
+ import "./chunk-WSIADHVC.mjs";
12
+ import "./chunk-3MY6LO7N.mjs";
13
+ import {
14
+ tabs_default
15
+ } from "./chunk-NBJHZ4X2.mjs";
6
16
  import "./chunk-RRAZM5D3.mjs";
7
17
  import {
8
18
  textarea_default
@@ -11,57 +21,62 @@ import "./chunk-LUWGOKLG.mjs";
11
21
  import {
12
22
  ToastProvider,
13
23
  useToast
14
- } from "./chunk-IQYWSATB.mjs";
15
- import "./chunk-ZOTHPHXA.mjs";
24
+ } from "./chunk-X67ELNP6.mjs";
16
25
  import {
17
26
  toast_default
18
27
  } from "./chunk-J5K7RN5X.mjs";
19
- import "./chunk-HIE2YRGA.mjs";
28
+ import "./chunk-ZOTHPHXA.mjs";
29
+ import "./chunk-LVFI2NOH.mjs";
20
30
  import {
21
- tooltip_default
22
- } from "./chunk-YBVJFHH6.mjs";
23
- import "./chunk-ZMOAFSYE.mjs";
24
- import "./chunk-WSIADHVC.mjs";
31
+ switch_default
32
+ } from "./chunk-AGE57VDD.mjs";
25
33
  import "./chunk-DX3KXNP6.mjs";
26
34
  import {
27
35
  definition_table_default
28
36
  } from "./chunk-3M6VYLOU.mjs";
29
37
  import {
30
38
  table_default
31
- } from "./chunk-2OK3VF75.mjs";
32
- import "./chunk-3MY6LO7N.mjs";
39
+ } from "./chunk-U3O7RIXM.mjs";
40
+ import "./chunk-MZ76AA76.mjs";
33
41
  import {
34
- tabs_default
35
- } from "./chunk-NBJHZ4X2.mjs";
42
+ skeleton_default
43
+ } from "./chunk-6PN3DGOE.mjs";
36
44
  import "./chunk-DQRAFUDA.mjs";
37
45
  import {
38
46
  scrollArea_default
39
47
  } from "./chunk-M37VBNB3.mjs";
40
- import "./chunk-QCEKPS7U.mjs";
48
+ import "./chunk-7B7LRG5J.mjs";
41
49
  import {
42
- select_default
43
- } from "./chunk-2EECKYM4.mjs";
44
- import "./chunk-MZ76AA76.mjs";
50
+ pagination_default
51
+ } from "./chunk-GDKDD2MW.mjs";
52
+ import "./chunk-F3HENRVM.mjs";
53
+ import "./chunk-BG7VAVOX.mjs";
45
54
  import {
46
- skeleton_default
47
- } from "./chunk-6PN3DGOE.mjs";
48
- import "./chunk-LVFI2NOH.mjs";
55
+ timePicker_default
56
+ } from "./chunk-CV6IVDL6.mjs";
57
+ import "./chunk-QCEKPS7U.mjs";
49
58
  import {
50
- switch_default
51
- } from "./chunk-AGE57VDD.mjs";
59
+ select_default
60
+ } from "./chunk-YCLB7ZNK.mjs";
52
61
  import "./chunk-TPFN22HR.mjs";
53
62
  import {
54
63
  radio_default
55
64
  } from "./chunk-FF56E2UQ.mjs";
65
+ import "./chunk-7MVEAQ7Z.mjs";
66
+ import {
67
+ list_default
68
+ } from "./chunk-3IILPVRA.mjs";
69
+ import {
70
+ listItem_default
71
+ } from "./chunk-KPNIWFLU.mjs";
56
72
  import "./chunk-DJOG6Z35.mjs";
57
73
  import {
58
74
  modal_default
59
75
  } from "./chunk-3I35VMMV.mjs";
60
- import "./chunk-7B7LRG5J.mjs";
76
+ import "./chunk-MGEWSREV.mjs";
61
77
  import {
62
- pagination_default
63
- } from "./chunk-GDKDD2MW.mjs";
64
- import "./chunk-F3HENRVM.mjs";
78
+ chip_default
79
+ } from "./chunk-7K463ANW.mjs";
65
80
  import "./chunk-32GA3YW4.mjs";
66
81
  import {
67
82
  drawer_default
@@ -78,25 +93,6 @@ import "./chunk-2GCSFWHD.mjs";
78
93
  import {
79
94
  input_default
80
95
  } from "./chunk-XRYETYWI.mjs";
81
- import "./chunk-MGEWSREV.mjs";
82
- import {
83
- chip_default
84
- } from "./chunk-7K463ANW.mjs";
85
- import "./chunk-75HLCORR.mjs";
86
- import {
87
- dateTimePicker_default
88
- } from "./chunk-ZSQQFMEC.mjs";
89
- import "./chunk-Y4W76B42.mjs";
90
- import "./chunk-X5XJWJSO.mjs";
91
- import "./chunk-7MVEAQ7Z.mjs";
92
- import {
93
- list_default
94
- } from "./chunk-3IILPVRA.mjs";
95
- import {
96
- listItem_default
97
- } from "./chunk-KPNIWFLU.mjs";
98
- import "./chunk-FWJ2ZKH6.mjs";
99
- import "./chunk-P732YGHO.mjs";
100
96
  import "./chunk-VYNBJBXD.mjs";
101
97
  import {
102
98
  areaChart_default
@@ -106,7 +102,7 @@ import {
106
102
  } from "./chunk-GAZ472ZU.mjs";
107
103
  import {
108
104
  circularProgress_default
109
- } from "./chunk-7VS6YXNB.mjs";
105
+ } from "./chunk-ZWLRSZTC.mjs";
110
106
  import {
111
107
  radarChart_default
112
108
  } from "./chunk-63KZGR73.mjs";
@@ -176,7 +172,6 @@ export {
176
172
  checkbox_default as CheckBox,
177
173
  chip_default as Chip,
178
174
  circularProgress_default as CircularProgress,
179
- dateTimePicker_default as DateTimePicker,
180
175
  definition_table_default as DefinitionTable,
181
176
  drawer_default as Drawer,
182
177
  fileUpload_default as FileUpload,
@@ -198,6 +193,7 @@ export {
198
193
  tabs_default as Tabs,
199
194
  text_button_default as TextButton,
200
195
  textarea_default as Textarea,
196
+ timePicker_default as TimePicker,
201
197
  toast_default as Toast,
202
198
  ToastProvider,
203
199
  tooltip_default as Tooltip,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepnoid/ui",
3
- "version": "0.1.109",
3
+ "version": "0.1.111",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -1,87 +0,0 @@
1
- "use client";
2
- import {
3
- formatDateToString
4
- } from "./chunk-P732YGHO.mjs";
5
-
6
- // src/components/dateTimePicker/useDateTimePicker.tsx
7
- import { useState, useEffect, useRef } from "react";
8
- var useDatePicker = ({ initialDate, initialTime }) => {
9
- const [selectedDate, setSelectedDate] = useState(
10
- initialDate ? formatDateToString(initialDate) : ""
11
- );
12
- const [selectedTime, setSelectedTime] = useState(initialTime ? initialTime : "");
13
- const [targetRect, setTargetRect] = useState(null);
14
- const [popupWidth, setPopupWidth] = useState(0);
15
- const [popupHeight, setPopupHeight] = useState(0);
16
- const [isFocusInput, setIsFocusInput] = useState(false);
17
- const dateInputRef = useRef(null);
18
- const datePickerWrapperRef = useRef(null);
19
- const datePickerRef = useRef(null);
20
- const DATE_PICKER_GAP = 4;
21
- const calculatePositionWithScroll = (targetRect2) => {
22
- if (targetRect2 && popupWidth && popupHeight) {
23
- const scrollTop = window.scrollY || document.documentElement.scrollTop || document.body.scrollTop;
24
- const scrollLeft = window.scrollX || document.documentElement.scrollLeft || document.body.scrollLeft;
25
- const spaceBelow = window.innerHeight - (targetRect2.y + targetRect2.height + DATE_PICKER_GAP);
26
- const spaceAbove = targetRect2.y - DATE_PICKER_GAP;
27
- const top = spaceBelow < popupHeight && spaceAbove > popupHeight ? targetRect2.y - popupHeight - DATE_PICKER_GAP : targetRect2.y + targetRect2.height + DATE_PICKER_GAP;
28
- return {
29
- top: top + scrollTop,
30
- left: targetRect2.x + targetRect2.width - popupWidth + scrollLeft
31
- };
32
- }
33
- };
34
- const handleToggleDatePicker = () => {
35
- if (datePickerRef.current) {
36
- const rect = datePickerRef.current.getBoundingClientRect();
37
- setTargetRect((prevRect) => prevRect ? null : { x: rect.x, y: rect.y, width: rect.width, height: rect.height });
38
- }
39
- };
40
- const handleChangeDate = (date) => {
41
- setSelectedDate(date);
42
- };
43
- const handleChangeTime = (time) => {
44
- setSelectedTime(time);
45
- };
46
- const handleFocusInput = () => {
47
- setIsFocusInput(true);
48
- };
49
- const handleBlueInput = () => {
50
- setIsFocusInput(false);
51
- };
52
- useEffect(() => {
53
- const onClickOutside = (e) => {
54
- if (datePickerRef.current && !datePickerRef.current.contains(e.target) && datePickerWrapperRef.current && !datePickerWrapperRef.current.contains(e.target)) {
55
- setTargetRect(null);
56
- }
57
- };
58
- window.addEventListener("mousedown", onClickOutside);
59
- return () => window.removeEventListener("mousedown", onClickOutside);
60
- }, []);
61
- useEffect(() => {
62
- if (datePickerWrapperRef.current) {
63
- setPopupHeight(datePickerWrapperRef.current.getBoundingClientRect().height);
64
- setPopupWidth(datePickerWrapperRef.current.getBoundingClientRect().width);
65
- }
66
- }, [targetRect]);
67
- return {
68
- selectedDate,
69
- selectedTime,
70
- targetRect,
71
- popupHeight,
72
- isFocusInput,
73
- dateInputRef,
74
- datePickerWrapperRef,
75
- datePickerRef,
76
- handleToggleDatePicker,
77
- handleChangeDate,
78
- handleChangeTime,
79
- handleFocusInput,
80
- handleBlueInput,
81
- calculatePositionWithScroll
82
- };
83
- };
84
-
85
- export {
86
- useDatePicker
87
- };
@@ -1,18 +0,0 @@
1
- "use client";
2
-
3
- // src/components/dateTimePicker/util.ts
4
- var formatDateToString = (date) => {
5
- const year = date.getFullYear();
6
- const month = String(date.getMonth() + 1).padStart(2, "0");
7
- const day = String(date.getDate()).padStart(2, "0");
8
- return `${year}-${month}-${day}`;
9
- };
10
- var formatStringToDate = (date) => {
11
- const formattedDate = new Date(date);
12
- return formattedDate;
13
- };
14
-
15
- export {
16
- formatDateToString,
17
- formatStringToDate
18
- };
@@ -1,122 +0,0 @@
1
- "use client";
2
- import {
3
- list_default
4
- } from "./chunk-3IILPVRA.mjs";
5
- import {
6
- listItem_default
7
- } from "./chunk-KPNIWFLU.mjs";
8
-
9
- // src/components/dateTimePicker/timePicker.tsx
10
- import { useState, useRef, useEffect } from "react";
11
- import { jsx, jsxs } from "react/jsx-runtime";
12
- var TimePicker = ({ color = "primary", selectedTime, isFocusInput, onChangeTime }) => {
13
- const TOTAL_HOURS = 12;
14
- const TOTAL_MINUTES = 60;
15
- const ITEM_HEIGHT = 30;
16
- const PERIODS = ["AM", "PM"];
17
- const [selectedHour, setSelectedHour] = useState("01");
18
- const [selectedMinute, setSelectedMinute] = useState("00");
19
- const [selectedPeriod, setSelectedPeriod] = useState("AM");
20
- const hourRef = useRef(null);
21
- const minuteRef = useRef(null);
22
- const periodRef = useRef(null);
23
- const hoursArray = [...Array(TOTAL_HOURS).keys()].map((i) => (i + 1).toString().padStart(2, "0"));
24
- const minutesArray = [...Array(TOTAL_MINUTES).keys()].map((i) => i.toString().padStart(2, "0"));
25
- useEffect(() => {
26
- if (selectedTime) {
27
- const { formattedHour, minute, period } = parseAndFormatTime(selectedTime);
28
- setSelectedHour(formattedHour);
29
- setSelectedMinute(minute);
30
- setSelectedPeriod(period);
31
- }
32
- if (isFocusInput) {
33
- scrollToSelectedTime();
34
- }
35
- }, [selectedTime, isFocusInput]);
36
- useEffect(() => {
37
- scrollToSelectedTime();
38
- }, []);
39
- const parseAndFormatTime = (time) => {
40
- const [hour, minute] = time.split(":").map((part) => part.padStart(2, "0"));
41
- const parsedHour = parseInt(hour, 10);
42
- const period = parsedHour >= 12 ? "PM" : "AM";
43
- const formattedHour = parsedHour % 12 === 0 ? "12" : (parsedHour % 12).toString().padStart(2, "0");
44
- return { formattedHour, minute, period };
45
- };
46
- const scrollToSelectedTime = () => {
47
- if (selectedTime) {
48
- const { formattedHour, minute, period } = parseAndFormatTime(selectedTime);
49
- if (hourRef.current) {
50
- hourRef.current.scrollTop = (parseInt(formattedHour) - 1) * ITEM_HEIGHT;
51
- }
52
- if (minuteRef.current) {
53
- minuteRef.current.scrollTop = parseInt(minute) * ITEM_HEIGHT;
54
- }
55
- if (periodRef.current) {
56
- periodRef.current.scrollTop = period === "AM" ? 0 : ITEM_HEIGHT;
57
- }
58
- }
59
- };
60
- const handleTimeChange = (hour, minute, period) => {
61
- const parsedHour = parseInt(hour);
62
- let hour24 = parsedHour;
63
- if (period === "PM" && parsedHour !== 12) {
64
- hour24 = parsedHour + 12;
65
- } else if (period === "AM" && parsedHour === 12) {
66
- hour24 = 0;
67
- }
68
- const formattedTime = `${hour24.toString().padStart(2, "0")}:${minute}`;
69
- if (onChangeTime) {
70
- onChangeTime(formattedTime);
71
- }
72
- };
73
- return /* @__PURE__ */ jsxs("div", { className: "flex h-[200px] p-[10px] gap-[5px] border border-neutral-main rounded-md bg-background shadow-lg", children: [
74
- /* @__PURE__ */ jsx(list_default, { ref: periodRef, classNames: { base: "overflow-y-auto scrollbar-hide" }, children: PERIODS.map((period, index) => /* @__PURE__ */ jsx(
75
- listItem_default,
76
- {
77
- color,
78
- selected: period === selectedPeriod,
79
- title: period,
80
- size: "sm",
81
- classNames: { base: "w-[50px] min-h-[30px]", titleWrapper: "flex justify-center" },
82
- onClick: () => {
83
- handleTimeChange(selectedHour, selectedMinute, period);
84
- }
85
- },
86
- `${period}-${index}`
87
- )) }),
88
- /* @__PURE__ */ jsx(list_default, { ref: hourRef, classNames: { base: "overflow-y-auto scrollbar-hide" }, children: hoursArray.map((hour, index) => /* @__PURE__ */ jsx(
89
- listItem_default,
90
- {
91
- color,
92
- selected: hour === selectedHour,
93
- title: hour,
94
- size: "sm",
95
- classNames: { base: "w-[50px] min-h-[30px]", titleWrapper: "flex justify-center" },
96
- onClick: () => {
97
- handleTimeChange(hour, selectedMinute, selectedPeriod);
98
- }
99
- },
100
- `${hour}-${index}`
101
- )) }),
102
- /* @__PURE__ */ jsx(list_default, { ref: minuteRef, classNames: { base: "overflow-y-auto scrollbar-hide" }, children: minutesArray.map((minute, index) => /* @__PURE__ */ jsx(
103
- listItem_default,
104
- {
105
- color,
106
- selected: minute === selectedMinute,
107
- title: minute,
108
- size: "sm",
109
- classNames: { base: "w-[50px] min-h-[30px]", titleWrapper: "flex justify-center" },
110
- onClick: () => {
111
- handleTimeChange(selectedHour, minute, selectedPeriod);
112
- }
113
- },
114
- `${minute}-${index}`
115
- )) })
116
- ] });
117
- };
118
- var timePicker_default = TimePicker;
119
-
120
- export {
121
- timePicker_default
122
- };
@@ -1,210 +0,0 @@
1
- "use client";
2
- import {
3
- formatDateToString,
4
- formatStringToDate
5
- } from "./chunk-P732YGHO.mjs";
6
- import {
7
- Icon_default
8
- } from "./chunk-33DLD2L6.mjs";
9
- import {
10
- mapPropsVariants
11
- } from "./chunk-E3G5QXSH.mjs";
12
- import {
13
- tv
14
- } from "./chunk-CDXBML6O.mjs";
15
-
16
- // src/components/dateTimePicker/calendar.tsx
17
- import React, {
18
- forwardRef,
19
- useCallback,
20
- useMemo,
21
- useState,
22
- useImperativeHandle,
23
- useEffect
24
- } from "react";
25
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
26
- var Calendar = forwardRef((originalProps, ref) => {
27
- const [props, variantProps] = mapPropsVariants(originalProps, calendarStyle.variantKeys);
28
- const { selectedDate, classNames, highlightWeekend = true, onChangeDate, ...inputProps } = props;
29
- const [currentDate, setCurrentDate] = useState(selectedDate ? new Date(selectedDate) : /* @__PURE__ */ new Date());
30
- const daysOfWeek = ["S", "M", "T", "W", "T", "F", "S"];
31
- useEffect(() => {
32
- if (selectedDate) {
33
- setCurrentDate(new Date(selectedDate));
34
- }
35
- }, [selectedDate]);
36
- const getCalendarDates = useCallback(() => {
37
- const year = currentDate.getFullYear();
38
- const month = currentDate.getMonth();
39
- const firstDayOfMonth = new Date(year, month, 1).getDay();
40
- const lastDateOfMonth = new Date(year, month + 1, 0).getDate();
41
- const lastDateOfPrevMonth = new Date(year, month, 0).getDate();
42
- let dates = [];
43
- for (let i = firstDayOfMonth - 1; i >= 0; i--) {
44
- dates.push({
45
- date: lastDateOfPrevMonth - i,
46
- currentMonth: false
47
- });
48
- }
49
- for (let date = 1; date <= lastDateOfMonth; date++) {
50
- dates.push({
51
- date,
52
- currentMonth: true
53
- });
54
- }
55
- const remainingDays = 42 - dates.length;
56
- for (let i = 1; i <= remainingDays; i++) {
57
- dates.push({
58
- date: i,
59
- currentMonth: false
60
- });
61
- }
62
- const weeks = [];
63
- for (let i = 0; i < dates.length; i += 7) {
64
- weeks.push(dates.slice(i, i + 7));
65
- }
66
- return weeks;
67
- }, [currentDate]);
68
- const handlePrevMonth = () => {
69
- setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1));
70
- };
71
- const handleNextMonth = () => {
72
- setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1));
73
- };
74
- const handleDateSelect = (date, isCurrentMonth) => {
75
- if (!isCurrentMonth) return;
76
- if (onChangeDate) {
77
- const selected = new Date(currentDate.getFullYear(), currentDate.getMonth(), date);
78
- const formatted = formatDateToString(selected);
79
- onChangeDate(formatted);
80
- }
81
- };
82
- useImperativeHandle(ref, () => ({
83
- getSelectedDate: () => selectedDate
84
- }));
85
- const slots = useMemo(() => calendarStyle({ ...variantProps }), [variantProps]);
86
- const getBaseProps = useCallback(
87
- () => ({
88
- className: `${slots.base({ class: classNames == null ? void 0 : classNames.base })}`
89
- }),
90
- [slots, classNames]
91
- );
92
- const getDateTitleProps = useCallback(
93
- (index) => {
94
- return {
95
- className: `${slots.dateTitle({
96
- class: classNames == null ? void 0 : classNames.date
97
- })}`,
98
- "data-saturday": highlightWeekend && index === 6,
99
- "data-sunday": highlightWeekend && index === 0
100
- };
101
- },
102
- [slots, classNames, highlightWeekend]
103
- );
104
- const getDateProps = useCallback(
105
- (dateObj) => {
106
- const today = /* @__PURE__ */ new Date();
107
- const isToday = today.getDate() === dateObj.date && today.getMonth() === currentDate.getMonth() && today.getFullYear() === currentDate.getFullYear();
108
- const formatted = selectedDate ? formatStringToDate(selectedDate) : "";
109
- const isSelected = formatted ? formatted.getDate() === dateObj.date && formatted.getMonth() === currentDate.getMonth() && formatted.getFullYear() === currentDate.getFullYear() : false;
110
- const dayOfWeek = new Date(currentDate.getFullYear(), currentDate.getMonth(), dateObj.date).getDay();
111
- return {
112
- className: `${slots.date({
113
- class: classNames == null ? void 0 : classNames.date
114
- })}`,
115
- "data-today": dateObj.currentMonth && isToday,
116
- "data-selected": dateObj.currentMonth && isSelected,
117
- "data-disabled": !dateObj.currentMonth,
118
- "data-saturday": highlightWeekend && dayOfWeek === 6,
119
- "data-sunday": highlightWeekend && dayOfWeek === 0,
120
- onClick: () => handleDateSelect(dateObj.date, dateObj.currentMonth)
121
- };
122
- },
123
- [slots, classNames, selectedDate, currentDate, highlightWeekend]
124
- );
125
- const calendarDates = getCalendarDates();
126
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { ...getBaseProps(), children: [
127
- /* @__PURE__ */ jsxs("div", { className: "calendar-header mb-4 flex items-center justify-between", children: [
128
- /* @__PURE__ */ jsx(Icon_default, { name: "brace-left", size: "md", className: "cursor-pointer", onClick: handlePrevMonth }),
129
- /* @__PURE__ */ jsx("span", { className: "text-h6 font-semibold", children: currentDate.toLocaleString("default", { year: "numeric", month: "2-digit" }) }),
130
- /* @__PURE__ */ jsx(Icon_default, { name: "brace-right", size: "md", className: "cursor-pointer", onClick: handleNextMonth })
131
- ] }),
132
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-7 gap-2 text-center", children: daysOfWeek.map((day, index) => /* @__PURE__ */ jsx("div", { ...getDateTitleProps(index), children: day }, `${day}-${index}`)) }),
133
- /* @__PURE__ */ jsx("div", { className: "mt-2 grid grid-cols-7 gap-[5px] text-center", children: calendarDates.map((week, weekIndex) => {
134
- const hasCurrentMonthDates = week.some((dateObj) => dateObj.currentMonth);
135
- if (!hasCurrentMonthDates) return null;
136
- return /* @__PURE__ */ jsx(React.Fragment, { children: week.map((dateObj, index) => {
137
- return /* @__PURE__ */ jsx("div", { ...getDateProps(dateObj), children: dateObj.date }, index);
138
- }) }, weekIndex);
139
- }) })
140
- ] }) });
141
- });
142
- Calendar.displayName = "Calendar";
143
- var calendar_default = Calendar;
144
- var calendarStyle = tv({
145
- slots: {
146
- base: [
147
- "flex",
148
- "flex-col",
149
- "w-[240px]",
150
- "border",
151
- "border-neutral-main",
152
- "bg-background",
153
- "rounded-md",
154
- "p-4",
155
- "shadow-lg",
156
- "select-none"
157
- ],
158
- dateTitle: ["text-sm", "font-[500]", "data-[saturday=true]:text-[#1E7EEE]", "data-[sunday=true]:text-[#FF4684]"],
159
- date: [
160
- "flex",
161
- "justify-center",
162
- "items-center",
163
- "h-[25px]",
164
- "text-sm",
165
- "rounded-full",
166
- "cursor-pointer",
167
- "hover:bg-neutral-soft",
168
- "data-[today=true]:border",
169
- "data-[today=true]:border-foreground",
170
- "data-[saturday=true]:text-[#1E7EEE]",
171
- "data-[saturday=true]:!border-[#1E7EEE]",
172
- "data-[sunday=true]:text-[#FF4684]",
173
- "data-[sunday=true]:!border-[#FF4684]",
174
- "data-[selected=true]:!text-white",
175
- "data-[selected=true]:border-none",
176
- "data-[disabled=true]:!text-neutral-main",
177
- "data-[disabled=true]:cursor-default",
178
- "data-[disabled=true]:hover:bg-transparent"
179
- ]
180
- },
181
- variants: {
182
- variant: {
183
- solid: {}
184
- },
185
- color: {
186
- primary: {
187
- date: ["data-[selected=true]:!border-primary-main", "data-[selected=true]:bg-primary-main"]
188
- },
189
- secondary: {
190
- date: ["data-[selected=true]:!border-secondary-main", "data-[selected=true]:bg-secondary-main"]
191
- }
192
- }
193
- },
194
- defaultVariants: {
195
- variant: "solid",
196
- color: "primary"
197
- },
198
- compoundVariants: [
199
- {
200
- disabled: true,
201
- isRequired: true,
202
- class: {}
203
- }
204
- ]
205
- });
206
-
207
- export {
208
- calendar_default,
209
- calendarStyle
210
- };