@mdigital_ui/ui 0.2.5 → 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 (274) 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 -1
  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-27QEPVKU.js +115 -0
  17. package/dist/chunk-27QEPVKU.js.map +1 -0
  18. package/dist/{chunk-Y5A26EGR.js → chunk-2J57G7XG.js} +82 -24
  19. package/dist/chunk-2J57G7XG.js.map +1 -0
  20. package/dist/{chunk-FPOXTCYV.js → chunk-2NYVRAG4.js} +29 -20
  21. package/dist/chunk-2NYVRAG4.js.map +1 -0
  22. package/dist/chunk-2OUGJBXK.js +742 -0
  23. package/dist/chunk-2OUGJBXK.js.map +1 -0
  24. package/dist/{chunk-ROR4E6IE.js → chunk-2WZVD7P3.js} +38 -12
  25. package/dist/chunk-2WZVD7P3.js.map +1 -0
  26. package/dist/chunk-3UCZ4GMN.js +84 -0
  27. package/dist/chunk-3UCZ4GMN.js.map +1 -0
  28. package/dist/{chunk-RPAQAZTI.js → chunk-4LSKRZOT.js} +12 -7
  29. package/dist/chunk-4LSKRZOT.js.map +1 -0
  30. package/dist/{chunk-ASW7TEAN.js → chunk-4SQOFZ3N.js} +35 -18
  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-6TMOKYR7.js +75 -0
  35. package/dist/chunk-6TMOKYR7.js.map +1 -0
  36. package/dist/chunk-7UCNBMCV.js +261 -0
  37. package/dist/chunk-7UCNBMCV.js.map +1 -0
  38. package/dist/chunk-AQYOVYPS.js +237 -0
  39. package/dist/chunk-AQYOVYPS.js.map +1 -0
  40. package/dist/{chunk-BP434VYV.js → chunk-C5YO5VZS.js} +17 -17
  41. package/dist/chunk-C5YO5VZS.js.map +1 -0
  42. package/dist/{chunk-ZNJ7M5QK.js → chunk-CHGJX5F2.js} +69 -46
  43. package/dist/chunk-CHGJX5F2.js.map +1 -0
  44. package/dist/chunk-CK6A2R66.js +336 -0
  45. package/dist/chunk-CK6A2R66.js.map +1 -0
  46. package/dist/{chunk-I5ANSIDK.js → chunk-CMGCJXE5.js} +280 -100
  47. package/dist/chunk-CMGCJXE5.js.map +1 -0
  48. package/dist/chunk-CSRMVLPR.js +394 -0
  49. package/dist/chunk-CSRMVLPR.js.map +1 -0
  50. package/dist/chunk-DH7R6NBG.js +107 -0
  51. package/dist/chunk-DH7R6NBG.js.map +1 -0
  52. package/dist/{chunk-XMAH5PDW.js → chunk-FEMHXG2P.js} +28 -11
  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-C7SXY3ZV.js → chunk-FVTMKQUE.js} +5 -3
  57. package/dist/chunk-FVTMKQUE.js.map +1 -0
  58. package/dist/{chunk-UAMFKX6L.js → chunk-GBVIACYQ.js} +103 -42
  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-HUVXKOJC.js → chunk-INQI3UUI.js} +80 -22
  67. package/dist/chunk-INQI3UUI.js.map +1 -0
  68. package/dist/{chunk-BNILRB4T.js → chunk-J525ROGL.js} +12 -7
  69. package/dist/chunk-J525ROGL.js.map +1 -0
  70. package/dist/chunk-JLS4MBHN.js +205 -0
  71. package/dist/chunk-JLS4MBHN.js.map +1 -0
  72. package/dist/{chunk-SK5ECBBK.js → chunk-KTHWXHDN.js} +15 -6
  73. package/dist/chunk-KTHWXHDN.js.map +1 -0
  74. package/dist/{chunk-SOV4PE3P.js → chunk-LMR7TKDJ.js} +25 -7
  75. package/dist/chunk-LMR7TKDJ.js.map +1 -0
  76. package/dist/{chunk-NNSS366W.js → chunk-MRFCITKK.js} +53 -11
  77. package/dist/chunk-MRFCITKK.js.map +1 -0
  78. package/dist/chunk-MXDTUN3V.js +459 -0
  79. package/dist/chunk-MXDTUN3V.js.map +1 -0
  80. package/dist/{chunk-YNNAOXU5.js → chunk-NGYLRX6F.js} +3 -18
  81. package/dist/chunk-NGYLRX6F.js.map +1 -0
  82. package/dist/chunk-NTPWR57C.js +445 -0
  83. package/dist/chunk-NTPWR57C.js.map +1 -0
  84. package/dist/chunk-OWXQ45GS.js +276 -0
  85. package/dist/chunk-OWXQ45GS.js.map +1 -0
  86. package/dist/{chunk-75XESYGN.js → chunk-P6A75RAH.js} +7 -13
  87. package/dist/chunk-P6A75RAH.js.map +1 -0
  88. package/dist/{chunk-RMGIO27V.js → chunk-PXOHJJBE.js} +39 -10
  89. package/dist/chunk-PXOHJJBE.js.map +1 -0
  90. package/dist/{chunk-SAVE5ACL.js → chunk-Q57THXIU.js} +28 -10
  91. package/dist/chunk-Q57THXIU.js.map +1 -0
  92. package/dist/{chunk-J3G5WWGR.js → chunk-QDHGE7IF.js} +7 -15
  93. package/dist/chunk-QDHGE7IF.js.map +1 -0
  94. package/dist/{chunk-7PKVBUGL.js → chunk-QKSDVYKF.js} +4 -4
  95. package/dist/chunk-QKSDVYKF.js.map +1 -0
  96. package/dist/chunk-ROA7BYGB.js +123 -0
  97. package/dist/chunk-ROA7BYGB.js.map +1 -0
  98. package/dist/{chunk-DPOSWW22.js → chunk-RPIJ2KY7.js} +11 -4
  99. package/dist/chunk-RPIJ2KY7.js.map +1 -0
  100. package/dist/{chunk-R225A5II.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-DOKTHDG3.js → chunk-SGRACNBP.js} +12 -7
  109. package/dist/chunk-SGRACNBP.js.map +1 -0
  110. package/dist/{chunk-OALOWWO7.js → chunk-TTEBZZ3T.js} +55 -42
  111. package/dist/chunk-TTEBZZ3T.js.map +1 -0
  112. package/dist/{chunk-FCMVKFVV.js → chunk-US4ZCMNU.js} +26 -20
  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-QPJL66S7.js → chunk-VUBU7Y4F.js} +123 -55
  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-WVG3QQDN.js +283 -0
  121. package/dist/chunk-WVG3QQDN.js.map +1 -0
  122. package/dist/chunk-WZ2KDHFP.js +109 -0
  123. package/dist/chunk-WZ2KDHFP.js.map +1 -0
  124. package/dist/{chunk-FGWSUPVW.js → chunk-X5SCI7KH.js} +190 -137
  125. package/dist/chunk-X5SCI7KH.js.map +1 -0
  126. package/dist/{chunk-D3JWPGCA.js → chunk-XJCWPPMM.js} +10 -56
  127. package/dist/chunk-XJCWPPMM.js.map +1 -0
  128. package/dist/{chunk-LEKLQR4I.js → chunk-YAAV7FQG.js} +70 -45
  129. package/dist/chunk-YAAV7FQG.js.map +1 -0
  130. package/dist/chunk-YOG5GXIC.js +196 -0
  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-267WNY3E.js → chunk-ZC3E3PWH.js} +109 -73
  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 -3
  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 -3
  147. package/dist/empty/index.js +2 -2
  148. package/dist/fetching-overlay/index.js +4 -3
  149. package/dist/grid/index.js +2 -2
  150. package/dist/image/index.js +2 -2
  151. package/dist/index.d.ts +2494 -211
  152. package/dist/index.js +63 -186
  153. package/dist/index.js.map +1 -1
  154. package/dist/input/index.js +4 -3
  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 -4
  158. package/dist/kbd/index.js +3 -2
  159. package/dist/modal/index.js +2 -2
  160. package/dist/multi-select/index.js +4 -3
  161. package/dist/notification/index.js +3 -2
  162. package/dist/pagination/index.js +2 -2
  163. package/dist/popover/index.js +3 -2
  164. package/dist/progress/index.js +2 -2
  165. package/dist/radio/index.js +3 -2
  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 -4
  170. package/dist/skeleton/index.js +3 -2
  171. package/dist/slider/index.js +2 -2
  172. package/dist/spinner/index.js +3 -2
  173. package/dist/stepper/index.js +2 -2
  174. package/dist/styles/base.css +2165 -1375
  175. package/dist/styles/global.css +2393 -1036
  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 -2
  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 -2
  192. package/dist/transfer/index.js +4 -4
  193. package/dist/tree/index.js +2 -2
  194. package/dist/tree-select/index.js +5 -4
  195. package/dist/upload/index.js +2 -2
  196. package/package.json +460 -70
  197. package/dist/chunk-267WNY3E.js.map +0 -1
  198. package/dist/chunk-2EKAF6EJ.js +0 -128
  199. package/dist/chunk-2EKAF6EJ.js.map +0 -1
  200. package/dist/chunk-3PFA3YG6.js +0 -228
  201. package/dist/chunk-3PFA3YG6.js.map +0 -1
  202. package/dist/chunk-56IXGP5C.js +0 -56
  203. package/dist/chunk-56IXGP5C.js.map +0 -1
  204. package/dist/chunk-5UEWVFF6.js +0 -212
  205. package/dist/chunk-5UEWVFF6.js.map +0 -1
  206. package/dist/chunk-6V5I5HJ2.js +0 -39
  207. package/dist/chunk-6V5I5HJ2.js.map +0 -1
  208. package/dist/chunk-75XESYGN.js.map +0 -1
  209. package/dist/chunk-7PKVBUGL.js.map +0 -1
  210. package/dist/chunk-ASW7TEAN.js.map +0 -1
  211. package/dist/chunk-AWPKZYHT.js +0 -152
  212. package/dist/chunk-AWPKZYHT.js.map +0 -1
  213. package/dist/chunk-BFO3ARVJ.js +0 -104
  214. package/dist/chunk-BFO3ARVJ.js.map +0 -1
  215. package/dist/chunk-BNILRB4T.js.map +0 -1
  216. package/dist/chunk-BP434VYV.js.map +0 -1
  217. package/dist/chunk-C3MX5EXL.js +0 -95
  218. package/dist/chunk-C3MX5EXL.js.map +0 -1
  219. package/dist/chunk-C7SXY3ZV.js.map +0 -1
  220. package/dist/chunk-D3JWPGCA.js.map +0 -1
  221. package/dist/chunk-DOKTHDG3.js.map +0 -1
  222. package/dist/chunk-DPOSWW22.js.map +0 -1
  223. package/dist/chunk-FCMVKFVV.js.map +0 -1
  224. package/dist/chunk-FGWSUPVW.js.map +0 -1
  225. package/dist/chunk-FPOXTCYV.js.map +0 -1
  226. package/dist/chunk-FYHQDFKE.js +0 -164
  227. package/dist/chunk-FYHQDFKE.js.map +0 -1
  228. package/dist/chunk-G6TAVRTJ.js +0 -640
  229. package/dist/chunk-G6TAVRTJ.js.map +0 -1
  230. package/dist/chunk-GEWR5ROK.js +0 -102
  231. package/dist/chunk-GEWR5ROK.js.map +0 -1
  232. package/dist/chunk-HUVXKOJC.js.map +0 -1
  233. package/dist/chunk-I5ANSIDK.js.map +0 -1
  234. package/dist/chunk-J3G5WWGR.js.map +0 -1
  235. package/dist/chunk-JLTDJ3VZ.js +0 -452
  236. package/dist/chunk-JLTDJ3VZ.js.map +0 -1
  237. package/dist/chunk-KBCBVH7B.js +0 -51
  238. package/dist/chunk-KBCBVH7B.js.map +0 -1
  239. package/dist/chunk-KNQ7UQ2W.js +0 -143
  240. package/dist/chunk-KNQ7UQ2W.js.map +0 -1
  241. package/dist/chunk-KTAIRCOL.js +0 -100
  242. package/dist/chunk-KTAIRCOL.js.map +0 -1
  243. package/dist/chunk-LEKLQR4I.js.map +0 -1
  244. package/dist/chunk-MLDX3Z67.js +0 -470
  245. package/dist/chunk-MLDX3Z67.js.map +0 -1
  246. package/dist/chunk-NNSS366W.js.map +0 -1
  247. package/dist/chunk-OALOWWO7.js.map +0 -1
  248. package/dist/chunk-OOS3B7YZ.js +0 -94
  249. package/dist/chunk-OOS3B7YZ.js.map +0 -1
  250. package/dist/chunk-OQANRZPV.js +0 -197
  251. package/dist/chunk-OQANRZPV.js.map +0 -1
  252. package/dist/chunk-OW5A5IIF.js +0 -175
  253. package/dist/chunk-OW5A5IIF.js.map +0 -1
  254. package/dist/chunk-QPJL66S7.js.map +0 -1
  255. package/dist/chunk-R225A5II.js.map +0 -1
  256. package/dist/chunk-RMGIO27V.js.map +0 -1
  257. package/dist/chunk-ROR4E6IE.js.map +0 -1
  258. package/dist/chunk-RPAQAZTI.js.map +0 -1
  259. package/dist/chunk-S5XJXU52.js +0 -178
  260. package/dist/chunk-S5XJXU52.js.map +0 -1
  261. package/dist/chunk-SAVE5ACL.js.map +0 -1
  262. package/dist/chunk-SK5ECBBK.js.map +0 -1
  263. package/dist/chunk-SOV4PE3P.js.map +0 -1
  264. package/dist/chunk-UAMFKX6L.js.map +0 -1
  265. package/dist/chunk-XMAH5PDW.js.map +0 -1
  266. package/dist/chunk-XMKNYG7I.js +0 -181
  267. package/dist/chunk-XMKNYG7I.js.map +0 -1
  268. package/dist/chunk-Y5A26EGR.js.map +0 -1
  269. package/dist/chunk-YNNAOXU5.js.map +0 -1
  270. package/dist/chunk-YZ6V6BQ7.js +0 -134
  271. package/dist/chunk-YZ6V6BQ7.js.map +0 -1
  272. package/dist/chunk-YZVSDRJD.js +0 -253
  273. package/dist/chunk-YZVSDRJD.js.map +0 -1
  274. package/dist/chunk-ZNJ7M5QK.js.map +0 -1
