@deepnoid/ui 0.1.156 → 0.1.158

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 (122) hide show
  1. package/.turbo/turbo-build.log +198 -188
  2. package/dist/{chunk-6YTT5ACI.mjs → chunk-3QE57PU3.mjs} +1 -1
  3. package/dist/{chunk-KKHOCWXJ.mjs → chunk-3X376ACN.mjs} +1 -1
  4. package/dist/{chunk-URJA4W4R.mjs → chunk-46EIW6MN.mjs} +2 -2
  5. package/dist/chunk-7YMXOYES.mjs +449 -0
  6. package/dist/{chunk-2DAIOZ7N.mjs → chunk-CSG6FDBX.mjs} +2 -2
  7. package/dist/{chunk-WHU5VP5G.mjs → chunk-DDFJMHBC.mjs} +57 -2
  8. package/dist/{chunk-ZY3HNPPG.mjs → chunk-HKHVSCER.mjs} +1 -1
  9. package/dist/{chunk-ZNQML73F.mjs → chunk-IRJP6BF3.mjs} +2 -2
  10. package/dist/{chunk-HP4ARKW3.mjs → chunk-ITFEV25U.mjs} +1 -1
  11. package/dist/{chunk-7RG7CQQM.mjs → chunk-JKYLYL3A.mjs} +1 -1
  12. package/dist/{chunk-KX6WG4VG.mjs → chunk-KLBA5J2H.mjs} +1 -1
  13. package/dist/chunk-L5FRTUM6.mjs +100 -0
  14. package/dist/chunk-OLQOLLKG.mjs +1 -0
  15. package/dist/{chunk-LFALITPU.mjs → chunk-PXAJEOZS.mjs} +1 -1
  16. package/dist/{chunk-5VVNAW4E.mjs → chunk-QHETCLHO.mjs} +2 -2
  17. package/dist/{chunk-Q2YLULZH.mjs → chunk-R7KUEH3N.mjs} +1 -1
  18. package/dist/{chunk-47MQPUEY.mjs → chunk-SFGFRMWL.mjs} +1 -1
  19. package/dist/{chunk-4YVZ3XKA.mjs → chunk-V64PCWVW.mjs} +3 -3
  20. package/dist/{chunk-R2USZD77.mjs → chunk-XHCPYYMC.mjs} +1 -1
  21. package/dist/{chunk-UIRHCS6B.mjs → chunk-YQYO5RLZ.mjs} +1 -1
  22. package/dist/{chunk-ZGUTKE5H.mjs → chunk-Z7CLJYRF.mjs} +1 -1
  23. package/dist/components/avatar/avatar.js +57 -2
  24. package/dist/components/avatar/avatar.mjs +2 -2
  25. package/dist/components/avatar/index.js +57 -2
  26. package/dist/components/avatar/index.mjs +2 -2
  27. package/dist/components/breadcrumb/breadcrumb.js +57 -2
  28. package/dist/components/breadcrumb/breadcrumb.mjs +5 -5
  29. package/dist/components/breadcrumb/index.js +57 -2
  30. package/dist/components/breadcrumb/index.mjs +5 -5
  31. package/dist/components/button/button.js +57 -2
  32. package/dist/components/button/button.mjs +3 -3
  33. package/dist/components/button/icon-button.js +57 -2
  34. package/dist/components/button/icon-button.mjs +3 -3
  35. package/dist/components/button/index.js +57 -2
  36. package/dist/components/button/index.mjs +4 -4
  37. package/dist/components/chip/chip.js +57 -2
  38. package/dist/components/chip/chip.mjs +3 -3
  39. package/dist/components/chip/index.js +57 -2
  40. package/dist/components/chip/index.mjs +3 -3
  41. package/dist/components/fileUpload/fileUpload.js +57 -2
  42. package/dist/components/fileUpload/fileUpload.mjs +6 -6
  43. package/dist/components/fileUpload/index.js +57 -2
  44. package/dist/components/fileUpload/index.mjs +6 -6
  45. package/dist/components/icon/Icon.d.mts +8 -0
  46. package/dist/components/icon/Icon.d.ts +8 -0
  47. package/dist/components/icon/Icon.js +57 -2
  48. package/dist/components/icon/Icon.mjs +2 -2
  49. package/dist/components/icon/index.js +57 -2
  50. package/dist/components/icon/index.mjs +2 -2
  51. package/dist/components/icon/template.d.mts +2 -0
  52. package/dist/components/icon/template.d.ts +2 -0
  53. package/dist/components/icon/template.js +57 -2
  54. package/dist/components/icon/template.mjs +1 -1
  55. package/dist/components/input/index.js +57 -2
  56. package/dist/components/input/index.mjs +3 -3
  57. package/dist/components/input/input.js +57 -2
  58. package/dist/components/input/input.mjs +3 -3
  59. package/dist/components/list/index.js +57 -2
  60. package/dist/components/list/index.mjs +4 -4
  61. package/dist/components/list/listItem.js +57 -2
  62. package/dist/components/list/listItem.mjs +4 -4
  63. package/dist/components/modal/index.js +57 -2
  64. package/dist/components/modal/index.mjs +5 -5
  65. package/dist/components/modal/modal.js +57 -2
  66. package/dist/components/modal/modal.mjs +5 -5
  67. package/dist/components/pagination/index.js +57 -2
  68. package/dist/components/pagination/index.mjs +4 -4
  69. package/dist/components/pagination/pagination.js +57 -2
  70. package/dist/components/pagination/pagination.mjs +4 -4
  71. package/dist/components/picker/datePicker.d.mts +35 -4
  72. package/dist/components/picker/datePicker.d.ts +35 -4
  73. package/dist/components/picker/datePicker.js +238 -49
  74. package/dist/components/picker/datePicker.mjs +6 -6
  75. package/dist/components/picker/day.d.mts +2 -2
  76. package/dist/components/picker/day.d.ts +2 -2
  77. package/dist/components/picker/index.d.mts +1 -1
  78. package/dist/components/picker/index.d.ts +1 -1
  79. package/dist/components/picker/index.js +238 -49
  80. package/dist/components/picker/index.mjs +8 -8
  81. package/dist/components/picker/timePicker.js +57 -2
  82. package/dist/components/picker/timePicker.mjs +4 -4
  83. package/dist/components/radio/index.d.mts +1 -1
  84. package/dist/components/radio/index.d.ts +1 -1
  85. package/dist/components/select/index.js +57 -2
  86. package/dist/components/select/index.mjs +3 -3
  87. package/dist/components/select/select.js +57 -2
  88. package/dist/components/select/select.mjs +3 -3
  89. package/dist/components/starRating/index.d.mts +4 -0
  90. package/dist/components/starRating/index.d.ts +4 -0
  91. package/dist/components/starRating/index.js +5279 -0
  92. package/dist/components/starRating/index.mjs +14 -0
  93. package/dist/components/starRating/starRating.d.mts +60 -0
  94. package/dist/components/starRating/starRating.d.ts +60 -0
  95. package/dist/components/starRating/starRating.js +5278 -0
  96. package/dist/components/starRating/starRating.mjs +15 -0
  97. package/dist/components/table/index.js +57 -2
  98. package/dist/components/table/index.mjs +7 -7
  99. package/dist/components/table/table-body.js +57 -2
  100. package/dist/components/table/table-body.mjs +5 -5
  101. package/dist/components/table/table-head.js +57 -2
  102. package/dist/components/table/table-head.mjs +5 -5
  103. package/dist/components/table/table.js +57 -2
  104. package/dist/components/table/table.mjs +5 -5
  105. package/dist/components/timePicker/calendar.js +57 -2
  106. package/dist/components/timePicker/calendar.mjs +2 -2
  107. package/dist/components/toast/index.js +57 -2
  108. package/dist/components/toast/index.mjs +4 -4
  109. package/dist/components/toast/toast.js +57 -2
  110. package/dist/components/toast/toast.mjs +3 -3
  111. package/dist/components/toast/use-toast.js +57 -2
  112. package/dist/components/toast/use-toast.mjs +4 -4
  113. package/dist/components/tree/index.js +57 -2
  114. package/dist/components/tree/index.mjs +3 -3
  115. package/dist/components/tree/tree.js +57 -2
  116. package/dist/components/tree/tree.mjs +3 -3
  117. package/dist/index.d.mts +3 -2
  118. package/dist/index.d.ts +3 -2
  119. package/dist/index.js +325 -49
  120. package/dist/index.mjs +37 -32
  121. package/package.json +1 -1
  122. package/dist/chunk-TCURFCQ2.mjs +0 -315
