@mdigital_ui/ui 0.2.6 → 0.2.7

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 (257) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1023 -341
  3. package/dist/accordion/index.js +3 -3
  4. package/dist/avatar/index.js +4 -0
  5. package/dist/avatar/index.js.map +1 -0
  6. package/dist/badge/index.js +3 -3
  7. package/dist/breadcrumbs/index.js +5 -5
  8. package/dist/button/index.js +4 -4
  9. package/dist/button-group/index.js +2 -2
  10. package/dist/card/index.js +2 -2
  11. package/dist/carousel/index.js +2 -2
  12. package/dist/cascader/index.js +2 -2
  13. package/dist/chart/index.js +2 -2
  14. package/dist/checkbox/index.js +3 -3
  15. package/dist/checkbox-group/index.js +2 -2
  16. package/dist/{chunk-23BPDLT4.js → chunk-27QEPVKU.js} +42 -22
  17. package/dist/chunk-27QEPVKU.js.map +1 -0
  18. package/dist/{chunk-IRNJZ754.js → chunk-2J57G7XG.js} +76 -18
  19. package/dist/chunk-2J57G7XG.js.map +1 -0
  20. package/dist/{chunk-SOIF4SHB.js → chunk-2NYVRAG4.js} +24 -15
  21. package/dist/chunk-2NYVRAG4.js.map +1 -0
  22. package/dist/{chunk-3WVJE5MF.js → chunk-2OUGJBXK.js} +19 -12
  23. package/dist/chunk-2OUGJBXK.js.map +1 -0
  24. package/dist/{chunk-YII4K64U.js → chunk-2WZVD7P3.js} +36 -10
  25. package/dist/chunk-2WZVD7P3.js.map +1 -0
  26. package/dist/{chunk-7ODPSHIQ.js → chunk-3UCZ4GMN.js} +10 -4
  27. package/dist/chunk-3UCZ4GMN.js.map +1 -0
  28. package/dist/{chunk-7YPX6NJK.js → chunk-4LSKRZOT.js} +12 -7
  29. package/dist/chunk-4LSKRZOT.js.map +1 -0
  30. package/dist/{chunk-R2FZO7AM.js → chunk-4SQOFZ3N.js} +26 -9
  31. package/dist/chunk-4SQOFZ3N.js.map +1 -0
  32. package/dist/chunk-5PUATOLR.js +127 -0
  33. package/dist/chunk-5PUATOLR.js.map +1 -0
  34. package/dist/{chunk-555KXZRK.js → chunk-6TMOKYR7.js} +6 -4
  35. package/dist/chunk-6TMOKYR7.js.map +1 -0
  36. package/dist/{chunk-6IPISGTP.js → chunk-7UCNBMCV.js} +102 -27
  37. package/dist/chunk-7UCNBMCV.js.map +1 -0
  38. package/dist/{chunk-JFGLDCAK.js → chunk-AQYOVYPS.js} +19 -7
  39. package/dist/chunk-AQYOVYPS.js.map +1 -0
  40. package/dist/{chunk-Y2CXG3PT.js → chunk-C5YO5VZS.js} +8 -8
  41. package/dist/chunk-C5YO5VZS.js.map +1 -0
  42. package/dist/{chunk-7TN4PGYF.js → chunk-CHGJX5F2.js} +49 -33
  43. package/dist/chunk-CHGJX5F2.js.map +1 -0
  44. package/dist/{chunk-22FIGRGO.js → chunk-CK6A2R66.js} +31 -7
  45. package/dist/chunk-CK6A2R66.js.map +1 -0
  46. package/dist/{chunk-INH7KYCK.js → chunk-CMGCJXE5.js} +275 -95
  47. package/dist/chunk-CMGCJXE5.js.map +1 -0
  48. package/dist/{chunk-6MYKJE6A.js → chunk-CSRMVLPR.js} +109 -27
  49. package/dist/chunk-CSRMVLPR.js.map +1 -0
  50. package/dist/{chunk-EFMKUCGX.js → chunk-DH7R6NBG.js} +8 -5
  51. package/dist/chunk-DH7R6NBG.js.map +1 -0
  52. package/dist/{chunk-7BUNJYZO.js → chunk-FEMHXG2P.js} +22 -6
  53. package/dist/chunk-FEMHXG2P.js.map +1 -0
  54. package/dist/chunk-FIGSNRWY.js +382 -0
  55. package/dist/chunk-FIGSNRWY.js.map +1 -0
  56. package/dist/{chunk-JGQOEAWL.js → chunk-FVTMKQUE.js} +5 -3
  57. package/dist/chunk-FVTMKQUE.js.map +1 -0
  58. package/dist/{chunk-QVCGNOBE.js → chunk-GBVIACYQ.js} +78 -31
  59. package/dist/chunk-GBVIACYQ.js.map +1 -0
  60. package/dist/chunk-H47C2ENJ.js +215 -0
  61. package/dist/chunk-H47C2ENJ.js.map +1 -0
  62. package/dist/chunk-HWFI4GJE.js +130 -0
  63. package/dist/chunk-HWFI4GJE.js.map +1 -0
  64. package/dist/chunk-IA42ELUP.js +72 -0
  65. package/dist/chunk-IA42ELUP.js.map +1 -0
  66. package/dist/{chunk-SGMIDNPI.js → chunk-INQI3UUI.js} +73 -19
  67. package/dist/chunk-INQI3UUI.js.map +1 -0
  68. package/dist/{chunk-IHKPZOE5.js → chunk-J525ROGL.js} +6 -4
  69. package/dist/chunk-J525ROGL.js.map +1 -0
  70. package/dist/{chunk-AVPPV5OM.js → chunk-JLS4MBHN.js} +6 -4
  71. package/dist/chunk-JLS4MBHN.js.map +1 -0
  72. package/dist/{chunk-GGREAJO5.js → chunk-KTHWXHDN.js} +10 -5
  73. package/dist/chunk-KTHWXHDN.js.map +1 -0
  74. package/dist/{chunk-35K7N4JT.js → chunk-LMR7TKDJ.js} +17 -6
  75. package/dist/chunk-LMR7TKDJ.js.map +1 -0
  76. package/dist/{chunk-BYWYC7RC.js → chunk-MRFCITKK.js} +19 -10
  77. package/dist/chunk-MRFCITKK.js.map +1 -0
  78. package/dist/{chunk-TG2AECIN.js → chunk-MXDTUN3V.js} +22 -9
  79. package/dist/chunk-MXDTUN3V.js.map +1 -0
  80. package/dist/{chunk-2OGZENFC.js → chunk-NGYLRX6F.js} +2 -16
  81. package/dist/chunk-NGYLRX6F.js.map +1 -0
  82. package/dist/{chunk-TUTOU4X6.js → chunk-NTPWR57C.js} +6 -135
  83. package/dist/chunk-NTPWR57C.js.map +1 -0
  84. package/dist/{chunk-GFQXGLFD.js → chunk-OWXQ45GS.js} +82 -62
  85. package/dist/chunk-OWXQ45GS.js.map +1 -0
  86. package/dist/{chunk-L6EVOPWH.js → chunk-P6A75RAH.js} +6 -4
  87. package/dist/chunk-P6A75RAH.js.map +1 -0
  88. package/dist/{chunk-SYDNDYZJ.js → chunk-PXOHJJBE.js} +22 -9
  89. package/dist/chunk-PXOHJJBE.js.map +1 -0
  90. package/dist/{chunk-HWSLJGT7.js → chunk-Q57THXIU.js} +28 -10
  91. package/dist/chunk-Q57THXIU.js.map +1 -0
  92. package/dist/{chunk-NQB4V5P7.js → chunk-QDHGE7IF.js} +5 -5
  93. package/dist/chunk-QDHGE7IF.js.map +1 -0
  94. package/dist/{chunk-CPPFXCNB.js → chunk-QKSDVYKF.js} +4 -4
  95. package/dist/chunk-QKSDVYKF.js.map +1 -0
  96. package/dist/{chunk-DP6AWUH5.js → chunk-ROA7BYGB.js} +49 -19
  97. package/dist/chunk-ROA7BYGB.js.map +1 -0
  98. package/dist/{chunk-XG3KLPPS.js → chunk-RPIJ2KY7.js} +9 -4
  99. package/dist/chunk-RPIJ2KY7.js.map +1 -0
  100. package/dist/{chunk-C2MZL644.js → chunk-RW4RW4DV.js} +80 -30
  101. package/dist/chunk-RW4RW4DV.js.map +1 -0
  102. package/dist/chunk-RYKVZFGB.js +607 -0
  103. package/dist/chunk-RYKVZFGB.js.map +1 -0
  104. package/dist/chunk-SAVEKACZ.js +552 -0
  105. package/dist/chunk-SAVEKACZ.js.map +1 -0
  106. package/dist/chunk-SDNT2JGC.js +143 -0
  107. package/dist/chunk-SDNT2JGC.js.map +1 -0
  108. package/dist/{chunk-SMVVCZNM.js → chunk-SGRACNBP.js} +12 -7
  109. package/dist/chunk-SGRACNBP.js.map +1 -0
  110. package/dist/{chunk-PQZB43VJ.js → chunk-TTEBZZ3T.js} +28 -11
  111. package/dist/chunk-TTEBZZ3T.js.map +1 -0
  112. package/dist/{chunk-HBEJ4S2Y.js → chunk-US4ZCMNU.js} +19 -13
  113. package/dist/chunk-US4ZCMNU.js.map +1 -0
  114. package/dist/chunk-UUP7YGOS.js +299 -0
  115. package/dist/chunk-UUP7YGOS.js.map +1 -0
  116. package/dist/{chunk-MDY3HCRC.js → chunk-VUBU7Y4F.js} +47 -18
  117. package/dist/chunk-VUBU7Y4F.js.map +1 -0
  118. package/dist/chunk-WUBMNJGC.js +141 -0
  119. package/dist/chunk-WUBMNJGC.js.map +1 -0
  120. package/dist/{chunk-TWZ5LXLL.js → chunk-WVG3QQDN.js} +45 -16
  121. package/dist/chunk-WVG3QQDN.js.map +1 -0
  122. package/dist/{chunk-NZA526GC.js → chunk-WZ2KDHFP.js} +16 -13
  123. package/dist/chunk-WZ2KDHFP.js.map +1 -0
  124. package/dist/{chunk-O2VJ6KP4.js → chunk-X5SCI7KH.js} +190 -142
  125. package/dist/chunk-X5SCI7KH.js.map +1 -0
  126. package/dist/{chunk-DV5J5NLI.js → chunk-XJCWPPMM.js} +8 -5
  127. package/dist/chunk-XJCWPPMM.js.map +1 -0
  128. package/dist/{chunk-ARK3EROZ.js → chunk-YAAV7FQG.js} +20 -12
  129. package/dist/chunk-YAAV7FQG.js.map +1 -0
  130. package/dist/{chunk-MLNIKNLI.js → chunk-YOG5GXIC.js} +57 -11
  131. package/dist/chunk-YOG5GXIC.js.map +1 -0
  132. package/dist/chunk-Z5VJ6MJP.js +234 -0
  133. package/dist/chunk-Z5VJ6MJP.js.map +1 -0
  134. package/dist/{chunk-77YTCM7G.js → chunk-ZC3E3PWH.js} +75 -32
  135. package/dist/chunk-ZC3E3PWH.js.map +1 -0
  136. package/dist/clipboard/index.js +2 -2
  137. package/dist/collapse/index.js +2 -2
  138. package/dist/command/index.js +3 -3
  139. package/dist/context-menu/index.js +4 -0
  140. package/dist/context-menu/index.js.map +1 -0
  141. package/dist/date-picker/index.js +4 -4
  142. package/dist/descriptions/index.js +2 -2
  143. package/dist/divider/index.js +4 -0
  144. package/dist/divider/index.js.map +1 -0
  145. package/dist/drawer/index.js +2 -2
  146. package/dist/dropdown/index.js +4 -4
  147. package/dist/empty/index.js +2 -2
  148. package/dist/fetching-overlay/index.js +4 -4
  149. package/dist/grid/index.js +2 -2
  150. package/dist/image/index.js +2 -2
  151. package/dist/index.d.ts +1242 -161
  152. package/dist/index.js +63 -883
  153. package/dist/index.js.map +1 -1
  154. package/dist/input/index.js +4 -4
  155. package/dist/input-group/index.js +2 -2
  156. package/dist/input-otp/index.js +2 -2
  157. package/dist/input-password/index.js +5 -5
  158. package/dist/kbd/index.js +3 -3
  159. package/dist/modal/index.js +2 -2
  160. package/dist/multi-select/index.js +4 -4
  161. package/dist/notification/index.js +3 -3
  162. package/dist/pagination/index.js +2 -2
  163. package/dist/popover/index.js +3 -3
  164. package/dist/progress/index.js +2 -2
  165. package/dist/radio/index.js +3 -3
  166. package/dist/radio-group/index.js +2 -2
  167. package/dist/rating/index.js +2 -2
  168. package/dist/ribbon/index.js +2 -2
  169. package/dist/select/index.js +5 -5
  170. package/dist/skeleton/index.js +3 -3
  171. package/dist/slider/index.js +2 -2
  172. package/dist/spinner/index.js +3 -3
  173. package/dist/stepper/index.js +2 -2
  174. package/dist/styles/base.css +169 -99
  175. package/dist/styles/global.css +1295 -721
  176. package/dist/styles/themes/dark.css +3 -1
  177. package/dist/styles/themes/light.css +3 -1
  178. package/dist/styles/themes/presets/corporate.css +126 -0
  179. package/dist/styles/themes/presets/minimal.css +126 -0
  180. package/dist/styles/themes/presets/vibrant.css +126 -0
  181. package/dist/switch/index.js +3 -3
  182. package/dist/table/index.js +10 -10
  183. package/dist/tabs/index.js +3 -3
  184. package/dist/tag/index.js +5 -0
  185. package/dist/tag/index.js.map +1 -0
  186. package/dist/textarea/index.js +2 -2
  187. package/dist/theme/index.js +3 -0
  188. package/dist/theme/index.js.map +1 -0
  189. package/dist/toggle/index.js +2 -2
  190. package/dist/toggle-group/index.js +2 -2
  191. package/dist/tooltip/index.js +3 -3
  192. package/dist/transfer/index.js +4 -4
  193. package/dist/tree/index.js +2 -2
  194. package/dist/tree-select/index.js +5 -5
  195. package/dist/upload/index.js +2 -2
  196. package/package.json +460 -72
  197. package/dist/chunk-22FIGRGO.js.map +0 -1
  198. package/dist/chunk-23BPDLT4.js.map +0 -1
  199. package/dist/chunk-2OGZENFC.js.map +0 -1
  200. package/dist/chunk-35K7N4JT.js.map +0 -1
  201. package/dist/chunk-3QKPSJTV.js +0 -120
  202. package/dist/chunk-3QKPSJTV.js.map +0 -1
  203. package/dist/chunk-3WVJE5MF.js.map +0 -1
  204. package/dist/chunk-555KXZRK.js.map +0 -1
  205. package/dist/chunk-6IPISGTP.js.map +0 -1
  206. package/dist/chunk-6MYKJE6A.js.map +0 -1
  207. package/dist/chunk-6PFBSVLK.js +0 -39
  208. package/dist/chunk-6PFBSVLK.js.map +0 -1
  209. package/dist/chunk-77YTCM7G.js.map +0 -1
  210. package/dist/chunk-7BUNJYZO.js.map +0 -1
  211. package/dist/chunk-7ODPSHIQ.js.map +0 -1
  212. package/dist/chunk-7TN4PGYF.js.map +0 -1
  213. package/dist/chunk-7YPX6NJK.js.map +0 -1
  214. package/dist/chunk-ARK3EROZ.js.map +0 -1
  215. package/dist/chunk-AVPPV5OM.js.map +0 -1
  216. package/dist/chunk-BYWYC7RC.js.map +0 -1
  217. package/dist/chunk-C2MZL644.js.map +0 -1
  218. package/dist/chunk-CPPFXCNB.js.map +0 -1
  219. package/dist/chunk-DP6AWUH5.js.map +0 -1
  220. package/dist/chunk-DV5J5NLI.js.map +0 -1
  221. package/dist/chunk-EFMKUCGX.js.map +0 -1
  222. package/dist/chunk-GFQXGLFD.js.map +0 -1
  223. package/dist/chunk-GGREAJO5.js.map +0 -1
  224. package/dist/chunk-GH3CNX5N.js +0 -178
  225. package/dist/chunk-GH3CNX5N.js.map +0 -1
  226. package/dist/chunk-HBEJ4S2Y.js.map +0 -1
  227. package/dist/chunk-HWSLJGT7.js.map +0 -1
  228. package/dist/chunk-IHKPZOE5.js.map +0 -1
  229. package/dist/chunk-INH7KYCK.js.map +0 -1
  230. package/dist/chunk-IRNJZ754.js.map +0 -1
  231. package/dist/chunk-IUUEYOMN.js +0 -470
  232. package/dist/chunk-IUUEYOMN.js.map +0 -1
  233. package/dist/chunk-JFGLDCAK.js.map +0 -1
  234. package/dist/chunk-JGQOEAWL.js.map +0 -1
  235. package/dist/chunk-L6EVOPWH.js.map +0 -1
  236. package/dist/chunk-LSQLUYTD.js +0 -192
  237. package/dist/chunk-LSQLUYTD.js.map +0 -1
  238. package/dist/chunk-MDY3HCRC.js.map +0 -1
  239. package/dist/chunk-MLNIKNLI.js.map +0 -1
  240. package/dist/chunk-NQB4V5P7.js.map +0 -1
  241. package/dist/chunk-NZA526GC.js.map +0 -1
  242. package/dist/chunk-O2VJ6KP4.js.map +0 -1
  243. package/dist/chunk-PQZB43VJ.js.map +0 -1
  244. package/dist/chunk-QVCGNOBE.js.map +0 -1
  245. package/dist/chunk-R2FZO7AM.js.map +0 -1
  246. package/dist/chunk-SGMIDNPI.js.map +0 -1
  247. package/dist/chunk-SMVVCZNM.js.map +0 -1
  248. package/dist/chunk-SOIF4SHB.js.map +0 -1
  249. package/dist/chunk-SYDNDYZJ.js.map +0 -1
  250. package/dist/chunk-TG2AECIN.js.map +0 -1
  251. package/dist/chunk-TIMRHEKH.js +0 -452
  252. package/dist/chunk-TIMRHEKH.js.map +0 -1
  253. package/dist/chunk-TUTOU4X6.js.map +0 -1
  254. package/dist/chunk-TWZ5LXLL.js.map +0 -1
  255. package/dist/chunk-XG3KLPPS.js.map +0 -1
  256. package/dist/chunk-Y2CXG3PT.js.map +0 -1
  257. package/dist/chunk-YII4K64U.js.map +0 -1
