@keboola/design 2.0.1 → 3.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 (673) hide show
  1. package/README.md +64 -5
  2. package/dist/icons.cjs +13 -733
  3. package/dist/icons.cjs.map +1 -1
  4. package/dist/icons.d.cts +7 -0
  5. package/dist/icons.d.ts +7 -0
  6. package/dist/icons.js +8 -2
  7. package/dist/icons.js.map +1 -1
  8. package/dist/index.cjs +13605 -12713
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +10462 -0
  11. package/dist/index.d.ts +10462 -0
  12. package/dist/index.js +13437 -12576
  13. package/dist/index.js.map +1 -1
  14. package/dist/markdown-editor.cjs +146 -82
  15. package/dist/markdown-editor.cjs.map +1 -1
  16. package/dist/markdown-editor.d.cts +74 -0
  17. package/dist/markdown-editor.d.ts +74 -0
  18. package/dist/markdown-editor.js +146 -83
  19. package/dist/markdown-editor.js.map +1 -1
  20. package/dist/mermaid.cjs +85 -19
  21. package/dist/mermaid.cjs.map +1 -1
  22. package/dist/mermaid.d.cts +11 -0
  23. package/dist/mermaid.d.ts +11 -0
  24. package/dist/mermaid.js +68 -21
  25. package/dist/mermaid.js.map +1 -1
  26. package/dist/styles.css +1 -1
  27. package/dist/testing.cjs +106 -0
  28. package/dist/testing.cjs.map +1 -0
  29. package/dist/testing.d.cts +19 -0
  30. package/dist/testing.d.ts +19 -0
  31. package/dist/testing.js +104 -0
  32. package/dist/testing.js.map +1 -0
  33. package/package.json +94 -15
  34. package/dist/icon-names.cjs +0 -18
  35. package/dist/icon-names.cjs.map +0 -1
  36. package/dist/icon-names.js +0 -16
  37. package/dist/icon-names.js.map +0 -1
  38. package/src/blocks/AIKit/AnswerSummary.stories.tsx +0 -38
  39. package/src/blocks/AIKit/AnswerSummary.tsx +0 -63
  40. package/src/blocks/AIKit/CollapsibleStepHeader.stories.tsx +0 -53
  41. package/src/blocks/AIKit/CollapsibleStepHeader.tsx +0 -64
  42. package/src/blocks/AIKit/InlineStepDetail.stories.tsx +0 -25
  43. package/src/blocks/AIKit/InlineStepDetail.tsx +0 -13
  44. package/src/blocks/AIKit/InlineStepLabel.stories.tsx +0 -37
  45. package/src/blocks/AIKit/InlineStepLabel.tsx +0 -36
  46. package/src/blocks/AIKit/MessageBubble.stories.tsx +0 -145
  47. package/src/blocks/AIKit/MessageBubble.tsx +0 -68
  48. package/src/blocks/AIKit/PlanApproval.stories.tsx +0 -121
  49. package/src/blocks/AIKit/PlanApproval.test.tsx +0 -241
  50. package/src/blocks/AIKit/PlanApproval.tsx +0 -363
  51. package/src/blocks/AIKit/PlanRewritingIndicator.test.tsx +0 -17
  52. package/src/blocks/AIKit/PlanRewritingIndicator.tsx +0 -20
  53. package/src/blocks/AIKit/PromptInput.stories.tsx +0 -106
  54. package/src/blocks/AIKit/PromptInput.test.tsx +0 -53
  55. package/src/blocks/AIKit/PromptInput.tsx +0 -218
  56. package/src/blocks/AIKit/PromptInputAction.tsx +0 -18
  57. package/src/blocks/AIKit/PromptInputSubmit.tsx +0 -59
  58. package/src/blocks/AIKit/Question.stories.tsx +0 -235
  59. package/src/blocks/AIKit/Question.tsx +0 -350
  60. package/src/blocks/AIKit/QuestionBlock.stories.tsx +0 -99
  61. package/src/blocks/AIKit/QuestionBlock.tsx +0 -83
  62. package/src/blocks/AIKit/SuggestedPrompt.stories.tsx +0 -82
  63. package/src/blocks/AIKit/SuggestedPrompt.tsx +0 -42
  64. package/src/blocks/AIKit/ThinkingIndicator.stories.tsx +0 -21
  65. package/src/blocks/AIKit/ThinkingIndicator.tsx +0 -14
  66. package/src/blocks/AIKit/index.ts +0 -12
  67. package/src/blocks/AutoSaveTextarea/AutoSaveTextarea.stories.tsx +0 -78
  68. package/src/blocks/AutoSaveTextarea/AutoSaveTextarea.tsx +0 -103
  69. package/src/blocks/AutoSaveTextarea/index.ts +0 -1
  70. package/src/blocks/ClipboardButton/ClipboardButton.stories.tsx +0 -28
  71. package/src/blocks/ClipboardButton/ClipboardButton.tsx +0 -43
  72. package/src/blocks/ClipboardButton/ClipboardInline.tsx +0 -40
  73. package/src/blocks/ClipboardButton/index.ts +0 -2
  74. package/src/blocks/ColorInput/ColorInput.stories.tsx +0 -109
  75. package/src/blocks/ColorInput/ColorInput.test.tsx +0 -163
  76. package/src/blocks/ColorInput/ColorInput.tsx +0 -171
  77. package/src/blocks/ColorInput/ColorPicker.tsx +0 -42
  78. package/src/blocks/ColorInput/index.ts +0 -1
  79. package/src/blocks/ColorInput/utils.test.ts +0 -189
  80. package/src/blocks/ColorInput/utils.ts +0 -74
  81. package/src/blocks/EmptyConfigurationActionCard/EmptyConfigurationActionCard.stories.tsx +0 -30
  82. package/src/blocks/EmptyConfigurationActionCard/EmptyConfigurationActionCard.tsx +0 -20
  83. package/src/blocks/EmptyConfigurationActionCard/index.ts +0 -1
  84. package/src/blocks/EmptyState/EmptyState.stories.tsx +0 -93
  85. package/src/blocks/EmptyState/EmptyState.tsx +0 -146
  86. package/src/blocks/EmptyState/index.ts +0 -1
  87. package/src/blocks/ErrorState/ErrorState.stories.tsx +0 -125
  88. package/src/blocks/ErrorState/ErrorState.tsx +0 -162
  89. package/src/blocks/ErrorState/index.ts +0 -1
  90. package/src/blocks/Form/components/FormBody.tsx +0 -27
  91. package/src/blocks/Form/components/SubmitButton.tsx +0 -30
  92. package/src/blocks/Form/connectors/CheckboxField.tsx +0 -34
  93. package/src/blocks/Form/connectors/FieldShell.tsx +0 -46
  94. package/src/blocks/Form/connectors/NumberField.tsx +0 -36
  95. package/src/blocks/Form/connectors/PasswordField.tsx +0 -38
  96. package/src/blocks/Form/connectors/SelectField.tsx +0 -73
  97. package/src/blocks/Form/connectors/SwitchField.tsx +0 -34
  98. package/src/blocks/Form/connectors/TextAreaField.tsx +0 -36
  99. package/src/blocks/Form/connectors/TextField.tsx +0 -36
  100. package/src/blocks/Form/contexts.ts +0 -4
  101. package/src/blocks/Form/formHook.ts +0 -45
  102. package/src/blocks/Form/index.ts +0 -2
  103. package/src/blocks/Form/setServerFieldErrors.test.ts +0 -38
  104. package/src/blocks/Form/setServerFieldErrors.ts +0 -21
  105. package/src/blocks/InputOtp/InputOtp.stories.tsx +0 -214
  106. package/src/blocks/InputOtp/InputOtp.test.tsx +0 -162
  107. package/src/blocks/InputOtp/InputOtp.tsx +0 -62
  108. package/src/blocks/InputOtp/InputOtpGroup.tsx +0 -13
  109. package/src/blocks/InputOtp/InputOtpSeparator.tsx +0 -23
  110. package/src/blocks/InputOtp/InputOtpSlot.styles.ts +0 -52
  111. package/src/blocks/InputOtp/InputOtpSlot.tsx +0 -44
  112. package/src/blocks/InputOtp/context.ts +0 -23
  113. package/src/blocks/InputOtp/index.ts +0 -23
  114. package/src/blocks/MermaidDiagram/MermaidDiagram.stories.tsx +0 -87
  115. package/src/blocks/MermaidDiagram/MermaidDiagram.tsx +0 -266
  116. package/src/blocks/MermaidDiagram/index.ts +0 -1
  117. package/src/blocks/MultiActionButtonGroup/MultiActionButton.stories.tsx +0 -119
  118. package/src/blocks/MultiActionButtonGroup/MultiActionButton.tsx +0 -41
  119. package/src/blocks/MultiActionButtonGroup/MultiActionButtonGroup.tsx +0 -16
  120. package/src/blocks/MultiActionButtonGroup/index.ts +0 -1
  121. package/src/blocks/MultiCombobox/MultiCombobox.stories.tsx +0 -324
  122. package/src/blocks/MultiCombobox/MultiCombobox.tsx +0 -257
  123. package/src/blocks/MultiCombobox/index.ts +0 -1
  124. package/src/blocks/NumberInput/NumberInput.stories.tsx +0 -112
  125. package/src/blocks/NumberInput/NumberInput.test.tsx +0 -148
  126. package/src/blocks/NumberInput/NumberInput.tsx +0 -89
  127. package/src/blocks/NumberInput/index.ts +0 -1
  128. package/src/blocks/PageHeader/AGENTS.md +0 -137
  129. package/src/blocks/PageHeader/PageHeader.stories.tsx +0 -371
  130. package/src/blocks/PageHeader/PageHeader.tsx +0 -22
  131. package/src/blocks/PageHeader/PageHeaderDetail.tsx +0 -84
  132. package/src/blocks/PageHeader/PageHeaderIndex.tsx +0 -75
  133. package/src/blocks/PageHeader/index.ts +0 -1
  134. package/src/blocks/PageHeader/styles.ts +0 -6
  135. package/src/blocks/PageLayout/AGENTS.md +0 -94
  136. package/src/blocks/PageLayout/PageLayout.stories.tsx +0 -146
  137. package/src/blocks/PageLayout/PageLayout.tsx +0 -139
  138. package/src/blocks/PageLayout/index.ts +0 -1
  139. package/src/blocks/PageToolbar/PageToolbar.stories.tsx +0 -353
  140. package/src/blocks/PageToolbar/PageToolbar.tsx +0 -160
  141. package/src/blocks/PageToolbar/PageToolbarToken.tsx +0 -61
  142. package/src/blocks/PageToolbar/index.ts +0 -1
  143. package/src/blocks/PasswordInput/PasswordInput.stories.tsx +0 -114
  144. package/src/blocks/PasswordInput/PasswordInput.test.tsx +0 -219
  145. package/src/blocks/PasswordInput/PasswordInput.tsx +0 -180
  146. package/src/blocks/PasswordInput/index.ts +0 -1
  147. package/src/blocks/SearchInput/SearchInput.stories.tsx +0 -127
  148. package/src/blocks/SearchInput/SearchInput.test.tsx +0 -162
  149. package/src/blocks/SearchInput/SearchInput.tsx +0 -172
  150. package/src/blocks/SearchInput/index.ts +0 -1
  151. package/src/blocks/SearchInputWithNavigation/SearchInputWithNavigation.stories.tsx +0 -73
  152. package/src/blocks/SearchInputWithNavigation/SearchInputWithNavigation.tsx +0 -92
  153. package/src/blocks/SearchInputWithNavigation/index.ts +0 -1
  154. package/src/blocks/SplitButton/SplitButton.stories.tsx +0 -91
  155. package/src/blocks/SplitButton/SplitButton.tsx +0 -81
  156. package/src/blocks/SplitButton/index.ts +0 -1
  157. package/src/blocks/Tagger/TagItem.tsx +0 -32
  158. package/src/blocks/Tagger/TagSelectPopover/TagSelectCreateItem.tsx +0 -44
  159. package/src/blocks/Tagger/TagSelectPopover/TagSelectItem.tsx +0 -31
  160. package/src/blocks/Tagger/TagSelectPopover/TagSelectList.tsx +0 -67
  161. package/src/blocks/Tagger/TagSelectPopover/TagSelectPopover.tsx +0 -34
  162. package/src/blocks/Tagger/TagSelectPopover/TagSelectValue.tsx +0 -47
  163. package/src/blocks/Tagger/TagSelectPopover/index.ts +0 -1
  164. package/src/blocks/Tagger/Tagger.stories.tsx +0 -80
  165. package/src/blocks/Tagger/Tagger.tsx +0 -101
  166. package/src/blocks/Tagger/index.ts +0 -1
  167. package/src/blocks/Tagger/types.ts +0 -11
  168. package/src/blocks/Textarea/Textarea.stories.tsx +0 -47
  169. package/src/blocks/Textarea/Textarea.tsx +0 -50
  170. package/src/blocks/Textarea/index.ts +0 -1
  171. package/src/components/Alert/Alert.stories.tsx +0 -101
  172. package/src/components/Alert/Alert.tsx +0 -121
  173. package/src/components/Alert/AlertAction.tsx +0 -31
  174. package/src/components/Alert/AlertCollapsibleIcon.tsx +0 -25
  175. package/src/components/Alert/AlertDescription.tsx +0 -36
  176. package/src/components/Alert/AlertIcon.tsx +0 -40
  177. package/src/components/Alert/AlertRoot.tsx +0 -64
  178. package/src/components/Alert/AlertTitle.tsx +0 -25
  179. package/src/components/Alert/index.ts +0 -1
  180. package/src/components/Avatar.stories.tsx +0 -22
  181. package/src/components/Avatar.tsx +0 -88
  182. package/src/components/Badge/Badge.stories.tsx +0 -122
  183. package/src/components/Badge/Badge.tsx +0 -71
  184. package/src/components/Badge/BadgeAddon.tsx +0 -63
  185. package/src/components/Badge/BadgeButton.tsx +0 -40
  186. package/src/components/Badge/BadgeLabel.tsx +0 -37
  187. package/src/components/Badge/BadgeRoot.tsx +0 -21
  188. package/src/components/Badge/index.ts +0 -1
  189. package/src/components/Badge/styles.ts +0 -74
  190. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -135
  191. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -23
  192. package/src/components/Breadcrumb/BreadcrumbEllipsis.tsx +0 -43
  193. package/src/components/Breadcrumb/BreadcrumbItem.tsx +0 -9
  194. package/src/components/Breadcrumb/BreadcrumbLink.tsx +0 -48
  195. package/src/components/Breadcrumb/BreadcrumbList.tsx +0 -26
  196. package/src/components/Breadcrumb/BreadcrumbPage.tsx +0 -22
  197. package/src/components/Breadcrumb/BreadcrumbSeparator.tsx +0 -28
  198. package/src/components/Breadcrumb/index.ts +0 -1
  199. package/src/components/Button/Button.stories.tsx +0 -80
  200. package/src/components/Button/Button.tsx +0 -110
  201. package/src/components/Button/ButtonInline.stories.tsx +0 -54
  202. package/src/components/Button/ButtonInline.tsx +0 -77
  203. package/src/components/Button/index.ts +0 -3
  204. package/src/components/Button/styles.ts +0 -313
  205. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -140
  206. package/src/components/ButtonGroup/ButtonGroup.tsx +0 -79
  207. package/src/components/ButtonGroup/index.ts +0 -1
  208. package/src/components/Calendar/Calendar.stories.tsx +0 -101
  209. package/src/components/Calendar/Calendar.tsx +0 -44
  210. package/src/components/Calendar/index.ts +0 -2
  211. package/src/components/Card/Card.stories.tsx +0 -60
  212. package/src/components/Card/Card.tsx +0 -42
  213. package/src/components/Card/CardContent.tsx +0 -5
  214. package/src/components/Card/CardHeader.tsx +0 -5
  215. package/src/components/Card/CardTitle.tsx +0 -13
  216. package/src/components/Card/index.ts +0 -1
  217. package/src/components/Card/styles.ts +0 -32
  218. package/src/components/Checkbox/Checkbox.stories.tsx +0 -210
  219. package/src/components/Checkbox/Checkbox.test.tsx +0 -140
  220. package/src/components/Checkbox/Checkbox.tsx +0 -83
  221. package/src/components/Checkbox/index.ts +0 -1
  222. package/src/components/Checkbox/styles.ts +0 -77
  223. package/src/components/Clipboard/Clipboard.stories.tsx +0 -44
  224. package/src/components/Clipboard/Clipboard.tsx +0 -89
  225. package/src/components/Clipboard/index.ts +0 -1
  226. package/src/components/CodeEditor/ButtonToolbar.tsx +0 -14
  227. package/src/components/CodeEditor/CodeEditor.tsx +0 -155
  228. package/src/components/CodeEditor/SqlEditor.stories.tsx +0 -76
  229. package/src/components/CodeEditor/SqlEditor.tsx +0 -206
  230. package/src/components/CodeEditor/ToggleComponentHelp.tsx +0 -7
  231. package/src/components/CodeEditor/activeQueryHighlight.test.ts +0 -178
  232. package/src/components/CodeEditor/activeQueryHighlight.ts +0 -245
  233. package/src/components/CodeEditor/helpers.ts +0 -100
  234. package/src/components/CodeEditor/highlighting.ts +0 -184
  235. package/src/components/CodeEditor/index.ts +0 -3
  236. package/src/components/CodeEditor/search.ts +0 -186
  237. package/src/components/Collapse.stories.tsx +0 -56
  238. package/src/components/Collapse.tsx +0 -61
  239. package/src/components/Collapsible/Collapsible.stories.tsx +0 -55
  240. package/src/components/Collapsible/Collapsible.tsx +0 -11
  241. package/src/components/Collapsible/CollapsibleContent.tsx +0 -25
  242. package/src/components/Collapsible/index.ts +0 -1
  243. package/src/components/CollapsiblePanel.stories.tsx +0 -25
  244. package/src/components/CollapsiblePanel.tsx +0 -127
  245. package/src/components/Combobox/Combobox.stories.tsx +0 -426
  246. package/src/components/Combobox/Combobox.test.tsx +0 -165
  247. package/src/components/Combobox/Combobox.tsx +0 -345
  248. package/src/components/Combobox/ComboboxChips.tsx +0 -68
  249. package/src/components/Combobox/ComboboxContent.tsx +0 -95
  250. package/src/components/Combobox/ComboboxEmpty.tsx +0 -30
  251. package/src/components/Combobox/ComboboxInput.tsx +0 -10
  252. package/src/components/Combobox/ComboboxInputGroup.tsx +0 -38
  253. package/src/components/Combobox/ComboboxItem.tsx +0 -70
  254. package/src/components/Combobox/ComboboxItemIndicator.tsx +0 -78
  255. package/src/components/Combobox/ComboboxList.tsx +0 -32
  256. package/src/components/Combobox/ComboboxRoot.tsx +0 -5
  257. package/src/components/Combobox/ComboboxSeparator.tsx +0 -20
  258. package/src/components/Combobox/Group/ComboboxCollection.tsx +0 -7
  259. package/src/components/Combobox/Group/ComboboxGroup.tsx +0 -23
  260. package/src/components/Combobox/Group/ComboboxGroupLabel.tsx +0 -38
  261. package/src/components/Combobox/Group/index.ts +0 -3
  262. package/src/components/Combobox/index.ts +0 -1
  263. package/src/components/Combobox/types.ts +0 -22
  264. package/src/components/Combobox/utils.test.ts +0 -95
  265. package/src/components/Combobox/utils.ts +0 -103
  266. package/src/components/Command/Command.stories.tsx +0 -367
  267. package/src/components/Command/Command.tsx +0 -37
  268. package/src/components/Command/CommandContent.tsx +0 -19
  269. package/src/components/Command/CommandEmpty.tsx +0 -6
  270. package/src/components/Command/CommandGroup.tsx +0 -26
  271. package/src/components/Command/CommandInput.tsx +0 -27
  272. package/src/components/Command/CommandItem/CheckIndicator.tsx +0 -86
  273. package/src/components/Command/CommandItem/CommandItem.tsx +0 -94
  274. package/src/components/Command/CommandItem/index.ts +0 -1
  275. package/src/components/Command/CommandList.tsx +0 -32
  276. package/src/components/Command/CommandSeparator.tsx +0 -13
  277. package/src/components/Command/index.ts +0 -6
  278. package/src/components/DatePicker/DatePicker.tsx +0 -37
  279. package/src/components/DatePicker/index.ts +0 -1
  280. package/src/components/DiffView/DiffView.stories.tsx +0 -80
  281. package/src/components/DiffView/DiffView.tsx +0 -131
  282. package/src/components/DiffView/DiffViewMark.tsx +0 -21
  283. package/src/components/DiffView/DiffViewTd.tsx +0 -84
  284. package/src/components/DiffView/DiffViewTh.tsx +0 -23
  285. package/src/components/DiffView/index.ts +0 -11
  286. package/src/components/DiffView/util.test.ts +0 -231
  287. package/src/components/DiffView/util.ts +0 -311
  288. package/src/components/DotsLoader.tsx +0 -22
  289. package/src/components/DropdownMenu/DropdownMenu.stories.tsx +0 -310
  290. package/src/components/DropdownMenu/DropdownMenu.tsx +0 -61
  291. package/src/components/DropdownMenu/DropdownMenuCheckboxItem.tsx +0 -55
  292. package/src/components/DropdownMenu/DropdownMenuContent.tsx +0 -52
  293. package/src/components/DropdownMenu/DropdownMenuContext.tsx +0 -13
  294. package/src/components/DropdownMenu/DropdownMenuItem.tsx +0 -80
  295. package/src/components/DropdownMenu/DropdownMenuItemDescription.tsx +0 -42
  296. package/src/components/DropdownMenu/DropdownMenuItemIndicator.tsx +0 -104
  297. package/src/components/DropdownMenu/DropdownMenuLabel.tsx +0 -21
  298. package/src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioGroup.tsx +0 -31
  299. package/src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioItem.tsx +0 -67
  300. package/src/components/DropdownMenu/DropdownMenuRadioGroup/index.ts +0 -2
  301. package/src/components/DropdownMenu/DropdownMenuSeparator.tsx +0 -35
  302. package/src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSub.tsx +0 -3
  303. package/src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubContent.tsx +0 -21
  304. package/src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubTrigger.tsx +0 -17
  305. package/src/components/DropdownMenu/DropdownMenuSub/index.ts +0 -3
  306. package/src/components/DropdownMenu/DropdownMenuTrigger.tsx +0 -19
  307. package/src/components/DropdownMenu/ItemIcon.tsx +0 -30
  308. package/src/components/DropdownMenu/index.ts +0 -1
  309. package/src/components/DropdownMenu/styles.ts +0 -82
  310. package/src/components/EmptySearchContent.stories.tsx +0 -12
  311. package/src/components/EmptySearchContent.tsx +0 -13
  312. package/src/components/FieldBox/FieldBox.stories.tsx +0 -138
  313. package/src/components/FieldBox/FieldBox.tsx +0 -43
  314. package/src/components/FieldBox/FieldBoxDescription.tsx +0 -18
  315. package/src/components/FieldBox/FieldBoxTitle.tsx +0 -20
  316. package/src/components/FieldBox/index.ts +0 -1
  317. package/src/components/FieldBox/styles.ts +0 -37
  318. package/src/components/FormGroup/FormGroup.stories.tsx +0 -120
  319. package/src/components/FormGroup/FormGroup.tsx +0 -48
  320. package/src/components/FormGroup/FormGroupColorInput.tsx +0 -15
  321. package/src/components/FormGroup/FormGroupHelp.tsx +0 -17
  322. package/src/components/FormGroup/FormGroupNumberInput.tsx +0 -15
  323. package/src/components/FormGroup/FormGroupTextInput.tsx +0 -15
  324. package/src/components/FormGroup/FormGroupTextarea.tsx +0 -12
  325. package/src/components/FormGroup/context.ts +0 -11
  326. package/src/components/FormGroup/index.ts +0 -2
  327. package/src/components/FormGroup/types.ts +0 -5
  328. package/src/components/FullScreenModal/FullScreenModal.tsx +0 -8
  329. package/src/components/FullScreenModal/FullScreenModalBody.tsx +0 -16
  330. package/src/components/FullScreenModal/FullScreenModalHeader.tsx +0 -92
  331. package/src/components/FullScreenModal/FullScreenModalRoot.tsx +0 -79
  332. package/src/components/FullScreenModal/index.ts +0 -3
  333. package/src/components/HelpBlock/HelpBlock.stories.tsx +0 -28
  334. package/src/components/HelpBlock/HelpBlock.tsx +0 -31
  335. package/src/components/HelpBlock/index.ts +0 -1
  336. package/src/components/HoverCard/HoverCard.stories.tsx +0 -77
  337. package/src/components/HoverCard/HoverCard.tsx +0 -13
  338. package/src/components/HoverCard/HoverCardContent.tsx +0 -68
  339. package/src/components/HoverCard/index.ts +0 -1
  340. package/src/components/Icon/Icon.stories.tsx +0 -26
  341. package/src/components/Icon/Icon.tsx +0 -10
  342. package/src/components/Icon/Icons.mdx +0 -28
  343. package/src/components/Icon/constants.ts +0 -1
  344. package/src/components/Icon/index.ts +0 -27
  345. package/src/components/Input/DateInput/DateInput.stories.tsx +0 -58
  346. package/src/components/Input/DateInput/DateInput.tsx +0 -143
  347. package/src/components/Input/DateInput/helpers.test.ts +0 -102
  348. package/src/components/Input/DateInput/helpers.ts +0 -59
  349. package/src/components/Input/DateInput/index.ts +0 -1
  350. package/src/components/Input/DateRangeInput/DateRangeInput.stories.tsx +0 -66
  351. package/src/components/Input/DateRangeInput/DateRangeInput.tsx +0 -139
  352. package/src/components/Input/DateRangeInput/helpers.test.ts +0 -146
  353. package/src/components/Input/DateRangeInput/helpers.ts +0 -36
  354. package/src/components/Input/DateRangeInput/index.ts +0 -1
  355. package/src/components/Input/Input.stories.tsx +0 -93
  356. package/src/components/Input/Input.test.tsx +0 -112
  357. package/src/components/Input/Input.tsx +0 -163
  358. package/src/components/Input/TextInput/TextInput.stories.tsx +0 -68
  359. package/src/components/Input/TextInput/TextInput.test.tsx +0 -52
  360. package/src/components/Input/TextInput/TextInput.tsx +0 -73
  361. package/src/components/Input/TextInput/index.ts +0 -1
  362. package/src/components/Input/TimeInput/TimeInput.stories.tsx +0 -89
  363. package/src/components/Input/TimeInput/TimeInput.tsx +0 -106
  364. package/src/components/Input/TimeInput/index.ts +0 -1
  365. package/src/components/Input/index.ts +0 -4
  366. package/src/components/Input/utils.ts +0 -11
  367. package/src/components/InputGroup/InputGroup.stories.tsx +0 -215
  368. package/src/components/InputGroup/InputGroup.tsx +0 -228
  369. package/src/components/InputGroup/InputGroupAddon.tsx +0 -57
  370. package/src/components/InputGroup/InputGroupButton.tsx +0 -25
  371. package/src/components/InputGroup/InputGroupInput.tsx +0 -34
  372. package/src/components/InputGroup/InputGroupText.tsx +0 -21
  373. package/src/components/InputGroup/InputGroupTextArea.tsx +0 -78
  374. package/src/components/InputGroup/index.ts +0 -1
  375. package/src/components/Kbd/Kbd.stories.tsx +0 -82
  376. package/src/components/Kbd/Kbd.tsx +0 -17
  377. package/src/components/Kbd/KbdGroup.tsx +0 -35
  378. package/src/components/Kbd/KbdSeparator.tsx +0 -9
  379. package/src/components/Kbd/index.ts +0 -3
  380. package/src/components/Kbd/keyboardKeys.ts +0 -40
  381. package/src/components/Kbd/styles.ts +0 -39
  382. package/src/components/Label/Label.stories.tsx +0 -53
  383. package/src/components/Label/Label.tsx +0 -31
  384. package/src/components/Label/index.ts +0 -1
  385. package/src/components/Link.stories.tsx +0 -19
  386. package/src/components/Link.tsx +0 -37
  387. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +0 -182
  388. package/src/components/MarkdownEditor/MarkdownEditor.test.ts +0 -171
  389. package/src/components/MarkdownEditor/MarkdownEditor.tsx +0 -245
  390. package/src/components/MarkdownEditor/context.ts +0 -10
  391. package/src/components/MarkdownEditor/index.ts +0 -1
  392. package/src/components/MarkdownEditor/nodes/ImageNode.tsx +0 -115
  393. package/src/components/MarkdownEditor/nodes/ImageNodeComponent.tsx +0 -18
  394. package/src/components/MarkdownEditor/nodes/MermaidNode.tsx +0 -72
  395. package/src/components/MarkdownEditor/nodes/MermaidNodeComponent.tsx +0 -35
  396. package/src/components/MarkdownEditor/plugins/ImagePastePlugin.tsx +0 -149
  397. package/src/components/MarkdownEditor/plugins/KeyboardPlugin.tsx +0 -81
  398. package/src/components/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx +0 -65
  399. package/src/components/MarkdownEditor/plugins/ToolbarPlugin.tsx +0 -284
  400. package/src/components/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx +0 -99
  401. package/src/components/MarkdownEditor/plugins/toolbar/BlockTypeDropdown.tsx +0 -142
  402. package/src/components/MarkdownEditor/plugins/toolbar/LinkPanel.tsx +0 -160
  403. package/src/components/MarkdownEditor/plugins/toolbar/ToolbarButton.tsx +0 -36
  404. package/src/components/MarkdownEditor/plugins/toolbar/ToolbarDivider.tsx +0 -1
  405. package/src/components/MarkdownEditor/theme.ts +0 -39
  406. package/src/components/MarkdownEditor/transformers.ts +0 -189
  407. package/src/components/MarkedText/MarkedText.stories.tsx +0 -46
  408. package/src/components/MarkedText/MarkedText.tsx +0 -36
  409. package/src/components/MarkedText/index.ts +0 -1
  410. package/src/components/MarkedText/utils.test.ts +0 -193
  411. package/src/components/MarkedText/utils.ts +0 -37
  412. package/src/components/MergeEditor/AcceptControls/AcceptButton.tsx +0 -25
  413. package/src/components/MergeEditor/AcceptControls/AcceptControls.tsx +0 -77
  414. package/src/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.tsx +0 -38
  415. package/src/components/MergeEditor/MergeEditor.stories.tsx +0 -226
  416. package/src/components/MergeEditor/MergeEditor.tsx +0 -125
  417. package/src/components/MergeEditor/MergePane.tsx +0 -113
  418. package/src/components/MergeEditor/PaneHeader.tsx +0 -11
  419. package/src/components/MergeEditor/constants.ts +0 -48
  420. package/src/components/MergeEditor/decorations.ts +0 -126
  421. package/src/components/MergeEditor/helpers.test.ts +0 -172
  422. package/src/components/MergeEditor/helpers.ts +0 -118
  423. package/src/components/MergeEditor/index.ts +0 -5
  424. package/src/components/MergeEditor/useMergeDiff.ts +0 -573
  425. package/src/components/MergeEditor/useScrollSync.ts +0 -79
  426. package/src/components/Modal/Modal.stories.tsx +0 -680
  427. package/src/components/Modal/Modal.tsx +0 -49
  428. package/src/components/Modal/ModalBody.tsx +0 -33
  429. package/src/components/Modal/ModalCloseIcon.tsx +0 -31
  430. package/src/components/Modal/ModalContent.tsx +0 -95
  431. package/src/components/Modal/ModalDescription.tsx +0 -20
  432. package/src/components/Modal/ModalFooter.tsx +0 -20
  433. package/src/components/Modal/ModalHeader.tsx +0 -61
  434. package/src/components/Modal/ModalIcon.tsx +0 -109
  435. package/src/components/Modal/ModalOverlay.tsx +0 -42
  436. package/src/components/Modal/ModalTitle.tsx +0 -12
  437. package/src/components/Modal/index.ts +0 -1
  438. package/src/components/Navbar/Navbar.stories.tsx +0 -191
  439. package/src/components/Navbar/Navbar.tsx +0 -80
  440. package/src/components/Navbar/NavbarContent.tsx +0 -20
  441. package/src/components/Navbar/NavbarFooter.tsx +0 -11
  442. package/src/components/Navbar/NavbarHeader.tsx +0 -11
  443. package/src/components/Navbar/NavbarMenu.tsx +0 -30
  444. package/src/components/Navbar/NavbarMenuAvatar.tsx +0 -67
  445. package/src/components/Navbar/NavbarMenuButton.tsx +0 -135
  446. package/src/components/Navbar/NavbarMenuItem.tsx +0 -9
  447. package/src/components/Navbar/NavbarMenuItemAdornment.tsx +0 -65
  448. package/src/components/Navbar/index.ts +0 -1
  449. package/src/components/Pagination/Pagination.stories.tsx +0 -131
  450. package/src/components/Pagination/Pagination.tsx +0 -34
  451. package/src/components/Pagination/PaginationButton.tsx +0 -36
  452. package/src/components/Pagination/PaginationContent.tsx +0 -12
  453. package/src/components/Pagination/PaginationEllipsis.tsx +0 -26
  454. package/src/components/Pagination/PaginationItem.tsx +0 -9
  455. package/src/components/Pagination/PaginationNext.tsx +0 -20
  456. package/src/components/Pagination/PaginationPrevious.tsx +0 -14
  457. package/src/components/Pagination/index.ts +0 -1
  458. package/src/components/PanelWithDetails.stories.tsx +0 -28
  459. package/src/components/PanelWithDetails.tsx +0 -65
  460. package/src/components/Popconfirm/Popconfirm.stories.tsx +0 -373
  461. package/src/components/Popconfirm/Popconfirm.tsx +0 -82
  462. package/src/components/Popconfirm/PopconfirmBody.tsx +0 -5
  463. package/src/components/Popconfirm/PopconfirmCancel.tsx +0 -45
  464. package/src/components/Popconfirm/PopconfirmConfirm.tsx +0 -57
  465. package/src/components/Popconfirm/PopconfirmContent.tsx +0 -33
  466. package/src/components/Popconfirm/PopconfirmFooter.tsx +0 -9
  467. package/src/components/Popconfirm/PopconfirmTrigger.tsx +0 -22
  468. package/src/components/Popconfirm/context.ts +0 -19
  469. package/src/components/Popconfirm/index.ts +0 -1
  470. package/src/components/Popover/Popover.stories.tsx +0 -85
  471. package/src/components/Popover/Popover.tsx +0 -15
  472. package/src/components/Popover/PopoverContent.tsx +0 -103
  473. package/src/components/Popover/index.ts +0 -1
  474. package/src/components/Progress/Progress.stories.tsx +0 -67
  475. package/src/components/Progress/Progress.tsx +0 -45
  476. package/src/components/Progress/index.ts +0 -1
  477. package/src/components/RadioGroup/Radio.tsx +0 -61
  478. package/src/components/RadioGroup/RadioGroup.stories.tsx +0 -300
  479. package/src/components/RadioGroup/RadioGroup.tsx +0 -64
  480. package/src/components/RadioGroup/RadioGroupItem.tsx +0 -60
  481. package/src/components/RadioGroup/RadioGroupItemButton.tsx +0 -79
  482. package/src/components/RadioGroup/RadioGroupSeparator.tsx +0 -12
  483. package/src/components/RadioGroup/context.ts +0 -13
  484. package/src/components/RadioGroup/index.ts +0 -1
  485. package/src/components/Resizable/Resizable.stories.tsx +0 -50
  486. package/src/components/Resizable/ResizableHandle.tsx +0 -50
  487. package/src/components/Resizable/ResizablePanel.tsx +0 -12
  488. package/src/components/Resizable/ResizablePanelGroup.tsx +0 -19
  489. package/src/components/Resizable/index.ts +0 -3
  490. package/src/components/ScrollArea/ScrollArea.stories.tsx +0 -43
  491. package/src/components/ScrollArea/ScrollArea.tsx +0 -50
  492. package/src/components/ScrollArea/ScrollBar.tsx +0 -32
  493. package/src/components/ScrollArea/index.ts +0 -2
  494. package/src/components/Search/ClearButton.tsx +0 -42
  495. package/src/components/Search/Search.stories.tsx +0 -77
  496. package/src/components/Search/Search.test.tsx +0 -224
  497. package/src/components/Search/Search.tsx +0 -139
  498. package/src/components/Search/SearchForm.tsx +0 -37
  499. package/src/components/Search/index.ts +0 -2
  500. package/src/components/Search/styles.ts +0 -88
  501. package/src/components/Search/utils.ts +0 -11
  502. package/src/components/Select/Select.stories.tsx +0 -109
  503. package/src/components/Select/Select.tsx +0 -141
  504. package/src/components/Select/SelectContent.tsx +0 -110
  505. package/src/components/Select/SelectGroup.tsx +0 -10
  506. package/src/components/Select/SelectItem.tsx +0 -72
  507. package/src/components/Select/SelectLabel.tsx +0 -32
  508. package/src/components/Select/SelectRoot.tsx +0 -6
  509. package/src/components/Select/SelectSeparator.tsx +0 -13
  510. package/src/components/Select/SelectTrigger.tsx +0 -161
  511. package/src/components/Select/index.ts +0 -1
  512. package/src/components/Separator/Separator.stories.tsx +0 -60
  513. package/src/components/Separator/Separator.test.tsx +0 -39
  514. package/src/components/Separator/Separator.tsx +0 -115
  515. package/src/components/Separator/index.ts +0 -1
  516. package/src/components/Sheet/Sheet.stories.tsx +0 -63
  517. package/src/components/Sheet/Sheet.tsx +0 -21
  518. package/src/components/Sheet/SheetBody.tsx +0 -12
  519. package/src/components/Sheet/SheetContent.tsx +0 -131
  520. package/src/components/Sheet/SheetFooter.tsx +0 -9
  521. package/src/components/Sheet/SheetHeader.tsx +0 -39
  522. package/src/components/Sheet/SheetOverlay.tsx +0 -11
  523. package/src/components/Sheet/SheetTitle.tsx +0 -12
  524. package/src/components/Sheet/index.ts +0 -1
  525. package/src/components/Sidebar/Sidebar.stories.tsx +0 -849
  526. package/src/components/Sidebar/Sidebar.tsx +0 -225
  527. package/src/components/Sidebar/SidebarContent.tsx +0 -61
  528. package/src/components/Sidebar/SidebarFillTrigger.tsx +0 -25
  529. package/src/components/Sidebar/SidebarFooter.tsx +0 -13
  530. package/src/components/Sidebar/SidebarGroup/SidebarGroup.tsx +0 -23
  531. package/src/components/Sidebar/SidebarGroup/SidebarGroupAction.tsx +0 -53
  532. package/src/components/Sidebar/SidebarGroup/SidebarGroupContent.tsx +0 -20
  533. package/src/components/Sidebar/SidebarGroup/SidebarGroupLabel.tsx +0 -76
  534. package/src/components/Sidebar/SidebarGroup/index.ts +0 -4
  535. package/src/components/Sidebar/SidebarHeader.tsx +0 -20
  536. package/src/components/Sidebar/SidebarInstanceContext.ts +0 -18
  537. package/src/components/Sidebar/SidebarMenu/SidebarMenu.tsx +0 -28
  538. package/src/components/Sidebar/SidebarMenu/SidebarMenuAction.tsx +0 -69
  539. package/src/components/Sidebar/SidebarMenu/SidebarMenuBadge.tsx +0 -56
  540. package/src/components/Sidebar/SidebarMenu/SidebarMenuButton.tsx +0 -110
  541. package/src/components/Sidebar/SidebarMenu/SidebarMenuCard.tsx +0 -108
  542. package/src/components/Sidebar/SidebarMenu/SidebarMenuIcon.tsx +0 -30
  543. package/src/components/Sidebar/SidebarMenu/SidebarMenuItem.tsx +0 -9
  544. package/src/components/Sidebar/SidebarMenu/SidebarMenuSub.tsx +0 -139
  545. package/src/components/Sidebar/SidebarMenu/SidebarMenuSubItem.tsx +0 -106
  546. package/src/components/Sidebar/SidebarMenu/SidebarSearchInput.tsx +0 -88
  547. package/src/components/Sidebar/SidebarMenu/index.ts +0 -10
  548. package/src/components/Sidebar/SidebarProvider/SidebarProvider.tsx +0 -171
  549. package/src/components/Sidebar/SidebarProvider/context.ts +0 -35
  550. package/src/components/Sidebar/SidebarProvider/index.ts +0 -2
  551. package/src/components/Sidebar/SidebarProvider/useHoverTracking.test.ts +0 -199
  552. package/src/components/Sidebar/SidebarProvider/useHoverTracking.ts +0 -72
  553. package/src/components/Sidebar/SidebarProvider/useSidebarState.ts +0 -50
  554. package/src/components/Sidebar/SidebarProvider/useTransitionPresence.test.ts +0 -179
  555. package/src/components/Sidebar/SidebarProvider/useTransitionPresence.ts +0 -53
  556. package/src/components/Sidebar/SidebarResizeHandle.tsx +0 -28
  557. package/src/components/Sidebar/SidebarSeparator.tsx +0 -15
  558. package/src/components/Sidebar/SidebarTrigger.tsx +0 -40
  559. package/src/components/Sidebar/index.ts +0 -3
  560. package/src/components/Sidebar/types.ts +0 -6
  561. package/src/components/Sidebar/useResizeSidebar.ts +0 -112
  562. package/src/components/Sidebar/utils.test.ts +0 -178
  563. package/src/components/Sidebar/utils.ts +0 -70
  564. package/src/components/Skeleton/Skeleton.stories.tsx +0 -106
  565. package/src/components/Skeleton/Skeleton.tsx +0 -77
  566. package/src/components/Skeleton/SkeletonList.stories.tsx +0 -11
  567. package/src/components/Skeleton/SkeletonList.tsx +0 -65
  568. package/src/components/Slider/Slider.stories.tsx +0 -99
  569. package/src/components/Slider/Slider.tsx +0 -85
  570. package/src/components/Slider/SliderThumb.tsx +0 -57
  571. package/src/components/Slider/SliderTrack.tsx +0 -49
  572. package/src/components/Slider/index.ts +0 -1
  573. package/src/components/Slider/useInteracting.test.ts +0 -159
  574. package/src/components/Slider/useInteracting.ts +0 -64
  575. package/src/components/Switch/Switch.stories.tsx +0 -177
  576. package/src/components/Switch/Switch.tsx +0 -58
  577. package/src/components/Switch/index.ts +0 -1
  578. package/src/components/Switch/styles.ts +0 -173
  579. package/src/components/Table/Table.stories.tsx +0 -328
  580. package/src/components/Table/Table.tsx +0 -68
  581. package/src/components/Table/TableBody.tsx +0 -22
  582. package/src/components/Table/TableCell.tsx +0 -7
  583. package/src/components/Table/TableFooter.tsx +0 -15
  584. package/src/components/Table/TableHead.tsx +0 -15
  585. package/src/components/Table/TableHeader.tsx +0 -20
  586. package/src/components/Table/TableRow.tsx +0 -11
  587. package/src/components/Table/index.ts +0 -1
  588. package/src/components/Tabs.stories.tsx +0 -123
  589. package/src/components/Tabs.tsx +0 -134
  590. package/src/components/ThemeProvider/AIGradientSvg.tsx +0 -18
  591. package/src/components/ThemeProvider/ThemeProvider.tsx +0 -25
  592. package/src/components/ThemeProvider/index.ts +0 -1
  593. package/src/components/TimePicker/TimePicker.tsx +0 -95
  594. package/src/components/TimePicker/TimePickerButton.tsx +0 -39
  595. package/src/components/TimePicker/index.ts +0 -1
  596. package/src/components/TimePicker/utils.ts +0 -31
  597. package/src/components/Timeline/Timeline.stories.tsx +0 -246
  598. package/src/components/Timeline/Timeline.tsx +0 -35
  599. package/src/components/Timeline/TimelineConnector.tsx +0 -158
  600. package/src/components/Timeline/TimelineContent.tsx +0 -18
  601. package/src/components/Timeline/TimelineItem.tsx +0 -14
  602. package/src/components/Timeline/index.ts +0 -1
  603. package/src/components/Timeline/useLastLineHeight.ts +0 -36
  604. package/src/components/Toast/Toast.stories.tsx +0 -178
  605. package/src/components/Toast/ToastAction.tsx +0 -40
  606. package/src/components/Toast/ToastDescription.tsx +0 -28
  607. package/src/components/Toast/ToastDismiss.tsx +0 -36
  608. package/src/components/Toast/ToastDuration.tsx +0 -43
  609. package/src/components/Toast/ToastRoot.tsx +0 -135
  610. package/src/components/Toast/ToastTitle.tsx +0 -33
  611. package/src/components/Toast/Toaster.tsx +0 -25
  612. package/src/components/Toast/index.ts +0 -3
  613. package/src/components/Toast/toast.tsx +0 -94
  614. package/src/components/Toast/useNotification.tsx +0 -33
  615. package/src/components/Toggle/Toggle.stories.tsx +0 -67
  616. package/src/components/Toggle/Toggle.tsx +0 -202
  617. package/src/components/Toggle/index.ts +0 -1
  618. package/src/components/ToggleGroup/ToggleGroup.stories.tsx +0 -60
  619. package/src/components/ToggleGroup/ToggleGroup.tsx +0 -99
  620. package/src/components/ToggleGroup/index.ts +0 -1
  621. package/src/components/Tooltip/Tooltip.stories.tsx +0 -82
  622. package/src/components/Tooltip/Tooltip.tsx +0 -110
  623. package/src/components/Tooltip/TooltipContent.tsx +0 -90
  624. package/src/components/Tooltip/TooltipRoot.tsx +0 -12
  625. package/src/components/Tooltip/TooltipTrigger.tsx +0 -42
  626. package/src/components/Tooltip/index.ts +0 -1
  627. package/src/components/Truncated.stories.tsx +0 -72
  628. package/src/components/Truncated.tsx +0 -78
  629. package/src/components/ZoomableSvg/ZoomableSvg.stories.tsx +0 -53
  630. package/src/components/ZoomableSvg/ZoomableSvg.tsx +0 -200
  631. package/src/components/ZoomableSvg/index.ts +0 -1
  632. package/src/constants/keyCodes.ts +0 -5
  633. package/src/docs/Colors.mdx +0 -19
  634. package/src/docs/Spacing.mdx +0 -35
  635. package/src/docs/Typography.mdx +0 -63
  636. package/src/docs/components/Typeset.tsx +0 -35
  637. package/src/hooks/useAutosizeInput.stories.tsx +0 -142
  638. package/src/hooks/useAutosizeInput.test.tsx +0 -77
  639. package/src/hooks/useAutosizeInput.tsx +0 -107
  640. package/src/hooks/useElement.ts +0 -16
  641. package/src/hooks/useScrollbarPosition.ts +0 -68
  642. package/src/icon-names.ts +0 -20
  643. package/src/icons/Keboola.tsx +0 -28
  644. package/src/icons/icons.stories.tsx +0 -174
  645. package/src/icons/index.ts +0 -188
  646. package/src/index.ts +0 -90
  647. package/src/patterns/AlertWithAction.stories.tsx +0 -30
  648. package/src/patterns/CardWithEmptyState.stories.tsx +0 -66
  649. package/src/patterns/ConfirmDialog.stories.tsx +0 -72
  650. package/src/patterns/CreatableMultiCombobox.stories.tsx +0 -33
  651. package/src/patterns/DataCardWithSkeleton.stories.tsx +0 -48
  652. package/src/patterns/DisabledButtonTooltip.stories.tsx +0 -30
  653. package/src/patterns/FilterToolbar.stories.tsx +0 -275
  654. package/src/patterns/InfoTooltip.stories.tsx +0 -56
  655. package/src/patterns/ListDetail.stories.tsx +0 -65
  656. package/src/patterns/ModalForm.stories.tsx +0 -59
  657. package/src/patterns/PageHeaderTabs.stories.tsx +0 -48
  658. package/src/utils/classNames.test.ts +0 -16
  659. package/src/utils/classNames.ts +0 -27
  660. package/src/utils/copyToClipboard.ts +0 -3
  661. package/src/utils/createChangeInputEvent.ts +0 -28
  662. package/src/utils/createPrefixedString.ts +0 -2
  663. package/src/utils/debounce.test.ts +0 -63
  664. package/src/utils/debounce.ts +0 -17
  665. package/src/utils/decorators.tsx +0 -16
  666. package/src/utils/escapeStringRegexp.ts +0 -4
  667. package/src/utils/index.ts +0 -11
  668. package/src/utils/isMac.ts +0 -26
  669. package/src/utils/legacyIcon.tsx +0 -28
  670. package/src/utils/mergeRefs.ts +0 -23
  671. package/src/utils/noop.ts +0 -1
  672. package/src/utils/useSHA256.ts +0 -21
  673. package/src/vite-env.d.ts +0 -1