package/dist/index.js CHANGED
@@ -132,6 +132,7 @@ __export(index_exports, {
132
132
  ScrollArea: () => scrollArea_default,
133
133
  Select: () => select_default,
134
134
  Skeleton: () => skeleton_default,
135
+ StarRating: () => starRating_default,
135
136
  Switch: () => switch_default,
136
137
  Table: () => table_default,
137
138
  Tabs: () => tabs_default,
@@ -1135,8 +1136,8 @@ var template = {
1135
1136
  {
1136
1137
  fillRule: "evenodd",
1137
1138
  clipRule: "evenodd",
1138
- fill: "currentColor",
1139
- d: "M8.26603 3.51086C8.53733 2.82971 9.46267 2.82971 9.73397 3.51086L10.9948 6.67687L14.2674 6.95135C14.9723 7.01017 15.2582 7.92848 14.721 8.40913L12.2278 10.6398L12.989 13.9746C13.1531 14.6931 12.4052 15.2604 11.8021 14.8759L9 13.0886L6.19794 14.8759C5.59478 15.2604 4.84687 14.6925 5.01099 13.9746L5.77221 10.6398L3.27901 8.40913C2.74185 7.92848 3.02769 7.01017 3.73259 6.95135L7.00519 6.67687L8.26603 3.51086Z"
1139
+ d: "M8.26603 3.51086C8.53733 2.82971 9.46267 2.82971 9.73397 3.51086L10.9948 6.67687L14.2674 6.95135C14.9723 7.01017 15.2582 7.92848 14.721 8.40913L12.2278 10.6398L12.989 13.9746C13.1531 14.6931 12.4052 15.2604 11.8021 14.8759L9 13.0886L6.19794 14.8759C5.59478 15.2604 4.84687 14.6925 5.01099 13.9746L5.77221 10.6398L3.27901 8.40913C2.74185 7.92848 3.02769 7.01017 3.73259 6.95135L7.00519 6.67687L8.26603 3.51086Z",
1140
+ fill: "currentColor"
1140
1141
  }
1141
1142
  ) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1142
1143
  "path",
@@ -1150,6 +1151,41 @@ var template = {
1150
1151
  }
1151
1152
  );
1152
1153
  },
