@etus/ui 0.4.0-beta.7 → 0.4.0-beta.9

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 (242) hide show
  1. package/dist/{chunk-KR3IVNQH.js → chunk-2FJJOHHH.js} +16 -10
  2. package/dist/chunk-2FJJOHHH.js.map +1 -0
  3. package/dist/{chunk-2YWWZEPE.js → chunk-2HM5Z2YP.js} +3 -3
  4. package/dist/{chunk-2YWWZEPE.js.map → chunk-2HM5Z2YP.js.map} +1 -1
  5. package/dist/{chunk-W4NC5CU5.js → chunk-2Q4I4VDB.js} +4 -4
  6. package/dist/{chunk-W4NC5CU5.js.map → chunk-2Q4I4VDB.js.map} +1 -1
  7. package/dist/{chunk-SCGKQ5RE.js → chunk-2ROFZG3A.js} +3 -3
  8. package/dist/{chunk-SCGKQ5RE.js.map → chunk-2ROFZG3A.js.map} +1 -1
  9. package/dist/chunk-2Z722V5K.js +231 -0
  10. package/dist/chunk-2Z722V5K.js.map +1 -0
  11. package/dist/chunk-37IIHQP4.js +233 -0
  12. package/dist/chunk-37IIHQP4.js.map +1 -0
  13. package/dist/{chunk-YP2ATSXP.js → chunk-3BBOSSDG.js} +14 -6
  14. package/dist/{chunk-YP2ATSXP.js.map → chunk-3BBOSSDG.js.map} +1 -1
  15. package/dist/{chunk-UFRMZ3M6.js → chunk-3JCV72FO.js} +6 -2
  16. package/dist/chunk-3JCV72FO.js.map +1 -0
  17. package/dist/{chunk-2UGDLAYC.js → chunk-45D4O7RK.js} +10 -3
  18. package/dist/chunk-45D4O7RK.js.map +1 -0
  19. package/dist/{chunk-OTSK2KAI.js → chunk-4EYYCHLD.js} +5 -5
  20. package/dist/{chunk-OTSK2KAI.js.map → chunk-4EYYCHLD.js.map} +1 -1
  21. package/dist/{chunk-QIETN4UU.js → chunk-55RLLBXW.js} +4 -4
  22. package/dist/{chunk-QIETN4UU.js.map → chunk-55RLLBXW.js.map} +1 -1
  23. package/dist/{chunk-FCT6FEEZ.js → chunk-5DMK7CVS.js} +5 -5
  24. package/dist/{chunk-FCT6FEEZ.js.map → chunk-5DMK7CVS.js.map} +1 -1
  25. package/dist/{chunk-J62TFQHR.js → chunk-5I7AXWJU.js} +13 -13
  26. package/dist/chunk-5I7AXWJU.js.map +1 -0
  27. package/dist/{chunk-65YSTUD2.js → chunk-5SUD32RK.js} +44 -14
  28. package/dist/chunk-5SUD32RK.js.map +1 -0
  29. package/dist/{chunk-VPNFYQBL.js → chunk-6DN2UAIR.js} +3 -3
  30. package/dist/chunk-6DN2UAIR.js.map +1 -0
  31. package/dist/{chunk-EGYWK2XX.js → chunk-7CTFBOD4.js} +3 -3
  32. package/dist/{chunk-EGYWK2XX.js.map → chunk-7CTFBOD4.js.map} +1 -1
  33. package/dist/{chunk-AWYOWR5N.js → chunk-C5HSYDJC.js} +3 -3
  34. package/dist/{chunk-AWYOWR5N.js.map → chunk-C5HSYDJC.js.map} +1 -1
  35. package/dist/{chunk-VFALJSXB.js → chunk-DCUFQJYP.js} +3 -3
  36. package/dist/chunk-DCUFQJYP.js.map +1 -0
  37. package/dist/{chunk-LATTRPLQ.js → chunk-E2TI5V67.js} +3 -3
  38. package/dist/{chunk-LATTRPLQ.js.map → chunk-E2TI5V67.js.map} +1 -1
  39. package/dist/{chunk-23BHD62H.js → chunk-EVZ2GZU4.js} +5 -5
  40. package/dist/chunk-EVZ2GZU4.js.map +1 -0
  41. package/dist/{chunk-IRKDMISK.js → chunk-G2MAGZHQ.js} +4 -3
  42. package/dist/chunk-G2MAGZHQ.js.map +1 -0
  43. package/dist/{chunk-4GQN76L7.js → chunk-G7PBPX3K.js} +3 -3
  44. package/dist/{chunk-4GQN76L7.js.map → chunk-G7PBPX3K.js.map} +1 -1
  45. package/dist/{chunk-36XTKR3B.js → chunk-GDSYLR7L.js} +4 -4
  46. package/dist/{chunk-36XTKR3B.js.map → chunk-GDSYLR7L.js.map} +1 -1
  47. package/dist/{chunk-ONQCNOLU.js → chunk-HDOR3SN3.js} +3 -3
  48. package/dist/{chunk-ONQCNOLU.js.map → chunk-HDOR3SN3.js.map} +1 -1
  49. package/dist/{chunk-PLLJNHWU.js → chunk-HI3T55XK.js} +3 -33
  50. package/dist/chunk-HI3T55XK.js.map +1 -0
  51. package/dist/chunk-HJ4E6YPW.js +236 -0
  52. package/dist/chunk-HJ4E6YPW.js.map +1 -0
  53. package/dist/{chunk-LS3WD6IZ.js → chunk-I55QJ4CU.js} +4 -4
  54. package/dist/{chunk-LS3WD6IZ.js.map → chunk-I55QJ4CU.js.map} +1 -1
  55. package/dist/{chunk-HKXQLWGR.js → chunk-IOWHM7ZY.js} +13 -11
  56. package/dist/chunk-IOWHM7ZY.js.map +1 -0
  57. package/dist/{chunk-ILAV2AZ4.js → chunk-IZC5YFGO.js} +3 -3
  58. package/dist/{chunk-ILAV2AZ4.js.map → chunk-IZC5YFGO.js.map} +1 -1
  59. package/dist/{chunk-Y7UFBSAD.js → chunk-KHOCAVQO.js} +3 -3
  60. package/dist/{chunk-Y7UFBSAD.js.map → chunk-KHOCAVQO.js.map} +1 -1
  61. package/dist/{chunk-IBVCSZCH.js → chunk-KVJOKWP4.js} +5 -4
  62. package/dist/chunk-KVJOKWP4.js.map +1 -0
  63. package/dist/{chunk-2Y7PQ6ZL.js → chunk-LNSCL76Q.js} +5 -5
  64. package/dist/{chunk-2Y7PQ6ZL.js.map → chunk-LNSCL76Q.js.map} +1 -1
  65. package/dist/{chunk-OWOVCGUZ.js → chunk-M2C7HBR5.js} +3 -3
  66. package/dist/{chunk-OWOVCGUZ.js.map → chunk-M2C7HBR5.js.map} +1 -1
  67. package/dist/{chunk-33JGPMUW.js → chunk-M7TPROVH.js} +20 -7
  68. package/dist/chunk-M7TPROVH.js.map +1 -0
  69. package/dist/{chunk-AVR3LVOQ.js → chunk-MQMRVBUL.js} +4 -4
  70. package/dist/{chunk-AVR3LVOQ.js.map → chunk-MQMRVBUL.js.map} +1 -1
  71. package/dist/{chunk-JMZ4CO6R.js → chunk-NCT5WXKG.js} +3 -3
  72. package/dist/{chunk-JMZ4CO6R.js.map → chunk-NCT5WXKG.js.map} +1 -1
  73. package/dist/{chunk-KPNNSUXM.js → chunk-O7AUE5GP.js} +5 -3
  74. package/dist/chunk-O7AUE5GP.js.map +1 -0
  75. package/dist/{chunk-6HEURMY3.js → chunk-OCXGG7UP.js} +5 -5
  76. package/dist/{chunk-6HEURMY3.js.map → chunk-OCXGG7UP.js.map} +1 -1
  77. package/dist/{chunk-FSMHI7DW.js → chunk-OXDWUKGP.js} +3 -3
  78. package/dist/chunk-OXDWUKGP.js.map +1 -0
  79. package/dist/{chunk-SJSYKUCL.js → chunk-Q335YODG.js} +3 -3
  80. package/dist/{chunk-SJSYKUCL.js.map → chunk-Q335YODG.js.map} +1 -1
  81. package/dist/{chunk-DDM2I5C6.js → chunk-R5OIL4I4.js} +3 -3
  82. package/dist/{chunk-DDM2I5C6.js.map → chunk-R5OIL4I4.js.map} +1 -1
  83. package/dist/{chunk-KC6CHPT3.js → chunk-RJ2QVURO.js} +4 -4
  84. package/dist/{chunk-KC6CHPT3.js.map → chunk-RJ2QVURO.js.map} +1 -1
  85. package/dist/{chunk-FYJHWYPM.js → chunk-S524YVMO.js} +3 -3
  86. package/dist/{chunk-FYJHWYPM.js.map → chunk-S524YVMO.js.map} +1 -1
  87. package/dist/{chunk-OWIFNJXZ.js → chunk-S7TVRVRU.js} +3 -3
  88. package/dist/chunk-S7TVRVRU.js.map +1 -0
  89. package/dist/{chunk-JKYB5QAP.js → chunk-SLRCXCHM.js} +4 -4
  90. package/dist/{chunk-JKYB5QAP.js.map → chunk-SLRCXCHM.js.map} +1 -1
  91. package/dist/{chunk-JONTKXGK.js → chunk-U2CXFKRK.js} +3 -3
  92. package/dist/{chunk-JONTKXGK.js.map → chunk-U2CXFKRK.js.map} +1 -1
  93. package/dist/{chunk-B4ETIQOO.js → chunk-U2R47SPY.js} +3 -3
  94. package/dist/{chunk-B4ETIQOO.js.map → chunk-U2R47SPY.js.map} +1 -1
  95. package/dist/{chunk-TNROOKX3.js → chunk-UDY3IDCY.js} +10 -2
  96. package/dist/chunk-UDY3IDCY.js.map +1 -0
  97. package/dist/{chunk-3WOGOTOV.js → chunk-UPYT2XM5.js} +7 -7
  98. package/dist/chunk-UPYT2XM5.js.map +1 -0
  99. package/dist/{chunk-V7XHE25E.js → chunk-UST7EAJM.js} +4 -4
  100. package/dist/{chunk-V7XHE25E.js.map → chunk-UST7EAJM.js.map} +1 -1
  101. package/dist/{chunk-YWA63YN3.js → chunk-VAVE4ZJF.js} +2 -2
  102. package/dist/chunk-VAVE4ZJF.js.map +1 -0
  103. package/dist/{chunk-6ELVWWIA.js → chunk-VBJ26PZJ.js} +3 -3
  104. package/dist/{chunk-6ELVWWIA.js.map → chunk-VBJ26PZJ.js.map} +1 -1
  105. package/dist/chunk-WKWLKGNI.js +643 -0
  106. package/dist/chunk-WKWLKGNI.js.map +1 -0
  107. package/dist/{chunk-Z3FL7LEK.js → chunk-X253YD45.js} +71 -6
  108. package/dist/chunk-X253YD45.js.map +1 -0
  109. package/dist/{chunk-6XY7QYVR.js → chunk-X3AXEE3S.js} +3 -3
  110. package/dist/{chunk-6XY7QYVR.js.map → chunk-X3AXEE3S.js.map} +1 -1
  111. package/dist/{chunk-R4UOT76L.js → chunk-XAIUZJOJ.js} +8 -8
  112. package/dist/chunk-XAIUZJOJ.js.map +1 -0
  113. package/dist/{chunk-ZO2EKJZM.js → chunk-XCZMJA2D.js} +7 -7
  114. package/dist/{chunk-ZO2EKJZM.js.map → chunk-XCZMJA2D.js.map} +1 -1
  115. package/dist/{chunk-XRMKL43Y.js → chunk-XOLV7G4S.js} +3 -3
  116. package/dist/{chunk-XRMKL43Y.js.map → chunk-XOLV7G4S.js.map} +1 -1
  117. package/dist/chunk-XYYOV5GW.js +186 -0
  118. package/dist/chunk-XYYOV5GW.js.map +1 -0
  119. package/dist/{chunk-4MQNDQ4O.js → chunk-YACIRNVP.js} +12 -4
  120. package/dist/chunk-YACIRNVP.js.map +1 -0
  121. package/dist/{chunk-5XQIH6WM.js → chunk-YM5YBDRM.js} +4 -4
  122. package/dist/{chunk-5XQIH6WM.js.map → chunk-YM5YBDRM.js.map} +1 -1
  123. package/dist/{chunk-AUCDXPWH.js → chunk-YZ25HHV2.js} +5 -5
  124. package/dist/{chunk-AUCDXPWH.js.map → chunk-YZ25HHV2.js.map} +1 -1
  125. package/dist/{chunk-Y3BOERVB.js → chunk-ZEFK3AXP.js} +3 -3
  126. package/dist/{chunk-Y3BOERVB.js.map → chunk-ZEFK3AXP.js.map} +1 -1
  127. package/dist/{chunk-L3Z5FAJE.js → chunk-ZEYLSDSG.js} +3 -3
  128. package/dist/{chunk-L3Z5FAJE.js.map → chunk-ZEYLSDSG.js.map} +1 -1
  129. package/dist/components/advanced/Calendar/index.js +4 -4
  130. package/dist/components/advanced/Command/index.js +1 -1
  131. package/dist/components/advanced/EventCalendar/index.js +4 -4
  132. package/dist/components/advanced/FileDropzone/index.js +1 -1
  133. package/dist/components/advanced/FilterBuilder/index.js +4 -4
  134. package/dist/components/advanced/MarkdownEditor/index.js +2 -2
  135. package/dist/components/advanced/ReportBuilder/index.js +2 -2
  136. package/dist/components/advanced/RichTextEditor/index.js +2 -2
  137. package/dist/components/advanced/index.js +17 -17
  138. package/dist/components/data-display/AreaChart/index.js +1 -1
  139. package/dist/components/data-display/BarChart/index.js +1 -1
  140. package/dist/components/data-display/Carousel/index.js +4 -4
  141. package/dist/components/data-display/ChartCard/index.js +2 -2
  142. package/dist/components/data-display/DashboardFilterbar/index.js +6 -6
  143. package/dist/components/data-display/DataTable/FilterBuilder/index.js +4 -4
  144. package/dist/components/data-display/DataTable/index.js +7 -7
  145. package/dist/components/data-display/ImageGallery/index.js +7 -7
  146. package/dist/components/data-display/KPICard/index.js +4 -4
  147. package/dist/components/data-display/Lightbox/index.js +1 -1
  148. package/dist/components/data-display/LineChart/index.js +1 -1
  149. package/dist/components/data-display/List/index.js +3 -3
  150. package/dist/components/data-display/Table/index.js +1 -1
  151. package/dist/components/data-display/VirtualTable/index.js +2 -2
  152. package/dist/components/data-display/index.js +34 -34
  153. package/dist/components/feedback/Alert/index.js +1 -1
  154. package/dist/components/feedback/AlertDialog/index.js +4 -4
  155. package/dist/components/feedback/ConfirmModal/index.js +5 -5
  156. package/dist/components/feedback/Modal/index.js +1 -1
  157. package/dist/components/feedback/Notification/index.js +2 -2
  158. package/dist/components/feedback/index.js +10 -10
  159. package/dist/components/forms/ColorPicker/index.js +1 -1
  160. package/dist/components/forms/DatePicker/index.js +5 -5
  161. package/dist/components/forms/DateRangePicker/index.js +5 -5
  162. package/dist/components/forms/Field/index.js +2 -2
  163. package/dist/components/forms/Form/index.js +2 -2
  164. package/dist/components/forms/IftaLabel/index.js +1 -1
  165. package/dist/components/forms/InputGroup/index.js +4 -4
  166. package/dist/components/forms/InputOTPField/index.js +3 -3
  167. package/dist/components/forms/MultiSelect/index.js +2 -1
  168. package/dist/components/forms/RadioButton/index.js +1 -1
  169. package/dist/components/forms/Rating/index.js +1 -1
  170. package/dist/components/forms/TagsInput/index.js +2 -2
  171. package/dist/components/forms/TextareaField/index.js +3 -3
  172. package/dist/components/forms/ToggleGroup/index.js +1 -1
  173. package/dist/components/forms/index.js +31 -31
  174. package/dist/components/index.js +141 -141
  175. package/dist/components/layout/index.js +2 -2
  176. package/dist/components/navigation/AccountSwitch/index.js +4 -4
  177. package/dist/components/navigation/Drawer/index.js +1 -1
  178. package/dist/components/navigation/DropdownMenu/index.js +1 -1
  179. package/dist/components/navigation/Header/index.js +1 -1
  180. package/dist/components/navigation/MobileSidebar/index.js +4 -4
  181. package/dist/components/navigation/Pagination/index.js +4 -4
  182. package/dist/components/navigation/Sidebar/index.js +5 -5
  183. package/dist/components/navigation/UserProfileDropdown/index.js +1 -1
  184. package/dist/components/navigation/WorkspaceDropdown/index.js +1 -1
  185. package/dist/components/navigation/index.js +16 -16
  186. package/dist/components/primitives/AspectRatio/index.js +1 -1
  187. package/dist/components/primitives/Avatar/index.js +1 -1
  188. package/dist/components/primitives/Badge/index.js +1 -1
  189. package/dist/components/primitives/Button/index.js +3 -3
  190. package/dist/components/primitives/ConfirmButton/index.js +5 -5
  191. package/dist/components/primitives/Label/index.js +1 -1
  192. package/dist/components/primitives/ProgressBar/index.js +1 -1
  193. package/dist/components/primitives/SplitButton/index.js +2 -2
  194. package/dist/components/primitives/StatusIndicator/index.js +1 -1
  195. package/dist/components/primitives/Tag/index.js +1 -1
  196. package/dist/components/primitives/Toggle/index.js +1 -1
  197. package/dist/components/primitives/index.js +21 -21
  198. package/dist/components/workflow/ApprovalFlow/index.js +5 -5
  199. package/dist/components/workflow/CommentSystem/index.js +5 -5
  200. package/dist/components/workflow/Dashboard/index.js +4 -4
  201. package/dist/components/workflow/DashboardBuilder/index.js +5 -5
  202. package/dist/components/workflow/KanbanBoard/index.js +5 -5
  203. package/dist/components/workflow/ReportGenerator/index.js +5 -5
  204. package/dist/components/workflow/TaskStatus/index.js +2 -2
  205. package/dist/components/workflow/Wizard/index.js +4 -4
  206. package/dist/components/workflow/index.js +16 -16
  207. package/dist/index.d.ts +162 -56
  208. package/dist/index.js +143 -143
  209. package/dist/styles.css +121 -25
  210. package/package.json +2 -2
  211. package/dist/chunk-23BHD62H.js.map +0 -1
  212. package/dist/chunk-2UGDLAYC.js.map +0 -1
  213. package/dist/chunk-33JGPMUW.js.map +0 -1
  214. package/dist/chunk-3WOGOTOV.js.map +0 -1
  215. package/dist/chunk-4MQNDQ4O.js.map +0 -1
  216. package/dist/chunk-65YSTUD2.js.map +0 -1
  217. package/dist/chunk-FSMHI7DW.js.map +0 -1
  218. package/dist/chunk-GAP3OZR7.js +0 -223
  219. package/dist/chunk-GAP3OZR7.js.map +0 -1
  220. package/dist/chunk-HKXQLWGR.js.map +0 -1
  221. package/dist/chunk-IBVCSZCH.js.map +0 -1
  222. package/dist/chunk-ICAQYWCX.js +0 -153
  223. package/dist/chunk-ICAQYWCX.js.map +0 -1
  224. package/dist/chunk-IRKDMISK.js.map +0 -1
  225. package/dist/chunk-J62TFQHR.js.map +0 -1
  226. package/dist/chunk-KPNNSUXM.js.map +0 -1
  227. package/dist/chunk-KR3IVNQH.js.map +0 -1
  228. package/dist/chunk-OWIFNJXZ.js.map +0 -1
  229. package/dist/chunk-PLLJNHWU.js.map +0 -1
  230. package/dist/chunk-R4UOT76L.js.map +0 -1
  231. package/dist/chunk-SHS6EGWS.js +0 -226
  232. package/dist/chunk-SHS6EGWS.js.map +0 -1
  233. package/dist/chunk-TNROOKX3.js.map +0 -1
  234. package/dist/chunk-UFRMZ3M6.js.map +0 -1
  235. package/dist/chunk-VFALJSXB.js.map +0 -1
  236. package/dist/chunk-VPNFYQBL.js.map +0 -1
  237. package/dist/chunk-XD5LE64P.js +0 -311
  238. package/dist/chunk-XD5LE64P.js.map +0 -1
  239. package/dist/chunk-XV6NXXXP.js +0 -206
  240. package/dist/chunk-XV6NXXXP.js.map +0 -1
  241. package/dist/chunk-YWA63YN3.js.map +0 -1
  242. package/dist/chunk-Z3FL7LEK.js.map +0 -1
