@keboola/design 9.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 (520) hide show
  1. package/AGENTS.md +119 -40
  2. package/COMPONENT-API.md +31 -9
  3. package/README.md +3 -3
  4. package/dist/MermaidDiagram-ZU5KAVRT.js +18 -0
  5. package/dist/MermaidDiagram-ZU5KAVRT.js.map +1 -0
  6. package/dist/charts.d.ts +37 -2
  7. package/dist/charts.js +11 -9
  8. package/dist/charts.js.map +1 -1
  9. package/dist/chunk-2YYJDKSP.js +51 -0
  10. package/dist/chunk-2YYJDKSP.js.map +1 -0
  11. package/dist/chunk-3P5UUCFI.js +385 -0
  12. package/dist/chunk-3P5UUCFI.js.map +1 -0
  13. package/dist/chunk-3QDFDDWZ.js +99 -0
  14. package/dist/chunk-3QDFDDWZ.js.map +1 -0
  15. package/dist/chunk-3W27OLK5.js +15 -0
  16. package/dist/chunk-3W27OLK5.js.map +1 -0
  17. package/dist/chunk-4FIZZONW.js +40 -0
  18. package/dist/chunk-4FIZZONW.js.map +1 -0
  19. package/dist/chunk-4GIAXOJG.js +133 -0
  20. package/dist/chunk-4GIAXOJG.js.map +1 -0
  21. package/dist/chunk-52NDNMK7.js +99 -0
  22. package/dist/chunk-52NDNMK7.js.map +1 -0
  23. package/dist/chunk-576G5OES.js +201 -0
  24. package/dist/chunk-576G5OES.js.map +1 -0
  25. package/dist/chunk-5AIE6SET.js +659 -0
  26. package/dist/chunk-5AIE6SET.js.map +1 -0
  27. package/dist/chunk-5FTNAZRW.js +327 -0
  28. package/dist/chunk-5FTNAZRW.js.map +1 -0
  29. package/dist/chunk-5IG2S7ZY.js +70 -0
  30. package/dist/chunk-5IG2S7ZY.js.map +1 -0
  31. package/dist/chunk-5QCXHNCW.js +404 -0
  32. package/dist/chunk-5QCXHNCW.js.map +1 -0
  33. package/dist/chunk-6DUMGC7Y.js +105 -0
  34. package/dist/chunk-6DUMGC7Y.js.map +1 -0
  35. package/dist/chunk-6J25CVST.js +174 -0
  36. package/dist/chunk-6J25CVST.js.map +1 -0
  37. package/dist/chunk-6NN35XOP.js +120 -0
  38. package/dist/chunk-6NN35XOP.js.map +1 -0
  39. package/dist/chunk-6NZBVA4T.js +24 -0
  40. package/dist/chunk-6NZBVA4T.js.map +1 -0
  41. package/dist/chunk-6W5BHRCL.js +295 -0
  42. package/dist/chunk-6W5BHRCL.js.map +1 -0
  43. package/dist/chunk-72BKRCEG.js +409 -0
  44. package/dist/chunk-72BKRCEG.js.map +1 -0
  45. package/dist/chunk-7GTI3PPI.js +95 -0
  46. package/dist/chunk-7GTI3PPI.js.map +1 -0
  47. package/dist/chunk-7P6PLZ4B.js +74 -0
  48. package/dist/chunk-7P6PLZ4B.js.map +1 -0
  49. package/dist/chunk-7WZWY5IA.js +46 -0
  50. package/dist/chunk-7WZWY5IA.js.map +1 -0
  51. package/dist/chunk-AIYO2632.js +489 -0
  52. package/dist/chunk-AIYO2632.js.map +1 -0
  53. package/dist/chunk-ANFZWPNE.js +112 -0
  54. package/dist/chunk-ANFZWPNE.js.map +1 -0
  55. package/dist/chunk-ANZTVAJU.js +73 -0
  56. package/dist/chunk-ANZTVAJU.js.map +1 -0
  57. package/dist/chunk-BD5BTJKX.js +166 -0
  58. package/dist/chunk-BD5BTJKX.js.map +1 -0
  59. package/dist/chunk-BHGIDSRJ.js +140 -0
  60. package/dist/chunk-BHGIDSRJ.js.map +1 -0
  61. package/dist/chunk-BSQWZITZ.js +507 -0
  62. package/dist/chunk-BSQWZITZ.js.map +1 -0
  63. package/dist/chunk-D3LAIK62.js +23 -0
  64. package/dist/chunk-D3LAIK62.js.map +1 -0
  65. package/dist/chunk-DODCR43C.js +155 -0
  66. package/dist/chunk-DODCR43C.js.map +1 -0
  67. package/dist/chunk-EEK5NGZF.js +40 -0
  68. package/dist/chunk-EEK5NGZF.js.map +1 -0
  69. package/dist/chunk-ENRG7TXA.js +11 -0
  70. package/dist/chunk-ENRG7TXA.js.map +1 -0
  71. package/dist/chunk-EQRMGIGY.js +239 -0
  72. package/dist/chunk-EQRMGIGY.js.map +1 -0
  73. package/dist/chunk-ERAHK5YQ.js +495 -0
  74. package/dist/chunk-ERAHK5YQ.js.map +1 -0
  75. package/dist/chunk-F3FOFY2P.js +124 -0
  76. package/dist/chunk-F3FOFY2P.js.map +1 -0
  77. package/dist/chunk-F6BTWFOC.js +507 -0
  78. package/dist/chunk-F6BTWFOC.js.map +1 -0
  79. package/dist/chunk-F6J6NNAL.js +34 -0
  80. package/dist/chunk-F6J6NNAL.js.map +1 -0
  81. package/dist/chunk-FCHJ7D5O.js +59 -0
  82. package/dist/chunk-FCHJ7D5O.js.map +1 -0
  83. package/dist/chunk-FFJTEQCC.js +80 -0
  84. package/dist/chunk-FFJTEQCC.js.map +1 -0
  85. package/dist/chunk-FUFMVW7O.js +64 -0
  86. package/dist/chunk-FUFMVW7O.js.map +1 -0
  87. package/dist/chunk-FVPGQ6UE.js +25 -0
  88. package/dist/chunk-FVPGQ6UE.js.map +1 -0
  89. package/dist/chunk-G3PMV62Z.js +33 -0
  90. package/dist/chunk-G3PMV62Z.js.map +1 -0
  91. package/dist/chunk-GACFOW3E.js +51 -0
  92. package/dist/chunk-GACFOW3E.js.map +1 -0
  93. package/dist/chunk-GDT6HQMK.js +42 -0
  94. package/dist/chunk-GDT6HQMK.js.map +1 -0
  95. package/dist/chunk-HLGU22C6.js +2589 -0
  96. package/dist/chunk-HLGU22C6.js.map +1 -0
  97. package/dist/chunk-HPMYYGP7.js +134 -0
  98. package/dist/chunk-HPMYYGP7.js.map +1 -0
  99. package/dist/chunk-I2UCOD45.js +197 -0
  100. package/dist/chunk-I2UCOD45.js.map +1 -0
  101. package/dist/chunk-IEGDZUVM.js +75 -0
  102. package/dist/chunk-IEGDZUVM.js.map +1 -0
  103. package/dist/chunk-IIS7INHF.js +47 -0
  104. package/dist/chunk-IIS7INHF.js.map +1 -0
  105. package/dist/chunk-ITELSEFU.js +256 -0
  106. package/dist/chunk-ITELSEFU.js.map +1 -0
  107. package/dist/chunk-IXAYNBOY.js +407 -0
  108. package/dist/chunk-IXAYNBOY.js.map +1 -0
  109. package/dist/chunk-JUW2ETEI.js +191 -0
  110. package/dist/chunk-JUW2ETEI.js.map +1 -0
  111. package/dist/chunk-K65C7CVE.js +127 -0
  112. package/dist/chunk-K65C7CVE.js.map +1 -0
  113. package/dist/chunk-KDI64MCY.js +189 -0
  114. package/dist/chunk-KDI64MCY.js.map +1 -0
  115. package/dist/chunk-KN4ASMH5.js +160 -0
  116. package/dist/chunk-KN4ASMH5.js.map +1 -0
  117. package/dist/chunk-KQW7QNTU.js +1549 -0
  118. package/dist/chunk-KQW7QNTU.js.map +1 -0
  119. package/dist/chunk-KR7NXXHC.js +66 -0
  120. package/dist/chunk-KR7NXXHC.js.map +1 -0
  121. package/dist/chunk-KRZKIVMA.js +142 -0
  122. package/dist/chunk-KRZKIVMA.js.map +1 -0
  123. package/dist/chunk-KTTLLKGQ.js +185 -0
  124. package/dist/chunk-KTTLLKGQ.js.map +1 -0
  125. package/dist/chunk-KWKSHPDP.js +234 -0
  126. package/dist/chunk-KWKSHPDP.js.map +1 -0
  127. package/dist/chunk-KZVC7OYG.js +57 -0
  128. package/dist/chunk-KZVC7OYG.js.map +1 -0
  129. package/dist/chunk-L5DHUN2V.js +204 -0
  130. package/dist/chunk-L5DHUN2V.js.map +1 -0
  131. package/dist/chunk-LCTGEH57.js +1376 -0
  132. package/dist/chunk-LCTGEH57.js.map +1 -0
  133. package/dist/chunk-LXLIQ2D6.js +12 -0
  134. package/dist/chunk-LXLIQ2D6.js.map +1 -0
  135. package/dist/chunk-M4CTURKX.js +84 -0
  136. package/dist/chunk-M4CTURKX.js.map +1 -0
  137. package/dist/chunk-M6LTUPVP.js +301 -0
  138. package/dist/chunk-M6LTUPVP.js.map +1 -0
  139. package/dist/chunk-MA6RRHDT.js +291 -0
  140. package/dist/chunk-MA6RRHDT.js.map +1 -0
  141. package/dist/chunk-MODE4QIA.js +6 -0
  142. package/dist/chunk-MODE4QIA.js.map +1 -0
  143. package/dist/chunk-MVILMVGG.js +118 -0
  144. package/dist/chunk-MVILMVGG.js.map +1 -0
  145. package/dist/chunk-MWS4VCLV.js +17 -0
  146. package/dist/chunk-MWS4VCLV.js.map +1 -0
  147. package/dist/chunk-NEUX74SO.js +315 -0
  148. package/dist/chunk-NEUX74SO.js.map +1 -0
  149. package/dist/chunk-NFHKYBRD.js +156 -0
  150. package/dist/chunk-NFHKYBRD.js.map +1 -0
  151. package/dist/chunk-NHJNNXD3.js +89 -0
  152. package/dist/chunk-NHJNNXD3.js.map +1 -0
  153. package/dist/chunk-O2BF3HZL.js +33 -0
  154. package/dist/chunk-O2BF3HZL.js.map +1 -0
  155. package/dist/chunk-OANXCZYD.js +212 -0
  156. package/dist/chunk-OANXCZYD.js.map +1 -0
  157. package/dist/chunk-ODJF7YIP.js +230 -0
  158. package/dist/chunk-ODJF7YIP.js.map +1 -0
  159. package/dist/chunk-ON4BJTHI.js +101 -0
  160. package/dist/chunk-ON4BJTHI.js.map +1 -0
  161. package/dist/chunk-OTL5WXIJ.js +16 -0
  162. package/dist/chunk-OTL5WXIJ.js.map +1 -0
  163. package/dist/chunk-PACNBKJV.js +47 -0
  164. package/dist/chunk-PACNBKJV.js.map +1 -0
  165. package/dist/chunk-PROCA7K7.js +23 -0
  166. package/dist/chunk-PROCA7K7.js.map +1 -0
  167. package/dist/chunk-QGMIPA67.js +85 -0
  168. package/dist/chunk-QGMIPA67.js.map +1 -0
  169. package/dist/chunk-QQA37LFB.js +190 -0
  170. package/dist/chunk-QQA37LFB.js.map +1 -0
  171. package/dist/chunk-QZAWRSEB.js +61 -0
  172. package/dist/chunk-QZAWRSEB.js.map +1 -0
  173. package/dist/chunk-R74KGWNS.js +699 -0
  174. package/dist/chunk-R74KGWNS.js.map +1 -0
  175. package/dist/chunk-RFDLHMKL.js +110 -0
  176. package/dist/chunk-RFDLHMKL.js.map +1 -0
  177. package/dist/chunk-RL64HN7S.js +40 -0
  178. package/dist/chunk-RL64HN7S.js.map +1 -0
  179. package/dist/chunk-RMRQKPL7.js +115 -0
  180. package/dist/chunk-RMRQKPL7.js.map +1 -0
  181. package/dist/chunk-RQVK4IYC.js +606 -0
  182. package/dist/chunk-RQVK4IYC.js.map +1 -0
  183. package/dist/chunk-RTW56PWZ.js +59 -0
  184. package/dist/chunk-RTW56PWZ.js.map +1 -0
  185. package/dist/chunk-RUTPQNLR.js +266 -0
  186. package/dist/chunk-RUTPQNLR.js.map +1 -0
  187. package/dist/chunk-S6TAF63G.js +25 -0
  188. package/dist/chunk-S6TAF63G.js.map +1 -0
  189. package/dist/chunk-SBGAUGXY.js +224 -0
  190. package/dist/chunk-SBGAUGXY.js.map +1 -0
  191. package/dist/chunk-SC275NHZ.js +407 -0
  192. package/dist/chunk-SC275NHZ.js.map +1 -0
  193. package/dist/chunk-SCQPU4UE.js +97 -0
  194. package/dist/chunk-SCQPU4UE.js.map +1 -0
  195. package/dist/chunk-SFFF2WQP.js +8 -0
  196. package/dist/chunk-SFFF2WQP.js.map +1 -0
  197. package/dist/chunk-SJYMHZKA.js +36 -0
  198. package/dist/chunk-SJYMHZKA.js.map +1 -0
  199. package/dist/chunk-SLCCUJVN.js +125 -0
  200. package/dist/chunk-SLCCUJVN.js.map +1 -0
  201. package/dist/chunk-SVBSNSD4.js +259 -0
  202. package/dist/chunk-SVBSNSD4.js.map +1 -0
  203. package/dist/chunk-SVPLTL35.js +62 -0
  204. package/dist/chunk-SVPLTL35.js.map +1 -0
  205. package/dist/chunk-SWQFYNYG.js +338 -0
  206. package/dist/chunk-SWQFYNYG.js.map +1 -0
  207. package/dist/chunk-THHB4EWS.js +72 -0
  208. package/dist/chunk-THHB4EWS.js.map +1 -0
  209. package/dist/chunk-TUCDD33E.js +246 -0
  210. package/dist/chunk-TUCDD33E.js.map +1 -0
  211. package/dist/chunk-TV4WAP2R.js +14 -0
  212. package/dist/chunk-TV4WAP2R.js.map +1 -0
  213. package/dist/chunk-U3A6YBTZ.js +134 -0
  214. package/dist/chunk-U3A6YBTZ.js.map +1 -0
  215. package/dist/chunk-UGT6DKWM.js +95 -0
  216. package/dist/chunk-UGT6DKWM.js.map +1 -0
  217. package/dist/chunk-VSERHUWD.js +212 -0
  218. package/dist/chunk-VSERHUWD.js.map +1 -0
  219. package/dist/chunk-VYG7BDXC.js +49 -0
  220. package/dist/chunk-VYG7BDXC.js.map +1 -0
  221. package/dist/chunk-WETKNYZX.js +52 -0
  222. package/dist/chunk-WETKNYZX.js.map +1 -0
  223. package/dist/chunk-WGG4AML3.js +216 -0
  224. package/dist/chunk-WGG4AML3.js.map +1 -0
  225. package/dist/chunk-WKAUEL6I.js +30 -0
  226. package/dist/chunk-WKAUEL6I.js.map +1 -0
  227. package/dist/chunk-WPOLA5CG.js +81 -0
  228. package/dist/chunk-WPOLA5CG.js.map +1 -0
  229. package/dist/chunk-WPVETCGJ.js +254 -0
  230. package/dist/chunk-WPVETCGJ.js.map +1 -0
  231. package/dist/chunk-WTSM3A7E.js +13 -0
  232. package/dist/chunk-WTSM3A7E.js.map +1 -0
  233. package/dist/chunk-WU3F2K3T.js +148 -0
  234. package/dist/chunk-WU3F2K3T.js.map +1 -0
  235. package/dist/chunk-WZZK2DTZ.js +39 -0
  236. package/dist/chunk-WZZK2DTZ.js.map +1 -0
  237. package/dist/chunk-X4IHLKRD.js +42 -0
  238. package/dist/chunk-X4IHLKRD.js.map +1 -0
  239. package/dist/chunk-XAHEXZJC.js +80 -0
  240. package/dist/chunk-XAHEXZJC.js.map +1 -0
  241. package/dist/chunk-XCYGJDUX.js +31 -0
  242. package/dist/chunk-XCYGJDUX.js.map +1 -0
  243. package/dist/chunk-Y4W3JORC.js +104 -0
  244. package/dist/chunk-Y4W3JORC.js.map +1 -0
  245. package/dist/chunk-YFZJ3ZLG.js +1297 -0
  246. package/dist/chunk-YFZJ3ZLG.js.map +1 -0
  247. package/dist/chunk-YI3WLXEN.js +4387 -0
  248. package/dist/chunk-YI3WLXEN.js.map +1 -0
  249. package/dist/chunk-ZBKFSPD3.js +29 -0
  250. package/dist/chunk-ZBKFSPD3.js.map +1 -0
  251. package/dist/chunk-ZOERRQ6A.js +79 -0
  252. package/dist/chunk-ZOERRQ6A.js.map +1 -0
  253. package/dist/chunk-ZSTGUKHU.js +10 -0
  254. package/dist/chunk-ZSTGUKHU.js.map +1 -0
  255. package/dist/chunk-ZUEHDL27.js +65 -0
  256. package/dist/chunk-ZUEHDL27.js.map +1 -0
  257. package/dist/editors.d.ts +27 -3
  258. package/dist/editors.js +93 -2081
  259. package/dist/editors.js.map +1 -1
  260. package/dist/icons.d.ts +29 -8
  261. package/dist/icons.js +7 -361
  262. package/dist/icons.js.map +1 -1
  263. package/dist/index.d.ts +715 -441
  264. package/dist/index.js +121 -24643
  265. package/dist/index.js.map +1 -1
  266. package/dist/internal/blocks/AIKit.js +30 -0
  267. package/dist/internal/blocks/AIKit.js.map +1 -0
  268. package/dist/internal/blocks/AppShell.js +11 -0
  269. package/dist/internal/blocks/AppShell.js.map +1 -0
  270. package/dist/internal/blocks/AutoSaveTextarea.js +14 -0
  271. package/dist/internal/blocks/AutoSaveTextarea.js.map +1 -0
  272. package/dist/internal/blocks/BrandEditor.js +23 -0
  273. package/dist/internal/blocks/BrandEditor.js.map +1 -0
  274. package/dist/internal/blocks/ChartPanel.js +10 -0
  275. package/dist/internal/blocks/ChartPanel.js.map +1 -0
  276. package/dist/internal/blocks/ClipboardButton.js +12 -0
  277. package/dist/internal/blocks/ClipboardButton.js.map +1 -0
  278. package/dist/internal/blocks/ColorInput.js +13 -0
  279. package/dist/internal/blocks/ColorInput.js.map +1 -0
  280. package/dist/internal/blocks/ColorModeSwitch.js +13 -0
  281. package/dist/internal/blocks/ColorModeSwitch.js.map +1 -0
  282. package/dist/internal/blocks/Command.js +15 -0
  283. package/dist/internal/blocks/Command.js.map +1 -0
  284. package/dist/internal/blocks/CopyField.js +11 -0
  285. package/dist/internal/blocks/CopyField.js.map +1 -0
  286. package/dist/internal/blocks/DashboardHero.js +9 -0
  287. package/dist/internal/blocks/DashboardHero.js.map +1 -0
  288. package/dist/internal/blocks/DateInput.js +16 -0
  289. package/dist/internal/blocks/DateInput.js.map +1 -0
  290. package/dist/internal/blocks/DateRangeInput.js +16 -0
  291. package/dist/internal/blocks/DateRangeInput.js.map +1 -0
  292. package/dist/internal/blocks/EmptyConfigurationActionCard.js +10 -0
  293. package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -0
  294. package/dist/internal/blocks/EmptyState.js +4 -0
  295. package/dist/internal/blocks/EmptyState.js.map +1 -0
  296. package/dist/internal/blocks/ErrorState.js +5 -0
  297. package/dist/internal/blocks/ErrorState.js.map +1 -0
  298. package/dist/internal/blocks/ExportMenu.js +13 -0
  299. package/dist/internal/blocks/ExportMenu.js.map +1 -0
  300. package/dist/internal/blocks/Form.js +29 -0
  301. package/dist/internal/blocks/Form.js.map +1 -0
  302. package/dist/internal/blocks/FormGroup.js +18 -0
  303. package/dist/internal/blocks/FormGroup.js.map +1 -0
  304. package/dist/internal/blocks/GoogleButton.js +10 -0
  305. package/dist/internal/blocks/GoogleButton.js.map +1 -0
  306. package/dist/internal/blocks/MicrosoftButton.js +10 -0
  307. package/dist/internal/blocks/MicrosoftButton.js.map +1 -0
  308. package/dist/internal/blocks/MultiActionButtonGroup.js +12 -0
  309. package/dist/internal/blocks/MultiActionButtonGroup.js.map +1 -0
  310. package/dist/internal/blocks/MultiCombobox.js +14 -0
  311. package/dist/internal/blocks/MultiCombobox.js.map +1 -0
  312. package/dist/internal/blocks/NumberInput.js +12 -0
  313. package/dist/internal/blocks/NumberInput.js.map +1 -0
  314. package/dist/internal/blocks/OtpInput.js +10 -0
  315. package/dist/internal/blocks/OtpInput.js.map +1 -0
  316. package/dist/internal/blocks/PageHeader.js +9 -0
  317. package/dist/internal/blocks/PageHeader.js.map +1 -0
  318. package/dist/internal/blocks/PageLayout.js +9 -0
  319. package/dist/internal/blocks/PageLayout.js.map +1 -0
  320. package/dist/internal/blocks/PageToolbar.js +13 -0
  321. package/dist/internal/blocks/PageToolbar.js.map +1 -0
  322. package/dist/internal/blocks/PasswordInput.js +13 -0
  323. package/dist/internal/blocks/PasswordInput.js.map +1 -0
  324. package/dist/internal/blocks/SearchInput.js +12 -0
  325. package/dist/internal/blocks/SearchInput.js.map +1 -0
  326. package/dist/internal/blocks/SearchInputWithNavigation.js +16 -0
  327. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -0
  328. package/dist/internal/blocks/SectionNav.js +15 -0
  329. package/dist/internal/blocks/SectionNav.js.map +1 -0
  330. package/dist/internal/blocks/SplitButton.js +14 -0
  331. package/dist/internal/blocks/SplitButton.js.map +1 -0
  332. package/dist/internal/blocks/StatCard.js +10 -0
  333. package/dist/internal/blocks/StatCard.js.map +1 -0
  334. package/dist/internal/blocks/TextInput.js +13 -0
  335. package/dist/internal/blocks/TextInput.js.map +1 -0
  336. package/dist/internal/blocks/Textarea.js +13 -0
  337. package/dist/internal/blocks/Textarea.js.map +1 -0
  338. package/dist/internal/blocks/TimeInput.js +17 -0
  339. package/dist/internal/blocks/TimeInput.js.map +1 -0
  340. package/dist/internal/components/Alert.js +11 -0
  341. package/dist/internal/components/Alert.js.map +1 -0
  342. package/dist/internal/components/AlertModal.js +11 -0
  343. package/dist/internal/components/AlertModal.js.map +1 -0
  344. package/dist/internal/components/Avatar.js +9 -0
  345. package/dist/internal/components/Avatar.js.map +1 -0
  346. package/dist/internal/components/Badge.js +9 -0
  347. package/dist/internal/components/Badge.js.map +1 -0
  348. package/dist/internal/components/BrandLogo.js +11 -0
  349. package/dist/internal/components/BrandLogo.js.map +1 -0
  350. package/dist/internal/components/Breadcrumb.js +14 -0
  351. package/dist/internal/components/Breadcrumb.js.map +1 -0
  352. package/dist/internal/components/Button.js +10 -0
  353. package/dist/internal/components/Button.js.map +1 -0
  354. package/dist/internal/components/ButtonGroup.js +9 -0
  355. package/dist/internal/components/ButtonGroup.js.map +1 -0
  356. package/dist/internal/components/Calendar.js +9 -0
  357. package/dist/internal/components/Calendar.js.map +1 -0
  358. package/dist/internal/components/Card.js +9 -0
  359. package/dist/internal/components/Card.js.map +1 -0
  360. package/dist/internal/components/Checkbox.js +11 -0
  361. package/dist/internal/components/Checkbox.js.map +1 -0
  362. package/dist/internal/components/Clipboard.js +9 -0
  363. package/dist/internal/components/Clipboard.js.map +1 -0
  364. package/dist/internal/components/Collapsible.js +9 -0
  365. package/dist/internal/components/Collapsible.js.map +1 -0
  366. package/dist/internal/components/CollapsiblePanel.js +11 -0
  367. package/dist/internal/components/CollapsiblePanel.js.map +1 -0
  368. package/dist/internal/components/Combobox.js +13 -0
  369. package/dist/internal/components/Combobox.js.map +1 -0
  370. package/dist/internal/components/DatePicker.js +11 -0
  371. package/dist/internal/components/DatePicker.js.map +1 -0
  372. package/dist/internal/components/DateRangePicker.js +17 -0
  373. package/dist/internal/components/DateRangePicker.js.map +1 -0
  374. package/dist/internal/components/DiffView.js +9 -0
  375. package/dist/internal/components/DiffView.js.map +1 -0
  376. package/dist/internal/components/DotsLoader.js +5 -0
  377. package/dist/internal/components/DotsLoader.js.map +1 -0
  378. package/dist/internal/components/DropdownMenu.js +11 -0
  379. package/dist/internal/components/DropdownMenu.js.map +1 -0
  380. package/dist/internal/components/EmptySearchContent.js +4 -0
  381. package/dist/internal/components/EmptySearchContent.js.map +1 -0
  382. package/dist/internal/components/FileUpload.js +11 -0
  383. package/dist/internal/components/FileUpload.js.map +1 -0
  384. package/dist/internal/components/FullScreenModal.js +12 -0
  385. package/dist/internal/components/FullScreenModal.js.map +1 -0
  386. package/dist/internal/components/HelpBlock.js +4 -0
  387. package/dist/internal/components/HelpBlock.js.map +1 -0
  388. package/dist/internal/components/HoverCard.js +9 -0
  389. package/dist/internal/components/HoverCard.js.map +1 -0
  390. package/dist/internal/components/InputGroup.js +11 -0
  391. package/dist/internal/components/InputGroup.js.map +1 -0
  392. package/dist/internal/components/Kbd.js +9 -0
  393. package/dist/internal/components/Kbd.js.map +1 -0
  394. package/dist/internal/components/Label.js +9 -0
  395. package/dist/internal/components/Label.js.map +1 -0
  396. package/dist/internal/components/Link.js +9 -0
  397. package/dist/internal/components/Link.js.map +1 -0
  398. package/dist/internal/components/MarkedText.js +5 -0
  399. package/dist/internal/components/MarkedText.js.map +1 -0
  400. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +10 -0
  401. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -0
  402. package/dist/internal/components/MergeEditor/PaneHeader.js +4 -0
  403. package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -0
  404. package/dist/internal/components/MergeEditor/constants.js +4 -0
  405. package/dist/internal/components/MergeEditor/constants.js.map +1 -0
  406. package/dist/internal/components/MergeEditor/useMergeDiff.js +5 -0
  407. package/dist/internal/components/MergeEditor/useMergeDiff.js.map +1 -0
  408. package/dist/internal/components/Modal.js +13 -0
  409. package/dist/internal/components/Modal.js.map +1 -0
  410. package/dist/internal/components/Navbar.js +14 -0
  411. package/dist/internal/components/Navbar.js.map +1 -0
  412. package/dist/internal/components/Pagination.js +11 -0
  413. package/dist/internal/components/Pagination.js.map +1 -0
  414. package/dist/internal/components/PanelWithDetails.js +11 -0
  415. package/dist/internal/components/PanelWithDetails.js.map +1 -0
  416. package/dist/internal/components/Popconfirm.js +12 -0
  417. package/dist/internal/components/Popconfirm.js.map +1 -0
  418. package/dist/internal/components/Popover.js +9 -0
  419. package/dist/internal/components/Popover.js.map +1 -0
  420. package/dist/internal/components/Progress.js +9 -0
  421. package/dist/internal/components/Progress.js.map +1 -0
  422. package/dist/internal/components/RadioGroup.js +12 -0
  423. package/dist/internal/components/RadioGroup.js.map +1 -0
  424. package/dist/internal/components/Resizable.js +9 -0
  425. package/dist/internal/components/Resizable.js.map +1 -0
  426. package/dist/internal/components/ScrollArea.js +9 -0
  427. package/dist/internal/components/ScrollArea.js.map +1 -0
  428. package/dist/internal/components/Search.js +10 -0
  429. package/dist/internal/components/Search.js.map +1 -0
  430. package/dist/internal/components/Select.js +12 -0
  431. package/dist/internal/components/Select.js.map +1 -0
  432. package/dist/internal/components/Separator.js +9 -0
  433. package/dist/internal/components/Separator.js.map +1 -0
  434. package/dist/internal/components/Sheet.js +12 -0
  435. package/dist/internal/components/Sheet.js.map +1 -0
  436. package/dist/internal/components/Sidebar.js +20 -0
  437. package/dist/internal/components/Sidebar.js.map +1 -0
  438. package/dist/internal/components/Skeleton/Skeleton.js +9 -0
  439. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -0
  440. package/dist/internal/components/Skeleton/SkeletonList.js +10 -0
  441. package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -0
  442. package/dist/internal/components/Slider.js +11 -0
  443. package/dist/internal/components/Slider.js.map +1 -0
  444. package/dist/internal/components/SpotlightBackdrop.js +9 -0
  445. package/dist/internal/components/SpotlightBackdrop.js.map +1 -0
  446. package/dist/internal/components/Stepper.js +10 -0
  447. package/dist/internal/components/Stepper.js.map +1 -0
  448. package/dist/internal/components/Switch.js +10 -0
  449. package/dist/internal/components/Switch.js.map +1 -0
  450. package/dist/internal/components/Table.js +10 -0
  451. package/dist/internal/components/Table.js.map +1 -0
  452. package/dist/internal/components/Tabs.js +12 -0
  453. package/dist/internal/components/Tabs.js.map +1 -0
  454. package/dist/internal/components/ThemeProvider.js +10 -0
  455. package/dist/internal/components/ThemeProvider.js.map +1 -0
  456. package/dist/internal/components/TimePicker.js +12 -0
  457. package/dist/internal/components/TimePicker.js.map +1 -0
  458. package/dist/internal/components/Timeline.js +10 -0
  459. package/dist/internal/components/Timeline.js.map +1 -0
  460. package/dist/internal/components/Toast.js +11 -0
  461. package/dist/internal/components/Toast.js.map +1 -0
  462. package/dist/internal/components/Toggle.js +9 -0
  463. package/dist/internal/components/Toggle.js.map +1 -0
  464. package/dist/internal/components/ToggleGroup.js +9 -0
  465. package/dist/internal/components/ToggleGroup.js.map +1 -0
  466. package/dist/internal/components/Tooltip.js +8 -0
  467. package/dist/internal/components/Tooltip.js.map +1 -0
  468. package/dist/internal/components/Truncated.js +9 -0
  469. package/dist/internal/components/Truncated.js.map +1 -0
  470. package/dist/internal/components/Workbench.js +11 -0
  471. package/dist/internal/components/Workbench.js.map +1 -0
  472. package/dist/internal/components/ZoomableSvg.js +13 -0
  473. package/dist/internal/components/ZoomableSvg.js.map +1 -0
  474. package/dist/internal/hooks/useAutosizeInput.js +4 -0
  475. package/dist/internal/hooks/useAutosizeInput.js.map +1 -0
  476. package/dist/internal/hooks/useScrollbarPosition.js +5 -0
  477. package/dist/internal/hooks/useScrollbarPosition.js.map +1 -0
  478. package/dist/internal/hooks/useStableCallback.js +4 -0
  479. package/dist/internal/hooks/useStableCallback.js.map +1 -0
  480. package/dist/internal/utils/mergeRefs.js +4 -0
  481. package/dist/internal/utils/mergeRefs.js.map +1 -0
  482. package/dist/internal/utils.js +8 -0
  483. package/dist/internal/utils.js.map +1 -0
  484. package/dist/markdown-editor.js +55 -3426
  485. package/dist/markdown-editor.js.map +1 -1
  486. package/dist/mermaid.js +16 -1129
  487. package/dist/mermaid.js.map +1 -1
  488. package/dist/rjsf.js +252 -9380
  489. package/dist/rjsf.js.map +1 -1
  490. package/dist/styles.css +1 -1
  491. package/dist/testing.js +10 -357
  492. package/dist/testing.js.map +1 -1
  493. package/package.json +31 -75
  494. package/src/styles.css +95 -10
  495. package/src/theme.css +65 -0
  496. package/dist/charts.cjs +0 -268
  497. package/dist/charts.cjs.map +0 -1
  498. package/dist/charts.d.cts +0 -181
  499. package/dist/constants-D3gaMY-W.d.cts +0 -39
  500. package/dist/editors.cjs +0 -2440
  501. package/dist/editors.cjs.map +0 -1
  502. package/dist/editors.d.cts +0 -165
  503. package/dist/icons.cjs +0 -23888
  504. package/dist/icons.cjs.map +0 -1
  505. package/dist/icons.d.cts +0 -20
  506. package/dist/index.cjs +0 -24894
  507. package/dist/index.cjs.map +0 -1
  508. package/dist/index.d.cts +0 -10438
  509. package/dist/markdown-editor.cjs +0 -4636
  510. package/dist/markdown-editor.cjs.map +0 -1
  511. package/dist/markdown-editor.d.cts +0 -75
  512. package/dist/mermaid.cjs +0 -1138
  513. package/dist/mermaid.cjs.map +0 -1
  514. package/dist/mermaid.d.cts +0 -15
  515. package/dist/rjsf.cjs +0 -10893
  516. package/dist/rjsf.cjs.map +0 -1
  517. package/dist/rjsf.d.cts +0 -55
  518. package/dist/testing.cjs +0 -373
  519. package/dist/testing.cjs.map +0 -1
  520. package/dist/testing.d.cts +0 -25