1154
+ halfStar: ({ className }) => {
1155
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1156
+ "svg",
1157
+ {
1158
+ xmlns: "http://www.w3.org/2000/svg",
1159
+ width: "18",
1160
+ height: "18",
1161
+ viewBox: "0 0 18 18",
1162
+ fill: "none",
1163
+ className,
1164
+ children: [
1165
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("clipPath", { id: "half-clip", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "0", y: "0", width: "9", height: "18" }) }) }),
1166
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1167
+ "path",
1168
+ {
1169
+ fillRule: "evenodd",
1170
+ clipRule: "evenodd",
1171
+ fill: "currentColor",
1172
+ d: "M8.26603 3.51086C8.53733 2.82971 9.46267 2.82971 9.73397 3.51086L10.9948 6.67687L14.2674 6.95135C14.9723 7.01017 15.2582 7.92848 14.721 8.40913L12.2278 10.6398L12.989 13.9746C13.1531 14.6931 12.4052 15.2604 11.8021 14.8759L9 13.0886L6.19794 14.8759C5.59478 15.2604 4.84687 14.6925 5.01099 13.9746L5.77221 10.6398L3.27901 8.40913C2.74185 7.92848 3.02769 7.01017 3.73259 6.95135L7.00519 6.67687L8.26603 3.51086Z",
1173
+ clipPath: "url(#half-clip)"
1174
+ }
1175
+ ),
1176
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1177
+ "path",
1178
+ {
1179
+ d: "M8.65925 3.23957C8.68697 3.16871 8.73417 3.1081 8.79484 3.06544C8.85552 3.02278 8.92693 3 9 3C9.07306 3 9.14448 3.02278 9.20515 3.06544C9.26583 3.1081 9.31303 3.16871 9.34074 3.23957L10.7332 6.74977C10.7593 6.81546 10.8021 6.87233 10.857 6.91413C10.912 6.95594 10.9768 6.98105 11.0445 6.98672L14.6603 7.29028C14.9873 7.31775 15.1196 7.74563 14.8706 7.96883L12.1158 10.4427C12.0644 10.4888 12.026 10.5489 12.005 10.6164C11.984 10.6839 11.981 10.7561 11.9966 10.8252L12.8386 14.5236C12.8555 14.5978 12.8511 14.6756 12.8259 14.7471C12.8006 14.8187 12.7557 14.8808 12.6968 14.9257C12.6379 14.9705 12.5677 14.996 12.495 14.999C12.4222 15.002 12.3503 14.9824 12.2882 14.9425L9.19199 12.9611C9.13418 12.9241 9.06775 12.9045 9 12.9045C8.93225 12.9045 8.86581 12.9241 8.808 12.9611L5.71181 14.9432C5.64973 14.9831 5.57778 15.0027 5.50504 14.9997C5.43231 14.9967 5.36206 14.9712 5.30316 14.9263C5.24426 14.8815 5.19936 14.8194 5.17412 14.7478C5.14889 14.6763 5.14445 14.5985 5.16138 14.5243L6.00341 10.8252C6.01903 10.7561 6.01616 10.6838 5.99511 10.6164C5.97407 10.5489 5.93568 10.4888 5.88415 10.4427L3.12936 7.96883C3.07389 7.91927 3.03369 7.85357 3.01387 7.78005C2.99405 7.70652 2.9955 7.62849 3.01802 7.55583C3.04055 7.48317 3.08314 7.41915 3.1404 7.37188C3.19767 7.3246 3.26703 7.29621 3.33971 7.29028L6.95553 6.98672C7.02319 6.98105 7.08804 6.95594 7.14296 6.91413C7.19787 6.87233 7.24072 6.81546 7.26679 6.74977L8.65925 3.23957Z",
1180
+ stroke: "currentColor",
1181
+ strokeLinecap: "round",
1182
+ strokeLinejoin: "round"
1183
+ }
1184
+ )
1185
+ ]
1186
+ }
1187
+ );
1188
+ },
1153
1189
  avatar: ({ className }) => {
1154
1190
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1155
1191
  "svg",
@@ -2575,6 +2611,26 @@ var template = {
2575
2611
  }
2576
2612
  );
2577
2613
  },
