@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
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@keboola/design",
3
- "version": "9.1.0",
3
+ "version": "11.0.0",
4
4
  "description": "Keboola UI platform design system — shadcn-aligned React primitives, Keboola-branded blocks, and the form bindings built on TanStack Form.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "sideEffects": [
8
8
  "**/*.css"
9
9
  ],
10
- "main": "./dist/index.cjs",
11
10
  "module": "./dist/index.js",
12
11
  "types": "./dist/index.d.ts",
13
12
  "typesVersions": {
@@ -37,86 +36,38 @@
37
36
  },
38
37
  "exports": {
39
38
  ".": {
40
- "import": {
41
- "types": "./dist/index.d.ts",
42
- "default": "./dist/index.js"
43
- },
44
- "require": {
45
- "types": "./dist/index.d.cts",
46
- "default": "./dist/index.cjs"
47
- }
39
+ "types": "./dist/index.d.ts",
40
+ "default": "./dist/index.js"
48
41
  },
49
42
  "./styles": "./src/styles.css",
50
43
  "./styles/compiled": "./dist/styles.css",
51
44
  "./charts": {
52
- "import": {
53
- "types": "./dist/charts.d.ts",
54
- "default": "./dist/charts.js"
55
- },
56
- "require": {
57
- "types": "./dist/charts.d.cts",
58
- "default": "./dist/charts.cjs"
59
- }
45
+ "types": "./dist/charts.d.ts",
46
+ "default": "./dist/charts.js"
60
47
  },
61
48
  "./mermaid": {
62
- "import": {
63
- "types": "./dist/mermaid.d.ts",
64
- "default": "./dist/mermaid.js"
65
- },
66
- "require": {
67
- "types": "./dist/mermaid.d.cts",
68
- "default": "./dist/mermaid.cjs"
69
- }
49
+ "types": "./dist/mermaid.d.ts",
50
+ "default": "./dist/mermaid.js"
70
51
  },
71
52
  "./markdown-editor": {
72
- "import": {
73
- "types": "./dist/markdown-editor.d.ts",
74
- "default": "./dist/markdown-editor.js"
75
- },
76
- "require": {
77
- "types": "./dist/markdown-editor.d.cts",
78
- "default": "./dist/markdown-editor.cjs"
79
- }
53
+ "types": "./dist/markdown-editor.d.ts",
54
+ "default": "./dist/markdown-editor.js"
80
55
  },
81
56
  "./editors": {
82
- "import": {
83
- "types": "./dist/editors.d.ts",
84
- "default": "./dist/editors.js"
85
- },
86
- "require": {
87
- "types": "./dist/editors.d.cts",
88
- "default": "./dist/editors.cjs"
89
- }
57
+ "types": "./dist/editors.d.ts",
58
+ "default": "./dist/editors.js"
90
59
  },
91
60
  "./icons": {
92
- "import": {
93
- "types": "./dist/icons.d.ts",
94
- "default": "./dist/icons.js"
95
- },
96
- "require": {
97
- "types": "./dist/icons.d.cts",
98
- "default": "./dist/icons.cjs"
99
- }
61
+ "types": "./dist/icons.d.ts",
62
+ "default": "./dist/icons.js"
100
63
  },
101
64
  "./rjsf": {
102
- "import": {
103
- "types": "./dist/rjsf.d.ts",
104
- "default": "./dist/rjsf.js"
105
- },
106
- "require": {
107
- "types": "./dist/rjsf.d.cts",
108
- "default": "./dist/rjsf.cjs"
109
- }
65
+ "types": "./dist/rjsf.d.ts",
66
+ "default": "./dist/rjsf.js"
110
67
  },
111
68
  "./testing": {
112
- "import": {
113
- "types": "./dist/testing.d.ts",
114
- "default": "./dist/testing.js"
115
- },
116
- "require": {
117
- "types": "./dist/testing.d.cts",
118
- "default": "./dist/testing.cjs"
119
- }
69
+ "types": "./dist/testing.d.ts",
70
+ "default": "./dist/testing.js"
120
71
  },
121
72
  "./theme": "./src/theme.css"
122
73
  },
@@ -156,6 +107,7 @@
156
107
  "@arethetypeswrong/cli": "^0.18.2",