@@ -0,0 +1,299 @@
1
+ import { cn } from './chunk-NGYLRX6F.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import React, { useState, useEffect } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var avatarVariants = cva(
7
+ "relative inline-flex items-center justify-center font-medium select-none shrink-0",
8
+ {
9
+ variants: {
10
+ size: {
11
+ xs: "size-6 text-xs",
12
+ sm: "size-8 text-sm",
13
+ md: "size-10 text-base",
14
+ lg: "size-12 text-lg"
15
+ },
16
+ shape: {
17
+ circle: "rounded-full",
18
+ square: "rounded-lg"
19
+ },
20
+ color: {
21
+ default: "bg-surface text-text-primary",
22
+ primary: "bg-primary/10 text-primary",
23
+ secondary: "bg-secondary/10 text-secondary",
24
+ accent: "bg-accent/10 text-accent",
25
+ success: "bg-success/10 text-success",
26
+ error: "bg-error/10 text-error",
27
+ warning: "bg-warning/10 text-warning",
28
+ info: "bg-info/10 text-info"
29
+ },
30
+ bordered: {
31
+ true: "ring-2 ring-background",
32
+ false: ""
33
+ },
34
+ disabled: {
35
+ true: "opacity-50 cursor-not-allowed",
36
+ false: ""
37
+ }
38
+ },
39
+ defaultVariants: {
40
+ size: "md",
41
+ shape: "circle",
42
+ color: "default",
43
+ bordered: false,
44
+ disabled: false
45
+ }
46
+ }
47
+ );
48
+ var statusSizeClasses = {
49
+ xs: "size-1.5",
50
+ sm: "size-2",
51
+ md: "size-2.5",
52
+ lg: "size-3"
53
+ };
54
+ var statusColorClasses = {
55
+ online: "bg-success",
56
+ offline: "bg-border",
57
+ away: "bg-warning",
58
+ busy: "bg-error"
59
+ };
60
+ var badgeSizeClasses = {
61
+ xs: "min-w-3 h-3 text-[8px]",
62
+ sm: "min-w-4 h-4 text-[10px]",
63
+ md: "min-w-5 h-5 text-xs",
64
+ lg: "min-w-6 h-6 text-xs"
65
+ };
66
+ var overlapClasses = {
67
+ xs: "-space-x-1",
68
+ sm: "-space-x-1.5",
69
+ md: "-space-x-2",
70
+ lg: "-space-x-2.5"
71
+ };
72
+ function getInitialsFromName(name) {
73
+ const words = name.trim().split(/\s+/).filter(Boolean);
74
+ if (words.length === 0) return "";
75
+ const firstWord = words[0];
76
+ if (words.length === 1 && firstWord) {
77
+ return firstWord.slice(0, 2).toUpperCase();
78
+ }
79
+ const lastWord = words[words.length - 1];
80
+ const firstInitial = firstWord?.[0] ?? "";
81
+ const lastInitial = lastWord?.[0] ?? "";
82
+ return (firstInitial + lastInitial).toUpperCase();
83
+ }
84
+ var DefaultUserIcon = () => /* @__PURE__ */ jsx(
85
+ "svg",
86
+ {
87
+ className: "size-[60%] text-text-secondary",
88
+ fill: "currentColor",
89
+ viewBox: "0 0 24 24",
90
+ role: "img",
91
+ "aria-hidden": "true",
92
+ children: /* @__PURE__ */ jsx("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
93
+ }
94
+ );
95
+ var Avatar = React.memo(
96
+ ({
97
+ src,
98
+ alt = "",
99
+ fallback,
100
+ name,
101
+ size = "md",
102
+ shape = "circle",
103
+ status,
104
+ color = "default",
105
+ bordered = false,
106
+ icon,
107
+ badge,
108
+ disabled = false,
109
+ className,
110
+ classNames,
111
+ onError,
112
+ ref,
113
+ ...props
114
+ }) => {
115
+ const [imageError, setImageError] = useState(false);
116
+ useEffect(() => {
117
+ setImageError(false);
118
+ }, [src]);
119
+ const handleImageError = (e) => {
120
+ setImageError(true);
121
+ onError?.(e);
122
+ };
123
+ const getInitials = () => {
124
+ if (fallback) return fallback.slice(0, 2).toUpperCase();
125
+ if (name) return getInitialsFromName(name);
126
+ return "";
127
+ };
128
+ const showImage = src && !imageError;
129
+ const initials = getInitials();
130
+ const showFallback = !showImage && (initials || icon);
131
+ const showDefaultIcon = !showImage && !showFallback;
132
+ return /* @__PURE__ */ jsxs(
133
+ "div",
134
+ {
135
+ ref,
136
+ className: cn(
137
+ "avatar_root",
138
+ avatarVariants({
139
+ size,
140
+ shape,
141
+ color: showImage ? "default" : color,
142
+ bordered,
143
+ disabled
144
+ }),
145
+ // Apply overflow-hidden only when no badge/status to prevent clipping
146
+ !badge && !status && "overflow-hidden",
147
+ classNames?.root,
148
+ className
149
+ ),
150
+ "aria-disabled": disabled || void 0,
151
+ "data-slot": "root",
152
+ ...props,
153
+ children: [
154
+ showImage && /* @__PURE__ */ jsx(
155
+ "img",
156
+ {
157
+ src,
158
+ alt: alt || name || "User avatar",
159
+ onError: handleImageError,
160
+ className: cn(
161
+ "avatar_image",
162
+ "size-full object-cover",
163
+ shape === "circle" ? "rounded-full" : "rounded-lg",
164
+ classNames?.image
165
+ ),
166
+ loading: "lazy",
167
+ "data-slot": "image"
168
+ }
169
+ ),
170
+ showFallback && (icon ? /* @__PURE__ */ jsx(
171
+ "span",
172
+ {
173
+ className: cn(
174
+ "avatar_fallback",
175
+ "flex items-center justify-center size-[60%]",
176
+ classNames?.fallback
177
+ ),
178
+ "data-slot": "fallback",
179
+ children: icon
180
+ }
181
+ ) : /* @__PURE__ */ jsx(
182
+ "span",
183
+ {
184
+ className: cn("avatar_fallback", classNames?.fallback),
185
+ "aria-label": `Avatar for ${name || initials}`,
186
+ "data-slot": "fallback",
187
+ children: initials
188
+ }
189
+ )),
190
+ showDefaultIcon && /* @__PURE__ */ jsx(DefaultUserIcon, {}),
191
+ status && /* @__PURE__ */ jsx(
192
+ "span",
193
+ {
194
+ className: cn(
195
+ "avatar_status",
196
+ "absolute bottom-0 right-0 rounded-full ring-2 ring-background",
197
+ statusSizeClasses[size],
198
+ statusColorClasses[status],
199
+ classNames?.status
200
+ ),
201
+ "aria-label": `Status: ${status}`,
202
+ "data-slot": "status"
203
+ }
204
+ ),
205
+ badge && /* @__PURE__ */ jsx(
206
+ "span",
207
+ {
208
+ className: cn(
209
+ "absolute -top-1 -right-1 flex items-center justify-center rounded-full bg-error text-white font-medium px-1",
210
+ badgeSizeClasses[size]
211
+ ),
212
+ "aria-label": typeof badge === "number" ? `${badge} notifications` : void 0,
213
+ role: typeof badge === "number" ? "status" : void 0,
214
+ children: badge
215
+ }
216
+ )
217
+ ]
218
+ }
219
+ );
220
+ }
221
+ );
222
+ Avatar.displayName = "Avatar";
223
+ var AvatarGroup = React.memo(
224
+ ({
225
+ children,
226
+ max,
227
+ size = "md",
228
+ shape = "circle",
229
+ showTotal = false,
230
+ renderSurplus,
231
+ bordered = false,
232
+ className,
233
+ classNames,
234
+ ref,
235
+ ...props
236
+ }) => {
237
+ const childrenArray = React.Children.toArray(children);
238
+ const total = childrenArray.length;
239
+ const visibleChildren = max ? childrenArray.slice(0, max) : childrenArray;
240
+ const remainingCount = max && total > max ? total - max : 0;
241
+ const surplusDisplay = showTotal ? total : remainingCount;
242
+ return /* @__PURE__ */ jsxs(
243
+ "div",
244
+ {
245
+ ref,
246
+ className: cn(
247
+ "avatarGroup_root",
248
+ "flex items-center",
249
+ overlapClasses[size],
250
+ classNames?.root,
251
+ className
252
+ ),
253
+ role: "group",
254
+ "aria-label": `Avatar group with ${total} members`,
255
+ "data-slot": "root",
256
+ ...props,
257
+ children: [
258
+ visibleChildren.map((child, index) => {
259
+ if (React.isValidElement(child)) {
260
+ return React.cloneElement(child, {
261
+ key: index,
262
+ size: child.props.size ?? size,
263
+ shape: child.props.shape ?? shape,
264
+ bordered: child.props.bordered ?? bordered ?? true,
265
+ className: cn(child.props.className)
266
+ });
267
+ }
268
+ return child;
269
+ }),
270
+ remainingCount > 0 && (renderSurplus ? renderSurplus(surplusDisplay) : /* @__PURE__ */ jsx(
271
+ "div",
272
+ {
273
+ className: cn(
274
+ "avatarGroup_overflow",
275
+ avatarVariants({
276
+ size,
277
+ shape,
278
+ color: "default",
279
+ bordered: true
280
+ }),
281
+ "bg-surface/80 backdrop-blur-sm overflow-hidden",
282
+ classNames?.overflow
283
+ ),
284
+ "aria-label": showTotal ? `${total} total members` : `${remainingCount} more members`,
285
+ "data-slot": "overflow",
286
+ children: /* @__PURE__ */ jsx("span", { className: "text-text-secondary font-medium", children: showTotal ? total : `+${remainingCount}` })
287
+ }
288
+ ))
289
+ ]
290
+ }
291
+ );
292
+ }
293
+ );
294
+ AvatarGroup.displayName = "AvatarGroup";
295
+ var avatar_default = Avatar;
296
+
297
+ export { Avatar, AvatarGroup, avatar_default };
298
+ //# sourceMappingURL=chunk-UUP7YGOS.js.map
299
+ //# sourceMappingURL=chunk-UUP7YGOS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/avatar/index.tsx"],"names":[],"mappings":"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","file":"chunk-UUP7YGOS.js","sourcesContent":["'use client'\n\nimport { cva } from \"class-variance-authority\";\nimport React, { useState, useEffect } from \"react\";\n\nimport { cn } from \"../utils\";\nimport type { AvatarGroupProps, AvatarProps, AvatarSize } from \"./types\";\n\n/**\n * Avatar size variants\n */\nconst avatarVariants = cva(\n \"relative inline-flex items-center justify-center font-medium select-none shrink-0\",\n {\n variants: {\n size: {\n xs: \"size-6 text-xs\",\n sm: \"size-8 text-sm\",\n md: \"size-10 text-base\",\n lg: \"size-12 text-lg\",\n },\n shape: {\n circle: \"rounded-full\",\n square: \"rounded-lg\",\n },\n color: {\n default: \"bg-surface text-text-primary\",\n primary: \"bg-primary/10 text-primary\",\n secondary: \"bg-secondary/10 text-secondary\",\n accent: \"bg-accent/10 text-accent\",\n success: \"bg-success/10 text-success\",\n error: \"bg-error/10 text-error\",\n warning: \"bg-warning/10 text-warning\",\n info: \"bg-info/10 text-info\",\n },\n bordered: {\n true: \"ring-2 ring-background\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n shape: \"circle\",\n color: \"default\",\n bordered: false,\n disabled: false,\n },\n },\n);\n\n/**\n * Status indicator size classes\n */\nconst statusSizeClasses: Record<AvatarSize, string> = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n};\n\n/**\n * Status indicator color classes\n */\nconst statusColorClasses = {\n online: \"bg-success\",\n offline: \"bg-border\",\n away: \"bg-warning\",\n busy: \"bg-error\",\n};\n\n/**\n * Badge size classes\n */\nconst badgeSizeClasses: Record<AvatarSize, string> = {\n xs: \"min-w-3 h-3 text-[8px]\",\n sm: \"min-w-4 h-4 text-[10px]\",\n md: \"min-w-5 h-5 text-xs\",\n lg: \"min-w-6 h-6 text-xs\",\n};\n\n/**\n * Overlap spacing classes for AvatarGroup\n */\nconst overlapClasses: Record<AvatarSize, string> = {\n xs: \"-space-x-1\",\n sm: \"-space-x-1.5\",\n md: \"-space-x-2\",\n lg: \"-space-x-2.5\",\n};\n\n/**\n * Generate initials from a name\n */\nfunction getInitialsFromName(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return \"\";\n\n const firstWord = words[0];\n if (words.length === 1 && firstWord) {\n return firstWord.slice(0, 2).toUpperCase();\n }\n\n const lastWord = words[words.length - 1];\n const firstInitial = firstWord?.[0] ?? \"\";\n const lastInitial = lastWord?.[0] ?? \"\";\n return (firstInitial + lastInitial).toUpperCase();\n}\n\n/**\n * Default user icon SVG\n */\nconst DefaultUserIcon = () => (\n <svg\n className=\"size-[60%] text-text-secondary\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n);\n\n/**\n * Avatar Component\n */\nconst Avatar = React.memo<AvatarProps>(\n ({\n src,\n alt = \"\",\n fallback,\n name,\n size = \"md\",\n shape = \"circle\",\n status,\n color = \"default\",\n bordered = false,\n icon,\n badge,\n disabled = false,\n className,\n classNames,\n onError,\n ref,\n ...props\n }) => {\n const [imageError, setImageError] = useState(false);\n\n // Reset image error state when src changes\n useEffect(() => {\n setImageError(false);\n }, [src]);\n\n const handleImageError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setImageError(true);\n onError?.(e);\n };\n\n // Get initials from fallback or name\n const getInitials = () => {\n if (fallback) return fallback.slice(0, 2).toUpperCase();\n if (name) return getInitialsFromName(name);\n return \"\";\n };\n\n const showImage = src && !imageError;\n const initials = getInitials();\n const showFallback = !showImage && (initials || icon);\n const showDefaultIcon = !showImage && !showFallback;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"avatar_root\",\n avatarVariants({\n size,\n shape,\n color: showImage ? \"default\" : color,\n bordered,\n disabled,\n }),\n // Apply overflow-hidden only when no badge/status to prevent clipping\n !badge && !status && \"overflow-hidden\",\n classNames?.root,\n className,\n )}\n aria-disabled={disabled || undefined}\n data-slot=\"root\"\n {...props}\n >\n {/* Image */}\n {showImage && (\n <img\n src={src}\n alt={alt || name || \"User avatar\"}\n onError={handleImageError}\n className={cn(\n \"avatar_image\",\n \"size-full object-cover\",\n shape === \"circle\" ? \"rounded-full\" : \"rounded-lg\",\n classNames?.image,\n )}\n loading=\"lazy\"\n data-slot=\"image\"\n />\n )}\n\n {/* Fallback: Icon or Initials */}\n {showFallback &&\n (icon ? (\n <span\n className={cn(\n \"avatar_fallback\",\n \"flex items-center justify-center size-[60%]\",\n classNames?.fallback,\n )}\n data-slot=\"fallback\"\n >\n {icon}\n </span>\n ) : (\n <span\n className={cn(\"avatar_fallback\", classNames?.fallback)}\n aria-label={`Avatar for ${name || initials}`}\n data-slot=\"fallback\"\n >\n {initials}\n </span>\n ))}\n\n {/* Default user icon */}\n {showDefaultIcon && <DefaultUserIcon />}\n\n {/* Status indicator */}\n {status && (\n <span\n className={cn(\n \"avatar_status\",\n \"absolute bottom-0 right-0 rounded-full ring-2 ring-background\",\n statusSizeClasses[size],\n statusColorClasses[status],\n classNames?.status,\n )}\n aria-label={`Status: ${status}`}\n data-slot=\"status\"\n />\n )}\n\n {/* Badge */}\n {badge && (\n <span\n className={cn(\n \"absolute -top-1 -right-1 flex items-center justify-center rounded-full bg-error text-white font-medium px-1\",\n badgeSizeClasses[size],\n )}\n aria-label={typeof badge === \"number\" ? `${badge} notifications` : undefined}\n role={typeof badge === \"number\" ? \"status\" : undefined}\n >\n {badge}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n\n/**\n * AvatarGroup Component\n */\nconst AvatarGroup = React.memo<AvatarGroupProps>(\n ({\n children,\n max,\n size = \"md\",\n shape = \"circle\",\n showTotal = false,\n renderSurplus,\n bordered = false,\n className,\n classNames,\n ref,\n ...props\n }) => {\n const childrenArray = React.Children.toArray(children);\n const total = childrenArray.length;\n const visibleChildren = max ? childrenArray.slice(0, max) : childrenArray;\n const remainingCount = max && total > max ? total - max : 0;\n const surplusDisplay = showTotal ? total : remainingCount;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"avatarGroup_root\",\n \"flex items-center\",\n overlapClasses[size],\n classNames?.root,\n className,\n )}\n role=\"group\"\n aria-label={`Avatar group with ${total} members`}\n data-slot=\"root\"\n {...props}\n >\n {visibleChildren.map((child, index) => {\n if (React.isValidElement<AvatarProps>(child)) {\n return React.cloneElement(child, {\n key: index,\n size: child.props.size ?? size,\n shape: child.props.shape ?? shape,\n bordered: child.props.bordered ?? bordered ?? true,\n className: cn(child.props.className),\n });\n }\n return child;\n })}\n\n {remainingCount > 0 &&\n (renderSurplus ? (\n renderSurplus(surplusDisplay)\n ) : (\n <div\n className={cn(\n \"avatarGroup_overflow\",\n avatarVariants({\n size,\n shape,\n color: \"default\",\n bordered: true,\n }),\n \"bg-surface/80 backdrop-blur-sm overflow-hidden\",\n classNames?.overflow,\n )}\n aria-label={\n showTotal\n ? `${total} total members`\n : `${remainingCount} more members`\n }\n data-slot=\"overflow\"\n >\n <span className=\"text-text-secondary font-medium\">\n {showTotal ? total : `+${remainingCount}`}\n </span>\n </div>\n ))}\n </div>\n );\n },\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport type * from \"./types\";\nexport { Avatar, AvatarGroup };\nexport default Avatar;\n"]}
@@ -1,5 +1,5 @@
1
- import { Popover, PopoverTrigger, PopoverContent } from './chunk-EFMKUCGX.js';
2
- import { cn, iconSizes } from './chunk-2OGZENFC.js';
1
+ import { Popover, PopoverTrigger, PopoverContent } from './chunk-DH7R6NBG.js';
2
+ import { cn, iconSizes } from './chunk-NGYLRX6F.js';
3
3
  import React from 'react';
4
4
  import ReactDatePicker from 'react-datepicker';
5
5
  import 'react-datepicker/dist/react-datepicker.css';
@@ -42,6 +42,7 @@ var pickerInputVariants = cva(
42
42
  }
43
43
  );