2614
+ question: ({ className = "text-white" }) => {
2615
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
2616
+ "svg",
2617
+ {
2618
+ xmlns: "http://www.w3.org/2000/svg",
2619
+ width: "24",
2620
+ height: "24",
2621
+ viewBox: "0 0 24 24",
2622
+ fill: "none",
2623
+ className,
2624
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
2625
+ "path",
2626
+ {
2627
+ d: "M17 2.42969H7C4 2.42969 2 4.42969 2 7.42969V13.4297C2 16.4297 4 18.4297 7 18.4297V20.5597C7 21.3597 7.89 21.8397 8.55 21.3897L13 18.4297H17C20 18.4297 22 16.4297 22 13.4297V7.42969C22 4.42969 20 2.42969 17 2.42969ZM12 14.5997C11.58 14.5997 11.25 14.2597 11.25 13.8497C11.25 13.4397 11.58 13.0997 12 13.0997C12.42 13.0997 12.75 13.4397 12.75 13.8497C12.75 14.2597 12.42 14.5997 12 14.5997ZM13.26 10.4497C12.87 10.7097 12.75 10.8797 12.75 11.1597V11.3697C12.75 11.7797 12.41 12.1197 12 12.1197C11.59 12.1197 11.25 11.7797 11.25 11.3697V11.1597C11.25 9.99969 12.1 9.42969 12.42 9.20969C12.79 8.95969 12.91 8.78969 12.91 8.52969C12.91 8.02969 12.5 7.61969 12 7.61969C11.5 7.61969 11.09 8.02969 11.09 8.52969C11.09 8.93969 10.75 9.27969 10.34 9.27969C9.93 9.27969 9.59 8.93969 9.59 8.52969C9.59 7.19969 10.67 6.11969 12 6.11969C13.33 6.11969 14.41 7.19969 14.41 8.52969C14.41 9.66969 13.57 10.2397 13.26 10.4497Z",
2628
+ fill: "currentColor"
2629
+ }
2630
+ )
2631
+ }
2632
+ );
2633
+ },
2578
2634
  // ----------------------------------- old ---------------------------------
2579
2635
  // ** Status **