157
108
  "@google/design.md": "0.2.0",
158
109
  "@playwright/test": "1.60.0",
110
+ "@size-limit/esbuild": "12.1.0",
159
111
  "@size-limit/file": "12.1.0",
160
112
  "@storybook/addon-a11y": "10.2.19",
161
113
  "@storybook/addon-docs": "^10.2.19",
@@ -176,6 +128,7 @@
176
128
  "@vitest/browser": "4.1.10",
177
129
  "@vitest/browser-playwright": "4.1.10",
178
130
  "@vitest/coverage-istanbul": "4.1.10",
131
+ "@vitest/coverage-v8": "^4.1.10",
179
132
  "eslint-plugin-storybook": "^10.3.5",
180
133
  "oxfmt": "^0.57.0",
181
134
  "oxlint": "^1.72.0",
@@ -193,8 +146,9 @@
193
146
  "typescript": "npm:@typescript/typescript6@^6.0.2",
194
147
  "vite": "^8.1.5",
195
148
  "vitest": "^4.1.10",
196
- "@keboola/oxlint-config": "^8.1.0",
197
- "@keboola/tsconfig": "^0.2.0"
149
+ "@keboola/vitest-config": "^1.0.0",
150
+ "@keboola/tsconfig": "^0.2.0",
151
+ "@keboola/oxlint-config": "^10.0.1"
198
152
  },
199
153
  "peerDependencies": {
200
154
  "@testing-library/react": "^16.3.2",
@@ -221,6 +175,7 @@
221
175
  "@codemirror/state": "^6.7.1",
222
176
  "@codemirror/view": "^6.43.6",
223
177
  "@iconify-json/lucide": "^1.2.118",
178
+ "@lezer/highlight": "^1.2.3",
224
179
  "@lexical/code": "^0.42.0",
225
180
  "@lexical/link": "^0.42.0",
226
181
  "@lexical/list": "^0.42.0",
@@ -278,18 +233,18 @@
278
233
  "remark-gfm": "^4.0.1",
279
234
  "sonner": "^2.0.7",
280
235
  "tailwind-merge": "^3.6.0",
281
- "@keboola/brand-registry": "^1.7.0",
282
- "@keboola/codemirror-lang-sql": "^0.4.0",
283
- "@keboola/tailwind-config": "^1.0.0"
236
+ "@keboola/codemirror-lang-sql": "^0.7.0",
237
+ "@keboola/tailwind-config": "^1.1.0",
238
+ "@keboola/brand-registry": "^1.9.1"
284
239
  },
285
240
  "scripts": {
286
- "dev": "storybook dev -p 6006",
241
+ "dev": "storybook dev -p \"${PORT:-6006}\"",
287
242
  "build-storybook": "storybook build",
288
243
  "transit": "pnpm build",
289
244
  "build": "pnpm build:js && pnpm build:css",
290
245
  "build:js": "tsup",
291
246
  "build:css": "tailwindcss -i src/styles.css -o dist/styles.css --minify",
292
- "build:check": "attw --pack . --exclude-entrypoints ./styles ./styles/compiled ./theme",
247
+ "build:check": "attw --pack . --profile esm-only --exclude-entrypoints ./styles ./styles/compiled ./theme",
293
248
  "test": "vitest run --config vite.config.ts --passWithNoTests --reporter=dot",
294
249
  "test:stories": "vitest run --config vitest.config.ts",
295
250
  "test:stories:coverage": "vitest run --config vitest.config.ts --coverage",
@@ -302,13 +257,14 @@
302
257
  "lint:format": "oxfmt --check",
303
258
  "lint:oxlint": "oxlint . --quiet",
304
259
  "lint:design": "designmd lint DESIGN.md",
305
- "ci-checks": "pnpm check:api && pnpm check:icons && pnpm size",
260
+ "ci-checks": "pnpm check:api && pnpm check:icons && pnpm check:contrast && pnpm size",
306
261
  "size": "size-limit",
307
262
  "generate:api": "tsx scripts/generate-component-api.ts",
308
263
  "check:api": "tsx scripts/generate-component-api.ts --check",
309
264
  "audit:contrast": "tsx scripts/contrast-audit.ts",
310
265
  "type-check": "tsc",
311
266
  "generate:icons": "tsx scripts/generate-icon-exports.ts",
312
- "check:icons": "tsx scripts/generate-icon-exports.ts && git diff --exit-code -- src/icons/index.ts"
267
+ "check:icons": "tsx scripts/generate-icon-exports.ts && git diff --exit-code -- src/icons/index.ts",
268
+ "check:contrast": "tsx scripts/contrast-audit.ts && git diff --exit-code -- CONTRAST-AUDIT.md"
313
269
  }
