@zentauri-ui/zentauri-components 1.7.4 → 1.7.6

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 (370) hide show
  1. package/README.md +9 -4
  2. package/cli/registry.json +3 -0
  3. package/dist/{chunk-CL55KGDF.js → chunk-3W224B3M.js} +22 -22
  4. package/dist/chunk-3W224B3M.js.map +1 -0
  5. package/dist/{chunk-NZDHSIIC.js → chunk-4OCTFG3W.js} +3 -3
  6. package/dist/chunk-4OCTFG3W.js.map +1 -0
  7. package/dist/{chunk-4ZKBLVQX.js → chunk-5565GZ4T.js} +19 -19
  8. package/dist/chunk-5565GZ4T.js.map +1 -0
  9. package/dist/{chunk-BTJYXKCW.js → chunk-6HPS3ZOP.js} +15 -15
  10. package/dist/chunk-6HPS3ZOP.js.map +1 -0
  11. package/dist/chunk-7XCUMSCJ.mjs +80 -0
  12. package/dist/chunk-7XCUMSCJ.mjs.map +1 -0
  13. package/dist/{chunk-QAJOE3HJ.js → chunk-BU2MPXPZ.js} +6 -6
  14. package/dist/chunk-BU2MPXPZ.js.map +1 -0
  15. package/dist/{chunk-BC6M42HQ.mjs → chunk-CL3VH223.mjs} +21 -21
  16. package/dist/chunk-CL3VH223.mjs.map +1 -0
  17. package/dist/{chunk-QXHS3HHZ.mjs → chunk-D3VZKUMH.mjs} +15 -15
  18. package/dist/chunk-D3VZKUMH.mjs.map +1 -0
  19. package/dist/chunk-DEZRB6DS.mjs +83 -0
  20. package/dist/chunk-DEZRB6DS.mjs.map +1 -0
  21. package/dist/{chunk-EDARAO7X.js → chunk-DFCDLVZA.js} +7 -7
  22. package/dist/chunk-DFCDLVZA.js.map +1 -0
  23. package/dist/{chunk-ACGVDY5J.mjs → chunk-EZCYSFML.mjs} +4 -4
  24. package/dist/chunk-EZCYSFML.mjs.map +1 -0
  25. package/dist/{chunk-ZYKJC5HH.js → chunk-G66SXATZ.js} +15 -15
  26. package/dist/chunk-G66SXATZ.js.map +1 -0
  27. package/dist/{chunk-QBPVJH4P.mjs → chunk-H7WDA6U6.mjs} +5 -5
  28. package/dist/chunk-H7WDA6U6.mjs.map +1 -0
  29. package/dist/{chunk-OZMSE44N.mjs → chunk-HLG2YJFZ.mjs} +19 -19
  30. package/dist/chunk-HLG2YJFZ.mjs.map +1 -0
  31. package/dist/{chunk-QYLTKBH7.js → chunk-INXWZ4DS.js} +3 -3
  32. package/dist/chunk-INXWZ4DS.js.map +1 -0
  33. package/dist/{chunk-QSPXPU72.js → chunk-KTLJEPLF.js} +21 -21
  34. package/dist/chunk-KTLJEPLF.js.map +1 -0
  35. package/dist/chunk-LMIL2R4R.js +197 -0
  36. package/dist/chunk-LMIL2R4R.js.map +1 -0
  37. package/dist/{chunk-PR4QXFJT.js → chunk-LNYCEPW5.js} +5 -5
  38. package/dist/chunk-LNYCEPW5.js.map +1 -0
  39. package/dist/chunk-MEAVYU2Y.mjs +192 -0
  40. package/dist/chunk-MEAVYU2Y.mjs.map +1 -0
  41. package/dist/{chunk-P5WLYJ2C.mjs → chunk-NNZXBL7R.mjs} +6 -6
  42. package/dist/chunk-NNZXBL7R.mjs.map +1 -0
  43. package/dist/{chunk-HMNIH3KJ.mjs → chunk-ORFI4BCJ.mjs} +3 -3
  44. package/dist/chunk-ORFI4BCJ.mjs.map +1 -0
  45. package/dist/{chunk-K7TCW5PJ.js → chunk-PMALYOPA.js} +3 -3
  46. package/dist/chunk-PMALYOPA.js.map +1 -0
  47. package/dist/{chunk-WPXQHWPV.js → chunk-PYUZOVLY.js} +4 -4
  48. package/dist/chunk-PYUZOVLY.js.map +1 -0
  49. package/dist/{chunk-ITVMSCOJ.mjs → chunk-R2JJTREQ.mjs} +22 -22
  50. package/dist/chunk-R2JJTREQ.mjs.map +1 -0
  51. package/dist/chunk-RIHJAEOL.js +107 -0
  52. package/dist/chunk-RIHJAEOL.js.map +1 -0
  53. package/dist/{chunk-FHLZH3PB.mjs → chunk-SFRS4EZ5.mjs} +3 -3
  54. package/dist/chunk-SFRS4EZ5.mjs.map +1 -0
  55. package/dist/{chunk-KTGV76M3.mjs → chunk-SSJXWD2M.mjs} +3 -3
  56. package/dist/chunk-SSJXWD2M.mjs.map +1 -0
  57. package/dist/{chunk-YAO62VH2.js → chunk-UGH23TAH.js} +15 -15
  58. package/dist/chunk-UGH23TAH.js.map +1 -0
  59. package/dist/chunk-UPZ5XGUD.mjs +100 -0
  60. package/dist/chunk-UPZ5XGUD.mjs.map +1 -0
  61. package/dist/{chunk-4XVNQ7IY.mjs → chunk-UR7TNW45.mjs} +15 -15
  62. package/dist/chunk-UR7TNW45.mjs.map +1 -0
  63. package/dist/{chunk-HCGSEPOD.mjs → chunk-UROKWFPX.mjs} +7 -7
  64. package/dist/chunk-UROKWFPX.mjs.map +1 -0
  65. package/dist/chunk-V5JTDRV5.mjs +278 -0
  66. package/dist/chunk-V5JTDRV5.mjs.map +1 -0
  67. package/dist/{chunk-XRDVD2EN.js → chunk-X3O45MPI.js} +3 -3
  68. package/dist/{chunk-XRDVD2EN.js.map → chunk-X3O45MPI.js.map} +1 -1
  69. package/dist/{chunk-KEKMMNL5.mjs → chunk-XXRDLZW7.mjs} +3 -3
  70. package/dist/chunk-XXRDLZW7.mjs.map +1 -0
  71. package/dist/chunk-Z4KHAD6Y.js +295 -0
  72. package/dist/chunk-Z4KHAD6Y.js.map +1 -0
  73. package/dist/{chunk-NHQ3S4Y6.mjs → chunk-ZIFMIS7D.mjs} +15 -15
  74. package/dist/chunk-ZIFMIS7D.mjs.map +1 -0
  75. package/dist/chunk-ZUT7ZUM7.js +84 -0
  76. package/dist/chunk-ZUT7ZUM7.js.map +1 -0
  77. package/dist/chunk-ZX2IBIZT.js +92 -0
  78. package/dist/chunk-ZX2IBIZT.js.map +1 -0
  79. package/dist/design-system/accordion.d.ts +1 -1
  80. package/dist/design-system/alert.d.ts +5 -5
  81. package/dist/design-system/badge.d.ts +3 -3
  82. package/dist/design-system/card.d.ts +2 -2
  83. package/dist/design-system/checkbox.d.ts +10 -10
  84. package/dist/design-system/checkbox.d.ts.map +1 -1
  85. package/dist/design-system/command.d.ts +1 -1
  86. package/dist/design-system/command.d.ts.map +1 -1
  87. package/dist/design-system/context-menu.d.ts +41 -0
  88. package/dist/design-system/context-menu.d.ts.map +1 -0
  89. package/dist/design-system/drawer.d.ts +1 -1
  90. package/dist/design-system/dropdown.d.ts +31 -31
  91. package/dist/design-system/dropdown.d.ts.map +1 -1
  92. package/dist/design-system/file-upload.d.ts +15 -15
  93. package/dist/design-system/file-upload.d.ts.map +1 -1
  94. package/dist/design-system/index.d.ts +3 -0
  95. package/dist/design-system/index.d.ts.map +1 -1
  96. package/dist/design-system/inputs.d.ts +13 -13
  97. package/dist/design-system/inputs.d.ts.map +1 -1
  98. package/dist/design-system/modal.d.ts +1 -1
  99. package/dist/design-system/modal.d.ts.map +1 -1
  100. package/dist/design-system/pagination.d.ts +25 -25
  101. package/dist/design-system/popover.d.ts +19 -19
  102. package/dist/design-system/popover.d.ts.map +1 -1
  103. package/dist/design-system/radio-group.d.ts +10 -10
  104. package/dist/design-system/radio-group.d.ts.map +1 -1
  105. package/dist/design-system/scroll-area.d.ts +33 -0
  106. package/dist/design-system/scroll-area.d.ts.map +1 -0
  107. package/dist/design-system/select.d.ts +35 -35
  108. package/dist/design-system/select.d.ts.map +1 -1
  109. package/dist/design-system/skeleton.d.ts +13 -13
  110. package/dist/design-system/skeleton.d.ts.map +1 -1
  111. package/dist/design-system/slider.d.ts +23 -23
  112. package/dist/design-system/slider.d.ts.map +1 -1
  113. package/dist/design-system/stepper.d.ts +22 -22
  114. package/dist/design-system/table.d.ts +13 -13
  115. package/dist/design-system/tabs.d.ts +4 -4
  116. package/dist/design-system/tabs.d.ts.map +1 -1
  117. package/dist/design-system/timeline.d.ts +56 -0
  118. package/dist/design-system/timeline.d.ts.map +1 -0
  119. package/dist/design-system/toast.d.ts +17 -17
  120. package/dist/design-system/toast.d.ts.map +1 -1
  121. package/dist/design-system/toggle.d.ts +54 -54
  122. package/dist/design-system/toggle.d.ts.map +1 -1
  123. package/dist/design-system/tooltip.d.ts +20 -20
  124. package/dist/design-system/typography.d.ts +15 -15
  125. package/dist/ui/accordion/animated.js +7 -7
  126. package/dist/ui/accordion/animated.mjs +2 -2
  127. package/dist/ui/accordion.js +9 -9
  128. package/dist/ui/accordion.mjs +2 -2
  129. package/dist/ui/alert/animated/alert-animated.d.ts.map +1 -1
  130. package/dist/ui/alert/animated.js +2 -2
  131. package/dist/ui/alert/animated.js.map +1 -1
  132. package/dist/ui/alert/animated.mjs +1 -1
  133. package/dist/ui/alert/animated.mjs.map +1 -1
  134. package/dist/ui/alert.js +10 -10
  135. package/dist/ui/alert.mjs +2 -2
  136. package/dist/ui/badge/animated.js +2 -2
  137. package/dist/ui/badge/animated.mjs +1 -1
  138. package/dist/ui/badge/variants.d.ts +1 -1
  139. package/dist/ui/badge.js +4 -4
  140. package/dist/ui/badge.mjs +2 -2
  141. package/dist/ui/card/animated.js +7 -7
  142. package/dist/ui/card/animated.mjs +2 -2
  143. package/dist/ui/card.js +12 -12
  144. package/dist/ui/card.mjs +2 -2
  145. package/dist/ui/checkbox/animated.js +4 -4
  146. package/dist/ui/checkbox/animated.mjs +1 -1
  147. package/dist/ui/checkbox.js +8 -8
  148. package/dist/ui/checkbox.mjs +2 -2
  149. package/dist/ui/command/animated.js +2 -2
  150. package/dist/ui/command/animated.mjs +1 -1
  151. package/dist/ui/command.js +15 -15
  152. package/dist/ui/command.mjs +2 -2
  153. package/dist/ui/context-menu/context-menu.d.ts +11 -0
  154. package/dist/ui/context-menu/context-menu.d.ts.map +1 -0
  155. package/dist/ui/context-menu/index.d.ts +4 -0
  156. package/dist/ui/context-menu/index.d.ts.map +1 -0
  157. package/dist/ui/context-menu/types.d.ts +81 -0
  158. package/dist/ui/context-menu/types.d.ts.map +1 -0
  159. package/dist/ui/context-menu/variants.d.ts +7 -0
  160. package/dist/ui/context-menu/variants.d.ts.map +1 -0
  161. package/dist/ui/context-menu.js +500 -0
  162. package/dist/ui/context-menu.js.map +1 -0
  163. package/dist/ui/context-menu.mjs +488 -0
  164. package/dist/ui/context-menu.mjs.map +1 -0
  165. package/dist/ui/drawer/animated.js +11 -11
  166. package/dist/ui/drawer/animated.mjs +2 -2
  167. package/dist/ui/drawer.js +11 -11
  168. package/dist/ui/drawer.mjs +1 -1
  169. package/dist/ui/dropdown.js +9 -89
  170. package/dist/ui/dropdown.js.map +1 -1
  171. package/dist/ui/dropdown.mjs +1 -81
  172. package/dist/ui/dropdown.mjs.map +1 -1
  173. package/dist/ui/dynamic-stepper.js +47 -47
  174. package/dist/ui/dynamic-stepper.js.map +1 -1
  175. package/dist/ui/dynamic-stepper.mjs +47 -47
  176. package/dist/ui/dynamic-stepper.mjs.map +1 -1
  177. package/dist/ui/file-upload.js +15 -15
  178. package/dist/ui/file-upload.js.map +1 -1
  179. package/dist/ui/file-upload.mjs +15 -15
  180. package/dist/ui/file-upload.mjs.map +1 -1
  181. package/dist/ui/inputs/animated.js +3 -3
  182. package/dist/ui/inputs/animated.mjs +1 -1
  183. package/dist/ui/inputs.js +4 -4
  184. package/dist/ui/inputs.mjs +2 -2
  185. package/dist/ui/modal/animated.js +4 -4
  186. package/dist/ui/modal/animated.mjs +1 -1
  187. package/dist/ui/modal.js +12 -12
  188. package/dist/ui/modal.mjs +2 -2
  189. package/dist/ui/pagination.js +25 -25
  190. package/dist/ui/pagination.js.map +1 -1
  191. package/dist/ui/pagination.mjs +25 -25
  192. package/dist/ui/pagination.mjs.map +1 -1
  193. package/dist/ui/popover/animated.js +4 -4
  194. package/dist/ui/popover/animated.mjs +1 -1
  195. package/dist/ui/popover.js +7 -7
  196. package/dist/ui/popover.mjs +1 -1
  197. package/dist/ui/radio-group/animated.js +7 -7
  198. package/dist/ui/radio-group/animated.mjs +1 -1
  199. package/dist/ui/radio-group.js +11 -11
  200. package/dist/ui/radio-group.mjs +2 -2
  201. package/dist/ui/scroll-area/index.d.ts +4 -0
  202. package/dist/ui/scroll-area/index.d.ts.map +1 -0
  203. package/dist/ui/scroll-area/scroll-area.d.ts +6 -0
  204. package/dist/ui/scroll-area/scroll-area.d.ts.map +1 -0
  205. package/dist/ui/scroll-area/types.d.ts +8 -0
  206. package/dist/ui/scroll-area/types.d.ts.map +1 -0
  207. package/dist/ui/scroll-area/variants.d.ts +8 -0
  208. package/dist/ui/scroll-area/variants.d.ts.map +1 -0
  209. package/dist/ui/scroll-area.js +123 -0
  210. package/dist/ui/scroll-area.js.map +1 -0
  211. package/dist/ui/scroll-area.mjs +120 -0
  212. package/dist/ui/scroll-area.mjs.map +1 -0
  213. package/dist/ui/search.js +2 -2
  214. package/dist/ui/search.mjs +1 -1
  215. package/dist/ui/select.js +35 -35
  216. package/dist/ui/select.js.map +1 -1
  217. package/dist/ui/select.mjs +35 -35
  218. package/dist/ui/select.mjs.map +1 -1
  219. package/dist/ui/skeleton/animated.js +8 -8
  220. package/dist/ui/skeleton/animated.mjs +1 -1
  221. package/dist/ui/skeleton.js +9 -9
  222. package/dist/ui/skeleton.mjs +1 -1
  223. package/dist/ui/slider.js +23 -23
  224. package/dist/ui/slider.js.map +1 -1
  225. package/dist/ui/slider.mjs +23 -23
  226. package/dist/ui/slider.mjs.map +1 -1
  227. package/dist/ui/stepper.js +22 -22
  228. package/dist/ui/stepper.js.map +1 -1
  229. package/dist/ui/stepper.mjs +22 -22
  230. package/dist/ui/stepper.mjs.map +1 -1
  231. package/dist/ui/table/animated.js +8 -8
  232. package/dist/ui/table/animated.mjs +2 -2
  233. package/dist/ui/table.js +14 -14
  234. package/dist/ui/table.mjs +1 -1
  235. package/dist/ui/tabs/animated.js +2 -2
  236. package/dist/ui/tabs/animated.mjs +1 -1
  237. package/dist/ui/tabs.js +9 -9
  238. package/dist/ui/tabs.mjs +1 -1
  239. package/dist/ui/timeline/animated/animations.d.ts +8 -0
  240. package/dist/ui/timeline/animated/animations.d.ts.map +1 -0
  241. package/dist/ui/timeline/animated/index.d.ts +6 -0
  242. package/dist/ui/timeline/animated/index.d.ts.map +1 -0
  243. package/dist/ui/timeline/animated/timeline-item-animated.d.ts +8 -0
  244. package/dist/ui/timeline/animated/timeline-item-animated.d.ts.map +1 -0
  245. package/dist/ui/timeline/animated/types.d.ts +12 -0
  246. package/dist/ui/timeline/animated/types.d.ts.map +1 -0
  247. package/dist/ui/timeline/animated.js +94 -0
  248. package/dist/ui/timeline/animated.js.map +1 -0
  249. package/dist/ui/timeline/animated.mjs +71 -0
  250. package/dist/ui/timeline/animated.mjs.map +1 -0
  251. package/dist/ui/timeline/index.d.ts +4 -0
  252. package/dist/ui/timeline/index.d.ts.map +1 -0
  253. package/dist/ui/timeline/timeline-base.d.ts +37 -0
  254. package/dist/ui/timeline/timeline-base.d.ts.map +1 -0
  255. package/dist/ui/timeline/timeline.d.ts +8 -0
  256. package/dist/ui/timeline/timeline.d.ts.map +1 -0
  257. package/dist/ui/timeline/types.d.ts +38 -0
  258. package/dist/ui/timeline/types.d.ts.map +1 -0
  259. package/dist/ui/timeline/variants.d.ts +19 -0
  260. package/dist/ui/timeline/variants.d.ts.map +1 -0
  261. package/dist/ui/timeline.js +63 -0
  262. package/dist/ui/timeline.js.map +1 -0
  263. package/dist/ui/timeline.mjs +14 -0
  264. package/dist/ui/timeline.mjs.map +1 -0
  265. package/dist/ui/toast/animated.js +7 -7
  266. package/dist/ui/toast/animated.mjs +1 -1
  267. package/dist/ui/toast.js +12 -12
  268. package/dist/ui/toast.mjs +1 -1
  269. package/dist/ui/toggle/animated.js +4 -4
  270. package/dist/ui/toggle/animated.mjs +1 -1
  271. package/dist/ui/toggle.js +4 -4
  272. package/dist/ui/toggle.mjs +2 -2
  273. package/dist/ui/tooltip/animated.js +3 -3
  274. package/dist/ui/tooltip/animated.mjs +1 -1
  275. package/dist/ui/tooltip.js +7 -7
  276. package/dist/ui/tooltip.mjs +1 -1
  277. package/dist/ui/typography.js +15 -15
  278. package/dist/ui/typography.js.map +1 -1
  279. package/dist/ui/typography.mjs +15 -15
  280. package/dist/ui/typography.mjs.map +1 -1
  281. package/package.json +1 -1
  282. package/src/design-system/accordion.ts +1 -1
  283. package/src/design-system/alert.ts +5 -5
  284. package/src/design-system/badge.ts +3 -3
  285. package/src/design-system/card.ts +2 -2
  286. package/src/design-system/checkbox.ts +10 -12
  287. package/src/design-system/command.ts +1 -1
  288. package/src/design-system/context-menu.ts +44 -0
  289. package/src/design-system/drawer.ts +1 -1
  290. package/src/design-system/dropdown.ts +31 -31
  291. package/src/design-system/dynamic-stepper.ts +47 -47
  292. package/src/design-system/file-upload.ts +15 -15
  293. package/src/design-system/index.ts +3 -0
  294. package/src/design-system/inputs.ts +13 -13
  295. package/src/design-system/modal.ts +1 -1
  296. package/src/design-system/pagination.ts +25 -25
  297. package/src/design-system/popover.ts +19 -23
  298. package/src/design-system/radio-group.ts +10 -12
  299. package/src/design-system/scroll-area.ts +47 -0
  300. package/src/design-system/select.ts +36 -35
  301. package/src/design-system/skeleton.ts +20 -13
  302. package/src/design-system/slider.ts +23 -23
  303. package/src/design-system/stepper.ts +22 -22
  304. package/src/design-system/table.ts +13 -13
  305. package/src/design-system/tabs.ts +5 -4
  306. package/src/design-system/timeline.ts +87 -0
  307. package/src/design-system/toast.ts +17 -17
  308. package/src/design-system/toggle.ts +55 -54
  309. package/src/design-system/tooltip.ts +20 -20
  310. package/src/design-system/typography.ts +15 -15
  311. package/src/ui/alert/animated/alert-animated.tsx +1 -0
  312. package/src/ui/context-menu/context-menu.test.tsx +176 -0
  313. package/src/ui/context-menu/context-menu.tsx +536 -0
  314. package/src/ui/context-menu/index.ts +29 -0
  315. package/src/ui/context-menu/types.ts +110 -0
  316. package/src/ui/context-menu/variants.ts +26 -0
  317. package/src/ui/scroll-area/index.ts +5 -0
  318. package/src/ui/scroll-area/scroll-area.test.tsx +116 -0
  319. package/src/ui/scroll-area/scroll-area.tsx +62 -0
  320. package/src/ui/scroll-area/types.ts +11 -0
  321. package/src/ui/scroll-area/variants.ts +44 -0
  322. package/src/ui/timeline/animated/animations.ts +16 -0
  323. package/src/ui/timeline/animated/index.ts +22 -0
  324. package/src/ui/timeline/animated/timeline-item-animated.tsx +76 -0
  325. package/src/ui/timeline/animated/types.ts +21 -0
  326. package/src/ui/timeline/index.ts +30 -0
  327. package/src/ui/timeline/timeline-base.tsx +232 -0
  328. package/src/ui/timeline/timeline.test.tsx +262 -0
  329. package/src/ui/timeline/timeline.tsx +24 -0
  330. package/src/ui/timeline/types.ts +61 -0
  331. package/src/ui/timeline/variants.ts +60 -0
  332. package/dist/chunk-4XVNQ7IY.mjs.map +0 -1
  333. package/dist/chunk-4ZKBLVQX.js.map +0 -1
  334. package/dist/chunk-6QQUQLPB.js +0 -107
  335. package/dist/chunk-6QQUQLPB.js.map +0 -1
  336. package/dist/chunk-ACGVDY5J.mjs.map +0 -1
  337. package/dist/chunk-BC6M42HQ.mjs.map +0 -1
  338. package/dist/chunk-BTJYXKCW.js.map +0 -1
  339. package/dist/chunk-CL55KGDF.js.map +0 -1
  340. package/dist/chunk-EDARAO7X.js.map +0 -1
  341. package/dist/chunk-EN4VLNBF.js +0 -197
  342. package/dist/chunk-EN4VLNBF.js.map +0 -1
  343. package/dist/chunk-FHLZH3PB.mjs.map +0 -1
  344. package/dist/chunk-HCGSEPOD.mjs.map +0 -1
  345. package/dist/chunk-HMNIH3KJ.mjs.map +0 -1
  346. package/dist/chunk-ITVMSCOJ.mjs.map +0 -1
  347. package/dist/chunk-K6IZANTI.mjs +0 -80
  348. package/dist/chunk-K6IZANTI.mjs.map +0 -1
  349. package/dist/chunk-K7TCW5PJ.js.map +0 -1
  350. package/dist/chunk-KEKMMNL5.mjs.map +0 -1
  351. package/dist/chunk-KTGV76M3.mjs.map +0 -1
  352. package/dist/chunk-MTTXLC2V.mjs +0 -100
  353. package/dist/chunk-MTTXLC2V.mjs.map +0 -1
  354. package/dist/chunk-NHQ3S4Y6.mjs.map +0 -1
  355. package/dist/chunk-NZDHSIIC.js.map +0 -1
  356. package/dist/chunk-OZMSE44N.mjs.map +0 -1
  357. package/dist/chunk-P5WLYJ2C.mjs.map +0 -1
  358. package/dist/chunk-PHEUJ4EF.js +0 -84
  359. package/dist/chunk-PHEUJ4EF.js.map +0 -1
  360. package/dist/chunk-PMWRJ2KS.mjs +0 -192
  361. package/dist/chunk-PMWRJ2KS.mjs.map +0 -1
  362. package/dist/chunk-PR4QXFJT.js.map +0 -1
  363. package/dist/chunk-QAJOE3HJ.js.map +0 -1
  364. package/dist/chunk-QBPVJH4P.mjs.map +0 -1
  365. package/dist/chunk-QSPXPU72.js.map +0 -1
  366. package/dist/chunk-QXHS3HHZ.mjs.map +0 -1
  367. package/dist/chunk-QYLTKBH7.js.map +0 -1
  368. package/dist/chunk-WPXQHWPV.js.map +0 -1
  369. package/dist/chunk-YAO62VH2.js.map +0 -1
  370. package/dist/chunk-ZYKJC5HH.js.map +0 -1