@@ -0,0 +1,236 @@
1
+ import { ChartTooltipContent, ChartContainer, ChartTooltip, ChartLegend, ChartLegendContent } from './chunk-7I6KK6QE.js';
2
+ import { cn } from './chunk-HRNDJU7D.js';
3
+ import * as React from 'react';
4
+ import { AreaChart as AreaChart$1, CartesianGrid, XAxis, Label, YAxis, Area } from 'recharts';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function normalizeSeriesConfig(series) {
8
+ return series.map(
9
+ (s) => typeof s === "string" ? { dataKey: s } : s
10
+ );
11
+ }
12
+ function GradientDefs({
13
+ idPrefix,
14
+ series
15
+ }) {
16
+ return /* @__PURE__ */ jsx("defs", { children: series.map((s) => /* @__PURE__ */ jsxs(
17
+ "linearGradient",
18
+ {
19
+ id: `${idPrefix}-${s.dataKey}`,
20
+ x1: "0",
21
+ x2: "0",
22
+ y1: "0",
23
+ y2: "1",
24
+ children: [
25
+ /* @__PURE__ */ jsx(
26
+ "stop",
27
+ {
28
+ offset: "5%",
29
+ stopColor: `var(--color-${s.dataKey})`,
30
+ stopOpacity: 0.8
31
+ }
32
+ ),
33
+ /* @__PURE__ */ jsx(
34
+ "stop",
35
+ {
36
+ offset: "95%",
37
+ stopColor: `var(--color-${s.dataKey})`,
38
+ stopOpacity: 0.1
39
+ }
40
+ )
41
+ ]
42
+ },
43
+ s.dataKey
44
+ )) });
45
+ }
46
+ function AreaChart({
47
+ allowDecimals = true,
48
+ ariaLabel,
49
+ autoMinValue = false,
50
+ className,
51
+ config,
52
+ connectNulls = false,
53
+ customTooltip,
54
+ enableLegendSlider = false,
55
+ curveType = "monotone",
56
+ data,
57
+ fill = "solid",
58
+ fillOpacity = 0.3,
59
+ gradientIdPrefix = "area-gradient",
60
+ gridDashArray = "3 3",
61
+ intervalType,
62
+ legendPosition = "bottom",
63
+ maxValue,
64
+ minValue,
65
+ onValueChange,
66
+ series,
67
+ showGrid = true,
68
+ showLegend = false,
69
+ showTooltip = true,
70
+ showXAxis = true,
71
+ showYAxis = true,
72
+ startEndOnly = false,
73
+ tickGap,
74
+ tooltipCallback,
75
+ tooltipIndicator = "dot",
76
+ variant = "default",
77
+ xAxisLabel,
78
+ xAxisKey,
79
+ xAxisTickFormatter,
80
+ yAxisLabel,
81
+ yAxisTickFormatter,
82
+ yAxisWidth,
83
+ ...props
84
+ }) {
85
+ const normalizedSeries = normalizeSeriesConfig(series);
86
+ const isStacked = variant === "stacked" || variant === "percent";
87
+ const isPercent = variant === "percent";
88
+ const isGradient = variant === "gradient" || fill === "gradient";
89
+ const isNoFill = fill === "none";
90
+ const chartId = React.useId().replaceAll(":", "");
91
+ const gradientPrefix = `${gradientIdPrefix}-${chartId}`;
92
+ const prevTooltipStateRef = React.useRef(false);
93
+ const handleDotClick = React.useCallback(
94
+ (dataKey) => (data2) => {
95
+ if (!onValueChange) return;
96
+ const payload = data2.payload;
97
+ const value = payload[dataKey];
98
+ onValueChange({
99
+ category: payload[xAxisKey],
100
+ dataKey,
101
+ payload,
102
+ value: typeof value === "number" ? value : 0
103
+ });
104
+ },
105
+ [onValueChange, xAxisKey]
106
+ );
107
+ const TooltipContentWithCallback = React.useCallback(
108
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ (props2) => {
110
+ const { active = false, label, payload } = props2;
111
+ if (tooltipCallback && active !== prevTooltipStateRef.current) {
112
+ prevTooltipStateRef.current = active;
113
+ tooltipCallback({
114
+ active,
115
+ label,
116
+ payload: payload?.map((p) => ({
117
+ dataKey: String(p.dataKey),
118
+ value: p.value,
119
+ payload: p.payload
120
+ }))
121
+ });
122
+ }
123
+ return /* @__PURE__ */ jsx(ChartTooltipContent, { indicator: tooltipIndicator, ...props2 });
124
+ },
125
+ [tooltipCallback, tooltipIndicator]
126
+ );
127
+ const yDomain = React.useMemo(() => {
128
+ const min = minValue ?? (autoMinValue ? "auto" : 0);
129
+ const max = maxValue ?? "auto";
130
+ return [min, max];
131
+ }, [autoMinValue, maxValue, minValue]);
132
+ const xAxisTicks = React.useMemo(() => {
133
+ if (!startEndOnly || data.length < 2) return;
134
+ const first = data[0];
135
+ const last = data[data.length - 1];
136
+ if (!first || !last) return;
137
+ return [first[xAxisKey], last[xAxisKey]];
138
+ }, [data, startEndOnly, xAxisKey]);
139
+ return /* @__PURE__ */ jsx(
140
+ "div",
141
+ {
142
+ "aria-label": ariaLabel,
143
+ "data-slot": "area-chart",
144
+ role: ariaLabel ? "img" : void 0,
145
+ ...props,
146
+ children: /* @__PURE__ */ jsx(
147
+ ChartContainer,
148
+ {
149
+ className: cn(className),
150
+ config,
151
+ children: /* @__PURE__ */ jsxs(
152
+ AreaChart$1,
153
+ {
154
+ accessibilityLayer: true,
155
+ data,
156
+ margin: { left: xAxisLabel ? 20 : 12, right: 12, bottom: yAxisLabel ? 20 : 0 },
157
+ stackOffset: isPercent ? "expand" : void 0,
158
+ children: [
159
+ isGradient && /* @__PURE__ */ jsx(GradientDefs, { idPrefix: gradientPrefix, series: normalizedSeries }),
160
+ showGrid && /* @__PURE__ */ jsx(CartesianGrid, { strokeDasharray: gridDashArray, vertical: false }),
161
+ showXAxis && /* @__PURE__ */ jsx(
162
+ XAxis,
163
+ {
164
+ axisLine: false,
165
+ dataKey: xAxisKey,
166
+ interval: intervalType,
167
+ minTickGap: tickGap,
168
+ tickFormatter: xAxisTickFormatter,
169
+ tickLine: false,
170
+ tickMargin: 8,
171
+ ticks: xAxisTicks,
172
+ children: xAxisLabel && /* @__PURE__ */ jsx(Label, { offset: -5, position: "insideBottom", value: xAxisLabel })
173
+ }
174
+ ),
175
+ showYAxis && /* @__PURE__ */ jsx(
176
+ YAxis,
177
+ {
178
+ allowDecimals,
179
+ axisLine: false,
180
+ domain: isPercent ? [0, 1] : yDomain,
181
+ tickFormatter: isPercent ? (value) => `${(value * 100).toFixed(0)}%` : yAxisTickFormatter,
182
+ tickLine: false,
183
+ tickMargin: 8,
184
+ width: yAxisWidth,
185
+ children: yAxisLabel && /* @__PURE__ */ jsx(Label, { angle: -90, offset: -5, position: "insideLeft", value: yAxisLabel })
186
+ }
187
+ ),
188
+ showTooltip && /* @__PURE__ */ jsx(
189
+ ChartTooltip,
190
+ {
191
+ content: customTooltip ?? (tooltipCallback ? /* @__PURE__ */ jsx(TooltipContentWithCallback, {}) : /* @__PURE__ */ jsx(ChartTooltipContent, { indicator: tooltipIndicator })),
192
+ cursor: false
193
+ }
194
+ ),
195
+ showLegend && /* @__PURE__ */ jsx(
196
+ ChartLegend,
197
+ {
198
+ align: legendPosition === "left" ? "left" : legendPosition === "right" ? "right" : "center",
199
+ content: /* @__PURE__ */ jsx(ChartLegendContent, { enableSlider: enableLegendSlider }),
200
+ layout: legendPosition === "left" || legendPosition === "right" ? "vertical" : "horizontal",
201
+ verticalAlign: legendPosition === "top" ? "top" : legendPosition === "bottom" ? "bottom" : "middle"
202
+ }
203
+ ),
204
+ normalizedSeries.map((seriesConfig) => {
205
+ const { dataKey, fillOpacity: seriesFillOpacity, stackId } = seriesConfig;
206
+ const areaFill = isGradient ? `url(#${gradientPrefix}-${dataKey})` : `var(--color-${dataKey})`;
207
+ const stroke = `var(--color-${dataKey})`;
208
+ const computedFillOpacity = isNoFill ? 0 : seriesFillOpacity ?? fillOpacity;
209
+ return /* @__PURE__ */ jsx(
210
+ Area,
211
+ {
212
+ activeDot: onValueChange ? { onClick: handleDotClick(dataKey), r: 6, style: { cursor: "pointer" } } : { r: 6 },
213
+ connectNulls,
214
+ dataKey,
215
+ fill: areaFill,
216
+ fillOpacity: computedFillOpacity,
217
+ stackId: isStacked ? "area-stack" : stackId,
218
+ stroke,
219
+ type: curveType
220
+ },
221
+ dataKey
222
+ );
223
+ })
224
+ ]
225
+ }
226
+ )
227
+ }
228
+ )
229
+ }
230
+ );
231
+ }
232
+ AreaChart.displayName = "AreaChart";
233
+
234
+ export { AreaChart };
235
+ //# sourceMappingURL=chunk-HJ4E6YPW.js.map
236
+ //# sourceMappingURL=chunk-HJ4E6YPW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/AreaChart/AreaChart.tsx"],"names":["data","props","RechartsAreaChart"],"mappings":"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","file":"chunk-HJ4E6YPW.js","sourcesContent":["\"use client\"\n\nimport type {\n AreaChartProps,\n AreaChartSeriesConfig,\n} from \"./AreaChart.types\"\n\nimport * as React from \"react\"\nimport {\n Area,\n CartesianGrid,\n Label,\n AreaChart as RechartsAreaChart,\n XAxis,\n YAxis,\n} from \"recharts\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from \"../Chart\"\n\n/**\n * Normalize series to AreaChartSeriesConfig format\n */\nfunction normalizeSeriesConfig(\n series: (AreaChartSeriesConfig | string)[]\n): AreaChartSeriesConfig[] {\n return series.map((s) =>\n typeof s === \"string\" ? { dataKey: s } : s\n )\n}\n\n/**\n * Generate gradient defs for gradient variant\n */\nfunction GradientDefs({\n idPrefix,\n series,\n}: {\n idPrefix: string\n series: AreaChartSeriesConfig[]\n}) {\n return (\n <defs>\n {series.map((s) => (\n <linearGradient\n key={s.dataKey}\n id={`${idPrefix}-${s.dataKey}`}\n x1=\"0\"\n x2=\"0\"\n y1=\"0\"\n y2=\"1\"\n >\n <stop\n offset=\"5%\"\n stopColor={`var(--color-${s.dataKey})`}\n stopOpacity={0.8}\n />\n <stop\n offset=\"95%\"\n stopColor={`var(--color-${s.dataKey})`}\n stopOpacity={0.1}\n />\n </linearGradient>\n ))}\n </defs>\n )\n}\n\n/**\n * AreaChart - Data visualization component for cumulative data\n *\n * Displays quantitative values along a continuous axis with filled area.\n * Ideal for showing trends over time and comparing volumes between series.\n *\n * @example\n * ```tsx\n * const data = [\n * { month: \"Jan\", desktop: 186, mobile: 80 },\n * { month: \"Feb\", desktop: 305, mobile: 200 },\n * ]\n *\n * const config = {\n * desktop: { label: \"Desktop\", color: \"hsl(var(--chart-1))\" },\n * mobile: { label: \"Mobile\", color: \"hsl(var(--chart-2))\" },\n * }\n *\n * <AreaChart\n * data={data}\n * config={config}\n * xAxisKey=\"month\"\n * series={[\"desktop\", \"mobile\"]}\n * />\n * ```\n */\nexport function AreaChart({\n allowDecimals = true,\n ariaLabel,\n autoMinValue = false,\n className,\n config,\n connectNulls = false,\n customTooltip,\n enableLegendSlider = false,\n curveType = \"monotone\",\n data,\n fill = \"solid\",\n fillOpacity = 0.3,\n gradientIdPrefix = \"area-gradient\",\n gridDashArray = \"3 3\",\n intervalType,\n legendPosition = \"bottom\",\n maxValue,\n minValue,\n onValueChange,\n series,\n showGrid = true,\n showLegend = false,\n showTooltip = true,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n tickGap,\n tooltipCallback,\n tooltipIndicator = \"dot\",\n variant = \"default\",\n xAxisLabel,\n xAxisKey,\n xAxisTickFormatter,\n yAxisLabel,\n yAxisTickFormatter,\n yAxisWidth,\n ...props\n}: AreaChartProps) {\n const normalizedSeries = normalizeSeriesConfig(series)\n const isStacked = variant === \"stacked\" || variant === \"percent\"\n const isPercent = variant === \"percent\"\n const isGradient = variant === \"gradient\" || fill === \"gradient\"\n const isNoFill = fill === \"none\"\n const chartId = React.useId().replaceAll(\":\", \"\")\n const gradientPrefix = `${gradientIdPrefix}-${chartId}`\n const prevTooltipStateRef = React.useRef<boolean>(false)\n\n // Handle dot click for onValueChange\n const handleDotClick = React.useCallback(\n (dataKey: string) => (data: { payload: Record<string, unknown> }) => {\n if (!onValueChange) return\n const payload = data.payload\n const value = payload[dataKey]\n onValueChange({\n category: payload[xAxisKey],\n dataKey,\n payload,\n value: typeof value === \"number\" ? value : 0,\n })\n },\n [onValueChange, xAxisKey]\n )\n\n /* eslint-disable react-hooks/static-components, @eslint-react/no-nested-component-definitions, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access -- Intentional: memoized render function with Recharts any-typed props */\n // Custom tooltip content wrapper for tooltipCallback\n const TooltipContentWithCallback = React.useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (props: any) => {\n const { active = false, label, payload } = props\n\n // Call tooltipCallback when state changes\n if (tooltipCallback && active !== prevTooltipStateRef.current) {\n prevTooltipStateRef.current = active\n tooltipCallback({\n active,\n label,\n payload: payload?.map((p: { dataKey: number | string; payload: Record<string, unknown>; value: number; }) => ({\n dataKey: String(p.dataKey),\n value: p.value,\n payload: p.payload,\n })),\n })\n }\n\n return <ChartTooltipContent indicator={tooltipIndicator} {...props} />\n },\n [tooltipCallback, tooltipIndicator]\n )\n\n // Calculate Y-axis domain\n const yDomain = React.useMemo(() => {\n const min = minValue ?? (autoMinValue ? \"auto\" : 0)\n const max = maxValue ?? \"auto\"\n return [min, max] as const\n }, [autoMinValue, maxValue, minValue])\n\n // Calculate X-axis ticks for startEndOnly\n const xAxisTicks = React.useMemo(() => {\n if (!startEndOnly || data.length < 2) return\n const first = data[0]\n const last = data[data.length - 1]\n if (!first || !last) return\n return [first[xAxisKey], last[xAxisKey]] as string[]\n }, [data, startEndOnly, xAxisKey])\n\n return (\n <div\n aria-label={ariaLabel}\n data-slot=\"area-chart\"\n role={ariaLabel ? \"img\" : undefined}\n {...props}\n >\n <ChartContainer\n className={cn(className)}\n config={config}\n >\n <RechartsAreaChart\n accessibilityLayer\n data={data}\n margin={{ left: xAxisLabel ? 20 : 12, right: 12, bottom: yAxisLabel ? 20 : 0 }}\n stackOffset={isPercent ? \"expand\" : undefined}\n >\n {isGradient && (\n <GradientDefs idPrefix={gradientPrefix} series={normalizedSeries} />\n )}\n\n {showGrid && (\n <CartesianGrid strokeDasharray={gridDashArray} vertical={false} />\n )}\n\n {showXAxis && (\n <XAxis\n axisLine={false}\n dataKey={xAxisKey}\n interval={intervalType}\n minTickGap={tickGap}\n tickFormatter={xAxisTickFormatter}\n tickLine={false}\n tickMargin={8}\n ticks={xAxisTicks}\n >\n {xAxisLabel && (\n <Label offset={-5} position=\"insideBottom\" value={xAxisLabel} />\n )}\n </XAxis>\n )}\n\n {showYAxis && (\n <YAxis\n allowDecimals={allowDecimals}\n axisLine={false}\n domain={isPercent ? [0, 1] : yDomain}\n tickFormatter={isPercent ? (value) => `${(value * 100).toFixed(0)}%` : yAxisTickFormatter}\n tickLine={false}\n tickMargin={8}\n width={yAxisWidth}\n >\n {yAxisLabel && (\n <Label angle={-90} offset={-5} position=\"insideLeft\" value={yAxisLabel} />\n )}\n </YAxis>\n )}\n\n {showTooltip && (\n <ChartTooltip\n content={\n customTooltip\n ?? (tooltipCallback\n ? <TooltipContentWithCallback />\n : <ChartTooltipContent indicator={tooltipIndicator} />)\n }\n cursor={false}\n />\n )}\n\n {showLegend && (\n <ChartLegend\n align={legendPosition === \"left\" ? \"left\" : legendPosition === \"right\" ? \"right\" : \"center\"}\n content={<ChartLegendContent enableSlider={enableLegendSlider} />}\n layout={legendPosition === \"left\" || legendPosition === \"right\" ? \"vertical\" : \"horizontal\"}\n verticalAlign={legendPosition === \"top\" ? \"top\" : legendPosition === \"bottom\" ? \"bottom\" : \"middle\"}\n />\n )}\n\n {normalizedSeries.map((seriesConfig) => {\n const { dataKey, fillOpacity: seriesFillOpacity, stackId } = seriesConfig\n\n const areaFill = isGradient\n ? `url(#${gradientPrefix}-${dataKey})`\n : `var(--color-${dataKey})`\n\n const stroke = `var(--color-${dataKey})`\n\n // Calculate fill opacity: 0 for \"none\", otherwise use series or default\n const computedFillOpacity = isNoFill ? 0 : (seriesFillOpacity ?? fillOpacity)\n\n return (\n <Area\n key={dataKey}\n activeDot={\n onValueChange\n ? { onClick: handleDotClick(dataKey), r: 6, style: { cursor: \"pointer\" } }\n : { r: 6 }\n }\n connectNulls={connectNulls}\n dataKey={dataKey}\n fill={areaFill}\n fillOpacity={computedFillOpacity}\n stackId={isStacked ? \"area-stack\" : stackId}\n stroke={stroke}\n type={curveType}\n />\n )\n })}\n </RechartsAreaChart>\n </ChartContainer>\n </div>\n )\n}\n\nAreaChart.displayName = \"AreaChart\"\n"]}
@@ -1,7 +1,7 @@
1
1
  import { ScrollArea } from './chunk-CNRV2IGH.js';