314
270
  }
package/src/styles.css CHANGED
@@ -13,10 +13,16 @@
13
13
  @import 'react-day-picker/src/style.css';
14
14
  @import './theme.css';
15
15
 
16
- /* Tokens, the (extended) theme, typography + our custom variants/utilities stay
17
- * in JS, loaded via v4's `@config` bridge — this keeps `colors.ts` and the
18
- * ThemeProvider/brand runtime-swap model unchanged (channel triples consumed as
19
- * `rgb(var(--*) / <alpha>)`). */
16
+ /* Test files name utility classes as data — `customUtilities.test.ts` compiles every custom
17
+ * utility by name, `brandNeutrality.test.ts` spells out colour literals — and v4 scans them like
18
+ * any other source, emitting those candidates into the bundle apps ship. Nothing a test alone
19
+ * mentions belongs in it. */
20
+ @source not '**/*.test.{ts,tsx}';
21
+
22
+ /* The remaining v3 token surface plus typography and scroll-fade stay in JS, loaded
23
+ * via v4's `@config` bridge — this keeps `colors.ts` and the ThemeProvider/brand
24
+ * runtime-swap model unchanged (channel triples consumed as `rgb(var(--*) / <alpha>)`).
25
+ * Anything an app authors belongs in `theme.css` instead: this bridge is design-only. */
20
26
  @config '../tailwind.config.js';
21
27
 
22
28
  /* Scoped, opt-in preflight — the v4 replacement for v3's
@@ -31,7 +37,7 @@
31
37
  /*
32
38
  * Semantic color tokens — read by Tailwind via rgb(var(--*) / <alpha-value>) in
33
39
  * packages/tailwind-config/colors.ts. Channel values are stored as space-separated RGB so
34
- * Tailwind opacity modifiers (e.g. `tw-bg-muted/50`) resolve correctly.
40
+ * Tailwind opacity modifiers (e.g. `tw:bg-muted/50`) resolve correctly.
35
41
  * Primitive scales (neutral-*, primary-*, error-*, warning-*, etc.) remain hardcoded in colors.ts.
36
42
  */
