@mdigital_ui/ui 0.3.7 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/dist/accordion/index.d.ts.map +1 -1
  2. package/dist/accordion/index.js +2 -2
  3. package/dist/badge/index.d.ts +1 -1
  4. package/dist/badge/index.d.ts.map +1 -1
  5. package/dist/badge/index.js +2 -2
  6. package/dist/breadcrumbs/index.js +5 -4
  7. package/dist/button/index.d.ts +9 -0
  8. package/dist/button/index.d.ts.map +1 -1
  9. package/dist/button/index.js +4 -3
  10. package/dist/button/types.d.ts +18 -0
  11. package/dist/button/types.d.ts.map +1 -1
  12. package/dist/card/index.d.ts +14 -14
  13. package/dist/card/index.d.ts.map +1 -1
  14. package/dist/card/index.js +2 -2
  15. package/dist/carousel/index.d.ts +1 -1
  16. package/dist/carousel/index.d.ts.map +1 -1
  17. package/dist/carousel/index.js +1 -1
  18. package/dist/cascader/index.js +2 -2
  19. package/dist/checkbox/index.js +2 -2
  20. package/dist/{chunk-7P3Q6H2V.js → chunk-2F5MMMVP.js} +4 -4
  21. package/dist/{chunk-7P3Q6H2V.js.map → chunk-2F5MMMVP.js.map} +1 -1
  22. package/dist/chunk-2TLOWZE4.js +689 -0
  23. package/dist/chunk-2TLOWZE4.js.map +1 -0
  24. package/dist/{chunk-ITCXCSUS.js → chunk-3BZE6BBJ.js} +9 -4
  25. package/dist/chunk-3BZE6BBJ.js.map +1 -0
  26. package/dist/{chunk-6QZFWSN7.js → chunk-3PWILVOE.js} +13 -6
  27. package/dist/chunk-3PWILVOE.js.map +1 -0
  28. package/dist/{chunk-M3AALH7G.js → chunk-4F7U5UPY.js} +16 -8
  29. package/dist/chunk-4F7U5UPY.js.map +1 -0
  30. package/dist/{chunk-QKSDVYKF.js → chunk-4FFVNUTK.js} +5 -8
  31. package/dist/chunk-4FFVNUTK.js.map +1 -0
  32. package/dist/{chunk-OV6K6GML.js → chunk-5QQH5LYU.js} +8 -8
  33. package/dist/chunk-5QQH5LYU.js.map +1 -0
  34. package/dist/{chunk-FCODTRKL.js → chunk-6BAP6QUT.js} +3 -3
  35. package/dist/{chunk-FCODTRKL.js.map → chunk-6BAP6QUT.js.map} +1 -1
  36. package/dist/chunk-6G3BMY4N.js +349 -0
  37. package/dist/chunk-6G3BMY4N.js.map +1 -0
  38. package/dist/{chunk-WMTEAMPB.js → chunk-6LYRMQOI.js} +83 -9
  39. package/dist/chunk-6LYRMQOI.js.map +1 -0
  40. package/dist/{chunk-DUNER5Q3.js → chunk-6YOOKE6C.js} +11 -6
  41. package/dist/chunk-6YOOKE6C.js.map +1 -0
  42. package/dist/chunk-764UKE6X.js +359 -0
  43. package/dist/chunk-764UKE6X.js.map +1 -0
  44. package/dist/{chunk-EGNF7BRT.js → chunk-C4SHFLFR.js} +3 -3
  45. package/dist/{chunk-EGNF7BRT.js.map → chunk-C4SHFLFR.js.map} +1 -1
  46. package/dist/{chunk-ZQTJBYKO.js → chunk-C5IGZLIT.js} +3 -3
  47. package/dist/{chunk-ZQTJBYKO.js.map → chunk-C5IGZLIT.js.map} +1 -1
  48. package/dist/{chunk-SX5UNM6C.js → chunk-CH3YMDCF.js} +6 -6
  49. package/dist/chunk-CH3YMDCF.js.map +1 -0
  50. package/dist/{chunk-I75ZSXD6.js → chunk-DUIL5BYS.js} +3 -3
  51. package/dist/{chunk-I75ZSXD6.js.map → chunk-DUIL5BYS.js.map} +1 -1
  52. package/dist/{chunk-ZPVBIQ2R.js → chunk-EHWXPH76.js} +3 -3
  53. package/dist/chunk-EHWXPH76.js.map +1 -0
  54. package/dist/{chunk-ZSS6E4T2.js → chunk-EPE3OODP.js} +31 -7
  55. package/dist/chunk-EPE3OODP.js.map +1 -0
  56. package/dist/{chunk-E222IQHF.js → chunk-ERRZ2CSG.js} +16 -8
  57. package/dist/chunk-ERRZ2CSG.js.map +1 -0
  58. package/dist/{chunk-GVEEUHM2.js → chunk-FAD45WRP.js} +7 -6
  59. package/dist/chunk-FAD45WRP.js.map +1 -0
  60. package/dist/{chunk-YPHVSPWM.js → chunk-FZSCLZF6.js} +5 -5
  61. package/dist/{chunk-YPHVSPWM.js.map → chunk-FZSCLZF6.js.map} +1 -1
  62. package/dist/{chunk-S2DZXTRN.js → chunk-GJPZOMFE.js} +8 -8
  63. package/dist/{chunk-S2DZXTRN.js.map → chunk-GJPZOMFE.js.map} +1 -1
  64. package/dist/{chunk-SB3JGUGE.js → chunk-GOLARX5K.js} +3 -3
  65. package/dist/{chunk-SB3JGUGE.js.map → chunk-GOLARX5K.js.map} +1 -1
  66. package/dist/{chunk-ZESEEYEJ.js → chunk-GVVP5TZM.js} +72 -231
  67. package/dist/chunk-GVVP5TZM.js.map +1 -0
  68. package/dist/{chunk-UK4RHCMM.js → chunk-H6G4BUPA.js} +99 -235
  69. package/dist/chunk-H6G4BUPA.js.map +1 -0
  70. package/dist/{chunk-MOQDO4XZ.js → chunk-HCOTO5WX.js} +3 -3
  71. package/dist/{chunk-MOQDO4XZ.js.map → chunk-HCOTO5WX.js.map} +1 -1
  72. package/dist/chunk-HECAAILV.js +94 -0
  73. package/dist/chunk-HECAAILV.js.map +1 -0
  74. package/dist/{chunk-OKCKLIFP.js → chunk-HK3NJMSY.js} +8 -6
  75. package/dist/chunk-HK3NJMSY.js.map +1 -0
  76. package/dist/{chunk-GGDDE7LC.js → chunk-HQLHE5RX.js} +3 -9
  77. package/dist/chunk-HQLHE5RX.js.map +1 -0
  78. package/dist/{chunk-56BHCAPI.js → chunk-I32ZQUYY.js} +6 -6
  79. package/dist/chunk-I32ZQUYY.js.map +1 -0
  80. package/dist/{chunk-D53OQERO.js → chunk-JWTWPZ32.js} +14 -6
  81. package/dist/chunk-JWTWPZ32.js.map +1 -0
  82. package/dist/{chunk-KYDQJSSW.js → chunk-KH577UDI.js} +46 -82
  83. package/dist/chunk-KH577UDI.js.map +1 -0
  84. package/dist/{chunk-XOIX5WIL.js → chunk-KJTMZJ7V.js} +6 -6
  85. package/dist/{chunk-XOIX5WIL.js.map → chunk-KJTMZJ7V.js.map} +1 -1
  86. package/dist/{chunk-XHDUO3UW.js → chunk-L5UYN5LX.js} +3 -3
  87. package/dist/{chunk-XHDUO3UW.js.map → chunk-L5UYN5LX.js.map} +1 -1
  88. package/dist/{chunk-DRCT6VZ7.js → chunk-N2WHJ3FI.js} +3 -3
  89. package/dist/{chunk-DRCT6VZ7.js.map → chunk-N2WHJ3FI.js.map} +1 -1
  90. package/dist/{chunk-ZHPYJTWP.js → chunk-O3V3BTIJ.js} +16 -6
  91. package/dist/chunk-O3V3BTIJ.js.map +1 -0
  92. package/dist/chunk-OFUPJH35.js +74 -0
  93. package/dist/chunk-OFUPJH35.js.map +1 -0
  94. package/dist/{chunk-6YVT3AL2.js → chunk-OLTQAMV2.js} +4 -5
  95. package/dist/chunk-OLTQAMV2.js.map +1 -0
  96. package/dist/chunk-ONGJXAYQ.js +144 -0
  97. package/dist/chunk-ONGJXAYQ.js.map +1 -0
  98. package/dist/{chunk-KJRKPYYZ.js → chunk-OQFYIKWR.js} +27 -25
  99. package/dist/chunk-OQFYIKWR.js.map +1 -0
  100. package/dist/{chunk-X5XIBIEF.js → chunk-PMA4VCAH.js} +3 -3
  101. package/dist/{chunk-X5XIBIEF.js.map → chunk-PMA4VCAH.js.map} +1 -1
  102. package/dist/chunk-POLVJ36Y.js +210 -0
  103. package/dist/chunk-POLVJ36Y.js.map +1 -0
  104. package/dist/{chunk-LK4EPTNG.js → chunk-POXI7JJ4.js} +27 -121
  105. package/dist/chunk-POXI7JJ4.js.map +1 -0
  106. package/dist/{chunk-L76WWJGR.js → chunk-R3TLU26W.js} +21 -33
  107. package/dist/chunk-R3TLU26W.js.map +1 -0
  108. package/dist/chunk-RFHTC6AH.js +250 -0
  109. package/dist/chunk-RFHTC6AH.js.map +1 -0
  110. package/dist/{chunk-IAQDQN6W.js → chunk-RPWYIGD3.js} +15 -36
  111. package/dist/chunk-RPWYIGD3.js.map +1 -0
  112. package/dist/{chunk-HXPMYGSR.js → chunk-T7RWQLUB.js} +4 -10
  113. package/dist/chunk-T7RWQLUB.js.map +1 -0
  114. package/dist/chunk-WRSG7WU5.js +278 -0
  115. package/dist/chunk-WRSG7WU5.js.map +1 -0
  116. package/dist/{chunk-ZYWDJMHF.js → chunk-X3YNHX77.js} +4 -4
  117. package/dist/{chunk-ZYWDJMHF.js.map → chunk-X3YNHX77.js.map} +1 -1
  118. package/dist/chunk-Y4XAXZHB.js +42 -0
  119. package/dist/chunk-Y4XAXZHB.js.map +1 -0
  120. package/dist/{chunk-JZ5F6XDO.js → chunk-YS5AIY4A.js} +3 -3
  121. package/dist/{chunk-JZ5F6XDO.js.map → chunk-YS5AIY4A.js.map} +1 -1
  122. package/dist/chunk-ZIYA7TGX.js +141 -0
  123. package/dist/chunk-ZIYA7TGX.js.map +1 -0
  124. package/dist/{chunk-QLUGKHAA.js → chunk-ZKEDJ536.js} +4 -4
  125. package/dist/{chunk-QLUGKHAA.js.map → chunk-ZKEDJ536.js.map} +1 -1
  126. package/dist/clipboard/index.d.ts.map +1 -1
  127. package/dist/clipboard/index.js +3 -2
  128. package/dist/collapse/index.js +2 -2
  129. package/dist/command/index.js +1 -1
  130. package/dist/context-menu/index.d.ts.map +1 -1
  131. package/dist/context-menu/index.js +2 -1
  132. package/dist/date-picker/index.d.ts.map +1 -1
  133. package/dist/date-picker/index.js +3 -3
  134. package/dist/date-picker/types.d.ts +0 -2
  135. package/dist/date-picker/types.d.ts.map +1 -1
  136. package/dist/dropdown/index.d.ts.map +1 -1
  137. package/dist/dropdown/index.js +4 -3
  138. package/dist/fetching-overlay/index.d.ts +1 -1
  139. package/dist/fetching-overlay/index.d.ts.map +1 -1
  140. package/dist/fetching-overlay/index.js +3 -3
  141. package/dist/float-input/index.js +3 -3
  142. package/dist/grid/index.d.ts +1 -1
  143. package/dist/grid/index.d.ts.map +1 -1
  144. package/dist/grid/index.js +1 -1
  145. package/dist/hooks/index.d.ts +6 -0
  146. package/dist/hooks/index.d.ts.map +1 -0
  147. package/dist/hooks/useControllable.d.ts +6 -0
  148. package/dist/hooks/useControllable.d.ts.map +1 -0
  149. package/dist/hooks/useDebounce.d.ts +2 -0
  150. package/dist/hooks/useDebounce.d.ts.map +1 -0
  151. package/dist/hooks/useMediaQuery.d.ts +2 -0
  152. package/dist/hooks/useMediaQuery.d.ts.map +1 -0
  153. package/dist/hooks/useRipple.d.ts +29 -0
  154. package/dist/hooks/useRipple.d.ts.map +1 -0
  155. package/dist/hooks/useThrottle.d.ts +2 -0
  156. package/dist/hooks/useThrottle.d.ts.map +1 -0
  157. package/dist/image/index.d.ts.map +1 -1
  158. package/dist/image/index.js +1 -1
  159. package/dist/image/types.d.ts +4 -0
  160. package/dist/image/types.d.ts.map +1 -1
  161. package/dist/index.d.ts +10 -7
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +114 -56
  164. package/dist/index.js.map +1 -1
  165. package/dist/input/index.d.ts.map +1 -1
  166. package/dist/input/index.js +3 -3
  167. package/dist/input-otp/index.js +1 -1
  168. package/dist/input-password/index.js +4 -4
  169. package/dist/kbd/index.js +2 -2
  170. package/dist/link/index.d.ts +1 -1
  171. package/dist/link/index.d.ts.map +1 -1
  172. package/dist/link/index.js +1 -1
  173. package/dist/menubar/index.js +3 -3
  174. package/dist/multi-select/index.d.ts.map +1 -1
  175. package/dist/multi-select/index.js +5 -3
  176. package/dist/multi-select/utils.d.ts.map +1 -1
  177. package/dist/navigation-menu/index.js +1 -1
  178. package/dist/notification/index.js +2 -2
  179. package/dist/number-input/index.d.ts.map +1 -1
  180. package/dist/number-input/index.js +4 -3
  181. package/dist/pagination/index.d.ts.map +1 -1
  182. package/dist/pagination/index.js +2 -1
  183. package/dist/popover/index.js +2 -2
  184. package/dist/progress/index.d.ts.map +1 -1
  185. package/dist/progress/index.js +1 -1
  186. package/dist/progress/styles.d.ts +39 -0
  187. package/dist/progress/styles.d.ts.map +1 -0
  188. package/dist/radio/index.d.ts.map +1 -1
  189. package/dist/radio/index.js +2 -2
  190. package/dist/select/index.d.ts.map +1 -1
  191. package/dist/select/index.js +5 -4
  192. package/dist/shared/useSelectBase.d.ts +56 -0
  193. package/dist/shared/useSelectBase.d.ts.map +1 -0
  194. package/dist/skeleton/index.js +2 -2
  195. package/dist/slider/index.d.ts.map +1 -1
  196. package/dist/slider/index.js +1 -1
  197. package/dist/spinner/index.d.ts +1 -1
  198. package/dist/spinner/index.d.ts.map +1 -1
  199. package/dist/spinner/index.js +2 -2
  200. package/dist/stepper/index.js +1 -1
  201. package/dist/switch/index.d.ts.map +1 -1
  202. package/dist/switch/index.js +2 -2
  203. package/dist/table/index.d.ts.map +1 -1
  204. package/dist/table/index.js +10 -9
  205. package/dist/table/variants.d.ts +0 -4
  206. package/dist/table/variants.d.ts.map +1 -1
  207. package/dist/tabs/index.d.ts.map +1 -1
  208. package/dist/tabs/index.js +2 -2
  209. package/dist/tabs/types.d.ts +4 -0
  210. package/dist/tabs/types.d.ts.map +1 -1
  211. package/dist/tag/index.d.ts +1 -1
  212. package/dist/tag/index.d.ts.map +1 -1
  213. package/dist/tag/index.js +2 -2
  214. package/dist/timeline/index.d.ts.map +1 -1
  215. package/dist/timeline/index.js +1 -1
  216. package/dist/toast/index.d.ts.map +1 -1
  217. package/dist/toast/index.js +2 -2
  218. package/dist/toggle/index.d.ts.map +1 -1
  219. package/dist/toggle/index.js +2 -1
  220. package/dist/toggle-group/index.d.ts.map +1 -1
  221. package/dist/toggle-group/index.js +2 -1
  222. package/dist/tooltip/index.js +2 -2
  223. package/dist/transfer/index.d.ts +0 -1
  224. package/dist/transfer/index.d.ts.map +1 -1
  225. package/dist/transfer/index.js +3 -3
  226. package/dist/tree/index.d.ts.map +1 -1
  227. package/dist/tree/index.js +1 -1
  228. package/dist/tree-select/index.js +4 -4
  229. package/dist/upload/index.d.ts.map +1 -1
  230. package/dist/upload/index.js +2 -1
  231. package/dist/variants.d.ts +44 -163
  232. package/dist/variants.d.ts.map +1 -1
  233. package/package.json +44 -231
  234. package/styles/global.css +327 -220
  235. package/styles/themes/dark.css +57 -44
  236. package/styles/themes/light.css +3 -3
  237. package/styles/themes/presets/corporate.css +32 -30
  238. package/styles/themes/presets/minimal.css +32 -30
  239. package/styles/themes/presets/vibrant.css +38 -36
  240. package/dist/chunk-2K7MDR7K.js +0 -212
  241. package/dist/chunk-2K7MDR7K.js.map +0 -1
  242. package/dist/chunk-2SYAIIJE.js +0 -143
  243. package/dist/chunk-2SYAIIJE.js.map +0 -1
  244. package/dist/chunk-56BHCAPI.js.map +0 -1
  245. package/dist/chunk-6QZFWSN7.js.map +0 -1
  246. package/dist/chunk-6YVT3AL2.js.map +0 -1
  247. package/dist/chunk-D53OQERO.js.map +0 -1
  248. package/dist/chunk-DRL4CJMI.js +0 -147
  249. package/dist/chunk-DRL4CJMI.js.map +0 -1
  250. package/dist/chunk-DUNER5Q3.js.map +0 -1
  251. package/dist/chunk-E222IQHF.js.map +0 -1
  252. package/dist/chunk-FVTMKQUE.js +0 -67
  253. package/dist/chunk-FVTMKQUE.js.map +0 -1
  254. package/dist/chunk-GGDDE7LC.js.map +0 -1
  255. package/dist/chunk-GVEEUHM2.js.map +0 -1
  256. package/dist/chunk-HQVTIFXN.js +0 -494
  257. package/dist/chunk-HQVTIFXN.js.map +0 -1
  258. package/dist/chunk-HXPMYGSR.js.map +0 -1
  259. package/dist/chunk-IAQDQN6W.js.map +0 -1
  260. package/dist/chunk-ITCXCSUS.js.map +0 -1
  261. package/dist/chunk-KJRKPYYZ.js.map +0 -1
  262. package/dist/chunk-KYDQJSSW.js.map +0 -1
  263. package/dist/chunk-L76WWJGR.js.map +0 -1
  264. package/dist/chunk-LK4EPTNG.js.map +0 -1
  265. package/dist/chunk-M3AALH7G.js.map +0 -1
  266. package/dist/chunk-MBAZ7OW5.js +0 -607
  267. package/dist/chunk-MBAZ7OW5.js.map +0 -1
  268. package/dist/chunk-MGKFJWQU.js +0 -194
  269. package/dist/chunk-MGKFJWQU.js.map +0 -1
  270. package/dist/chunk-OKCKLIFP.js.map +0 -1
  271. package/dist/chunk-OV6K6GML.js.map +0 -1
  272. package/dist/chunk-PHQOHVG3.js +0 -45
  273. package/dist/chunk-PHQOHVG3.js.map +0 -1
  274. package/dist/chunk-QKSDVYKF.js.map +0 -1
  275. package/dist/chunk-SJHNFRXG.js +0 -276
  276. package/dist/chunk-SJHNFRXG.js.map +0 -1
  277. package/dist/chunk-SX5UNM6C.js.map +0 -1
  278. package/dist/chunk-T4MGK3WE.js +0 -143
  279. package/dist/chunk-T4MGK3WE.js.map +0 -1
  280. package/dist/chunk-UK4RHCMM.js.map +0 -1
  281. package/dist/chunk-WAPZ4QAN.js +0 -76
  282. package/dist/chunk-WAPZ4QAN.js.map +0 -1
  283. package/dist/chunk-WMTEAMPB.js.map +0 -1
  284. package/dist/chunk-ZESEEYEJ.js.map +0 -1
  285. package/dist/chunk-ZHPYJTWP.js.map +0 -1
  286. package/dist/chunk-ZPVBIQ2R.js.map +0 -1
  287. package/dist/chunk-ZSS6E4T2.js.map +0 -1
  288. package/dist/form/index.d.ts +0 -31
  289. package/dist/form/index.d.ts.map +0 -1
  290. package/dist/form/index.js +0 -4
  291. package/dist/form/index.js.map +0 -1
  292. package/dist/form/types.d.ts +0 -45
  293. package/dist/form/types.d.ts.map +0 -1
  294. package/dist/ribbon/index.d.ts +0 -6
  295. package/dist/ribbon/index.d.ts.map +0 -1
  296. package/dist/ribbon/index.js +0 -4
  297. package/dist/ribbon/index.js.map +0 -1
  298. package/dist/ribbon/types.d.ts +0 -26
  299. package/dist/ribbon/types.d.ts.map +0 -1
