@kamod-ch/ui 1.1.0 → 1.3.0

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 (336) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +12 -0
  3. package/dist/{Accordion-D1PiNspd.d.ts → Accordion-BiCBkB8o.d.ts} +7 -1
  4. package/dist/{AlertDialog-GadhKjPC.d.ts → AlertDialog-CZ2taZg4.d.ts} +3 -3
  5. package/dist/Button-OI3VvO-J.d.ts +84 -0
  6. package/dist/{Collapsible-CW1hQwqV.d.ts → Collapsible-BdQqvk35.d.ts} +6 -1
  7. package/dist/{ComboboxValue-BGfXgtZt.d.ts → ComboboxValue-Cq6zoDkt.d.ts} +1 -1
  8. package/dist/{Dialog-BOIteLfe.d.ts → Dialog-DdD1sMwk.d.ts} +12 -1
  9. package/dist/{DialogContent-cQHSRQdT.d.ts → DialogContent-YWzwWdSv.d.ts} +6 -1
  10. package/dist/{Drawer-CdjXZxxK.d.ts → Drawer-8xfn9KLf.d.ts} +2 -2
  11. package/dist/{Dropdown-CVbWVKok.d.ts → Dropdown-CzDJJgXQ.d.ts} +32 -27
  12. package/dist/{FieldTitle-aSgThW-B.d.ts → FieldTitle-hsI0Y6Zm.d.ts} +13 -13
  13. package/dist/{HoverCard-aVEEtkyO.d.ts → HoverCard-CBBr-tT9.d.ts} +14 -14
  14. package/dist/{Input-Cem05el9.d.ts → Input-C_X0Xpn2.d.ts} +11 -11
  15. package/dist/{PopoverTrigger-CH_Kx2mn.d.ts → PopoverTrigger-CIPAh0h0.d.ts} +14 -14
  16. package/dist/{RadioGroup-BaElzLwa.d.ts → RadioGroup-BDF3NaXQ.d.ts} +8 -8
  17. package/dist/{Sheet-DZ-p-aHY.d.ts → Sheet-DVt5iTiK.d.ts} +1 -1
  18. package/dist/{SidebarProvider-Bx7-BdQn.d.ts → SidebarProvider-CoVCItNd.d.ts} +18 -18
  19. package/dist/{Switch-CTTkNdqF.d.ts → Switch-BcNJFeRY.d.ts} +8 -8
  20. package/dist/{Tabs-CR-thcs6.d.ts → Tabs-CrXH3YED.d.ts} +18 -9
  21. package/dist/{Textarea-DbKkduOG.d.ts → Textarea-CST17pYW.d.ts} +11 -11
  22. package/dist/Toggle-BgvkYUI8.d.ts +49 -0
  23. package/dist/{ToggleGroup-UeYHzQe7.d.ts → ToggleGroup-CqYICGsS.d.ts} +42 -42
  24. package/dist/TreeProvider-Cpu8yo3y.d.ts +270 -0
  25. package/dist/Typography-Df9IVmw2.d.ts +64 -0
  26. package/dist/{chunk-ZM67EKZC.js → chunk-22G3DW5M.js} +4 -4
  27. package/dist/{chunk-ZM67EKZC.js.map → chunk-22G3DW5M.js.map} +1 -1
  28. package/dist/{chunk-BDK7CDEI.js → chunk-2F3PWEDR.js} +3 -3
  29. package/dist/{chunk-BDK7CDEI.js.map → chunk-2F3PWEDR.js.map} +1 -1
  30. package/dist/{chunk-ZHAGKFSO.js → chunk-2SPOI3MX.js} +3 -3
  31. package/dist/{chunk-ZHAGKFSO.js.map → chunk-2SPOI3MX.js.map} +1 -1
  32. package/dist/chunk-2UTJHQTS.js +162 -0
  33. package/dist/chunk-2UTJHQTS.js.map +1 -0
  34. package/dist/{chunk-NKKMM6CK.js → chunk-3AFRSB5R.js} +3 -3
  35. package/dist/{chunk-NKKMM6CK.js.map → chunk-3AFRSB5R.js.map} +1 -1
  36. package/dist/{chunk-LCMPFPBN.js → chunk-3ETRJPBL.js} +3 -3
  37. package/dist/{chunk-LCMPFPBN.js.map → chunk-3ETRJPBL.js.map} +1 -1
  38. package/dist/{chunk-WAPRVVDQ.js → chunk-3HBKDY64.js} +3 -3
  39. package/dist/{chunk-WAPRVVDQ.js.map → chunk-3HBKDY64.js.map} +1 -1
  40. package/dist/{chunk-PPYJQNE5.js → chunk-3XMFQKWB.js} +9 -5
  41. package/dist/chunk-3XMFQKWB.js.map +1 -0
  42. package/dist/{chunk-HCTZJYHK.js → chunk-4SQKSVBH.js} +6 -6
  43. package/dist/chunk-4SQKSVBH.js.map +1 -0
  44. package/dist/{chunk-ZVAW22GX.js → chunk-4ZFKDNSK.js} +3 -3
  45. package/dist/{chunk-ZVAW22GX.js.map → chunk-4ZFKDNSK.js.map} +1 -1
  46. package/dist/{chunk-IJ4ZRIR4.js → chunk-53FZEAOJ.js} +5 -5
  47. package/dist/{chunk-IJ4ZRIR4.js.map → chunk-53FZEAOJ.js.map} +1 -1
  48. package/dist/{chunk-BYG2ULS3.js → chunk-5ATODZ6L.js} +5 -7
  49. package/dist/chunk-5ATODZ6L.js.map +1 -0
  50. package/dist/{chunk-TXKPDNRD.js → chunk-5I7ULBDP.js} +3 -3
  51. package/dist/{chunk-TXKPDNRD.js.map → chunk-5I7ULBDP.js.map} +1 -1
  52. package/dist/{chunk-UEXTD7ZB.js → chunk-6HFTTHSY.js} +3 -3
  53. package/dist/{chunk-UEXTD7ZB.js.map → chunk-6HFTTHSY.js.map} +1 -1
  54. package/dist/{chunk-6RASPU5N.js → chunk-7LWAWZHM.js} +4 -11
  55. package/dist/chunk-7LWAWZHM.js.map +1 -0
  56. package/dist/{chunk-RHNI5UQO.js → chunk-A6ZZZFZN.js} +4 -4
  57. package/dist/{chunk-RHNI5UQO.js.map → chunk-A6ZZZFZN.js.map} +1 -1
  58. package/dist/{chunk-V63YIVKJ.js → chunk-APZXMU2X.js} +4 -4
  59. package/dist/{chunk-V63YIVKJ.js.map → chunk-APZXMU2X.js.map} +1 -1
  60. package/dist/{chunk-6FYSVMH7.js → chunk-AYLEWD77.js} +3 -3
  61. package/dist/{chunk-6FYSVMH7.js.map → chunk-AYLEWD77.js.map} +1 -1
  62. package/dist/{chunk-D3DQ4ICC.js → chunk-BZMD4EZC.js} +4 -11
  63. package/dist/chunk-BZMD4EZC.js.map +1 -0
  64. package/dist/{chunk-PU5J5EPY.js → chunk-C7TARE5T.js} +5 -5
  65. package/dist/{chunk-PU5J5EPY.js.map → chunk-C7TARE5T.js.map} +1 -1
  66. package/dist/{chunk-5FBD2NTR.js → chunk-DDRX6NNW.js} +6 -9
  67. package/dist/chunk-DDRX6NNW.js.map +1 -0
  68. package/dist/{chunk-HHLQYMPT.js → chunk-DUTKHOH3.js} +4 -4
  69. package/dist/{chunk-HHLQYMPT.js.map → chunk-DUTKHOH3.js.map} +1 -1
  70. package/dist/{chunk-24QD2FTA.js → chunk-EBXTNL52.js} +12 -15
  71. package/dist/chunk-EBXTNL52.js.map +1 -0
  72. package/dist/{chunk-STRBBF45.js → chunk-FOQ32NEP.js} +5 -5
  73. package/dist/chunk-FOQ32NEP.js.map +1 -0
  74. package/dist/{chunk-UIA74JVN.js → chunk-FXG53XY2.js} +5 -5
  75. package/dist/chunk-FXG53XY2.js.map +1 -0
  76. package/dist/{chunk-2KY7P27I.js → chunk-G7LTWXRN.js} +3 -3
  77. package/dist/{chunk-2KY7P27I.js.map → chunk-G7LTWXRN.js.map} +1 -1
  78. package/dist/{chunk-6BK3PIRX.js → chunk-GD3VBO44.js} +6 -6
  79. package/dist/{chunk-6BK3PIRX.js.map → chunk-GD3VBO44.js.map} +1 -1
  80. package/dist/{chunk-MD6HHORY.js → chunk-GPRE2VWB.js} +3 -3
  81. package/dist/{chunk-MD6HHORY.js.map → chunk-GPRE2VWB.js.map} +1 -1
  82. package/dist/{chunk-QZX3RFIC.js → chunk-HJF5AV4L.js} +11 -34
  83. package/dist/chunk-HJF5AV4L.js.map +1 -0
  84. package/dist/{chunk-QFDTG2ZJ.js → chunk-HWPROYKB.js} +3 -3
  85. package/dist/{chunk-QFDTG2ZJ.js.map → chunk-HWPROYKB.js.map} +1 -1
  86. package/dist/chunk-ISISDJ3Z.js +205 -0
  87. package/dist/chunk-ISISDJ3Z.js.map +1 -0
  88. package/dist/{chunk-3LIT5GWF.js → chunk-IW43BO47.js} +57 -19
  89. package/dist/chunk-IW43BO47.js.map +1 -0
  90. package/dist/{chunk-CLEC2RMU.js → chunk-JKEILBHG.js} +3 -3
  91. package/dist/{chunk-CLEC2RMU.js.map → chunk-JKEILBHG.js.map} +1 -1
  92. package/dist/{chunk-TFLSEEM4.js → chunk-KCN3GXRK.js} +3 -3
  93. package/dist/{chunk-TFLSEEM4.js.map → chunk-KCN3GXRK.js.map} +1 -1
  94. package/dist/{chunk-EMUPVA2F.js → chunk-KHV3WV6T.js} +4 -4
  95. package/dist/{chunk-EMUPVA2F.js.map → chunk-KHV3WV6T.js.map} +1 -1
  96. package/dist/{chunk-G6TV6TF7.js → chunk-KJ5PYCJG.js} +4 -12
  97. package/dist/chunk-KJ5PYCJG.js.map +1 -0
  98. package/dist/{chunk-5KS2VSX2.js → chunk-LAM4GIME.js} +4 -4
  99. package/dist/chunk-LAM4GIME.js.map +1 -0
  100. package/dist/{chunk-OCLVMKVC.js → chunk-MDXTENZ4.js} +8 -31
  101. package/dist/chunk-MDXTENZ4.js.map +1 -0
  102. package/dist/{chunk-CP55TVOV.js → chunk-MJUKNUFV.js} +3 -3
  103. package/dist/{chunk-CP55TVOV.js.map → chunk-MJUKNUFV.js.map} +1 -1
  104. package/dist/{chunk-GGTDJEE2.js → chunk-MTNLY7AY.js} +3 -3
  105. package/dist/{chunk-GGTDJEE2.js.map → chunk-MTNLY7AY.js.map} +1 -1
  106. package/dist/{chunk-67J4KBOW.js → chunk-NBIBBLP6.js} +10 -52
  107. package/dist/chunk-NBIBBLP6.js.map +1 -0
  108. package/dist/chunk-NBP4J2QF.js +200 -0
  109. package/dist/chunk-NBP4J2QF.js.map +1 -0
  110. package/dist/{chunk-NGKQBNZ5.js → chunk-NJYJCMKY.js} +3 -3
  111. package/dist/{chunk-NGKQBNZ5.js.map → chunk-NJYJCMKY.js.map} +1 -1
  112. package/dist/{chunk-COPT6I2D.js → chunk-NSEY5IC6.js} +9 -10
  113. package/dist/chunk-NSEY5IC6.js.map +1 -0
  114. package/dist/{chunk-UARVH66B.js → chunk-O4PHGLXF.js} +5 -5
  115. package/dist/{chunk-UARVH66B.js.map → chunk-O4PHGLXF.js.map} +1 -1
  116. package/dist/{chunk-J4DMQV64.js → chunk-OCZC4PDM.js} +3 -3
  117. package/dist/{chunk-J4DMQV64.js.map → chunk-OCZC4PDM.js.map} +1 -1
  118. package/dist/{chunk-IQH3XSOI.js → chunk-ODYHA3O5.js} +4 -4
  119. package/dist/{chunk-IQH3XSOI.js.map → chunk-ODYHA3O5.js.map} +1 -1
  120. package/dist/chunk-OJEZZVZB.js +9 -0
  121. package/dist/{chunk-CMBERB5B.js.map → chunk-OJEZZVZB.js.map} +1 -1
  122. package/dist/{chunk-7IOAIEIA.js → chunk-OTXP2QJ7.js} +6 -6
  123. package/dist/{chunk-7IOAIEIA.js.map → chunk-OTXP2QJ7.js.map} +1 -1
  124. package/dist/{chunk-JSHUWI3C.js → chunk-OUVUK3E7.js} +9 -9
  125. package/dist/chunk-OUVUK3E7.js.map +1 -0
  126. package/dist/{chunk-3KB54OYF.js → chunk-P6ICWO5B.js} +3 -3
  127. package/dist/{chunk-3KB54OYF.js.map → chunk-P6ICWO5B.js.map} +1 -1
  128. package/dist/{chunk-GIU6BZTW.js → chunk-P7PPE4P5.js} +8 -11
  129. package/dist/chunk-P7PPE4P5.js.map +1 -0
  130. package/dist/{chunk-XGFJJ2YB.js → chunk-PVQUVEZV.js} +4 -11
  131. package/dist/chunk-PVQUVEZV.js.map +1 -0
  132. package/dist/{chunk-LCWXIQKA.js → chunk-Q3RL7TOY.js} +4 -4
  133. package/dist/chunk-Q3RL7TOY.js.map +1 -0
  134. package/dist/{chunk-5Q4RBIMZ.js → chunk-Q5B6ROW6.js} +3 -3
  135. package/dist/{chunk-5Q4RBIMZ.js.map → chunk-Q5B6ROW6.js.map} +1 -1
  136. package/dist/{chunk-262EK2XT.js → chunk-Q7ZDP6DS.js} +9 -7
  137. package/dist/chunk-Q7ZDP6DS.js.map +1 -0
  138. package/dist/{chunk-4IBTERDG.js → chunk-QFTOABOJ.js} +3 -3
  139. package/dist/{chunk-4IBTERDG.js.map → chunk-QFTOABOJ.js.map} +1 -1
  140. package/dist/{chunk-JURNPBSW.js → chunk-QINEFXUA.js} +3 -3
  141. package/dist/{chunk-JURNPBSW.js.map → chunk-QINEFXUA.js.map} +1 -1
  142. package/dist/{chunk-FIOKWIJP.js → chunk-QWSD34JA.js} +4 -4
  143. package/dist/{chunk-FIOKWIJP.js.map → chunk-QWSD34JA.js.map} +1 -1
  144. package/dist/{chunk-Q5IUIA6B.js → chunk-RLBAA7WW.js} +3 -3
  145. package/dist/{chunk-Q5IUIA6B.js.map → chunk-RLBAA7WW.js.map} +1 -1
  146. package/dist/{chunk-MJQ6R345.js → chunk-SEC7UN45.js} +5 -5
  147. package/dist/chunk-SEC7UN45.js.map +1 -0
  148. package/dist/chunk-SIA46B4Q.js +9 -0
  149. package/dist/{chunk-RTIFG4XT.js.map → chunk-SIA46B4Q.js.map} +1 -1
  150. package/dist/{chunk-X4HPHMYW.js → chunk-TMPADU74.js} +4 -4
  151. package/dist/{chunk-X4HPHMYW.js.map → chunk-TMPADU74.js.map} +1 -1
  152. package/dist/{chunk-YTHUHPE5.js → chunk-USPWL4KC.js} +3 -3
  153. package/dist/{chunk-YTHUHPE5.js.map → chunk-USPWL4KC.js.map} +1 -1
  154. package/dist/{chunk-U2UNWXBC.js → chunk-VEQ7X2PO.js} +7 -6
  155. package/dist/chunk-VEQ7X2PO.js.map +1 -0
  156. package/dist/{chunk-YZLPO4B2.js → chunk-WRXXU5F6.js} +4 -11
  157. package/dist/chunk-WRXXU5F6.js.map +1 -0
  158. package/dist/{chunk-XNYAQZIB.js → chunk-X4B6I3M4.js} +4 -4
  159. package/dist/{chunk-XNYAQZIB.js.map → chunk-X4B6I3M4.js.map} +1 -1
  160. package/dist/{chunk-JNF7FDJO.js → chunk-XCYEWILH.js} +4 -4
  161. package/dist/{chunk-JNF7FDJO.js.map → chunk-XCYEWILH.js.map} +1 -1
  162. package/dist/{chunk-V2MG5Y5F.js → chunk-XGVQXRLA.js} +4 -4
  163. package/dist/chunk-XGVQXRLA.js.map +1 -0
  164. package/dist/chunk-XIANSPQO.js +11 -0
  165. package/dist/chunk-XIANSPQO.js.map +1 -0
  166. package/dist/{chunk-UNWEH4Z6.js → chunk-XOMPJYYA.js} +4 -4
  167. package/dist/chunk-XOMPJYYA.js.map +1 -0
  168. package/dist/{chunk-UXWUFNXY.js → chunk-XSYSV3R3.js} +3 -3
  169. package/dist/{chunk-UXWUFNXY.js.map → chunk-XSYSV3R3.js.map} +1 -1
  170. package/dist/{chunk-ERBGZZ2U.js → chunk-XZYJUJED.js} +4 -4
  171. package/dist/chunk-XZYJUJED.js.map +1 -0
  172. package/dist/chunk-YMKC3H55.js +921 -0
  173. package/dist/chunk-YMKC3H55.js.map +1 -0
  174. package/dist/{chunk-PFV7YIEP.js → chunk-Z4JNYSV3.js} +4 -4
  175. package/dist/{chunk-PFV7YIEP.js.map → chunk-Z4JNYSV3.js.map} +1 -1
  176. package/dist/{chunk-4V3WHQJE.js → chunk-ZLSCHWTN.js} +4 -4
  177. package/dist/{chunk-4V3WHQJE.js.map → chunk-ZLSCHWTN.js.map} +1 -1
  178. package/dist/chunk-ZQ2WOX4X.js +29 -0
  179. package/dist/chunk-ZQ2WOX4X.js.map +1 -0
  180. package/dist/{chunk-NILG56Z7.js → chunk-ZROHNZDC.js} +4 -4
  181. package/dist/{chunk-NILG56Z7.js.map → chunk-ZROHNZDC.js.map} +1 -1
  182. package/dist/{chunk-PGOCR4LG.js → chunk-ZVYCUG4N.js} +4 -4
  183. package/dist/chunk-ZVYCUG4N.js.map +1 -0
  184. package/dist/components/accordion/index.d.ts +2 -2
  185. package/dist/components/accordion/index.js +3 -2
  186. package/dist/components/alert/index.d.ts +26 -26
  187. package/dist/components/alert/index.js +2 -2
  188. package/dist/components/alert-dialog/index.d.ts +6 -5
  189. package/dist/components/alert-dialog/index.js +6 -6
  190. package/dist/components/aspect-ratio/index.js +2 -2
  191. package/dist/components/avatar/index.d.ts +11 -11
  192. package/dist/components/avatar/index.js +2 -2
  193. package/dist/components/badge/index.d.ts +112 -112
  194. package/dist/components/badge/index.js +2 -2
  195. package/dist/components/breadcrumb/index.js +2 -2
  196. package/dist/components/button/index.d.ts +51 -51
  197. package/dist/components/button/index.js +3 -3
  198. package/dist/components/button-group/index.js +2 -2
  199. package/dist/components/calendar/index.js +10 -10
  200. package/dist/components/card/index.d.ts +22 -22
  201. package/dist/components/card/index.js +2 -1
  202. package/dist/components/carousel/index.js +3 -3
  203. package/dist/components/chart/index.js +2 -2
  204. package/dist/components/checkbox/index.js +2 -2
  205. package/dist/components/collapsible/index.d.ts +2 -2
  206. package/dist/components/collapsible/index.js +3 -2
  207. package/dist/components/combobox/index.d.ts +2 -2
  208. package/dist/components/combobox/index.js +5 -5
  209. package/dist/components/command/index.js +7 -7
  210. package/dist/components/context-menu/index.d.ts +11 -11
  211. package/dist/components/context-menu/index.js +3 -3
  212. package/dist/components/data-table/index.js +3 -3
  213. package/dist/components/date-picker/index.js +6 -6
  214. package/dist/components/dialog/index.d.ts +26 -5
  215. package/dist/components/dialog/index.js +5 -5
  216. package/dist/components/direction/index.js +2 -2
  217. package/dist/components/drawer/index.d.ts +5 -4
  218. package/dist/components/drawer/index.js +5 -5
  219. package/dist/components/dropdown/index.d.ts +3 -3
  220. package/dist/components/dropdown/index.js +3 -3
  221. package/dist/components/dropzone/index.js +3 -3
  222. package/dist/components/empty/index.d.ts +6 -6
  223. package/dist/components/empty/index.js +2 -2
  224. package/dist/components/field/index.d.ts +2 -2
  225. package/dist/components/field/index.js +4 -4
  226. package/dist/components/hover-card/index.d.ts +2 -2
  227. package/dist/components/hover-card/index.js +2 -1
  228. package/dist/components/image/index.js +2 -2
  229. package/dist/components/input/index.d.ts +12 -12
  230. package/dist/components/input/index.js +3 -2
  231. package/dist/components/input-group/index.d.ts +56 -56
  232. package/dist/components/input-group/index.js +5 -5
  233. package/dist/components/input-otp/index.js +2 -2
  234. package/dist/components/item/index.d.ts +31 -31
  235. package/dist/components/item/index.js +3 -3
  236. package/dist/components/kbd/index.d.ts +8 -8
  237. package/dist/components/kbd/index.js +2 -2
  238. package/dist/components/label/index.d.ts +22 -22
  239. package/dist/components/label/index.js +3 -2
  240. package/dist/components/locale-segment-group/index.js +2 -2
  241. package/dist/components/menubar/index.js +3 -3
  242. package/dist/components/native-select/index.d.ts +34 -34
  243. package/dist/components/native-select/index.js +2 -1
  244. package/dist/components/navigation-menu/index.d.ts +2 -2
  245. package/dist/components/navigation-menu/index.js +3 -3
  246. package/dist/components/pagination/index.d.ts +1 -1
  247. package/dist/components/pagination/index.js +3 -3
  248. package/dist/components/popover/index.d.ts +22 -22
  249. package/dist/components/popover/index.js +4 -3
  250. package/dist/components/progress/index.js +2 -2
  251. package/dist/components/prose/index.js +2 -2
  252. package/dist/components/radio-group/index.d.ts +2 -2
  253. package/dist/components/radio-group/index.js +3 -3
  254. package/dist/components/scroll-area/index.js +2 -2
  255. package/dist/components/select/index.js +3 -3
  256. package/dist/components/selectable-card/index.js +3 -3
  257. package/dist/components/separator/index.d.ts +8 -8
  258. package/dist/components/separator/index.js +3 -2
  259. package/dist/components/sheet/index.d.ts +5 -4
  260. package/dist/components/sheet/index.js +5 -5
  261. package/dist/components/sidebar/index.d.ts +3 -3
  262. package/dist/components/sidebar/index.js +10 -10
  263. package/dist/components/skeleton/index.d.ts +22 -22
  264. package/dist/components/skeleton/index.js +2 -1
  265. package/dist/components/slider/index.js +2 -2
  266. package/dist/components/spinner/index.js +2 -2
  267. package/dist/components/switch/index.d.ts +1 -1
  268. package/dist/components/switch/index.js +2 -2
  269. package/dist/components/table/index.js +3 -3
  270. package/dist/components/tabs/index.d.ts +2 -2
  271. package/dist/components/tabs/index.js +3 -3
  272. package/dist/components/textarea/index.d.ts +12 -12
  273. package/dist/components/textarea/index.js +3 -2
  274. package/dist/components/theme-toggle/index.js +4 -4
  275. package/dist/components/toggle/index.d.ts +1 -1
  276. package/dist/components/toggle/index.js +2 -2
  277. package/dist/components/toggle-group/index.d.ts +2 -2
  278. package/dist/components/toggle-group/index.js +2 -2
  279. package/dist/components/tree/index.d.ts +24 -0
  280. package/dist/components/tree/index.js +5 -0
  281. package/dist/components/tree/index.js.map +1 -0
  282. package/dist/components/typography/index.d.ts +2 -2
  283. package/dist/components/typography/index.js +2 -2
  284. package/dist/components/video/index.js +2 -2
  285. package/dist/index.d.ts +25 -24
  286. package/dist/index.js +80 -78
  287. package/dist/lib/interactive/index.js +1 -1
  288. package/dist/lib/utils.d.ts +2 -1
  289. package/dist/lib/utils.js +1 -1
  290. package/dist/{navigationMenuTriggerStyle-BWnESpon.d.ts → navigationMenuTriggerStyle-DUhqCYxO.d.ts} +1 -1
  291. package/dist/theme.css +16 -0
  292. package/dist/utils.d.ts +2 -0
  293. package/dist/utils.js +3 -0
  294. package/dist/utils.js.map +1 -0
  295. package/package.json +34 -25
  296. package/dist/Button-vQnkiVTI.d.ts +0 -84
  297. package/dist/Toggle-CseZl7XN.d.ts +0 -49
  298. package/dist/Typography-ccTtE182.d.ts +0 -64
  299. package/dist/chunk-24QD2FTA.js.map +0 -1
  300. package/dist/chunk-262EK2XT.js.map +0 -1
  301. package/dist/chunk-3LIT5GWF.js.map +0 -1
  302. package/dist/chunk-5FBD2NTR.js.map +0 -1
  303. package/dist/chunk-5KS2VSX2.js.map +0 -1
  304. package/dist/chunk-67J4KBOW.js.map +0 -1
  305. package/dist/chunk-6RASPU5N.js.map +0 -1
  306. package/dist/chunk-BYG2ULS3.js.map +0 -1
  307. package/dist/chunk-CMBERB5B.js +0 -9
  308. package/dist/chunk-COPT6I2D.js.map +0 -1
  309. package/dist/chunk-D3DQ4ICC.js.map +0 -1
  310. package/dist/chunk-ERBGZZ2U.js.map +0 -1
  311. package/dist/chunk-G6TV6TF7.js.map +0 -1
  312. package/dist/chunk-GIU6BZTW.js.map +0 -1
  313. package/dist/chunk-HCTZJYHK.js.map +0 -1
  314. package/dist/chunk-JSHUWI3C.js.map +0 -1
  315. package/dist/chunk-LCWXIQKA.js.map +0 -1
  316. package/dist/chunk-MJQ6R345.js.map +0 -1
  317. package/dist/chunk-MKG3UAP6.js +0 -347
  318. package/dist/chunk-MKG3UAP6.js.map +0 -1
  319. package/dist/chunk-MS2ZNYCJ.js +0 -9
  320. package/dist/chunk-MS2ZNYCJ.js.map +0 -1
  321. package/dist/chunk-OCLVMKVC.js.map +0 -1
  322. package/dist/chunk-PGOCR4LG.js.map +0 -1
  323. package/dist/chunk-PPYJQNE5.js.map +0 -1
  324. package/dist/chunk-QZX3RFIC.js.map +0 -1
  325. package/dist/chunk-RTIFG4XT.js +0 -9
  326. package/dist/chunk-STRBBF45.js.map +0 -1
  327. package/dist/chunk-U2UNWXBC.js.map +0 -1
  328. package/dist/chunk-UEGIKBX6.js +0 -385
  329. package/dist/chunk-UEGIKBX6.js.map +0 -1
  330. package/dist/chunk-UIA74JVN.js.map +0 -1
  331. package/dist/chunk-UNWEH4Z6.js.map +0 -1
  332. package/dist/chunk-V2MG5Y5F.js.map +0 -1
  333. package/dist/chunk-X2YUFNK7.js +0 -18
  334. package/dist/chunk-X2YUFNK7.js.map +0 -1
  335. package/dist/chunk-XGFJJ2YB.js.map +0 -1
  336. package/dist/chunk-YZLPO4B2.js.map +0 -1