2580
2636
  "plus-circle": ({ className, fill }) => {
@@ -11236,12 +11292,25 @@ var DatePicker = (0, import_react32.forwardRef)((originalProps, ref) => {
11236
11292
  todayTitle,
11237
11293
  cancelTitle,
11238
11294
  confirmTitle,
11295
+ range = false,
11296
+ dualCalendar = false,
11239
11297
  ...inputProps
11240
11298
  } = { ...props, ...variantProps };
11241
- const [selectedDate, setSelectedDate] = (0, import_react32.useState)(value || "");
11242
- const [tempSelectedDate, setTempSelectedDate] = (0, import_react32.useState)(value || "");
11299
+ const [selectedDate, setSelectedDate] = (0, import_react32.useState)(range ? "" : typeof value === "string" ? value || "" : "");
11300
+ const [selectedRange, setSelectedRange] = (0, import_react32.useState)({
11301
+ startDate: range && typeof value === "object" ? (value == null ? void 0 : value.startDate) || "" : "",
11302
+ endDate: range && typeof value === "object" ? (value == null ? void 0 : value.endDate) || "" : ""
11303
+ });
11304
+ const [tempSelectedDate, setTempSelectedDate] = (0, import_react32.useState)(selectedDate);
11305
+ const [tempSelectedRange, setTempSelectedRange] = (0, import_react32.useState)(selectedRange);
11306
+ const [rangeSelection, setRangeSelection] = (0, import_react32.useState)("start");
11243
11307
  const [isPanelOpen, setIsPanelOpen] = (0, import_react32.useState)(false);
11244
- const [currentDate, setCurrentDate] = (0, import_react32.useState)(tempSelectedDate ? new Date(tempSelectedDate) : /* @__PURE__ */ new Date());
11308
+ const [leftCurrentDate, setLeftCurrentDate] = (0, import_react32.useState)(
11309
+ range && tempSelectedRange.startDate ? new Date(tempSelectedRange.startDate) : tempSelectedDate ? new Date(tempSelectedDate) : /* @__PURE__ */ new Date()
11310
+ );
11311
+ const [rightCurrentDate, setRightCurrentDate] = (0, import_react32.useState)(
11312
+ dualCalendar ? new Date(leftCurrentDate.getFullYear(), leftCurrentDate.getMonth() + 1) : /* @__PURE__ */ new Date()
11313
+ );
11245
11314
  const inputWrapperRef = (0, import_react32.useRef)(null);
11246
11315
  const calendarWrapperRef = (0, import_react32.useRef)(null);
11247
11316
  const [panelPos, setPanelPos] = (0, import_react32.useState)({ top: -9999, left: -9999 });
@@ -11258,7 +11327,16 @@ var DatePicker = (0, import_react32.forwardRef)((originalProps, ref) => {
11258
11327
  return dateString;
11259
11328
  }
11260
11329
  };
11261
- const displayValue = (0, import_react32.useMemo)(() => formatDate(selectedDate), [selectedDate, format]);
11330
+ const displayValue = (0, import_react32.useMemo)(() => {
11331
+ if (range) {
11332
+ const start = formatDate(selectedRange.startDate);
11333
+ const end = formatDate(selectedRange.endDate);
11334
+ if (start && end) return `${start} ~ ${end}`;
11335
+ if (start) return start;
11336
+ return "";
11337
+ }
11338
+ return formatDate(selectedDate);
11339
+ }, [selectedDate, selectedRange, format, range]);
11262
11340
  const calculatePosition = (0, import_react32.useCallback)(() => {
11263
11341
  if (inputWrapperRef.current) {
11264
11342
  const rect = inputWrapperRef.current.getBoundingClientRect();
@@ -11291,13 +11369,18 @@ var DatePicker = (0, import_react32.forwardRef)((originalProps, ref) => {
11291
11369
  };
11292
11370
  const handleClearDate = (e) => {
11293
11371
  e.preventDefault();
11294
- setTempSelectedDate("");
11372
+ if (range) {
11373
+ setTempSelectedRange({ startDate: "", endDate: "" });
11374
+ setRangeSelection("start");
11375
+ } else {
11376
+ setTempSelectedDate("");
11377
+ }
11295
11378
  };
11296
11379
  const handleCalendarMouseDown = (e) => {
11297
11380
  e.preventDefault();
11298
11381
  if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current);
11299
11382
  };
11300
- const getCalendarDates = (0, import_react32.useCallback)(() => {
11383
+ const getCalendarDates = (0, import_react32.useCallback)((currentDate) => {
11301
11384
  const year = currentDate.getFullYear();
11302
11385
  const month = currentDate.getMonth();
11303
11386
  const firstDayOfMonth = new Date(year, month, 1).getDay();
@@ -11311,47 +11394,160 @@ var DatePicker = (0, import_react32.forwardRef)((originalProps, ref) => {
11311
11394
  const weeks = [];
11312
11395
  for (let i = 0; i < dates.length; i += 7) weeks.push(dates.slice(i, i + 7));
11313
11396
  return weeks;
11314
- }, [currentDate]);
11315
- const handlePrevMonth = () => setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1));
11316
- const handleNextMonth = () => setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1));
11317
- const handleDateSelect = (date, isCurrentMonth) => {
11397
+ }, []);
11398
+ const handleLeftPrevMonth = () => {
11399
+ const newLeftDate = new Date(leftCurrentDate.getFullYear(), leftCurrentDate.getMonth() - 1);
11400
+ setLeftCurrentDate(newLeftDate);
11401
+ if (dualCalendar) {
11402
+ setRightCurrentDate(new Date(newLeftDate.getFullYear(), newLeftDate.getMonth() + 1));
11403
+ }
11404
+ };
11405
+ const handleLeftNextMonth = () => {
11406
+ const newLeftDate = new Date(leftCurrentDate.getFullYear(), leftCurrentDate.getMonth() + 1);
11407
+ setLeftCurrentDate(newLeftDate);
11408
+ if (dualCalendar) {
11409
+ setRightCurrentDate(new Date(newLeftDate.getFullYear(), newLeftDate.getMonth() + 1));
11410
+ }
11411
+ };
11412
+ const handleRightNextMonth = () => {
11413
+ if (!dualCalendar) return;
11414
+ const newRightDate = new Date(rightCurrentDate.getFullYear(), rightCurrentDate.getMonth() + 1);
11415
+ setRightCurrentDate(newRightDate);
11416
+ setLeftCurrentDate(new Date(newRightDate.getFullYear(), newRightDate.getMonth() - 1));
11417
+ };
11418
+ const handleDateSelect = (date, isCurrentMonth, currentDate) => {
11318
11419
  if (!isCurrentMonth) return;
11319
11420
  const selected = new Date(currentDate.getFullYear(), currentDate.getMonth(), date);
11320
11421
  const formatted = formatDateToString(selected);
11321
- setTempSelectedDate(formatted);
11422
+ if (range) {
11423
+ if (rangeSelection === "start") {
11424
+ setTempSelectedRange({ startDate: formatted, endDate: "" });
11425
+ setRangeSelection("end");
11426
+ } else {
11427
+ const startDate = new Date(tempSelectedRange.startDate);
11428
+ if (selected >= startDate) {
11429
+ setTempSelectedRange({ ...tempSelectedRange, endDate: formatted });
11430
+ } else {
11431
+ setTempSelectedRange({ startDate: formatted, endDate: tempSelectedRange.startDate });
11432
+ }
11433
+ }
11434
+ } else {
11435
+ setTempSelectedDate(formatted);
11436
+ }
11322
11437
  };
11323
11438
  const handleSetToday = () => {
11324
11439
  const today = /* @__PURE__ */ new Date();
11325
11440
  const formatted = formatDateToString(today);
11326
- setCurrentDate(today);
11327
- setTempSelectedDate(formatted);
11441
+ if (range) {
11442
+ if (rangeSelection === "start") {
11443
+ setTempSelectedRange({ startDate: formatted, endDate: "" });
11444
+ setRangeSelection("end");
11445
+ } else {
11446
+ const startDate = new Date(tempSelectedRange.startDate);
11447
+ if (today >= startDate) {
11448
+ setTempSelectedRange({ ...tempSelectedRange, endDate: formatted });
11449
+ } else {
11450
+ setTempSelectedRange({ startDate: formatted, endDate: tempSelectedRange.startDate });
11451
+ }
11452
+ }
11453
+ } else {
11454
+ setLeftCurrentDate(today);
11455
+ if (dualCalendar) setRightCurrentDate(new Date(today.getFullYear(), today.getMonth() + 1));
11456
+ setTempSelectedDate(formatted);
11457
+ }
11328
11458
  };
11329
11459
  const handleConfirmDate = () => {
11330
- setSelectedDate(tempSelectedDate);
11331
- onChange == null ? void 0 : onChange(tempSelectedDate);
11460
+ if (range) {
11461
+ setSelectedRange(tempSelectedRange);
11462
+ onChange == null ? void 0 : onChange(tempSelectedRange);
11463
+ } else {
11464
+ setSelectedDate(tempSelectedDate);
11465
+ onChange == null ? void 0 : onChange(tempSelectedDate);
11466
+ }
11332
11467
  setIsPanelOpen(false);
11333
11468
  };
11334
11469
  const handleResetDate = () => {
11335
- setTempSelectedDate(selectedDate);
11470
+ if (range) {
11471
+ setTempSelectedRange(selectedRange);
11472
+ setRangeSelection("start");
11473
+ } else {
11474
+ setTempSelectedDate(selectedDate);
11475
+ }
11336
11476
  setIsPanelOpen(false);
11337
11477
  };
11338
11478
  const getDayProps = (0, import_react32.useCallback)(
11339
- (dateObj) => {
11479
+ (dateObj, currentDate) => {
11340
11480
  const today = /* @__PURE__ */ new Date();
11341
11481
  const isToday = today.getDate() === dateObj.date && today.getMonth() === currentDate.getMonth() && today.getFullYear() === currentDate.getFullYear();
11342
- const formatted = tempSelectedDate ? formatStringToDate(tempSelectedDate) : null;
11343
- const isSelected = (formatted == null ? void 0 : formatted.getDate()) === dateObj.date && formatted.getMonth() === currentDate.getMonth() && formatted.getFullYear() === currentDate.getFullYear();
11344
- return dateObj.currentMonth && isSelected ? "selected" : dateObj.currentMonth && isToday ? "today" : !dateObj.currentMonth ? "disabled" : "default";
11482
+ if (range) {
11483
+ const startFormatted = tempSelectedRange.startDate ? formatStringToDate(tempSelectedRange.startDate) : null;
11484
+ const endFormatted = tempSelectedRange.endDate ? formatStringToDate(tempSelectedRange.endDate) : null;
11485
+ const currentFormatted = new Date(currentDate.getFullYear(), currentDate.getMonth(), dateObj.date);
11486
+ const isStartSelected = startFormatted && startFormatted.getDate() === dateObj.date && startFormatted.getMonth() === currentDate.getMonth() && startFormatted.getFullYear() === currentDate.getFullYear();
11487
+ const isEndSelected = endFormatted && endFormatted.getDate() === dateObj.date && endFormatted.getMonth() === currentDate.getMonth() && endFormatted.getFullYear() === currentDate.getFullYear();
11488
+ const isInRange = startFormatted && endFormatted && currentFormatted > startFormatted && currentFormatted < endFormatted;
11489
+ if (dateObj.currentMonth && (isStartSelected || isEndSelected)) return "selected";
11490
+ if (dateObj.currentMonth && isInRange) return "period";
11491
+ if (dateObj.currentMonth && isToday) return "today";
11492
+ if (!dateObj.currentMonth) return "disabled";
11493
+ return "default";
11494
+ } else {
11495
+ const formatted = tempSelectedDate ? formatStringToDate(tempSelectedDate) : null;
11496
+ const isSelected = (formatted == null ? void 0 : formatted.getDate()) === dateObj.date && formatted.getMonth() === currentDate.getMonth() && formatted.getFullYear() === currentDate.getFullYear();
11497
+ return dateObj.currentMonth && isSelected ? "selected" : dateObj.currentMonth && isToday ? "today" : !dateObj.currentMonth ? "disabled" : "default";
11498
+ }
11345
11499
  },
11346
- [tempSelectedDate, currentDate]
11500
+ [tempSelectedDate, tempSelectedRange, range]
11347
11501
  );
11502
+ const getPlaceholderText = () => {
11503
+ return placeholder;
11504
+ };
11348
11505
  (0, import_react32.useEffect)(() => {
11349
- setSelectedDate(value || "");
11350
- setTempSelectedDate(value || "");
11351
- if (value) setCurrentDate(new Date(value));
11352
- }, [value]);
11353
- const slots = (0, import_react32.useMemo)(() => datePickerStyle({ ...variantProps }), [variantProps]);
11506
+ if (range && typeof value === "object") {
11507
+ setSelectedRange(value || { startDate: "", endDate: "" });
11508
+ setTempSelectedRange(value || { startDate: "", endDate: "" });
11509
+ if (value == null ? void 0 : value.startDate) setLeftCurrentDate(new Date(value.startDate));
11510
+ } else if (!range && typeof value === "string") {
11511
+ setSelectedDate(value || "");
11512
+ setTempSelectedDate(value || "");
11513
+ if (value) setLeftCurrentDate(new Date(value));
11514
+ }
11515
+ }, [value, range]);
11516
+ (0, import_react32.useEffect)(() => {
11517
+ if (dualCalendar) {
11518
+ setRightCurrentDate(new Date(leftCurrentDate.getFullYear(), leftCurrentDate.getMonth() + 1));
11519
+ }
11520
+ }, [leftCurrentDate, dualCalendar]);
11521
+ const slots = (0, import_react32.useMemo)(() => datePickerStyle({ ...variantProps, dualCalendar }), [variantProps, dualCalendar]);
11354
11522
  const endContent = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon_default, { name: "calendar", size, className: "cursor-pointer", fill: true, onClick: handleCalendarIconClick });
11523
+ const renderCalendar = (currentDate, isLeft) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex flex-col gap-[5px]", children: [
11524
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: slots.calendarHead({ class: classNames == null ? void 0 : classNames.calendarHead }), children: dualCalendar ? isLeft ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
11525
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(icon_button_default, { name: "left", variant: "soft", color: "neutral", onClick: handleLeftPrevMonth }),
11526
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-xl font-extrabold", children: monthYearFormat(currentDate.getFullYear(), currentDate.getMonth()) }),
11527
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "w-8" })
11528
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
11529
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "w-8" }),
11530
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-xl font-extrabold", children: monthYearFormat(currentDate.getFullYear(), currentDate.getMonth()) }),
11531
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(icon_button_default, { name: "right", variant: "soft", color: "neutral", onClick: handleRightNextMonth })
11532
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
11533
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(icon_button_default, { name: "left", variant: "soft", color: "neutral", onClick: handleLeftPrevMonth }),
11534
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-xl font-extrabold", children: monthYearFormat(currentDate.getFullYear(), currentDate.getMonth()) }),
11535
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(icon_button_default, { name: "right", variant: "soft", color: "neutral", onClick: handleLeftNextMonth })
11536
+ ] }) }),
11537
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-7", children: daysOfWeek.map((day, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(day_default, { variant: "text", children: day }, `${day}-${index}`)) }),
11538
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-7 gap-y-[5px] text-center", children: getCalendarDates(currentDate).map((week, weekIndex) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react32.Fragment, { children: week.map((dateObj, index) => {
11539
+ const dayVariant = getDayProps(dateObj, currentDate);
11540
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
11541
+ day_default,
11542
+ {
11543
+ variant: dayVariant,
11544
+ onClick: () => handleDateSelect(dateObj.date, dateObj.currentMonth, currentDate),
11545
+ children: dateObj.date
11546
+ },
11547
+ index
11548
+ );
11549
+ }) }, weekIndex)) })
11550
+ ] });
11355
11551
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
11356
11552
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { ref: inputWrapperRef, className: slots.base({ class: classNames == null ? void 0 : classNames.base }), onClick: handleFocusInput, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
11357
11553
  input_default,
@@ -11360,7 +11556,7 @@ var DatePicker = (0, import_react32.forwardRef)((originalProps, ref) => {
11360
11556
  ref,
11361
11557
  label,
11362
11558
  value: displayValue,
11363
- placeholder,
11559
+ placeholder: getPlaceholderText(),
11364
11560
  errorMessage,
11365
11561
  helperMessage,
11366
11562
  size,
@@ -11393,22 +11589,12 @@ var DatePicker = (0, import_react32.forwardRef)((originalProps, ref) => {
11393
11589
  style: { position: "absolute", top: panelPos.top, left: panelPos.left, zIndex: 1e3 },
11394
11590
  onMouseDown: handleCalendarMouseDown,
11395
11591
  children: [
11396
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: slots.calendarHead({ class: classNames == null ? void 0 : classNames.calendarHead }), children: [
11397
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(icon_button_default, { name: "left", variant: "soft", color: "neutral", onClick: handlePrevMonth }),
11398
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-xl font-extrabold", children: monthYearFormat(currentDate.getFullYear(), currentDate.getMonth()) }),
11399
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(icon_button_default, { name: "right", variant: "soft", color: "neutral", onClick: handleNextMonth })
11592
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: dualCalendar ? "flex gap-[10px]" : "flex", children: [
11593
+ renderCalendar(leftCurrentDate, true),
11594
+ dualCalendar && range && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "bg-neutral-soft w-px self-stretch" }),
11595
+ dualCalendar && renderCalendar(rightCurrentDate, false)
11400
11596
  ] }),
11401
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-7", children: daysOfWeek.map((day, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(day_default, { variant: "text", children: day }, `${day}-${index}`)) }),
11402
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-7 gap-[5px] text-center", children: getCalendarDates().map((week, weekIndex) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react32.Fragment, { children: week.map((dateObj, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
11403
- day_default,
11404
- {
11405
- variant: getDayProps(dateObj),
11406
- onClick: () => handleDateSelect(dateObj.date, dateObj.currentMonth),
11407
- children: dateObj.date
11408
- },
11409
- index
11410
- )) }, weekIndex)) }),
11411
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex justify-between px-[10px]", children: [
11597
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex h-[30px] justify-between px-[10px]", children: [
11412
11598
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
11413
11599
  text_button_default,