44
44
  var datePickerStyles = `
45
+ datePicker_day
45
46
  [&_.react-datepicker]:!bg-background
46
47
  [&_.react-datepicker]:!border-border
47
48
  [&_.react-datepicker]:!text-text-primary
@@ -79,6 +80,7 @@ var datePickerStyles = `
79
80
  [&_.react-datepicker__day]:!m-0
80
81
  [&_.react-datepicker__day]:!cursor-pointer
81
82
  [&_.react-datepicker__day]:!transition-colors
83
+ [&_.react-datepicker__day--selected]:datePicker_daySelected
82
84
  [&_.react-datepicker__day--selected]:!bg-primary
83
85
  [&_.react-datepicker__day--selected]:!text-white
84
86
  [&_.react-datepicker__day--keyboard-selected]:!bg-primary/50
@@ -87,6 +89,7 @@ var datePickerStyles = `
87
89
  [&_.react-datepicker__day--disabled]:!opacity-40
88
90
  [&_.react-datepicker__day--disabled]:hover:!bg-transparent
89
91
  [&_.react-datepicker__day--outside-month]:!text-text-secondary
92
+ [&_.react-datepicker__day--today]:datePicker_dayToday
90
93
  [&_.react-datepicker__day--today]:!font-semibold
91
94
  [&_.react-datepicker__day--today]:!border
92
95
  [&_.react-datepicker__day--today]:!border-primary
@@ -104,6 +107,14 @@ var datePickerStyles = `
104
107
  [&_.react-datepicker__day--range-end]:!bg-primary
