@keboola/design 10.1.0 → 11.0.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 (504) hide show
  1. package/AGENTS.md +2 -0
  2. package/dist/MermaidDiagram-ZU5KAVRT.js +18 -0
  3. package/dist/{MermaidDiagram-EOKJHQQV.js.map → MermaidDiagram-ZU5KAVRT.js.map} +1 -1
  4. package/dist/charts.d.ts +14 -8
  5. package/dist/charts.js +6 -1
  6. package/dist/charts.js.map +1 -1
  7. package/dist/chunk-2YYJDKSP.js +51 -0
  8. package/dist/chunk-2YYJDKSP.js.map +1 -0
  9. package/dist/chunk-3P5UUCFI.js +385 -0
  10. package/dist/chunk-3P5UUCFI.js.map +1 -0
  11. package/dist/chunk-3QDFDDWZ.js +99 -0
  12. package/dist/chunk-3QDFDDWZ.js.map +1 -0
  13. package/dist/chunk-3W27OLK5.js +15 -0
  14. package/dist/chunk-3W27OLK5.js.map +1 -0
  15. package/dist/chunk-4FIZZONW.js +40 -0
  16. package/dist/chunk-4FIZZONW.js.map +1 -0
  17. package/dist/chunk-4GIAXOJG.js +133 -0
  18. package/dist/chunk-4GIAXOJG.js.map +1 -0
  19. package/dist/chunk-52NDNMK7.js +99 -0
  20. package/dist/chunk-52NDNMK7.js.map +1 -0
  21. package/dist/chunk-576G5OES.js +201 -0
  22. package/dist/chunk-576G5OES.js.map +1 -0
  23. package/dist/chunk-5AIE6SET.js +659 -0
  24. package/dist/chunk-5AIE6SET.js.map +1 -0
  25. package/dist/chunk-5FTNAZRW.js +327 -0
  26. package/dist/chunk-5FTNAZRW.js.map +1 -0
  27. package/dist/chunk-5IG2S7ZY.js +70 -0
  28. package/dist/chunk-5IG2S7ZY.js.map +1 -0
  29. package/dist/chunk-5QCXHNCW.js +404 -0
  30. package/dist/chunk-5QCXHNCW.js.map +1 -0
  31. package/dist/chunk-6DUMGC7Y.js +105 -0
  32. package/dist/chunk-6DUMGC7Y.js.map +1 -0
  33. package/dist/chunk-6J25CVST.js +174 -0
  34. package/dist/chunk-6J25CVST.js.map +1 -0
  35. package/dist/chunk-6NN35XOP.js +120 -0
  36. package/dist/chunk-6NN35XOP.js.map +1 -0
  37. package/dist/chunk-6NZBVA4T.js +24 -0
  38. package/dist/chunk-6NZBVA4T.js.map +1 -0
  39. package/dist/chunk-6W5BHRCL.js +295 -0
  40. package/dist/chunk-6W5BHRCL.js.map +1 -0
  41. package/dist/chunk-72BKRCEG.js +409 -0
  42. package/dist/chunk-72BKRCEG.js.map +1 -0
  43. package/dist/{chunk-Q7NWXLCT.js → chunk-7GTI3PPI.js} +53 -48
  44. package/dist/chunk-7GTI3PPI.js.map +1 -0
  45. package/dist/chunk-7P6PLZ4B.js +74 -0
  46. package/dist/chunk-7P6PLZ4B.js.map +1 -0
  47. package/dist/chunk-7WZWY5IA.js +46 -0
  48. package/dist/chunk-7WZWY5IA.js.map +1 -0
  49. package/dist/chunk-AIYO2632.js +489 -0
  50. package/dist/chunk-AIYO2632.js.map +1 -0
  51. package/dist/chunk-ANFZWPNE.js +112 -0
  52. package/dist/chunk-ANFZWPNE.js.map +1 -0
  53. package/dist/chunk-ANZTVAJU.js +73 -0
  54. package/dist/chunk-ANZTVAJU.js.map +1 -0
  55. package/dist/chunk-BD5BTJKX.js +166 -0
  56. package/dist/chunk-BD5BTJKX.js.map +1 -0
  57. package/dist/chunk-BHGIDSRJ.js +140 -0
  58. package/dist/chunk-BHGIDSRJ.js.map +1 -0
  59. package/dist/chunk-BSQWZITZ.js +507 -0
  60. package/dist/chunk-BSQWZITZ.js.map +1 -0
  61. package/dist/chunk-D3LAIK62.js +23 -0
  62. package/dist/chunk-D3LAIK62.js.map +1 -0
  63. package/dist/chunk-DODCR43C.js +155 -0
  64. package/dist/chunk-DODCR43C.js.map +1 -0
  65. package/dist/chunk-EEK5NGZF.js +40 -0
  66. package/dist/chunk-EEK5NGZF.js.map +1 -0
  67. package/dist/chunk-ENRG7TXA.js +11 -0
  68. package/dist/chunk-ENRG7TXA.js.map +1 -0
  69. package/dist/chunk-EQRMGIGY.js +239 -0
  70. package/dist/chunk-EQRMGIGY.js.map +1 -0
  71. package/dist/{chunk-XV3UUOYF.js → chunk-ERAHK5YQ.js} +9 -359
  72. package/dist/chunk-ERAHK5YQ.js.map +1 -0
  73. package/dist/chunk-F3FOFY2P.js +124 -0
  74. package/dist/chunk-F3FOFY2P.js.map +1 -0
  75. package/dist/chunk-F6BTWFOC.js +507 -0
  76. package/dist/chunk-F6BTWFOC.js.map +1 -0
  77. package/dist/chunk-F6J6NNAL.js +34 -0
  78. package/dist/chunk-F6J6NNAL.js.map +1 -0
  79. package/dist/chunk-FCHJ7D5O.js +59 -0
  80. package/dist/chunk-FCHJ7D5O.js.map +1 -0
  81. package/dist/chunk-FFJTEQCC.js +80 -0
  82. package/dist/chunk-FFJTEQCC.js.map +1 -0
  83. package/dist/chunk-FUFMVW7O.js +64 -0
  84. package/dist/chunk-FUFMVW7O.js.map +1 -0
  85. package/dist/chunk-FVPGQ6UE.js +25 -0
  86. package/dist/chunk-FVPGQ6UE.js.map +1 -0
  87. package/dist/{chunk-JP7PNHLH.js → chunk-G3PMV62Z.js} +3 -10
  88. package/dist/chunk-G3PMV62Z.js.map +1 -0
  89. package/dist/chunk-GACFOW3E.js +51 -0
  90. package/dist/chunk-GACFOW3E.js.map +1 -0
  91. package/dist/chunk-GDT6HQMK.js +42 -0
  92. package/dist/chunk-GDT6HQMK.js.map +1 -0
  93. package/dist/chunk-HLGU22C6.js +2589 -0
  94. package/dist/chunk-HLGU22C6.js.map +1 -0
  95. package/dist/chunk-HPMYYGP7.js +134 -0
  96. package/dist/chunk-HPMYYGP7.js.map +1 -0
  97. package/dist/chunk-I2UCOD45.js +197 -0
  98. package/dist/chunk-I2UCOD45.js.map +1 -0
  99. package/dist/chunk-IEGDZUVM.js +75 -0
  100. package/dist/chunk-IEGDZUVM.js.map +1 -0
  101. package/dist/chunk-IIS7INHF.js +47 -0
  102. package/dist/chunk-IIS7INHF.js.map +1 -0
  103. package/dist/chunk-ITELSEFU.js +256 -0
  104. package/dist/chunk-ITELSEFU.js.map +1 -0
  105. package/dist/{chunk-CTCFYWJC.js → chunk-IXAYNBOY.js} +6 -6
  106. package/dist/{chunk-CTCFYWJC.js.map → chunk-IXAYNBOY.js.map} +1 -1
  107. package/dist/chunk-JUW2ETEI.js +191 -0
  108. package/dist/chunk-JUW2ETEI.js.map +1 -0
  109. package/dist/chunk-K65C7CVE.js +127 -0
  110. package/dist/chunk-K65C7CVE.js.map +1 -0
  111. package/dist/chunk-KDI64MCY.js +189 -0
  112. package/dist/chunk-KDI64MCY.js.map +1 -0
  113. package/dist/chunk-KN4ASMH5.js +160 -0
  114. package/dist/chunk-KN4ASMH5.js.map +1 -0
  115. package/dist/chunk-KQW7QNTU.js +1549 -0
  116. package/dist/chunk-KQW7QNTU.js.map +1 -0
  117. package/dist/chunk-KR7NXXHC.js +66 -0
  118. package/dist/chunk-KR7NXXHC.js.map +1 -0
  119. package/dist/chunk-KRZKIVMA.js +142 -0
  120. package/dist/chunk-KRZKIVMA.js.map +1 -0
  121. package/dist/{chunk-C3L3TBBT.js → chunk-KTTLLKGQ.js} +6 -63
  122. package/dist/chunk-KTTLLKGQ.js.map +1 -0
  123. package/dist/chunk-KWKSHPDP.js +234 -0
  124. package/dist/chunk-KWKSHPDP.js.map +1 -0
  125. package/dist/chunk-KZVC7OYG.js +57 -0
  126. package/dist/chunk-KZVC7OYG.js.map +1 -0
  127. package/dist/chunk-L5DHUN2V.js +204 -0
  128. package/dist/chunk-L5DHUN2V.js.map +1 -0
  129. package/dist/chunk-LCTGEH57.js +1376 -0
  130. package/dist/chunk-LCTGEH57.js.map +1 -0
  131. package/dist/chunk-LXLIQ2D6.js +12 -0
  132. package/dist/chunk-LXLIQ2D6.js.map +1 -0
  133. package/dist/chunk-M4CTURKX.js +84 -0
  134. package/dist/chunk-M4CTURKX.js.map +1 -0
  135. package/dist/chunk-M6LTUPVP.js +301 -0
  136. package/dist/chunk-M6LTUPVP.js.map +1 -0
  137. package/dist/chunk-MA6RRHDT.js +291 -0
  138. package/dist/chunk-MA6RRHDT.js.map +1 -0
  139. package/dist/chunk-MODE4QIA.js +6 -0
  140. package/dist/chunk-MODE4QIA.js.map +1 -0
  141. package/dist/chunk-MVILMVGG.js +118 -0
  142. package/dist/chunk-MVILMVGG.js.map +1 -0
  143. package/dist/chunk-MWS4VCLV.js +17 -0
  144. package/dist/chunk-MWS4VCLV.js.map +1 -0
  145. package/dist/chunk-NEUX74SO.js +315 -0
  146. package/dist/chunk-NEUX74SO.js.map +1 -0
  147. package/dist/chunk-NFHKYBRD.js +156 -0
  148. package/dist/chunk-NFHKYBRD.js.map +1 -0
  149. package/dist/chunk-NHJNNXD3.js +89 -0
  150. package/dist/chunk-NHJNNXD3.js.map +1 -0
  151. package/dist/chunk-O2BF3HZL.js +33 -0
  152. package/dist/chunk-O2BF3HZL.js.map +1 -0
  153. package/dist/chunk-OANXCZYD.js +212 -0
  154. package/dist/chunk-OANXCZYD.js.map +1 -0
  155. package/dist/chunk-ODJF7YIP.js +230 -0
  156. package/dist/chunk-ODJF7YIP.js.map +1 -0
  157. package/dist/chunk-ON4BJTHI.js +101 -0
  158. package/dist/chunk-ON4BJTHI.js.map +1 -0
  159. package/dist/{chunk-VMFSRV5H.js → chunk-OTL5WXIJ.js} +2 -2
  160. package/dist/{chunk-VMFSRV5H.js.map → chunk-OTL5WXIJ.js.map} +1 -1
  161. package/dist/{chunk-VPPM7UUQ.js → chunk-PACNBKJV.js} +3 -3
  162. package/dist/{chunk-VPPM7UUQ.js.map → chunk-PACNBKJV.js.map} +1 -1
  163. package/dist/{chunk-ESBL3IPF.js → chunk-PROCA7K7.js} +2 -2
  164. package/dist/{chunk-ESBL3IPF.js.map → chunk-PROCA7K7.js.map} +1 -1
  165. package/dist/chunk-QGMIPA67.js +85 -0
  166. package/dist/chunk-QGMIPA67.js.map +1 -0
  167. package/dist/chunk-QQA37LFB.js +190 -0
  168. package/dist/chunk-QQA37LFB.js.map +1 -0
  169. package/dist/chunk-QZAWRSEB.js +61 -0
  170. package/dist/chunk-QZAWRSEB.js.map +1 -0
  171. package/dist/chunk-R74KGWNS.js +699 -0
  172. package/dist/chunk-R74KGWNS.js.map +1 -0
  173. package/dist/chunk-RFDLHMKL.js +110 -0
  174. package/dist/chunk-RFDLHMKL.js.map +1 -0
  175. package/dist/chunk-RL64HN7S.js +40 -0
  176. package/dist/chunk-RL64HN7S.js.map +1 -0
  177. package/dist/chunk-RMRQKPL7.js +115 -0
  178. package/dist/chunk-RMRQKPL7.js.map +1 -0
  179. package/dist/{chunk-BOHNXTMM.js → chunk-RQVK4IYC.js} +3 -3
  180. package/dist/{chunk-BOHNXTMM.js.map → chunk-RQVK4IYC.js.map} +1 -1
  181. package/dist/chunk-RTW56PWZ.js +59 -0
  182. package/dist/chunk-RTW56PWZ.js.map +1 -0
  183. package/dist/chunk-RUTPQNLR.js +266 -0
  184. package/dist/chunk-RUTPQNLR.js.map +1 -0
  185. package/dist/chunk-S6TAF63G.js +25 -0
  186. package/dist/chunk-S6TAF63G.js.map +1 -0
  187. package/dist/chunk-SBGAUGXY.js +224 -0
  188. package/dist/chunk-SBGAUGXY.js.map +1 -0
  189. package/dist/chunk-SC275NHZ.js +407 -0
  190. package/dist/chunk-SC275NHZ.js.map +1 -0
  191. package/dist/chunk-SCQPU4UE.js +97 -0
  192. package/dist/chunk-SCQPU4UE.js.map +1 -0
  193. package/dist/chunk-SFFF2WQP.js +8 -0
  194. package/dist/chunk-SFFF2WQP.js.map +1 -0
  195. package/dist/chunk-SJYMHZKA.js +36 -0
  196. package/dist/chunk-SJYMHZKA.js.map +1 -0
  197. package/dist/chunk-SLCCUJVN.js +125 -0
  198. package/dist/chunk-SLCCUJVN.js.map +1 -0
  199. package/dist/{chunk-IJTHFNNJ.js → chunk-SVBSNSD4.js} +10 -12
  200. package/dist/chunk-SVBSNSD4.js.map +1 -0
  201. package/dist/chunk-SVPLTL35.js +62 -0
  202. package/dist/chunk-SVPLTL35.js.map +1 -0
  203. package/dist/{chunk-63NSN2VL.js → chunk-SWQFYNYG.js} +115 -51
  204. package/dist/chunk-SWQFYNYG.js.map +1 -0
  205. package/dist/chunk-THHB4EWS.js +72 -0
  206. package/dist/chunk-THHB4EWS.js.map +1 -0
  207. package/dist/chunk-TUCDD33E.js +246 -0
  208. package/dist/chunk-TUCDD33E.js.map +1 -0
  209. package/dist/chunk-TV4WAP2R.js +14 -0
  210. package/dist/chunk-TV4WAP2R.js.map +1 -0
  211. package/dist/chunk-U3A6YBTZ.js +134 -0
  212. package/dist/chunk-U3A6YBTZ.js.map +1 -0
  213. package/dist/chunk-UGT6DKWM.js +95 -0
  214. package/dist/chunk-UGT6DKWM.js.map +1 -0
  215. package/dist/chunk-VSERHUWD.js +212 -0
  216. package/dist/chunk-VSERHUWD.js.map +1 -0
  217. package/dist/chunk-VYG7BDXC.js +49 -0
  218. package/dist/chunk-VYG7BDXC.js.map +1 -0
  219. package/dist/chunk-WETKNYZX.js +52 -0
  220. package/dist/chunk-WETKNYZX.js.map +1 -0
  221. package/dist/chunk-WGG4AML3.js +216 -0
  222. package/dist/chunk-WGG4AML3.js.map +1 -0
  223. package/dist/chunk-WKAUEL6I.js +30 -0
  224. package/dist/chunk-WKAUEL6I.js.map +1 -0
  225. package/dist/chunk-WPOLA5CG.js +81 -0
  226. package/dist/chunk-WPOLA5CG.js.map +1 -0
  227. package/dist/chunk-WPVETCGJ.js +254 -0
  228. package/dist/chunk-WPVETCGJ.js.map +1 -0
  229. package/dist/chunk-WTSM3A7E.js +13 -0
  230. package/dist/chunk-WTSM3A7E.js.map +1 -0
  231. package/dist/chunk-WU3F2K3T.js +148 -0
  232. package/dist/chunk-WU3F2K3T.js.map +1 -0
  233. package/dist/chunk-WZZK2DTZ.js +39 -0
  234. package/dist/chunk-WZZK2DTZ.js.map +1 -0
  235. package/dist/chunk-X4IHLKRD.js +42 -0
  236. package/dist/chunk-X4IHLKRD.js.map +1 -0
  237. package/dist/chunk-XAHEXZJC.js +80 -0
  238. package/dist/chunk-XAHEXZJC.js.map +1 -0
  239. package/dist/chunk-XCYGJDUX.js +31 -0
  240. package/dist/chunk-XCYGJDUX.js.map +1 -0
  241. package/dist/chunk-Y4W3JORC.js +104 -0
  242. package/dist/chunk-Y4W3JORC.js.map +1 -0
  243. package/dist/{chunk-7PUUHEJQ.js → chunk-YFZJ3ZLG.js} +26 -42
  244. package/dist/chunk-YFZJ3ZLG.js.map +1 -0
  245. package/dist/{chunk-6FPEI4EM.js → chunk-YI3WLXEN.js} +27 -2323
  246. package/dist/chunk-YI3WLXEN.js.map +1 -0
  247. package/dist/chunk-ZBKFSPD3.js +29 -0
  248. package/dist/chunk-ZBKFSPD3.js.map +1 -0
  249. package/dist/chunk-ZOERRQ6A.js +79 -0
  250. package/dist/chunk-ZOERRQ6A.js.map +1 -0
  251. package/dist/chunk-ZSTGUKHU.js +10 -0
  252. package/dist/chunk-ZSTGUKHU.js.map +1 -0
  253. package/dist/chunk-ZUEHDL27.js +65 -0
  254. package/dist/chunk-ZUEHDL27.js.map +1 -0
  255. package/dist/editors.js +22 -14
  256. package/dist/editors.js.map +1 -1
  257. package/dist/icons.js +7 -2
  258. package/dist/index.d.ts +8 -18
  259. package/dist/index.js +121 -15800
  260. package/dist/index.js.map +1 -1
  261. package/dist/internal/blocks/AIKit.js +30 -0
  262. package/dist/internal/blocks/AIKit.js.map +1 -0
  263. package/dist/internal/blocks/AppShell.js +11 -0
  264. package/dist/internal/blocks/AppShell.js.map +1 -0
  265. package/dist/internal/blocks/AutoSaveTextarea.js +14 -0
  266. package/dist/internal/blocks/AutoSaveTextarea.js.map +1 -0
  267. package/dist/internal/blocks/BrandEditor.js +23 -0
  268. package/dist/internal/blocks/BrandEditor.js.map +1 -0
  269. package/dist/internal/blocks/ChartPanel.js +10 -0
  270. package/dist/internal/blocks/ChartPanel.js.map +1 -0
  271. package/dist/internal/blocks/ClipboardButton.js +12 -0
  272. package/dist/internal/blocks/ClipboardButton.js.map +1 -0
  273. package/dist/internal/blocks/ColorInput.js +13 -0
  274. package/dist/internal/blocks/ColorInput.js.map +1 -0
  275. package/dist/internal/blocks/ColorModeSwitch.js +13 -0
  276. package/dist/internal/blocks/ColorModeSwitch.js.map +1 -0
  277. package/dist/internal/blocks/Command.js +15 -0
  278. package/dist/internal/blocks/Command.js.map +1 -0
  279. package/dist/internal/blocks/CopyField.js +11 -0
  280. package/dist/internal/blocks/CopyField.js.map +1 -0
  281. package/dist/internal/blocks/DashboardHero.js +9 -0
  282. package/dist/internal/blocks/DashboardHero.js.map +1 -0
  283. package/dist/internal/blocks/DateInput.js +16 -0
  284. package/dist/internal/blocks/DateInput.js.map +1 -0
  285. package/dist/internal/blocks/DateRangeInput.js +16 -0
  286. package/dist/internal/blocks/DateRangeInput.js.map +1 -0
  287. package/dist/internal/blocks/EmptyConfigurationActionCard.js +10 -0
  288. package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -0
  289. package/dist/internal/blocks/EmptyState.js +4 -0
  290. package/dist/internal/blocks/EmptyState.js.map +1 -0
  291. package/dist/internal/blocks/ErrorState.js +5 -0
  292. package/dist/internal/blocks/ErrorState.js.map +1 -0
  293. package/dist/internal/blocks/ExportMenu.js +13 -0
  294. package/dist/internal/blocks/ExportMenu.js.map +1 -0
  295. package/dist/internal/blocks/Form.js +29 -0
  296. package/dist/internal/blocks/Form.js.map +1 -0
  297. package/dist/internal/blocks/FormGroup.js +18 -0
  298. package/dist/internal/blocks/FormGroup.js.map +1 -0
  299. package/dist/internal/blocks/GoogleButton.js +10 -0
  300. package/dist/internal/blocks/GoogleButton.js.map +1 -0
  301. package/dist/internal/blocks/MicrosoftButton.js +10 -0
  302. package/dist/internal/blocks/MicrosoftButton.js.map +1 -0
  303. package/dist/internal/blocks/MultiActionButtonGroup.js +12 -0
  304. package/dist/internal/blocks/MultiActionButtonGroup.js.map +1 -0
  305. package/dist/internal/blocks/MultiCombobox.js +14 -0
  306. package/dist/internal/blocks/MultiCombobox.js.map +1 -0
  307. package/dist/internal/blocks/NumberInput.js +12 -0
  308. package/dist/internal/blocks/NumberInput.js.map +1 -0
  309. package/dist/internal/blocks/OtpInput.js +10 -0
  310. package/dist/internal/blocks/OtpInput.js.map +1 -0
  311. package/dist/internal/blocks/PageHeader.js +9 -0
  312. package/dist/internal/blocks/PageHeader.js.map +1 -0
  313. package/dist/internal/blocks/PageLayout.js +9 -0
  314. package/dist/internal/blocks/PageLayout.js.map +1 -0
  315. package/dist/internal/blocks/PageToolbar.js +13 -0
  316. package/dist/internal/blocks/PageToolbar.js.map +1 -0
  317. package/dist/internal/blocks/PasswordInput.js +13 -0
  318. package/dist/internal/blocks/PasswordInput.js.map +1 -0
  319. package/dist/internal/blocks/SearchInput.js +12 -0
  320. package/dist/internal/blocks/SearchInput.js.map +1 -0
  321. package/dist/internal/blocks/SearchInputWithNavigation.js +16 -0
  322. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -0
  323. package/dist/internal/blocks/SectionNav.js +15 -0
  324. package/dist/internal/blocks/SectionNav.js.map +1 -0
  325. package/dist/internal/blocks/SplitButton.js +14 -0
  326. package/dist/internal/blocks/SplitButton.js.map +1 -0
  327. package/dist/internal/blocks/StatCard.js +10 -0
  328. package/dist/internal/blocks/StatCard.js.map +1 -0
  329. package/dist/internal/blocks/TextInput.js +13 -0
  330. package/dist/internal/blocks/TextInput.js.map +1 -0
  331. package/dist/internal/blocks/Textarea.js +13 -0
  332. package/dist/internal/blocks/Textarea.js.map +1 -0
  333. package/dist/internal/blocks/TimeInput.js +17 -0
  334. package/dist/internal/blocks/TimeInput.js.map +1 -0
  335. package/dist/internal/components/Alert.js +11 -0
  336. package/dist/internal/components/Alert.js.map +1 -0
  337. package/dist/internal/components/AlertModal.js +11 -0
  338. package/dist/internal/components/AlertModal.js.map +1 -0
  339. package/dist/internal/components/Avatar.js +9 -0
  340. package/dist/internal/components/Avatar.js.map +1 -0
  341. package/dist/internal/components/Badge.js +9 -0
  342. package/dist/internal/components/Badge.js.map +1 -0
  343. package/dist/internal/components/BrandLogo.js +11 -0
  344. package/dist/internal/components/BrandLogo.js.map +1 -0
  345. package/dist/internal/components/Breadcrumb.js +14 -0
  346. package/dist/internal/components/Breadcrumb.js.map +1 -0
  347. package/dist/internal/components/Button.js +10 -0
  348. package/dist/internal/components/Button.js.map +1 -0
  349. package/dist/internal/components/ButtonGroup.js +9 -0
  350. package/dist/internal/components/ButtonGroup.js.map +1 -0
  351. package/dist/internal/components/Calendar.js +9 -0
  352. package/dist/internal/components/Calendar.js.map +1 -0
  353. package/dist/internal/components/Card.js +9 -0
  354. package/dist/internal/components/Card.js.map +1 -0
  355. package/dist/internal/components/Checkbox.js +11 -0
  356. package/dist/internal/components/Checkbox.js.map +1 -0
  357. package/dist/internal/components/Clipboard.js +9 -0
  358. package/dist/internal/components/Clipboard.js.map +1 -0
  359. package/dist/internal/components/Collapsible.js +9 -0
  360. package/dist/internal/components/Collapsible.js.map +1 -0
  361. package/dist/internal/components/CollapsiblePanel.js +11 -0
  362. package/dist/internal/components/CollapsiblePanel.js.map +1 -0
  363. package/dist/internal/components/Combobox.js +13 -0
  364. package/dist/internal/components/Combobox.js.map +1 -0
  365. package/dist/internal/components/DatePicker.js +11 -0
  366. package/dist/internal/components/DatePicker.js.map +1 -0
  367. package/dist/internal/components/DateRangePicker.js +17 -0
  368. package/dist/internal/components/DateRangePicker.js.map +1 -0
  369. package/dist/internal/components/DiffView.js +9 -0
  370. package/dist/internal/components/DiffView.js.map +1 -0
  371. package/dist/internal/components/DotsLoader.js +5 -0
  372. package/dist/internal/components/DotsLoader.js.map +1 -0
  373. package/dist/internal/components/DropdownMenu.js +11 -0
  374. package/dist/internal/components/DropdownMenu.js.map +1 -0
  375. package/dist/internal/components/EmptySearchContent.js +4 -0
  376. package/dist/internal/components/EmptySearchContent.js.map +1 -0
  377. package/dist/internal/components/FileUpload.js +11 -0
  378. package/dist/internal/components/FileUpload.js.map +1 -0
  379. package/dist/internal/components/FullScreenModal.js +12 -0
  380. package/dist/internal/components/FullScreenModal.js.map +1 -0
  381. package/dist/internal/components/HelpBlock.js +4 -0
  382. package/dist/internal/components/HelpBlock.js.map +1 -0
  383. package/dist/internal/components/HoverCard.js +9 -0
  384. package/dist/internal/components/HoverCard.js.map +1 -0
  385. package/dist/internal/components/InputGroup.js +11 -0
  386. package/dist/internal/components/InputGroup.js.map +1 -0
  387. package/dist/internal/components/Kbd.js +9 -0
  388. package/dist/internal/components/Kbd.js.map +1 -0
  389. package/dist/internal/components/Label.js +9 -0
  390. package/dist/internal/components/Label.js.map +1 -0
  391. package/dist/internal/components/Link.js +9 -0
  392. package/dist/internal/components/Link.js.map +1 -0
  393. package/dist/internal/components/MarkedText.js +5 -0
  394. package/dist/internal/components/MarkedText.js.map +1 -0
  395. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +10 -0
  396. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -0
  397. package/dist/internal/components/MergeEditor/PaneHeader.js +4 -0
  398. package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -0
  399. package/dist/internal/components/MergeEditor/constants.js +4 -0
  400. package/dist/internal/components/MergeEditor/constants.js.map +1 -0
  401. package/dist/internal/components/MergeEditor/useMergeDiff.js +5 -0
  402. package/dist/internal/components/MergeEditor/useMergeDiff.js.map +1 -0
  403. package/dist/internal/components/Modal.js +13 -0
  404. package/dist/internal/components/Modal.js.map +1 -0
  405. package/dist/internal/components/Navbar.js +14 -0
  406. package/dist/internal/components/Navbar.js.map +1 -0
  407. package/dist/internal/components/Pagination.js +11 -0
  408. package/dist/internal/components/Pagination.js.map +1 -0
  409. package/dist/internal/components/PanelWithDetails.js +11 -0
  410. package/dist/internal/components/PanelWithDetails.js.map +1 -0
  411. package/dist/internal/components/Popconfirm.js +12 -0
  412. package/dist/internal/components/Popconfirm.js.map +1 -0
  413. package/dist/internal/components/Popover.js +9 -0
  414. package/dist/internal/components/Popover.js.map +1 -0
  415. package/dist/internal/components/Progress.js +9 -0
  416. package/dist/internal/components/Progress.js.map +1 -0
  417. package/dist/internal/components/RadioGroup.js +12 -0
  418. package/dist/internal/components/RadioGroup.js.map +1 -0
  419. package/dist/internal/components/Resizable.js +9 -0
  420. package/dist/internal/components/Resizable.js.map +1 -0
  421. package/dist/internal/components/ScrollArea.js +9 -0
  422. package/dist/internal/components/ScrollArea.js.map +1 -0
  423. package/dist/internal/components/Search.js +10 -0
  424. package/dist/internal/components/Search.js.map +1 -0
  425. package/dist/internal/components/Select.js +12 -0
  426. package/dist/internal/components/Select.js.map +1 -0
  427. package/dist/internal/components/Separator.js +9 -0
  428. package/dist/internal/components/Separator.js.map +1 -0
  429. package/dist/internal/components/Sheet.js +12 -0
  430. package/dist/internal/components/Sheet.js.map +1 -0
  431. package/dist/internal/components/Sidebar.js +20 -0
  432. package/dist/internal/components/Sidebar.js.map +1 -0
  433. package/dist/internal/components/Skeleton/Skeleton.js +9 -0
  434. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -0
  435. package/dist/internal/components/Skeleton/SkeletonList.js +10 -0
  436. package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -0
  437. package/dist/internal/components/Slider.js +11 -0
  438. package/dist/internal/components/Slider.js.map +1 -0
  439. package/dist/internal/components/SpotlightBackdrop.js +9 -0
  440. package/dist/internal/components/SpotlightBackdrop.js.map +1 -0
  441. package/dist/internal/components/Stepper.js +10 -0
  442. package/dist/internal/components/Stepper.js.map +1 -0
  443. package/dist/internal/components/Switch.js +10 -0
  444. package/dist/internal/components/Switch.js.map +1 -0
  445. package/dist/internal/components/Table.js +10 -0
  446. package/dist/internal/components/Table.js.map +1 -0
  447. package/dist/internal/components/Tabs.js +12 -0
  448. package/dist/internal/components/Tabs.js.map +1 -0
  449. package/dist/internal/components/ThemeProvider.js +10 -0
  450. package/dist/internal/components/ThemeProvider.js.map +1 -0
  451. package/dist/internal/components/TimePicker.js +12 -0
  452. package/dist/internal/components/TimePicker.js.map +1 -0
  453. package/dist/internal/components/Timeline.js +10 -0
  454. package/dist/internal/components/Timeline.js.map +1 -0
  455. package/dist/internal/components/Toast.js +11 -0
  456. package/dist/internal/components/Toast.js.map +1 -0
  457. package/dist/internal/components/Toggle.js +9 -0
  458. package/dist/internal/components/Toggle.js.map +1 -0
  459. package/dist/internal/components/ToggleGroup.js +9 -0
  460. package/dist/internal/components/ToggleGroup.js.map +1 -0
  461. package/dist/internal/components/Tooltip.js +8 -0
  462. package/dist/internal/components/Tooltip.js.map +1 -0
  463. package/dist/internal/components/Truncated.js +9 -0
  464. package/dist/internal/components/Truncated.js.map +1 -0
  465. package/dist/internal/components/Workbench.js +11 -0
  466. package/dist/internal/components/Workbench.js.map +1 -0
  467. package/dist/internal/components/ZoomableSvg.js +13 -0
  468. package/dist/internal/components/ZoomableSvg.js.map +1 -0
  469. package/dist/internal/hooks/useAutosizeInput.js +4 -0
  470. package/dist/internal/hooks/useAutosizeInput.js.map +1 -0
  471. package/dist/internal/hooks/useScrollbarPosition.js +5 -0
  472. package/dist/internal/hooks/useScrollbarPosition.js.map +1 -0
  473. package/dist/internal/hooks/useStableCallback.js +4 -0
  474. package/dist/internal/hooks/useStableCallback.js.map +1 -0
  475. package/dist/internal/utils/mergeRefs.js +4 -0
  476. package/dist/internal/utils/mergeRefs.js.map +1 -0
  477. package/dist/internal/utils.js +8 -0
  478. package/dist/internal/utils.js.map +1 -0
  479. package/dist/markdown-editor.js +23 -9
  480. package/dist/markdown-editor.js.map +1 -1
  481. package/dist/mermaid.js +16 -8
  482. package/dist/rjsf.js +102 -29
  483. package/dist/rjsf.js.map +1 -1
  484. package/dist/styles.css +1 -1
  485. package/dist/testing.js +8 -3
  486. package/dist/testing.js.map +1 -1
  487. package/package.json +9 -8
  488. package/src/styles.css +35 -7
  489. package/src/theme.css +64 -0
  490. package/dist/MermaidDiagram-EOKJHQQV.js +0 -10
  491. package/dist/chunk-63NSN2VL.js.map +0 -1
  492. package/dist/chunk-6FPEI4EM.js.map +0 -1
  493. package/dist/chunk-7PUUHEJQ.js.map +0 -1
  494. package/dist/chunk-C3L3TBBT.js.map +0 -1
  495. package/dist/chunk-IJTHFNNJ.js.map +0 -1
  496. package/dist/chunk-JP7PNHLH.js.map +0 -1
  497. package/dist/chunk-KPNAW5MU.js +0 -229
  498. package/dist/chunk-KPNAW5MU.js.map +0 -1
  499. package/dist/chunk-L37JJ6MR.js +0 -152
  500. package/dist/chunk-L37JJ6MR.js.map +0 -1
  501. package/dist/chunk-Q7NWXLCT.js.map +0 -1
  502. package/dist/chunk-SYIEF644.js +0 -1016
  503. package/dist/chunk-SYIEF644.js.map +0 -1
  504. package/dist/chunk-XV3UUOYF.js.map +0 -1