37
43
  :root {
@@ -60,7 +66,10 @@
60
66
 
61
67
  /* Border / Input / Ring */
62
68
  --border: 229 231 235; /* #e5e7eb */
63
- --input: 203 213 225; /* #cbd5e1 */
69
+ --input: 203 213 225; /* #cbd5e1 — the control's border, not its fill */
70
+ /* The fill of a form control. Its own token rather than `card`: a field is not
71
+ a raised container, and a brand tints the two independently. */
72
+ --input-background: 255 255 255; /* #ffffff */
64
73
  --ring: var(--primary); /* follows brand primary (default #2563eb) */
65
74
  --ring-offset: 255 255 255; /* #ffffff — focus-ring offset gap */
66
75
 
@@ -116,6 +125,14 @@
116
125
  with a black shadow so it doesn't read as a light halo on dark surfaces. */
117
126
  --shadow-raised: 0 2px 6px 0 rgb(100 135 153 / 0.13);
118
127
 
128
+ /* Runtime mirrors of the `shadow-card` / `shadow-table` @theme tokens, so a rule
129
+ can read `var(--shadow-card)` and follow the colour scheme. Declared here rather
130
+ than left to @theme: v4 inlines an @theme value into the utility it generates and
131
+ emits no custom property for it, so `var(--shadow-table)` would resolve to nothing
132
+ and drop the shadow entirely. Values match theme.css; the dark block overrides both. */
133
+ --shadow-card: 0px 1px 4px rgb(100 135 153 / 0.15);
134
+ --shadow-table: 0px 6px 6px -4px rgb(100 135 153 / 0.13);
135
+
119
136
  /* Typography pairing — display + mono faces; a brand overrides via
120
137
  `theme.typography.fontDisplay` / `fontMono`. Display defaults to the body
121
138
  face (`--font-sans`), then the canonical Inter stack, so unset brands keep
@@ -200,7 +217,11 @@
200
217
 
201
218
  /* Border / Input / Ring */
202
219
  --border: 52 53 62; /* #34353e */
203
- --input: 60 61 71; /* #3c3d47 */
220
+ --input: 60 61 71; /* #3c3d47 — the control's border, not its fill */
221
+ /* Lighter than `background` (#131317), `card` (#222228) and `popover` (#26262d)
222
+ so a field stays legible as its own surface on all three — a single opaque
223
+ fill has to clear the lightest container it can sit in. */
224
+ --input-background: 47 48 55; /* #2f3037 */
204
225
  --ring: var(--primary); /* follows brand primary (default #1f8fff) */
205
226
  --ring-offset: 19 19 23; /* #131317 — focus-ring offset gap (dark background) */
206
227
 
@@ -243,6 +264,20 @@
243
264
  blue-gray, which reads as a halo around Card / Search on dark surfaces. */
244
265
  --shadow-raised: 0 2px 6px 0 rgb(0 0 0 / 0.4);
245
266
 
267
+ /* Same correction for the two elevation tokens apps author directly — the pale
268
+ blue-gray lights up against a dark surface instead of reading as depth, and under
269
+ a sticky table header it read as a glowing seam. `--shadow-table` is softer than
270
+ `--shadow-raised` because the header casts a full-width band.
271
+
272
+ Reaches rules that read `var(--shadow-table)` / `var(--shadow-card)` directly,
273
+ which is how kbc-ui's Less consumes them. It does NOT reach the `shadow-table` /
274
+ `shadow-card` Tailwind utilities: those are `@theme` tokens (theme.css), so v4
275
+ inlines the light literal into the generated class at build time. Making the
276
+ utilities scheme-aware needs the token to carry a `var(--runtime, fallback)`
277
+ shape, which is a separate change with control-ui / boilerplate to verify against. */
278
+ --shadow-card: 0px 1px 4px rgb(0 0 0 / 0.4);
279
+ --shadow-table: 0px 6px 6px -4px rgb(0 0 0 / 0.3);
280
+
246
281
  /* Table header — lighter than card so the header row reads as raised on dark
247
282
  (light value is the tailwind-config fallback: 219 225 235). */
248
283
  --table-header: 54 55 65;
@@ -285,8 +320,8 @@
285
320
  html {
286
321
  /* Brand font opt-in: a brand's `typography.fontFamily` is injected as
287
322
  `--font-sans` by ThemeProvider and inherited from `html`; absent a brand
288
- the fallback reproduces the canonical `tw-font-sans` stack so default
289
- rendering is unchanged. Elements that set `tw-font-sans` explicitly also
323
+ the fallback reproduces the canonical `tw:font-sans` stack so default
324
+ rendering is unchanged. Elements that set `tw:font-sans` explicitly also
290
325
  follow the brand — the Tailwind `fontFamily.sans` scale reads `--font-sans`
291
326
  with the same `Inter` fallback. */
292
327
  font-family: var(
@@ -368,11 +403,40 @@
368
403
  }
369
404
  }
370
405
 
371
- @layer components {
406
+ /* Legacy (dark) tooltip chrome — invert nested prose for contrast. Must live in
407
+ * `utilities`: `.tw\:prose` declares the same `--tw-prose-*` variables from that
408
+ * layer, and the layer order at the top of this file makes `utilities` win over
409
+ * `components` regardless of specificity. */
410
+ @layer utilities {
372
411
  [data-tooltip-content='true'] .tw\:prose {
373
412
  @apply tw:prose-invert;
413
+
414
+ /* Typography's own `a`/`code` rules are `:where()`-wrapped (specificity 0), so
415
+ * the inverted variables never reach a link rendered by design's `Link`
416
+ * (`tw:text-primary`) nor an inline-code background a host's global CSS paints. */
417
+ a {
418
+ @apply tw:text-blue-300 tw:hover:text-blue-200;
419
+ }
420
+
421
+ /* Inline code only — scoped the way AIKit's markdown prose does it
422
+ * (`tw:[&_:not(pre)>code]:…` in `blocks/AIKit/Markdown.tsx`) so a fenced
423
+ * block's `pre > code` keeps `--tw-prose-invert-pre-bg`. */
424
+ :not(pre) > code {
425
+ @apply tw:bg-white/10 tw:text-neutral-100;
426
+ }
427
+
428
+ /* `.tw\:prose blockquote` (components layer, below) fills with the light
429
+ * `--muted`; on the dark tooltip that would put the now-inverted light text
430
+ * on a light fill. Re-fill with the same `white/10` wash the inline-code
431
+ * chip uses — the file's one translucent-overlay idiom, and the only fill
432
+ * that works against a fixed `bg-neutral-800` without a second token. */
433
+ blockquote {
434
+ @apply tw:bg-white/10;
435
+ }
374
436
  }
437
+ }
375
438
 
439
+ @layer components {
376
440
  .tw\:prose blockquote {
377
441
  border-left: 4px solid rgb(var(--border));
378
442
  background-color: rgb(var(--muted));
@@ -392,3 +456,24 @@
392
456
  pointer-events: auto !important;
393
457
  }
394
458
  }
459
+
460
+ @layer utilities {
461
+ /* Tailwind Typography pins its own palette (`--tw-prose-bold`, `--tw-prose-headings`,
462
+ …) to light-mode values, so those elements stay near-black when the semantic tokens
463
+ flip — bold text in a Markdown answer renders dark-on-dark. `prose` has no awareness
464
+ of `[data-theme]`, so invert it here.
465
+
466
+ In `utilities`, not `components`: `.tw:prose` is itself a utility, and a v4 cascade
467
+ layer beats specificity outright — a more specific rule in `components` still loses
468
+ to the plain utility. Same layer, higher specificity, so this wins. */
469
+ [data-theme='dark'] .tw\:prose {
470
+ @apply tw:prose-invert;
471
+ }
472
+ }
473
+
474
+ @layer utilities {
475
+ [data-header-span='full']
476
+ > [data-app-shell-slot]:has(> [data-collapsible='off-canvas'][data-state='collapsed']) {
477
+ overflow-x: clip;
478
+ }
479
+ }
package/src/theme.css CHANGED
@@ -11,6 +11,20 @@
11
11
  * design AND every v4 app) so those utilities resolve again. Each token keeps the
12
12
  * v3 `var(--runtime-var, fallback)` shape so `ThemeProvider` can still re-skin it. */
13
13
  @theme {
14
+ /* Body face — `font-sans`. Design keeps the v3 `fontFamily.sans` scale through its
15
+ * `@config` bridge, but the apps have no such bridge, so there `font-sans` resolved
16
+ * to v4's stock stack: no `Inter`, no brand hook. Every element that sets the
17
+ * utility explicitly (top-bar nav, inputs, menu descriptions) therefore rendered in
18
+ * a system face while its siblings inherited Inter from `html`. Re-registering the
19
+ * token restores the v3 value: the brand's `--font-sans` (emitted by ThemeProvider)
20
+ * first, then the canonical Inter stack. Safe as a @theme token because the emitted
21
+ * name is prefixed (`--tw-font-sans`) and so cannot cycle with the runtime var it
22
+ * reads — unlike `font-display`, which must stay an @utility. */
23
+ --font-sans:
24
+ var(--font-sans, Inter), system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
25
+ 'Noto Sans', 'Liberation Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
26
+ 'Segoe UI Symbol', 'Noto Color Emoji';
27
+
14
28
  /* Legacy Bootstrap-era breakpoints (screens). */
15
29
  --breakpoint-sm-legacy: 992px;
16
30
  --breakpoint-md-legacy: 1092px;
@@ -32,6 +46,12 @@
32
46
  --shadow-table: 0px 6px 6px -4px rgba(100, 135, 153, 0.13);
33
47
  --radius-card: 10px;
34
48
 
49
+ /* Raised-surface elevation — `shadow-raised`. Dark-aware: `styles.css` flips the runtime
50
+ * `--shadow-raised` to a black shadow under `[data-theme='dark']`. Reading a var of the same
51
+ * name is safe here because the emitted token is prefixed (`--tw-shadow-raised`), so the two
52
+ * cannot cycle — same reasoning as `--font-sans` above. */
53
+ --shadow-raised: var(--shadow-raised, 0 2px 6px 0 rgb(100 135 153 / 0.13));
54
+
35
55
  /* Brand easing — `ease-brand`. The runtime override var (`--motion-easing`) differs from
36
56
  * this @theme token name, so registering it here drops no fallback (unlike bg-brand /
37
57
  * shadow-lift, whose runtime var name collides → they stay @utility below). */
@@ -41,6 +61,12 @@
41
61
  --animate-progress-bar: progress-bar var(--progress-bar-duration, 3s) linear forwards;
42
62
  --animate-spinner-dots: spinner-dots 1s ease-in-out infinite;
43
63
  --animate-marching-ants: marching-ants 1s linear infinite;
64
+
65
+ /* Collapsible disclosure — keyframes below. `tw-animate-css` owns `collapsible-down`/`-up`
66
+ * and every app imports it unlayered, so those two names are unusable here.
67
+ * 300ms `ease` is the motion the retired `Collapse` had. */
68
+ --animate-collapsible-open: collapsible-open 300ms ease;
69
+ --animate-collapsible-close: collapsible-close 300ms ease;
44
70
  }
45
71
 
46
72
  @keyframes progress-bar {
@@ -68,6 +94,29 @@
68
94
  stroke-dashoffset: -12;
69
95
  }
70
96
  }