2
- import { Calendar } from './chunk-R4UOT76L.js';
2
+ import { Calendar } from './chunk-XAIUZJOJ.js';
3
3
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-AFCSDND5.js';
4
- import { Button } from './chunk-ONQCNOLU.js';
4
+ import { Button } from './chunk-HDOR3SN3.js';
5
5
  import { cn } from './chunk-HRNDJU7D.js';
6
6
  import { format, startOfDay, isBefore, isAfter, setMinutes, setHours } from 'date-fns';
7
7
  import { CalendarIcon, XIcon } from 'lucide-react';
@@ -491,5 +491,5 @@ function DatePicker({
491
491
  }
492
492
 
493
493
  export { DatePicker, datePickerTriggerVariants };
494
- //# sourceMappingURL=chunk-LS3WD6IZ.js.map
495
- //# sourceMappingURL=chunk-LS3WD6IZ.js.map
494
+ //# sourceMappingURL=chunk-I55QJ4CU.js.map
495
+ //# sourceMappingURL=chunk-I55QJ4CU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/forms/DatePicker/DatePicker.variants.ts","../src/components/forms/DatePicker/DatePicker.tsx"],"names":["format","formatDate"],"mappings":"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","file":"chunk-LS3WD6IZ.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DatePicker trigger variant styles using CVA\n */\nexport const datePickerTriggerVariants = cva(\n // Base styles\n [\n \"inline-flex w-full items-center justify-between gap-2 rounded-[var(--date-picker-trigger-radius)] border bg-transparent font-normal transition-[color,box-shadow] outline-none\",\n \"text-left\",\n \"placeholder:text-muted-foreground\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-[color:var(--date-picker-trigger-disabled-bg)] disabled:text-[color:var(--date-picker-trigger-disabled-fg)] disabled:border-[color:var(--date-picker-trigger-disabled-border)]\",\n \"focus-visible:border-[color:var(--date-picker-trigger-border-focus)] focus-visible:ring-[color:var(--date-picker-trigger-ring-primary)]/50 focus-visible:ring-[length:var(--date-picker-trigger-ring-width)]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"data-[state=open]:border-ring data-[state=open]:ring-ring/50 data-[state=open]:ring-[3px]\",\n \"min-w-[var(--date-picker-trigger-min-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--date-picker-trigger-height-sm)] px-[var(--date-picker-trigger-padding-x-sm)] py-[var(--date-picker-trigger-padding-y-sm)] text-[length:var(--date-picker-trigger-text-sm)]\",\n md: \"h-[var(--date-picker-trigger-height-md)] px-[var(--date-picker-trigger-padding-x-md)] py-[var(--date-picker-trigger-padding-y-md)] text-[length:var(--date-picker-trigger-text-md)]\",\n lg: \"h-[var(--date-picker-trigger-height-lg)] px-[var(--date-picker-trigger-padding-x-lg)] py-[var(--date-picker-trigger-padding-y-lg)] text-[length:var(--date-picker-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs dark:bg-input/30\",\n filled: \"border-transparent bg-muted\",\n flushed: \"rounded-none border-x-0 border-t-0 border-b-input px-0\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/**\n * DatePicker clear button styles using CVA.\n *\n * The clear control is a sibling of the trigger (never nested inside the\n * trigger button — button-in-button is invalid). It is absolutely positioned\n * so it overlays the trigger's trailing-icon slot, sitting at the same inset\n * as the calendar icon for each size/variant.\n */\nexport const datePickerClearButtonVariants = cva(\n [\n \"absolute top-1/2 inline-flex size-4 -translate-y-1/2 items-center justify-center rounded-sm outline-none\",\n \"text-muted-foreground opacity-70 transition-opacity\",\n \"hover:opacity-100 focus-visible:opacity-100\",\n \"focus-visible:ring-[color:var(--date-picker-trigger-ring-primary)]/50 focus-visible:ring-[length:var(--date-picker-trigger-ring-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n variant: {\n default: \"\",\n filled: \"\",\n flushed: \"\",\n },\n },\n compoundVariants: [\n // Non-flushed variants inset the trailing slot by the trigger's px token\n { variant: [\"default\", \"filled\"], size: \"sm\", className: \"right-[var(--date-picker-trigger-padding-x-sm)]\" },\n { variant: [\"default\", \"filled\"], size: \"md\", className: \"right-[var(--date-picker-trigger-padding-x-md)]\" },\n { variant: [\"default\", \"filled\"], size: \"lg\", className: \"right-[var(--date-picker-trigger-padding-x-lg)]\" },\n // Flushed removes horizontal padding, so the slot sits at the edge\n { variant: \"flushed\", className: \"right-0\" },\n ],\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\nexport type DatePickerTriggerVariantProps = VariantProps<typeof datePickerTriggerVariants>\n","import type { DatePickerProps } from \"./DatePicker.types\"\n\nimport { format as formatDate, isAfter, isBefore, setHours, setMinutes, startOfDay } from \"date-fns\"\nimport { CalendarIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Calendar } from \"../../advanced/Calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../feedback/Popover\"\nimport { ScrollArea } from \"../../layout/ScrollArea\"\nimport { Button } from \"../../primitives/Button\"\nimport { datePickerClearButtonVariants, datePickerTriggerVariants } from \"./DatePicker.variants\"\n\n/**\n * Convert 24h hours to 12h format with period\n */\nfunction to12Hour(hours: number): { hour12: number; period: \"AM\" | \"PM\" } {\n const period = hours >= 12 ? \"PM\" : \"AM\"\n let hour12 = hours % 12\n if (hour12 === 0) hour12 = 12\n return { hour12, period }\n}\n\n/**\n * Convert 12h format to 24h hours\n */\nfunction to24Hour(hour12: number, period: \"AM\" | \"PM\"): number {\n if (period === \"AM\") {\n return hour12 === 12 ? 0 : hour12\n }\n return hour12 === 12 ? 12 : hour12 + 12\n}\n\n/**\n * Generate array of hour options\n */\nfunction getHourOptions(use12Hour: boolean): number[] {\n if (use12Hour) {\n return [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n }\n return Array.from({ length: 24 }, (_, i) => i)\n}\n\n/**\n * Generate array of minute options based on step\n */\nfunction getMinuteOptions(step: number): number[] {\n const options: number[] = []\n for (let i = 0; i < 60; i += step) {\n options.push(i)\n }\n return options\n}\n\nfunction DatePicker({\n ref,\n className,\n align = \"start\",\n dialogLabel = \"Choose date\",\n value,\n defaultValue,\n placeholder = \"Select date\",\n disabled = false,\n disabledDates,\n readOnly = false,\n showTimePicker = false,\n showToday = false,\n timeLabel = \"Time\",\n timeMinuteStep = 1,\n timeUse12Hour = false,\n todayLabel = \"Today\",\n minDate,\n maxDate,\n format = \"PPP\",\n locale,\n onChange,\n onOpenChange,\n onClear,\n size = \"md\",\n variant = \"default\",\n required = false,\n invalid = false,\n clearable = false,\n calendarProps,\n id,\n name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ...props\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [internalDate, setInternalDate] = React.useState<Date | undefined>(defaultValue)\n\n // Time state for when showTimePicker is enabled\n const [internalHours, setInternalHours] = React.useState<number>(\n defaultValue ? defaultValue.getHours() : 0\n )\n const [internalMinutes, setInternalMinutes] = React.useState<number>(\n defaultValue ? defaultValue.getMinutes() : 0\n )\n const [internalPeriod, setInternalPeriod] = React.useState<\"AM\" | \"PM\">(() =>\n defaultValue ? to12Hour(defaultValue.getHours()).period : \"AM\"\n )\n\n // Refs for auto-scrolling time columns\n const hourListRef = React.useRef<HTMLDivElement>(null)\n const minuteListRef = React.useRef<HTMLDivElement>(null)\n\n // Use controlled value if provided, otherwise use internal state\n const selectedDate = value ?? internalDate\n\n // Get time from selected date or internal state\n const currentHours = selectedDate ? selectedDate.getHours() : internalHours\n const currentMinutes = selectedDate ? selectedDate.getMinutes() : internalMinutes\n const currentPeriod = selectedDate\n ? to12Hour(selectedDate.getHours()).period\n : internalPeriod\n\n // Compute defaultMonth once for clarity\n const defaultMonth = selectedDate ?? minDate\n\n // Scroll to selected time items when popover opens\n React.useEffect(() => {\n if (!open || !showTimePicker) return\n\n const timeoutId = setTimeout(() => {\n const selectedHour = hourListRef.current?.querySelector('[data-selected=\"true\"]')\n selectedHour?.scrollIntoView({ block: \"center\", behavior: \"instant\" })\n\n const selectedMinute = minuteListRef.current?.querySelector('[data-selected=\"true\"]')\n selectedMinute?.scrollIntoView({ block: \"center\", behavior: \"instant\" })\n }, 0)\n\n return () => { clearTimeout(timeoutId) }\n }, [open, showTimePicker, currentHours, currentMinutes])\n\n const applyTimeToDate = (date: Date | undefined, hours: number, minutes: number): Date | undefined => {\n if (!date) return undefined\n return setMinutes(setHours(date, hours), minutes)\n }\n\n const handleSelect = (date: Date | undefined) => {\n let finalDate = date\n if (showTimePicker && date) {\n // Apply current time to the selected date\n finalDate = applyTimeToDate(date, currentHours, currentMinutes)\n }\n\n if (value === undefined) {\n setInternalDate(finalDate)\n }\n onChange?.(finalDate)\n\n // Only close if not showing time picker, or close after date selection\n if (!showTimePicker) {\n setOpen(false)\n }\n }\n\n const handleTimeChange = (hours: number, minutes: number) => {\n if (value === undefined) {\n setInternalHours(hours)\n setInternalMinutes(minutes)\n }\n\n if (selectedDate) {\n const newDate = applyTimeToDate(selectedDate, hours, minutes)\n if (value === undefined) {\n setInternalDate(newDate)\n }\n onChange?.(newDate)\n }\n }\n\n const handleHourSelect = (hour: number) => {\n let newHours = hour\n if (timeUse12Hour) {\n newHours = to24Hour(hour, currentPeriod)\n }\n if (value === undefined) {\n setInternalHours(newHours)\n }\n handleTimeChange(newHours, currentMinutes)\n }\n\n const handleMinuteSelect = (minute: number) => {\n if (value === undefined) {\n setInternalMinutes(minute)\n }\n handleTimeChange(currentHours, minute)\n }\n\n const handlePeriodSelect = (period: \"AM\" | \"PM\") => {\n if (value === undefined) {\n setInternalPeriod(period)\n }\n const hour12 = timeUse12Hour\n ? currentHours % 12 || 12\n : to12Hour(currentHours).hour12\n const newHours = to24Hour(hour12, period)\n if (value === undefined) {\n setInternalHours(newHours)\n }\n handleTimeChange(newHours, currentMinutes)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n // Don't open if readOnly\n if (readOnly && isOpen) return\n\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) {\n setInternalDate(undefined)\n }\n onChange?.()\n onClear?.()\n }\n\n // Format display value with time if showTimePicker is enabled\n const displayValue = React.useMemo(() => {\n if (!selectedDate) return null\n\n const dateStr = formatDate(selectedDate, format, locale ? { locale } : undefined)\n\n if (showTimePicker) {\n const timeStr = timeUse12Hour\n ? `${String(to12Hour(currentHours).hour12)}:${currentMinutes.toString().padStart(2, \"0\")} ${currentPeriod}`\n : `${currentHours.toString().padStart(2, \"0\")}:${currentMinutes.toString().padStart(2, \"0\")}`\n return `${dateStr} ${timeStr}`\n }\n\n return dateStr\n }, [selectedDate, format, locale, showTimePicker, timeUse12Hour, currentHours, currentMinutes, currentPeriod])\n\n // Memoize time options\n const hourOptions = React.useMemo(() => getHourOptions(timeUse12Hour), [timeUse12Hour])\n const minuteOptions = React.useMemo(() => getMinuteOptions(timeMinuteStep), [timeMinuteStep])\n\n // Calculate display hour for matching in 12h mode\n const displayHour = timeUse12Hour\n ? to12Hour(currentHours).hour12\n : currentHours\n\n // Signal for the filled field state (date selected). The `filled` style\n // variant is independent — this is the data hook consumers/tests rely on.\n const hasValue = Boolean(selectedDate)\n\n const showClearButton = clearable && hasValue && !disabled && !readOnly\n\n // Combined date disabled check\n const isDateDisabled = React.useCallback(\n (date: Date): boolean => {\n const normalizedDate = startOfDay(date)\n if (minDate && isBefore(normalizedDate, startOfDay(minDate))) return true\n if (maxDate && isAfter(normalizedDate, startOfDay(maxDate))) return true\n if (disabledDates?.(date)) return true\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Check if today is disabled\n const isTodayDisabled = React.useMemo(() => {\n return isDateDisabled(new Date())\n }, [isDateDisabled])\n\n // Handle selecting today\n const handleSelectToday = () => {\n const today = startOfDay(new Date())\n if (!isDateDisabled(today)) {\n handleSelect(today)\n }\n }\n\n return (\n <div className={cn(\"relative\", className)} data-slot=\"date-picker\" {...props}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n ref={ref}\n className={cn(\n datePickerTriggerVariants({ size, variant }),\n !displayValue && \"text-muted-foreground\"\n )}\n aria-describedby={ariaDescribedby}\n aria-disabled={readOnly || undefined}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-required={required}\n data-has-value={hasValue}\n data-readonly={readOnly || undefined}\n data-size={size}\n data-slot=\"date-picker-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={variant}\n disabled={disabled}\n id={id}\n type=\"button\"\n >\n <span className=\"flex-1 truncate\">\n {displayValue ?? placeholder}\n </span>\n <CalendarIcon\n aria-hidden=\"true\"\n className={cn(\"size-4 shrink-0 opacity-50\", showClearButton && \"invisible\")}\n />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={align}\n aria-label={dialogLabel}\n className=\"w-auto p-0\"\n data-slot=\"date-picker-calendar\"\n >\n <Calendar\n autoFocus\n footer={\n showToday ? (\n <div className=\"border-t border-border p-2\" data-slot=\"date-picker-footer\">\n <Button\n className=\"w-full\"\n disabled={isTodayDisabled}\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleSelectToday}\n >\n {todayLabel}\n </Button>\n </div>\n ) : undefined\n }\n defaultMonth={defaultMonth}\n disabled={isDateDisabled}\n locale={locale}\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleSelect}\n {...calendarProps}\n />\n\n {/* Time Picker Section */}\n {showTimePicker && (\n <div\n className=\"border-t border-border\"\n data-slot=\"date-picker-time\"\n >\n <div className=\"px-3 py-2 text-xs font-medium text-muted-foreground\">\n {timeLabel}\n </div>\n <div\n aria-label=\"Time selection\"\n className=\"flex divide-x border-t border-border\"\n role=\"listbox\"\n >\n {/* Hours Column */}\n <div className=\"flex flex-col\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground text-center border-b\">\n {timeUse12Hour ? \"Hour\" : \"Hours\"}\n </div>\n <ScrollArea className=\"h-36\">\n <div\n ref={hourListRef}\n aria-label=\"Hours\"\n className=\"flex flex-col items-stretch p-1\"\n role=\"group\"\n >\n {hourOptions.map((hour) => {\n const isSelected = displayHour === hour\n return (\n <button\n key={hour}\n className={cn(\n \"flex h-8 w-12 items-center justify-center rounded-sm text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-primary text-primary-foreground\"\n )}\n aria-selected={isSelected}\n data-selected={isSelected}\n role=\"option\"\n type=\"button\"\n onClick={() => { handleHourSelect(hour); }}\n >\n {timeUse12Hour ? hour : hour.toString().padStart(2, \"0\")}\n </button>\n )\n })}\n </div>\n </ScrollArea>\n </div>\n\n {/* Minutes Column */}\n <div className=\"flex flex-col\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground text-center border-b\">\n Min\n </div>\n <ScrollArea className=\"h-36\">\n <div\n ref={minuteListRef}\n aria-label=\"Minutes\"\n className=\"flex flex-col items-stretch p-1\"\n role=\"group\"\n >\n {minuteOptions.map((minute) => {\n const isSelected = currentMinutes === minute\n return (\n <button\n key={minute}\n className={cn(\n \"flex h-8 w-12 items-center justify-center rounded-sm text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-primary text-primary-foreground\"\n )}\n aria-selected={isSelected}\n data-selected={isSelected}\n role=\"option\"\n type=\"button\"\n onClick={() => { handleMinuteSelect(minute); }}\n >\n {minute.toString().padStart(2, \"0\")}\n </button>\n )\n })}\n </div>\n </ScrollArea>\n </div>\n\n {/* AM/PM Column (12-hour mode only) */}\n {timeUse12Hour && (\n <div className=\"flex flex-col\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground text-center border-b\">\n &nbsp;\n </div>\n <div\n aria-label=\"Period\"\n className=\"flex flex-col items-stretch p-1\"\n role=\"group\"\n >\n {([\"AM\", \"PM\"] as const).map((period) => {\n const isSelected = currentPeriod === period\n return (\n <button\n key={period}\n className={cn(\n \"flex h-8 w-12 items-center justify-center rounded-sm text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-primary text-primary-foreground\"\n )}\n aria-selected={isSelected}\n data-selected={isSelected}\n role=\"option\"\n type=\"button\"\n onClick={() => { handlePeriodSelect(period); }}\n >\n {period}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n {showClearButton && (\n <button\n aria-label=\"Clear date\"\n className={cn(datePickerClearButtonVariants({ size, variant }))}\n data-slot=\"date-picker-clear\"\n type=\"button\"\n onClick={handleClear}\n >\n <XIcon className=\"size-4\" />\n </button>\n )}\n {name && (\n <input\n name={name}\n type=\"hidden\"\n value={selectedDate?.toISOString() ?? \"\"}\n />\n )}\n </div>\n )\n}\n\nexport { DatePicker }\n"]}
1
+ {"version":3,"sources":["../src/components/forms/DatePicker/DatePicker.variants.ts","../src/components/forms/DatePicker/DatePicker.tsx"],"names":["format","formatDate"],"mappings":"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","file":"chunk-I55QJ4CU.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * DatePicker trigger variant styles using CVA\n */\nexport const datePickerTriggerVariants = cva(\n // Base styles\n [\n \"inline-flex w-full items-center justify-between gap-2 rounded-[var(--date-picker-trigger-radius)] border bg-transparent font-normal transition-[color,box-shadow] outline-none\",\n \"text-left\",\n \"placeholder:text-muted-foreground\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-[color:var(--date-picker-trigger-disabled-bg)] disabled:text-[color:var(--date-picker-trigger-disabled-fg)] disabled:border-[color:var(--date-picker-trigger-disabled-border)]\",\n \"focus-visible:border-[color:var(--date-picker-trigger-border-focus)] focus-visible:ring-[color:var(--date-picker-trigger-ring-primary)]/50 focus-visible:ring-[length:var(--date-picker-trigger-ring-width)]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"data-[state=open]:border-ring data-[state=open]:ring-ring/50 data-[state=open]:ring-[3px]\",\n \"min-w-[var(--date-picker-trigger-min-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--date-picker-trigger-height-sm)] px-[var(--date-picker-trigger-padding-x-sm)] py-[var(--date-picker-trigger-padding-y-sm)] text-[length:var(--date-picker-trigger-text-sm)]\",\n md: \"h-[var(--date-picker-trigger-height-md)] px-[var(--date-picker-trigger-padding-x-md)] py-[var(--date-picker-trigger-padding-y-md)] text-[length:var(--date-picker-trigger-text-md)]\",\n lg: \"h-[var(--date-picker-trigger-height-lg)] px-[var(--date-picker-trigger-padding-x-lg)] py-[var(--date-picker-trigger-padding-y-lg)] text-[length:var(--date-picker-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs dark:bg-input/30\",\n filled: \"border-transparent bg-muted\",\n flushed: \"rounded-none border-x-0 border-t-0 border-b-input px-0\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/**\n * DatePicker clear button styles using CVA.\n *\n * The clear control is a sibling of the trigger (never nested inside the\n * trigger button — button-in-button is invalid). It is absolutely positioned\n * so it overlays the trigger's trailing-icon slot, sitting at the same inset\n * as the calendar icon for each size/variant.\n */\nexport const datePickerClearButtonVariants = cva(\n [\n \"absolute top-1/2 inline-flex size-4 -translate-y-1/2 items-center justify-center rounded-sm outline-none\",\n \"text-muted-foreground opacity-70 transition-opacity\",\n \"hover:opacity-100 focus-visible:opacity-100\",\n \"focus-visible:ring-[color:var(--date-picker-trigger-ring-primary)]/50 focus-visible:ring-[length:var(--date-picker-trigger-ring-width)]\",\n ],\n {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n variant: {\n default: \"\",\n filled: \"\",\n flushed: \"\",\n },\n },\n compoundVariants: [\n // Non-flushed variants inset the trailing slot by the trigger's px token\n { variant: [\"default\", \"filled\"], size: \"sm\", className: \"right-[var(--date-picker-trigger-padding-x-sm)]\" },\n { variant: [\"default\", \"filled\"], size: \"md\", className: \"right-[var(--date-picker-trigger-padding-x-md)]\" },\n { variant: [\"default\", \"filled\"], size: \"lg\", className: \"right-[var(--date-picker-trigger-padding-x-lg)]\" },\n // Flushed removes horizontal padding, so the slot sits at the edge\n { variant: \"flushed\", className: \"right-0\" },\n ],\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\nexport type DatePickerTriggerVariantProps = VariantProps<typeof datePickerTriggerVariants>\n","import type { DatePickerProps } from \"./DatePicker.types\"\n\nimport { format as formatDate, isAfter, isBefore, setHours, setMinutes, startOfDay } from \"date-fns\"\nimport { CalendarIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Calendar } from \"../../advanced/Calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../feedback/Popover\"\nimport { ScrollArea } from \"../../layout/ScrollArea\"\nimport { Button } from \"../../primitives/Button\"\nimport { datePickerClearButtonVariants, datePickerTriggerVariants } from \"./DatePicker.variants\"\n\n/**\n * Convert 24h hours to 12h format with period\n */\nfunction to12Hour(hours: number): { hour12: number; period: \"AM\" | \"PM\" } {\n const period = hours >= 12 ? \"PM\" : \"AM\"\n let hour12 = hours % 12\n if (hour12 === 0) hour12 = 12\n return { hour12, period }\n}\n\n/**\n * Convert 12h format to 24h hours\n */\nfunction to24Hour(hour12: number, period: \"AM\" | \"PM\"): number {\n if (period === \"AM\") {\n return hour12 === 12 ? 0 : hour12\n }\n return hour12 === 12 ? 12 : hour12 + 12\n}\n\n/**\n * Generate array of hour options\n */\nfunction getHourOptions(use12Hour: boolean): number[] {\n if (use12Hour) {\n return [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n }\n return Array.from({ length: 24 }, (_, i) => i)\n}\n\n/**\n * Generate array of minute options based on step\n */\nfunction getMinuteOptions(step: number): number[] {\n const options: number[] = []\n for (let i = 0; i < 60; i += step) {\n options.push(i)\n }\n return options\n}\n\nfunction DatePicker({\n ref,\n className,\n align = \"start\",\n dialogLabel = \"Choose date\",\n value,\n defaultValue,\n placeholder = \"Select date\",\n disabled = false,\n disabledDates,\n readOnly = false,\n showTimePicker = false,\n showToday = false,\n timeLabel = \"Time\",\n timeMinuteStep = 1,\n timeUse12Hour = false,\n todayLabel = \"Today\",\n minDate,\n maxDate,\n format = \"PPP\",\n locale,\n onChange,\n onOpenChange,\n onClear,\n size = \"md\",\n variant = \"default\",\n required = false,\n invalid = false,\n clearable = false,\n calendarProps,\n id,\n name,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ...props\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false)\n const [internalDate, setInternalDate] = React.useState<Date | undefined>(defaultValue)\n\n // Time state for when showTimePicker is enabled\n const [internalHours, setInternalHours] = React.useState<number>(\n defaultValue ? defaultValue.getHours() : 0\n )\n const [internalMinutes, setInternalMinutes] = React.useState<number>(\n defaultValue ? defaultValue.getMinutes() : 0\n )\n const [internalPeriod, setInternalPeriod] = React.useState<\"AM\" | \"PM\">(() =>\n defaultValue ? to12Hour(defaultValue.getHours()).period : \"AM\"\n )\n\n // Refs for auto-scrolling time columns\n const hourListRef = React.useRef<HTMLDivElement>(null)\n const minuteListRef = React.useRef<HTMLDivElement>(null)\n\n // Use controlled value if provided, otherwise use internal state\n const selectedDate = value ?? internalDate\n\n // Get time from selected date or internal state\n const currentHours = selectedDate ? selectedDate.getHours() : internalHours\n const currentMinutes = selectedDate ? selectedDate.getMinutes() : internalMinutes\n const currentPeriod = selectedDate\n ? to12Hour(selectedDate.getHours()).period\n : internalPeriod\n\n // Compute defaultMonth once for clarity\n const defaultMonth = selectedDate ?? minDate\n\n // Scroll to selected time items when popover opens\n React.useEffect(() => {\n if (!open || !showTimePicker) return\n\n const timeoutId = setTimeout(() => {\n const selectedHour = hourListRef.current?.querySelector('[data-selected=\"true\"]')\n selectedHour?.scrollIntoView({ block: \"center\", behavior: \"instant\" })\n\n const selectedMinute = minuteListRef.current?.querySelector('[data-selected=\"true\"]')\n selectedMinute?.scrollIntoView({ block: \"center\", behavior: \"instant\" })\n }, 0)\n\n return () => { clearTimeout(timeoutId) }\n }, [open, showTimePicker, currentHours, currentMinutes])\n\n const applyTimeToDate = (date: Date | undefined, hours: number, minutes: number): Date | undefined => {\n if (!date) return undefined\n return setMinutes(setHours(date, hours), minutes)\n }\n\n const handleSelect = (date: Date | undefined) => {\n let finalDate = date\n if (showTimePicker && date) {\n // Apply current time to the selected date\n finalDate = applyTimeToDate(date, currentHours, currentMinutes)\n }\n\n if (value === undefined) {\n setInternalDate(finalDate)\n }\n onChange?.(finalDate)\n\n // Only close if not showing time picker, or close after date selection\n if (!showTimePicker) {\n setOpen(false)\n }\n }\n\n const handleTimeChange = (hours: number, minutes: number) => {\n if (value === undefined) {\n setInternalHours(hours)\n setInternalMinutes(minutes)\n }\n\n if (selectedDate) {\n const newDate = applyTimeToDate(selectedDate, hours, minutes)\n if (value === undefined) {\n setInternalDate(newDate)\n }\n onChange?.(newDate)\n }\n }\n\n const handleHourSelect = (hour: number) => {\n let newHours = hour\n if (timeUse12Hour) {\n newHours = to24Hour(hour, currentPeriod)\n }\n if (value === undefined) {\n setInternalHours(newHours)\n }\n handleTimeChange(newHours, currentMinutes)\n }\n\n const handleMinuteSelect = (minute: number) => {\n if (value === undefined) {\n setInternalMinutes(minute)\n }\n handleTimeChange(currentHours, minute)\n }\n\n const handlePeriodSelect = (period: \"AM\" | \"PM\") => {\n if (value === undefined) {\n setInternalPeriod(period)\n }\n const hour12 = timeUse12Hour\n ? currentHours % 12 || 12\n : to12Hour(currentHours).hour12\n const newHours = to24Hour(hour12, period)\n if (value === undefined) {\n setInternalHours(newHours)\n }\n handleTimeChange(newHours, currentMinutes)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n // Don't open if readOnly\n if (readOnly && isOpen) return\n\n setOpen(isOpen)\n onOpenChange?.(isOpen)\n }\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) {\n setInternalDate(undefined)\n }\n onChange?.()\n onClear?.()\n }\n\n // Format display value with time if showTimePicker is enabled\n const displayValue = React.useMemo(() => {\n if (!selectedDate) return null\n\n const dateStr = formatDate(selectedDate, format, locale ? { locale } : undefined)\n\n if (showTimePicker) {\n const timeStr = timeUse12Hour\n ? `${String(to12Hour(currentHours).hour12)}:${currentMinutes.toString().padStart(2, \"0\")} ${currentPeriod}`\n : `${currentHours.toString().padStart(2, \"0\")}:${currentMinutes.toString().padStart(2, \"0\")}`\n return `${dateStr} ${timeStr}`\n }\n\n return dateStr\n }, [selectedDate, format, locale, showTimePicker, timeUse12Hour, currentHours, currentMinutes, currentPeriod])\n\n // Memoize time options\n const hourOptions = React.useMemo(() => getHourOptions(timeUse12Hour), [timeUse12Hour])\n const minuteOptions = React.useMemo(() => getMinuteOptions(timeMinuteStep), [timeMinuteStep])\n\n // Calculate display hour for matching in 12h mode\n const displayHour = timeUse12Hour\n ? to12Hour(currentHours).hour12\n : currentHours\n\n // Signal for the filled field state (date selected). The `filled` style\n // variant is independent — this is the data hook consumers/tests rely on.\n const hasValue = Boolean(selectedDate)\n\n const showClearButton = clearable && hasValue && !disabled && !readOnly\n\n // Combined date disabled check\n const isDateDisabled = React.useCallback(\n (date: Date): boolean => {\n const normalizedDate = startOfDay(date)\n if (minDate && isBefore(normalizedDate, startOfDay(minDate))) return true\n if (maxDate && isAfter(normalizedDate, startOfDay(maxDate))) return true\n if (disabledDates?.(date)) return true\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Check if today is disabled\n const isTodayDisabled = React.useMemo(() => {\n return isDateDisabled(new Date())\n }, [isDateDisabled])\n\n // Handle selecting today\n const handleSelectToday = () => {\n const today = startOfDay(new Date())\n if (!isDateDisabled(today)) {\n handleSelect(today)\n }\n }\n\n return (\n <div className={cn(\"relative\", className)} data-slot=\"date-picker\" {...props}>\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n ref={ref}\n className={cn(\n datePickerTriggerVariants({ size, variant }),\n !displayValue && \"text-muted-foreground\"\n )}\n aria-describedby={ariaDescribedby}\n aria-disabled={readOnly || undefined}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-required={required}\n data-has-value={hasValue}\n data-readonly={readOnly || undefined}\n data-size={size}\n data-slot=\"date-picker-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={variant}\n disabled={disabled}\n id={id}\n type=\"button\"\n >\n <span className=\"flex-1 truncate\">\n {displayValue ?? placeholder}\n </span>\n <CalendarIcon\n aria-hidden=\"true\"\n className={cn(\"size-4 shrink-0 opacity-50\", showClearButton && \"invisible\")}\n />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={align}\n aria-label={dialogLabel}\n className=\"w-auto p-0\"\n data-slot=\"date-picker-calendar\"\n >\n <Calendar\n autoFocus\n footer={\n showToday ? (\n <div className=\"border-t border-border p-2\" data-slot=\"date-picker-footer\">\n <Button\n className=\"w-full\"\n disabled={isTodayDisabled}\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleSelectToday}\n >\n {todayLabel}\n </Button>\n </div>\n ) : undefined\n }\n defaultMonth={defaultMonth}\n disabled={isDateDisabled}\n locale={locale}\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleSelect}\n {...calendarProps}\n />\n\n {/* Time Picker Section */}\n {showTimePicker && (\n <div\n className=\"border-t border-border\"\n data-slot=\"date-picker-time\"\n >\n <div className=\"px-3 py-2 text-xs font-medium text-muted-foreground\">\n {timeLabel}\n </div>\n <div\n aria-label=\"Time selection\"\n className=\"flex divide-x border-t border-border\"\n role=\"listbox\"\n >\n {/* Hours Column */}\n <div className=\"flex flex-col\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground text-center border-b\">\n {timeUse12Hour ? \"Hour\" : \"Hours\"}\n </div>\n <ScrollArea className=\"h-36\">\n <div\n ref={hourListRef}\n aria-label=\"Hours\"\n className=\"flex flex-col items-stretch p-1\"\n role=\"group\"\n >\n {hourOptions.map((hour) => {\n const isSelected = displayHour === hour\n return (\n <button\n key={hour}\n className={cn(\n \"flex h-8 w-12 items-center justify-center rounded-sm text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-primary text-primary-foreground\"\n )}\n aria-selected={isSelected}\n data-selected={isSelected}\n role=\"option\"\n type=\"button\"\n onClick={() => { handleHourSelect(hour); }}\n >\n {timeUse12Hour ? hour : hour.toString().padStart(2, \"0\")}\n </button>\n )\n })}\n </div>\n </ScrollArea>\n </div>\n\n {/* Minutes Column */}\n <div className=\"flex flex-col\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground text-center border-b\">\n Min\n </div>\n <ScrollArea className=\"h-36\">\n <div\n ref={minuteListRef}\n aria-label=\"Minutes\"\n className=\"flex flex-col items-stretch p-1\"\n role=\"group\"\n >\n {minuteOptions.map((minute) => {\n const isSelected = currentMinutes === minute\n return (\n <button\n key={minute}\n className={cn(\n \"flex h-8 w-12 items-center justify-center rounded-sm text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-primary text-primary-foreground\"\n )}\n aria-selected={isSelected}\n data-selected={isSelected}\n role=\"option\"\n type=\"button\"\n onClick={() => { handleMinuteSelect(minute); }}\n >\n {minute.toString().padStart(2, \"0\")}\n </button>\n )\n })}\n </div>\n </ScrollArea>\n </div>\n\n {/* AM/PM Column (12-hour mode only) */}\n {timeUse12Hour && (\n <div className=\"flex flex-col\">\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground text-center border-b\">\n &nbsp;\n </div>\n <div\n aria-label=\"Period\"\n className=\"flex flex-col items-stretch p-1\"\n role=\"group\"\n >\n {([\"AM\", \"PM\"] as const).map((period) => {\n const isSelected = currentPeriod === period\n return (\n <button\n key={period}\n className={cn(\n \"flex h-8 w-12 items-center justify-center rounded-sm text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-primary text-primary-foreground\"\n )}\n aria-selected={isSelected}\n data-selected={isSelected}\n role=\"option\"\n type=\"button\"\n onClick={() => { handlePeriodSelect(period); }}\n >\n {period}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n {showClearButton && (\n <button\n aria-label=\"Clear date\"\n className={cn(datePickerClearButtonVariants({ size, variant }))}\n data-slot=\"date-picker-clear\"\n type=\"button\"\n onClick={handleClear}\n >\n <XIcon className=\"size-4\" />\n </button>\n )}\n {name && (\n <input\n name={name}\n type=\"hidden\"\n value={selectedDate?.toISOString() ?? \"\"}\n />\n )}\n </div>\n )\n}\n\nexport { DatePicker }\n"]}
@@ -1,7 +1,8 @@
1
+ import { Checkbox } from './chunk-XETKCF73.js';
1
2
  import { cn } from './chunk-HRNDJU7D.js';