@@ -0,0 +1,1376 @@
1
+ import { useScrollbarPosition } from './chunk-VYG7BDXC.js';
2
+ import { useElement } from './chunk-MWS4VCLV.js';
3
+ import { BrandLogo } from './chunk-4FIZZONW.js';
4
+ import { HoverCard } from './chunk-5IG2S7ZY.js';
5
+ import { DropdownMenu } from './chunk-ERAHK5YQ.js';
6
+ import { Collapsible } from './chunk-FVPGQ6UE.js';
7
+ import { Separator } from './chunk-6DUMGC7Y.js';
8
+ import { ScrollArea } from './chunk-THHB4EWS.js';
9
+ import { Search, ChevronDown } from './chunk-RQVK4IYC.js';
10
+ import { TooltipProvider, Tooltip } from './chunk-SWQFYNYG.js';
11
+ import { mergeRefs } from './chunk-3W27OLK5.js';
12
+ import { cn } from './chunk-LXLIQ2D6.js';
13
+ import { createContext, use, useState, useCallback, useMemo, useReducer, useLayoutEffect, useEffect, useRef } from 'react';
14
+ import { jsx, jsxs } from 'react/jsx-runtime';
15
+ import { Slot, Root, Slottable } from '@radix-ui/react-slot';
16
+
17
+ var FALLBACK_TIMEOUT_MS = 500;
18
+ var reducer = (state, event) => {
19
+ switch (event) {
20
+ case "MOUNT":
21
+ return "mounted";
22
+ case "TRANSITION_OUT":
23
+ return state === "mounted" ? "unmountSuspended" : state;
24
+ case "TRANSITION_END":
25
+ return state === "unmountSuspended" ? "unmounted" : state;
26
+ default:
27
+ return state;
28
+ }
29
+ };
30
+ var useTransitionPresence = ({
31
+ mounted,
32
+ keepMounted = false
33
+ }) => {
34
+ const [state, send] = useReducer(reducer, mounted ? "mounted" : "unmounted");
35
+ useLayoutEffect(() => {
36
+ if (keepMounted) return;
37
+ mounted ? send("MOUNT") : send("TRANSITION_OUT");
38
+ }, [mounted, keepMounted]);
39
+ useEffect(() => {
40
+ if (state !== "unmountSuspended") return;
41
+ const id = setTimeout(() => send("TRANSITION_END"), FALLBACK_TIMEOUT_MS);
42
+ return () => clearTimeout(id);
43
+ }, [state]);
44
+ return useMemo(
45
+ () => ({
46
+ isMounted: keepMounted || state !== "unmounted",
47
+ completeUnmount: () => send("TRANSITION_END")
48
+ }),
49
+ [state, keepMounted]
50
+ );
51
+ };
52
+ var SidebarContent = ({ ref, className, children, contentRef }) => {
53
+ const { setElement, isBottom, isTop, isMiddle } = useScrollbarPosition();
54
+ const mergedRefs = mergeRefs(ref ?? null, (ref2) => setElement(ref2));
55
+ return /* @__PURE__ */ jsx(
56
+ ScrollArea,
57
+ {
58
+ ref: mergedRefs,
59
+ type: "scroll",
60
+ className: "tw:group/sidebar-content tw:flex-1",
61
+ "data-slot": "sidebar-content",
62
+ scrollBarClassName: "tw:w-1.5",
63
+ viewPortClassName: cn(
64
+ "tw:overflow-x-hidden",
65
+ "tw:overscroll-contain",
66
+ "tw:[&>div]:!flex",
67
+ // overflow fix for scrollbar
68
+ // Hide scroll-position-based borders (top/bottom) if SidebarHeader or SidebarFooter is omitted.
69
+ "tw:group-first/sidebar-content:before:hidden",
70
+ "tw:group-last/sidebar-content:after:hidden",
71
+ "tw:!box-border",
72
+ {
73
+ 'tw:before:absolute tw:before:top-0 tw:before:left-0 tw:before:right-0 tw:before:h-px tw:before:bg-sidebar-border tw:before:z-10 tw:before:content-[""]': isBottom || isMiddle,
74
+ 'tw:after:absolute tw:after:bottom-0 tw:after:left-0 tw:after:right-0 tw:after:h-px tw:after:bg-sidebar-border tw:after:z-10 tw:after:content-[""]': isTop || isMiddle
75
+ }
76
+ ),
77
+ children: /* @__PURE__ */ jsx(
78
+ "div",
79
+ {
80
+ ref: contentRef,
81
+ className: cn(
82
+ "tw:flex",
83
+ "tw:flex-1",
84
+ "tw:flex-col",
85
+ "tw:gap-1",
86
+ "tw:overflow-x-hidden",
87
+ "tw:p-2",
88
+ className
89
+ ),
90
+ children
91
+ }
92
+ )
93
+ }
94
+ );
95
+ };
96
+
97
+ // src/components/Sidebar/utils.ts
98
+ var SidebarWidthInPx = {
99
+ MIN_DEFAULT: 256,
100
+ // 8 px / 36 px / 8 px = 52 px
101
+ // left padding / icon width / right padding
102
+ COLLAPSED_ICON: 52,
103
+ // padding from every side for floating variant (see --sidebar-floating-padding)
104
+ FLOATING_VARIANT_PADDING: 8
105
+ };
106
+ var floatingSideCount = {
107
+ "sided-floating": 1,
108
+ floating: 2,
109
+ inset: 0,
110
+ none: 0
111
+ };
112
+ var calcEffectiveWidths = ({
113
+ variant,
114
+ width: customWidth,
115
+ collapsible,
116
+ state,
117
+ mode
118
+ }) => {
119
+ if (variant === "none") return { sidebar: 0, gap: 0, fill: 0 };
120
+ const padding = floatingSideCount[variant] * SidebarWidthInPx.FLOATING_VARIANT_PADDING;
121
+ const width = Math.max(customWidth ?? 0, SidebarWidthInPx.MIN_DEFAULT) + padding;
122
+ const iconWidth = SidebarWidthInPx.COLLAPSED_ICON + padding;
123
+ const isExpanded = state === "expanded";
124
+ const reduction = variant === "inset" ? 0 : SidebarWidthInPx.FLOATING_VARIANT_PADDING;
125
+ const iconWidths = (() => {
126
+ const sidebar = isExpanded ? width : iconWidth;
127
+ const gap = mode === "expand-on-hover" ? iconWidth : sidebar;
128
+ const fill = gap - reduction;
129
+ return { sidebar, gap, fill };
130
+ })();
131
+ const offCanvasWidths = (() => {
132
+ const sidebar = width;
133
+ const gap = isExpanded ? width : SidebarWidthInPx.FLOATING_VARIANT_PADDING;
134
+ const fill = gap - reduction;
135
+ return { sidebar, gap, fill };
136
+ })();
137
+ return collapsible === "icon" ? iconWidths : offCanvasWidths;
138
+ };
139
+ var SidebarContext = createContext(null);
140
+ var useOptionalSidebar = (side = "left") => use(SidebarContext)?.[side] ?? null;
141
+ var useSidebar = (side = "left") => {
142
+ const context = use(SidebarContext);
143
+ if (context === null) throw new Error("useSidebar must be used within a SidebarProvider.");
144
+ return context[side];
145
+ };
146
+ var PORTAL_OPEN_SELECTORS = [
147
+ '[aria-haspopup="menu"][aria-expanded=true]',
148
+ // DropdownMenu
149
+ '[aria-haspopup="dialog"][aria-expanded=true]'
150
+ // Popover, Dialogs (Modal, Sheet)
151
+ ];
152
+ var PORTAL_OPEN_SELECTORS_STRING = PORTAL_OPEN_SELECTORS.join(",");
153
+ var useHoverTracking = (sidebarElement) => {
154
+ const [isHovered, setIsHovered] = useState(false);
155
+ const isLockedRef = useRef(false);
156
+ useEffect(() => {
157
+ if (!sidebarElement) return;
158
+ const handleMouseEnter = () => setIsHovered(true);
159
+ const handleMouseLeave = () => {
160
+ if (isLockedRef.current) return;
161
+ setIsHovered(false);
162
+ };
163
+ sidebarElement.addEventListener("mouseenter", handleMouseEnter);
164
+ sidebarElement.addEventListener("mouseleave", handleMouseLeave);
165
+ return () => {
166
+ sidebarElement.removeEventListener("mouseenter", handleMouseEnter);
167
+ sidebarElement.removeEventListener("mouseleave", handleMouseLeave);
168
+ };
169
+ }, [sidebarElement]);
170
+ useEffect(() => {
171
+ if (!sidebarElement) return;
172
+ let animationFrameId;
173
+ const observer = new MutationObserver(() => {
174
+ const hasOpenPortal = sidebarElement.querySelector(PORTAL_OPEN_SELECTORS_STRING) !== null;
175
+ isLockedRef.current = hasOpenPortal;
176
+ if (hasOpenPortal) return;
177
+ animationFrameId = requestAnimationFrame(() => {
178
+ setIsHovered(sidebarElement.matches(":hover"));
179
+ });
180
+ });
181
+ isLockedRef.current = sidebarElement.querySelector(PORTAL_OPEN_SELECTORS_STRING) !== null;
182
+ observer.observe(sidebarElement, {
183
+ attributes: true,
184
+ attributeFilter: ["aria-expanded"],
185
+ subtree: true
186
+ });
187
+ return () => {
188
+ cancelAnimationFrame(animationFrameId);
189
+ observer.disconnect();
190
+ };
191
+ }, [sidebarElement]);
192
+ return isHovered;
193
+ };
194
+
195
+ // src/components/Sidebar/SidebarProvider/useSidebarState.ts
196
+ var useSidebarState = ({ defaultMode, mode: modeProp, onModeChange }) => {
197
+ const [sidebarElement, setSidebarElement] = useElement();
198
+ const isHovered = useHoverTracking(sidebarElement);
199
+ const [_mode, _setMode] = useState(defaultMode ?? "expanded");
200
+ const mode = modeProp ?? _mode;
201
+ const setMode = useCallback(
202
+ (dispatch) => {
203
+ const newState = typeof dispatch === "function" ? dispatch(mode) : dispatch;
204
+ const set = onModeChange ?? _setMode;
205
+ set(newState);
206
+ },
207
+ [onModeChange, mode]
208
+ );
209
+ const toggle = useCallback(() => {
210
+ setMode((currState) => currState === "expanded" ? "collapsed" : "expanded");
211
+ }, [setMode]);
212
+ const state = (() => {
213
+ if (mode === "expand-on-hover") return isHovered ? "expanded" : "collapsed";
214
+ return mode;
215
+ })();
216
+ return useMemo(
217
+ () => ({
218
+ isHovered,
219
+ toggle,
220
+ setMode,
221
+ mode,
222
+ state,
223
+ sidebarElement,
224
+ setSidebarElement
225
+ }),
226
+ [isHovered, toggle, setMode, mode, state, sidebarElement, setSidebarElement]
227
+ );
228
+ };
229
+ var DEFAULT_SIDEBAR_VARIANT = "none";
230
+ var DEFAULT_SIDEBAR_MODE = "expanded";
231
+ var DEFAULT_SIDEBAR_COLLAPSIBLE = "off-canvas";
232
+ var SidebarProvider = ({
233
+ children,
234
+ // left state
235
+ defaultLeftMode = DEFAULT_SIDEBAR_MODE,
236
+ leftMode,
237
+ onLeftModeChange,
238
+ // right state
239
+ defaultRightMode = DEFAULT_SIDEBAR_MODE,
240
+ rightMode,
241
+ onRightModeChange,
242
+ // left
243
+ leftCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE,
244
+ leftVariant = DEFAULT_SIDEBAR_VARIANT,
245
+ leftWidth,
246
+ // right
247
+ rightCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE,
248
+ rightVariant = DEFAULT_SIDEBAR_VARIANT,
249
+ rightWidth,
250
+ // width change callbacks
251
+ onLeftWidthChange,
252
+ onRightWidthChange,
253
+ // fill
254
+ defaultFilledSide = null
255
+ }) => {
256
+ const [filledSide, setFilledSide] = useState(defaultFilledSide);
257
+ const [isLeftDragging, setIsLeftDragging] = useState(false);
258
+ const [isRightDragging, setIsRightDragging] = useState(false);
259
+ const [leftDragWidth, setLeftDragWidth] = useState(null);
260
+ const [rightDragWidth, setRightDragWidth] = useState(null);
261
+ if (leftDragWidth !== null && leftWidth === leftDragWidth) setLeftDragWidth(null);
262
+ if (rightDragWidth !== null && rightWidth === rightDragWidth) setRightDragWidth(null);
263
+ const leftState = useSidebarState({
264
+ defaultMode: defaultLeftMode,
265
+ mode: leftMode,
266
+ onModeChange: onLeftModeChange
267
+ });
268
+ const rightState = useSidebarState({
269
+ defaultMode: defaultRightMode,
270
+ mode: rightMode,
271
+ onModeChange: onRightModeChange
272
+ });
273
+ const toggleLeftFill = useCallback(
274
+ () => setFilledSide((prev) => prev === "left" ? null : "left"),
275
+ []
276
+ );
277
+ const toggleRightFill = useCallback(
278
+ () => setFilledSide((prev) => prev === "right" ? null : "right"),
279
+ []
280
+ );
281
+ const value = useMemo(
282
+ () => ({
283
+ left: {
284
+ ...leftState,
285
+ isFill: filledSide === "left",
286
+ toggleFill: toggleLeftFill,
287
+ widths: calcEffectiveWidths({
288
+ variant: leftVariant,
289
+ width: leftDragWidth ?? leftWidth,
290
+ collapsible: leftCollapsible,
291
+ state: leftState.state,
292
+ mode: leftState.mode
293
+ }),
294
+ collapsible: leftCollapsible,
295
+ variant: leftVariant,
296
+ baseWidth: leftDragWidth ?? leftWidth,
297
+ onWidthChange: onLeftWidthChange,
298
+ setDragWidth: setLeftDragWidth,
299
+ isDragging: isLeftDragging,
300
+ setIsDragging: setIsLeftDragging
301
+ },
302
+ right: {
303
+ ...rightState,
304
+ isFill: filledSide === "right",
305
+ toggleFill: toggleRightFill,
306
+ widths: calcEffectiveWidths({
307
+ variant: rightVariant,
308
+ width: rightDragWidth ?? rightWidth,
309
+ collapsible: rightCollapsible,
310
+ state: rightState.state,
311
+ mode: rightState.mode
312
+ }),
313
+ collapsible: rightCollapsible,
314
+ variant: rightVariant,
315
+ baseWidth: rightDragWidth ?? rightWidth,
316
+ onWidthChange: onRightWidthChange,
317
+ setDragWidth: setRightDragWidth,
318
+ isDragging: isRightDragging,
319
+ setIsDragging: setIsRightDragging
320
+ }
321
+ }),
322
+ [
323
+ leftState,
324
+ filledSide,
325
+ toggleLeftFill,
326
+ leftVariant,
327
+ leftWidth,
328
+ leftDragWidth,
329
+ leftCollapsible,
330
+ onLeftWidthChange,
331
+ isLeftDragging,
332
+ rightState,
333
+ toggleRightFill,
334
+ rightVariant,
335
+ rightWidth,
336
+ rightDragWidth,
337
+ rightCollapsible,
338
+ onRightWidthChange,
339
+ isRightDragging
340
+ ]
341
+ );
342
+ return /* @__PURE__ */ jsx(SidebarContext, { value, children });
343
+ };
344
+ var SidebarFillTrigger = ({ ref, side = "left", onClick, ...rest }) => {
345
+ const { toggleFill, isFill } = useSidebar(side);
346
+ const handleOnClick = (event) => {
347
+ toggleFill();
348
+ onClick?.(event);
349
+ };
350
+ return /* @__PURE__ */ jsx(Slot, { ...rest, ref, onClick: handleOnClick, "aria-selected": isFill });
351
+ };
352
+ var SidebarFooter = ({ className, ...props }) => /* @__PURE__ */ jsx(
353
+ "div",
354
+ {
355
+ "data-slot": "sidebar-footer",
356
+ className: cn("tw:flex", "tw:flex-col", "tw:gap-2", "tw:p-2", className),
357
+ ...props
358
+ }
359
+ );
360
+ var SidebarGroup = ({ className, ...props }) => /* @__PURE__ */ jsx(
361
+ "div",
362
+ {
363
+ className: cn(
364
+ "tw:group/sidebar-group",
365
+ "tw:relative",
366
+ "tw:w-full",
367
+ // positioning
368
+ "tw:flex",
369
+ "tw:flex-col",
370
+ "tw:min-w-0",
371
+ "tw:rounded-lg",
372
+ className
373
+ ),
374
+ ...props
375
+ }
376
+ );
377
+ var SidebarGroupContent = ({ className, ...props }) => /* @__PURE__ */ jsx(
378
+ "div",
379
+ {
380
+ className: cn(
381
+ // positioning
382
+ "tw:flex",
383
+ "tw:flex-col",
384
+ "tw:gap-2",
385
+ "tw:w-full",
386
+ className
387
+ ),
388
+ ...props
389
+ }
390
+ );
391
+ var SidebarGroupAction = ({
392
+ ref,
393
+ className,
394
+ type = "button",
395
+ children,
396
+ ...props
397
+ }) => /* @__PURE__ */ jsx(
398
+ "button",
399
+ {
400
+ ...props,
401
+ type,
402
+ ref,
403
+ className: cn(
404
+ "tw:group-data-[state=collapsed]/sidebar:hidden",
405
+ // positioning
406
+ "tw:absolute",
407
+ "tw:right-1.5",
408
+ "tw:top-2",
409
+ "tw:flex",
410
+ "tw:items-center",
411
+ "tw:justify-center",
412
+ // sizing
413
+ "tw:size-5",
414
+ // styles
415
+ "tw:text-neutral-800",
416
+ "tw:rounded-full",
417
+ // svg defaults: size + colour
418
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-3',
419
+ "tw:[&_svg]:text-neutral-400",
420
+ "tw:hover:[&_svg]:text-secondary-600",
421
+ "tw:hover:bg-neutral-100",
422
+ "tw:focus-visible:ring-4",
423
+ "tw:focus-visible:ring-ring/30",
424
+ "tw:focus-visible:outline",
425
+ "tw:focus-visible:outline-1",
426
+ "tw:focus-visible:outline-ring",
427
+ className
428
+ ),
429
+ children
430
+ }
431
+ );
432
+ var SidebarGroupLabel = ({
433
+ ref,
434
+ className,
435
+ children,
436
+ ...props
437
+ }) => /* @__PURE__ */ jsxs(
438
+ "div",
439
+ {
440
+ ref,
441
+ className: cn(
442
+ "tw:relative",
443
+ // positioning
444
+ "tw:flex",
445
+ "tw:flex-col",
446
+ "tw:shrink-0",
447
+ // styling
448
+ "tw:h-8",
449
+ "tw:px-2",
450
+ "tw:-mb-1",
451
+ "tw:rounded-lg",
452
+ // text
453
+ "tw:uppercase",
454
+ "tw:font-sans",
455
+ "tw:text-xs",
456
+ "tw:tracking-[1px]",
457
+ className
458
+ ),
459
+ ...props,
460
+ children: [
461
+ /* @__PURE__ */ jsx(
462
+ Separator,
463
+ {
464
+ orientation: "horizontal",
465
+ size: "3/4",
466
+ className: cn(
467
+ "tw:opacity-0",
468
+ "tw:group-data-[state=collapsed]/sidebar:opacity-100",
469
+ // positioning
470
+ "tw:absolute",
471
+ "tw:w-full",
472
+ "tw:left-0",
473
+ "tw:top-1/2 tw:-translate-y-1/2",
474
+ "tw:transition-opacity",
475
+ "tw:duration-200",
476
+ "tw:ease-linear"
477
+ )
478
+ }
479
+ ),
480
+ /* @__PURE__ */ jsx(
481
+ "span",
482
+ {
483
+ className: cn(
484
+ "tw:flex",
485
+ "tw:group-data-[state=collapsed]/sidebar:opacity-0",
486
+ "tw:items-center",
487
+ "tw:flex-1",
488
+ "tw:text-muted-foreground",
489
+ "tw:whitespace-nowrap",
490
+ // transition
491
+ "tw:transition-opacity",
492
+ "tw:duration-200",
493
+ "tw:ease-linear"
494
+ ),
495
+ children
496
+ }
497
+ )
498
+ ]
499
+ }
500
+ );
501
+ var SidebarInstanceContext = createContext(null);
502
+ var useSidebarInstance = () => {
503
+ const context = use(SidebarInstanceContext);
504
+ if (context === null)
505
+ throw new Error("useSidebarInstance must be used within a SidebarInstanceContext.");
506
+ return context;
507
+ };
508
+ var SidebarHeader = ({ className, children, ...props }) => {
509
+ const instance = use(SidebarInstanceContext);
510
+ const variant = instance?.state === "collapsed" ? "mark" : "wordmark";
511
+ const fallback = /* @__PURE__ */ jsx(BrandLogo, { variant, className: "tw:h-7" });
512
+ return /* @__PURE__ */ jsx(
513
+ "div",
514
+ {
515
+ "data-slot": "sidebar-header",
516
+ className: cn(
517
+ "tw:peer/sidebar-header",
518
+ "tw:flex",
519
+ "tw:flex-col",
520
+ "tw:gap-2",
521
+ "tw:p-2",
522
+ className
523
+ ),
524
+ ...props,
525
+ children: children ?? fallback
526
+ }
527
+ );
528
+ };
529
+ var SidebarMenu = ({ className, ...props }) => /* @__PURE__ */ jsx(
530
+ "ul",
531
+ {
532
+ "data-sidebar": "menu",
533
+ className: cn(
534
+ "tw:flex",
535
+ "tw:w-full",
536
+ "tw:min-w-0",
537
+ "tw:flex-col",
538
+ "tw:gap-1",
539
+ // transition
540
+ "tw:transition-[margin,opacity]",
541
+ "tw:duration-200",
542
+ "tw:ease-linear",
543
+ // TODO: remove when boostrap is gone
544
+ "tw:pl-0",
545
+ className
546
+ ),
547
+ ...props
548
+ }
549
+ );
550
+ var SidebarMenuIcon = ({ ref, className, children, ...rest }) => /* @__PURE__ */ jsx(
551
+ "span",
552
+ {
553
+ ...rest,
554
+ ref,
555
+ className: cn(
556
+ "tw:inline-flex",
557
+ "tw:items-center",
558
+ "tw:justify-center",
559
+ "tw:aspect-square",
560
+ "tw:shrink-0",
561
+ "tw:p-0.5",
562
+ "tw:text-sidebar-primary",
563
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
564
+ className
565
+ ),
566
+ children
567
+ }
568
+ );
569
+ var SidebarMenuButton = ({
570
+ ref,
571
+ "aria-selected": selected,
572
+ className,
573
+ children,
574
+ asChild = false,
575
+ icon,
576
+ tooltip,
577
+ ...props
578
+ }) => {
579
+ const Component = asChild ? Root : "button";
580
+ const { state, mode, side } = useSidebarInstance();
581
+ const button = /* @__PURE__ */ jsxs(
582
+ Component,
583
+ {
584
+ ...props,
585
+ ref,
586
+ "data-slot": "sidebar-menu-button",
587
+ ...asChild ? {} : { type: "button" },
588
+ ...selected === void 0 ? {} : { "aria-selected": selected },
589
+ className: cn(
590
+ "tw:peer/sidebar-menu-button",
591
+ "tw:group/sidebar-menu-button",
592
+ // if <SidebarMenuAction /> visible, prevent the text from being under the action button.
593
+ "tw:group-data-[state=expanded]/sidebar:group-has-[[data-slot=sidebar-menu-action][data-hover-only=false]]/sidebar-menu-item:pr-8",
594
+ 'tw:group-data-[state=expanded]/sidebar:[&:has(+[data-slot="sidebar-menu-action"])]:group-hover/sidebar-menu-item:pr-8',
595
+ 'tw:group-data-[state=expanded]/sidebar:[&:has(+[data-slot="sidebar-menu-action"])]:group-focus-within/sidebar-menu-item:pr-8',
596
+ 'tw:group-data-[state=expanded]/sidebar:[&:has(+[data-slot="sidebar-menu-action"][data-hover-only=true][data-state=open])]:pr-8',
597
+ "tw:flex",
598
+ "tw:w-full",
599
+ "tw:gap-2",
600
+ "tw:items-center",
601
+ "tw:z-10",
602
+ "tw:font-normal",
603
+ "tw:text-sidebar-foreground",
604
+ "tw:p-2",
605
+ "tw:whitespace-nowrap",
606
+ "tw:overflow-hidden",
607
+ "tw:rounded-lg",
608
+ "tw:text-start",
609
+ "tw:no-underline",
610
+ "tw:select-none",
611
+ // hover
612
+ "tw:hover:not-disabled:bg-sidebar-accent",
613
+ "tw:hover:text-sidebar-accent-foreground",
614
+ "tw:focus:text-sidebar-accent-foreground",
615
+ // anchor override
616
+ "tw:data-[slot=dropdown-menu-trigger]:data-[state=open]:bg-sidebar-accent",
617
+ // disabled
618
+ "tw:disabled:opacity-50",
619
+ "tw:disabled:cursor-not-allowed",
620
+ // active
621
+ "tw:aria-selected:font-medium",
622
+ "tw:aria-selected:bg-sidebar-accent",
623
+ "tw:aria-selected:cursor-default",
624
+ // active for links https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-current
625
+ "tw:aria-[current=page]:bg-sidebar-accent",
626
+ "tw:aria-[current=page]:font-medium",
627
+ "tw:aria-[current=page]:focus:text-sidebar-accent-foreground",
628
+ // focus-visible
629
+ "tw:focus-visible:outline-hidden",
630
+ "tw:focus-visible:z-10",
631
+ "tw:focus-visible:ring-2",
632
+ "tw:focus-visible:ring-sidebar-ring/50",
633
+ "tw:focus-visible:text-sidebar-foreground",
634
+ // anchor override
635
+ className
636
+ ),
637
+ tabIndex: 0,
638
+ children: [
639
+ icon && /* @__PURE__ */ jsx(SidebarMenuIcon, { children: icon }),
640
+ /* @__PURE__ */ jsx(Slottable, { children })
641
+ ]
642
+ }
643
+ );
644
+ const shouldShowTooltip = state === "collapsed" && mode !== "expand-on-hover" && tooltip;
645
+ if (shouldShowTooltip) {
646
+ const tooltipPlacement = side === "right" ? "left" : "right";
647
+ return /* @__PURE__ */ jsx(Tooltip, { tooltip, placement: tooltipPlacement, triggerAsChild: true, children: button });
648
+ }
649
+ return button;
650
+ };
651
+ var SidebarMenuItem = ({ className, ...props }) => /* @__PURE__ */ jsx("li", { className: cn("tw:group/sidebar-menu-item", "tw:relative", className), ...props });
652
+ var SidebarMenuAction = ({
653
+ ref,
654
+ className,
655
+ asChild = false,
656
+ showOnHover = false,
657
+ children,
658
+ ...props
659
+ }) => {
660
+ const Comp = asChild ? Slot : "button";
661
+ return /* @__PURE__ */ jsx(
662
+ Comp,
663
+ {
664
+ ...props,
665
+ "data-slot": "sidebar-menu-action",
666
+ "data-hover-only": showOnHover,
667
+ ref,
668
+ className: cn(
669
+ "tw:absolute",
670
+ "tw:top-1/2",
671
+ "tw:-translate-y-1/2",
672
+ "tw:right-3",
673
+ "tw:z-10",
674
+ "tw:p-0.5",
675
+ // display
676
+ "tw:flex",
677
+ "tw:items-center",
678
+ "tw:justify-center",
679
+ "tw:aspect-square",
680
+ // hiding
681
+ "tw:data-[hover-only=true]:opacity-0",
682
+ "tw:group-data-[state=collapsed]/sidebar:hidden",
683
+ "tw:group-data-[state=expanded]/sidebar:group-hover/sidebar-menu-item:opacity-100",
684
+ "tw:group-data-[state=expanded]/sidebar:group-focus-within/sidebar-menu-item:opacity-100",
685
+ // keyboard navigation
686
+ "tw:group-data-[state=expanded]/sidebar:data-[hover-only=true]:data-[state=open]:opacity-100",
687
+ // for triggers (dropdown, tooltip, popover)
688
+ "tw:size-4",
689
+ "tw:rounded",
690
+ // icon styling
691
+ "tw:[&_svg]:shrink-0",
692
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-3.5',
693
+ "tw:[&_svg]:text-sidebar-accent-foreground",
694
+ // focus visible
695
+ "tw:focus-visible:outline-hidden",
696
+ "tw:focus-visible:z-10",
697
+ "tw:focus-visible:ring-2",
698
+ "tw:focus-visible:ring-sidebar-ring/50",
699
+ "tw:focus-visible:text-sidebar-foreground",
700
+ className
701
+ ),
702
+ children
703
+ }
704
+ );
705
+ };
706
+ var wrapperClassnames = cn(
707
+ "tw:group/search-input",
708
+ "tw:relative",
709
+ "tw:flex",
710
+ "tw:items-center",
711
+ "tw:min-h-9",
712
+ "tw:rounded-lg",
713
+ "tw:border",
714
+ "tw:transition-all",
715
+ // collapsed state - transparent border/bg, hover like search button
716
+ "tw:group-data-[state=collapsed]/sidebar:cursor-pointer",
717
+ "tw:group-data-[state=collapsed]/sidebar:border-transparent",
718
+ "tw:group-data-[state=collapsed]/sidebar:hover:bg-sidebar-accent",
719
+ // expanded state - visible border/bg, padding for input, text cursor
720
+ "tw:group-data-[state=expanded]/sidebar:cursor-text",
721
+ "tw:group-data-[state=expanded]/sidebar:px-2",
722
+ "tw:group-data-[state=expanded]/sidebar:border-neutral-200",
723
+ // focus styles (only relevant when expanded)
724
+ "tw:focus-within:ring-2",
725
+ "tw:focus-within:ring-sidebar-ring/50",
726
+ "tw:focus-within:text-sidebar-foreground"
727
+ );
728
+ var SidebarSearchInput = ({ ref: forwardedRef, className, ...inputProps }) => {
729
+ const { side } = useSidebarInstance();
730
+ const { setMode } = useSidebar(side);
731
+ const inputRef = useRef(null);
732
+ const handleFocus = () => {
733
+ setMode("expanded");
734
+ };
735
+ return /* @__PURE__ */ jsxs("div", { className: cn(wrapperClassnames, className), children: [
736
+ /* @__PURE__ */ jsx(
737
+ Search,
738
+ {
739
+ className: cn(
740
+ "tw:pointer-events-none",
741
+ "tw:absolute",
742
+ "tw:left-2",
743
+ "tw:size-4",
744
+ "tw:text-sidebar-primary",
745
+ "tw:group-data-[state=expanded]/sidebar:text-neutral-400"
746
+ )
747
+ }
748
+ ),
749
+ /* @__PURE__ */ jsx(
750
+ "input",
751
+ {
752
+ ref: mergeRefs(forwardedRef ?? null, inputRef),
753
+ ...inputProps,
754
+ onFocus: (e) => {
755
+ handleFocus();
756
+ inputProps.onFocus?.(e);
757
+ },
758
+ className: cn(
759
+ "tw:w-full",
760
+ "tw:bg-transparent",
761
+ "tw:text-sm",
762
+ "tw:font-sans",
763
+ "tw:outline-hidden",
764
+ "tw:placeholder:text-neutral-400",
765
+ // collapsed state - visually hidden but still focusable for a11y
766
+ "tw:group-data-[state=collapsed]/sidebar:opacity-0",
767
+ "tw:group-data-[state=collapsed]/sidebar:cursor-pointer",
768
+ // expanded state
769
+ "tw:group-data-[state=expanded]/sidebar:pl-6"
770
+ )
771
+ }
772
+ )
773
+ ] });
774
+ };
775
+ var Title = ({ children }) => /* @__PURE__ */ jsx("div", { className: "tw:flex tw:select-none tw:gap-2 tw:text-sm tw:font-semibold", children });
776
+ var Content = ({ children, className }) => /* @__PURE__ */ jsx(
777
+ "div",
778
+ {
779
+ className: cn(
780
+ "tw:whitespace-pre-line",
781
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:invisible",
782
+ className
783
+ ),
784
+ children
785
+ }
786
+ );
787
+ var SidebarMenuCard = ({ children, className, icon, title, ...rest }) => {
788
+ const [isOpen, setIsOpen] = useState(false);
789
+ const { side = "left" } = useSidebarInstance();
790
+ const { state, isFill } = useSidebar(side);
791
+ const isExpanded = state === "expanded" || isFill;
792
+ const handleOnOpenChange = useCallback(
793
+ (open) => {
794
+ setIsOpen(isExpanded || document.hidden ? false : open);
795
+ },
796
+ [isExpanded]
797
+ );
798
+ return /* @__PURE__ */ jsxs(HoverCard, { open: isOpen, onOpenChange: handleOnOpenChange, children: [
799
+ /* @__PURE__ */ jsx(HoverCard.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
800
+ "div",
801
+ {
802
+ ...rest,
803
+ "data-slot": "sidebar-menu-card",
804
+ tabIndex: isExpanded ? -1 : 0,
805
+ className: cn(
806
+ "tw:group/sidebar-menu-card",
807
+ "tw:peer/sidebar-menu-card",
808
+ "tw:overflow-hidden",
809
+ "tw:border",
810
+ "tw:border-sidebar-border",
811
+ "tw:rounded-2xl",
812
+ // layout
813
+ "tw:grid",
814
+ "tw:grid-rows-[1fr]",
815
+ "tw:flex-1",
816
+ "tw:p-4",
817
+ // icon collapsed
818
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:p-2",
819
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:border-transparent",
820
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:grid-rows-[18px]",
821
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:rounded-md",
822
+ // focus-visible
823
+ "tw:outline-hidden",
824
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:hover:bg-sidebar-accent",
825
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:focus-visible:ring-2",
826
+ "tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:focus-visible:ring-sidebar-ring/50",
827
+ // transition
828
+ "tw:transition-[padding,border]",
829
+ "tw:duration-200",
830
+ "tw:ease-linear"
831
+ ),
832
+ children: /* @__PURE__ */ jsxs("div", { className: "tw:flex tw:flex-col tw:gap-2", children: [
833
+ /* @__PURE__ */ jsxs(Title, { children: [
834
+ /* @__PURE__ */ jsx(SidebarMenuIcon, { className: "tw:p-px", children: icon }),
835
+ title
836
+ ] }),
837
+ /* @__PURE__ */ jsx(Content, { className, children })
838
+ ] })
839
+ }
840
+ ) }),
841
+ /* @__PURE__ */ jsxs(
842
+ HoverCard.Content,
843
+ {
844
+ sideOffset: 10,
845
+ align: "center",
846
+ side: side === "left" ? "right" : "left",
847
+ className: "tw:flex tw:flex-col tw:gap-2",
848
+ children: [
849
+ /* @__PURE__ */ jsx(Title, { children: title }),
850
+ /* @__PURE__ */ jsx(Content, { className, children })
851
+ ]
852
+ }
853
+ )
854
+ ] });
855
+ };
856
+ var SidebarMenuBadge = ({ ref, className, ...props }) => {
857
+ return /* @__PURE__ */ jsx(
858
+ "div",
859
+ {
860
+ ref,
861
+ "data-slot": "sidebar-menu-badge",
862
+ "data-sidebar": "menu-badge",
863
+ className: cn(
864
+ // layout
865
+ "tw:flex",
866
+ "tw:items-center",
867
+ "tw:justify-center",
868
+ "tw:z-20",
869
+ "tw:absolute",
870
+ // menu button position
871
+ "tw:peer-[]/sidebar-menu-button:right-2",
872
+ // menu card position
873
+ "tw:peer-[]/sidebar-menu-card:right-4",
874
+ "tw:peer-[]/sidebar-menu-card:top-4",
875
+ // icon collapsed position
876
+ "tw:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:right-0",
877
+ "tw:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:-top-1",
878
+ "tw:text-xs",
879
+ "tw:text-sidebar-primary-foreground",
880
+ "tw:bg-sidebar-primary",
881
+ "tw:px-1",
882
+ "tw:min-w-5",
883
+ "tw:h-5",
884
+ "tw:rounded-full",
885
+ "tw:pointer-events-none",
886
+ "tw:font-medium",
887
+ "tw:tabular-nums",
888
+ "tw:select-none",
889
+ "tw:transition-[top,right]",
890
+ "tw:delay-50",
891
+ "tw:ease-linear",
892
+ className
893
+ ),
894
+ ...props
895
+ }
896
+ );
897
+ };
898
+ var SidebarMenuSub = ({
899
+ children,
900
+ icon,
901
+ isActive = false,
902
+ label,
903
+ // collapsible props
904
+ defaultOpen = false,
905
+ open: openProp,
906
+ onOpenChange
907
+ }) => {
908
+ const { state, side, mode } = useSidebarInstance();
909
+ const [open, setOpen] = useState(null);
910
+ const [innerCollapsibleOpen, setInnerCollapsibleOpen] = useState(defaultOpen);
911
+ const isCollapsibleOpen = (() => {
912
+ if (state === "collapsed") return false;
913
+ return openProp ?? innerCollapsibleOpen;
914
+ })();
915
+ const isDropdownMenu = mode === "expand-on-hover" || mode === "collapsed";
916
+ const handleCollapsibleOpenChange = (open2) => {
917
+ if (openProp === void 0) setInnerCollapsibleOpen(open2);
918
+ onOpenChange?.(open2);
919
+ };
920
+ const handleDropdownOpenChange = (open2) => {
921
+ setOpen(open2 ? "open-dropdown-menu" : null);
922
+ };
923
+ const handleTooltipOpenChange = (open2) => {
924
+ setOpen((currentOpen) => {
925
+ if (currentOpen === "open-dropdown-menu") return "open-dropdown-menu";
926
+ if (state === "expanded") return null;
927
+ return open2 ? "open-tooltip" : null;
928
+ });
929
+ };
930
+ if (isDropdownMenu) {
931
+ return /* @__PURE__ */ jsxs(DropdownMenu, { open: open === "open-dropdown-menu", onOpenChange: handleDropdownOpenChange, children: [
932
+ /* @__PURE__ */ jsxs(Tooltip.Root, { open: open === "open-tooltip", onOpenChange: handleTooltipOpenChange, children: [
933
+ /* @__PURE__ */ jsx(Tooltip.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
934
+ SidebarMenuButton,
935
+ {
936
+ icon,
937
+ "data-active": isActive,
938
+ className: cn(
939
+ "tw:data-[active=true]:bg-sidebar-accent",
940
+ "tw:data-[active=true]:font-medium"
941
+ ),
942
+ children: label
943
+ }
944
+ ) }) }),
945
+ /* @__PURE__ */ jsx(Tooltip.Content, { variant: "action", placement: side, children: label })
946
+ ] }),
947
+ /* @__PURE__ */ jsxs(DropdownMenu.Content, { side, align: "start", children: [
948
+ /* @__PURE__ */ jsx(DropdownMenu.Label, { children: label }),
949
+ children
950
+ ] })
951
+ ] });
952
+ }
953
+ return /* @__PURE__ */ jsxs(Collapsible, { open: isCollapsibleOpen, onOpenChange: handleCollapsibleOpenChange, children: [
954
+ /* @__PURE__ */ jsx(Collapsible.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
955
+ SidebarMenuButton,
956
+ {
957
+ icon,
958
+ "data-active": isActive && !isCollapsibleOpen,
959
+ className: cn(
960
+ "tw:group",
961
+ "tw:data-[active=true]:bg-sidebar-accent",
962
+ "tw:data-[active=true]:font-medium"
963
+ ),
964
+ children: [
965
+ label,
966
+ /* @__PURE__ */ jsx(ChevronDown, { className: "tw:ml-auto tw:size-5 tw:transition-transform tw:duration-200 tw:group-data-[state=open]:rotate-180" })
967
+ ]
968
+ }
969
+ ) }),
970
+ /* @__PURE__ */ jsx(Collapsible.Content, { children: /* @__PURE__ */ jsx(
971
+ "ul",
972
+ {
973
+ "data-sidebar": "menu-sub",
974
+ className: cn(
975
+ "tw:ml-3.5",
976
+ "tw:flex",
977
+ "tw:min-w-0",
978
+ "tw:translate-x-px",
979
+ "tw:flex-col",
980
+ "tw:gap-1",
981
+ "tw:border-l",
982
+ "tw:border-sidebar-border",
983
+ "tw:py-0.5",
984
+ "tw:pl-2.5",
985
+ "tw:pr-0",
986
+ // TODO: remove when bootstrap is gone
987
+ "tw:list-none"
988
+ ),
989
+ children
990
+ }
991
+ ) })
992
+ ] });
993
+ };
994
+ var SidebarMenuSubItem = ({
995
+ ref,
996
+ className,
997
+ asChild = false,
998
+ children,
999
+ disabled,
1000
+ "aria-current": ariaCurrent,
1001
+ ...props
1002
+ }) => {
1003
+ const { mode } = useSidebarInstance();
1004
+ const isDropdownMenu = mode === "collapsed" || mode === "expand-on-hover";
1005
+ if (isDropdownMenu) {
1006
+ return /* @__PURE__ */ jsx(
1007
+ DropdownMenu.Item,
1008
+ {
1009
+ "aria-current": ariaCurrent,
1010
+ asChild,
1011
+ disabled,
1012
+ className: cn(
1013
+ // use sidebar colors for active and focus states
1014
+ "tw:focus:!bg-sidebar-accent",
1015
+ "tw:aria-[current=page]:bg-sidebar-accent",
1016
+ "tw:aria-[current=page]:focus:text-sidebar-accent-foreground",
1017
+ className
1018
+ ),
1019
+ children
1020
+ }
1021
+ );
1022
+ }
1023
+ const Component = asChild ? Root : "button";
1024
+ return /* @__PURE__ */ jsx("li", { className: "tw:group/sidebar-menu-sub-item tw:relative", children: /* @__PURE__ */ jsx(
1025
+ Component,
1026
+ {
1027
+ ...props,
1028
+ ref,
1029
+ "aria-current": ariaCurrent,
1030
+ "data-slot": "sidebar-menu-sub-button",
1031
+ type: "button",
1032
+ disabled,
1033
+ className: cn(
1034
+ // layout
1035
+ "tw:flex",
1036
+ "tw:items-center",
1037
+ "tw:gap-2",
1038
+ // sizing
1039
+ "tw:h-7",
1040
+ "tw:w-full",
1041
+ "tw:min-w-0",
1042
+ "tw:px-2",
1043
+ //font
1044
+ "tw:text-sidebar-foreground",
1045
+ "tw:text-sm",
1046
+ "tw:font-normal",
1047
+ "tw:text-start",
1048
+ "tw:whitespace-nowrap",
1049
+ "tw:overflow-hidden",
1050
+ "tw:rounded-md",
1051
+ "tw:no-underline",
1052
+ "tw:select-none",
1053
+ "tw:outline-hidden",
1054
+ // hover
1055
+ "tw:hover:not-disabled:bg-sidebar-accent",
1056
+ "tw:hover:text-sidebar-accent-foreground",
1057
+ "tw:focus:text-sidebar-accent-foreground",
1058
+ // active
1059
+ "tw:aria-selected:font-medium",
1060
+ "tw:aria-selected:bg-sidebar-accent",
1061
+ "tw:aria-[current=page]:bg-sidebar-accent",
1062
+ "tw:aria-[current=page]:font-medium",
1063
+ // disabled
1064
+ "tw:disabled:opacity-50",
1065
+ "tw:disabled:cursor-not-allowed",
1066
+ // focus-visible
1067
+ "tw:focus-visible:outline-hidden",
1068
+ "tw:focus-visible:ring-2",
1069
+ "tw:focus-visible:ring-sidebar-ring/50",
1070
+ className
1071
+ ),
1072
+ children: /* @__PURE__ */ jsx(Slottable, { children })
1073
+ }
1074
+ ) });
1075
+ };
1076
+ var DEFAULT_MIN_WIDTH = 384;
1077
+ var DEFAULT_MAX_WIDTH = 800;
1078
+ var useResizeSidebar = ({
1079
+ side,
1080
+ minWidth = DEFAULT_MIN_WIDTH,
1081
+ maxWidth = DEFAULT_MAX_WIDTH
1082
+ }) => {
1083
+ const { onWidthChange, baseWidth, isFill, state, isDragging, setIsDragging, setDragWidth } = useSidebar(side);
1084
+ const isResizable = state === "expanded" && !isFill && onWidthChange !== void 0;
1085
+ const startXRef = useRef(0);
1086
+ const startWidthRef = useRef(0);
1087
+ const cleanupRef = useRef(null);
1088
+ useEffect(() => {
1089
+ return () => {
1090
+ cleanupRef.current?.();
1091
+ document.body.style.cursor = "";
1092
+ document.body.style.userSelect = "";
1093
+ };
1094
+ }, []);
1095
+ const clampToRange = useCallback(
1096
+ (width) => {
1097
+ const effectiveMax = Math.max(minWidth, Math.min(maxWidth, window.innerWidth * 0.5));
1098
+ return Math.round(Math.min(effectiveMax, Math.max(minWidth, width)));
1099
+ },
1100
+ [minWidth, maxWidth]
1101
+ );
1102
+ const handleMouseDown = useCallback(
1103
+ (e) => {
1104
+ if (!isResizable || isDragging) return;
1105
+ cleanupRef.current?.();
1106
+ setIsDragging(true);
1107
+ startWidthRef.current = baseWidth ?? SidebarWidthInPx.MIN_DEFAULT;
1108
+ startXRef.current = e.clientX;
1109
+ const handleMouseMove = (moveEvent) => {
1110
+ const delta = side === "right" ? startXRef.current - moveEvent.clientX : moveEvent.clientX - startXRef.current;
1111
+ setDragWidth(clampToRange(startWidthRef.current + delta));
1112
+ };
1113
+ const handleMouseUp = (upEvent) => {
1114
+ const delta = side === "right" ? startXRef.current - upEvent.clientX : upEvent.clientX - startXRef.current;
1115
+ onWidthChange?.(clampToRange(startWidthRef.current + delta));
1116
+ setIsDragging(false);
1117
+ document.removeEventListener("mousemove", handleMouseMove);
1118
+ document.removeEventListener("mouseup", handleMouseUp);
1119
+ document.body.style.cursor = "";
1120
+ document.body.style.userSelect = "";
1121
+ cleanupRef.current = null;
1122
+ };
1123
+ document.body.style.cursor = "col-resize";
1124
+ document.body.style.userSelect = "none";
1125
+ document.addEventListener("mousemove", handleMouseMove);
1126
+ document.addEventListener("mouseup", handleMouseUp);
1127
+ cleanupRef.current = () => {
1128
+ document.removeEventListener("mousemove", handleMouseMove);
1129
+ document.removeEventListener("mouseup", handleMouseUp);
1130
+ setIsDragging(false);
1131
+ setDragWidth(null);
1132
+ };
1133
+ },
1134
+ [
1135
+ isResizable,
1136
+ isDragging,
1137
+ side,
1138
+ onWidthChange,
1139
+ baseWidth,
1140
+ setIsDragging,
1141
+ setDragWidth,
1142
+ clampToRange
1143
+ ]
1144
+ );
1145
+ const handleDoubleClick = useCallback(() => {
1146
+ onWidthChange?.(minWidth);
1147
+ }, [onWidthChange, minWidth]);
1148
+ return {
1149
+ handleProps: {
1150
+ onMouseDown: handleMouseDown,
1151
+ onDoubleClick: handleDoubleClick
1152
+ },
1153
+ isDragging,
1154
+ isResizable
1155
+ };
1156
+ };
1157
+ var SidebarResizeHandle = ({ side, minWidth, maxWidth }) => {
1158
+ const { handleProps, isResizable } = useResizeSidebar({ side, minWidth, maxWidth });
1159
+ if (!isResizable) return null;
1160
+ return /* @__PURE__ */ jsx(
1161
+ "div",
1162
+ {
1163
+ ...handleProps,
1164
+ "aria-hidden": true,
1165
+ className: cn(
1166
+ "tw:absolute tw:inset-y-0 tw:z-10 tw:w-3",
1167
+ side === "right" ? "tw:left-0" : "tw:right-0",
1168
+ "tw:cursor-col-resize"
1169
+ )
1170
+ }
1171
+ );
1172
+ };
1173
+ var SidebarSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(
1174
+ Separator,
1175
+ {
1176
+ ...props,
1177
+ orientation: "horizontal",
1178
+ size: "full",
1179
+ className: cn("tw:before:bg-sidebar-border tw:p-2", className)
1180
+ }
1181
+ );
1182
+ var SidebarTrigger = ({
1183
+ side = "left",
1184
+ onClick,
1185
+ hideWhenCollapsed = false,
1186
+ className,
1187
+ ...rest
1188
+ }) => {
1189
+ const { toggle } = useSidebar(side);
1190
+ const handleOnClick = (event) => {
1191
+ toggle();
1192
+ onClick?.(event);
1193
+ };
1194
+ return /* @__PURE__ */ jsx(
1195
+ Slot,
1196
+ {
1197
+ ...rest,
1198
+ onClick: handleOnClick,
1199
+ className: cn(
1200
+ {
1201
+ "tw:group-data-[state=collapsed]/sidebar:hidden": hideWhenCollapsed
1202
+ },
1203
+ className
1204
+ )
1205
+ }
1206
+ );
1207
+ };
1208
+ var Sidebar = ({
1209
+ children,
1210
+ className,
1211
+ id,
1212
+ side = "left",
1213
+ style,
1214
+ container = false,
1215
+ keepMounted,
1216
+ resizable = false
1217
+ }) => {
1218
+ const oppositeSide = side === "left" ? "right" : "left";
1219
+ const { setSidebarElement, state, mode, isFill, widths, collapsible, variant, isDragging } = useSidebar(side);
1220
+ const { isMounted, completeUnmount } = useTransitionPresence({
1221
+ mounted: collapsible !== "off-canvas" || mode !== "collapsed",
1222
+ keepMounted
1223
+ });
1224
+ const { widths: oppositeWidths } = useSidebar(oppositeSide);
1225
+ const sidebarInstanceContextValue = useMemo(() => ({ state, mode, side }), [state, mode, side]);
1226
+ const handleTransitionEnd = (event) => {
1227
+ if (event.target !== event.currentTarget) return;
1228
+ completeUnmount();
1229
+ };
1230
+ const styles = {
1231
+ "--sidebar-floating-padding": `${SidebarWidthInPx.FLOATING_VARIANT_PADDING}px`,
1232
+ "--sidebar-width": `${widths.sidebar}px`,
1233
+ "--sidebar-width-gap": `${widths.gap}px`,
1234
+ "--opposite-sidebar-width": `${oppositeWidths.fill}px`
1235
+ };
1236
+ if (variant === "none") return null;
1237
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(SidebarInstanceContext, { value: sidebarInstanceContextValue, children: /* @__PURE__ */ jsxs(
1238
+ "div",
1239
+ {
1240
+ id,
1241
+ ref: setSidebarElement,
1242
+ "data-state": state,
1243
+ "data-side": side,
1244
+ "data-mode": mode,
1245
+ "data-collapsible": collapsible,
1246
+ "data-variant": variant,
1247
+ "data-fill": isFill,
1248
+ style: styles,
1249
+ className: cn(
1250
+ "tailwindcss-preflight",
1251
+ "tw:flex",
1252
+ "tw:relative",
1253
+ // expand-on-hover needs a higher z-index so the expanding sidebar
1254
+ // overlaps the opposite filled sidebar instead of sliding behind it
1255
+ mode === "expand-on-hover" ? "tw:z-[51]" : "tw:z-50",
1256
+ {
1257
+ // group/peer scoping is only for page-level sidebars — container
1258
+ // sidebars are nested inside other components and must not leak
1259
+ // group/peer selectors to avoid clashing with the outer sidebar
1260
+ "tw:group/sidebar tw:peer/sidebar": !container
1261
+ },
1262
+ // ── GAP DIV ──
1263
+ "tw:[&>[data-slot=gap]]:w-(--sidebar-width-gap)",
1264
+ "tw:[&[data-side=right]>[data-slot=gap]]:rotate-180",
1265
+ // ── SIDEBAR-WRAPPER DIV ──
1266
+ "tw:[&>[data-slot=sidebar-wrapper]]:w-(--sidebar-width)",
1267
+ "tw:[&[data-side=left]>[data-slot=sidebar-wrapper]]:left-0",
1268
+ "tw:[&[data-side=right]>[data-slot=sidebar-wrapper]]:right-0",
1269
+ // Off-canvas hiding.
1270
+ // - `translate-x-*` sets the standalone `translate` property, not `transform`.
1271
+ // - The wrapper's transition list must therefore name `translate`, or the rail
1272
+ // teleports instead of sliding.
1273
+ "tw:[&[data-state=collapsed][data-collapsible=off-canvas][data-side=left]>[data-slot=sidebar-wrapper]]:-translate-x-full",
1274
+ "tw:[&[data-state=collapsed][data-collapsible=off-canvas][data-side=right]>[data-slot=sidebar-wrapper]]:translate-x-full",
1275
+ // floating variants styles
1276
+ "tw:[&[data-variant=sided-floating]>[data-slot=sidebar-wrapper]]:pt-(--sidebar-floating-padding)",
1277
+ "tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]]:pr-(--sidebar-floating-padding)",
1278
+ "tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]]:pl-(--sidebar-floating-padding)",
1279
+ "tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]]:p-(--sidebar-floating-padding)",
1280
+ // fill state
1281
+ "tw:[&[data-fill=true]>[data-slot=sidebar-wrapper]]:!w-[calc(100svw-var(--opposite-sidebar-width))]",
1282
+ "tw:[&[data-fill=true][data-variant=floating]>[data-slot=sidebar-wrapper]]:!p-(--sidebar-floating-padding)",
1283
+ "tw:[&[data-fill=true][data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:!rounded-tr-xl",
1284
+ "tw:[&[data-fill=true][data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:!rounded-tl-xl",
1285
+ // ── SIDEBAR DIV (INNERMOST) ──
1286
+ "tw:[&[data-variant=inset][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-r",
1287
+ "tw:[&[data-variant=inset][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-l",
1288
+ "tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:shadow",
1289
+ "tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-xl",
1290
+ "tw:[&[data-variant=sided-floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:shadow",
1291
+ "tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-tr-xl",
1292
+ "tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-tl-xl",
1293
+ // The rail's inner edge, mirroring `inset`. The shadow above cannot carry
1294
+ // this alone: a shadow needs a lighter ground to fall on, and on the dark
1295
+ // scheme `--sidebar` is darker than `--background`, so the rail's edge
1296
+ // dissolves into the page beside it.
1297
+ "tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-r",
1298
+ "tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-l",
1299
+ // transitions
1300
+ isDragging ? "tw:transition-none" : "tw:transition-[width,translate,transform] tw:duration-200 tw:ease-linear"
1301
+ ),
1302
+ children: [
1303
+ /* @__PURE__ */ jsx(
1304
+ "div",
1305
+ {
1306
+ "data-slot": "gap",
1307
+ className: cn(
1308
+ "tw:bg-transparent",
1309
+ isDragging ? "" : "tw:transition-[width] tw:duration-200 tw:ease-linear"
1310
+ )
1311
+ }
1312
+ ),
1313
+ /* @__PURE__ */ jsxs(
1314
+ "div",
1315
+ {
1316
+ "data-slot": "sidebar-wrapper",
1317
+ onTransitionEnd: handleTransitionEnd,
1318
+ className: cn(
1319
+ "tw:fixed",
1320
+ "tw:inset-y-0",
1321
+ "tw:border-neutral-100",
1322
+ // transition
1323
+ isDragging ? "tw:transition-none" : "tw:transition-[width,translate,transform] tw:duration-200 tw:ease-linear",
1324
+ className
1325
+ ),
1326
+ style,
1327
+ children: [
1328
+ resizable && /* @__PURE__ */ jsx(SidebarResizeHandle, { side }),
1329
+ /* @__PURE__ */ jsx(
1330
+ "div",
1331
+ {
1332
+ "data-slot": "sidebar",
1333
+ className: cn(
1334
+ "tw:bg-sidebar",
1335
+ "tw:overflow-hidden",
1336
+ "tw:relative",
1337
+ "tw:flex",
1338
+ "tw:flex-col",
1339
+ "tw:size-full",
1340
+ "tw:border-sidebar-border",
1341
+ "tw:group-[]/sidebar:pt-2"
1342
+ ),
1343
+ children: isMounted ? children : null
1344
+ }
1345
+ )
1346
+ ]
1347
+ }
1348
+ )
1349
+ ]
1350
+ }
1351
+ ) }) });
1352
+ };
1353
+ Sidebar.Header = SidebarHeader;
1354
+ Sidebar.Content = SidebarContent;
1355
+ Sidebar.Footer = SidebarFooter;
1356
+ Sidebar.Trigger = SidebarTrigger;
1357
+ Sidebar.FillTrigger = SidebarFillTrigger;
1358
+ Sidebar.Separator = SidebarSeparator;
1359
+ Sidebar.MenuIcon = SidebarMenuIcon;
1360
+ Sidebar.Group = SidebarGroup;
1361
+ Sidebar.GroupLabel = SidebarGroupLabel;
1362
+ Sidebar.GroupContent = SidebarGroupContent;
1363
+ Sidebar.GroupAction = SidebarGroupAction;
1364
+ Sidebar.Menu = SidebarMenu;
1365
+ Sidebar.MenuItem = SidebarMenuItem;
1366
+ Sidebar.MenuButton = SidebarMenuButton;
1367
+ Sidebar.MenuAction = SidebarMenuAction;
1368
+ Sidebar.SearchInput = SidebarSearchInput;
1369
+ Sidebar.MenuCard = SidebarMenuCard;
1370
+ Sidebar.MenuBadge = SidebarMenuBadge;
1371
+ Sidebar.SubMenu = SidebarMenuSub;
1372
+ Sidebar.SubItem = SidebarMenuSubItem;
1373
+
1374
+ export { Sidebar, SidebarProvider, useOptionalSidebar, useSidebar };
1375
+ //# sourceMappingURL=chunk-LCTGEH57.js.map
1376
+ //# sourceMappingURL=chunk-LCTGEH57.js.map