@@ -0,0 +1,212 @@
1
+ import { useControllableState } from './chunk-WKAUEL6I.js';
2
+ import { InputGroup } from './chunk-SC275NHZ.js';
3
+ import { X, Pipette } from './chunk-RQVK4IYC.js';
4
+ import { createChangeInputEvent } from './chunk-SWQFYNYG.js';
5
+ import { mergeRefs } from './chunk-3W27OLK5.js';
6
+ import { cn } from './chunk-LXLIQ2D6.js';
7
+ import { useRef } from 'react';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ // src/blocks/ColorInput/utils.ts
11
+ var HEX_CHARSET = /^[0-9a-fA-F]+$/;
12
+ var COMPLETE_HEX_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
13
+ var MAX_HEX_BODY_LENGTH = 8;
14
+ var PICKER_FALLBACK = "#000000";
15
+ var extractHexBody = (value) => {
16
+ if (typeof value !== "string") return null;
17
+ const trimmed = value.trim();
18
+ if (trimmed === "") return null;
19
+ return trimmed.startsWith("#") ? trimmed.slice(1) : trimmed;
20
+ };
21
+ var isCompleteHexColor = (value) => COMPLETE_HEX_PATTERN.test(value);
22
+ var showPicker = (input) => {
23
+ const isShowPickerSupported = "showPicker" in HTMLInputElement.prototype;
24
+ isShowPickerSupported ? input.showPicker() : input.click();
25
+ };
26
+ var coerceHexInputValue = (value) => {
27
+ const body = extractHexBody(value);
28
+ if (body === null) return "";
29
+ const [validBody] = body.match(/^[0-9a-fA-F]+/) ?? [];
30
+ if (!validBody) return "";
31
+ return `#${validBody.slice(0, MAX_HEX_BODY_LENGTH)}`;
32
+ };
33
+ var coerceColorPickerValue = (value) => {
34
+ const body = extractHexBody(value);
35
+ if (body === null || !HEX_CHARSET.test(body)) return PICKER_FALLBACK;
36
+ if (body.length === 3 || body.length === 4) {
37
+ const [r, g, b] = body;
38
+ return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();
39
+ }
40
+ if (body.length === 6 || body.length === 8) {
41
+ return `#${body.slice(0, 6).toLowerCase()}`;
42
+ }
43
+ return PICKER_FALLBACK;
44
+ };
45
+ var ColorPicker = ({ value, disabled, readOnly, ...props }) => {
46
+ const pickerRef = useRef(null);
47
+ const handleOpenPicker = () => {
48
+ if (!pickerRef.current) return;
49
+ showPicker(pickerRef.current);
50
+ };
51
+ return /* @__PURE__ */ jsxs("div", { className: "tw:relative", children: [
52
+ /* @__PURE__ */ jsx(
53
+ "input",
54
+ {
55
+ ...props,
56
+ ref: pickerRef,
57
+ type: "color",
58
+ value: coerceColorPickerValue(value),
59
+ tabIndex: -1,
60
+ "aria-hidden": true,
61
+ className: "tw:pointer-events-none tw:absolute tw:left-0 tw:top-full tw:size-0 tw:opacity-0",
62
+ disabled,
63
+ readOnly
64
+ }
65
+ ),
66
+ /* @__PURE__ */ jsx(
67
+ InputGroup.Button,
68
+ {
69
+ onMouseDown: (event) => event.preventDefault(),
70
+ disabled: disabled || readOnly,
71
+ onClick: handleOpenPicker,
72
+ "aria-label": "Pick color",
73
+ children: /* @__PURE__ */ jsx(Pipette, { className: "tw:size-4" })
74
+ }
75
+ )
76
+ ] });
77
+ };
78
+ var ColorInput = ({
79
+ ref,
80
+ // group props
81
+ state,
82
+ variant,
83
+ focusVariant,
84
+ sizing,
85
+ className,
86
+ // own props
87
+ value: valueProp,
88
+ onValueChange,
89
+ onValueBlur,
90
+ onChange,
91
+ onBlur,
92
+ defaultValue,
93
+ allowClear = false,
94
+ // input props
95
+ disabled,
96
+ readOnly,
97
+ ...restInputProps
98
+ }) => {
99
+ const inputRef = useRef(null);
100
+ const [value, setValue] = useControllableState({
101
+ // A `null` controlled value stays controlled (coerced to ''); `undefined` is uncontrolled.
102
+ prop: valueProp === null ? "" : valueProp,
103
+ defaultProp: defaultValue ?? "",
104
+ onChange: onValueChange
105
+ });
106
+ const isControlled = valueProp !== void 0;
107
+ const canClear = allowClear && !!value && !disabled && !readOnly;
108
+ const swatchColor = coerceHexInputValue(value);
109
+ const isValidSwatch = isCompleteHexColor(swatchColor);
110
+ const handleChange = (event) => {
111
+ setValue(event.target.value);
112
+ onChange?.(event);
113
+ };
114
+ const handleBlur = (event) => {
115
+ const newValue = event.target.value;
116
+ const sanitizedNewValue = coerceHexInputValue(newValue);
117
+ if (sanitizedNewValue !== newValue) {
118
+ if (!isControlled) event.target.value = sanitizedNewValue;
119
+ setValue(sanitizedNewValue);
120
+ }
121
+ onValueBlur?.(sanitizedNewValue);
122
+ onBlur?.(event);
123
+ };
124
+ const handlePickerChange = (event) => {
125
+ setValue(coerceHexInputValue(event.target.value));
126
+ onChange?.(event);
127
+ };
128
+ const handleClear = () => {
129
+ if (!inputRef.current) return;
130
+ inputRef.current.value = "";
131
+ setValue("");
132
+ onChange?.(createChangeInputEvent(inputRef.current));
133
+ };
134
+ return /* @__PURE__ */ jsxs(
135
+ InputGroup,
136
+ {
137
+ state,
138
+ variant,
139
+ sizing,
140
+ focusVariant,
141
+ className,
142
+ children: [
143
+ /* @__PURE__ */ jsx(
144
+ InputGroup.Addon,
145
+ {
146
+ align: "inline-start",
147
+ className: cn(
148
+ { "tw:-ml-7 tw:opacity-0": !value },
149
+ "tw:transition-[opacity,margin]",
150
+ "tw:ease-linear",
151
+ "tw:duration-200"
152
+ ),
153
+ children: /* @__PURE__ */ jsx(
154
+ "div",
155
+ {
156
+ style: isValidSwatch ? { background: swatchColor } : void 0,
157
+ className: cn(
158
+ "tw:size-5",
159
+ "tw:shrink-0",
160
+ "tw:rounded-sm",
161
+ "tw:border",
162
+ "tw:border-solid",
163
+ "tw:border-neutral-300",
164
+ {
165
+ "tw:bg-[linear-gradient(to_top_right,transparent_calc(50%_-_1px),theme(colors.red.300)_calc(50%_-_1px),theme(colors.red.300)_calc(50%_+_1px),transparent_calc(50%_+_1px))]": !isValidSwatch
166
+ }
167
+ )
168
+ }
169
+ )
170
+ }
171
+ ),
172
+ /* @__PURE__ */ jsx(
173
+ InputGroup.Input,
174
+ {
175
+ ...restInputProps,
176
+ type: "text",
177
+ ref: mergeRefs(ref ?? null, inputRef),
178
+ value,
179
+ onChange: handleChange,
180
+ onBlur: handleBlur,
181
+ disabled,
182
+ readOnly
183
+ }
184
+ ),
185
+ /* @__PURE__ */ jsxs(InputGroup.Addon, { align: "inline-end", children: [
186
+ canClear && /* @__PURE__ */ jsx(
187
+ InputGroup.Button,
188
+ {
189
+ onMouseDown: (event) => event.preventDefault(),
190
+ onClick: handleClear,
191
+ "aria-label": "Clear color",
192
+ children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsx(
196
+ ColorPicker,
197
+ {
198
+ disabled,
199
+ readOnly,
200
+ value,
201
+ onChange: handlePickerChange
202
+ }
203
+ )
204
+ ] })
205
+ ]
206
+ }
207
+ );
208
+ };
209
+
210
+ export { ColorInput };
211
+ //# sourceMappingURL=chunk-VSERHUWD.js.map
212
+ //# sourceMappingURL=chunk-VSERHUWD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/blocks/ColorInput/utils.ts","../src/blocks/ColorInput/ColorPicker.tsx","../src/blocks/ColorInput/ColorInput.tsx"],"names":["useRef","jsxs","jsx"],"mappings":"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","file":"chunk-VSERHUWD.js","sourcesContent":["import type { ComponentProps } from 'react';\n\nconst HEX_CHARSET = /^[0-9a-fA-F]+$/;\n// `#` + 3, 4, 6, or 8 hex digits — every length CSS accepts as a hex color.\nconst COMPLETE_HEX_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n// Longest hex body CSS accepts (`#rrggbbaa` without the hash).\nconst MAX_HEX_BODY_LENGTH = 8;\n// Native <input type=\"color\"> default when fed anything unparseable.\nconst PICKER_FALLBACK = '#000000';\n\nconst extractHexBody = (value: unknown): string | null => {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n if (trimmed === '') return null;\n return trimmed.startsWith('#') ? trimmed.slice(1) : trimmed;\n};\n\nexport const isCompleteHexColor = (value: string): boolean => COMPLETE_HEX_PATTERN.test(value);\n\n// @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker\nexport const showPicker = (input: HTMLInputElement) => {\n const isShowPickerSupported = 'showPicker' in HTMLInputElement.prototype;\n isShowPickerSupported ? input.showPicker() : input.click();\n};\n\n/**\n * Coerces free-form text into a partial hex color for the visible text\n * input. Allows up to 8 hex digits to support `#rrggbbaa` (RGBA / alpha).\n *\n * Behaviour:\n * - empty / null / undefined / non-string → `''`\n * - trims surrounding whitespace\n * - prepends `#` when the user types raw hex without it\n * - keeps only the leading run of valid hex digits, dropping the rest\n * - caps total length at `# + 8` hex digits\n * - returns `''` when no valid hex digits remain (e.g. bare `#`, `zz`) so\n * the input doesn't sit on a lonely `#`\n *\n * Note: the result may be a *prefix* (e.g. `#a`, `#ab`) that is not yet a\n * valid CSS color — gate any rendering on `isCompleteHexColor`.\n */\nexport const coerceHexInputValue = (value?: string | null): string => {\n const body = extractHexBody(value);\n if (body === null) return '';\n const [validBody] = body.match(/^[0-9a-fA-F]+/) ?? [];\n if (!validBody) return '';\n return `#${validBody.slice(0, MAX_HEX_BODY_LENGTH)}`;\n};\n\n/**\n * Coerces any value into the strict lowercase `#rrggbb` form required by the\n * native `<input type=\"color\">`. Anything the picker can't render is\n * collapsed to `#000000`.\n *\n * - 3-digit shorthand (`#abc`) → expanded to 6 digits (`#aabbcc`)\n * - 4/8-digit RGBA → alpha channel is dropped\n * - invalid characters, wrong length, or non-string types → `#000000`\n *\n * The native picker silently lowercases its value; we lowercase here too so\n * controlled consumers see the same string round-trip.\n */\nexport const coerceColorPickerValue = (value: ComponentProps<'input'>['value'] | null) => {\n const body = extractHexBody(value);\n if (body === null || !HEX_CHARSET.test(body)) return PICKER_FALLBACK;\n\n if (body.length === 3 || body.length === 4) {\n const [r, g, b] = body;\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\n }\n if (body.length === 6 || body.length === 8) {\n return `#${body.slice(0, 6).toLowerCase()}`;\n }\n return PICKER_FALLBACK;\n};\n","import { type ComponentProps, type ComponentRef, useRef } from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\nimport { Pipette } from '../../icons';\n\nimport { coerceColorPickerValue, showPicker } from './utils';\n\ntype Props = Omit<ComponentProps<'input'>, 'type'>;\n\nexport const ColorPicker = ({ value, disabled, readOnly, ...props }: Props) => {\n const pickerRef = useRef<ComponentRef<'input'>>(null);\n\n const handleOpenPicker = () => {\n if (!pickerRef.current) return;\n showPicker(pickerRef.current);\n };\n\n return (\n <div className=\"tw:relative\">\n <input\n {...props}\n ref={pickerRef}\n type=\"color\"\n value={coerceColorPickerValue(value)}\n tabIndex={-1}\n aria-hidden\n className=\"tw:pointer-events-none tw:absolute tw:left-0 tw:top-full tw:size-0 tw:opacity-0\"\n disabled={disabled}\n readOnly={readOnly}\n />\n <InputGroup.Button\n onMouseDown={(event) => event.preventDefault()}\n disabled={disabled || readOnly}\n onClick={handleOpenPicker}\n aria-label=\"Pick color\"\n >\n <Pipette className=\"tw:size-4\" />\n </InputGroup.Button>\n </div>\n );\n};\n","import { useRef } from 'react';\nimport type {\n ChangeEventHandler,\n ComponentProps,\n ComponentRef,\n FocusEventHandler,\n MouseEventHandler,\n} from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { X } from '../../icons';\nimport { cn, createChangeInputEvent, mergeRefs } from '../../utils';\n\nimport { ColorPicker } from './ColorPicker';\nimport { coerceHexInputValue, isCompleteHexColor } from './utils';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'state' | 'sizing'\n>;\n\ntype InputGroupInputProps = Omit<ComponentProps<typeof InputGroup.Input>, 'value' | 'defaultValue'>;\n\ntype Props = InputGroupProps &\n InputGroupInputProps & {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n allowClear?: boolean;\n };\n\nexport const ColorInput = ({\n ref,\n\n // group props\n state,\n variant,\n focusVariant,\n sizing,\n className,\n\n // own props\n value: valueProp,\n onValueChange,\n onValueBlur,\n onChange,\n onBlur,\n defaultValue,\n allowClear = false,\n\n // input props\n disabled,\n readOnly,\n ...restInputProps\n}: Props) => {\n const inputRef = useRef<ComponentRef<'input'>>(null);\n\n const [value, setValue] = useControllableState<string>({\n // A `null` controlled value stays controlled (coerced to ''); `undefined` is uncontrolled.\n prop: valueProp === null ? '' : valueProp,\n defaultProp: defaultValue ?? '',\n onChange: onValueChange,\n });\n\n const isControlled = valueProp !== undefined;\n\n const canClear = allowClear && !!value && !disabled && !readOnly;\n const swatchColor = coerceHexInputValue(value);\n const isValidSwatch = isCompleteHexColor(swatchColor);\n\n // Preserve raw text while the user is typing — sanitise on blur.\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n setValue(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n const newValue = event.target.value;\n const sanitizedNewValue = coerceHexInputValue(newValue);\n\n if (sanitizedNewValue !== newValue) {\n // In controlled mode, let the parent decide whether to apply the\n // sanitised value via `onValueChange` — don't fight its `value` prop.\n if (!isControlled) event.target.value = sanitizedNewValue;\n setValue(sanitizedNewValue);\n }\n\n onValueBlur?.(sanitizedNewValue);\n onBlur?.(event);\n };\n\n const handlePickerChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n setValue(coerceHexInputValue(event.target.value));\n onChange?.(event);\n };\n\n const handleClear: MouseEventHandler<HTMLButtonElement> = () => {\n if (!inputRef.current) return;\n inputRef.current.value = '';\n setValue('');\n onChange?.(createChangeInputEvent(inputRef.current));\n };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n >\n <InputGroup.Addon\n align=\"inline-start\"\n className={cn(\n { 'tw:-ml-7 tw:opacity-0': !value },\n 'tw:transition-[opacity,margin]',\n 'tw:ease-linear',\n 'tw:duration-200',\n )}\n >\n <div\n style={isValidSwatch ? { background: swatchColor } : undefined}\n className={cn(\n 'tw:size-5',\n 'tw:shrink-0',\n 'tw:rounded-sm',\n 'tw:border',\n 'tw:border-solid',\n 'tw:border-neutral-300',\n {\n 'tw:bg-[linear-gradient(to_top_right,transparent_calc(50%_-_1px),theme(colors.red.300)_calc(50%_-_1px),theme(colors.red.300)_calc(50%_+_1px),transparent_calc(50%_+_1px))]':\n !isValidSwatch,\n },\n )}\n />\n </InputGroup.Addon>\n\n <InputGroup.Input\n {...restInputProps}\n type=\"text\"\n ref={mergeRefs(ref ?? null, inputRef)}\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n readOnly={readOnly}\n />\n\n <InputGroup.Addon align=\"inline-end\">\n {canClear && (\n <InputGroup.Button\n // prevents input focus stealing\n onMouseDown={(event) => event.preventDefault()}\n onClick={handleClear}\n aria-label=\"Clear color\"\n >\n <X className=\"tw:size-4\" />\n </InputGroup.Button>\n )}\n <ColorPicker\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n onChange={handlePickerChange}\n />\n </InputGroup.Addon>\n </InputGroup>\n );\n};\n"]}
@@ -0,0 +1,49 @@
1
+ import { useElement } from './chunk-MWS4VCLV.js';
2
+ import { useState, useEffect } from 'react';
3
+
4
+ var calcPosition = ({
5
+ scrollHeight,
6
+ clientHeight,
7
+ scrollTop
8
+ }) => {
9
+ if (scrollHeight <= clientHeight) return "none";
10
+ if (scrollTop === 0) return "top";
11
+ if (scrollTop + clientHeight >= scrollHeight - 1) return "bottom";
12
+ return "middle";
13
+ };
14
+ var useScrollbarPosition = () => {
15
+ const [element, setElement] = useElement();
16
+ const [scrollbarPosition, setPosition] = useState("none");
17
+ useEffect(() => {
18
+ if (element === null) return;
19
+ const updatePosition = () => {
20
+ if (element === null) return;
21
+ const position = calcPosition({
22
+ scrollHeight: element.scrollHeight,
23
+ clientHeight: element.clientHeight,
24
+ scrollTop: element.scrollTop
25
+ });
26
+ setPosition(position);
27
+ };
28
+ const rafId = requestAnimationFrame(updatePosition);
29
+ element.addEventListener("scroll", updatePosition);
30
+ const resizeObserver = new ResizeObserver(updatePosition);
31
+ resizeObserver.observe(element);
32
+ return () => {
33
+ cancelAnimationFrame(rafId);
34
+ element.removeEventListener("scroll", updatePosition);
35
+ resizeObserver.disconnect();
36
+ };
37
+ }, [element]);
38
+ return {
39
+ setElement,
40
+ isTop: scrollbarPosition === "top",
41
+ isBottom: scrollbarPosition === "bottom",
42
+ isMiddle: scrollbarPosition === "middle",
43
+ isNone: scrollbarPosition === "none"
44
+ };
45
+ };
46
+
47
+ export { useScrollbarPosition };
48
+ //# sourceMappingURL=chunk-VYG7BDXC.js.map
49
+ //# sourceMappingURL=chunk-VYG7BDXC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useScrollbarPosition.ts"],"names":[],"mappings":";;;AAIA,IAAM,eAAe,CAAC;AAAA,EACpB,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAIM;AAEJ,EAAA,IAAI,YAAA,IAAgB,cAAc,OAAO,MAAA;AAEzC,EAAA,IAAI,SAAA,KAAc,GAAG,OAAO,KAAA;AAG5B,EAAA,IAAI,SAAA,GAAY,YAAA,IAAgB,YAAA,GAAe,CAAA,EAAG,OAAO,QAAA;AAEzD,EAAA,OAAO,QAAA;AACT,CAAA;AAEO,IAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,UAAA,EAAW;AACzC,EAAA,MAAM,CAAC,iBAAA,EAAmB,WAAW,CAAA,GAAI,SAA0C,MAAM,CAAA;AAEzF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAY,IAAA,EAAM;AAEtB,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAA,IAAI,YAAY,IAAA,EAAM;AAEtB,MAAA,MAAM,WAAW,YAAA,CAAa;AAAA,QAC5B,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,WAAW,OAAA,CAAQ;AAAA,OACpB,CAAA;AAED,MAAA,WAAA,CAAY,QAAQ,CAAA;AAAA,IACtB,CAAA;AAGA,IAAA,MAAM,KAAA,GAAQ,sBAAsB,cAAc,CAAA;AAGlD,IAAA,OAAA,CAAQ,gBAAA,CAAiB,UAAU,cAAc,CAAA;AAGjD,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,cAAc,CAAA;AACxD,IAAA,cAAA,CAAe,QAAQ,OAAO,CAAA;AAE9B,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,MAAA,OAAA,CAAQ,mBAAA,CAAoB,UAAU,cAAc,CAAA;AACpD,MAAA,cAAA,CAAe,UAAA,EAAW;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,OAAO,iBAAA,KAAsB,KAAA;AAAA,IAC7B,UAAU,iBAAA,KAAsB,QAAA;AAAA,IAChC,UAAU,iBAAA,KAAsB,QAAA;AAAA,IAChC,QAAQ,iBAAA,KAAsB;AAAA,GAChC;AACF","file":"chunk-VYG7BDXC.js","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { useElement } from './useElement';\n\nconst calcPosition = ({\n scrollHeight,\n clientHeight,\n scrollTop,\n}: {\n scrollHeight: number;\n clientHeight: number;\n scrollTop: number;\n}) => {\n // If content doesn't overflow, no scrollbar\n if (scrollHeight <= clientHeight) return 'none';\n\n if (scrollTop === 0) return 'top';\n\n // At the bottom (with small tolerance for precision issues)\n if (scrollTop + clientHeight >= scrollHeight - 1) return 'bottom';\n\n return 'middle';\n};\n\nexport const useScrollbarPosition = () => {\n const [element, setElement] = useElement();\n const [scrollbarPosition, setPosition] = useState<ReturnType<typeof calcPosition>>('none');\n\n useEffect(() => {\n if (element === null) return;\n\n const updatePosition = () => {\n if (element === null) return;\n\n const position = calcPosition({\n scrollHeight: element.scrollHeight,\n clientHeight: element.clientHeight,\n scrollTop: element.scrollTop,\n });\n\n setPosition(position);\n };\n\n // Initial check.\n const rafId = requestAnimationFrame(updatePosition);\n\n // Listening for scroll events.\n element.addEventListener('scroll', updatePosition);\n\n // Listen for the resize event that might affect scrollbar visibility.\n const resizeObserver = new ResizeObserver(updatePosition);\n resizeObserver.observe(element);\n\n return () => {\n cancelAnimationFrame(rafId);\n element.removeEventListener('scroll', updatePosition);\n resizeObserver.disconnect();\n };\n }, [element]);\n\n return {\n setElement,\n isTop: scrollbarPosition === 'top',\n isBottom: scrollbarPosition === 'bottom',\n isMiddle: scrollbarPosition === 'middle',\n isNone: scrollbarPosition === 'none',\n };\n};\n"]}
@@ -0,0 +1,52 @@
1
+ import { keboolaLegacySidebar, keboolaLegacyTopnav } from '@keboola/brand-registry';
2
+ import { createContext, use } from 'react';
3
+
4
+ // src/components/ThemeProvider/defaults.ts
5
+
6
+ // src/components/ThemeProvider/utils.ts
7
+ var createTheme = (brand) => ({
8
+ id: brand.id,
9
+ name: brand.name,
10
+ shell: brand.shell,
11
+ logo: brand.logo
12
+ });
13
+ var createCssVars = () => {
14
+ const vars = {};
15
+ return {
16
+ set: (name, value) => {
17
+ if (value !== void 0) vars[name] = value;
18
+ },
19
+ expose: () => ({ ...vars })
20
+ };
21
+ };
22
+
23
+ // src/components/ThemeProvider/defaults.ts
24
+ var keboolaLegacyIds = [keboolaLegacySidebar.id, keboolaLegacyTopnav.id];
25
+ var DEFAULT_COLOR_SCHEME = "light";
26
+ var DEFAULT_BRAND_ID = "design-system";
27
+ var defaultBrand = {
28
+ id: DEFAULT_BRAND_ID,
29
+ name: "Design System",
30
+ shell: "sidebar",
31
+ theme: {}
32
+ };
33
+ var defaultTheme = createTheme(defaultBrand);
34
+ var DEFAULT_BRANDS = [];
35
+ var noop = () => void 0;
36
+ var defaultContext = {
37
+ scheme: DEFAULT_COLOR_SCHEME,
38
+ resolvedScheme: DEFAULT_COLOR_SCHEME,
39
+ setScheme: noop,
40
+ brandId: defaultTheme.id,
41
+ setBrand: noop,
42
+ themes: [defaultTheme],
43
+ currentTheme: defaultTheme
44
+ };
45
+ var ThemeContext = createContext(defaultContext);
46
+ var useTheme = () => use(ThemeContext);
47
+ var ArgoDesignContext = createContext(true);
48
+ var useArgoDesign = () => use(ArgoDesignContext);
49
+
50
+ export { ArgoDesignContext, DEFAULT_BRANDS, DEFAULT_BRAND_ID, DEFAULT_COLOR_SCHEME, ThemeContext, createCssVars, createTheme, defaultBrand, keboolaLegacyIds, useArgoDesign, useTheme };
51
+ //# sourceMappingURL=chunk-WETKNYZX.js.map
52
+ //# sourceMappingURL=chunk-WETKNYZX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ThemeProvider/utils.ts","../src/components/ThemeProvider/defaults.ts","../src/components/ThemeProvider/context.tsx"],"names":[],"mappings":";;;;;;AAIO,IAAM,WAAA,GAAc,CAAC,KAAA,MAAyB;AAAA,EACnD,IAAI,KAAA,CAAM,EAAA;AAAA,EACV,MAAM,KAAA,CAAM,IAAA;AAAA,EACZ,OAAO,KAAA,CAAM,KAAA;AAAA,EACb,MAAM,KAAA,CAAM;AACd,CAAA;AAOO,IAAM,gBAAgB,MAAe;AAC1C,EAAA,MAAM,OAA+B,EAAC;AACtC,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,CAAC,IAAA,EAAM,KAAA,KAAU;AACpB,MAAA,IAAI,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,IAAI,CAAA,GAAI,KAAA;AAAA,IACxC,CAAA;AAAA,IACA,MAAA,EAAQ,OAAO,EAAE,GAAG,IAAA,EAAK;AAAA,GAC3B;AACF;;;AClBO,IAAM,gBAAA,GAAmB,CAAC,oBAAA,CAAqB,EAAA,EAAI,oBAAoB,EAAE;AACzE,IAAM,oBAAA,GAA4C;AAKlD,IAAM,gBAAA,GAAmB;AAIzB,IAAM,YAAA,GAAsB;AAAA,EACjC,EAAA,EAAI,gBAAA;AAAA,EACJ,IAAA,EAAM,eAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EACP,OAAO;AACT;AACO,IAAM,YAAA,GAAe,YAAY,YAAY,CAAA;AAE7C,IAAM,iBAA0B;ACXvC,IAAM,OAAO,MAAM,MAAA;AAEnB,IAAM,cAAA,GAAoC;AAAA,EACxC,MAAA,EAAQ,oBAAA;AAAA,EACR,cAAA,EAAgB,oBAAA;AAAA,EAChB,SAAA,EAAW,IAAA;AAAA,EACX,SAAS,YAAA,CAAa,EAAA;AAAA,EACtB,QAAA,EAAU,IAAA;AAAA,EAEV,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,EACrB,YAAA,EAAc;AAChB,CAAA;AAEO,IAAM,YAAA,GAAe,cAAc,cAAc;AAEjD,IAAM,QAAA,GAAW,MAAM,GAAA,CAAI,YAAY;AAavC,IAAM,iBAAA,GAAoB,cAAuB,IAAI;AAErD,IAAM,aAAA,GAAgB,MAAM,GAAA,CAAI,iBAAiB","file":"chunk-WETKNYZX.js","sourcesContent":["import type { Brand } from '@keboola/brand-registry';\n\nimport type { Theme } from './types';\n\nexport const createTheme = (brand: Brand): Theme => ({\n id: brand.id,\n name: brand.name,\n shell: brand.shell,\n logo: brand.logo,\n});\n\nexport type CssVars = {\n set: (name: string, value: string | undefined) => void;\n expose: () => Record<string, string>;\n};\n\nexport const createCssVars = (): CssVars => {\n const vars: Record<string, string> = {};\n return {\n set: (name, value) => {\n if (value !== undefined) vars[name] = value;\n },\n expose: () => ({ ...vars }),\n };\n};\n","import type { Brand } from '@keboola/brand-registry';\nimport { keboolaLegacySidebar, keboolaLegacyTopnav } from '@keboola/brand-registry';\n\nimport type { ResolvedColorScheme } from './types';\nimport { createTheme } from './utils';\n\nexport const keboolaLegacyIds = [keboolaLegacySidebar.id, keboolaLegacyTopnav.id];\nexport const DEFAULT_COLOR_SCHEME: ResolvedColorScheme = 'light';\n\n// Sentinel active-brand id that maps to no registry brand. It resolves to\n// `defaultBrand` below, whose empty theme injects nothing — so the design-system\n// stylesheet defaults (`:root` / `[data-theme='dark']`) provide every token.\nexport const DEFAULT_BRAND_ID = 'design-system';\n\n// The \"no brand\" fallback: an empty theme → no CSS vars injected → the\n// stylesheet defaults win. Its shell/name still drive AppShell + switcher label.\nexport const defaultBrand: Brand = {\n id: DEFAULT_BRAND_ID,\n name: 'Design System',\n shell: 'sidebar',\n theme: {},\n};\nexport const defaultTheme = createTheme(defaultBrand);\n\nexport const DEFAULT_BRANDS: Brand[] = [];\n","import { createContext, use } from 'react';\n\nimport { DEFAULT_COLOR_SCHEME, defaultTheme } from './defaults';\nimport type { Theme } from './types';\nimport type { useBrandState } from './useBrandState';\nimport type { useColorSchemeState } from './useColorSchemeState';\n\nexport type ThemeContextValue = ReturnType<typeof useColorSchemeState> &\n ReturnType<typeof useBrandState> & {\n themes: Theme[];\n currentTheme: Theme;\n };\n\nconst noop = () => void 0;\n\nconst defaultContext: ThemeContextValue = {\n scheme: DEFAULT_COLOR_SCHEME,\n resolvedScheme: DEFAULT_COLOR_SCHEME,\n setScheme: noop,\n brandId: defaultTheme.id,\n setBrand: noop,\n\n themes: [defaultTheme],\n currentTheme: defaultTheme,\n};\n\nexport const ThemeContext = createContext(defaultContext);\n\nexport const useTheme = () => use(ThemeContext);\n\n/**\n * TEMPORARY — kbc-ui-internal only.\n *\n * Flags whether the subtree renders the argo design language. Defaults to argo\n * (`true`) — the modern default; legacy chrome is the exception. It exists\n * solely to bridge kbc-ui while its chrome is migrated off the legacy design\n * language: kbc-ui provides `false` for legacy brands/surfaces (see its\n * `AppThemeProvider`) and reads it via `useArgoDesign`. `ThemeProvider` does\n * not set it — argo is decoupled from the brand. Once every kbc-ui surface has\n * been migrated, this context and its hook can be deleted.\n */\nexport const ArgoDesignContext = createContext<boolean>(true);\n\nexport const useArgoDesign = () => use(ArgoDesignContext);\n"]}
@@ -0,0 +1,216 @@
1
+ import { useElement } from './chunk-MWS4VCLV.js';
2
+ import { cn } from './chunk-LXLIQ2D6.js';
3
+ import { Root } from '@radix-ui/react-slot';
4
+ import { cva } from 'class-variance-authority';
5
+ import { useState, useEffect } from 'react';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ var CONNECTOR_MARGIN_TOP = 8;
9
+ var useLastLineHeight = () => {
10
+ const [wrapper, setWrapper] = useElement();
11
+ const [connector2, setConnector] = useElement();
12
+ const [height, setHeight] = useState(0);
13
+ useEffect(() => {
14
+ if (wrapper === null) return;
15
+ if (connector2 === null) return;
16
+ const updateHeight = () => {
17
+ const wrapperRect = wrapper.getBoundingClientRect();
18
+ const connectorRect = connector2.getBoundingClientRect();
19
+ const distance = connectorRect.top - wrapperRect.top - CONNECTOR_MARGIN_TOP;
20
+ setHeight(distance);
21
+ };
22
+ const rafId = requestAnimationFrame(updateHeight);
23
+ return () => {
24
+ cancelAnimationFrame(rafId);
25
+ };
26
+ }, [wrapper, connector2]);
27
+ return {
28
+ height,
29
+ setWrapper,
30
+ setConnector
31
+ };
32
+ };
33
+ var connectorWrapper = cva(
34
+ [
35
+ "tw:grow",
36
+ "tw:min-h-8",
37
+ "tw:py-2",
38
+ // layout
39
+ "tw:flex",
40
+ "tw:justify-center",
41
+ // CONNECTOR LINE
42
+ "tw:relative",
43
+ "tw:before:absolute",
44
+ "tw:before:self-start",
45
+ // Centered on x-axis
46
+ "tw:before:left-1/2",
47
+ "tw:before:-translate-x-1/2",
48
+ "tw:before:w-px",
49
+ "tw:before:h-full",
50
+ "tw:before:group-last/timeline-item:h-(--connector-line-height)",
51
+ // Solid line
52
+ "tw:before:group-data-[variant=solid]/timeline:bg-border",
53
+ // Dashed line using gradient
54
+ "tw:before:group-data-[variant=dashed]/timeline:bg-gradient-to-b",
55
+ "tw:before:group-data-[variant=dashed]/timeline:from-border",
56
+ "tw:before:group-data-[variant=dashed]/timeline:from-50%",
57
+ "tw:before:group-data-[variant=dashed]/timeline:to-transparent",
58
+ "tw:before:group-data-[variant=dashed]/timeline:to-50%",
59
+ "tw:before:group-data-[variant=dashed]/timeline:bg-[length:1px_4px]"
60
+ ],
61
+ {
62
+ defaultVariants: {
63
+ align: "start"
64
+ },
65
+ variants: {
66
+ align: {
67
+ start: ["tw:items-start"],
68
+ center: ["tw:items-center"],
69
+ end: ["tw:items-end"],
70
+ baseline: ["tw:items-baseline"]
71
+ }
72
+ }
73
+ }
74
+ );
75
+ var connector = cva(
76
+ [
77
+ // ensure that it is always above the connector line.
78
+ "tw:z-10",
79
+ "tw:relative"
80
+ ],
81
+ {
82
+ defaultVariants: {
83
+ variant: "label"
84
+ },
85
+ variants: {
86
+ variant: {
87
+ none: [],
88
+ label: [
89
+ "tw:bg-muted",
90
+ "tw:text-muted-foreground",
91
+ "tw:rounded",
92
+ "tw:p-1.5",
93
+ "tw:text-nowrap",
94
+ "tw:text-xs"
95
+ ],
96
+ icon: [
97
+ "tw:bg-background",
98
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
99
+ "tw:[&_svg]:text-muted-foreground"
100
+ ],
101
+ line: [
102
+ "tw:min-w-8",
103
+ "tw:overflow-hidden",
104
+ "tw:w-full",
105
+ // height of the curved corner
106
+ "tw:h-1",
107
+ // small offset from top and bottom
108
+ "tw:my-1.5",
109
+ // positioning
110
+ "tw:relative",
111
+ "tw:before:absolute",
112
+ "tw:before:left-1/2",
113
+ "tw:before:bottom-0",
114
+ // sizing
115
+ "tw:before:w-full",
116
+ "tw:before:h-full",
117
+ // l-shape
118
+ "tw:before:border-l",
119
+ "tw:before:border-b",
120
+ "tw:before:border-border",
121
+ "tw:before:rounded-bl",
122
+ // Solid or dashed
123
+ "tw:before:group-data-[variant=dashed]/timeline:border-dashed",
124
+ "tw:before:group-data-[variant=solid]/timeline:!border-solid"
125
+ ]
126
+ }
127
+ }
128
+ }
129
+ );
130
+ var TimelineConnector = ({
131
+ className,
132
+ children,
133
+ asChild,
134
+ variant,
135
+ align,
136
+ offset = 0,
137
+ style,
138
+ ...rest
139
+ }) => {
140
+ const Comp = asChild ? Root : "div";
141
+ const { setConnector, setWrapper, height } = useLastLineHeight();
142
+ return /* @__PURE__ */ jsx(
143
+ "div",
144
+ {
145
+ ref: setWrapper,
146
+ style: {
147
+ "--connector-line-height": `${height}px`
148
+ },
149
+ className: connectorWrapper({
150
+ align
151
+ }),
152
+ children: /* @__PURE__ */ jsx(
153
+ Comp,
154
+ {
155
+ ...rest,
156
+ ref: setConnector,
157
+ style: {
158
+ top: align === "end" ? -offset : offset,
159
+ ...style
160
+ },
161
+ className: connector({ variant, className }),
162
+ children
163
+ }
164
+ )
165
+ }
166
+ );
167
+ };
168
+ var TimelineContent = ({ className, ...rest }) => /* @__PURE__ */ jsx(
169
+ "div",
170
+ {
171
+ ...rest,
172
+ "data-slot": "timeline-content",
173
+ className: cn(
174
+ "tw:flex",
175
+ // spacing in between timeline items
176
+ "tw:py-2",
177
+ className
178
+ )
179
+ }
180
+ );
181
+ var TimelineItem = ({ className, ...rest }) => {
182
+ return /* @__PURE__ */ jsx(
183
+ "li",
184
+ {
185
+ ...rest,
186
+ className: cn("tw:contents", "tw:relative", "tw:group/timeline-item", className)
187
+ }
188
+ );
189
+ };
190
+ var Timeline = ({ className, variant = "dashed", ...rest }) => {
191
+ return /* @__PURE__ */ jsx(
192
+ "ul",
193
+ {
194
+ ...rest,
195
+ "data-variant": variant,
196
+ className: cn(
197
+ "tailwindcss-preflight",
198
+ "tw:overflow-y-hidden",
199
+ // reset default styling
200
+ "tw:p-0",
201
+ "tw:grid",
202
+ "tw:grid-cols-[auto_minmax(0,1fr)]",
203
+ "tw:group/timeline",
204
+ "tw:gap-x-4",
205
+ className
206
+ )
207
+ }
208
+ );
209
+ };
210
+ Timeline.Item = TimelineItem;
211
+ Timeline.Content = TimelineContent;
212
+ Timeline.Connector = TimelineConnector;
213
+
214
+ export { Timeline };
215
+ //# sourceMappingURL=chunk-WGG4AML3.js.map
216
+ //# sourceMappingURL=chunk-WGG4AML3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Timeline/useLastLineHeight.ts","../src/components/Timeline/TimelineConnector.tsx","../src/components/Timeline/TimelineContent.tsx","../src/components/Timeline/TimelineItem.tsx","../src/components/Timeline/Timeline.tsx"],"names":["connector","jsx"],"mappings":"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","file":"chunk-WGG4AML3.js","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { useElement } from '../../hooks/useElement';\n\nconst CONNECTOR_MARGIN_TOP = 8;\n\nexport const useLastLineHeight = () => {\n const [wrapper, setWrapper] = useElement();\n const [connector, setConnector] = useElement();\n const [height, setHeight] = useState(0);\n\n useEffect(() => {\n if (wrapper === null) return;\n if (connector === null) return;\n\n const updateHeight = () => {\n const wrapperRect = wrapper.getBoundingClientRect();\n const connectorRect = connector.getBoundingClientRect();\n const distance = connectorRect.top - wrapperRect.top - CONNECTOR_MARGIN_TOP;\n setHeight(distance);\n };\n\n // Initial check.\n const rafId = requestAnimationFrame(updateHeight);\n\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, [wrapper, connector]);\n\n return {\n height,\n setWrapper,\n setConnector,\n };\n};\n","import type { ComponentProps, CSSProperties } from 'react';\nimport { Root } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nimport { useLastLineHeight } from './useLastLineHeight';\n\nconst connectorWrapper = cva(\n [\n 'tw:grow',\n 'tw:min-h-8',\n 'tw:py-2',\n\n // layout\n 'tw:flex',\n 'tw:justify-center',\n\n // CONNECTOR LINE\n 'tw:relative',\n 'tw:before:absolute',\n 'tw:before:self-start',\n\n // Centered on x-axis\n 'tw:before:left-1/2',\n 'tw:before:-translate-x-1/2',\n 'tw:before:w-px',\n 'tw:before:h-full',\n 'tw:before:group-last/timeline-item:h-(--connector-line-height)',\n\n // Solid line\n 'tw:before:group-data-[variant=solid]/timeline:bg-border',\n\n // Dashed line using gradient\n 'tw:before:group-data-[variant=dashed]/timeline:bg-gradient-to-b',\n 'tw:before:group-data-[variant=dashed]/timeline:from-border',\n 'tw:before:group-data-[variant=dashed]/timeline:from-50%',\n 'tw:before:group-data-[variant=dashed]/timeline:to-transparent',\n 'tw:before:group-data-[variant=dashed]/timeline:to-50%',\n 'tw:before:group-data-[variant=dashed]/timeline:bg-[length:1px_4px]',\n ],\n {\n defaultVariants: {\n align: 'start',\n },\n variants: {\n align: {\n start: ['tw:items-start'],\n center: ['tw:items-center'],\n end: ['tw:items-end'],\n baseline: ['tw:items-baseline'],\n },\n },\n },\n);\n\nconst connector = cva(\n [\n // ensure that it is always above the connector line.\n 'tw:z-10',\n 'tw:relative',\n ],\n {\n defaultVariants: {\n variant: 'label',\n },\n variants: {\n variant: {\n none: [],\n label: [\n 'tw:bg-muted',\n 'tw:text-muted-foreground',\n 'tw:rounded',\n 'tw:p-1.5',\n 'tw:text-nowrap',\n 'tw:text-xs',\n ],\n icon: [\n 'tw:bg-background',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n 'tw:[&_svg]:text-muted-foreground',\n ],\n line: [\n 'tw:min-w-8',\n 'tw:overflow-hidden',\n 'tw:w-full',\n // height of the curved corner\n 'tw:h-1',\n\n // small offset from top and bottom\n 'tw:my-1.5',\n // positioning\n 'tw:relative',\n 'tw:before:absolute',\n 'tw:before:left-1/2',\n 'tw:before:bottom-0',\n\n // sizing\n 'tw:before:w-full',\n 'tw:before:h-full',\n\n // l-shape\n 'tw:before:border-l',\n 'tw:before:border-b',\n 'tw:before:border-border',\n\n 'tw:before:rounded-bl',\n // Solid or dashed\n 'tw:before:group-data-[variant=dashed]/timeline:border-dashed',\n 'tw:before:group-data-[variant=solid]/timeline:!border-solid',\n ],\n },\n },\n },\n);\n\ntype Props = { asChild?: boolean; offset?: number } & ComponentProps<'div'> &\n VariantProps<typeof connectorWrapper> &\n VariantProps<typeof connector>;\n\nexport const TimelineConnector = ({\n className,\n children,\n asChild,\n variant,\n align,\n offset = 0,\n style,\n ...rest\n}: Props) => {\n const Comp = asChild ? Root : 'div';\n const { setConnector, setWrapper, height } = useLastLineHeight();\n\n return (\n <div\n ref={setWrapper}\n style={\n {\n '--connector-line-height': `${height}px`,\n } as CSSProperties\n }\n className={connectorWrapper({\n align,\n })}\n >\n <Comp\n {...rest}\n ref={setConnector}\n style={{\n top: align === 'end' ? -offset : offset,\n ...style,\n }}\n className={connector({ variant, className })}\n >\n {children}\n </Comp>\n </div>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const TimelineContent = ({ className, ...rest }: Props) => (\n <div\n {...rest}\n data-slot=\"timeline-content\"\n className={cn(\n 'tw:flex',\n // spacing in between timeline items\n 'tw:py-2',\n className,\n )}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'li'>;\n\nexport const TimelineItem = ({ className, ...rest }: Props) => {\n return (\n <li\n {...rest}\n className={cn('tw:contents', 'tw:relative', 'tw:group/timeline-item', className)}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { TimelineConnector } from './TimelineConnector';\nimport { TimelineContent } from './TimelineContent';\nimport { TimelineItem } from './TimelineItem';\n\ntype Props = ComponentProps<'ul'> & {\n variant?: 'solid' | 'dashed';\n};\n\nexport const Timeline = ({ className, variant = 'dashed', ...rest }: Props) => {\n return (\n <ul\n {...rest}\n data-variant={variant}\n className={cn(\n 'tailwindcss-preflight',\n 'tw:overflow-y-hidden',\n // reset default styling\n 'tw:p-0',\n 'tw:grid',\n 'tw:grid-cols-[auto_minmax(0,1fr)]',\n 'tw:group/timeline',\n 'tw:gap-x-4',\n className,\n )}\n />\n );\n};\n\nTimeline.Item = TimelineItem;\nTimeline.Content = TimelineContent;\nTimeline.Connector = TimelineConnector;\n"]}
@@ -0,0 +1,30 @@
1
+ import { useState, useRef, useCallback } from 'react';
2
+
3
+ // src/hooks/useControllableState.ts
4
+ var useControllableState = ({
5
+ prop,
6
+ defaultProp,
7
+ onChange
8
+ }) => {
9
+ const [uncontrolled, setUncontrolled] = useState(defaultProp);
10
+ const isControlled = prop !== void 0;
11
+ const value = prop !== void 0 ? prop : uncontrolled;
12
+ const valueRef = useRef(value);
13
+ valueRef.current = value;
14
+ const onChangeRef = useRef(onChange);
15
+ onChangeRef.current = onChange;
16
+ const setValue = useCallback(
17
+ (next) => {
18
+ const nextValue = typeof next === "function" ? next(valueRef.current) : next;
19
+ valueRef.current = nextValue;
20
+ if (!isControlled) setUncontrolled(nextValue);
21
+ onChangeRef.current?.(nextValue);
22
+ },
23
+ [isControlled]
24
+ );
25
+ return [value, setValue];
26
+ };
27
+
28
+ export { useControllableState };
29
+ //# sourceMappingURL=chunk-WKAUEL6I.js.map
30
+ //# sourceMappingURL=chunk-WKAUEL6I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useControllableState.ts"],"names":[],"mappings":";;;AAsBO,IAAM,uBAAuB,CAAI;AAAA,EACtC,IAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAgF;AAC9E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAY,WAAW,CAAA;AAC/D,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAG9B,EAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,MAAA,GAAY,IAAA,GAAO,YAAA;AAI1C,EAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,KAAS;AACR,MAAA,MAAM,YACJ,OAAO,IAAA,KAAS,aAAc,IAAA,CAAwB,QAAA,CAAS,OAAO,CAAA,GAAI,IAAA;AAG5E,MAAA,QAAA,CAAS,OAAA,GAAU,SAAA;AACnB,MAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,SAAS,CAAA;AAC5C,MAAA,WAAA,CAAY,UAAU,SAAS,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB","file":"chunk-WKAUEL6I.js","sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\n\ntype UseControllableStateParams<T> = {\n /** The controlled value. When defined, the hook operates in controlled mode. */\n prop: T | undefined;\n /** The initial value used in uncontrolled mode. */\n defaultProp: T;\n /** Called with the next value whenever `setValue` runs (controlled and uncontrolled). */\n onChange?: (value: T) => void;\n};\n\n/**\n * Controlled/uncontrolled state, à la Radix's `useControllableState`.\n *\n * Returns a `[value, setValue]` tuple where `setValue` accepts a value or an updater\n * function (`SetStateAction<T>`). In controlled mode (`prop !== undefined`) the hook never\n * owns state — `setValue` resolves the next value and calls `onChange`; the parent is\n * responsible for feeding the new `prop` back. In uncontrolled mode the hook owns the value\n * in internal state and still calls `onChange`. `onChange` fires on every `setValue` call\n * (it is not deduped against the previous value).\n */\nexport const useControllableState = <T>({\n prop,\n defaultProp,\n onChange,\n}: UseControllableStateParams<T>): readonly [T, Dispatch<SetStateAction<T>>] => {\n const [uncontrolled, setUncontrolled] = useState<T>(defaultProp);\n const isControlled = prop !== undefined;\n // Inline the `!== undefined` check (rather than reusing `isControlled`) so TypeScript\n // narrows `prop` from `T | undefined` to `T` here.\n const value = prop !== undefined ? prop : uncontrolled;\n\n // Read the latest value/onChange without widening `setValue`'s dependency list,\n // keeping its identity stable across renders.\n const valueRef = useRef(value);\n valueRef.current = value;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const setValue = useCallback<Dispatch<SetStateAction<T>>>(\n (next) => {\n const nextValue =\n typeof next === 'function' ? (next as (prev: T) => T)(valueRef.current) : next;\n // Advance the ref immediately so multiple functional-updater calls in the same tick\n // compose (each resolves against the previous result, not the stale render value).\n valueRef.current = nextValue;\n if (!isControlled) setUncontrolled(nextValue);\n onChangeRef.current?.(nextValue);\n },\n [isControlled],\n );\n\n return [value, setValue] as const;\n};\n"]}