2
3
  import * as PopoverPrimitive from '@radix-ui/react-popover';
3
4
  import { Command } from 'cmdk';
4
- import { XIcon, ChevronDownIcon, SearchIcon, CheckIcon } from 'lucide-react';
5
+ import { XIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';
5
6
  import * as React from 'react';
6
7
  import { cva } from 'class-variance-authority';
7
8
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -9,7 +10,7 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
9
10
  var multiSelectTriggerVariants = cva(
10
11
  // Base styles
11
12
  [
12
- "flex w-[var(--multiselect-trigger-width)] items-center justify-between gap-2 rounded-[var(--multiselect-trigger-radius)] border bg-transparent",
13
+ "flex w-full min-w-[var(--multiselect-trigger-width)] items-center justify-between gap-2 rounded-[var(--multiselect-trigger-radius)] border bg-transparent",
13
14
  "text-sm whitespace-normal shadow-xs transition-[color,box-shadow] outline-none",
14
15
  "data-[placeholder]:text-muted-foreground",
15
16
  "[&_svg:not([class*='text-'])]:text-muted-foreground",
@@ -42,7 +43,7 @@ var multiSelectContentVariants = cva(
42
43
  // Base styles
43
44
  [
44
45
  "bg-[color:var(--multiselect-content-bg)] text-[color:var(--multiselect-content-fg)]",
45
- "z-50 w-[var(--multiselect-content-width)] overflow-hidden rounded-[var(--multiselect-content-radius)] border shadow-[var(--multiselect-content-shadow)] p-0",
46
+ "z-50 w-[var(--radix-popper-anchor-width)] min-w-[var(--multiselect-content-width)] overflow-hidden rounded-[var(--multiselect-content-radius)] border shadow-[var(--multiselect-content-shadow)] p-0",
46
47
  // Animation classes
47
48
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
48
49
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
@@ -305,13 +306,14 @@ function MultiSelect({
305
306
  },
306
307
  children: [
307
308
  /* @__PURE__ */ jsx(
308
- "div",
309
+ Checkbox,
309
310
  {
310
- className: cn(
311
- "flex size-4 shrink-0 items-center justify-center rounded-sm border border-primary",
312
- isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
313
- ),
314
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3" })
311
+ "aria-hidden": true,
312
+ checked: isSelected,
313
+ className: "pointer-events-none",
314
+ disabled: isDisabled,
315
+ size: "sm",
316
+ tabIndex: -1
315
317
  }
316
318
  ),
317
319
  option.label
@@ -331,5 +333,5 @@ function MultiSelect({
331
333
  }
332
334
 
333
335
  export { MultiSelect };
334
- //# sourceMappingURL=chunk-HKXQLWGR.js.map
335
- //# sourceMappingURL=chunk-HKXQLWGR.js.map
336
+ //# sourceMappingURL=chunk-IOWHM7ZY.js.map
337
+ //# sourceMappingURL=chunk-IOWHM7ZY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/MultiSelect/MultiSelect.variants.ts","../src/components/forms/MultiSelect/MultiSelect.tsx"],"names":["CommandPrimitive"],"mappings":"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","file":"chunk-IOWHM7ZY.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * MultiSelectTrigger variant styles using CVA\n */\nexport const multiSelectTriggerVariants = cva(\n // Base styles\n [\n \"flex w-full min-w-[var(--multiselect-trigger-width)] items-center justify-between gap-2 rounded-[var(--multiselect-trigger-radius)] border bg-transparent\",\n \"text-sm whitespace-normal shadow-xs transition-[color,box-shadow] outline-none\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"dark:bg-input/30 dark:hover:bg-input/50\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {\n size: {\n sm: \"min-h-[var(--multiselect-trigger-min-height-sm)] px-[var(--multiselect-trigger-padding-x-sm)] py-[var(--multiselect-trigger-padding-y-sm)] text-[length:var(--multiselect-trigger-text-sm)]\",\n md: \"min-h-[var(--multiselect-trigger-min-height-md)] px-[var(--multiselect-trigger-padding-x-md)] py-[var(--multiselect-trigger-padding-y-md)] text-[length:var(--multiselect-trigger-text-md)]\",\n lg: \"min-h-[var(--multiselect-trigger-min-height-lg)] px-[var(--multiselect-trigger-padding-x-lg)] py-[var(--multiselect-trigger-padding-y-lg)] text-[length:var(--multiselect-trigger-text-lg)]\",\n },\n variant: {\n default: \"border-input shadow-xs\",\n filled: \"border-transparent bg-muted\",\n flushed: \"rounded-none border-x-0 border-t-0 border-b-input px-0 shadow-none\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n)\n\n/**\n * MultiSelectContent variant styles using CVA\n */\nexport const multiSelectContentVariants = cva(\n // Base styles\n [\n \"bg-[color:var(--multiselect-content-bg)] text-[color:var(--multiselect-content-fg)]\",\n \"z-50 w-[var(--radix-popper-anchor-width)] min-w-[var(--multiselect-content-width)] overflow-hidden rounded-[var(--multiselect-content-radius)] border shadow-[var(--multiselect-content-shadow)] p-0\",\n // Animation classes\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * MultiSelectInput variant styles using CVA\n */\nexport const multiSelectInputVariants = cva(\n [\n \"flex h-[var(--multiselect-input-height)] w-full rounded-md bg-transparent py-[var(--multiselect-input-padding-y)] text-[length:var(--multiselect-input-text)] outline-none\",\n \"placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * MultiSelectItem variant styles using CVA\n */\nexport const multiSelectItemVariants = cva(\n [\n \"relative flex cursor-default items-center gap-2 rounded-[var(--multiselect-item-radius)] px-[var(--multiselect-item-padding-x)] py-[var(--multiselect-item-padding-y)] text-[length:var(--multiselect-item-text)]\",\n \"outline-none select-none\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n \"data-[highlighted=true]:bg-accent data-[highlighted=true]:text-accent-foreground\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * MultiSelectEmpty variant styles using CVA\n */\nexport const multiSelectEmptyVariants = cva(\n [\"py-[var(--multiselect-empty-padding-y)] text-center text-[length:var(--multiselect-empty-text)] text-[color:var(--multiselect-empty-fg)]\"],\n {\n variants: {},\n defaultVariants: {},\n }\n)\n\n/**\n * MultiSelectTag variant styles using CVA\n */\nexport const multiSelectTagVariants = cva(\n [\n \"inline-flex items-center gap-1 rounded-[var(--multiselect-tag-radius)] bg-[color:var(--multiselect-tag-bg)] text-[color:var(--multiselect-tag-fg)]\",\n \"font-medium shrink-0\",\n \"[&_svg]:size-3 [&_svg]:shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"text-[length:var(--multiselect-tag-text-sm)] px-[var(--multiselect-tag-padding-x-sm)] py-[var(--multiselect-tag-padding-y-sm)]\",\n md: \"text-[length:var(--multiselect-tag-text-md)] px-[var(--multiselect-tag-padding-x-md)] py-[var(--multiselect-tag-padding-y-md)]\",\n lg: \"text-[length:var(--multiselect-tag-text-lg)] px-[var(--multiselect-tag-padding-x-lg)] py-[var(--multiselect-tag-padding-y-lg)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nexport type MultiSelectTriggerVariantProps = VariantProps<typeof multiSelectTriggerVariants>\nexport type MultiSelectContentVariantProps = VariantProps<typeof multiSelectContentVariants>\nexport type MultiSelectInputVariantProps = VariantProps<typeof multiSelectInputVariants>\nexport type MultiSelectItemVariantProps = VariantProps<typeof multiSelectItemVariants>\nexport type MultiSelectEmptyVariantProps = VariantProps<typeof multiSelectEmptyVariants>\nexport type MultiSelectTagVariantProps = VariantProps<typeof multiSelectTagVariants>\n","import type { MultiSelectProps } from \"./MultiSelect.types\"\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { ChevronDownIcon, SearchIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Checkbox } from \"../Checkbox\"\nimport {\n multiSelectContentVariants,\n multiSelectEmptyVariants,\n multiSelectInputVariants,\n multiSelectItemVariants,\n multiSelectTagVariants,\n multiSelectTriggerVariants,\n} from \"./MultiSelect.variants\"\n\n/**\n * MultiSelect - A multi-selection component with tags display\n *\n * Uses Radix Popover for the dropdown container and cmdk (Command) for\n * search/filter functionality with full keyboard accessibility.\n * Selected items are displayed as removable tags.\n *\n * @example\n * ```tsx\n * <MultiSelect\n * options={[\n * { value: \"apple\", label: \"Apple\" },\n * { value: \"banana\", label: \"Banana\" },\n * ]}\n * placeholder=\"Select fruits...\"\n * onChange={(values) => console.log(values)}\n * />\n * ```\n */\nfunction MultiSelect({\n options,\n value: controlledValue,\n defaultValue = [],\n placeholder = \"Select options...\",\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No results found.\",\n disabled = false,\n error = false,\n errorMessage: _errorMessage,\n icon,\n maxSelected,\n name,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n onChange,\n onSearch,\n required = false,\n size = \"md\",\n variant = \"default\",\n className,\n ...props\n}: MultiSelectProps) {\n // Handle controlled vs uncontrolled value\n const [internalValue, setInternalValue] = React.useState<string[]>(defaultValue)\n const values = controlledValue ?? internalValue\n\n // Handle controlled vs uncontrolled open state\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n const open = controlledOpen ?? internalOpen\n\n // Search query state\n const [searchQuery, setSearchQuery] = React.useState(\"\")\n\n // Get labels for selected values\n const selectedLabels = React.useMemo(() => {\n return values\n .map((val) => {\n const option = options.find((opt) => opt.value === val)\n return option ? { value: val, label: option.label } : null\n })\n .filter((item): item is { label: string; value: string; } => item !== null)\n }, [values, options])\n\n // Check if max selected limit is reached\n const isMaxReached = maxSelected !== undefined && values.length >= maxSelected\n\n // Handle open state changes\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n // Prevent opening when disabled\n if (disabled && newOpen) {\n return\n }\n\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n\n // Clear search when closing\n if (!newOpen) {\n setSearchQuery(\"\")\n }\n },\n [controlledOpen, onOpenChange, disabled]\n )\n\n // Handle value toggle\n const handleToggle = React.useCallback(\n (selectedValue: string) => {\n const newValues = values.includes(selectedValue)\n ? values.filter((v) => v !== selectedValue)\n : isMaxReached\n ? values\n : [...values, selectedValue]\n\n if (controlledValue === undefined) {\n setInternalValue(newValues)\n }\n onChange?.(newValues)\n },\n [values, controlledValue, onChange, isMaxReached]\n )\n\n // Handle tag removal\n const handleRemove = React.useCallback(\n (valueToRemove: string, event?: React.MouseEvent) => {\n event?.stopPropagation()\n const newValues = values.filter((v) => v !== valueToRemove)\n if (controlledValue === undefined) {\n setInternalValue(newValues)\n }\n onChange?.(newValues)\n },\n [values, controlledValue, onChange]\n )\n\n // Handle search input changes\n const handleSearchChange = React.useCallback(\n (query: string) => {\n setSearchQuery(query)\n onSearch?.(query)\n },\n [onSearch]\n )\n\n return (\n <>\n {/* Hidden inputs for form submission */}\n {name &&\n values.map((val) => (\n <input key={val} name={name} type=\"hidden\" value={val} />\n ))}\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger asChild disabled={disabled}>\n <div\n className={cn(\n multiSelectTriggerVariants({ size, variant }),\n \"cursor-pointer flex-wrap\",\n disabled && \"pointer-events-none\",\n className\n )}\n aria-disabled={disabled || undefined}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n data-disabled={disabled || undefined}\n data-error={error || undefined}\n data-size={size}\n data-slot=\"multi-select\"\n data-variant={variant}\n role=\"combobox\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n if (!disabled) {\n handleOpenChange(!open)\n }\n }\n }}\n {...props}\n >\n <div\n className=\"flex flex-1 flex-wrap items-center gap-1\"\n data-slot=\"multi-select-trigger\"\n >\n {icon && (\n <span className=\"shrink-0\" data-slot=\"multi-select-icon\">\n {icon}\n </span>\n )}\n {selectedLabels.length === 0 ? (\n <span data-placeholder className=\"text-muted-foreground\">\n {placeholder}\n </span>\n ) : (\n selectedLabels.map((item) => (\n <span\n key={item.value}\n className={cn(multiSelectTagVariants({ size }))}\n data-slot=\"multi-select-tag\"\n data-value={item.value}\n >\n {item.label}\n <button\n aria-label={`Remove ${item.label}`}\n className=\"ml-0.5 rounded-sm hover:bg-foreground/10 focus:outline-none\"\n tabIndex={-1}\n type=\"button\"\n onClick={(e) => { handleRemove(item.value, e); }}\n >\n <XIcon className=\"size-3\" />\n </button>\n </span>\n ))\n )}\n </div>\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </div>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n className={cn(multiSelectContentVariants())}\n data-slot=\"multi-select-content\"\n sideOffset={4}\n >\n <CommandPrimitive\n className=\"flex h-full w-full flex-col overflow-hidden\"\n shouldFilter={!onSearch}\n >\n <div className=\"flex items-center border-b px-3\">\n <SearchIcon className=\"mr-2 size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n className={cn(multiSelectInputVariants())}\n data-slot=\"multi-select-input\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onValueChange={handleSearchChange}\n />\n </div>\n\n <CommandPrimitive.List className=\"max-h-72 overflow-y-auto overflow-x-hidden p-1\">\n <CommandPrimitive.Empty className={cn(multiSelectEmptyVariants())}>\n {emptyMessage}\n </CommandPrimitive.Empty>\n\n {options.map((option) => {\n const isSelected = values.includes(option.value)\n const isDisabled = option.disabled ?? (!isSelected && isMaxReached)\n\n return (\n <CommandPrimitive.Item\n key={option.value}\n className={cn(multiSelectItemVariants())}\n data-disabled={isDisabled || undefined}\n data-selected={isSelected || undefined}\n data-slot=\"multi-select-item\"\n disabled={isDisabled}\n value={option.label}\n onSelect={() => {\n if (!isDisabled) {\n handleToggle(option.value)\n }\n }}\n >\n <Checkbox\n aria-hidden\n checked={isSelected}\n className=\"pointer-events-none\"\n disabled={isDisabled}\n size=\"sm\"\n tabIndex={-1}\n />\n {option.label}\n </CommandPrimitive.Item>\n )\n })}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </>\n )\n}\n\nexport { MultiSelect }\n"]}
@@ -1,4 +1,4 @@
1
- import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-65YSTUD2.js';
1
+ import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-5SUD32RK.js';
2
2
  import { SkeletonLoader } from './chunk-QHKOBGLW.js';
3
3
  import { Checkbox } from './chunk-XETKCF73.js';
4
4
  import { cn } from './chunk-HRNDJU7D.js';
@@ -222,5 +222,5 @@ function VirtualTable({
222
222
  }
223
223
 
224
224
  export { VirtualTable };
225
- //# sourceMappingURL=chunk-ILAV2AZ4.js.map
226
- //# sourceMappingURL=chunk-ILAV2AZ4.js.map
225
+ //# sourceMappingURL=chunk-IZC5YFGO.js.map
226
+ //# sourceMappingURL=chunk-IZC5YFGO.js.map