@@ -1,276 +0,0 @@
1
- import { componentColors } from './chunk-LK4EPTNG.js';
2
- import { cn } from './chunk-NGYLRX6F.js';
3
- import { cva } from 'class-variance-authority';
4
- import React, { useState, useRef, useId, useCallback } from 'react';
5
- import { jsxs, jsx } from 'react/jsx-runtime';
6
-
7
- var pillActiveClasses = {
8
- default: "bg-background text-text-primary",
9
- primary: "bg-primary text-white",
10
- secondary: "bg-secondary text-white",
11
- accent: "bg-accent text-white",
12
- success: "bg-success text-white",
13
- error: "bg-error text-white",
14
- warning: "bg-warning text-white",
15
- info: "bg-info text-white"
16
- };
17
- var defaultActiveClasses = {
18
- default: "border-border text-text-primary",
19
- primary: "border-primary text-primary",
20
- secondary: "border-secondary text-secondary",
21
- accent: "border-accent text-accent",
22
- success: "border-success text-success",
23
- error: "border-error text-error",
24
- warning: "border-warning text-warning",
25
- info: "border-info text-info"
26
- };
27
- var softActiveClasses = {
28
- default: "border-border/50 text-text-primary",
29
- primary: "border-primary/50 text-primary",
30
- secondary: "border-secondary/50 text-secondary",
31
- accent: "border-accent/50 text-accent",
32
- success: "border-success/50 text-success",
33
- error: "border-error/50 text-error",
34
- warning: "border-warning/50 text-warning",
35
- info: "border-info/50 text-info"
36
- };
37
- var createActiveTabVariants = (variant, classMap) => {
38
- return componentColors.map((color) => ({
39
- variant,
40
- color,
41
- active: true,
42
- className: classMap[color] || classMap.default
43
- }));
44
- };
45
- var tabListVariants = cva("flex", {
46
- variants: {
47
- size: {
48
- xs: "gap-(--tabs-gap-xs)",
49
- sm: "gap-(--tabs-gap-sm)",
50
- md: "gap-(--tabs-gap-md)",
51
- lg: "gap-(--tabs-gap-lg)"
52
- },
53
- variant: {
54
- default: "border-b",
55
- solid: "border-b",
56
- soft: "border-b",
57
- pill: "bg-surface p-0.5 rounded-lg border border-border gap-0 w-fit"
58
- }
59
- },
60
- defaultVariants: {
61
- size: "md",
62
- variant: "default"
63
- }
64
- });
65
- var tabItemVariants = cva(
66
- "font-medium transition-[colors,transform] duration-200 ease-out cursor-pointer flex items-center gap-2 active:scale-[0.97]",
67
- {
68
- variants: {
69
- size: {
70
- xs: "text-xs px-(--tabs-padding-x-xs) py-(--tabs-padding-y-xs)",
71
- sm: "text-sm px-(--tabs-padding-x-sm) py-(--tabs-padding-y-sm)",
72
- md: "text-base px-(--tabs-padding-x-md) py-(--tabs-padding-y-md)",
73
- lg: "text-lg px-(--tabs-padding-x-lg) py-(--tabs-padding-y-lg)"
74
- },
75
- variant: {
76
- default: "relative pb-2 border-b-2 -mb-px",
77
- solid: "relative pb-2 border-b-2 -mb-px",
78
- soft: "relative pb-2 border-b-2 -mb-px",
79
- pill: "rounded-md"
80
- },
81
- color: {
82
- default: "",
83
- primary: "",
84
- secondary: "",
85
- accent: "",
86
- success: "",
87
- error: "",
88
- warning: "",
89
- info: ""
90
- },
91
- active: {
92
- true: "",
93
- false: ""
94
- }
95
- },
96
- compoundVariants: [
97
- // Inactive states (all variants)
98
- ...componentColors.map((color) => ({
99
- color,
100
- active: false,
101
- className: "border-transparent text-text-secondary hover:text-text-primary hover:border-border/30"
102
- })),
103
- // Active pill variant
104
- ...createActiveTabVariants("pill", pillActiveClasses),
105
- // Active default variant (border-bottom)
106
- ...createActiveTabVariants("default", defaultActiveClasses),
107
- // Active solid variant (border-bottom)
108
- ...createActiveTabVariants("solid", defaultActiveClasses),
109
- // Active soft variant (border-bottom with opacity)
110
- ...createActiveTabVariants("soft", softActiveClasses),
111
- // Inactive pill variant hover
112
- ...componentColors.map((color) => ({
113
- variant: "pill",
114
- color,
115
- active: false,
116
- className: "bg-transparent hover:bg-background"
117
- }))
118
- ],
119
- defaultVariants: {
120
- size: "md",
121
- variant: "default",
122
- color: "primary",
123
- active: false
124
- }
125
- }
126
- );
127
- var Tabs = React.memo(
128
- ({
129
- items,
130
- defaultActiveKey,
131
- activeKey: controlledActiveKey,
132
- color = "primary",
133
- size = "md",
134
- variant = "default",
135
- onChange,
136
- className,
137
- classNames
138
- }) => {
139
- const [internalActiveKey, setInternalActiveKey] = useState(
140
- defaultActiveKey || items[0]?.key || ""
141
- );
142
- const tabListRef = useRef(null);
143
- const uniqueId = useId();
144
- const activeKey = controlledActiveKey !== void 0 ? controlledActiveKey : internalActiveKey;
145
- const handleTabClick = useCallback(
146
- (key, disabled) => {
147
- if (disabled) return;
148
- if (controlledActiveKey === void 0) {
149
- setInternalActiveKey(key);
150
- }
151
- onChange?.(key);
152
- },
153
- [controlledActiveKey, onChange]
154
- );
155
- const handleKeyDown = useCallback(
156
- (event, currentIndex) => {
157
- const enabledIndices = items.map((item, i) => !item.disabled ? i : -1).filter((i) => i !== -1);
158
- const currentEnabledIndex = enabledIndices.indexOf(currentIndex);
159
- let newIndex;
160
- switch (event.key) {
161
- case "ArrowLeft":
162
- case "ArrowUp":
163
- event.preventDefault();
164
- newIndex = enabledIndices[currentEnabledIndex > 0 ? currentEnabledIndex - 1 : enabledIndices.length - 1];
165
- break;
166
- case "ArrowRight":
167
- case "ArrowDown":
168
- event.preventDefault();
169
- newIndex = enabledIndices[currentEnabledIndex < enabledIndices.length - 1 ? currentEnabledIndex + 1 : 0];
170
- break;
171
- case "Home":
172
- event.preventDefault();
173
- newIndex = enabledIndices[0];
174
- break;
175
- case "End":
176
- event.preventDefault();
177
- newIndex = enabledIndices[enabledIndices.length - 1];
178
- break;
179
- }
180
- if (newIndex !== void 0) {
181
- const newItem = items[newIndex];
182
- if (newItem) {
183
- handleTabClick(newItem.key);
184
- const buttons = tabListRef.current?.querySelectorAll("button");
185
- buttons?.[newIndex]?.focus();
186
- }
187
- }
188
- },
189
- [items, handleTabClick]
190
- );
191
- const activeItem = items.find((item) => item.key === activeKey);
192
- return /* @__PURE__ */ jsxs(
193
- "div",
194
- {
195
- "data-slot": "tabs_root",
196
- className: cn("tabs_root w-full", classNames?.root, className),
197
- children: [
198
- /* @__PURE__ */ jsx(
199
- "div",
200
- {
201
- ref: tabListRef,
202
- role: "tablist",
203
- "aria-orientation": "horizontal",
204
- "data-slot": "tabs_list",
205
- className: cn(
206
- "tabs_list",
207
- tabListVariants({ size, variant }),
208
- variant !== "pill" && "border-border",
209
- classNames?.list
210
- ),
211
- children: items.map((item, index) => {
212
- const isActive = item.key === activeKey;
213
- const tabId = `tab-${uniqueId}-${item.key}`;
214
- const panelId = `panel-${uniqueId}-${item.key}`;
215
- return /* @__PURE__ */ jsxs(
216
- "button",
217
- {
218
- id: tabId,
219
- role: "tab",
220
- type: "button",
221
- "aria-selected": isActive,
222
- "aria-controls": panelId,
223
- tabIndex: isActive ? 0 : -1,
224
- "data-slot": "tabs_tab",
225
- className: cn(
226
- "tabs_tab",
227
- tabItemVariants({
228
- size,
229
- variant,
230
- color,
231
- active: isActive
232
- }),
233
- item.disabled && "opacity-50 cursor-not-allowed",
234
- classNames?.tab,
235
- isActive && classNames?.tabActive
236
- ),
237
- onClick: () => handleTabClick(item.key, item.disabled),
238
- onKeyDown: (e) => handleKeyDown(e, index),
239
- disabled: item.disabled,
240
- children: [
241
- item.icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: item.icon }),
242
- item.label
243
- ]
244
- },
245
- item.key
246
- );
247
- })
248
- }
249
- ),
250
- activeItem?.content && /* @__PURE__ */ jsx(
251
- "div",
252
- {
253
- id: `panel-${uniqueId}-${activeItem.key}`,
254
- role: "tabpanel",
255
- "aria-labelledby": `tab-${uniqueId}-${activeItem.key}`,
256
- tabIndex: 0,
257
- "data-slot": "tabs_panel",
258
- className: cn(
259
- "tabs_panel",
260
- "py-4 animate-in fade-in slide-in-from-bottom-2 duration-300",
261
- classNames?.panel
262
- ),
263
- children: activeItem?.content
264
- }
265
- )
266
- ]
267
- }
268
- );
269
- }
270
- );
271
- Tabs.displayName = "Tabs";
272
- var tabs_default = Tabs;
273
-
274
- export { tabs_default };
275
- //# sourceMappingURL=chunk-SJHNFRXG.js.map
276
- //# sourceMappingURL=chunk-SJHNFRXG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tabs/index.tsx"],"names":[],"mappings":"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","file":"chunk-SJHNFRXG.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport React, { useState, useId, useCallback, useRef } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { componentColors } from \"../variants\";\nimport type { TabsColor, TabsProps, TabsVariant } from \"./types\";\n\n// Static class mappings for Tailwind JIT compatibility\nconst pillActiveClasses: Record<string, string> = {\n default: \"bg-background text-text-primary\",\n primary: \"bg-primary text-white\",\n secondary: \"bg-secondary text-white\",\n accent: \"bg-accent text-white\",\n success: \"bg-success text-white\",\n error: \"bg-error text-white\",\n warning: \"bg-warning text-white\",\n info: \"bg-info text-white\",\n};\n\nconst defaultActiveClasses: Record<string, string> = {\n default: \"border-border text-text-primary\",\n primary: \"border-primary text-primary\",\n secondary: \"border-secondary text-secondary\",\n accent: \"border-accent text-accent\",\n success: \"border-success text-success\",\n error: \"border-error text-error\",\n warning: \"border-warning text-warning\",\n info: \"border-info text-info\",\n};\n\nconst softActiveClasses: Record<string, string> = {\n default: \"border-border/50 text-text-primary\",\n primary: \"border-primary/50 text-primary\",\n secondary: \"border-secondary/50 text-secondary\",\n accent: \"border-accent/50 text-accent\",\n success: \"border-success/50 text-success\",\n error: \"border-error/50 text-error\",\n warning: \"border-warning/50 text-warning\",\n info: \"border-info/50 text-info\",\n};\n\n// Tab-specific variant generators for DRY\nconst createActiveTabVariants = (\n variant: TabsVariant,\n classMap: Record<string, string>,\n) => {\n return componentColors.map((color) => ({\n variant,\n color: color as TabsColor,\n active: true as const,\n className: classMap[color] || classMap.default,\n }));\n};\n\nconst tabListVariants = cva(\"flex\", {\n variants: {\n size: {\n xs: \"gap-(--tabs-gap-xs)\",\n sm: \"gap-(--tabs-gap-sm)\",\n md: \"gap-(--tabs-gap-md)\",\n lg: \"gap-(--tabs-gap-lg)\",\n },\n variant: {\n default: \"border-b\",\n solid: \"border-b\",\n soft: \"border-b\",\n pill: \"bg-surface p-0.5 rounded-lg border border-border gap-0 w-fit\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n});\n\nconst tabItemVariants = cva(\n \"font-medium transition-[colors,transform] duration-200 ease-out cursor-pointer flex items-center gap-2 active:scale-[0.97]\",\n {\n variants: {\n size: {\n xs: \"text-xs px-(--tabs-padding-x-xs) py-(--tabs-padding-y-xs)\",\n sm: \"text-sm px-(--tabs-padding-x-sm) py-(--tabs-padding-y-sm)\",\n md: \"text-base px-(--tabs-padding-x-md) py-(--tabs-padding-y-md)\",\n lg: \"text-lg px-(--tabs-padding-x-lg) py-(--tabs-padding-y-lg)\",\n },\n variant: {\n default: \"relative pb-2 border-b-2 -mb-px\",\n solid: \"relative pb-2 border-b-2 -mb-px\",\n soft: \"relative pb-2 border-b-2 -mb-px\",\n pill: \"rounded-md\",\n },\n color: {\n default: \"\",\n primary: \"\",\n secondary: \"\",\n accent: \"\",\n success: \"\",\n error: \"\",\n warning: \"\",\n info: \"\",\n },\n active: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Inactive states (all variants)\n ...componentColors.map((color) => ({\n color: color as TabsColor,\n active: false as const,\n className:\n \"border-transparent text-text-secondary hover:text-text-primary hover:border-border/30\",\n })),\n\n // Active pill variant\n ...createActiveTabVariants(\"pill\", pillActiveClasses),\n\n // Active default variant (border-bottom)\n ...createActiveTabVariants(\"default\", defaultActiveClasses),\n\n // Active solid variant (border-bottom)\n ...createActiveTabVariants(\"solid\", defaultActiveClasses),\n\n // Active soft variant (border-bottom with opacity)\n ...createActiveTabVariants(\"soft\", softActiveClasses),\n\n // Inactive pill variant hover\n ...componentColors.map((color) => ({\n variant: \"pill\" as const,\n color: color as TabsColor,\n active: false as const,\n className: \"bg-transparent hover:bg-background\",\n })),\n ],\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n color: \"primary\",\n active: false,\n },\n },\n);\n\nconst Tabs = React.memo<TabsProps>(\n ({\n items,\n defaultActiveKey,\n activeKey: controlledActiveKey,\n color = \"primary\",\n size = \"md\",\n variant = \"default\",\n onChange,\n className,\n classNames,\n }) => {\n const [internalActiveKey, setInternalActiveKey] = useState(\n defaultActiveKey || items[0]?.key || \"\",\n );\n const tabListRef = useRef<HTMLDivElement>(null);\n\n // Generate unique IDs for accessibility\n const uniqueId = useId();\n\n const activeKey =\n controlledActiveKey !== undefined\n ? controlledActiveKey\n : internalActiveKey;\n\n const handleTabClick = useCallback(\n (key: string, disabled?: boolean) => {\n if (disabled) return;\n\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(key);\n }\n onChange?.(key);\n },\n [controlledActiveKey, onChange],\n );\n\n // Handle keyboard navigation (arrow keys, Home, End)\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>, currentIndex: number) => {\n const enabledIndices = items\n .map((item, i) => (!item.disabled ? i : -1))\n .filter((i): i is number => i !== -1);\n const currentEnabledIndex = enabledIndices.indexOf(currentIndex);\n\n let newIndex: number | undefined;\n\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n newIndex =\n enabledIndices[\n currentEnabledIndex > 0\n ? currentEnabledIndex - 1\n : enabledIndices.length - 1\n ];\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n newIndex =\n enabledIndices[\n currentEnabledIndex < enabledIndices.length - 1\n ? currentEnabledIndex + 1\n : 0\n ];\n break;\n case \"Home\":\n event.preventDefault();\n newIndex = enabledIndices[0];\n break;\n case \"End\":\n event.preventDefault();\n newIndex = enabledIndices[enabledIndices.length - 1];\n break;\n }\n\n if (newIndex !== undefined) {\n const newItem = items[newIndex];\n if (newItem) {\n handleTabClick(newItem.key);\n // Focus the new tab\n const buttons = tabListRef.current?.querySelectorAll(\"button\");\n buttons?.[newIndex]?.focus();\n }\n }\n },\n [items, handleTabClick],\n );\n\n const activeItem = items.find((item) => item.key === activeKey);\n\n return (\n <div\n data-slot=\"tabs_root\"\n className={cn(\"tabs_root w-full\", classNames?.root, className)}\n >\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n data-slot=\"tabs_list\"\n className={cn(\n \"tabs_list\",\n tabListVariants({ size, variant }),\n variant !== \"pill\" && \"border-border\",\n classNames?.list,\n )}\n >\n {items.map((item, index) => {\n const isActive = item.key === activeKey;\n const tabId = `tab-${uniqueId}-${item.key}`;\n const panelId = `panel-${uniqueId}-${item.key}`;\n\n return (\n <button\n key={item.key}\n id={tabId}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n data-slot=\"tabs_tab\"\n className={cn(\n \"tabs_tab\",\n tabItemVariants({\n size,\n variant,\n color,\n active: isActive,\n }),\n item.disabled && \"opacity-50 cursor-not-allowed\",\n classNames?.tab,\n isActive && classNames?.tabActive,\n )}\n onClick={() => handleTabClick(item.key, item.disabled)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n disabled={item.disabled}\n >\n {item.icon && <span aria-hidden=\"true\">{item.icon}</span>}\n {item.label}\n </button>\n );\n })}\n </div>\n\n {/* Performance optimization: Removed key prop to prevent forced remount\n on tab change. Animation still works via CSS, but tab content state\n is preserved. This is especially important for tabs containing forms\n or expensive components. */}\n {activeItem?.content && (\n <div\n id={`panel-${uniqueId}-${activeItem.key}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-${uniqueId}-${activeItem.key}`}\n tabIndex={0}\n data-slot=\"tabs_panel\"\n className={cn(\n \"tabs_panel\",\n \"py-4 animate-in fade-in slide-in-from-bottom-2 duration-300\",\n classNames?.panel,\n )}\n >\n {activeItem?.content}\n </div>\n )}\n </div>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n\nexport type { TabsClassNames } from \"./types\";\nexport type * from \"./types\";\nexport default Tabs;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/command/index.tsx"],"names":["CommandPrimitive"],"mappings":"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","file":"chunk-SX5UNM6C.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport { SearchIcon } from 'lucide-react'\nimport * as React from 'react'\n\nimport { CommandSize, CommandClassNames } from './types'\n\nimport {\n Modal,\n ModalContent,\n ModalDescription,\n ModalHeader,\n ModalTitle,\n} from '../modal'\nimport { ComponentColor } from '../types'\nimport { cn, iconSizes } from '../utils'\n\nconst commandVariants = cva(\n 'flex h-full w-full flex-col overflow-hidden rounded-md bg-background text-text-primary',\n {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst Command = ({\n className,\n size = 'md',\n classNames,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive> & {\n size?: CommandSize\n classNames?: CommandClassNames\n}) => {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn('command_root', commandVariants({ size }), classNames?.root, className)}\n {...props}\n />\n )\n}\n\nCommand.displayName = 'Command'\n\nconst CommandModal = ({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = true,\n size = 'md',\n ...props\n}: React.ComponentProps<typeof Modal> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n size?: CommandSize\n}) => {\n return (\n <Modal {...props}>\n <ModalHeader className=\"sr-only\">\n <ModalTitle>{title}</ModalTitle>\n <ModalDescription>{description}</ModalDescription>\n </ModalHeader>\n <ModalContent\n className={cn('overflow-hidden p-0', className)}\n showCloseButton={showCloseButton}\n >\n <Command\n size={size}\n className=\"[&_[cmdk-group-heading]]:text-text-secondary [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0\"\n >\n {children}\n </Command>\n </ModalContent>\n </Modal>\n )\n}\n\nCommandModal.displayName = 'CommandModal'\n\nconst commandInputVariants = cva(\n 'flex w-full bg-transparent outline-hidden disabled:cursor-not-allowed disabled:opacity-50 placeholder:text-text-secondary/50 text-text-primary',\n {\n variants: {\n size: {\n xs: 'h-6 py-1 text-xs',\n sm: 'h-8 py-2 text-sm',\n md: 'h-10 py-3 text-base',\n lg: 'h-12 py-4 text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst commandInputWrapperVariants = cva(\n 'flex items-center gap-2 border-b border-border px-3',\n {\n variants: {\n size: {\n xs: 'h-6',\n sm: 'h-8',\n md: 'h-10',\n lg: 'h-12',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst CommandInput = ({\n className,\n size = 'md',\n classNames,\n ...props\n}: Omit<React.ComponentProps<typeof CommandPrimitive.Input>, 'size'> & {\n size?: CommandSize\n classNames?: CommandClassNames\n}) => {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className={commandInputWrapperVariants({ size })}\n >\n <SearchIcon\n data-slot=\"command-input-icon\"\n className={cn('command_inputIcon', 'shrink-0 opacity-50 text-text-secondary', iconSizes[size], classNames?.inputIcon)}\n />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn('command_input', commandInputVariants({ size }), classNames?.input, className)}\n {...props}\n />\n </div>\n )\n}\n\nCommandInput.displayName = 'CommandInput'\n\nconst commandListVariants = cva(\n 'scroll-py-1 overflow-x-hidden overflow-y-auto',\n {\n variants: {\n size: {\n xs: 'max-h-[150px]',\n sm: 'max-h-[200px]',\n md: 'max-h-[300px]',\n lg: 'max-h-[400px]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst CommandList = ({\n className,\n size = 'md',\n classNames,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List> & {\n size?: CommandSize\n classNames?: CommandClassNames\n}) => {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('command_list', commandListVariants({ size }), classNames?.list, className)}\n {...props}\n />\n )\n}\n\nCommandList.displayName = 'CommandList'\n\nconst commandEmptyVariants = cva('text-center text-text-secondary', {\n variants: {\n size: {\n xs: 'py-3 text-[10px]',\n sm: 'py-4 text-xs',\n md: 'py-6 text-sm',\n lg: 'py-8 text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst CommandEmpty = ({\n size = 'md',\n classNames,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty> & {\n size?: CommandSize\n classNames?: CommandClassNames\n}) => {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn('command_empty', commandEmptyVariants({ size }), classNames?.empty)}\n {...props}\n />\n )\n}\n\nCommandEmpty.displayName = 'CommandEmpty'\n\nconst commandGroupVariants = cva(\n 'overflow-hidden text-text-primary [&_[cmdk-group-heading]]:text-text-secondary [&_[cmdk-group-heading]]:font-medium',\n {\n variants: {\n size: {\n xs: 'p-0.5 [&_[cmdk-group-heading]]:px-1 [&_[cmdk-group-heading]]:py-0.5 [&_[cmdk-group-heading]]:text-[9px]',\n sm: 'p-0.5 [&_[cmdk-group-heading]]:px-1.5 [&_[cmdk-group-heading]]:py-1 [&_[cmdk-group-heading]]:text-[10px]',\n md: 'p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs',\n lg: 'p-1.5 [&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst CommandGroup = ({\n className,\n size = 'md',\n classNames,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group> & {\n size?: CommandSize\n classNames?: CommandClassNames\n}) => {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn('command_group', commandGroupVariants({ size }), classNames?.group, className)}\n {...props}\n />\n )\n}\n\nCommandGroup.displayName = 'CommandGroup'\n\nconst commandSeparatorVariants = cva('bg-border h-px', {\n variants: {\n size: {\n xs: '-mx-0',\n sm: '-mx-0.5',\n md: '-mx-1',\n lg: '-mx-1.5',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst CommandSeparator = ({\n className,\n size = 'md',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator> & {\n size?: CommandSize\n}) => {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(commandSeparatorVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nCommandSeparator.displayName = 'CommandSeparator'\n\nconst commandSelectedColorClasses: Record<ComponentColor, string> = {\n default: 'data-[selected=true]:bg-surface data-[selected=true]:text-text-primary',\n primary: 'data-[selected=true]:bg-primary/10 data-[selected=true]:text-primary',\n secondary: 'data-[selected=true]:bg-secondary/10 data-[selected=true]:text-secondary',\n accent: 'data-[selected=true]:bg-accent/10 data-[selected=true]:text-accent',\n success: 'data-[selected=true]:bg-success/10 data-[selected=true]:text-success',\n error: 'data-[selected=true]:bg-error/10 data-[selected=true]:text-error',\n warning: 'data-[selected=true]:bg-warning/10 data-[selected=true]:text-warning',\n info: 'data-[selected=true]:bg-info/10 data-[selected=true]:text-info',\n}\n\nconst commandItemVariants = cva(\n \"relative flex cursor-default items-center gap-2 rounded-sm outline-hidden select-none text-text-primary data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-text-secondary transition-colors\",\n {\n variants: {\n size: {\n xs: \"px-1 py-0.5 text-[10px] gap-1 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"px-1.5 py-1 text-xs gap-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"px-2 py-1.5 text-sm gap-2 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"px-3 py-2 text-base gap-2.5 [&_svg:not([class*='size-'])]:size-5\",\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst CommandItem = ({\n className,\n size = 'md',\n color = 'primary',\n classNames,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item> & {\n size?: CommandSize\n color?: ComponentColor\n classNames?: CommandClassNames\n}) => {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn('command_item', commandItemVariants({ size }), commandSelectedColorClasses[color], classNames?.item, className)}\n {...props}\n />\n )\n}\n\nCommandItem.displayName = 'CommandItem'\n\nconst commandShortcutVariants = cva(\n 'ml-auto tracking-widest text-text-secondary opacity-60',\n {\n variants: {\n size: {\n xs: 'text-[9px]',\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst CommandShortcut = ({\n className,\n size = 'md',\n classNames,\n ...props\n}: React.ComponentProps<'span'> & {\n size?: CommandSize\n classNames?: CommandClassNames\n}) => {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('command_shortcut', commandShortcutVariants({ size }), classNames?.shortcut, className)}\n {...props}\n />\n )\n}\n\nCommandShortcut.displayName = 'CommandShortcut'\n\nexport type * from './types'\nexport {\n Command,\n CommandModal,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"]}
@@ -1,143 +0,0 @@
1
- import { cn } from './chunk-NGYLRX6F.js';
2
- import React from 'react';
3
- import { useFormContext, FormProvider, Controller } from 'react-hook-form';
4
- import { jsx, jsxs } from 'react/jsx-runtime';
5
-
6
- var FormFieldContext = React.createContext({});
7
- var FormItemContext = React.createContext({});
8
- var useFormField = () => {
9
- const fieldContext = React.useContext(FormFieldContext);
10
- const itemContext = React.useContext(FormItemContext);
11
- const { getFieldState, formState } = useFormContext();
12
- const fieldState = getFieldState(fieldContext.name, formState);
13
- if (!fieldContext) {
14
- throw new Error("useFormField must be used within <FormField>");
15
- }
16
- const { id } = itemContext;
17
- return {
18
- id,
19
- name: fieldContext.name,
20
- formItemId: `${id}-form-item`,
21
- formDescriptionId: `${id}-form-item-description`,
22
- formMessageId: `${id}-form-item-message`,
23
- ...fieldState
24
- };
25
- };
26
- var Form = ({
27
- form,
28
- onSubmit,
29
- className,
30
- classNames,
31
- children,
32
- ref,
33
- ...props
34
- }) => {
35
- return /* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsx(
36
- "form",
37
- {
38
- ref,
39
- className: cn("form_root", classNames?.root, className),
40
- onSubmit: form.handleSubmit(onSubmit),
41
- "data-slot": "root",
42
- ...props,
43
- children
44
- }
45
- ) });
46
- };
47
- Form.displayName = "Form";
48
- var FormField = ({
49
- name,
50
- render
51
- }) => {
52
- return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name }, children: /* @__PURE__ */ jsx(Controller, { name, render }) });
53
- };
54
- FormField.displayName = "FormField";
55
- var FormItem = React.memo(({ className, classNames, ...props }) => {
56
- const id = React.useId();
57
- return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
58
- "div",
59
- {
60
- className: cn("form_field space-y-2", classNames?.field, className),
61
- "data-slot": "field",
62
- ...props
63
- }
64
- ) });
65
- });
66
- FormItem.displayName = "FormItem";
67
- var FormLabel = React.memo(
68
- ({ className, classNames, required, children, ...props }) => {
69
- const { error, formItemId } = useFormField();
70
- return /* @__PURE__ */ jsxs(
71
- "label",
72
- {
73
- className: cn(
74
- "form_label text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
75
- error && "text-error",
76
- classNames?.label,
77
- className
78
- ),
79
- htmlFor: formItemId,
80
- "data-slot": "label",
81
- ...props,
82
- children: [
83
- children,
84
- required && /* @__PURE__ */ jsx("span", { className: "ml-1 text-error", children: "*" })
85
- ]
86
- }
87
- );
88
- }
89
- );
90
- FormLabel.displayName = "FormLabel";
91
- var FormControl = React.memo(({ children, classNames }) => {
92
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
93
- const childProps = children.props;
94
- return React.cloneElement(children, {
95
- id: formItemId,
96
- "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
97
- "aria-invalid": !!error,
98
- className: cn("form_control", classNames?.control, childProps.className),
99
- "data-slot": "control"
100
- });
101
- });
102
- FormControl.displayName = "FormControl";
103
- var FormDescription = React.memo(
104
- ({ className, classNames, ...props }) => {
105
- const { formDescriptionId } = useFormField();
106
- return /* @__PURE__ */ jsx(
107
- "p",
108
- {
109
- id: formDescriptionId,
110
- className: cn(
111
- "form_description text-sm text-text-secondary",
112
- classNames?.description,
113
- className
114
- ),
115
- "data-slot": "description",
116
- ...props
117
- }
118
- );
119
- }
120
- );
121
- FormDescription.displayName = "FormDescription";
122
- var FormMessage = React.memo(({ className, classNames, children, ...props }) => {
123
- const { error, formMessageId } = useFormField();
124
- const body = error ? String(error?.message) : children;
125
- if (!body) {
126
- return null;
127
- }
128
- return /* @__PURE__ */ jsx(
129
- "p",
130
- {
131
- id: formMessageId,
132
- className: cn("form_message text-sm font-medium text-error", classNames?.message, className),
133
- "data-slot": "message",
134
- ...props,
135
- children: body
136
- }
137
- );
138
- });
139
- FormMessage.displayName = "FormMessage";
140
-
141
- export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
142
- //# sourceMappingURL=chunk-T4MGK3WE.js.map
143
- //# sourceMappingURL=chunk-T4MGK3WE.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/form/index.tsx"],"names":[],"mappings":"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","file":"chunk-T4MGK3WE.js","sourcesContent":["'use client'\n\nimport React from 'react'\nimport { Controller, FormProvider, useFormContext } from 'react-hook-form'\nimport type { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { cn } from '../utils'\nimport type {\n FormControlProps,\n FormDescriptionProps,\n FormFieldContextValue,\n FormFieldProps,\n FormItemContextValue,\n FormItemProps,\n FormLabelProps,\n FormMessageProps,\n FormProps,\n} from './types'\n\n// Context for FormField to pass name down to FormLabel, FormControl, etc.\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\n// Context for FormItem to generate unique IDs for label-control association\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue)\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error('useFormField must be used within <FormField>')\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\n// Main Form component that wraps FormProvider\nconst Form = <T extends FieldValues = FieldValues>({\n form,\n onSubmit,\n className,\n classNames,\n children,\n ref,\n ...props\n}: FormProps<T>) => {\n return (\n <FormProvider {...form}>\n <form\n ref={ref}\n className={cn('form_root', classNames?.root, className)}\n onSubmit={form.handleSubmit(onSubmit)}\n data-slot=\"root\"\n {...props}\n >\n {children}\n </form>\n </FormProvider>\n )\n}\n\nForm.displayName = 'Form'\n\n// FormField connects to react-hook-form's Controller\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n name,\n render,\n}: FormFieldProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name }}>\n <Controller name={name} render={render} />\n </FormFieldContext.Provider>\n )\n}\n\nFormField.displayName = 'FormField'\n\n// FormItem provides context for label-control association\nconst FormItem = React.memo<FormItemProps>(({ className, classNames, ...props }) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n className={cn('form_field space-y-2', classNames?.field, className)}\n data-slot=\"field\"\n {...props}\n />\n </FormItemContext.Provider>\n )\n})\n\nFormItem.displayName = 'FormItem'\n\n// FormLabel renders label with htmlFor pointing to the control\nconst FormLabel = React.memo<FormLabelProps>(\n ({ className, classNames, required, children, ...props }) => {\n const { error, formItemId } = useFormField()\n\n return (\n <label\n className={cn(\n 'form_label text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n error && 'text-error',\n classNames?.label,\n className,\n )}\n htmlFor={formItemId}\n data-slot=\"label\"\n {...props}\n >\n {children}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )\n },\n)\n\nFormLabel.displayName = 'FormLabel'\n\n// FormControl wraps the input component with proper aria attributes\nconst FormControl = React.memo<FormControlProps>(({ children, classNames }) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n const childProps = children.props as Record<string, unknown>\n\n return React.cloneElement(children, {\n id: formItemId,\n 'aria-describedby': !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`,\n 'aria-invalid': !!error,\n className: cn('form_control', classNames?.control, childProps.className as string | undefined),\n 'data-slot': 'control',\n } as Record<string, unknown>)\n})\n\nFormControl.displayName = 'FormControl'\n\n// FormDescription shows helper text below the control\nconst FormDescription = React.memo<FormDescriptionProps>(\n ({ className, classNames, ...props }) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n id={formDescriptionId}\n className={cn(\n 'form_description text-sm text-text-secondary',\n classNames?.description,\n className,\n )}\n data-slot=\"description\"\n {...props}\n />\n )\n },\n)\n\nFormDescription.displayName = 'FormDescription'\n\n// FormMessage shows validation error messages\nconst FormMessage = React.memo<FormMessageProps>(({ className, classNames, children, ...props }) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n id={formMessageId}\n className={cn('form_message text-sm font-medium text-error', classNames?.message, className)}\n data-slot=\"message\"\n {...props}\n >\n {body}\n </p>\n )\n})\n\nFormMessage.displayName = 'FormMessage'\n\nexport type * from './types'\nexport { Form, FormField, FormItem, FormLabel, FormControl, FormDescription, FormMessage, useFormField }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/multi-select/utils.ts","../src/multi-select/index.tsx"],"names":[],"mappings":"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","file":"chunk-UK4RHCMM.js","sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const multiSelectTriggerVariants = cva(\n 'w-full flex items-center justify-between rounded-md bg-background text-text-primary border focus:border-primary outline-none disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer gap-1',\n {\n variants: {\n status: {\n default: 'border-border',\n error: 'border-error',\n warning: 'border-warning',\n info: 'border-info',\n success: 'border-success',\n },\n size: {\n xs: 'h-(--select-height-xs) pl-(--select-padding-x-xs) pr-[calc(var(--select-padding-x-xs)*2)] text-xs',\n sm: 'h-(--select-height-sm) pl-(--select-padding-x-sm) pr-[calc(var(--select-padding-x-sm)*2)] text-sm',\n md: 'h-(--select-height-md) pl-(--select-padding-x-md) pr-[calc(var(--select-padding-x-md)*2)] text-base',\n lg: 'h-(--select-height-lg) pl-(--select-padding-x-lg) pr-[calc(var(--select-padding-x-lg)*2)] text-lg',\n },\n fullWidth: {\n true: 'w-full',\n false: 'max-w-full',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n fullWidth: true,\n },\n },\n)\n\nexport const multiSelectDropdownVariants = cva(\n 'absolute z-50 mt-1 overflow-auto rounded-md border border-border bg-background',\n)\n\nexport const multiSelectOptionVariants = cva(\n 'relative cursor-pointer select-none px-3 py-2 text-text-primary',\n {\n variants: {\n selected: {\n true: 'bg-primary/10 text-primary font-medium',\n false: 'hover:bg-surface',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n },\n)\n\nexport const multiSelectGroupVariants = cva(\n 'px-3 py-2 text-xs font-semibold text-text-secondary uppercase tracking-wider bg-surface',\n)\n","'use client'\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport {\n Check,\n ChevronDown,\n ChevronUp,\n Loader2,\n Search,\n X,\n} from \"lucide-react\";\nimport React, { useCallback, useId } from \"react\";\n\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover\";\nimport { cn, getValidationStatus, iconSizes } from \"../utils\";\nimport type { MultiSelectOption, MultiSelectProps } from \"./types\";\nimport {\n multiSelectGroupVariants,\n multiSelectOptionVariants,\n multiSelectTriggerVariants,\n} from \"./utils\";\n\nconst MultiSelect = React.memo<MultiSelectProps>(\n ({\n size = \"md\",\n label,\n helperText,\n error,\n warning,\n info,\n success,\n options = [],\n placeholder = \"Select options\",\n loading = false,\n fullWidth = true,\n maxChipsVisible = 3,\n value,\n defaultValue,\n onChange,\n disabled,\n required,\n clearable = false,\n virtualizeThreshold = 50,\n maxDropdownHeight = 300,\n className,\n classNames,\n ref,\n ...props\n }) => {\n // Generate unique IDs for accessibility\n const uniqueId = useId();\n const labelId = `multiselect-label-${uniqueId}`;\n\n const [isOpen, setIsOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<string[]>(\n defaultValue || [],\n );\n const [parentNode, setParentNode] = React.useState<HTMLDivElement | null>(\n null,\n );\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n const [visibleChipsCount, setVisibleChipsCount] =\n React.useState(maxChipsVisible);\n const [showTopArrow, setShowTopArrow] = React.useState(false);\n const [showBottomArrow, setShowBottomArrow] = React.useState(false);\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n\n const { status, message: helperMessage } = getValidationStatus({\n error,\n warning,\n info,\n success,\n helperText,\n });\n\n const groupedOptions = React.useMemo(() => {\n const groups: Record<string, MultiSelectOption[]> = {};\n const ungrouped: MultiSelectOption[] = [];\n\n options.forEach((option) => {\n if (option.group) {\n if (!groups[option.group]) {\n groups[option.group] = [];\n }\n groups[option.group]!.push(option);\n } else {\n ungrouped.push(option);\n }\n });\n\n return { groups, ungrouped };\n }, [options]);\n\n const flattenedOptions = React.useMemo(() => {\n const items: Array<{\n type: \"option\" | \"group\";\n data: MultiSelectOption | string;\n }> = [];\n\n groupedOptions.ungrouped.forEach((option) => {\n items.push({ type: \"option\", data: option });\n });\n\n Object.entries(groupedOptions.groups).forEach(\n ([groupName, groupOptions]) => {\n items.push({ type: \"group\", data: groupName });\n groupOptions.forEach((option) => {\n items.push({ type: \"option\", data: option });\n });\n },\n );\n\n return items;\n }, [groupedOptions]);\n\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return flattenedOptions;\n\n return flattenedOptions.filter((item) => {\n if (item.type === \"group\") return true;\n const option = item.data as MultiSelectOption;\n return option.label.toLowerCase().includes(searchQuery.toLowerCase());\n });\n }, [flattenedOptions, searchQuery]);\n\n const shouldVirtualize = filteredOptions.length > virtualizeThreshold;\n\n const virtualizer = useVirtualizer({\n count: filteredOptions.length,\n getScrollElement: () => parentNode,\n estimateSize: () => 40,\n enabled: shouldVirtualize,\n });\n\n // Store virtualizer in ref to avoid recreating handleKeyDown on every render\n const virtualizerRef = React.useRef(virtualizer);\n React.useEffect(() => {\n virtualizerRef.current = virtualizer;\n }, [virtualizer]);\n\n const refCallback = useCallback((node: HTMLDivElement) => {\n if (node) {\n setParentNode(node);\n // Also set as scroll container for virtualized lists\n scrollContainerRef.current = node;\n }\n }, []);\n\n const selectedOptions = options.filter((opt) =>\n currentValue.includes(opt.value),\n );\n\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n const newValue = currentValue.includes(optionValue)\n ? currentValue.filter((v) => v !== optionValue)\n : [...currentValue, optionValue];\n\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n setHighlightedIndex(-1);\n },\n [value, onChange, currentValue],\n );\n\n const handleRemoveChip = React.useCallback(\n (optionValue: string, e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation();\n const newValue = currentValue.filter((v) => v !== optionValue);\n\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n },\n [value, onChange, currentValue],\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (value === undefined) {\n setInternalValue([]);\n }\n onChange?.([]);\n },\n [value, onChange],\n );\n\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value);\n if (!isOpen) setIsOpen(true);\n },\n [isOpen],\n );\n\n const handleInputFocus = React.useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen && e.key !== \"Tab\") {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setIsOpen(true);\n }\n return;\n }\n\n const selectableOptions = filteredOptions.filter(\n (item) =>\n item.type === \"option\" &&\n !(item.data as MultiSelectOption).disabled,\n );\n\n switch (e.key) {\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n setSearchQuery(\"\");\n setHighlightedIndex(-1);\n inputRef.current?.blur();\n break;\n\n case \"ArrowDown\":\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const nextIndex = Math.min(\n prev + 1,\n selectableOptions.length - 1,\n );\n const option = selectableOptions[nextIndex];\n if (option && shouldVirtualize && virtualizerRef.current) {\n const optionIndex = filteredOptions.indexOf(option);\n virtualizerRef.current.scrollToIndex(optionIndex, {\n align: \"auto\",\n });\n }\n return nextIndex;\n });\n break;\n\n case \"ArrowUp\":\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const nextIndex = Math.max(prev - 1, 0);\n const option = selectableOptions[nextIndex];\n if (option && shouldVirtualize && virtualizerRef.current) {\n const optionIndex = filteredOptions.indexOf(option);\n virtualizerRef.current.scrollToIndex(optionIndex, {\n align: \"auto\",\n });\n }\n return nextIndex;\n });\n break;\n\n case \"Enter\":\n e.preventDefault();\n if (\n highlightedIndex >= 0 &&\n highlightedIndex < selectableOptions.length\n ) {\n const item = selectableOptions[highlightedIndex];\n if (item) {\n const option = item.data as MultiSelectOption;\n handleSelect(option.value);\n }\n }\n break;\n\n case \"Home\":\n e.preventDefault();\n setHighlightedIndex(0);\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(0);\n }\n break;\n\n case \"End\":\n e.preventDefault();\n setHighlightedIndex(selectableOptions.length - 1);\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(filteredOptions.length - 1);\n }\n break;\n\n default:\n break;\n }\n },\n [\n isOpen,\n filteredOptions,\n highlightedIndex,\n handleSelect,\n shouldVirtualize,\n ],\n );\n\n const handleInputKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Backspace\" && !searchQuery && currentValue.length > 0) {\n e.preventDefault();\n const lastValue = currentValue[currentValue.length - 1];\n handleRemoveChip(lastValue!, e);\n } else {\n handleKeyDown(e);\n }\n },\n [searchQuery, currentValue, handleRemoveChip, handleKeyDown],\n );\n\n React.useEffect(() => {\n if (selectedOptions.length === 0 || !triggerRef.current) {\n setVisibleChipsCount(maxChipsVisible);\n return;\n }\n\n const calculateVisibleChips = () => {\n const container = triggerRef.current;\n if (!container) return;\n\n const hiddenChips = container.querySelectorAll(\"[data-hidden-chip]\");\n if (hiddenChips.length === 0) return;\n\n const containerWidth = container.offsetWidth;\n const padding =\n size === \"sm\" ? 12 : size === \"md\" ? 16 : size === \"lg\" ? 20 : 24;\n const chevronWidth = 32;\n const gap = 4;\n const plusIndicatorWidth = 50;\n\n const availableWidth = containerWidth - padding * 2 - chevronWidth;\n let totalWidth = 0;\n let visibleCount = 0;\n\n for (let i = 0; i < hiddenChips.length; i++) {\n const chip = hiddenChips[i];\n if (!chip) continue;\n const chipWidth = chip.getBoundingClientRect().width;\n const requiredSpace =\n totalWidth + chipWidth + (visibleCount > 0 ? gap : 0);\n\n const needsPlusIndicator = i < hiddenChips.length - 1;\n const spaceWithIndicator =\n requiredSpace + (needsPlusIndicator ? gap + plusIndicatorWidth : 0);\n\n if (spaceWithIndicator <= availableWidth) {\n totalWidth = requiredSpace;\n visibleCount++;\n } else {\n break;\n }\n }\n\n setVisibleChipsCount(Math.max(1, visibleCount));\n };\n\n const timeoutId = setTimeout(calculateVisibleChips, 0);\n\n const resizeObserver = new ResizeObserver(() => {\n calculateVisibleChips();\n });\n\n if (triggerRef.current) {\n resizeObserver.observe(triggerRef.current);\n }\n\n return () => {\n clearTimeout(timeoutId);\n resizeObserver.disconnect();\n };\n }, [selectedOptions, size, maxChipsVisible]);\n\n // Handle scroll to update arrow visibility\n const handleScroll = React.useCallback(\n (e: React.UIEvent<HTMLDivElement>) => {\n const element = e.currentTarget;\n const { scrollTop, scrollHeight, clientHeight } = element;\n\n setShowTopArrow(scrollTop > 0);\n setShowBottomArrow(scrollTop + clientHeight < scrollHeight - 1);\n },\n [],\n );\n\n // Check initial scroll state when dropdown opens\n React.useEffect(() => {\n if (isOpen) {\n // Use a small delay to ensure the DOM is fully rendered\n const timeoutId = setTimeout(() => {\n const element = scrollContainerRef.current;\n if (element) {\n const { scrollTop, scrollHeight, clientHeight } = element;\n setShowTopArrow(scrollTop > 0);\n setShowBottomArrow(scrollTop + clientHeight < scrollHeight - 1);\n }\n }, 50);\n\n return () => clearTimeout(timeoutId);\n } else {\n setShowTopArrow(false);\n setShowBottomArrow(false);\n return;\n }\n }, [isOpen, filteredOptions, shouldVirtualize]);\n\n const renderOptionsList = () => (\n <div className=\"relative\" data-slot=\"multiSelect_dropdown\">\n {/* Top scroll indicator */}\n {showTopArrow && (\n <div className=\"flex items-center justify-center\">\n <ChevronUp className=\"h-4 w-4 text-text-primary\" />\n </div>\n )}\n\n <div\n ref={scrollContainerRef}\n className={cn(\"overflow-auto relative\", classNames?.dropdown)}\n style={{ maxHeight: maxDropdownHeight }}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-labelledby={label ? labelId : undefined}\n onScroll={handleScroll}\n >\n {filteredOptions.length === 0 ? (\n <div\n className={cn(\"multiSelect_empty px-3 py-4 text-center text-sm text-text-secondary\", classNames?.empty)}\n data-slot=\"multiSelect_empty\"\n >\n No options found\n </div>\n ) : shouldVirtualize ? (\n <div\n ref={refCallback}\n style={{\n height: `${Math.min(virtualizer.getTotalSize(), maxDropdownHeight)}px`,\n overflow: \"auto\",\n }}\n onScroll={handleScroll}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredOptions[virtualItem.index];\n\n if (item?.type === \"group\") {\n return (\n <div\n key={`group-${virtualItem.index}`}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={multiSelectGroupVariants()}\n >\n {item?.data as string}\n </div>\n );\n }\n\n const option = item?.data as MultiSelectOption;\n const isSelected = currentValue.includes(option.value);\n const selectableOptions = filteredOptions.filter(\n (i) =>\n i.type === \"option\" &&\n !(i.data as MultiSelectOption).disabled,\n );\n const selectableIndex = selectableOptions.findIndex(\n (i) => i === item,\n );\n const isHighlighted = selectableIndex === highlightedIndex;\n\n return (\n <div\n key={option.value}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={cn(\n \"multiSelect_option\",\n multiSelectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && \"bg-surface\",\n classNames?.option,\n isSelected && classNames?.optionSelected,\n )}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-slot=\"multiSelect_option\"\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn(\"text-primary\", iconSizes[size])}\n />\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n ) : (\n <div className=\"py-1\">\n {filteredOptions.map((item, index) => {\n if (item.type === \"group\") {\n return (\n <div\n key={`group-${index}`}\n className={multiSelectGroupVariants()}\n >\n {item.data as string}\n </div>\n );\n }\n\n const option = item.data as MultiSelectOption;\n const isSelected = currentValue.includes(option.value);\n const selectableOptions = filteredOptions.filter(\n (i) =>\n i.type === \"option\" &&\n !(i.data as MultiSelectOption).disabled,\n );\n const selectableIndex = selectableOptions.findIndex(\n (i) => i === item,\n );\n const isHighlighted = selectableIndex === highlightedIndex;\n\n return (\n <div\n key={option.value}\n className={cn(\n \"multiSelect_option\",\n multiSelectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && \"bg-surface\",\n classNames?.option,\n isSelected && classNames?.optionSelected,\n )}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-slot=\"multiSelect_option\"\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn(\"text-primary\", iconSizes[size])}\n />\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Bottom scroll indicator */}\n {showBottomArrow && (\n <div className=\"flex items-center justify-center\">\n <ChevronDown className=\"h-4 w-4 text-text-primary\" />\n </div>\n )}\n </div>\n );\n\n // Trigger button (used in both desktop and mobile)\n const triggerButton = (\n <button\n ref={triggerRef}\n type=\"button\"\n className={cn(\n \"multiSelect_trigger\",\n multiSelectTriggerVariants({ status, size, fullWidth }),\n loading && \"opacity-50\",\n classNames?.trigger,\n className,\n )}\n disabled={disabled || loading}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? labelId : undefined}\n onClick={() => setIsOpen(!isOpen)}\n data-slot=\"multiSelect_trigger\"\n >\n {selectedOptions.length > 0 && (\n <div className=\"flex gap-1 shrink-0\">\n {selectedOptions.slice(0, visibleChipsCount).map((option) => (\n <span\n key={option.value}\n className={cn(\n \"multiSelect_tag inline-flex items-center gap-1 px-2 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\",\n classNames?.tag\n )}\n data-slot=\"multiSelect_tag\"\n >\n {option.label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveChip(option.value, e)}\n className={cn(\n \"multiSelect_tagRemove hover:text-error\",\n classNames?.tagRemove\n )}\n disabled={disabled}\n data-slot=\"multiSelect_tagRemove\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n {selectedOptions.length > visibleChipsCount && (\n <span className=\"inline-flex items-center px-2 py-0.5 bg-surface text-text-secondary rounded text-sm whitespace-nowrap\">\n +{selectedOptions.length - visibleChipsCount}\n </span>\n )}\n </div>\n )}\n <div\n className=\"absolute opacity-0 pointer-events-none whitespace-nowrap\"\n aria-hidden=\"true\"\n >\n {selectedOptions.map((option) => (\n <span\n key={option.value}\n data-hidden-chip\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\"\n >\n {option.label}\n <X className=\"h-3 w-3\" />\n </span>\n ))}\n </div>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"bg-transparent outline-none cursor-pointer placeholder:text-text-secondary/50 flex-1 min-w-0 pointer-events-none\"\n placeholder={selectedOptions.length > 0 ? \"\" : placeholder}\n value={searchQuery}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onKeyDown={handleInputKeyDown}\n disabled={disabled || loading}\n readOnly={!isOpen}\n tabIndex={-1}\n />\n <div className=\"flex items-center gap-1 text-text-secondary\">\n {loading ? (\n <Loader2 className={cn(\"animate-spin\", iconSizes[size])} />\n ) : (\n <>\n {clearable && selectedOptions.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"hover:text-text-primary transition-colors\"\n aria-label=\"Clear selection\"\n >\n <X className={iconSizes[size]} />\n </button>\n )}\n {isOpen ? (\n <Search className={iconSizes[size]} />\n ) : (\n <ChevronDown className={iconSizes[size]} />\n )}\n </>\n )}\n </div>\n </button>\n );\n\n const selectElement = (\n <div\n className={cn(\n \"multiSelect_root relative group\",\n fullWidth ? \"w-full\" : \"inline-block\",\n classNames?.root\n )}\n ref={ref}\n data-slot=\"multiSelect_root\"\n {...props}\n >\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>{triggerButton}</PopoverTrigger>\n\n <PopoverContent\n className=\"p-0 w-[var(--radix-popover-trigger-width)]\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e: Event) => {\n e.preventDefault();\n inputRef.current?.focus();\n }}\n >\n {renderOptionsList()}\n </PopoverContent>\n </Popover>\n </div>\n );\n\n return (\n <div className={cn(\"w-full flex flex-col\", !fullWidth && \"inline-block\")}>\n <div className=\"flex gap-2 items-center\">\n {label && (\n <label\n id={labelId}\n className={cn(\n \"multiSelect_label block mb-0.5\",\n classNames?.label\n )}\n data-slot=\"multiSelect_label\"\n >\n <span className=\"text-sm font-medium text-text-secondary\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n </span>\n </label>\n )}\n {helperMessage && (\n <p\n className={cn(\n \"multiSelect_helper text-xs\",\n status === \"error\" && \"text-error\",\n status === \"warning\" && \"text-warning\",\n status === \"info\" && \"text-info\",\n status === \"success\" && \"text-success\",\n status === \"default\" && \"text-text-secondary\",\n classNames?.helper,\n )}\n data-slot=\"multiSelect_helper\"\n >\n {helperMessage}\n </p>\n )}\n </div>\n {selectElement}\n </div>\n );\n },\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n\nexport type * from \"./types\";\nexport default MultiSelect;\n"]}