@@ -0,0 +1,205 @@
1
+ import { createAllColorVariants, componentColors } from './chunk-NTPWR57C.js';
2
+ import { cn } from './chunk-NGYLRX6F.js';
3
+ import { cva } from 'class-variance-authority';
4
+ import React from 'react';
5
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
+
7
+ var processingRingClasses = {
8
+ default: "bg-surface/50",
9
+ primary: "bg-primary/50",
10
+ secondary: "bg-secondary/50",
11
+ accent: "bg-accent/50",
12
+ success: "bg-success/50",
13
+ error: "bg-error/50",
14
+ warning: "bg-warning/50",
15
+ info: "bg-info/50"
16
+ };
17
+ var badgeVariants = cva(
18
+ "inline-flex items-center justify-center whitespace-nowrap font-medium transition-all",
19
+ {
20
+ variants: {
21
+ variant: {
22
+ default: "border",
23
+ solid: "",
24
+ outline: "border",
25
+ soft: ""
26
+ },
27
+ color: {
28
+ default: "",
29
+ primary: "",
30
+ secondary: "",
31
+ accent: "",
32
+ success: "",
33
+ error: "",
34
+ warning: "",
35
+ info: ""
36
+ },
37
+ size: {
38
+ xs: "text-(length:--badge-font-size-xs) px-(--badge-padding-x-xs) py-(--badge-padding-y-xs)",
39
+ sm: "text-(length:--badge-font-size-sm) px-(--badge-padding-x-sm) py-(--badge-padding-y-sm)",
40
+ md: "text-(length:--badge-font-size-md) px-(--badge-padding-x-md) py-(--badge-padding-y-md)",
41
+ lg: "text-(length:--badge-font-size-lg) px-(--badge-padding-x-lg) py-(--badge-padding-y-lg)"
42
+ },
43
+ shape: {
44
+ rounded: "rounded",
45
+ pill: "rounded-full",
46
+ circle: "rounded-full aspect-square"
47
+ }
48
+ },
49
+ compoundVariants: createAllColorVariants(componentColors, [
50
+ "default",
51
+ "solid",
52
+ "outline",
53
+ "soft"
54
+ ]),
55
+ defaultVariants: {
56
+ variant: "solid",
57
+ color: "primary",
58
+ size: "sm",
59
+ shape: "rounded"
60
+ }
61
+ }
62
+ );
63
+ var dotSizeClasses = {
64
+ xs: "size-1.5",
65
+ sm: "size-2",
66
+ md: "size-2.5",
67
+ lg: "size-3"
68
+ };
69
+ var iconSizeClasses = {
70
+ xs: "size-2.5",
71
+ sm: "size-3",
72
+ md: "size-3.5",
73
+ lg: "size-4"
74
+ };
75
+ var placementClasses = {
76
+ "top-right": "top-0 right-0 -translate-y-1/2 translate-x-1/2",
77
+ "top-left": "top-0 left-0 -translate-y-1/2 -translate-x-1/2",
78
+ "bottom-right": "bottom-0 right-0 translate-y-1/2 translate-x-1/2",
79
+ "bottom-left": "bottom-0 left-0 translate-y-1/2 -translate-x-1/2"
80
+ };
81
+ var Badge = React.memo(
82
+ ({
83
+ children,
84
+ color = "primary",
85
+ variant = "solid",
86
+ size = "sm",
87
+ shape = "rounded",
88
+ dot = false,
89
+ count,
90
+ maxCount = 99,
91
+ showZero = false,
92
+ icon,
93
+ placement = "top-right",
94
+ offset,
95
+ processing = false,
96
+ invisible = false,
97
+ standalone = false,
98
+ content,
99
+ className,
100
+ wrapperClassName,
101
+ ref
102
+ }) => {
103
+ const getDisplayCount = () => {
104
+ if (count === void 0) return null;
105
+ if (count === 0 && !showZero) return null;
106
+ if (count > maxCount) return `${maxCount}+`;
107
+ return count;
108
+ };
109
+ const displayCount = getDisplayCount();
110
+ const isFloatingMode = children && (count !== void 0 || dot || content) && !standalone;
111
+ if (count !== void 0 && count === 0 && !showZero && !children && !content) {
112
+ return null;
113
+ }
114
+ const offsetStyles = offset ? {
115
+ "--badge-offset-x": `${offset[0]}px`,
116
+ "--badge-offset-y": `${offset[1]}px`
117
+ } : void 0;
118
+ const renderBadge = (badgeContent) => /* @__PURE__ */ jsx(
119
+ "span",
120
+ {
121
+ ref,
122
+ "data-slot": "root",
123
+ className: cn(
124
+ "badge_root",
125
+ badgeVariants({ variant, color, size, shape }),
126
+ dot && ["p-0", dotSizeClasses[size], "min-w-0"],
127
+ processing && "animate-pulse",
128
+ invisible && "opacity-0 scale-0",
129
+ "z-10",
130
+ className
131
+ ),
132
+ style: offsetStyles,
133
+ children: !dot && /* @__PURE__ */ jsxs(Fragment, { children: [
134
+ icon && /* @__PURE__ */ jsx(
135
+ "span",
136
+ {
137
+ className: cn(
138
+ "inline-flex items-center justify-center shrink-0",
139
+ iconSizeClasses[size],
140
+ badgeContent && "mr-1"
141
+ ),
142
+ children: React.isValidElement(icon) ? React.cloneElement(
143
+ icon,
144
+ {
145
+ className: cn(
146
+ "w-full h-full",
147
+ icon.props.className
148
+ )
149
+ }
150
+ ) : icon
151
+ }
152
+ ),
153
+ badgeContent
154
+ ] })
155
+ }
156
+ );
157
+ const renderProcessingRing = () => processing && dot && !invisible && /* @__PURE__ */ jsx(
158
+ "span",
159
+ {
160
+ className: cn(
161
+ "absolute inset-0 rounded-full animate-ping",
162
+ processingRingClasses[color]
163
+ )
164
+ }
165
+ );
166
+ if (isFloatingMode) {
167
+ const floatingContent = content ?? displayCount;
168
+ if (count !== void 0 && count === 0 && !showZero && !dot && !content) {
169
+ return /* @__PURE__ */ jsx("span", { className: cn("relative inline-flex", wrapperClassName), children });
170
+ }
171
+ return /* @__PURE__ */ jsxs("span", { className: cn("relative inline-flex", wrapperClassName), children: [
172
+ children,
173
+ /* @__PURE__ */ jsx(
174
+ "span",
175
+ {
176
+ className: cn(
177
+ "absolute",
178
+ placementClasses[placement],
179
+ offset && "translate-x-[calc(var(--tw-translate-x)+var(--badge-offset-x,0px))] translate-y-[calc(var(--tw-translate-y)+var(--badge-offset-y,0px))]"
180
+ ),
181
+ style: offsetStyles,
182
+ children: /* @__PURE__ */ jsxs("span", { className: "relative inline-flex", children: [
183
+ renderBadge(floatingContent),
184
+ renderProcessingRing()
185
+ ] })
186
+ }
187
+ )
188
+ ] });
189
+ }
190
+ const standaloneContent = content ?? (count !== void 0 ? displayCount : children);
191
+ if (dot && processing) {
192
+ return /* @__PURE__ */ jsxs("span", { className: cn("relative inline-flex", wrapperClassName), children: [
193
+ renderBadge(null),
194
+ renderProcessingRing()
195
+ ] });
196
+ }
197
+ return renderBadge(standaloneContent);
198
+ }
199
+ );
200
+ Badge.displayName = "Badge";
201
+ var badge_default = Badge;
202
+
203
+ export { badge_default };
204
+ //# sourceMappingURL=chunk-JLS4MBHN.js.map
205
+ //# sourceMappingURL=chunk-JLS4MBHN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/badge/index.tsx"],"names":[],"mappings":"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","file":"chunk-JLS4MBHN.js","sourcesContent":["import { cva } from \"class-variance-authority\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { componentColors, createAllColorVariants } from \"../variants\";\nimport type { BadgeColor, BadgePlacement, BadgeProps, BadgeSize } from \"./types\";\n\n/**\n * Processing ring color classes for ping animation\n */\nconst processingRingClasses: Record<BadgeColor, string> = {\n default: \"bg-surface/50\",\n primary: \"bg-primary/50\",\n secondary: \"bg-secondary/50\",\n accent: \"bg-accent/50\",\n success: \"bg-success/50\",\n error: \"bg-error/50\",\n warning: \"bg-warning/50\",\n info: \"bg-info/50\",\n};\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap font-medium transition-all\",\n {\n variants: {\n variant: {\n default: \"border\",\n solid: \"\",\n outline: \"border\",\n soft: \"\",\n },\n color: {\n default: \"\",\n primary: \"\",\n secondary: \"\",\n accent: \"\",\n success: \"\",\n error: \"\",\n warning: \"\",\n info: \"\",\n },\n size: {\n xs: \"text-(length:--badge-font-size-xs) px-(--badge-padding-x-xs) py-(--badge-padding-y-xs)\",\n sm: \"text-(length:--badge-font-size-sm) px-(--badge-padding-x-sm) py-(--badge-padding-y-sm)\",\n md: \"text-(length:--badge-font-size-md) px-(--badge-padding-x-md) py-(--badge-padding-y-md)\",\n lg: \"text-(length:--badge-font-size-lg) px-(--badge-padding-x-lg) py-(--badge-padding-y-lg)\",\n },\n shape: {\n rounded: \"rounded\",\n pill: \"rounded-full\",\n circle: \"rounded-full aspect-square\",\n },\n },\n compoundVariants: createAllColorVariants(componentColors, [\n \"default\",\n \"solid\",\n \"outline\",\n \"soft\",\n ]),\n defaultVariants: {\n variant: \"solid\",\n color: \"primary\",\n size: \"sm\",\n shape: \"rounded\",\n },\n },\n);\n\n/**\n * Dot size classes based on badge size\n */\nconst dotSizeClasses: Record<BadgeSize, string> = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n};\n\n/**\n * Icon size classes based on badge size\n */\nconst iconSizeClasses: Record<BadgeSize, string> = {\n xs: \"size-2.5\",\n sm: \"size-3\",\n md: \"size-3.5\",\n lg: \"size-4\",\n};\n\n/**\n * Placement position classes for floating badges\n */\nconst placementClasses: Record<BadgePlacement, string> = {\n \"top-right\": \"top-0 right-0 -translate-y-1/2 translate-x-1/2\",\n \"top-left\": \"top-0 left-0 -translate-y-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-0 right-0 translate-y-1/2 translate-x-1/2\",\n \"bottom-left\": \"bottom-0 left-0 translate-y-1/2 -translate-x-1/2\",\n};\n\n/**\n * Badge Component\n *\n * A versatile badge component for displaying counts, status indicators, or labels.\n * Can be used standalone or as a floating indicator over other elements.\n *\n * @example\n * // Standalone badge\n * <Badge>New</Badge>\n *\n * @example\n * // Badge with count floating over an icon\n * <Badge count={5}>\n * <BellIcon />\n * </Badge>\n *\n * @example\n * // Dot indicator with pulse\n * <Badge dot processing color=\"success\">\n * <Avatar />\n * </Badge>\n */\nconst Badge = React.memo<BadgeProps>(\n ({\n children,\n color = \"primary\",\n variant = \"solid\",\n size = \"sm\",\n shape = \"rounded\",\n dot = false,\n count,\n maxCount = 99,\n showZero = false,\n icon,\n placement = \"top-right\",\n offset,\n processing = false,\n invisible = false,\n standalone = false,\n content,\n className,\n wrapperClassName,\n ref,\n }) => {\n // Calculate display count\n const getDisplayCount = () => {\n if (count === undefined) return null;\n if (count === 0 && !showZero) return null;\n if (count > maxCount) return `${maxCount}+`;\n return count;\n };\n\n const displayCount = getDisplayCount();\n\n // Determine if we're in \"floating\" mode (badge over children) or \"standalone\" mode\n // Floating mode: children + (count OR dot OR content)\n // Standalone mode: just children as badge text, or count/dot without wrapping element\n const isFloatingMode =\n children && (count !== undefined || dot || content) && !standalone;\n\n // Don't render if count is 0 and showZero is false (when no children or content)\n if (\n count !== undefined &&\n count === 0 &&\n !showZero &&\n !children &&\n !content\n ) {\n return null;\n }\n\n // Calculate offset styles\n const offsetStyles = offset\n ? {\n \"--badge-offset-x\": `${offset[0]}px`,\n \"--badge-offset-y\": `${offset[1]}px`,\n }\n : undefined;\n\n // Render the badge element itself\n const renderBadge = (badgeContent: React.ReactNode) => (\n <span\n ref={ref}\n data-slot=\"root\"\n className={cn(\n \"badge_root\",\n badgeVariants({ variant, color, size, shape }),\n dot && [\"p-0\", dotSizeClasses[size], \"min-w-0\"],\n processing && \"animate-pulse\",\n invisible && \"opacity-0 scale-0\",\n \"z-10\",\n className,\n )}\n style={offsetStyles as React.CSSProperties}\n >\n {!dot && (\n <>\n {icon && (\n <span\n className={cn(\n \"inline-flex items-center justify-center shrink-0\",\n iconSizeClasses[size],\n badgeContent && \"mr-1\",\n )}\n >\n {React.isValidElement(icon)\n ? React.cloneElement(\n icon as React.ReactElement<{ className?: string }>,\n {\n className: cn(\n \"w-full h-full\",\n (icon as React.ReactElement<{ className?: string }>)\n .props.className,\n ),\n },\n )\n : icon}\n </span>\n )}\n {badgeContent}\n </>\n )}\n </span>\n );\n\n // Processing animation ring (for dot badges)\n const renderProcessingRing = () =>\n processing &&\n dot &&\n !invisible && (\n <span\n className={cn(\n \"absolute inset-0 rounded-full animate-ping\",\n processingRingClasses[color],\n )}\n />\n );\n\n // FLOATING MODE: Badge positioned over children\n if (isFloatingMode) {\n const floatingContent = content ?? displayCount;\n\n // Hide badge if count is 0 and showZero is false\n if (count !== undefined && count === 0 && !showZero && !dot && !content) {\n return (\n <span className={cn(\"relative inline-flex\", wrapperClassName)}>\n {children}\n </span>\n );\n }\n\n return (\n <span className={cn(\"relative inline-flex\", wrapperClassName)}>\n {children}\n <span\n className={cn(\n \"absolute\",\n placementClasses[placement],\n offset &&\n \"translate-x-[calc(var(--tw-translate-x)+var(--badge-offset-x,0px))] translate-y-[calc(var(--tw-translate-y)+var(--badge-offset-y,0px))]\",\n )}\n style={offsetStyles as React.CSSProperties}\n >\n <span className=\"relative inline-flex\">\n {renderBadge(floatingContent)}\n {renderProcessingRing()}\n </span>\n </span>\n </span>\n );\n }\n\n // STANDALONE MODE: Badge as inline element\n // Content priority: content prop > count > children\n const standaloneContent =\n content ?? (count !== undefined ? displayCount : children);\n\n if (dot && processing) {\n return (\n <span className={cn(\"relative inline-flex\", wrapperClassName)}>\n {renderBadge(null)}\n {renderProcessingRing()}\n </span>\n );\n }\n\n return renderBadge(standaloneContent);\n },\n);\n\nBadge.displayName = \"Badge\";\n\nexport type * from \"./types\";\nexport default Badge;\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-YNNAOXU5.js';
1
+ import { cn } from './chunk-NGYLRX6F.js';
2
2
  import { cva } from 'class-variance-authority';