@@ -0,0 +1,536 @@
1
+ "use client";
2
+
3
+ import {
4
+ Children,
5
+ cloneElement,
6
+ createContext,
7
+ isValidElement,
8
+ useCallback,
9
+ useContext,
10
+ useEffect,
11
+ useId,
12
+ useLayoutEffect,
13
+ useMemo,
14
+ useRef,
15
+ useState,
16
+ type KeyboardEvent,
17
+ type MouseEvent,
18
+ type ReactElement,
19
+ type Ref,
20
+ type RefObject,
21
+ } from "react";
22
+ import { FiChevronRight } from "react-icons/fi";
23
+
24
+ import {
25
+ zuiContextMenuLabelBase,
26
+ zuiContextMenuSeparatorBase,
27
+ } from "../../design-system/context-menu";
28
+ import { cn } from "../../lib/utils";
29
+ import type {
30
+ ContextMenuContentProps,
31
+ ContextMenuContextType,
32
+ ContextMenuItemProps,
33
+ ContextMenuLabelProps,
34
+ ContextMenuPosition,
35
+ ContextMenuProps,
36
+ ContextMenuSeparatorProps,
37
+ ContextMenuSubContentProps,
38
+ ContextMenuSubContextType,
39
+ ContextMenuSubProps,
40
+ ContextMenuSubTriggerProps,
41
+ ContextMenuTriggerProps,
42
+ GetSafePositionProps,
43
+ ReactChildSoleCandidate,
44
+ } from "./types";
45
+ import {
46
+ contextMenuContentVariants,
47
+ contextMenuItemVariants,
48
+ } from "./variants";
49
+
50
+ const ContextMenuContext = createContext<ContextMenuContextType | null>(null);
51
+ const ContextMenuSubContext = createContext<ContextMenuSubContextType | null>(
52
+ null,
53
+ );
54
+
55
+ const useContextMenu = () => {
56
+ const context = useContext(ContextMenuContext);
57
+ if (!context) {
58
+ throw new Error("ContextMenu components must be used within ContextMenu");
59
+ }
60
+ return context;
61
+ };
62
+
63
+ const useContextMenuSub = () => {
64
+ const context = useContext(ContextMenuSubContext);
65
+ if (!context) {
66
+ throw new Error(
67
+ "ContextMenuSub components must be used within ContextMenuSub",
68
+ );
69
+ }
70
+ return context;
71
+ };
72
+
73
+ function mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {
74
+ return (node: T) => {
75
+ for (const ref of refs) {
76
+ if (typeof ref === "function") {
77
+ ref(node);
78
+ } else if (ref) {
79
+ (ref as RefObject<T | null>).current = node;
80
+ }
81
+ }
82
+ };
83
+ }
84
+
85
+ const getSafePosition = ({
86
+ position,
87
+ width,
88
+ height,
89
+ collisionPadding,
90
+ }: GetSafePositionProps) => {
91
+ const fallback = position ?? { x: collisionPadding, y: collisionPadding };
92
+
93
+ if (typeof window === "undefined") {
94
+ return fallback;
95
+ }
96
+
97
+ return {
98
+ x: Math.max(
99
+ collisionPadding,
100
+ Math.min(fallback.x, window.innerWidth - width - collisionPadding),
101
+ ),
102
+ y: Math.max(
103
+ collisionPadding,
104
+ Math.min(fallback.y, window.innerHeight - height - collisionPadding),
105
+ ),
106
+ };
107
+ };
108
+
109
+ export const ContextMenu = ({
110
+ children,
111
+ defaultOpen = false,
112
+ open: controlledOpen,
113
+ onOpenChange,
114
+ closeOnEscape = true,
115
+ closeOnOutsideClick = true,
116
+ }: ContextMenuProps) => {
117
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
118
+ const [position, setPosition] = useState<ContextMenuPosition | null>(null);
119
+ const contentId = `${useId()}-context-menu`;
120
+ const triggerRef = useRef<HTMLElement | null>(null);
121
+ const contentRef = useRef<HTMLDivElement | null>(null);
122
+
123
+ const isControlled = controlledOpen !== undefined;
124
+ const open = isControlled ? controlledOpen : uncontrolledOpen;
125
+
126
+ const setOpen = useCallback(
127
+ (nextOpen: boolean) => {
128
+ if (!isControlled) {
129
+ setUncontrolledOpen(nextOpen);
130
+ }
131
+ onOpenChange?.(nextOpen);
132
+ },
133
+ [isControlled, onOpenChange],
134
+ );
135
+
136
+ const openAt = useCallback(
137
+ (nextPosition: ContextMenuPosition) => {
138
+ setPosition(nextPosition);
139
+ setOpen(true);
140
+ },
141
+ [setOpen],
142
+ );
143
+
144
+ useEffect(() => {
145
+ if (!open) {
146
+ return undefined;
147
+ }
148
+
149
+ const onPointerDown = (event: PointerEvent) => {
150
+ if (!closeOnOutsideClick) {
151
+ return;
152
+ }
153
+ const target = event.target as Node;
154
+ if (contentRef.current?.contains(target)) {
155
+ return;
156
+ }
157
+ if (triggerRef.current?.contains(target) && event.button !== 0) {
158
+ return;
159
+ }
160
+ setOpen(false);
161
+ };
162
+
163
+ const onKeyDown = (event: globalThis.KeyboardEvent) => {
164
+ if (event.key === "Escape" && closeOnEscape) {
165
+ setOpen(false);
166
+ triggerRef.current?.focus();
167
+ }
168
+ };
169
+
170
+ const onScroll = () => {
171
+ setOpen(false);
172
+ };
173
+
174
+ document.addEventListener("pointerdown", onPointerDown);
175
+ document.addEventListener("keydown", onKeyDown);
176
+ document.addEventListener("scroll", onScroll, { capture: true });
177
+
178
+ return () => {
179
+ document.removeEventListener("pointerdown", onPointerDown);
180
+ document.removeEventListener("keydown", onKeyDown);
181
+ document.removeEventListener("scroll", onScroll, { capture: true });
182
+ };
183
+ }, [closeOnEscape, closeOnOutsideClick, open, setOpen]);
184
+
185
+ const contextValue = useMemo(
186
+ () => ({
187
+ open,
188
+ setOpen,
189
+ openAt,
190
+ contentId,
191
+ triggerRef,
192
+ contentRef,
193
+ position,
194
+ }),
195
+ [contentId, open, openAt, setOpen, position],
196
+ );
197
+
198
+ return (
199
+ <ContextMenuContext.Provider value={contextValue}>
200
+ <div className="contents">{children}</div>
201
+ </ContextMenuContext.Provider>
202
+ );
203
+ };
204
+
205
+ export const ContextMenuTrigger = ({
206
+ children,
207
+ className,
208
+ disabled = false,
209
+ }: ContextMenuTriggerProps) => {
210
+ const { open, openAt, contentId, triggerRef } = useContextMenu();
211
+
212
+ const handleContextMenu = (event: MouseEvent<HTMLElement>) => {
213
+ if (disabled) {
214
+ return;
215
+ }
216
+ event.preventDefault();
217
+ const isKeyboardTrigger = event.clientX === 0 && event.clientY === 0;
218
+ if (isKeyboardTrigger) {
219
+ const rect = event.currentTarget.getBoundingClientRect();
220
+ openAt({ x: rect.left, y: rect.bottom });
221
+ } else {
222
+ openAt({ x: event.clientX, y: event.clientY });
223
+ }
224
+ };
225
+ const childList = Children.toArray(children).filter(
226
+ (node) => node !== null && node !== undefined && typeof node !== "boolean",
227
+ );
228
+ const soleCandidate =
229
+ childList.length === 1 && isValidElement(childList[0])
230
+ ? (childList[0] as ReactChildSoleCandidate)
231
+ : undefined;
232
+
233
+ if (soleCandidate) {
234
+ return cloneElement(soleCandidate, {
235
+ ref: mergeRefs(triggerRef, soleCandidate.props.ref),
236
+ onContextMenu: (event) => {
237
+ soleCandidate.props.onContextMenu?.(event);
238
+ if (!event.defaultPrevented) {
239
+ handleContextMenu(event);
240
+ }
241
+ },
242
+ className: cn(className, soleCandidate.props.className),
243
+ tabIndex: soleCandidate.props.tabIndex ?? 0,
244
+ "aria-controls": open ? contentId : undefined,
245
+ "aria-expanded": open,
246
+ "aria-haspopup": "menu",
247
+ });
248
+ }
249
+
250
+ return (
251
+ <span
252
+ ref={triggerRef as Ref<HTMLSpanElement>}
253
+ className={className}
254
+ tabIndex={0}
255
+ onContextMenu={handleContextMenu}
256
+ aria-controls={open ? contentId : undefined}
257
+ aria-expanded={open}
258
+ aria-haspopup="menu"
259
+ >
260
+ {children}
261
+ </span>
262
+ );
263
+ };
264
+
265
+ export const ContextMenuContent = ({
266
+ children,
267
+ className,
268
+ collisionPadding = 8,
269
+ spacing,
270
+ style,
271
+ width = 220,
272
+ ...props
273
+ }: ContextMenuContentProps) => {
274
+ const { open, contentId, contentRef, position } = useContextMenu();
275
+ const [menuSize, setMenuSize] = useState({ width, height: 0 });
276
+
277
+ useLayoutEffect(() => {
278
+ if (!open || !contentRef.current) {
279
+ return;
280
+ }
281
+
282
+ const rect = contentRef.current.getBoundingClientRect();
283
+ const nextSize = {
284
+ width: Math.max(width, rect.width),
285
+ height: rect.height,
286
+ };
287
+
288
+ setMenuSize((currentSize) =>
289
+ currentSize.width === nextSize.width &&
290
+ currentSize.height === nextSize.height
291
+ ? currentSize
292
+ : nextSize,
293
+ );
294
+ });
295
+
296
+ useEffect(() => {
297
+ if (!open) {
298
+ setMenuSize({ width, height: 0 });
299
+ }
300
+ }, [open, width]);
301
+
302
+ if (!open) {
303
+ return null;
304
+ }
305
+
306
+ const safePosition = getSafePosition({
307
+ position,
308
+ width: menuSize.width,
309
+ height: menuSize.height,
310
+ collisionPadding,
311
+ });
312
+
313
+ return (
314
+ <div
315
+ ref={contentRef}
316
+ id={contentId}
317
+ role="menu"
318
+ tabIndex={-1}
319
+ className={cn(
320
+ contextMenuContentVariants({ spacing }),
321
+ "fixed z-50",
322
+ className,
323
+ )}
324
+ style={{
325
+ left: safePosition.x,
326
+ top: safePosition.y,
327
+ minWidth: width,
328
+ ...style,
329
+ }}
330
+ {...props}
331
+ >
332
+ {children}
333
+ </div>
334
+ );
335
+ };
336
+
337
+ export const ContextMenuItem = ({
338
+ children,
339
+ className,
340
+ closeOnSelect = true,
341
+ disabled = false,
342
+ inset = false,
343
+ leftIcon,
344
+ onClick,
345
+ onKeyDown,
346
+ onSelect,
347
+ rightIcon,
348
+ variant,
349
+ ...props
350
+ }: ContextMenuItemProps) => {
351
+ const { setOpen } = useContextMenu();
352
+
353
+ const handleSelect = () => {
354
+ if (disabled) {
355
+ return;
356
+ }
357
+ onSelect?.();
358
+ if (closeOnSelect) {
359
+ setOpen(false);
360
+ }
361
+ };
362
+
363
+ const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {
364
+ onKeyDown?.(event);
365
+ if (event.defaultPrevented || disabled) {
366
+ return;
367
+ }
368
+ if (event.key === "Enter" || event.key === " ") {
369
+ event.preventDefault();
370
+ handleSelect();
371
+ }
372
+ };
373
+
374
+ return (
375
+ <div
376
+ role="menuitem"
377
+ tabIndex={disabled ? undefined : 0}
378
+ aria-disabled={disabled || undefined}
379
+ className={cn(
380
+ contextMenuItemVariants({ variant }),
381
+ inset && "pl-8",
382
+ disabled && "pointer-events-none cursor-not-allowed opacity-50",
383
+ className,
384
+ )}
385
+ onClick={(event) => {
386
+ onClick?.(event);
387
+ if (!event.defaultPrevented) {
388
+ handleSelect();
389
+ }
390
+ }}
391
+ onKeyDown={handleKeyDown}
392
+ {...props}
393
+ >
394
+ <div className="flex min-w-0 items-center gap-2">
395
+ {leftIcon}
396
+ <span className="truncate">{children}</span>
397
+ </div>
398
+ {rightIcon ? (
399
+ <div className="ml-4 flex items-center">{rightIcon}</div>
400
+ ) : null}
401
+ </div>
402
+ );
403
+ };
404
+
405
+ export const ContextMenuLabel = ({
406
+ children,
407
+ className,
408
+ inset = false,
409
+ ...props
410
+ }: ContextMenuLabelProps) => {
411
+ return (
412
+ <p
413
+ className={cn(zuiContextMenuLabelBase, inset && "pl-8", className)}
414
+ {...props}
415
+ >
416
+ {children}
417
+ </p>
418
+ );
419
+ };
420
+
421
+ export const ContextMenuSeparator = ({
422
+ className,
423
+ ...props
424
+ }: ContextMenuSeparatorProps) => {
425
+ return (
426
+ <div
427
+ role="separator"
428
+ className={cn(zuiContextMenuSeparatorBase, className)}
429
+ {...props}
430
+ />
431
+ );
432
+ };
433
+
434
+ export const ContextMenuSub = ({
435
+ children,
436
+ defaultOpen = false,
437
+ }: ContextMenuSubProps) => {
438
+ const [open, setOpen] = useState(defaultOpen);
439
+ const value = useMemo(() => ({ open, setOpen }), [open]);
440
+
441
+ return (
442
+ <ContextMenuSubContext.Provider value={value}>
443
+ <div className="relative" onPointerLeave={() => setOpen(false)}>
444
+ {children}
445
+ </div>
446
+ </ContextMenuSubContext.Provider>
447
+ );
448
+ };
449
+
450
+ export const ContextMenuSubTrigger = ({
451
+ children,
452
+ className,
453
+ disabled = false,
454
+ inset = false,
455
+ onFocus,
456
+ onKeyDown,
457
+ onPointerEnter,
458
+ rightIcon = <FiChevronRight aria-hidden="true" />,
459
+ variant,
460
+ ...props
461
+ }: ContextMenuSubTriggerProps) => {
462
+ const { open, setOpen } = useContextMenuSub();
463
+
464
+ return (
465
+ <div
466
+ role="menuitem"
467
+ tabIndex={disabled ? undefined : 0}
468
+ aria-disabled={disabled || undefined}
469
+ aria-expanded={open}
470
+ aria-haspopup="menu"
471
+ className={cn(
472
+ contextMenuItemVariants({ variant }),
473
+ inset && "pl-8",
474
+ disabled && "pointer-events-none cursor-not-allowed opacity-50",
475
+ className,
476
+ )}
477
+ onFocus={(event) => {
478
+ onFocus?.(event);
479
+ }}
480
+ onPointerEnter={(event) => {
481
+ onPointerEnter?.(event);
482
+ if (!disabled) {
483
+ setOpen(true);
484
+ }
485
+ }}
486
+ onKeyDown={(event) => {
487
+ onKeyDown?.(event);
488
+ if (event.defaultPrevented || disabled) {
489
+ return;
490
+ }
491
+ if (event.key === "ArrowRight" || event.key === "Enter") {
492
+ event.preventDefault();
493
+ setOpen(true);
494
+ }
495
+ if (event.key === "ArrowLeft") {
496
+ event.preventDefault();
497
+ setOpen(false);
498
+ }
499
+ }}
500
+ {...props}
501
+ >
502
+ <div className="flex min-w-0 items-center gap-2">
503
+ <span className="truncate">{children}</span>
504
+ </div>
505
+ <div className="ml-4 flex items-center">{rightIcon}</div>
506
+ </div>
507
+ );
508
+ };
509
+
510
+ export const ContextMenuSubContent = ({
511
+ children,
512
+ className,
513
+ spacing,
514
+ ...props
515
+ }: ContextMenuSubContentProps) => {
516
+ const { open } = useContextMenuSub();
517
+
518
+ if (!open) {
519
+ return null;
520
+ }
521
+
522
+ return (
523
+ <div
524
+ role="menu"
525
+ tabIndex={-1}
526
+ className={cn(
527
+ contextMenuContentVariants({ spacing }),
528
+ "absolute left-full top-0 z-50 ml-2",
529
+ className,
530
+ )}
531
+ {...props}
532
+ >
533
+ {children}
534
+ </div>
535
+ );
536
+ };
@@ -0,0 +1,29 @@
1
+ "use client";
2
+
3
+ export {
4
+ ContextMenu,
5
+ ContextMenuContent,
6
+ ContextMenuItem,
7
+ ContextMenuLabel,
8
+ ContextMenuSeparator,
9
+ ContextMenuSub,
10
+ ContextMenuSubContent,
11
+ ContextMenuSubTrigger,
12
+ ContextMenuTrigger,
13
+ } from "./context-menu";
14
+ export type {
15
+ ContextMenuContentProps,
16
+ ContextMenuItemProps,
17
+ ContextMenuLabelProps,
18
+ ContextMenuPosition,
19
+ ContextMenuProps,
20
+ ContextMenuSeparatorProps,
21
+ ContextMenuSubContentProps,
22
+ ContextMenuSubProps,
23
+ ContextMenuSubTriggerProps,
24
+ ContextMenuTriggerProps,
25
+ } from "./types";
26
+ export {
27
+ contextMenuContentVariants,
28
+ contextMenuItemVariants,
29
+ } from "./variants";
@@ -0,0 +1,110 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import type {
3
+ ComponentPropsWithRef,
4
+ HTMLAttributes,
5
+ MouseEvent,
6
+ ReactElement,
7
+ ReactNode,
8
+ Ref,
9
+ RefObject,
10
+ } from "react";
11
+
12
+ import type {
13
+ contextMenuContentVariants,
14
+ contextMenuItemVariants,
15
+ } from "./variants";
16
+
17
+ export type ContextMenuPosition = {
18
+ x: number;
19
+ y: number;
20
+ };
21
+
22
+ export type ContextMenuContextType = {
23
+ open: boolean;
24
+ setOpen: (open: boolean) => void;
25
+ openAt: (position: ContextMenuPosition) => void;
26
+ position: ContextMenuPosition | null;
27
+ contentId: string;
28
+ triggerRef: RefObject<HTMLElement | null>;
29
+ contentRef: RefObject<HTMLDivElement | null>;
30
+ };
31
+
32
+ export type ContextMenuProps = {
33
+ children: ReactNode;
34
+ defaultOpen?: boolean;
35
+ open?: boolean;
36
+ onOpenChange?: (open: boolean) => void;
37
+ closeOnEscape?: boolean;
38
+ closeOnOutsideClick?: boolean;
39
+ };
40
+
41
+ export type ContextMenuTriggerProps = {
42
+ children: ReactNode;
43
+ className?: string;
44
+ disabled?: boolean;
45
+ };
46
+
47
+ export type ContextMenuContentProps = ComponentPropsWithRef<"div"> &
48
+ VariantProps<typeof contextMenuContentVariants> & {
49
+ children: ReactNode;
50
+ collisionPadding?: number;
51
+ width?: number;
52
+ };
53
+
54
+ export type ContextMenuItemProps = HTMLAttributes<HTMLDivElement> &
55
+ VariantProps<typeof contextMenuItemVariants> & {
56
+ children: ReactNode;
57
+ closeOnSelect?: boolean;
58
+ disabled?: boolean;
59
+ inset?: boolean;
60
+ leftIcon?: ReactNode;
61
+ onSelect?: () => void;
62
+ rightIcon?: ReactNode;
63
+ };
64
+
65
+ export type ContextMenuLabelProps = HTMLAttributes<HTMLParagraphElement> & {
66
+ children: ReactNode;
67
+ inset?: boolean;
68
+ };
69
+
70
+ export type ContextMenuSeparatorProps = HTMLAttributes<HTMLDivElement>;
71
+
72
+ export type ContextMenuSubContextType = {
73
+ open: boolean;
74
+ setOpen: (open: boolean) => void;
75
+ };
76
+
77
+ export type ContextMenuSubProps = {
78
+ children: ReactNode;
79
+ defaultOpen?: boolean;
80
+ };
81
+
82
+ export type ContextMenuSubTriggerProps = HTMLAttributes<HTMLDivElement> &
83
+ VariantProps<typeof contextMenuItemVariants> & {
84
+ children: ReactNode;
85
+ disabled?: boolean;
86
+ inset?: boolean;
87
+ rightIcon?: ReactNode;
88
+ };
89
+
90
+ export type ContextMenuSubContentProps = ComponentPropsWithRef<"div"> &
91
+ VariantProps<typeof contextMenuContentVariants> & {
92
+ children: ReactNode;
93
+ };
94
+
95
+ export type GetSafePositionProps = {
96
+ position: ContextMenuPosition | null;
97
+ width: number;
98
+ height: number;
99
+ collisionPadding: number;
100
+ };
101
+
102
+ export type ReactChildSoleCandidate = ReactElement<{
103
+ className?: string;
104
+ ref?: Ref<HTMLElement>;
105
+ onContextMenu?: (event: MouseEvent<HTMLElement>) => void;
106
+ tabIndex?: number;
107
+ "aria-controls"?: string;
108
+ "aria-expanded"?: boolean;
109
+ "aria-haspopup"?: string;
110
+ }>;
@@ -0,0 +1,26 @@
1
+ import { cva } from "class-variance-authority";
2
+
3
+ import {
4
+ zuiContextMenuContentBase,
5
+ zuiContextMenuItemBase,
6
+ zuiContextMenuItemVariants,
7
+ zuiContextMenuSpacing,
8
+ } from "../../design-system/context-menu";
9
+
10
+ export const contextMenuContentVariants = cva(zuiContextMenuContentBase, {
11
+ variants: {
12
+ spacing: zuiContextMenuSpacing,
13
+ },
14
+ defaultVariants: {
15
+ spacing: "default",
16
+ },
17
+ });
18
+
19
+ export const contextMenuItemVariants = cva(zuiContextMenuItemBase, {
20
+ variants: {
21
+ variant: zuiContextMenuItemVariants,
22
+ },
23
+ defaultVariants: {
24
+ variant: "default",
25
+ },
26
+ });
@@ -0,0 +1,5 @@
1
+ "use client";
2
+
3
+ export { ScrollArea } from "./scroll-area";
4
+ export type { ScrollAreaProps, ScrollAreaVariantProps } from "./types";
5
+ export { scrollAreaVariants } from "./variants";