105
108
  [&_.react-datepicker__day--range-end]:!text-white
106
109
  `;
110
+ var getDatePickerStyles = (classNames) => {
111
+ return cn(
112
+ datePickerStyles,
113
+ classNames?.day && `[&_.react-datepicker__day]:${classNames.day}`,
114
+ classNames?.daySelected && `[&_.react-datepicker__day--selected]:${classNames.daySelected}`,
115
+ classNames?.dayToday && `[&_.react-datepicker__day--today]:${classNames.dayToday}`
116
+ );
117
+ };
107
118
  var YearSelector = ({
108
119
  date,
109
120
  onYearSelect,
@@ -236,12 +247,14 @@ var CustomCalendarHeader = ({
236
247
  nextYearButtonDisabled,
237
248
  showMonthSelector = false,
238
249
  onMonthClick,
239
- onYearClick
250
+ onYearClick,
251
+ headerClassName,
252
+ navigationClassName
240
253
  }) => {
241
254
  const monthName = date.toLocaleDateString("en-US", { month: "long" });
242
255
  const year = date.getFullYear();
243
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 bg-surface border-b border-border", children: [
244
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
256
+ return /* @__PURE__ */ jsxs("div", { className: cn("datePicker_header", "flex items-center justify-between px-4 py-3 bg-surface border-b border-border", headerClassName), "data-slot": "header", children: [
257
+ /* @__PURE__ */ jsxs("div", { className: cn("datePicker_navigation", "flex items-center gap-1", navigationClassName), "data-slot": "navigation", children: [
245
258
  /* @__PURE__ */ jsx(
246
259
  "button",
247
260
  {
@@ -285,7 +298,7 @@ var CustomCalendarHeader = ({
285
298
  }
286
299
  )
287
300
  ] }),
288
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
301
+ /* @__PURE__ */ jsxs("div", { className: cn("datePicker_navigation", "flex items-center gap-1", navigationClassName), "data-slot": "navigation", children: [
289
302
  /* @__PURE__ */ jsx(
290
303
  "button",
291
304
  {
@@ -401,6 +414,7 @@ var DatePickerComponent = React.memo(
401
414
  clearable = false,
402
415
  fullWidth = true,
403
416
  className,
417
+ classNames,
404
418
  value,
405
419
  defaultValue,
406
420
  onChange,
@@ -487,7 +501,9 @@ var DatePickerComponent = React.memo(
487
501
  ...props,
488
502
  showMonthSelector,
489
503
  onMonthClick: () => setShowMonthSelector(!showMonthSelector),
490
- onYearClick: () => setShowYearSelector(true)
504
+ onYearClick: () => setShowYearSelector(true),
505
+ headerClassName: classNames?.header,
506
+ navigationClassName: classNames?.navigation
491
507
  }
492
508
  );
493
509
  const triggerButton = /* @__PURE__ */ jsx(
@@ -497,11 +513,14 @@ var DatePickerComponent = React.memo(
497
513
  disabled,
498
514
  onClick: () => setIsOpen(!isOpen),
499
515
  className: cn(
516
+ "datePicker_trigger",
500
517
  pickerInputVariants({ variant, status, size, fullWidth }),
501
518
  "pl-10 flex items-center justify-start cursor-pointer",
502
519
  showClear && "pr-10",
503
- className
520
+ className,
521
+ classNames?.trigger
504
522
  ),
523
+ "data-slot": "trigger",
505
524
  children: confirmed || preview ? /* @__PURE__ */ jsxs(Fragment, { children: [
506
525
  confirmed && /* @__PURE__ */ jsx("span", { children: confirmed }),
507
526
  preview && /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: preview })
@@ -520,7 +539,7 @@ var DatePickerComponent = React.memo(
520
539
  messagePosition,
521
540
  required,
522
541
  fullWidth,
523
- children: /* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
542
+ children: /* @__PURE__ */ jsxs("div", { className: cn("datePicker_root", "relative w-full", classNames?.root), "data-slot": "root", children: [
524
543
  /* @__PURE__ */ jsx("div", { className: "absolute left-3 flex items-center h-full top-0 text-text-secondary pointer-events-none z-10", children: /* @__PURE__ */ jsx(Calendar, { className: iconSizes[size] }) }),
525
544
  /* @__PURE__ */ jsxs(
526
545
  Popover,
@@ -558,7 +577,7 @@ var DatePickerComponent = React.memo(
558
577
  onYearClick: () => setShowYearSelector(true),
559
578
  onYearChange: handleYearChange
560
579
  }
561
- ) : /* @__PURE__ */ jsx("div", { className: datePickerStyles, children: /* @__PURE__ */ jsx(
580
+ ) : /* @__PURE__ */ jsx("div", { className: cn("datePicker_calendar", getDatePickerStyles(classNames), classNames?.calendar), "data-slot": "calendar", children: /* @__PURE__ */ jsx(
562
581
  ReactDatePicker,
563
582
  {
564
583
  ref: datePickerRef,
@@ -613,6 +632,7 @@ var RangePickerComponent = React.memo(
613
632
  clearable = false,
614
633
  fullWidth = true,
615
634
  className,
635
+ classNames,
616
636
  startDate,
617
637
  endDate,
618
638
  defaultStartDate,
@@ -723,7 +743,9 @@ var RangePickerComponent = React.memo(
723
743
  ...props,
724
744
  showMonthSelector,
725
745
  onMonthClick: () => setShowMonthSelector(!showMonthSelector),
726
- onYearClick: () => setShowYearSelector(true)
746
+ onYearClick: () => setShowYearSelector(true),
747
+ headerClassName: classNames?.header,
748
+ navigationClassName: classNames?.navigation
727
749
  }
728
750
  );
729
751
  const rangeTriggerButton = /* @__PURE__ */ jsx(
@@ -733,11 +755,14 @@ var RangePickerComponent = React.memo(
733
755
  disabled,
734
756
  onClick: () => setIsOpen(!isOpen),
735
757
  className: cn(
758
+ "datePicker_trigger",
736
759
  pickerInputVariants({ variant, status, size, fullWidth }),
737
760
  "pl-10 flex items-center justify-start cursor-pointer",
738
761
  showClear && "pr-10",
739
- className
762
+ className,
763
+ classNames?.trigger
740
764
  ),
765
+ "data-slot": "trigger",
741
766
  children: rangeConfirmed || rangePreview ? /* @__PURE__ */ jsxs(Fragment, { children: [
742
767
  rangeConfirmed && /* @__PURE__ */ jsx("span", { children: rangeConfirmed }),
743
768
  rangePreview && /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: rangePreview })
@@ -756,7 +781,7 @@ var RangePickerComponent = React.memo(
756
781
  messagePosition,
757
782
  required,
758
783
  fullWidth,
759
- children: /* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
784
+ children: /* @__PURE__ */ jsxs("div", { className: cn("datePicker_root", "relative w-full", classNames?.root), "data-slot": "root", children: [
760
785
  /* @__PURE__ */ jsx("div", { className: "absolute left-3 flex items-center h-full top-0 text-text-secondary pointer-events-none z-10", children: /* @__PURE__ */ jsx(Calendar, { className: iconSizes[size] }) }),
761
786
  /* @__PURE__ */ jsxs(
762
787
  Popover,
@@ -794,7 +819,7 @@ var RangePickerComponent = React.memo(
794
819
  onYearClick: () => setShowYearSelector(true),
795
820
  onYearChange: handleYearChange
796
821
  }
797
- ) : /* @__PURE__ */ jsx("div", { className: datePickerStyles, children: /* @__PURE__ */ jsx(
822
+ ) : /* @__PURE__ */ jsx("div", { className: cn("datePicker_calendar", getDatePickerStyles(classNames), classNames?.calendar), "data-slot": "calendar", children: /* @__PURE__ */ jsx(
798
823
  ReactDatePicker,
799
824
  {
800
825
  ref: datePickerRef,
@@ -1000,6 +1025,7 @@ var TimePickerComponent = React.memo(
1000
1025
  clearable = false,
1001
1026
  fullWidth = true,
1002
1027
  className,
1028
+ classNames,
1003
1029
  value,
1004
1030
  defaultValue,
1005
1031
  onChange,
@@ -1056,11 +1082,14 @@ var TimePickerComponent = React.memo(
1056
1082
  disabled,
1057
1083
  onClick: () => setIsOpen(!isOpen),
1058
1084
  className: cn(
1085
+ "datePicker_trigger",
1059
1086
  pickerInputVariants({ variant, status, size, fullWidth }),
1060
1087
  "pl-10 flex items-center justify-start cursor-pointer",
1061
1088
  showClear && "pr-10",
1062
- className
1089
+ className,
1090
+ classNames?.trigger
1063
1091
  ),
1092
+ "data-slot": "trigger",
1064
1093
  children: timeConfirmed || timePreview ? /* @__PURE__ */ jsxs(Fragment, { children: [
1065
1094
  timeConfirmed && /* @__PURE__ */ jsx("span", { children: timeConfirmed }),
1066
1095
  timePreview && /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: timePreview })
@@ -1079,7 +1108,7 @@ var TimePickerComponent = React.memo(
1079
1108
  messagePosition,
1080
1109
  required,
1081
1110
  fullWidth,
1082
- children: /* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
1111
+ children: /* @__PURE__ */ jsxs("div", { className: cn("datePicker_root", "relative w-full", classNames?.root), "data-slot": "root", children: [
1083
1112
  /* @__PURE__ */ jsx("div", { className: "absolute left-3 flex items-center h-full top-0 text-text-secondary pointer-events-none z-10", children: /* @__PURE__ */ jsx(Clock, { className: iconSizes[size] }) }),
1084
1113
  /* @__PURE__ */ jsxs(
1085
1114
  Popover,
@@ -1136,5 +1165,5 @@ var DatePicker = Object.assign(DatePickerComponent, {
1136
1165
  });
1137
1166
 
1138
1167
  export { DatePicker, RangePickerComponent, TimePickerComponent };
1139
- //# sourceMappingURL=chunk-MDY3HCRC.js.map
1140
- //# sourceMappingURL=chunk-MDY3HCRC.js.map
1168
+ //# sourceMappingURL=chunk-VUBU7Y4F.js.map
1169
+ //# sourceMappingURL=chunk-VUBU7Y4F.js.map