3
3
  import React, { useState } from 'react';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -101,7 +101,8 @@ var ToggleGroup = React.memo(
101
101
  fullWidth = false,
102
102
  disabled = false,
103
103
  className,
104
- centered = false
104
+ centered = false,
105
+ classNames
105
106
  }) => {
106
107
  const [internalValue, setInternalValue] = useState(
107
108
  defaultValue || (multiple ? [] : options[0]?.value || "")
@@ -134,27 +135,35 @@ var ToggleGroup = React.memo(
134
135
  return /* @__PURE__ */ jsx(
135
136
  "div",
136
137
  {
138
+ role: "group",
137
139
  className: cn(
140
+ "toggleGroup_root",
138
141
  toggleGroupVariants({ size }),
139
142
  "border-border bg-background",
143
+ classNames?.root,
140
144
  className,
141
- fullWidth && `grid w-full grid-cols-${options.length}`
145
+ fullWidth && "grid w-full"
142
146
  ),
147
+ style: fullWidth ? { gridTemplateColumns: `repeat(${options.length}, 1fr)` } : void 0,
143
148
  children: options.map((option) => {
144
149
  const active = isActive(option.value);
145
150
  const isDisabled = disabled || option.disabled;
146
151
  return /* @__PURE__ */ jsx(
147
152
  "button",
148
153
  {
154
+ type: "button",
149
155
  className: cn(
156
+ "toggleGroup_item",
150
157
  toggleItemVariants({ size }),
151
158
  getToggleClasses(color, variant, active),
152
159
  "border-border flex items-center justify-center",
153
160
  isDisabled && "opacity-50 cursor-not-allowed",
154
- centered && "text-center"
161
+ centered && "text-center",
162
+ classNames?.item
155
163
  ),
156
164
  onClick: () => handleToggleClick(option.value, option.disabled),
157
165
  disabled: isDisabled,
166
+ "aria-pressed": active,
158
167
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
159
168
  option.icon,
160
169
  option.label
@@ -171,5 +180,5 @@ ToggleGroup.displayName = "ToggleGroup";
171
180
  var toggle_group_default = ToggleGroup;
172
181
 
173
182
  export { ToggleGroup, toggle_group_default };
174
- //# sourceMappingURL=chunk-SK5ECBBK.js.map
175
- //# sourceMappingURL=chunk-SK5ECBBK.js.map
183
+ //# sourceMappingURL=chunk-KTHWXHDN.js.map
184
+ //# sourceMappingURL=chunk-KTHWXHDN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/toggle-group/index.tsx"],"names":[],"mappings":"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","file":"chunk-KTHWXHDN.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React, { useState } from 'react'\n\nimport { cn } from '../utils'\nimport type { ToggleGroupProps } from './types'\n\nconst toggleGroupVariants = cva(\n 'inline-flex border rounded-md overflow-hidden',\n {\n variants: {\n size: {\n xs: 'gap-0',\n sm: 'gap-0',\n md: 'gap-0',\n lg: 'gap-0',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst toggleItemVariants = cva(\n 'font-medium transition-colors cursor-pointer border-r last:border-r-0',\n {\n variants: {\n size: {\n xs: 'text-xs px-2 py-1',\n sm: 'text-sm px-3 py-1.5',\n md: 'text-base px-4 py-2',\n lg: 'text-lg px-5 py-2.5',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\n// Inactive hover states for each color\nconst inactiveHoverClasses = {\n default: 'text-text-secondary hover:text-text-primary hover:bg-surface',\n primary: 'text-text-secondary hover:text-primary hover:bg-primary/10',\n secondary: 'text-text-secondary hover:text-secondary hover:bg-secondary/10',\n accent: 'text-text-secondary hover:text-accent hover:bg-accent/10',\n success: 'text-text-secondary hover:text-success hover:bg-success/10',\n error: 'text-text-secondary hover:text-error hover:bg-error/10',\n warning: 'text-text-secondary hover:text-warning hover:bg-warning/10',\n info: 'text-text-secondary hover:text-info hover:bg-info/10',\n} as const\n\n// Active solid variant classes\nconst activeSolidClasses = {\n default: 'bg-border text-text-primary',\n primary: 'bg-primary text-background',\n secondary: 'bg-secondary text-background',\n accent: 'bg-accent text-background',\n success: 'bg-success text-background',\n error: 'bg-error text-background',\n warning: 'bg-warning text-background',\n info: 'bg-info text-background',\n} as const\n\n// Active soft variant classes\nconst activeSoftClasses = {\n default: 'bg-border/20 text-text-primary',\n primary: 'bg-primary/20 text-primary',\n secondary: 'bg-secondary/20 text-secondary',\n accent: 'bg-accent/20 text-accent',\n success: 'bg-success/20 text-success',\n error: 'bg-error/20 text-error',\n warning: 'bg-warning/20 text-warning',\n info: 'bg-info/20 text-info',\n} as const\n\n// Active default variant classes\nconst activeDefaultClasses = {\n default: 'bg-surface text-text-primary',\n primary: 'border-primary bg-primary/10 text-primary',\n secondary: 'border-secondary bg-secondary/10 text-secondary',\n accent: 'border-accent bg-accent/10 text-accent',\n success: 'border-success bg-success/10 text-success',\n error: 'border-error bg-error/10 text-error',\n warning: 'border-warning bg-warning/10 text-warning',\n info: 'border-info bg-info/10 text-info',\n} as const\n\ntype ToggleColor = keyof typeof inactiveHoverClasses\n\nconst getToggleClasses = (\n color: string,\n variant: string,\n isActive: boolean,\n) => {\n const toggleColor = color as ToggleColor\n\n if (!isActive) {\n return inactiveHoverClasses[toggleColor] || inactiveHoverClasses.default\n }\n\n // Active state\n if (variant === 'solid') {\n return activeSolidClasses[toggleColor] || activeSolidClasses.default\n }\n if (variant === 'soft') {\n return activeSoftClasses[toggleColor] || activeSoftClasses.default\n }\n return activeDefaultClasses[toggleColor] || activeDefaultClasses.default\n}\n\nexport const ToggleGroup = React.memo<ToggleGroupProps>(\n ({\n options,\n value: controlledValue,\n defaultValue,\n multiple = false,\n color = 'primary',\n size = 'md',\n variant = 'default',\n onChange,\n fullWidth = false,\n disabled = false,\n className,\n centered = false,\n classNames,\n }) => {\n const [internalValue, setInternalValue] = useState<string | string[]>(\n defaultValue || (multiple ? [] : options[0]?.value || ''),\n )\n\n const value =\n controlledValue !== undefined ? controlledValue : internalValue\n\n const handleToggleClick = (\n optionValue: string,\n optionDisabled?: boolean,\n ) => {\n if (disabled || optionDisabled) return\n\n let newValue: string | string[]\n\n if (multiple) {\n const currentValues = Array.isArray(value) ? value : []\n if (currentValues.includes(optionValue)) {\n newValue = currentValues.filter((v) => v !== optionValue)\n } else {\n newValue = [...currentValues, optionValue]\n }\n } else {\n newValue = optionValue\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const isActive = (optionValue: string) => {\n if (multiple && Array.isArray(value)) {\n return value.includes(optionValue)\n }\n return optionValue === value\n }\n\n return (\n <div\n role=\"group\"\n className={cn(\n 'toggleGroup_root',\n toggleGroupVariants({ size }),\n 'border-border bg-background',\n classNames?.root,\n className,\n fullWidth && 'grid w-full',\n )}\n style={fullWidth ? { gridTemplateColumns: `repeat(${options.length}, 1fr)` } : undefined}\n >\n {options.map((option) => {\n const active = isActive(option.value)\n const isDisabled = disabled || option.disabled\n\n return (\n <button\n type=\"button\"\n key={option.value}\n className={cn(\n 'toggleGroup_item',\n toggleItemVariants({ size }),\n getToggleClasses(color, variant, active),\n\n 'border-border flex items-center justify-center',\n isDisabled && 'opacity-50 cursor-not-allowed',\n centered && 'text-center',\n classNames?.item,\n )}\n onClick={() => handleToggleClick(option.value, option.disabled)}\n disabled={isDisabled}\n aria-pressed={active}\n >\n <div className=\"flex items-center gap-2\">\n {option.icon}\n {option.label}\n </div>\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nToggleGroup.displayName = 'ToggleGroup'\n\nexport type * from './types'\nexport default ToggleGroup\n"]}
@@ -1,4 +1,4 @@
1
- import { cn, iconSizes } from './chunk-YNNAOXU5.js';
1
+ import { cn, iconSizes } from './chunk-NGYLRX6F.js';
2
2
  import { cva } from 'class-variance-authority';
3
3
  import { ChevronDown } from 'lucide-react';
4
4
  import React, { useState } from 'react';
@@ -149,10 +149,13 @@ var Collapse = React.memo(
149
149
  open: controlledOpen,
150
150
  onChange,
151
151
  disabled = false,
152
- className
152
+ className,
153
+ classNames,
154
+ ref
153
155
  }) => {
154
156
  const [internalOpen, setInternalOpen] = useState(defaultOpen);
155
157
  const isOpen = controlledOpen !== void 0 ? controlledOpen : internalOpen;
158
+ const contentId = React.useId();
156
159
  const handleToggle = () => {
157
160
  if (disabled) return;
158
161
  const newOpen = !isOpen;
@@ -164,9 +167,12 @@ var Collapse = React.memo(
164
167
  return /* @__PURE__ */ jsxs(
165
168
  "div",
166
169
  {
170
+ ref,
167
171
  className: cn(
172
+ "collapse_root",
168
173
  collapseVariants({ size }),
169
174
  colorStyles[color][variant],
175
+ classNames?.root,
170
176
  className
171
177
  ),
172
178
  children: [
@@ -176,9 +182,13 @@ var Collapse = React.memo(
176
182
  type: "button",
177
183
  onClick: handleToggle,
178
184
  disabled,
185
+ "aria-expanded": isOpen,
186
+ "aria-controls": contentId,
179
187
  className: cn(
188
+ "collapse_header",
180
189
  collapseHeaderVariants({ size, disabled }),
181
- headerColorStyles[color][variant]
190
+ headerColorStyles[color][variant],
191
+ classNames?.header
182
192
  ),
183
193
  children: [
184
194
  /* @__PURE__ */ jsx("span", { children: title }),
@@ -186,9 +196,11 @@ var Collapse = React.memo(
186
196
  ChevronDown,
187
197
  {
188
198
  className: cn(
199
+ "collapse_icon",
189
200
  iconSizes[size],
190
201
  "transition-transform duration-300 ease-out flex-shrink-0",
191
- isOpen && "rotate-180"
202
+ isOpen && "rotate-180",
203
+ classNames?.icon
192
204
  )
193
205
  }
194
206
  )
@@ -198,11 +210,17 @@ var Collapse = React.memo(
198
210
  /* @__PURE__ */ jsx(
199
211
  "div",
200
212
  {
213
+ id: contentId,
214
+ role: "region",
201
215
  className: cn(
202
216
  "grid transition-[grid-template-rows] duration-300 ease-out",
203
217
  isOpen ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
204
218
  ),
205
- children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: collapseContentVariants({ size }), children }) })
219
+ children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: cn(
220
+ "collapse_content",
221
+ collapseContentVariants({ size }),
222
+ classNames?.content
223
+ ), children }) })
206
224
  }
207
225
  )
208
226
  ]
@@ -214,5 +232,5 @@ Collapse.displayName = "Collapse";
214
232
  var collapse_default = Collapse;
215
233
 
216
234
  export { collapse_default };
217
- //# sourceMappingURL=chunk-SOV4PE3P.js.map
218
- //# sourceMappingURL=chunk-SOV4PE3P.js.map
235
+ //# sourceMappingURL=chunk-LMR7TKDJ.js.map
236
+ //# sourceMappingURL=chunk-LMR7TKDJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/collapse/index.tsx"],"names":[],"mappings":"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","file":"chunk-LMR7TKDJ.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport { ChevronDown } from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { cn, iconSizes } from '../utils'\nimport type { CollapseProps } from './types'\n\nconst collapseVariants = cva(\n 'w-full border rounded-md transition-all overflow-hidden',\n {\n variants: {\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst collapseHeaderVariants = cva(\n 'w-full flex items-center justify-between cursor-pointer transition-colors font-medium',\n {\n variants: {\n size: {\n xs: 'px-2 py-1.5 text-xs',\n sm: 'px-3 py-2 text-sm',\n md: 'px-4 py-3 text-base',\n lg: 'px-5 py-4 text-lg',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n disabled: false,\n },\n },\n)\n\nconst collapseContentVariants = cva('transition-all', {\n variants: {\n size: {\n xs: 'px-2 pb-2 text-xs',\n sm: 'px-3 pb-3 text-sm',\n md: 'px-4 pb-4 text-base',\n lg: 'px-5 pb-5 text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst colorStyles = {\n default: {\n default: 'border-border bg-background text-text-primary',\n solid: 'border-border bg-surface text-text-primary',\n soft: 'border-border bg-surface/50 text-text-primary',\n },\n primary: {\n default: 'border-primary bg-background text-text-primary',\n solid: 'border-primary bg-primary text-background',\n soft: 'border-primary/30 bg-primary/10 text-text-primary',\n },\n secondary: {\n default: 'border-secondary bg-background text-text-primary',\n solid: 'border-secondary bg-secondary text-background',\n soft: 'border-secondary/30 bg-secondary/10 text-text-primary',\n },\n accent: {\n default: 'border-accent bg-background text-text-primary',\n solid: 'border-accent bg-accent text-background',\n soft: 'border-accent/30 bg-accent/10 text-text-primary',\n },\n success: {\n default: 'border-success bg-background text-text-primary',\n solid: 'border-success bg-success text-background',\n soft: 'border-success/30 bg-success/10 text-text-primary',\n },\n error: {\n default: 'border-error bg-background text-text-primary',\n solid: 'border-error bg-error text-background',\n soft: 'border-error/30 bg-error/10 text-text-primary',\n },\n warning: {\n default: 'border-warning bg-background text-text-primary',\n solid: 'border-warning bg-warning text-background',\n soft: 'border-warning/30 bg-warning/10 text-text-primary',\n },\n info: {\n default: 'border-info bg-background text-text-primary',\n solid: 'border-info bg-info text-background',\n soft: 'border-info/30 bg-info/10 text-text-primary',\n },\n}\n\nconst headerColorStyles = {\n default: {\n default: 'text-text-primary hover:bg-surface',\n solid: 'text-text-primary hover:bg-surface/80',\n soft: 'text-text-primary hover:bg-surface/80',\n },\n primary: {\n default: 'text-primary hover:bg-primary/10',\n solid: 'hover:bg-primary/90',\n soft: 'text-primary hover:bg-primary/20',\n },\n secondary: {\n default: 'text-secondary hover:bg-secondary/10',\n solid: 'hover:bg-secondary/90',\n soft: 'text-secondary hover:bg-secondary/20',\n },\n accent: {\n default: 'text-accent hover:bg-accent/10',\n solid: 'hover:bg-accent/90',\n soft: 'text-accent hover:bg-accent/20',\n },\n success: {\n default: 'text-success hover:bg-success/10',\n solid: 'hover:bg-success/90',\n soft: 'text-success hover:bg-success/20',\n },\n error: {\n default: 'text-error hover:bg-error/10',\n solid: 'hover:bg-error/90',\n soft: 'text-error hover:bg-error/20',\n },\n warning: {\n default: 'text-warning hover:bg-warning/10',\n solid: 'hover:bg-warning/90',\n soft: 'text-warning hover:bg-warning/20',\n },\n info: {\n default: 'text-info hover:bg-info/10',\n solid: 'hover:bg-info/90',\n soft: 'text-info hover:bg-info/20',\n },\n}\n\nconst Collapse = React.memo<CollapseProps>(\n ({\n title,\n children,\n color = 'default',\n size = 'md',\n variant = 'default',\n defaultOpen = false,\n open: controlledOpen,\n onChange,\n disabled = false,\n className,\n classNames,\n ref,\n }) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n const contentId = React.useId()\n\n const handleToggle = () => {\n if (disabled) return\n\n const newOpen = !isOpen\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onChange?.(newOpen)\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'collapse_root',\n collapseVariants({ size }),\n colorStyles[color][variant],\n classNames?.root,\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={handleToggle}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-controls={contentId}\n className={cn(\n 'collapse_header',\n collapseHeaderVariants({ size, disabled }),\n headerColorStyles[color][variant],\n classNames?.header,\n )}\n >\n <span>{title}</span>\n <ChevronDown\n className={cn(\n 'collapse_icon',\n iconSizes[size],\n 'transition-transform duration-300 ease-out flex-shrink-0',\n isOpen && 'rotate-180',\n classNames?.icon,\n )}\n />\n </button>\n <div\n id={contentId}\n role=\"region\"\n className={cn(\n 'grid transition-[grid-template-rows] duration-300 ease-out',\n isOpen ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n <div className=\"overflow-hidden\">\n <div className={cn(\n 'collapse_content',\n collapseContentVariants({ size }),\n classNames?.content,\n )}>{children}</div>\n </div>\n </div>\n </div>\n )\n },\n)\n\nCollapse.displayName = 'Collapse'\n\nexport type * from './types'\nexport default Collapse\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-YNNAOXU5.js';
1
+ import { cn } from './chunk-NGYLRX6F.js';
2
2
  import { cva } from 'class-variance-authority';
3
3
  import React, { useState, useRef, useCallback } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -171,6 +171,7 @@ var Slider = React.memo(
171
171
  onChange,
172
172
  disabled = false,
173
173
  className,
174
+ classNames,
174
175
  footer = false,
175
176
  range = false
176
177
  }) => {
@@ -251,7 +252,7 @@ var Slider = React.memo(
251
252
  onChange?.(newValue);
252
253
  }
253
254
  };
254
- return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), children: [
255
+ return /* @__PURE__ */ jsxs("div", { className: cn("w-full", "slider_root", classNames?.root, className), children: [
255
256
  /* @__PURE__ */ jsxs(
256
257
  "div",
257
258
  {
@@ -261,7 +262,8 @@ var Slider = React.memo(
261
262
  sliderTrackVariants({ size }),
262
263
  trackColorStyles[color][variant],
263
264
  "relative cursor-pointer",
264
- // ✅ фикс выхода
265
+ "slider_track",
266
+ classNames?.track,
265
267
  disabled && "opacity-50 cursor-not-allowed"
266
268
  ),
267
269
  children: [
@@ -273,7 +275,9 @@ var Slider = React.memo(
273
275
  {
274
276
  className: cn(
275
277
  "absolute h-full rounded-full",
276
- fillColorStyles[color][variant]
278
+ fillColorStyles[color][variant],
279
+ "slider_range",
280
+ classNames?.range
277
281
  ),
278
282
  style: { left: `${left}%`, width: `${right - left}%` }
279
283
  },
@@ -284,7 +288,9 @@ var Slider = React.memo(
284
288
  {
285
289
  className: cn(
286
290
  "absolute h-full rounded-full",
287
- fillColorStyles[color][variant]
291
+ fillColorStyles[color][variant],
292
+ "slider_range",
293
+ classNames?.range
288
294
  ),
289
295
  style: { left: "0%", width: `${getPercentage(values[0] || 0)}%` }
290
296
  }
@@ -296,16 +302,52 @@ var Slider = React.memo(
296
302
  return /* @__PURE__ */ jsx(
297
303
  "div",
298
304
  {
305
+ role: "slider",
306
+ tabIndex: disabled ? -1 : 0,
307
+ "aria-valuemin": min,
308
+ "aria-valuemax": max,
309
+ "aria-valuenow": val,
310
+ "aria-disabled": disabled,
311
+ "aria-label": range ? `Slider thumb ${index + 1}` : "Slider",
299
312
  className: cn(
300
313
  thumbVariants({ size }),
301
314
  thumbColorStyles[color][variant],
302
- disabled && "cursor-not-allowed"
315
+ disabled && "cursor-not-allowed",
316
+ "focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary",
317
+ "slider_thumb",
318
+ classNames?.thumb
303
319
  ),
304
320
  style: {
305
321
  left: `${left}%`,
306
322
  transform: `translate(-50%, -50%) ${isAtStart ? "translateX(50%)" : isAtEnd ? "translateX(-50%)" : ""}`
307
323
  },
308
324
  onMouseDown: handleMouseDown(index),
325
+ onKeyDown: (e) => {
326
+ if (disabled) return;
327
+ let newValue = val;
328
+ if (e.key === "ArrowRight" || e.key === "ArrowUp") {
329
+ newValue = Math.min(max, val + step);
330
+ } else if (e.key === "ArrowLeft" || e.key === "ArrowDown") {
331
+ newValue = Math.max(min, val - step);
332
+ } else if (e.key === "Home") {
333
+ newValue = min;
334
+ } else if (e.key === "End") {
335
+ newValue = max;
336
+ } else {
337
+ return;
338
+ }
339
+ e.preventDefault();
340
+ if (range && Array.isArray(value)) {
341
+ const newValues = [...value];
342
+ newValues[index] = newValue;
343
+ newValues.sort((a, b) => a - b);
344
+ if (!controlledValue) setInternalValue(newValues);
345
+ onChange?.(newValues);
346
+ } else {
347
+ if (!controlledValue) setInternalValue(newValue);
348
+ onChange?.(newValue);
349
+ }
350
+ },
309
351
  children: hoveredThumb === index && /* @__PURE__ */ jsx("div", { className: "absolute -top-8 left-1/2 -translate-x-1/2 bg-text-primary text-background text-xs px-2 py-1 rounded whitespace-nowrap", children: val })
310
352
  },
311
353
  index
@@ -315,9 +357,9 @@ var Slider = React.memo(
315
357
  }
316
358
  ),
317
359
  typeof footer === "boolean" && /* @__PURE__ */ jsxs("div", { className: "flex justify-between mt-1 text-sm text-text-secondary", children: [
318
- /* @__PURE__ */ jsx("span", { children: min }),
319
- /* @__PURE__ */ jsx("span", { className: "font-medium text-text-primary", children: range && Array.isArray(value) ? value.join(" - ") : value }),
320
- /* @__PURE__ */ jsx("span", { children: max })
360
+ /* @__PURE__ */ jsx("span", { className: cn("slider_label", classNames?.label), children: min }),
361
+ /* @__PURE__ */ jsx("span", { className: cn("font-medium text-text-primary", "slider_value", classNames?.value), children: range && Array.isArray(value) ? value.join(" - ") : value }),
362
+ /* @__PURE__ */ jsx("span", { className: cn("slider_label", classNames?.label), children: max })
321
363
  ] }),
322
364
  footer && typeof footer !== "boolean" && footer
323
365
  ] });
@@ -327,5 +369,5 @@ Slider.displayName = "Slider";
327
369
  var slider_default = Slider;
328
370
 
329
371
  export { slider_default };
330
- //# sourceMappingURL=chunk-NNSS366W.js.map
331
- //# sourceMappingURL=chunk-NNSS366W.js.map
372
+ //# sourceMappingURL=chunk-MRFCITKK.js.map
373
+ //# sourceMappingURL=chunk-MRFCITKK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/slider/index.tsx"],"names":[],"mappings":"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","file":"chunk-MRFCITKK.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React, { useCallback, useRef, useState } from 'react'\n\nimport { cn } from '../utils'\nimport type { SliderProps } from './types'\n\nconst sliderTrackVariants = cva('relative rounded-full', {\n variants: {\n size: {\n xs: 'h-1',\n sm: 'h-2',\n md: 'h-3',\n lg: 'h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst thumbVariants = cva(\n 'absolute top-1/2 rounded-full border-2 bg-background cursor-pointer hover:scale-110 active:scale-100 transition-transform duration-150',\n {\n variants: {\n size: {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-4 h-4',\n lg: 'w-6 h-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst trackColorStyles = {\n default: {\n default: 'bg-surface',\n solid: 'bg-border',\n soft: 'bg-surface/50',\n },\n primary: {\n default: 'bg-primary/10',\n solid: 'bg-primary/20',\n soft: 'bg-primary/5',\n },\n secondary: {\n default: 'bg-secondary/10',\n solid: 'bg-secondary/20',\n soft: 'bg-secondary/5',\n },\n accent: {\n default: 'bg-accent/10',\n solid: 'bg-accent/20',\n soft: 'bg-accent/5',\n },\n success: {\n default: 'bg-success/10',\n solid: 'bg-success/20',\n soft: 'bg-success/5',\n },\n error: {\n default: 'bg-error/10',\n solid: 'bg-error/20',\n soft: 'bg-error/5',\n },\n warning: {\n default: 'bg-warning/10',\n solid: 'bg-warning/20',\n soft: 'bg-warning/5',\n },\n info: {\n default: 'bg-info/10',\n solid: 'bg-info/20',\n soft: 'bg-info/5',\n },\n}\n\nconst fillColorStyles = {\n default: {\n default: 'bg-surface border-border',\n solid: 'bg-border',\n soft: 'bg-surface/80',\n },\n primary: {\n default: 'bg-primary/20 border-primary',\n solid: 'bg-primary',\n soft: 'bg-primary/60',\n },\n secondary: {\n default: 'bg-secondary/20 border-secondary',\n solid: 'bg-secondary',\n soft: 'bg-secondary/60',\n },\n accent: {\n default: 'bg-accent/20 border-accent',\n solid: 'bg-accent',\n soft: 'bg-accent/60',\n },\n success: {\n default: 'bg-success/20 border-success',\n solid: 'bg-success',\n soft: 'bg-success/60',\n },\n error: {\n default: 'bg-error/20 border-error',\n solid: 'bg-error',\n soft: 'bg-error/60',\n },\n warning: {\n default: 'bg-warning/20 border-warning',\n solid: 'bg-warning',\n soft: 'bg-warning/60',\n },\n info: {\n default: 'bg-info/20 border-info',\n solid: 'bg-info',\n soft: 'bg-info/60',\n },\n}\n\nconst thumbColorStyles = {\n default: {\n default: 'border-border',\n solid: 'border-border',\n soft: 'border-surface',\n },\n primary: {\n default: 'border-primary',\n solid: 'border-primary',\n soft: 'border-primary/60',\n },\n secondary: {\n default: 'border-secondary',\n solid: 'border-secondary',\n soft: 'border-secondary/60',\n },\n accent: {\n default: 'border-accent',\n solid: 'border-accent',\n soft: 'border-accent/60',\n },\n success: {\n default: 'border-success',\n solid: 'border-success',\n soft: 'border-success/60',\n },\n error: {\n default: 'border-error',\n solid: 'border-error',\n soft: 'border-error/60',\n },\n warning: {\n default: 'border-warning',\n solid: 'border-warning',\n soft: 'border-warning/60',\n },\n info: {\n default: 'border-info',\n solid: 'border-info',\n soft: 'border-info/60',\n },\n}\n\nconst Slider = React.memo<SliderProps>(\n ({\n value: controlledValue,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n color = 'primary',\n size = 'md',\n variant = 'default',\n onChange,\n disabled = false,\n className,\n classNames,\n footer = false,\n range = false,\n }) => {\n const [internalValue, setInternalValue] = useState<number | number[]>(\n defaultValue,\n )\n const [hoveredThumb, setHoveredThumb] = useState<number | null>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n const isDragging = useRef(false)\n const activeThumb = useRef<number>(0)\n\n const value = controlledValue ?? internalValue\n const values = Array.isArray(value) ? value : [value]\n\n const getPercentage = (val: number) => ((val - min) / (max - min)) * 100\n\n const getValue = (clientX: number) => {\n if (!trackRef.current) return min\n const rect = trackRef.current.getBoundingClientRect()\n const percentage = (clientX - rect.left) / rect.width\n const rawValue = min + percentage * (max - min)\n const steppedValue = Math.round(rawValue / step) * step\n return Math.max(min, Math.min(max, steppedValue))\n }\n\n const handleMouseDown = (thumbIndex: number) => (e: React.MouseEvent) => {\n if (disabled) return\n isDragging.current = true\n activeThumb.current = thumbIndex\n setHoveredThumb(thumbIndex)\n e.preventDefault()\n }\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging.current || disabled) return\n const newValue = getValue(e.clientX)\n\n if (range && Array.isArray(value)) {\n const newValues = [...value]\n newValues[activeThumb.current] = newValue\n newValues.sort((a, b) => a - b)\n if (!controlledValue) setInternalValue(newValues)\n onChange?.(newValues)\n } else {\n if (!controlledValue) setInternalValue(newValue)\n onChange?.(newValue)\n }\n },\n [disabled, value, range, controlledValue, min, max, step],\n )\n\n const handleMouseUp = useCallback(() => {\n isDragging.current = false\n setHoveredThumb(null)\n }, [])\n\n React.useEffect(() => {\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n return () => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n }\n }, [handleMouseMove, handleMouseUp])\n\n const handleTrackClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled || isDragging.current) return\n const newValue = getValue(e.clientX)\n\n if (range && Array.isArray(value)) {\n let closestThumbIndex = 0\n let minDistance = Math.abs(newValue - (value[0] || 0))\n for (let i = 1; i < value.length; i++) {\n const distance = Math.abs(newValue - (value[i] || 0))\n if (distance < minDistance) {\n minDistance = distance\n closestThumbIndex = i\n }\n }\n\n const newValues = [...value]\n newValues[closestThumbIndex] = newValue\n newValues.sort((a, b) => a - b)\n if (!controlledValue) setInternalValue(newValues)\n onChange?.(newValues)\n } else {\n if (!controlledValue) setInternalValue(newValue)\n onChange?.(newValue)\n }\n }\n\n return (\n <div className={cn('w-full', 'slider_root', classNames?.root, className)}>\n <div\n ref={trackRef}\n onClick={handleTrackClick}\n className={cn(\n sliderTrackVariants({ size }),\n trackColorStyles[color][variant],\n 'relative cursor-pointer',\n 'slider_track',\n classNames?.track,\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {/* Fill segment */}\n {range && values.length > 1 ? (\n values.slice(0, -1).map((val, index) => {\n const left = getPercentage(val)\n const right = getPercentage(values[index + 1]!)\n return (\n <div\n key={index}\n className={cn(\n 'absolute h-full rounded-full',\n fillColorStyles[color][variant],\n 'slider_range',\n classNames?.range,\n )}\n style={{ left: `${left}%`, width: `${right - left}%` }}\n />\n )\n })\n ) : (\n <div\n className={cn(\n 'absolute h-full rounded-full',\n fillColorStyles[color][variant],\n 'slider_range',\n classNames?.range,\n )}\n style={{ left: '0%', width: `${getPercentage(values[0] || 0)}%` }}\n />\n )}\n\n {/* Thumbs */}\n {values.map((val, index) => {\n const left = getPercentage(val)\n const isAtStart = left <= 0\n const isAtEnd = left >= 100\n return (\n <div\n key={index}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={val}\n aria-disabled={disabled}\n aria-label={range ? `Slider thumb ${index + 1}` : 'Slider'}\n className={cn(\n thumbVariants({ size }),\n thumbColorStyles[color][variant],\n disabled && 'cursor-not-allowed',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary',\n 'slider_thumb',\n classNames?.thumb,\n )}\n style={{\n left: `${left}%`,\n transform: `translate(-50%, -50%) ${\n isAtStart\n ? 'translateX(50%)'\n : isAtEnd\n ? 'translateX(-50%)'\n : ''\n }`,\n }}\n onMouseDown={handleMouseDown(index)}\n onKeyDown={(e) => {\n if (disabled) return\n let newValue = val\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n newValue = Math.min(max, val + step)\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n newValue = Math.max(min, val - step)\n } else if (e.key === 'Home') {\n newValue = min\n } else if (e.key === 'End') {\n newValue = max\n } else {\n return\n }\n e.preventDefault()\n if (range && Array.isArray(value)) {\n const newValues = [...value]\n newValues[index] = newValue\n newValues.sort((a, b) => a - b)\n if (!controlledValue) setInternalValue(newValues)\n onChange?.(newValues)\n } else {\n if (!controlledValue) setInternalValue(newValue)\n onChange?.(newValue)\n }\n }}\n >\n {hoveredThumb === index && (\n <div className=\"absolute -top-8 left-1/2 -translate-x-1/2 bg-text-primary text-background text-xs px-2 py-1 rounded whitespace-nowrap\">\n {val}\n </div>\n )}\n </div>\n )\n })}\n </div>\n\n {typeof footer === 'boolean' && (\n <div className=\"flex justify-between mt-1 text-sm text-text-secondary\">\n <span className={cn('slider_label', classNames?.label)}>{min}</span>\n <span className={cn('font-medium text-text-primary', 'slider_value', classNames?.value)}>\n {range && Array.isArray(value) ? value.join(' - ') : value}\n </span>\n <span className={cn('slider_label', classNames?.label)}>{max}</span>\n </div>\n )}\n {footer && typeof footer !== 'boolean' && footer}\n </div>\n )\n },\n)\n\nSlider.displayName = 'Slider'\n\nexport type * from './types'\nexport default Slider\n"]}