@@ -0,0 +1,921 @@
1
+ import { useHeightDisclosureContent } from './chunk-ISISDJ3Z.js';
2
+ import { cn } from './chunk-XIANSPQO.js';
3
+ import { useContext, useRef, useState, useMemo, useLayoutEffect } from 'preact/hooks';
4
+ import { signal } from '@preact/signals';
5
+ import { createContext, toChildArray } from 'preact';
6
+ import { tv } from 'tailwind-variants';
7
+ import { jsx, jsxs } from 'preact/jsx-runtime';
8
+
9
+ var TreeRegistry = class {
10
+ nodes = /* @__PURE__ */ new Map();
11
+ childrenByParent = /* @__PURE__ */ new Map();
12
+ orderCounter = 0;
13
+ version = signal(0);
14
+ bump() {
15
+ this.version.value += 1;
16
+ }
17
+ register(node) {
18
+ const existing = this.nodes.get(node.nodeId);
19
+ if (existing) {
20
+ existing.parentId = node.parentId;
21
+ existing.disabled = node.disabled;
22
+ existing.hasChildren = node.hasChildren;
23
+ existing.data = node.data;
24
+ existing.element = node.element;
25
+ existing.level = node.level;
26
+ this.rebuildChildren(node.parentId);
27
+ this.bump();
28
+ return;
29
+ }
30
+ this.nodes.set(node.nodeId, {
31
+ ...node,
32
+ order: this.orderCounter++,
33
+ isLast: false
34
+ });
35
+ this.rebuildChildren(node.parentId);
36
+ this.bump();
37
+ }
38
+ unregister(nodeId) {
39
+ const node = this.nodes.get(nodeId);
40
+ if (!node) return;
41
+ const parentId = node.parentId;
42
+ this.nodes.delete(nodeId);
43
+ this.rebuildChildren(parentId);
44
+ this.bump();
45
+ }
46
+ setElement(nodeId, element) {
47
+ const node = this.nodes.get(nodeId);
48
+ if (!node || node.element === element) return;
49
+ node.element = element;
50
+ this.bump();
51
+ }
52
+ getNode(nodeId) {
53
+ return this.nodes.get(nodeId);
54
+ }
55
+ getChildren(parentId) {
56
+ return this.childrenByParent.get(parentId) ?? [];
57
+ }
58
+ getParent(nodeId) {
59
+ const node = this.nodes.get(nodeId);
60
+ if (!node?.parentId) return null;
61
+ return this.nodes.get(node.parentId) ?? null;
62
+ }
63
+ isVisible(nodeId, expandedIds) {
64
+ let current = this.nodes.get(nodeId);
65
+ if (!current) return false;
66
+ while (current.parentId) {
67
+ if (!expandedIds.has(current.parentId)) return false;
68
+ current = this.nodes.get(current.parentId);
69
+ if (!current) return false;
70
+ }
71
+ return true;
72
+ }
73
+ getVisibleActivatableIds(expandedIds) {
74
+ const rootIds = this.getChildren(null);
75
+ const result = [];
76
+ const walk = (ids) => {
77
+ for (const id of ids) {
78
+ const node = this.nodes.get(id);
79
+ if (!node) continue;
80
+ if (!this.isVisible(id, expandedIds)) continue;
81
+ if (!node.disabled) result.push(id);
82
+ if (node.hasChildren && expandedIds.has(id)) {
83
+ walk(this.getChildren(id));
84
+ }
85
+ }
86
+ };
87
+ walk(rootIds);
88
+ return result;
89
+ }
90
+ rebuildChildren(parentId) {
91
+ const childIds = [...this.nodes.values()].filter((node) => node.parentId === parentId).sort((a, b) => a.order - b.order).map((node) => node.nodeId);
92
+ this.childrenByParent.set(parentId, childIds);
93
+ childIds.forEach((childId, index) => {
94
+ const node = this.nodes.get(childId);
95
+ if (node) node.isLast = index === childIds.length - 1;
96
+ });
97
+ }
98
+ };
99
+ var treeVariants = tv({
100
+ base: "w-full rounded-lg border border-border bg-background",
101
+ variants: {
102
+ variant: {
103
+ default: "",
104
+ outline: "border-2",
105
+ ghost: "border-transparent bg-transparent"
106
+ },
107
+ size: {
108
+ sm: "text-sm",
109
+ default: "",
110
+ lg: "text-lg"
111
+ }
112
+ },
113
+ defaultVariants: {
114
+ variant: "default",
115
+ size: "default"
116
+ }
117
+ });
118
+ var treeItemVariants = tv({
119
+ base: [
120
+ "group/tree-item relative flex min-w-0 cursor-default select-none items-center rounded-md outline-none transition-colors",
121
+ "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
122
+ "motion-reduce:transition-none"
123
+ ],
124
+ variants: {
125
+ variant: {
126
+ default: "hover:bg-accent/60 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground",
127
+ outline: "hover:bg-accent/40 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground",
128
+ ghost: "hover:bg-accent/50 data-[selected=true]:bg-accent/70 data-[selected=true]:text-accent-foreground"
129
+ },
130
+ size: {
131
+ sm: "min-h-7 gap-1.5 px-2 py-1 text-sm",
132
+ default: "min-h-8 gap-2 px-2.5 py-1.5 text-sm",
133
+ lg: "min-h-10 gap-2.5 px-3 py-2 text-base"
134
+ }
135
+ },
136
+ defaultVariants: {
137
+ variant: "default",
138
+ size: "default"
139
+ }
140
+ });
141
+ var TreeProviderContext = createContext(null);
142
+ var useTreeProvider = () => {
143
+ const context = useContext(TreeProviderContext);
144
+ if (!context) throw new Error("Tree components must be used within TreeProvider");
145
+ return context;
146
+ };
147
+ var TreeItemContext = createContext(null);
148
+ var useTreeItemContext = () => useContext(TreeItemContext);
149
+ var TreeProvider = ({
150
+ class: className,
151
+ variant = "default",
152
+ size = "default",
153
+ expandedIds: expandedIdsProp,
154
+ defaultExpandedIds = [],
155
+ onExpandedChange,
156
+ selectedIds: selectedIdsProp,
157
+ defaultSelectedIds = [],
158
+ onSelectionChange,
159
+ selectionMode = "none",
160
+ showLines = true,
161
+ showIcons = true,
162
+ animateExpand = true,
163
+ indent = 20,
164
+ icons,
165
+ children,
166
+ ...rest
167
+ }) => {
168
+ const registryRef = useRef(null);
169
+ if (!registryRef.current) registryRef.current = new TreeRegistry();
170
+ const registry = registryRef.current;
171
+ const isExpandedControlled = expandedIdsProp !== void 0;
172
+ const isSelectedControlled = selectedIdsProp !== void 0;
173
+ const [internalExpanded, setInternalExpanded] = useState(() => [...defaultExpandedIds]);
174
+ const [internalSelected, setInternalSelected] = useState(() => [...defaultSelectedIds]);
175
+ const expandedArray = isExpandedControlled ? [...expandedIdsProp] : internalExpanded;
176
+ const selectedArray = isSelectedControlled ? [...selectedIdsProp] : internalSelected;
177
+ const expandedIds = useMemo(() => signal(new Set(expandedArray)), []);
178
+ expandedIds.value = new Set(expandedArray);
179
+ const selectedIds = useMemo(() => signal(new Set(selectedArray)), []);
180
+ selectedIds.value = new Set(selectedArray);
181
+ const focusedId = useMemo(() => signal(null), []);
182
+ const tabbableId = useMemo(() => signal(null), []);
183
+ const setExpandedIds = (ids) => {
184
+ if (!isExpandedControlled) setInternalExpanded(ids);
185
+ expandedIds.value = new Set(ids);
186
+ onExpandedChange?.(ids);
187
+ };
188
+ const setSelectedIds = (ids) => {
189
+ if (!isSelectedControlled) setInternalSelected(ids);
190
+ selectedIds.value = new Set(ids);
191
+ onSelectionChange?.(ids);
192
+ };
193
+ const focusNode = (nodeId, options) => {
194
+ const node = registry.getNode(nodeId);
195
+ if (!node || node.disabled) return;
196
+ focusedId.value = nodeId;
197
+ tabbableId.value = nodeId;
198
+ if (options?.moveDOMFocus !== false && node.element) {
199
+ node.element.focus();
200
+ }
201
+ };
202
+ const collapseFocusCorrection = (branchId) => {
203
+ const focused = focusedId.value;
204
+ if (!focused || focused === branchId) return;
205
+ let current = registry.getNode(focused);
206
+ while (current) {
207
+ if (current.nodeId === branchId) {
208
+ focusNode(branchId);
209
+ return;
210
+ }
211
+ current = current.parentId ? registry.getNode(current.parentId) : void 0;
212
+ }
213
+ };
214
+ const toggleExpanded = (nodeId) => {
215
+ const next = new Set(expandedIds.value);
216
+ if (next.has(nodeId)) {
217
+ next.delete(nodeId);
218
+ setExpandedIds([...next]);
219
+ collapseFocusCorrection(nodeId);
220
+ } else {
221
+ next.add(nodeId);
222
+ setExpandedIds([...next]);
223
+ }
224
+ };
225
+ const selectNode = (nodeId, options) => {
226
+ if (selectionMode === "none") return;
227
+ const node = registry.getNode(nodeId);
228
+ if (!node || node.disabled) return;
229
+ const current = new Set(selectedIds.value);
230
+ const isSelected = current.has(nodeId);
231
+ if (selectionMode === "single") {
232
+ if (options?.toggle && isSelected) {
233
+ setSelectedIds([]);
234
+ return;
235
+ }
236
+ setSelectedIds([nodeId]);
237
+ return;
238
+ }
239
+ if (options?.additive) {
240
+ const next = new Set(current);
241
+ if (isSelected) next.delete(nodeId);
242
+ else next.add(nodeId);
243
+ setSelectedIds([...next]);
244
+ return;
245
+ }
246
+ if (options?.toggle && isSelected) {
247
+ current.delete(nodeId);
248
+ setSelectedIds([...current]);
249
+ return;
250
+ }
251
+ setSelectedIds([nodeId]);
252
+ };
253
+ const prevExpandedRef = useRef(expandedArray);
254
+ useLayoutEffect(() => {
255
+ const prev = new Set(prevExpandedRef.current);
256
+ const next = new Set(expandedArray);
257
+ for (const id of prev) {
258
+ if (!next.has(id)) collapseFocusCorrection(id);
259
+ }
260
+ prevExpandedRef.current = expandedArray;
261
+ });
262
+ const contextValue = {
263
+ registry,
264
+ expandedIds,
265
+ selectedIds,
266
+ selectionMode,
267
+ showLines,
268
+ showIcons,
269
+ animateExpand,
270
+ indent,
271
+ icons,
272
+ variant: variant ?? "default",
273
+ size: size ?? "default",
274
+ focusedId,
275
+ tabbableId,
276
+ isExpandedControlled,
277
+ isSelectedControlled,
278
+ setExpandedIds,
279
+ setSelectedIds,
280
+ toggleExpanded,
281
+ selectNode,
282
+ focusNode,
283
+ getNodeData: (nodeId) => registry.getNode(nodeId)?.data
284
+ };
285
+ return /* @__PURE__ */ jsx(TreeProviderContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
286
+ "div",
287
+ {
288
+ "data-slot": "tree-provider",
289
+ "data-variant": variant ?? "default",
290
+ "data-size": size ?? "default",
291
+ class: cn("w-full", className),
292
+ ...rest,
293
+ children
294
+ }
295
+ ) });
296
+ };
297
+
298
+ // src/components/tree/tree-keyboard.ts
299
+ var isMetaLike = (event) => event.ctrlKey || event.metaKey;
300
+ var handleTreeKeyDown = (event, tree) => {
301
+ if (event.defaultPrevented) return;
302
+ const target = event.target;
303
+ const itemEl = target?.closest('[role="treeitem"]');
304
+ if (!itemEl) return;
305
+ const nodeId = itemEl.getAttribute("data-node-id");
306
+ if (!nodeId) return;
307
+ const visible = tree.registry.getVisibleActivatableIds(tree.expandedIds.value);
308
+ const index = visible.indexOf(nodeId);
309
+ if (index === -1) return;
310
+ const node = tree.registry.getNode(nodeId);
311
+ if (!node) return;
312
+ const moveFocus = (nextId) => {
313
+ event.preventDefault();
314
+ tree.focusNode(nextId);
315
+ };
316
+ switch (event.key) {
317
+ case "ArrowDown": {
318
+ if (index < visible.length - 1) moveFocus(visible[index + 1]);
319
+ break;
320
+ }
321
+ case "ArrowUp": {
322
+ if (index > 0) moveFocus(visible[index - 1]);
323
+ break;
324
+ }
325
+ case "Home": {
326
+ if (visible.length > 0) moveFocus(visible[0]);
327
+ break;
328
+ }
329
+ case "End": {
330
+ if (visible.length > 0) moveFocus(visible[visible.length - 1]);
331
+ break;
332
+ }
333
+ case "ArrowRight": {
334
+ event.preventDefault();
335
+ if (node.hasChildren) {
336
+ if (!tree.expandedIds.value.has(nodeId)) {
337
+ tree.toggleExpanded(nodeId);
338
+ } else {
339
+ const children = tree.registry.getChildren(nodeId).filter((id) => {
340
+ const child = tree.registry.getNode(id);
341
+ return child && !child.disabled && tree.registry.isVisible(id, tree.expandedIds.value);
342
+ });
343
+ if (children[0]) tree.focusNode(children[0]);
344
+ }
345
+ }
346
+ break;
347
+ }
348
+ case "ArrowLeft": {
349
+ event.preventDefault();
350
+ if (node.hasChildren && tree.expandedIds.value.has(nodeId)) {
351
+ tree.toggleExpanded(nodeId);
352
+ } else if (node.parentId) {
353
+ tree.focusNode(node.parentId);
354
+ }
355
+ break;
356
+ }
357
+ case "Enter":
358
+ case " ": {
359
+ if (event.key === " " && isMetaLike(event)) {
360
+ event.preventDefault();
361
+ tree.selectNode(nodeId, { additive: true, toggle: true });
362
+ break;
363
+ }
364
+ event.preventDefault();
365
+ if (node.hasChildren && !tree.expandedIds.value.has(nodeId)) {
366
+ tree.toggleExpanded(nodeId);
367
+ }
368
+ if (tree.selectionMode !== "none") {
369
+ tree.selectNode(nodeId, {
370
+ toggle: tree.selectionMode === "multiple"
371
+ });
372
+ }
373
+ break;
374
+ }
375
+ case "a":
376
+ case "A": {
377
+ if (!isMetaLike(event) || tree.selectionMode !== "multiple") break;
378
+ event.preventDefault();
379
+ tree.setSelectedIds(visible);
380
+ break;
381
+ }
382
+ }
383
+ };
384
+ var Tree = ({
385
+ class: className,
386
+ children,
387
+ "aria-label": ariaLabel,
388
+ "aria-labelledby": ariaLabelledBy,
389
+ ...rest
390
+ }) => {
391
+ const tree = useTreeProvider();
392
+ const rootRef = useRef(null);
393
+ if (!ariaLabel && !ariaLabelledBy) {
394
+ const env = globalThis.process?.env?.NODE_ENV;
395
+ if (env !== "production") {
396
+ console.warn(
397
+ "[kamod-ui] <Tree> requires an accessible name via aria-label or aria-labelledby."
398
+ );
399
+ }
400
+ }
401
+ const multiselectable = tree.selectionMode === "multiple";
402
+ return /* @__PURE__ */ jsx(
403
+ "div",
404
+ {
405
+ ref: rootRef,
406
+ role: "tree",
407
+ "aria-multiselectable": multiselectable ? true : void 0,
408
+ "aria-label": ariaLabel,
409
+ "aria-labelledby": ariaLabelledBy,
410
+ "data-slot": "tree",
411
+ "data-variant": tree.variant,
412
+ "data-size": tree.size,
413
+ class: cn(treeVariants({ variant: tree.variant, size: tree.size }), className),
414
+ onKeyDown: (event) => {
415
+ handleTreeKeyDown(event, tree);
416
+ },
417
+ onFocus: (event) => {
418
+ if (event.target !== event.currentTarget) return;
419
+ const visible = tree.registry.getVisibleActivatableIds(tree.expandedIds.value);
420
+ if (visible.length === 0) return;
421
+ const current = tree.tabbableId.value;
422
+ const target = current && visible.includes(current) ? current : visible[0];
423
+ tree.focusNode(target);
424
+ },
425
+ ...rest,
426
+ children
427
+ }
428
+ );
429
+ };
430
+ var indentCSSValue = (indent) => typeof indent === "number" ? `${indent}px` : indent;
431
+ var TreeLines = ({
432
+ level,
433
+ parentPath,
434
+ isLast,
435
+ indent,
436
+ class: className
437
+ }) => {
438
+ if (level <= 0) return null;
439
+ const indentPx = indentCSSValue(indent);
440
+ return /* @__PURE__ */ jsxs(
441
+ "div",
442
+ {
443
+ "aria-hidden": "true",
444
+ "data-slot": "tree-lines",
445
+ class: cn("pointer-events-none absolute inset-y-0 start-0", className),
446
+ children: [
447
+ parentPath.map((pathIsLast, pathIndex) => {
448
+ if (pathIsLast) return null;
449
+ return /* @__PURE__ */ jsx(
450
+ "span",
451
+ {
452
+ class: "absolute top-0 bottom-0 w-px bg-border",
453
+ style: { insetInlineStart: `calc(${pathIndex + 1} * ${indentPx})` }
454
+ },
455
+ `line-${pathIndex}`
456
+ );
457
+ }),
458
+ /* @__PURE__ */ jsx(
459
+ "span",
460
+ {
461
+ class: "absolute top-1/2 h-px bg-border",
462
+ style: {
463
+ insetInlineStart: `calc(${level - 1} * ${indentPx} + ${indentPx} / 2)`,
464
+ width: `calc(${indentPx} / 2)`
465
+ }
466
+ }
467
+ ),
468
+ !isLast ? /* @__PURE__ */ jsx(
469
+ "span",
470
+ {
471
+ class: "absolute top-0 bottom-0 w-px bg-border",
472
+ style: { insetInlineStart: `calc(${level} * ${indentPx})` }
473
+ }
474
+ ) : null
475
+ ]
476
+ }
477
+ );
478
+ };
479
+ var DefaultChevron = ({ expanded }) => /* @__PURE__ */ jsx(
480
+ "svg",
481
+ {
482
+ viewBox: "0 0 16 16",
483
+ width: "16",
484
+ height: "16",
485
+ fill: "none",
486
+ "aria-hidden": "true",
487
+ focusable: "false",
488
+ class: cn(
489
+ "size-4 shrink-0 origin-center text-muted-foreground transition-transform duration-200 motion-reduce:transition-none",
490
+ expanded && "rotate-90 rtl:-rotate-90"
491
+ ),
492
+ children: /* @__PURE__ */ jsx(
493
+ "path",
494
+ {
495
+ d: "M6 4l4 4-4 4",
496
+ stroke: "currentColor",
497
+ strokeWidth: "1.5",
498
+ strokeLinecap: "round",
499
+ strokeLinejoin: "round"
500
+ }
501
+ )
502
+ }
503
+ );
504
+ var DefaultBranchIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 16 16", width: "16", height: "16", fill: "none", "aria-hidden": "true", focusable: "false", children: [
505
+ /* @__PURE__ */ jsx(
506
+ "path",
507
+ {
508
+ d: "M2 4.5h8a2 2 0 012 2V12",
509
+ stroke: "currentColor",
510
+ strokeWidth: "1.5",
511
+ strokeLinecap: "round"
512
+ }
513
+ ),
514
+ /* @__PURE__ */ jsx("path", { d: "M12 12h2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
515
+ ] });
516
+ var DefaultLeafIcon = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", width: "16", height: "16", fill: "none", "aria-hidden": "true", focusable: "false", children: /* @__PURE__ */ jsx("path", { d: "M4 8h8M8 4v8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) });
517
+ var renderIconProp = (icon, state) => {
518
+ if (icon == null) return null;
519
+ if (typeof icon === "function") return icon(state);
520
+ return icon;
521
+ };
522
+ var resolveTreeIcon = ({
523
+ state,
524
+ icon,
525
+ expandedIcon,
526
+ selectedIcon,
527
+ disabledIcon,
528
+ providerIcons,
529
+ showFallback = true
530
+ }) => {
531
+ if (state.disabled && disabledIcon != null) return disabledIcon;
532
+ if (state.selected && selectedIcon != null) return selectedIcon;
533
+ if (state.branch && state.expanded && expandedIcon != null) return expandedIcon;
534
+ const nodeIcon = renderIconProp(icon, state);
535
+ if (nodeIcon != null) return nodeIcon;
536
+ if (providerIcons) {
537
+ if (state.branch) {
538
+ if (state.expanded && providerIcons.branchExpanded != null)
539
+ return providerIcons.branchExpanded;
540
+ if (providerIcons.branch != null) return providerIcons.branch;
541
+ } else if (providerIcons.leaf != null) {
542
+ return providerIcons.leaf;
543
+ }
544
+ }
545
+ if (!showFallback) return null;
546
+ return state.branch ? /* @__PURE__ */ jsx(DefaultBranchIcon, {}) : /* @__PURE__ */ jsx(DefaultLeafIcon, {});
547
+ };
548
+ var resolveTreeExpanderIcon = (expanded, providerIcons) => {
549
+ if (expanded && providerIcons?.expanderExpanded != null) return providerIcons.expanderExpanded;
550
+ if (!expanded && providerIcons?.expander != null) return providerIcons.expander;
551
+ return /* @__PURE__ */ jsx(DefaultChevron, { expanded });
552
+ };
553
+ var TreeNodeContext = createContext(null);
554
+ var useTreeNodeContext = () => {
555
+ const context = useContext(TreeNodeContext);
556
+ if (!context) throw new Error("Tree node subcomponents must be used within TreeNode");
557
+ return context;
558
+ };
559
+ var TreeNode = ({
560
+ nodeId,
561
+ disabled = false,
562
+ data,
563
+ icon,
564
+ expandedIcon,
565
+ selectedIcon,
566
+ disabledIcon,
567
+ children
568
+ }) => {
569
+ const tree = useTreeProvider();
570
+ const parentItem = useTreeItemContext();
571
+ const itemRef = useRef(null);
572
+ const childArray = toChildArray(children);
573
+ const hasChildren = childArray.some(
574
+ (child) => child != null && typeof child === "object" && "type" in child && typeof child.type === "function" && child.type.__kamodTreeContent === true
575
+ );
576
+ const level = parentItem ? parentItem.level + 1 : 1;
577
+ const parentPath = parentItem ? [...parentItem.parentPath, parentItem.isLast] : [];
578
+ tree.registry.version.value;
579
+ const nodeRecord = tree.registry.getNode(nodeId);
580
+ const isLast = nodeRecord?.isLast ?? false;
581
+ useLayoutEffect(() => {
582
+ const env = globalThis.process?.env?.NODE_ENV;
583
+ const existing = tree.registry.getNode(nodeId);
584
+ if (env !== "production" && existing && existing.element && existing.element !== itemRef.current) {
585
+ console.warn(`[kamod-ui] Duplicate Tree nodeId "${nodeId}" detected.`);
586
+ }
587
+ tree.registry.register({
588
+ nodeId,
589
+ parentId: parentItem?.nodeId ?? null,
590
+ disabled,
591
+ hasChildren,
592
+ data,
593
+ element: itemRef.current,
594
+ level
595
+ });
596
+ return () => {
597
+ tree.registry.unregister(nodeId);
598
+ };
599
+ }, [nodeId, parentItem?.nodeId, disabled, hasChildren, data, level, tree.registry]);
600
+ useLayoutEffect(() => {
601
+ const visible = tree.registry.getVisibleActivatableIds(tree.expandedIds.value);
602
+ if (visible.length === 0) {
603
+ tree.tabbableId.value = null;
604
+ return;
605
+ }
606
+ if (!tree.tabbableId.value || !visible.includes(tree.tabbableId.value)) {
607
+ tree.tabbableId.value = visible[0];
608
+ }
609
+ }, [tree.registry.version.value, tree.expandedIds.value, tree]);
610
+ const contextValue = {
611
+ nodeId,
612
+ disabled,
613
+ hasChildren,
614
+ data,
615
+ icon,
616
+ expandedIcon,
617
+ selectedIcon,
618
+ disabledIcon,
619
+ level,
620
+ parentPath,
621
+ isLast,
622
+ itemRef
623
+ };
624
+ return /* @__PURE__ */ jsx(TreeNodeContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { "data-slot": "tree-node", "data-node-id": nodeId, class: "relative min-w-0", children }) });
625
+ };
626
+ var TreeNodeTrigger = ({
627
+ class: className,
628
+ children,
629
+ onClick,
630
+ onFocus,
631
+ ...rest
632
+ }) => {
633
+ const tree = useTreeProvider();
634
+ const node = useTreeNodeContext();
635
+ useLayoutEffect(() => {
636
+ tree.registry.setElement(node.nodeId, node.itemRef.current);
637
+ });
638
+ const isExpanded = tree.expandedIds.value.has(node.nodeId);
639
+ const isSelected = tree.selectedIds.value.has(node.nodeId);
640
+ const isTabbable = tree.tabbableId.value === node.nodeId;
641
+ const handleItemClick = (event) => {
642
+ if (node.disabled) return;
643
+ tree.focusNode(node.nodeId);
644
+ if (tree.selectionMode !== "none") {
645
+ tree.selectNode(node.nodeId, {
646
+ toggle: tree.selectionMode === "multiple" && (event.metaKey || event.ctrlKey),
647
+ additive: tree.selectionMode === "multiple" && (event.metaKey || event.ctrlKey)
648
+ });
649
+ }
650
+ onClick?.(event);
651
+ };
652
+ return /* @__PURE__ */ jsxs(
653
+ "div",
654
+ {
655
+ ref: node.itemRef,
656
+ role: "treeitem",
657
+ "data-node-id": node.nodeId,
658
+ "data-slot": "tree-node-trigger",
659
+ "data-state": node.hasChildren ? isExpanded ? "open" : "closed" : "leaf",
660
+ "data-selected": isSelected ? "true" : void 0,
661
+ "data-disabled": node.disabled ? "" : void 0,
662
+ "data-level": node.level,
663
+ "aria-level": node.level,
664
+ "aria-expanded": node.hasChildren ? isExpanded : void 0,
665
+ "aria-selected": tree.selectionMode !== "none" ? isSelected : void 0,
666
+ "aria-disabled": node.disabled || void 0,
667
+ tabIndex: node.disabled ? -1 : isTabbable ? 0 : -1,
668
+ class: cn(
669
+ treeItemVariants({ variant: tree.variant, size: tree.size }),
670
+ "relative",
671
+ node.disabled && "pointer-events-none opacity-50",
672
+ className
673
+ ),
674
+ style: { paddingInlineStart: `calc(${node.level} * ${indentCSSValue(tree.indent)})` },
675
+ onClick: handleItemClick,
676
+ onFocus: (event) => {
677
+ tree.focusedId.value = node.nodeId;
678
+ tree.tabbableId.value = node.nodeId;
679
+ onFocus?.(event);
680
+ },
681
+ ...rest,
682
+ children: [
683
+ tree.showLines ? /* @__PURE__ */ jsx(
684
+ TreeLines,
685
+ {
686
+ level: node.level,
687
+ parentPath: node.parentPath,
688
+ isLast: node.isLast,
689
+ indent: tree.indent
690
+ }
691
+ ) : null,
692
+ children
693
+ ]
694
+ }
695
+ );
696
+ };
697
+ var TreeExpander = ({ class: className, ...rest }) => {
698
+ const tree = useTreeProvider();
699
+ const node = useTreeNodeContext();
700
+ const isExpanded = tree.expandedIds.value.has(node.nodeId);
701
+ const handleExpandToggle = (event) => {
702
+ event.stopPropagation();
703
+ if (node.disabled || !node.hasChildren) return;
704
+ tree.toggleExpanded(node.nodeId);
705
+ };
706
+ if (!node.hasChildren) {
707
+ return /* @__PURE__ */ jsx("span", { class: cn("inline-flex size-4 shrink-0", className), "aria-hidden": "true" });
708
+ }
709
+ return /* @__PURE__ */ jsx(
710
+ "span",
711
+ {
712
+ "data-slot": "tree-expander",
713
+ "data-expanded": isExpanded ? "true" : "false",
714
+ "data-disabled": node.disabled ? "" : void 0,
715
+ class: cn(
716
+ "relative z-[1] inline-flex size-4 shrink-0 cursor-pointer items-center justify-center",
717
+ className
718
+ ),
719
+ "aria-hidden": "true",
720
+ onClick: handleExpandToggle,
721
+ onKeyDown: (event) => {
722
+ if (event.key === "Enter" || event.key === " ") {
723
+ event.preventDefault();
724
+ event.stopPropagation();
725
+ handleExpandToggle(event);
726
+ }
727
+ rest.onKeyDown?.(event);
728
+ },
729
+ ...rest,
730
+ children: resolveTreeExpanderIcon(isExpanded, tree.icons)
731
+ }
732
+ );
733
+ };
734
+ var TreeIcon = ({
735
+ class: className,
736
+ icon: iconProp,
737
+ expandedIcon: expandedIconProp,
738
+ selectedIcon: selectedIconProp,
739
+ disabledIcon: disabledIconProp,
740
+ ...rest
741
+ }) => {
742
+ const tree = useTreeProvider();
743
+ const node = useTreeNodeContext();
744
+ if (!tree.showIcons) return null;
745
+ const isExpanded = tree.expandedIds.value.has(node.nodeId);
746
+ const isSelected = tree.selectedIds.value.has(node.nodeId);
747
+ const iconState = {
748
+ nodeId: node.nodeId,
749
+ branch: node.hasChildren,
750
+ expanded: isExpanded,
751
+ selected: isSelected,
752
+ disabled: node.disabled,
753
+ level: node.level
754
+ };
755
+ const hasIconSlot = iconProp != null || node.icon != null || node.expandedIcon != null || node.selectedIcon != null || node.disabledIcon != null || expandedIconProp != null || selectedIconProp != null || disabledIconProp != null || tree.icons != null;
756
+ if (!hasIconSlot) return null;
757
+ const content = resolveTreeIcon({
758
+ state: iconState,
759
+ icon: iconProp ?? node.icon,
760
+ expandedIcon: expandedIconProp ?? node.expandedIcon,
761
+ selectedIcon: selectedIconProp ?? node.selectedIcon,
762
+ disabledIcon: disabledIconProp ?? node.disabledIcon,
763
+ providerIcons: tree.icons,
764
+ showFallback: tree.icons != null
765
+ });
766
+ return /* @__PURE__ */ jsx(
767
+ "span",
768
+ {
769
+ "data-slot": "tree-icon",
770
+ "data-expanded": isExpanded ? "true" : "false",
771
+ "data-selected": isSelected ? "true" : void 0,
772
+ "data-disabled": node.disabled ? "" : void 0,
773
+ class: cn(
774
+ "relative z-[1] inline-flex size-4 shrink-0 items-center justify-center [&_svg]:size-4",
775
+ className
776
+ ),
777
+ "aria-hidden": "true",
778
+ ...rest,
779
+ children: content
780
+ }
781
+ );
782
+ };
783
+ var TreeLabel = ({ class: className, children, ...rest }) => /* @__PURE__ */ jsx(
784
+ "span",
785
+ {
786
+ "data-slot": "tree-label",
787
+ class: cn("relative z-[1] min-w-0 flex-1 truncate text-start", className),
788
+ ...rest,
789
+ children
790
+ }
791
+ );
792
+ var TreeNodeActions = ({
793
+ class: className,
794
+ children,
795
+ onClick,
796
+ onKeyDown,
797
+ ...rest
798
+ }) => /* @__PURE__ */ jsx(
799
+ "span",
800
+ {
801
+ "data-slot": "tree-node-actions",
802
+ class: cn("relative z-[1] ms-auto inline-flex shrink-0 items-center gap-1", className),
803
+ onClick: (event) => {
804
+ event.stopPropagation();
805
+ onClick?.(event);
806
+ },
807
+ onKeyDown: (event) => {
808
+ event.stopPropagation();
809
+ onKeyDown?.(event);
810
+ },
811
+ ...rest,
812
+ children
813
+ }
814
+ );
815
+ var TreeNodeContent = ({ children, class: className }) => {
816
+ const tree = useTreeProvider();
817
+ const node = useTreeNodeContext();
818
+ const isExpanded = tree.expandedIds.value.has(node.nodeId);
819
+ const {
820
+ allowRender,
821
+ isAnimatingClose,
822
+ isAnimatingOpen,
823
+ outerRef,
824
+ innerRef,
825
+ handleTransitionEnd
826
+ } = useHeightDisclosureContent({
827
+ open: isExpanded,
828
+ forceMount: !tree.animateExpand
829
+ });
830
+ const showBranch = node.hasChildren && (tree.animateExpand ? allowRender : isExpanded);
831
+ if (!node.hasChildren) return null;
832
+ const itemContextValue = {
833
+ nodeId: node.nodeId,
834
+ level: node.level,
835
+ parentPath: node.parentPath,
836
+ isLast: node.isLast
837
+ };
838
+ return /* @__PURE__ */ jsx(
839
+ "div",
840
+ {
841
+ role: "group",
842
+ "data-slot": "tree-node-content",
843
+ class: className,
844
+ hidden: !showBranch && !isAnimatingClose,
845
+ "aria-hidden": !isExpanded && !isAnimatingClose,
846
+ children: tree.animateExpand ? /* @__PURE__ */ jsx(
847
+ "div",
848
+ {
849
+ ref: outerRef,
850
+ "data-slot": "tree-node-content-outer",
851
+ "data-state": isExpanded ? "open" : "closed",
852
+ onTransitionEnd: handleTransitionEnd,
853
+ class: cn(
854
+ "min-h-0 overflow-hidden",
855
+ (isAnimatingOpen || isAnimatingClose) && "will-change-[height]"
856
+ ),
857
+ inert: !isExpanded || void 0,
858
+ children: /* @__PURE__ */ jsx("div", { ref: innerRef, "data-slot": "tree-node-content-inner", children: /* @__PURE__ */ jsx(TreeItemContext.Provider, { value: itemContextValue, children }) })
859
+ }
860
+ ) : isExpanded ? /* @__PURE__ */ jsx(TreeItemContext.Provider, { value: itemContextValue, children }) : null
861
+ }
862
+ );
863
+ };
864
+ TreeNodeContent.__kamodTreeContent = true;
865
+ var TreeItem = ({
866
+ nodeId,
867
+ label,
868
+ icon,
869
+ expandedIcon,
870
+ selectedIcon,
871
+ disabledIcon,
872
+ endContent,
873
+ data,
874
+ disabled = false,
875
+ class: className,
876
+ children,
877
+ ...rest
878
+ }) => {
879
+ const childArray = toChildArray(children);
880
+ const hasChildren = childArray.length > 0;
881
+ return /* @__PURE__ */ jsxs(
882
+ TreeNode,
883
+ {
884
+ nodeId,
885
+ disabled,
886
+ data,
887
+ icon,
888
+ expandedIcon,
889
+ selectedIcon,
890
+ disabledIcon,
891
+ children: [
892
+ /* @__PURE__ */ jsxs(TreeNodeTrigger, { class: className, ...rest, children: [
893
+ /* @__PURE__ */ jsx(TreeExpander, {}),
894
+ /* @__PURE__ */ jsx(TreeIcon, {}),
895
+ /* @__PURE__ */ jsx(TreeLabel, { children: label }),
896
+ endContent ? /* @__PURE__ */ jsx(TreeNodeActions, { children: endContent }) : null
897
+ ] }),
898
+ hasChildren ? /* @__PURE__ */ jsx(TreeNodeContent, { children }) : null
899
+ ]
900
+ }
901
+ );
902
+ };
903
+
904
+ // src/components/tree/index.ts
905
+ var tree_default = {
906
+ Provider: TreeProvider,
907
+ Root: Tree,
908
+ Item: TreeItem,
909
+ Node: TreeNode,
910
+ NodeTrigger: TreeNodeTrigger,
911
+ Expander: TreeExpander,
912
+ Icon: TreeIcon,
913
+ Label: TreeLabel,
914
+ NodeActions: TreeNodeActions,
915
+ NodeContent: TreeNodeContent,
916
+ Lines: TreeLines
917
+ };
918
+
919
+ export { Tree, TreeExpander, TreeIcon, TreeItem, TreeLabel, TreeLines, TreeNode, TreeNodeActions, TreeNodeContent, TreeNodeTrigger, TreeProvider, treeItemVariants, treeVariants, tree_default, useTreeItemContext, useTreeNodeContext, useTreeProvider };
920
+ //# sourceMappingURL=chunk-YMKC3H55.js.map
921
+ //# sourceMappingURL=chunk-YMKC3H55.js.map