97
+ /* `overflow` animates discretely — it flips mid-animation, so both endpoints must clip for the
98
+ * content to stay inside the box the whole way. No fill mode, so a settled-open panel is back to
99
+ * its own `overflow: visible` at its own height. */
100
+ @keyframes collapsible-open {
101
+ from {
102
+ height: 0;
103
+ overflow: hidden;
104
+ }
105
+ to {
106
+ height: var(--radix-collapsible-content-height);
107
+ overflow: hidden;
108
+ }
109
+ }
110
+ @keyframes collapsible-close {
111
+ from {
112
+ height: var(--radix-collapsible-content-height);
113
+ overflow: hidden;
114
+ }
115
+ to {
116
+ height: 0;
117
+ overflow: hidden;
118
+ }
119
+ }
71
120
 
72
121
  /* Fallback-chain utilities (kept as @utility, not @theme, so the runtime-var +
73
122
  * fallback chain is preserved exactly as v3 emitted it — a @theme token whose name
@@ -100,6 +149,21 @@
100
149
  sans-serif;
101
150
  }
102
151
 
152
+ /* Interaction-state variant — `not-disabled:hover:…`. Skips BOTH ways a control reports being
153
+ * disabled; v4's core `not-*` compound reads the same name as `:not(:disabled)` alone, so this
154
+ * deliberately shadows it. That shadowing is why the variant has to live here and not in an
155
+ * `addVariant` in design's `@config` plugin: an app's own build has no bridge to that plugin, so
156
+ * it fell through to the core variant and silently dropped the `data-disabled` half — every
157
+ * `tw:not-disabled:*` class kbc-ui authors that design's compiled CSS did not already carry
158
+ * still highlighted a `[data-disabled="true"]` control on hover and focus. */
159
+ @custom-variant not-disabled (&:not([data-disabled="true"]):not(:disabled));
160
+
161
+ /* `overflow-wrap: anywhere` — no v4 core utility covers it (`break-words` is `break-word`,
162
+ * which keeps long unbroken tokens overflowing). Authored in 16 app files. */
163
+ @utility break-anywhere {
164
+ overflow-wrap: anywhere;
165
+ }
166
+
103
167
  @theme inline {
104
168
  --color-inherit: inherit;
105
169
  --color-transparent: rgba(255, 255, 255, 0);
@@ -118,6 +182,7 @@
118
182
  --color-accent-foreground: rgb(var(--accent-foreground));
119
183
  --color-border: rgb(var(--border));
120
184
  --color-input: rgb(var(--input));
185
+ --color-input-background: rgb(var(--input-background));
121
186
  --color-ring: rgb(var(--ring));
122
187
  --color-ring-offset: rgb(var(--ring-offset));
123
188
  --color-chart-1: rgb(var(--chart-1));