@@ -0,0 +1,106 @@
1
+ 'use strict';
2
+
3
+ var react$1 = require('@testing-library/react');
4
+ var brandRegistry = require('@keboola/brand-registry');
5
+ var react = require('react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ // src/testing/renderWithTheme.tsx
9
+ var AIGradientsSvg = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "0", height: "0", style: { position: "absolute", visibility: "hidden" }, children: /* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
10
+ /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: "aigradient-600", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
11
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: "#61E4FF" }),
12
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "50%", stopColor: "#1F8FFF" }),
13
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "#7C5CFF" })
14
+ ] }),
15
+ /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: "aigradient-700", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
16
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: "#075fb8" }),
17
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "#5b2cb8" })
18
+ ] })
19
+ ] }) });
20
+
21
+ // src/components/ThemeProvider/brandToCssVars.ts
22
+ var hexToRgbTriplet = (hex) => {
23
+ const match = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());
24
+ if (!match) return null;
25
+ let body = match[1];
26
+ if (body.length === 3) {
27
+ body = body.split("").map((c) => c + c).join("");
28
+ }
29
+ const r = parseInt(body.slice(0, 2), 16);
30
+ const g = parseInt(body.slice(2, 4), 16);
31
+ const b = parseInt(body.slice(4, 6), 16);
32
+ return `${r} ${g} ${b}`;
33
+ };
34
+ var brandToCssVars = (brand) => {
35
+ const vars = {};
36
+ const colorMap = [
37
+ ["--color-background", brand.colors.background],
38
+ ["--color-foreground", brand.colors.foreground],
39
+ ["--color-muted", brand.colors.muted],
40
+ ["--color-muted-foreground", brand.colors.mutedForeground],
41
+ ["--color-border", brand.colors.border],
42
+ ["--color-primary", brand.colors.primary],
43
+ ["--color-primary-foreground", brand.colors.primaryForeground],
44
+ ["--color-destructive", brand.colors.destructive],
45
+ ["--color-destructive-foreground", brand.colors.destructiveForeground]
46
+ ];
47
+ for (const [name, hex] of colorMap) {
48
+ const triplet = hexToRgbTriplet(hex);
49
+ if (triplet !== null) vars[name] = triplet;
50
+ }
51
+ if (brand.radii) {
52
+ vars["--radius-sm"] = brand.radii.sm;
53
+ vars["--radius-md"] = brand.radii.md;
54
+ vars["--radius-lg"] = brand.radii.lg;
55
+ }
56
+ return vars;
57
+ };
58
+ var ThemeContext = react.createContext(null);
59
+ var ThemeProvider = ({ brand = brandRegistry.keboola, setBrand, children }) => {
60
+ react.useEffect(() => {
61
+ if (typeof document === "undefined") return;
62
+ const root = document.documentElement;
63
+ const previousBrand = root.getAttribute("data-brand");
64
+ const vars = brandToCssVars(brand);
65
+ const previousValues = {};
66
+ for (const name of Object.keys(vars)) {
67
+ previousValues[name] = root.style.getPropertyValue(name);
68
+ }
69
+ root.setAttribute("data-brand", brand.id);
70
+ for (const [name, value] of Object.entries(vars)) {
71
+ root.style.setProperty(name, value);
72
+ }
73
+ return () => {
74
+ for (const [name, previousValue] of Object.entries(previousValues)) {
75
+ if (root.style.getPropertyValue(name) !== vars[name]) continue;
76
+ if (previousValue === "") {
77
+ root.style.removeProperty(name);
78
+ } else {
79
+ root.style.setProperty(name, previousValue);
80
+ }
81
+ }
82
+ if (root.getAttribute("data-brand") === brand.id) {
83
+ if (previousBrand === null) {
84
+ root.removeAttribute("data-brand");
85
+ } else {
86
+ root.setAttribute("data-brand", previousBrand);
87
+ }
88
+ }
89
+ };
90
+ }, [brand]);
91
+ return /* @__PURE__ */ jsxRuntime.jsxs(ThemeContext, { value: { brand, setBrand }, children: [
92
+ /* @__PURE__ */ jsxRuntime.jsx(AIGradientsSvg, {}),
93
+ children
94
+ ] });
95
+ };
96
+ var renderWithTheme = (ui, options = {}) => {
97
+ const { brand = brandRegistry.keboola, ...rest } = options;
98
+ return react$1.render(ui, {
99
+ ...rest,
100
+ wrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx(ThemeProvider, { brand, children })
101
+ });
102
+ };
103
+
104
+ exports.renderWithTheme = renderWithTheme;
105
+ //# sourceMappingURL=testing.cjs.map
106
+ //# sourceMappingURL=testing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ThemeProvider/AIGradientSvg.tsx","../src/components/ThemeProvider/brandToCssVars.ts","../src/components/ThemeProvider/themeContext.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/testing/renderWithTheme.tsx"],"names":["jsx","jsxs","createContext","keboola","useEffect","render"],"mappings":"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","file":"testing.cjs","sourcesContent":["export const AIGradientsSvg = () => (\n <svg width=\"0\" height=\"0\" style={{ position: 'absolute', visibility: 'hidden' }}>\n <defs>\n {/*aigradient-600*/}\n <linearGradient id=\"aigradient-600\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#61E4FF\" />\n <stop offset=\"50%\" stopColor=\"#1F8FFF\" />\n <stop offset=\"100%\" stopColor=\"#7C5CFF\" />\n </linearGradient>\n\n {/*aigradient-700*/}\n <linearGradient id=\"aigradient-700\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#075fb8\" />\n <stop offset=\"100%\" stopColor=\"#5b2cb8\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import type { Brand } from '@keboola/brand-registry';\n\n/**\n * Convert a `#RRGGBB` (or `#RGB`) string to a `R G B` triplet (space-separated).\n *\n * The canonical `:root` block in `styles.css` stores `--color-*` values as\n * space-separated channel values so Tailwind's `rgb(var(--color-*) / <alpha-value>)`\n * helper can compose the alpha modifier. Returns `null` for any input that\n * isn't a recognized hex string — callers should fall back to leaving the\n * slot untouched rather than injecting an invalid value.\n */\nconst hexToRgbTriplet = (hex: string): string | null => {\n const match = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());\n if (!match) return null;\n\n let body = match[1]!;\n if (body.length === 3) {\n body = body\n .split('')\n .map((c) => c + c)\n .join('');\n }\n const r = parseInt(body.slice(0, 2), 16);\n const g = parseInt(body.slice(2, 4), 16);\n const b = parseInt(body.slice(4, 6), 16);\n return `${r} ${g} ${b}`;\n};\n\n/**\n * Map every brand-overridable slot to the matching CSS variable on `:root`.\n *\n * Brands today only expose a subset of the semantic surface shipped by\n * `@keboola/design/styles` (`accent`, `popover`, `sidebar.*`, `success`,\n * `input` are not yet brand-overridable). Slots the brand doesn't define\n * are omitted — `ThemeProvider` only captures/restores the keys returned\n * here, so unset slots inherit whatever is already live on `<html>` (an\n * outer provider's value, or the `:root` defaults in `styles.css` if no\n * outer provider has touched them). This cascades the way CSS does: an\n * inner brand without `radii` keeps the outer's radii rather than\n * snapping back to `:root`.\n */\nexport const brandToCssVars = (brand: Brand): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n const colorMap: [string, string][] = [\n ['--color-background', brand.colors.background],\n ['--color-foreground', brand.colors.foreground],\n ['--color-muted', brand.colors.muted],\n ['--color-muted-foreground', brand.colors.mutedForeground],\n ['--color-border', brand.colors.border],\n ['--color-primary', brand.colors.primary],\n ['--color-primary-foreground', brand.colors.primaryForeground],\n ['--color-destructive', brand.colors.destructive],\n ['--color-destructive-foreground', brand.colors.destructiveForeground],\n ];\n for (const [name, hex] of colorMap) {\n const triplet = hexToRgbTriplet(hex);\n if (triplet !== null) vars[name] = triplet;\n }\n\n if (brand.radii) {\n vars['--radius-sm'] = brand.radii.sm;\n vars['--radius-md'] = brand.radii.md;\n vars['--radius-lg'] = brand.radii.lg;\n }\n\n return vars;\n};\n","import { createContext } from 'react';\n\nimport type { Brand } from '@keboola/brand-registry';\n\nexport type ThemeContextValue = {\n brand: Brand;\n setBrand?: (brand: Brand) => void;\n};\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n","import { type ReactNode, useEffect } from 'react';\n\nimport { type Brand, keboola } from '@keboola/brand-registry';\n\nimport { AIGradientsSvg } from './AIGradientSvg';\nimport { brandToCssVars } from './brandToCssVars';\nimport { ThemeContext } from './themeContext';\n\ntype Props = {\n /**\n * Brand whose tokens drive the chrome (`@keboola/design`'s semantic CSS\n * variables) inside this provider's subtree. Defaults to the canonical\n * `keboola` brand so existing apps that mount `<ThemeProvider>` without a\n * `brand` prop continue to render as today.\n */\n brand?: Brand;\n /**\n * Optional setter exposed through `useTheme()` so consumers can flip\n * brands at runtime (Storybook toolbar, a customer-impersonation switch).\n */\n setBrand?: (brand: Brand) => void;\n children: ReactNode;\n};\n\n/**\n * Responsibilities:\n * - Render hidden SVG gradient definitions (`aigradient-600`, `aigradient-700`).\n * - Set `data-brand=\"<brand.id>\"` on `<html>` and inject the matching `--color-*` /\n * `--radius-*` CSS variables so chrome re-skins for the supplied brand.\n * - Expose `{ brand, setBrand? }` via `useTheme()` (throws outside the provider).\n *\n * The slots a brand can override today are a subset of the canonical\n * `:root` block in `styles.css`. Slots the brand doesn't define fall back\n * to the `:root` defaults — we deliberately do not write empty strings.\n *\n * `data-brand` (brand id) is intentionally separate from `data-theme`\n * (light/dark mode, defined by the `[data-theme='dark']` block in\n * `styles.css`) so the two axes compose without clobbering each other.\n */\nexport const ThemeProvider = ({ brand = keboola, setBrand, children }: Props) => {\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n\n // Capture the previous `data-brand` + per-property inline-style values\n // so cleanup can restore them. Cleanup only restores values that\n // weren't overwritten by some other provider in between — without that\n // check, an inner provider unmounting after an outer one wrote new\n // values would clobber the outer's brand back to bare `:root` (React\n // runs child effects before parent effects on mount, so the inner's\n // captured \"previous\" is stale by the time it unmounts).\n const previousBrand = root.getAttribute('data-brand');\n const vars = brandToCssVars(brand);\n const previousValues: Record<string, string> = {};\n for (const name of Object.keys(vars)) {\n previousValues[name] = root.style.getPropertyValue(name);\n }\n\n root.setAttribute('data-brand', brand.id);\n for (const [name, value] of Object.entries(vars)) {\n root.style.setProperty(name, value);\n }\n\n return () => {\n for (const [name, previousValue] of Object.entries(previousValues)) {\n // Only roll back if our value is still live — if someone else\n // (an outer provider, a sibling) has since written a different\n // value, leave it alone.\n if (root.style.getPropertyValue(name) !== vars[name]) continue;\n if (previousValue === '') {\n root.style.removeProperty(name);\n } else {\n root.style.setProperty(name, previousValue);\n }\n }\n if (root.getAttribute('data-brand') === brand.id) {\n if (previousBrand === null) {\n root.removeAttribute('data-brand');\n } else {\n root.setAttribute('data-brand', previousBrand);\n }\n }\n };\n }, [brand]);\n\n return (\n <ThemeContext value={{ brand, setBrand }}>\n <AIGradientsSvg />\n {children}\n </ThemeContext>\n );\n};\n","import type { ReactElement } from 'react';\nimport { render, type RenderOptions, type RenderResult } from '@testing-library/react';\n\nimport { type Brand, keboola } from '@keboola/brand-registry';\n\nimport { ThemeProvider } from '../components/ThemeProvider';\n\ntype Options = Omit<RenderOptions, 'wrapper'> & {\n /** Brand to drive the wrapping `<ThemeProvider>`. Defaults to `keboola`. */\n brand?: Brand;\n};\n\n/**\n * `@testing-library/react` `render` wrapped in a `<ThemeProvider brand={...}>`.\n *\n * Use in unit tests for any component that calls `useTheme()` or relies on\n * the brand-driven CSS variables. Defaults to the canonical Keboola brand so\n * callers can opt into a specific brand only when they need to assert\n * brand-dependent behaviour (e.g. chrome re-skins under `keboola-legacy`).\n */\nexport const renderWithTheme = (ui: ReactElement, options: Options = {}): RenderResult => {\n const { brand = keboola, ...rest } = options;\n return render(ui, {\n ...rest,\n wrapper: ({ children }) => <ThemeProvider brand={brand}>{children}</ThemeProvider>,\n });\n};\n"]}
@@ -0,0 +1,19 @@
1
+ import { ReactElement } from 'react';
2
+ import { RenderOptions, RenderResult } from '@testing-library/react';
3
+ import { Brand } from '@keboola/brand-registry';
4
+
5
+ type Options = Omit<RenderOptions, 'wrapper'> & {
6
+ /** Brand to drive the wrapping `<ThemeProvider>`. Defaults to `keboola`. */
7
+ brand?: Brand;
8
+ };
9
+ /**
10
+ * `@testing-library/react` `render` wrapped in a `<ThemeProvider brand={...}>`.
11
+ *
12
+ * Use in unit tests for any component that calls `useTheme()` or relies on
13
+ * the brand-driven CSS variables. Defaults to the canonical Keboola brand so
14
+ * callers can opt into a specific brand only when they need to assert
15
+ * brand-dependent behaviour (e.g. chrome re-skins under `keboola-legacy`).
16
+ */
17
+ declare const renderWithTheme: (ui: ReactElement, options?: Options) => RenderResult;
18
+
19
+ export { renderWithTheme };
@@ -0,0 +1,19 @@
1
+ import { ReactElement } from 'react';
2
+ import { RenderOptions, RenderResult } from '@testing-library/react';
3
+ import { Brand } from '@keboola/brand-registry';
4
+
5
+ type Options = Omit<RenderOptions, 'wrapper'> & {
6
+ /** Brand to drive the wrapping `<ThemeProvider>`. Defaults to `keboola`. */
7
+ brand?: Brand;
8
+ };
9
+ /**
10
+ * `@testing-library/react` `render` wrapped in a `<ThemeProvider brand={...}>`.
11
+ *
12
+ * Use in unit tests for any component that calls `useTheme()` or relies on
13
+ * the brand-driven CSS variables. Defaults to the canonical Keboola brand so
14
+ * callers can opt into a specific brand only when they need to assert
15
+ * brand-dependent behaviour (e.g. chrome re-skins under `keboola-legacy`).
16
+ */
17
+ declare const renderWithTheme: (ui: ReactElement, options?: Options) => RenderResult;
18
+
19
+ export { renderWithTheme };
@@ -0,0 +1,104 @@
1
+ import { render } from '@testing-library/react';
2
+ import { keboola } from '@keboola/brand-registry';
3
+ import { createContext, useEffect } from 'react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ // src/testing/renderWithTheme.tsx
7
+ var AIGradientsSvg = () => /* @__PURE__ */ jsx("svg", { width: "0", height: "0", style: { position: "absolute", visibility: "hidden" }, children: /* @__PURE__ */ jsxs("defs", { children: [
8
+ /* @__PURE__ */ jsxs("linearGradient", { id: "aigradient-600", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
9
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "#61E4FF" }),
10
+ /* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "#1F8FFF" }),
11
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "#7C5CFF" })
12
+ ] }),
13
+ /* @__PURE__ */ jsxs("linearGradient", { id: "aigradient-700", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
14
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "#075fb8" }),
15
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "#5b2cb8" })
16
+ ] })
17
+ ] }) });
18
+
19
+ // src/components/ThemeProvider/brandToCssVars.ts
20
+ var hexToRgbTriplet = (hex) => {
21
+ const match = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());
22
+ if (!match) return null;
23
+ let body = match[1];
24
+ if (body.length === 3) {
25
+ body = body.split("").map((c) => c + c).join("");
26
+ }
27
+ const r = parseInt(body.slice(0, 2), 16);
28
+ const g = parseInt(body.slice(2, 4), 16);
29
+ const b = parseInt(body.slice(4, 6), 16);
30
+ return `${r} ${g} ${b}`;
31
+ };
32
+ var brandToCssVars = (brand) => {
33
+ const vars = {};
34
+ const colorMap = [
35
+ ["--color-background", brand.colors.background],
36
+ ["--color-foreground", brand.colors.foreground],
37
+ ["--color-muted", brand.colors.muted],
38
+ ["--color-muted-foreground", brand.colors.mutedForeground],
39
+ ["--color-border", brand.colors.border],
40
+ ["--color-primary", brand.colors.primary],
41
+ ["--color-primary-foreground", brand.colors.primaryForeground],
42
+ ["--color-destructive", brand.colors.destructive],
43
+ ["--color-destructive-foreground", brand.colors.destructiveForeground]
44
+ ];
45
+ for (const [name, hex] of colorMap) {
46
+ const triplet = hexToRgbTriplet(hex);
47
+ if (triplet !== null) vars[name] = triplet;
48
+ }
49
+ if (brand.radii) {
50
+ vars["--radius-sm"] = brand.radii.sm;
51
+ vars["--radius-md"] = brand.radii.md;
52
+ vars["--radius-lg"] = brand.radii.lg;
53
+ }
54
+ return vars;
55
+ };
56
+ var ThemeContext = createContext(null);
57
+ var ThemeProvider = ({ brand = keboola, setBrand, children }) => {
58
+ useEffect(() => {
59
+ if (typeof document === "undefined") return;
60
+ const root = document.documentElement;
61
+ const previousBrand = root.getAttribute("data-brand");
62
+ const vars = brandToCssVars(brand);
63
+ const previousValues = {};
64
+ for (const name of Object.keys(vars)) {
65
+ previousValues[name] = root.style.getPropertyValue(name);
66
+ }
67
+ root.setAttribute("data-brand", brand.id);
68
+ for (const [name, value] of Object.entries(vars)) {
69
+ root.style.setProperty(name, value);
70
+ }
71
+ return () => {
72
+ for (const [name, previousValue] of Object.entries(previousValues)) {
73
+ if (root.style.getPropertyValue(name) !== vars[name]) continue;
74
+ if (previousValue === "") {
75
+ root.style.removeProperty(name);
76
+ } else {
77
+ root.style.setProperty(name, previousValue);
78
+ }
79
+ }
80
+ if (root.getAttribute("data-brand") === brand.id) {
81
+ if (previousBrand === null) {
82
+ root.removeAttribute("data-brand");
83
+ } else {
84
+ root.setAttribute("data-brand", previousBrand);
85
+ }
86
+ }
87
+ };
88
+ }, [brand]);
89
+ return /* @__PURE__ */ jsxs(ThemeContext, { value: { brand, setBrand }, children: [
90
+ /* @__PURE__ */ jsx(AIGradientsSvg, {}),
91
+ children
92
+ ] });
93
+ };
94
+ var renderWithTheme = (ui, options = {}) => {
95
+ const { brand = keboola, ...rest } = options;
96
+ return render(ui, {
97
+ ...rest,
98
+ wrapper: ({ children }) => /* @__PURE__ */ jsx(ThemeProvider, { brand, children })
99
+ });
100
+ };
101
+
102
+ export { renderWithTheme };
103
+ //# sourceMappingURL=testing.js.map
104
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ThemeProvider/AIGradientSvg.tsx","../src/components/ThemeProvider/brandToCssVars.ts","../src/components/ThemeProvider/themeContext.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/testing/renderWithTheme.tsx"],"names":["jsxs","jsx","keboola"],"mappings":"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","file":"testing.js","sourcesContent":["export const AIGradientsSvg = () => (\n <svg width=\"0\" height=\"0\" style={{ position: 'absolute', visibility: 'hidden' }}>\n <defs>\n {/*aigradient-600*/}\n <linearGradient id=\"aigradient-600\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#61E4FF\" />\n <stop offset=\"50%\" stopColor=\"#1F8FFF\" />\n <stop offset=\"100%\" stopColor=\"#7C5CFF\" />\n </linearGradient>\n\n {/*aigradient-700*/}\n <linearGradient id=\"aigradient-700\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#075fb8\" />\n <stop offset=\"100%\" stopColor=\"#5b2cb8\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import type { Brand } from '@keboola/brand-registry';\n\n/**\n * Convert a `#RRGGBB` (or `#RGB`) string to a `R G B` triplet (space-separated).\n *\n * The canonical `:root` block in `styles.css` stores `--color-*` values as\n * space-separated channel values so Tailwind's `rgb(var(--color-*) / <alpha-value>)`\n * helper can compose the alpha modifier. Returns `null` for any input that\n * isn't a recognized hex string — callers should fall back to leaving the\n * slot untouched rather than injecting an invalid value.\n */\nconst hexToRgbTriplet = (hex: string): string | null => {\n const match = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());\n if (!match) return null;\n\n let body = match[1]!;\n if (body.length === 3) {\n body = body\n .split('')\n .map((c) => c + c)\n .join('');\n }\n const r = parseInt(body.slice(0, 2), 16);\n const g = parseInt(body.slice(2, 4), 16);\n const b = parseInt(body.slice(4, 6), 16);\n return `${r} ${g} ${b}`;\n};\n\n/**\n * Map every brand-overridable slot to the matching CSS variable on `:root`.\n *\n * Brands today only expose a subset of the semantic surface shipped by\n * `@keboola/design/styles` (`accent`, `popover`, `sidebar.*`, `success`,\n * `input` are not yet brand-overridable). Slots the brand doesn't define\n * are omitted — `ThemeProvider` only captures/restores the keys returned\n * here, so unset slots inherit whatever is already live on `<html>` (an\n * outer provider's value, or the `:root` defaults in `styles.css` if no\n * outer provider has touched them). This cascades the way CSS does: an\n * inner brand without `radii` keeps the outer's radii rather than\n * snapping back to `:root`.\n */\nexport const brandToCssVars = (brand: Brand): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n const colorMap: [string, string][] = [\n ['--color-background', brand.colors.background],\n ['--color-foreground', brand.colors.foreground],\n ['--color-muted', brand.colors.muted],\n ['--color-muted-foreground', brand.colors.mutedForeground],\n ['--color-border', brand.colors.border],\n ['--color-primary', brand.colors.primary],\n ['--color-primary-foreground', brand.colors.primaryForeground],\n ['--color-destructive', brand.colors.destructive],\n ['--color-destructive-foreground', brand.colors.destructiveForeground],\n ];\n for (const [name, hex] of colorMap) {\n const triplet = hexToRgbTriplet(hex);\n if (triplet !== null) vars[name] = triplet;\n }\n\n if (brand.radii) {\n vars['--radius-sm'] = brand.radii.sm;\n vars['--radius-md'] = brand.radii.md;\n vars['--radius-lg'] = brand.radii.lg;\n }\n\n return vars;\n};\n","import { createContext } from 'react';\n\nimport type { Brand } from '@keboola/brand-registry';\n\nexport type ThemeContextValue = {\n brand: Brand;\n setBrand?: (brand: Brand) => void;\n};\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n","import { type ReactNode, useEffect } from 'react';\n\nimport { type Brand, keboola } from '@keboola/brand-registry';\n\nimport { AIGradientsSvg } from './AIGradientSvg';\nimport { brandToCssVars } from './brandToCssVars';\nimport { ThemeContext } from './themeContext';\n\ntype Props = {\n /**\n * Brand whose tokens drive the chrome (`@keboola/design`'s semantic CSS\n * variables) inside this provider's subtree. Defaults to the canonical\n * `keboola` brand so existing apps that mount `<ThemeProvider>` without a\n * `brand` prop continue to render as today.\n */\n brand?: Brand;\n /**\n * Optional setter exposed through `useTheme()` so consumers can flip\n * brands at runtime (Storybook toolbar, a customer-impersonation switch).\n */\n setBrand?: (brand: Brand) => void;\n children: ReactNode;\n};\n\n/**\n * Responsibilities:\n * - Render hidden SVG gradient definitions (`aigradient-600`, `aigradient-700`).\n * - Set `data-brand=\"<brand.id>\"` on `<html>` and inject the matching `--color-*` /\n * `--radius-*` CSS variables so chrome re-skins for the supplied brand.\n * - Expose `{ brand, setBrand? }` via `useTheme()` (throws outside the provider).\n *\n * The slots a brand can override today are a subset of the canonical\n * `:root` block in `styles.css`. Slots the brand doesn't define fall back\n * to the `:root` defaults — we deliberately do not write empty strings.\n *\n * `data-brand` (brand id) is intentionally separate from `data-theme`\n * (light/dark mode, defined by the `[data-theme='dark']` block in\n * `styles.css`) so the two axes compose without clobbering each other.\n */\nexport const ThemeProvider = ({ brand = keboola, setBrand, children }: Props) => {\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n\n // Capture the previous `data-brand` + per-property inline-style values\n // so cleanup can restore them. Cleanup only restores values that\n // weren't overwritten by some other provider in between — without that\n // check, an inner provider unmounting after an outer one wrote new\n // values would clobber the outer's brand back to bare `:root` (React\n // runs child effects before parent effects on mount, so the inner's\n // captured \"previous\" is stale by the time it unmounts).\n const previousBrand = root.getAttribute('data-brand');\n const vars = brandToCssVars(brand);\n const previousValues: Record<string, string> = {};\n for (const name of Object.keys(vars)) {\n previousValues[name] = root.style.getPropertyValue(name);\n }\n\n root.setAttribute('data-brand', brand.id);\n for (const [name, value] of Object.entries(vars)) {\n root.style.setProperty(name, value);\n }\n\n return () => {\n for (const [name, previousValue] of Object.entries(previousValues)) {\n // Only roll back if our value is still live — if someone else\n // (an outer provider, a sibling) has since written a different\n // value, leave it alone.\n if (root.style.getPropertyValue(name) !== vars[name]) continue;\n if (previousValue === '') {\n root.style.removeProperty(name);\n } else {\n root.style.setProperty(name, previousValue);\n }\n }\n if (root.getAttribute('data-brand') === brand.id) {\n if (previousBrand === null) {\n root.removeAttribute('data-brand');\n } else {\n root.setAttribute('data-brand', previousBrand);\n }\n }\n };\n }, [brand]);\n\n return (\n <ThemeContext value={{ brand, setBrand }}>\n <AIGradientsSvg />\n {children}\n </ThemeContext>\n );\n};\n","import type { ReactElement } from 'react';\nimport { render, type RenderOptions, type RenderResult } from '@testing-library/react';\n\nimport { type Brand, keboola } from '@keboola/brand-registry';\n\nimport { ThemeProvider } from '../components/ThemeProvider';\n\ntype Options = Omit<RenderOptions, 'wrapper'> & {\n /** Brand to drive the wrapping `<ThemeProvider>`. Defaults to `keboola`. */\n brand?: Brand;\n};\n\n/**\n * `@testing-library/react` `render` wrapped in a `<ThemeProvider brand={...}>`.\n *\n * Use in unit tests for any component that calls `useTheme()` or relies on\n * the brand-driven CSS variables. Defaults to the canonical Keboola brand so\n * callers can opt into a specific brand only when they need to assert\n * brand-dependent behaviour (e.g. chrome re-skins under `keboola-legacy`).\n */\nexport const renderWithTheme = (ui: ReactElement, options: Options = {}): RenderResult => {\n const { brand = keboola, ...rest } = options;\n return render(ui, {\n ...rest,\n wrapper: ({ children }) => <ThemeProvider brand={brand}>{children}</ThemeProvider>,\n });\n};\n"]}
package/package.json CHANGED
@@ -1,24 +1,88 @@
1
1
  {
2
2
  "name": "@keboola/design",
3
- "version": "2.0.1",
3
+ "version": "3.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": "./src/index.ts",
10
+ "main": "./dist/index.cjs",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "typesVersions": {
14
+ "*": {
15
+ "mermaid": [
16
+ "./dist/mermaid.d.ts"
17
+ ],
18
+ "markdown-editor": [
19
+ "./dist/markdown-editor.d.ts"
20
+ ],
21
+ "icons": [
22
+ "./dist/icons.d.ts"
23
+ ],
24
+ "testing": [
25
+ "./dist/testing.d.ts"
26
+ ]
27
+ }
28
+ },
11
29
  "exports": {
12
- ".": "./src/index.ts",
30
+ ".": {
31
+ "import": {
32
+ "types": "./dist/index.d.ts",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "require": {
36
+ "types": "./dist/index.d.cts",
37
+ "default": "./dist/index.cjs"
38
+ }
39
+ },
13
40
  "./styles": "./src/styles.css",
14
- "./mermaid": "./src/blocks/MermaidDiagram/index.ts",
15
- "./markdown-editor": "./src/components/MarkdownEditor/index.ts",
16
- "./icons": "./src/icons/index.ts",
17
- "./icon-names": "./src/icon-names.ts"
41
+ "./styles/compiled": "./dist/styles.css",
42
+ "./mermaid": {
43
+ "import": {
44
+ "types": "./dist/mermaid.d.ts",
45
+ "default": "./dist/mermaid.js"
46
+ },
47
+ "require": {
48
+ "types": "./dist/mermaid.d.cts",
49
+ "default": "./dist/mermaid.cjs"
50
+ }
51
+ },
52
+ "./markdown-editor": {
53
+ "import": {
54
+ "types": "./dist/markdown-editor.d.ts",
55
+ "default": "./dist/markdown-editor.js"
56
+ },
57
+ "require": {
58
+ "types": "./dist/markdown-editor.d.cts",
59
+ "default": "./dist/markdown-editor.cjs"
60
+ }
61
+ },
62
+ "./icons": {
63
+ "import": {
64
+ "types": "./dist/icons.d.ts",
65
+ "default": "./dist/icons.js"
66
+ },
67
+ "require": {
68
+ "types": "./dist/icons.d.cts",
69
+ "default": "./dist/icons.cjs"
70
+ }
71
+ },
72
+ "./testing": {
73
+ "import": {
74
+ "types": "./dist/testing.d.ts",
75
+ "default": "./dist/testing.js"
76
+ },
77
+ "require": {
78
+ "types": "./dist/testing.d.cts",
79
+ "default": "./dist/testing.cjs"
80
+ }
81
+ }
18
82
  },
19
83
  "files": [
20
84
  "dist",
21
- "src",
85
+ "src/styles.css",
22
86
  "README.md"
23
87
  ],
24
88
  "publishConfig": {
@@ -45,23 +109,30 @@
45
109
  "scripts": {
46
110
  "dev": "storybook dev -p 6006",
47
111
  "build-storybook": "storybook build",
112
+ "transit": "yarn build",
48
113
  "build": "yarn build:js && yarn build:css",
49
114
  "build:js": "tsup",
50
115
  "build:css": "tailwindcss --postcss -c tailwind.config.js -i src/styles.css -o dist/styles.css --minify",
51
- "test": "vitest run --passWithNoTests --reporter=dot",
52
- "test:stories": "vitest run --config vitest.storybook.config.ts",
53
- "lint": "yarn lint:format && yarn lint:oxlint",
116
+ "build:check": "attw --pack . --exclude-entrypoints ./styles ./styles/compiled",
117
+ "prepublishOnly": "yarn build && yarn build:check",
118
+ "test": "vitest run --config vite.config.ts --passWithNoTests --reporter=dot",
119
+ "test:stories": "vitest run --config vitest.config.ts",
120
+ "test:stories:coverage": "vitest run --config vitest.config.ts --coverage",
121
+ "lint": "yarn lint:format && yarn lint:oxlint && yarn lint:design",
54
122
  "lint:fix": "oxlint --fix . && oxfmt",
55
123
  "knip:check": "yarn --cwd ../.. exec knip --workspace packages/design",
56
124
  "knip:fix": "yarn --cwd ../.. exec knip --workspace packages/design --fix-type types,exports,files",
57
125
  "lint:format": "oxfmt --check",
58
126
  "lint:oxlint": "oxlint . --quiet",
127
+ "lint:design": "designmd lint DESIGN.md",
59
128
  "type-check": "tsc"
60
129
  },
61
130
  "engines": {
62
131
  "node": "24.x"
63
132
  },
64
133
  "devDependencies": {
134
+ "@arethetypeswrong/cli": "^0.18.2",
135
+ "@google/design.md": "0.2.0",
65
136
  "@keboola/oxlint-config": "workspace:^",
66
137
  "@keboola/postcss-config": "workspace:^",
67
138
  "@keboola/tsconfig": "workspace:^",
@@ -75,7 +146,8 @@
75
146
  "@types/react": "^19.2.15",
76
147
  "@vitejs/plugin-react": "^6.0.0",
77
148
  "@vitest/browser": "4.1.8",
78
- "@vitest/browser-playwright": "4.1.2",
149
+ "@vitest/browser-playwright": "4.1.8",
150
+ "@vitest/coverage-istanbul": "4.1.8",
79
151
  "eslint-plugin-storybook": "^10.3.5",
80
152
  "oxfmt": "^0.44.0",
81
153
  "oxlint": "^1.56.0",
@@ -87,8 +159,15 @@
87
159
  "vite": "^8.0.16",
88
160
  "vitest": "^4.1.8"
89
161
  },
162
+ "peerDependencies": {
163
+ "@testing-library/react": "^16.3.2"
164
+ },
165
+ "peerDependenciesMeta": {
166
+ "@testing-library/react": {
167
+ "optional": true
168
+ }
169
+ },
90
170
  "dependencies": {
91
- "@awesome.me/kit-be8bcf7e5e": "1.0.223",
92
171
  "@base-ui/react": "1.5.0",
93
172
  "@codemirror/autocomplete": "^6.20.1",
94
173
  "@codemirror/commands": "^6.10.3",
@@ -102,8 +181,7 @@
102
181
  "@codemirror/merge": "^6.12.1",
103
182
  "@codemirror/state": "^6.6.0",
104
183
  "@codemirror/view": "^6.41.0",
105
- "@fortawesome/fontawesome-svg-core": "^6.7.2",
106
- "@fortawesome/react-fontawesome": "^0.2.2",
184
+ "@keboola/brand-registry": "^0.1.2",
107
185
  "@keboola/codemirror-lang-sfsql": "^1.2.0",
108
186
  "@keboola/codemirror-lang-sql": "^0.2.0",
109
187
  "@keboola/tailwind-config": "^0.1.1",
@@ -152,6 +230,7 @@
152
230
  "react": "^19.2.6",
153
231
  "react-day-picker": "^9.13.0",
154
232
  "react-dom": "^19.2.6",
233
+ "react-dropzone": "^14.2.3",
155
234
  "react-resizable-panels": "^3.0.4",
156
235
  "react-textarea-autosize": "^8.5.9",
157
236
  "sonner": "^2.0.7",
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- var icons = require('@awesome.me/kit-be8bcf7e5e/icons');
4
-
5
- // src/icon-names.ts
6
- var getAvailableIconNames = () => {
7
- const names = /* @__PURE__ */ new Set();
8
- for (const def of Object.values(icons.fas)) {
9
- if (def !== null && typeof def === "object" && "iconName" in def && typeof def.iconName === "string") {
10
- names.add(def.iconName);
11
- }
12
- }
13
- return [...names].sort();
14
- };
15
-
16
- exports.getAvailableIconNames = getAvailableIconNames;
17
- //# sourceMappingURL=icon-names.cjs.map
18
- //# sourceMappingURL=icon-names.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/icon-names.ts"],"names":["fas"],"mappings":";;;;;AAMO,IAAM,wBAAwB,MAAgB;AACnD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,MAAA,CAAOA,SAAG,CAAA,EAAG;AACpC,IAAA,IACE,GAAA,KAAQ,IAAA,IACR,OAAO,GAAA,KAAQ,QAAA,IACf,cAAc,GAAA,IACd,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,EACxB;AACA,MAAA,KAAA,CAAM,GAAA,CAAI,IAAI,QAAQ,CAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,EAAK;AACzB","file":"icon-names.cjs","sourcesContent":["import { fas } from '@awesome.me/kit-be8bcf7e5e/icons';\n\n/**\n * Reads available FontAwesome solid icon names from the FA kit.\n * Returns deduplicated, sorted kebab-case icon names (e.g. \"chart-bar\", \"circle-check\").\n */\nexport const getAvailableIconNames = (): string[] => {\n const names = new Set<string>();\n for (const def of Object.values(fas)) {\n if (\n def !== null &&\n typeof def === 'object' &&\n 'iconName' in def &&\n typeof def.iconName === 'string'\n ) {\n names.add(def.iconName);\n }\n }\n return [...names].sort();\n};\n"]}
@@ -1,16 +0,0 @@
1
- import { fas } from '@awesome.me/kit-be8bcf7e5e/icons';
2
-
3
- // src/icon-names.ts
4
- var getAvailableIconNames = () => {
5
- const names = /* @__PURE__ */ new Set();
6
- for (const def of Object.values(fas)) {
7
- if (def !== null && typeof def === "object" && "iconName" in def && typeof def.iconName === "string") {
8
- names.add(def.iconName);
9
- }
10
- }
11
- return [...names].sort();
12
- };
13
-
14
- export { getAvailableIconNames };
15
- //# sourceMappingURL=icon-names.js.map
16
- //# sourceMappingURL=icon-names.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/icon-names.ts"],"names":[],"mappings":";;;AAMO,IAAM,wBAAwB,MAAgB;AACnD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,EAAG;AACpC,IAAA,IACE,GAAA,KAAQ,IAAA,IACR,OAAO,GAAA,KAAQ,QAAA,IACf,cAAc,GAAA,IACd,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,EACxB;AACA,MAAA,KAAA,CAAM,GAAA,CAAI,IAAI,QAAQ,CAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,EAAK;AACzB","file":"icon-names.js","sourcesContent":["import { fas } from '@awesome.me/kit-be8bcf7e5e/icons';\n\n/**\n * Reads available FontAwesome solid icon names from the FA kit.\n * Returns deduplicated, sorted kebab-case icon names (e.g. \"chart-bar\", \"circle-check\").\n */\nexport const getAvailableIconNames = (): string[] => {\n const names = new Set<string>();\n for (const def of Object.values(fas)) {\n if (\n def !== null &&\n typeof def === 'object' &&\n 'iconName' in def &&\n typeof def.iconName === 'string'\n ) {\n names.add(def.iconName);\n }\n }\n return [...names].sort();\n};\n"]}
@@ -1,38 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
-
3
- import { AnswerSummary } from './AnswerSummary';
4
-
5
- export default {
6
- title: 'AI Kit/AnswerSummary',
7
- component: AnswerSummary,
8
- } satisfies Meta<typeof AnswerSummary>;
9
-
10
- type Story = StoryObj<typeof AnswerSummary>;
11
-
12
- export const Success: Story = {
13
- args: {
14
- variant: 'success',
15
- items: [
16
- { question: 'Which library should we use?', answer: 'date-fns' },
17
- { question: 'What features?', answer: 'parsing, formatting' },
18
- { question: 'Any custom?', answer: '' },
19
- ],
20
- },
21
- };
22
-
23
- export const Dismissed: Story = {
24
- args: {
25
- variant: 'dismissed',
26
- items: [
27
- { question: 'Which library should we use?', answer: 'User dismissed' },
28
- { question: 'What features?', answer: 'User dismissed' },
29
- ],
30
- },
31
- };
32
-
33
- export const Failed: Story = {
34
- args: {
35
- variant: 'dismissed',
36
- items: [{ question: 'Which library should we use?', answer: 'Tool failed' }],
37
- },
38
- };
@@ -1,63 +0,0 @@
1
- import { useState } from 'react';
2
-
3
- import { CollapsibleStepHeader } from './CollapsibleStepHeader';
4
- import { InlineStepDetail } from './InlineStepDetail';
5
- import { InlineStepLabel } from './InlineStepLabel';
6
-
7
- type AnswerItem = {
8
- question: string;
9
- answer?: string;
10
- };
11
-
12
- type Variant = 'success' | 'dismissed';
13
-
14
- type Props = {
15
- items: readonly AnswerItem[];
16
- variant?: Variant;
17
- noAnswerLabel?: string;
18
- };
19
-
20
- const SECTION_LABELS: Record<Variant, string> = {
21
- success: 'Answered questions',
22
- dismissed: 'Dismissed questions',
23
- };
24
-
25
- export const AnswerSummary = ({
26
- items,
27
- variant = 'success',
28
- noAnswerLabel = 'No answer',
29
- }: Props) => {
30
- const [isExpanded, setIsExpanded] = useState(false);
31
- const toggle = () => setIsExpanded((prev) => !prev);
32
- const count = items.length;
33
-
34
- return (
35
- <section className="tw-mt-4 tw-flex tw-flex-col tw-gap-4" aria-label={SECTION_LABELS[variant]}>
36
- <CollapsibleStepHeader
37
- isExpanded={isExpanded}
38
- onToggle={toggle}
39
- variant={variant}
40
- label={`${count} question${count !== 1 ? 's' : ''}`}
41
- />
42
-
43
- {isExpanded && (
44
- <div className="tw-flex tw-flex-col tw-gap-4 tw-pl-5">
45
- {items.map(({ question, answer }, index) => (
46
- <div key={`${index}-${question}`} className="tw-flex tw-flex-col tw-gap-1">
47
- <InlineStepLabel variant={variant}>{question}</InlineStepLabel>
48
- <InlineStepDetail>
49
- {answer && answer.length > 0 ? answer : noAnswerLabel}
50
- </InlineStepDetail>
51
- </div>
52
- ))}
53
- </div>
54
- )}
55
- </section>
56
- );
57
- };
58
-
59
- export type {
60
- AnswerItem as AnswerSummaryItem,
61
- Props as AnswerSummaryProps,
62
- Variant as AnswerSummaryVariant,
63
- };