11414
11600
  {
@@ -11454,13 +11640,11 @@ var datePickerStyle = tv({
11454
11640
  "rounded-xl",
11455
11641
  "bg-body-background",
11456
11642
  "shadow-drop-xl",
11457
- "gap-[5px]",
11458
11643
  "overflow-auto",
11459
- "w-[300px]",
11460
11644
  "select-none",
11461
11645
  "p-[10px]"
11462
11646
  ],
11463
- calendarHead: ["calendar-header", "flex", "items-center", "justify-between", "h-[40px]"],
11647
+ calendarHead: ["calendar-header", "flex", "items-center", "justify-between", "h-[40px]", "w-[280px]"],
11464
11648
  inputBase: [],
11465
11649
  inputWrapper: [],
11466
11650
  input: [],
@@ -11472,13 +11656,19 @@ var datePickerStyle = tv({
11472
11656
  color: { primary: {}, secondary: {} },
11473
11657
  size: { sm: {}, md: {}, lg: {}, xl: {} },
11474
11658
  full: { true: { base: ["w-full"] } },
11475
- disabled: { true: { base: ["pointer-events-none"] } }
11659
+ disabled: { true: { base: ["pointer-events-none"] } },
11660
+ dualCalendar: {
11661
+ true: { calendarWrapper: ["w-fit", "gap-[10px]"] },
11662
+ false: { calendarWrapper: ["w-[300px]", "gap-[5px]"] }
11663
+ }
11476
11664
  },
11477
11665
  defaultVariants: {
11478
11666
  color: "primary",
11479
11667
  size: "md",
11480
11668
  full: false,
11481
- disabled: false
11669
+ disabled: false,
11670
+ range: false,
11671
+ dualCalendar: false
11482
11672
  }
11483
11673
  });
11484
11674
 
@@ -12945,6 +13135,91 @@ var radarChartStyle = tv({
12945
13135
  color: "primary"
12946
13136
  }
12947
13137
  });
13138
+
13139
+ // src/components/starRating/starRating.tsx
13140
+ var import_react42 = require("react");
13141
+ var import_jsx_runtime45 = require("react/jsx-runtime");
13142
+ var StarRating = (0, import_react42.forwardRef)((originalProps, ref) => {
13143
+ const [props, variantProps] = mapPropsVariants(originalProps, starRatingStyle.variantKeys);
13144
+ const {
13145
+ stars,
13146
+ size,
13147
+ value,
13148
+ onChange,
13149
+ readOnly = false,
13150
+ allowHalf = false,
13151
+ classNames,
13152
+ filledColor = "text-primary-main",
13153
+ emptyColor = "text-neutral-light"
13154
+ } = { ...props, ...variantProps };
13155
+ const slots = (0, import_react42.useMemo)(() => starRatingStyle({ ...variantProps }), [variantProps]);
13156
+ const [hoverRating, setHoverRating] = (0, import_react42.useState)(0);
13157
+ const handleStarClick = (starIndex, isHalf = false) => {
13158
+ if (readOnly || !onChange) return;
13159
+ const newRating = allowHalf && isHalf ? starIndex - 0.5 : starIndex;
13160
+ onChange(newRating);
13161
+ };
13162
+ const handleStarHover = (starIndex, isHalf = false) => {
13163
+ if (readOnly) return;
13164
+ const newHoverRating = allowHalf && isHalf ? starIndex - 0.5 : starIndex;
13165
+ setHoverRating(newHoverRating);
13166
+ };
13167
+ const handleMouseLeave = () => {
13168
+ if (readOnly) return;
13169
+ setHoverRating(0);
13170
+ };
13171
+ const createRange = (n) => {
13172
+ return Array.from({ length: n }, (_, i) => i + 1);
13173
+ };
13174
+ const renderStar = (starIndex) => {
13175
+ const currentRating = readOnly ? value : hoverRating || value;
13176
+ const isFull = currentRating >= starIndex;
13177
+ const isHalf = allowHalf && currentRating >= starIndex - 0.5 && currentRating < starIndex;
13178
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: slots.starWrapper({ class: classNames == null ? void 0 : classNames.starWrapper }), children: [
13179
+ !readOnly && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
13180
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
13181
+ "div",
13182
+ {
13183
+ className: slots.star({ class: classNames == null ? void 0 : classNames.star }),
13184
+ onClick: () => handleStarClick(starIndex),
13185
+ onMouseEnter: () => handleStarHover(starIndex)
13186
+ }
13187
+ ),
13188
+ allowHalf && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
13189
+ "div",
13190
+ {
13191
+ className: slots.starHalf({ class: classNames == null ? void 0 : classNames.starHalf }),
13192
+ onClick: () => handleStarClick(starIndex, true),
13193
+ onMouseEnter: () => handleStarHover(starIndex, true)
13194
+ }
13195
+ )
13196
+ ] }),
13197
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { children: isHalf ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Icon_default, { name: "halfStar", className: filledColor, size }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Icon_default, { name: "star", fill: isFull, className: isFull ? filledColor : emptyColor, size }) })
13198
+ ] }, starIndex);
13199
+ };
13200
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { ref, className: slots.base({ class: classNames == null ? void 0 : classNames.base }), onMouseLeave: handleMouseLeave, children: createRange(stars).map(renderStar) });
13201
+ });
13202
+ StarRating.displayName = "StarRating";
13203
+ var starRating_default = StarRating;
13204
+ var starRatingStyle = tv({
13205
+ slots: {
13206
+ base: ["flex", "items-center"],
13207
+ starWrapper: ["relative", "inline-block"],
13208
+ star: ["absolute", "inset-0", "z-10", "h-full", "w-full", "cursor-pointer"],
13209
+ starHalf: ["absolute", "left-0", "top-0", "z-20", "h-full", "w-1/2", "cursor-pointer"]
13210
+ },
13211
+ variants: {
13212
+ size: {
13213
+ sm: {},
13214
+ md: {},
13215
+ lg: {},
13216
+ xl: {}
13217
+ }
13218
+ },
13219
+ defaultVariants: {
13220
+ size: "xl"
13221
+ }
13222
+ });
12948
13223
  // Annotate the CommonJS export names for ESM import in node:
12949
13224
  0 && (module.exports = {
12950
13225
  Accordion,
@@ -12977,6 +13252,7 @@ var radarChartStyle = tv({
12977
13252
  ScrollArea,
12978
13253
  Select,
12979
13254
  Skeleton,
13255
+ StarRating,
12980
13256
  Switch,
12981
13257
  Table,
12982
13258
  Tabs,