@keboola/design 11.4.0 → 11.5.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 (173) hide show
  1. package/AGENTS.md +191 -1
  2. package/CHANGELOG.md +358 -0
  3. package/COMPONENT-API.md +68 -47
  4. package/dist/{AIKit-DDg5DBCG.js → AIKit-CNX6aiKm.js} +208 -62
  5. package/dist/AIKit-CNX6aiKm.js.map +1 -0
  6. package/dist/{Alert-DHJFrWnS.js → Alert-Ba5b2YPq.js} +2 -2
  7. package/dist/{Alert-DHJFrWnS.js.map → Alert-Ba5b2YPq.js.map} +1 -1
  8. package/dist/{Badge-Ch26CXoP.js → Badge-D0pXdekt.js} +2 -2
  9. package/dist/Badge-D0pXdekt.js.map +1 -0
  10. package/dist/{BrandEditor-Go7w8Zj2.js → BrandEditor-CSANsxUz.js} +6 -6
  11. package/dist/{BrandEditor-Go7w8Zj2.js.map → BrandEditor-CSANsxUz.js.map} +1 -1
  12. package/dist/{BrandLogo-Dmi7jo21.js → BrandLogo-CoKBk4MI.js} +4 -4
  13. package/dist/BrandLogo-CoKBk4MI.js.map +1 -0
  14. package/dist/{Breadcrumb-uEkM6adI.js → Breadcrumb-g_xn_-Nf.js} +2 -2
  15. package/dist/{Breadcrumb-uEkM6adI.js.map → Breadcrumb-g_xn_-Nf.js.map} +1 -1
  16. package/dist/{Checkbox-fC0BuO2B.js → Checkbox-CUIn2jap.js} +2 -2
  17. package/dist/{Checkbox-fC0BuO2B.js.map → Checkbox-CUIn2jap.js.map} +1 -1
  18. package/dist/{Clipboard-ChPdiUy3.js → Clipboard-BTW6C-b_.js} +2 -2
  19. package/dist/{Clipboard-ChPdiUy3.js.map → Clipboard-BTW6C-b_.js.map} +1 -1
  20. package/dist/{ClipboardButton-D9pDjgkB.js → ClipboardButton-CwZJdRaz.js} +2 -2
  21. package/dist/{ClipboardButton-D9pDjgkB.js.map → ClipboardButton-CwZJdRaz.js.map} +1 -1
  22. package/dist/{CodeEditor-Cxy3HnKH.js → CodeEditor-C9zy7PxK.js} +6 -6
  23. package/dist/{CodeEditor-Cxy3HnKH.js.map → CodeEditor-C9zy7PxK.js.map} +1 -1
  24. package/dist/{ColorInput-Bxj-1eLT.js → ColorInput-BZV-u_94.js} +3 -3
  25. package/dist/{ColorInput-Bxj-1eLT.js.map → ColorInput-BZV-u_94.js.map} +1 -1
  26. package/dist/{Combobox-Cs_1pj2q.js → Combobox-BfIfaVMA.js} +273 -104
  27. package/dist/Combobox-BfIfaVMA.js.map +1 -0
  28. package/dist/{Command-B7ML9YMv.js → Command-Bfa1kpbt.js} +2 -2
  29. package/dist/{Command-B7ML9YMv.js.map → Command-Bfa1kpbt.js.map} +1 -1
  30. package/dist/{CopyField-BO_sh-HO.js → CopyField-DpT0Ngz1.js} +2 -2
  31. package/dist/{CopyField-BO_sh-HO.js.map → CopyField-DpT0Ngz1.js.map} +1 -1
  32. package/dist/{DateInput-ZdaMQo5i.js → DateInput-DiEd5uCL.js} +3 -3
  33. package/dist/{DateInput-ZdaMQo5i.js.map → DateInput-DiEd5uCL.js.map} +1 -1
  34. package/dist/{DateRangeInput-DkvNh_sT.js → DateRangeInput-DPfVYchl.js} +3 -3
  35. package/dist/{DateRangeInput-DkvNh_sT.js.map → DateRangeInput-DPfVYchl.js.map} +1 -1
  36. package/dist/{FieldItem-CCd9-xnp.js → FieldItem-B7XMmZSz.js} +3 -3
  37. package/dist/{FieldItem-CCd9-xnp.js.map → FieldItem-B7XMmZSz.js.map} +1 -1
  38. package/dist/{Form-k6PH-em3.js → Form-CsttTHn4.js} +7 -7
  39. package/dist/Form-CsttTHn4.js.map +1 -0
  40. package/dist/{FormGroup-DbcDtrgU.js → FormGroup-DHvTFdno.js} +3 -3
  41. package/dist/{FormGroup-DbcDtrgU.js.map → FormGroup-DHvTFdno.js.map} +1 -1
  42. package/dist/{InputGroup-BnLHY0eq.js → InputGroup-DcZRlVnN.js} +22 -14
  43. package/dist/InputGroup-DcZRlVnN.js.map +1 -0
  44. package/dist/{Kbd-CvSM3D3-.js → Kbd-Cvvt91Q8.js} +14 -4
  45. package/dist/Kbd-Cvvt91Q8.js.map +1 -0
  46. package/dist/{MermaidDiagram-WkonYErO.js → MermaidDiagram-CXG5tC6J.js} +19 -18
  47. package/dist/MermaidDiagram-CXG5tC6J.js.map +1 -0
  48. package/dist/{MultiActionButtonGroup-CxWH7yWK.js → MultiActionButtonGroup-DokHbPgM.js} +2 -2
  49. package/dist/{MultiActionButtonGroup-CxWH7yWK.js.map → MultiActionButtonGroup-DokHbPgM.js.map} +1 -1
  50. package/dist/{Navbar-B2UsolVU.js → Navbar-Liy1TPI7.js} +6 -6
  51. package/dist/{Navbar-B2UsolVU.js.map → Navbar-Liy1TPI7.js.map} +1 -1
  52. package/dist/PageHeader-Q3IpCnQd.js.map +1 -1
  53. package/dist/{PageToolbar-DnbFt14Q.js → PageToolbar-DExqEYGl.js} +2 -2
  54. package/dist/{PageToolbar-DnbFt14Q.js.map → PageToolbar-DExqEYGl.js.map} +1 -1
  55. package/dist/{Popconfirm-CILjmzKI.js → Popconfirm-5pBzT_HQ.js} +10 -11
  56. package/dist/{Popconfirm-CILjmzKI.js.map → Popconfirm-5pBzT_HQ.js.map} +1 -1
  57. package/dist/{RadioGroup-XFzFd1ti.js → RadioGroup-DXPbSj8P.js} +2 -2
  58. package/dist/{RadioGroup-XFzFd1ti.js.map → RadioGroup-DXPbSj8P.js.map} +1 -1
  59. package/dist/{Search-4Bxtt8hS.js → Search-5uQAiNIP.js} +2 -2
  60. package/dist/{Search-4Bxtt8hS.js.map → Search-5uQAiNIP.js.map} +1 -1
  61. package/dist/{SearchInput-f_oY9T4Z.js → SearchInput-D4UgAXJK.js} +3 -3
  62. package/dist/{SearchInput-f_oY9T4Z.js.map → SearchInput-D4UgAXJK.js.map} +1 -1
  63. package/dist/{SectionNav-BpJlisbT.js → SectionNav-OkKCjSA-.js} +3 -3
  64. package/dist/{SectionNav-BpJlisbT.js.map → SectionNav-OkKCjSA-.js.map} +1 -1
  65. package/dist/{Select-DpcgKqKB.js → Select-DV3Hak_l.js} +3 -4
  66. package/dist/Select-DV3Hak_l.js.map +1 -0
  67. package/dist/{Sidebar-Cm6I4dE1.js → Sidebar-D3cY1kha.js} +44 -20
  68. package/dist/Sidebar-D3cY1kha.js.map +1 -0
  69. package/dist/{Slider-pPC_3gz9.js → Slider-CRf-bB4y.js} +2 -2
  70. package/dist/{Slider-pPC_3gz9.js.map → Slider-CRf-bB4y.js.map} +1 -1
  71. package/dist/{Switch-ChfPKcTE.js → Switch-B0WdGSjz.js} +7 -7
  72. package/dist/{Switch-ChfPKcTE.js.map → Switch-B0WdGSjz.js.map} +1 -1
  73. package/dist/{TextInput-DHM6dHmn.js → TextInput-DH5SkbsE.js} +3 -3
  74. package/dist/{TextInput-DHM6dHmn.js.map → TextInput-DH5SkbsE.js.map} +1 -1
  75. package/dist/{ThemeProvider-DrQJtzpd.js → ThemeProvider-2RMdVGxO.js} +17 -12
  76. package/dist/{ThemeProvider-DrQJtzpd.js.map → ThemeProvider-2RMdVGxO.js.map} +1 -1
  77. package/dist/{Timeline-6btyJl4D.js → Timeline-BG5Xogxh.js} +11 -11
  78. package/dist/{Timeline-6btyJl4D.js.map → Timeline-BG5Xogxh.js.map} +1 -1
  79. package/dist/{Workbench-BzE-Vvd9.js → Workbench-UR2FBC7I.js} +3 -1
  80. package/dist/Workbench-UR2FBC7I.js.map +1 -0
  81. package/dist/{ZoomableSvg-BWnDkR61.js → ZoomableSvg-pooPb1Cu.js} +3 -3
  82. package/dist/{ZoomableSvg-BWnDkR61.js.map → ZoomableSvg-pooPb1Cu.js.map} +1 -1
  83. package/dist/editors.js +4 -4
  84. package/dist/flint.js +134 -8
  85. package/dist/flint.js.map +1 -1
  86. package/dist/index.d.ts +537 -135
  87. package/dist/index.js +40 -39
  88. package/dist/internal/blocks/AIKit.js +2 -2
  89. package/dist/internal/blocks/AuthLayout.js +118 -0
  90. package/dist/internal/blocks/AuthLayout.js.map +1 -0
  91. package/dist/internal/blocks/BrandEditor.js +1 -1
  92. package/dist/internal/blocks/ClipboardButton.js +1 -1
  93. package/dist/internal/blocks/ColorInput.js +1 -1
  94. package/dist/internal/blocks/Command.js +1 -1
  95. package/dist/internal/blocks/CopyField.js +1 -1
  96. package/dist/internal/blocks/DateInput.js +1 -1
  97. package/dist/internal/blocks/DateRangeInput.js +1 -1
  98. package/dist/internal/blocks/ExportMenu.js +1 -1
  99. package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +1 -1
  100. package/dist/internal/blocks/Form.js +1 -1
  101. package/dist/internal/blocks/FormGroup.js +1 -1
  102. package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
  103. package/dist/internal/blocks/MultiCombobox.js +107 -48
  104. package/dist/internal/blocks/MultiCombobox.js.map +1 -1
  105. package/dist/internal/blocks/NumberInput.js +1 -1
  106. package/dist/internal/blocks/PageToolbar.js +1 -1
  107. package/dist/internal/blocks/PasswordInput.js +2 -2
  108. package/dist/internal/blocks/SearchInput.js +1 -1
  109. package/dist/internal/blocks/SearchInputWithNavigation.js +2 -2
  110. package/dist/internal/blocks/SectionNav.js +1 -1
  111. package/dist/internal/blocks/TextInput.js +1 -1
  112. package/dist/internal/blocks/Textarea.js +1 -1
  113. package/dist/internal/blocks/TimeInput.js +2 -2
  114. package/dist/internal/components/Alert.js +1 -1
  115. package/dist/internal/components/Avatar.js +1 -1
  116. package/dist/internal/components/Badge.js +1 -1
  117. package/dist/internal/components/BrandLogo.js +1 -1
  118. package/dist/internal/components/Breadcrumb.js +1 -1
  119. package/dist/internal/components/Checkbox.js +1 -1
  120. package/dist/internal/components/Clipboard.js +1 -1
  121. package/dist/internal/components/CollapsiblePanel.js +1 -1
  122. package/dist/internal/components/Combobox.js +2 -2
  123. package/dist/internal/components/InputGroup.js +1 -1
  124. package/dist/internal/components/Kbd.js +1 -1
  125. package/dist/internal/components/Navbar.js +1 -1
  126. package/dist/internal/components/Popconfirm.js +1 -1
  127. package/dist/internal/components/RadioGroup.js +1 -1
  128. package/dist/internal/components/Search.js +1 -1
  129. package/dist/internal/components/Select.js +1 -1
  130. package/dist/internal/components/Sidebar.js +1 -1
  131. package/dist/internal/components/Slider.js +1 -1
  132. package/dist/internal/components/Switch.js +1 -1
  133. package/dist/internal/components/ThemeProvider.js +1 -1
  134. package/dist/internal/components/Timeline.js +1 -1
  135. package/dist/internal/components/Tooltip.js +1 -1
  136. package/dist/internal/components/Truncated.js +1 -1
  137. package/dist/internal/components/Workbench.js +1 -1
  138. package/dist/internal/components/ZoomableSvg.js +1 -1
  139. package/dist/internal/utils.js +2 -2
  140. package/dist/markdown-editor.js +29 -23
  141. package/dist/markdown-editor.js.map +1 -1
  142. package/dist/mermaid.js +1 -1
  143. package/dist/rjsf.js +22 -23
  144. package/dist/rjsf.js.map +1 -1
  145. package/dist/styles.css +1 -1
  146. package/dist/testing.js +1 -1
  147. package/dist/{useColorSchemeState-klihG9-i.js → themeScopeContext-D7fSyb06.js} +16 -3
  148. package/dist/themeScopeContext-D7fSyb06.js.map +1 -0
  149. package/dist/{themeTokens-D70HeNVF.js → themeTokens-qP1-55O7.js} +37 -10
  150. package/dist/themeTokens-qP1-55O7.js.map +1 -0
  151. package/dist/{utils-B5Z52hYs.js → utils-DSvrhU8E.js} +6 -2
  152. package/dist/{utils-B5Z52hYs.js.map → utils-DSvrhU8E.js.map} +1 -1
  153. package/dist/vega.d.ts +1 -1
  154. package/dist/vega.js +3 -3
  155. package/dist/vega.js.map +1 -1
  156. package/dist/{vegaTheme-DfoEQhOy.js → vegaTheme-CSvFEMBl.js} +6 -6
  157. package/dist/vegaTheme-CSvFEMBl.js.map +1 -0
  158. package/package.json +12 -10
  159. package/src/styles.css +3 -0
  160. package/dist/AIKit-DDg5DBCG.js.map +0 -1
  161. package/dist/Badge-Ch26CXoP.js.map +0 -1
  162. package/dist/BrandLogo-Dmi7jo21.js.map +0 -1
  163. package/dist/Combobox-Cs_1pj2q.js.map +0 -1
  164. package/dist/Form-k6PH-em3.js.map +0 -1
  165. package/dist/InputGroup-BnLHY0eq.js.map +0 -1
  166. package/dist/Kbd-CvSM3D3-.js.map +0 -1
  167. package/dist/MermaidDiagram-WkonYErO.js.map +0 -1
  168. package/dist/Select-DpcgKqKB.js.map +0 -1
  169. package/dist/Sidebar-Cm6I4dE1.js.map +0 -1
  170. package/dist/Workbench-BzE-Vvd9.js.map +0 -1
  171. package/dist/themeTokens-D70HeNVF.js.map +0 -1
  172. package/dist/useColorSchemeState-klihG9-i.js.map +0 -1
  173. package/dist/vegaTheme-DfoEQhOy.js.map +0 -1
package/dist/rjsf.js CHANGED
@@ -1,21 +1,22 @@
1
- import { Tooltip, debounce } from "./utils-B5Z52hYs.js";
1
+ import { Tooltip, debounce } from "./utils-DSvrhU8E.js";
2
2
  import { BookOpen, Info, Trash2 } from "./icons-Cek151jC.js";
3
3
  import { Button } from "./Button-DsRrU5F1.js";
4
4
  import { Label } from "./internal/components/Label.js";
5
5
  import { Link } from "./internal/components/Link.js";
6
- import { TextInput } from "./TextInput-DHM6dHmn.js";
7
- import { RadioGroup } from "./RadioGroup-XFzFd1ti.js";
8
- import { Checkbox } from "./Checkbox-fC0BuO2B.js";
9
- import { Combobox } from "./Combobox-Cs_1pj2q.js";
10
- import { FormGroup } from "./FormGroup-DbcDtrgU.js";
6
+ import { useStableCallback } from "./internal/hooks/useStableCallback.js";
7
+ import { TextInput } from "./TextInput-DH5SkbsE.js";
8
+ import { RadioGroup } from "./RadioGroup-DXPbSj8P.js";
9
+ import { Checkbox } from "./Checkbox-CUIn2jap.js";
10
+ import { Combobox } from "./Combobox-BfIfaVMA.js";
11
+ import { FormGroup } from "./FormGroup-DHvTFdno.js";
11
12
  import { NumberInput } from "./internal/blocks/NumberInput.js";
12
13
  import { Textarea } from "./internal/blocks/Textarea.js";
13
- import { DateInput } from "./DateInput-ZdaMQo5i.js";
14
+ import { DateInput } from "./DateInput-DiEd5uCL.js";
14
15
  import { PasswordInput } from "./internal/blocks/PasswordInput.js";
15
- import { Alert } from "./Alert-DHJFrWnS.js";
16
+ import { Alert } from "./Alert-Ba5b2YPq.js";
16
17
  import { CollapsiblePanel } from "./internal/components/CollapsiblePanel.js";
17
18
  import { Tabs, TabsContent } from "./Tabs-eB974xJf.js";
18
- import { CodeEditor, isLanguageMode } from "./CodeEditor-Cxy3HnKH.js";
19
+ import { CodeEditor, isLanguageMode } from "./CodeEditor-C9zy7PxK.js";
19
20
  import { createContext, isValidElement, use, useCallback, useEffect, useMemo, useRef, useState } from "react";
20
21
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
21
22
  import DOMPurify from "dompurify";
@@ -920,7 +921,7 @@ const DateWidget = ({ id, value, onChange, onBlur, onFocus, disabled, readonly,
920
921
  * Widget for fields using json-editor's enumSource/watch pattern.
921
922
  * Reads options dynamically from the root form data based on watched paths.
922
923
  */
923
- const DynamicSelectWidget = ({ value, onChange, disabled, readonly, options: widgetOptions }) => {
924
+ const DynamicSelectWidget = ({ id, value, onChange, disabled, readonly, options: widgetOptions, required }) => {
924
925
  const data = useRootFormData();
925
926
  const watch = widgetOptions.watch;
926
927
  const enumSource = widgetOptions.enumSource;
@@ -934,9 +935,11 @@ const DynamicSelectWidget = ({ value, onChange, disabled, readonly, options: wid
934
935
  const selectedItem = matched ?? fallbackItem;
935
936
  const items = fallbackItem ? [fallbackItem, ...dynamicItems] : dynamicItems;
936
937
  return /* @__PURE__ */ jsx(Combobox, {
938
+ id,
937
939
  variant: "secondary",
938
940
  items,
939
941
  value: selectedItem,
942
+ allowClear: !required,
940
943
  disabled: disabled || readonly,
941
944
  onValueChange: (selected) => onChange(selected?.value ?? "")
942
945
  });
@@ -993,7 +996,7 @@ const RadioWidget = ({ id, value, onChange, disabled, readonly, options }) => {
993
996
  };
994
997
  //#endregion
995
998
  //#region src/blocks/RjsfSchemaEditor/widgets/SelectWidget.tsx
996
- const SelectWidget = ({ value, schema, onChange, disabled, readonly, options, placeholder, required }) => {
999
+ const SelectWidget = ({ id, value, schema, onChange, disabled, readonly, options, placeholder, required }) => {
997
1000
  const enumOptions = options.enumOptions ?? [];
998
1001
  const isBoolean = schema.type === "boolean";
999
1002
  const items = enumOptions.map((o) => ({
@@ -1002,6 +1005,7 @@ const SelectWidget = ({ value, schema, onChange, disabled, readonly, options, pl
1002
1005
  }));
1003
1006
  const selectedItem = items.find((item) => item.value === (value == null ? "" : String(value)));
1004
1007
  return /* @__PURE__ */ jsx(Combobox, {
1008
+ id,
1005
1009
  variant: "secondary",
1006
1010
  items,
1007
1011
  value: selectedItem ?? null,
@@ -1539,8 +1543,7 @@ const RjsfSchemaEditor = ({ schema, value, onChange, readOnly, inForm, globalCon
1539
1543
  useEffect(() => {
1540
1544
  isInitialMountRef.current = false;
1541
1545
  }, [formKey]);
1542
- const onChangeRef = useRef(onChange);
1543
- onChangeRef.current = onChange;
1546
+ const handleValueChange = useStableCallback(onChange);
1544
1547
  const valueRef = useRef(value);
1545
1548
  valueRef.current = value;
1546
1549
  const lastSentJsonRef = useRef(null);
@@ -1549,9 +1552,9 @@ const RjsfSchemaEditor = ({ schema, value, onChange, readOnly, inForm, globalCon
1549
1552
  if (dataJson !== stableStringify(valueRef.current)) {
1550
1553
  if (lastSentJsonRef.current === null && mountedFormDataJsonRef.current && dataJson === mountedFormDataJsonRef.current) return;
1551
1554
  lastSentJsonRef.current = dataJson;
1552
- onChangeRef.current(data);
1555
+ handleValueChange(data);
1553
1556
  }
1554
- }, 100), []);
1557
+ }, 100), [handleValueChange]);
1555
1558
  useEffect(() => () => debouncedOnChange.cancel(), [debouncedOnChange]);
1556
1559
  const [prevValue, setPrevValue] = useState(value);
1557
1560
  if (value !== prevValue) {
@@ -1580,10 +1583,6 @@ const RjsfSchemaEditor = ({ schema, value, onChange, readOnly, inForm, globalCon
1580
1583
  }
1581
1584
  debouncedOnChange(e.formData);
1582
1585
  }, [debouncedOnChange]);
1583
- const debouncedOnChangeRef = useRef(debouncedOnChange);
1584
- debouncedOnChangeRef.current = debouncedOnChange;
1585
- const setRootFormDataRef = useRef(setRootFormData);
1586
- setRootFormDataRef.current = setRootFormData;
1587
1586
  const formContext = useMemo(() => ({
1588
1587
  setFormData: (data) => {
1589
1588
  const merged = {
@@ -1592,16 +1591,16 @@ const RjsfSchemaEditor = ({ schema, value, onChange, readOnly, inForm, globalCon
1592
1591
  };
1593
1592
  initialDataRef.current = merged;
1594
1593
  formDataRef.current = merged;
1595
- setRootFormDataRef.current(merged);
1596
- debouncedOnChangeRef.current.cancel();
1594
+ setRootFormData(merged);
1595
+ debouncedOnChange.cancel();
1597
1596
  lastSentJsonRef.current = stableStringify(merged);
1598
- onChangeRef.current(merged);
1597
+ handleValueChange(merged);
1599
1598
  isInitialMountRef.current = true;
1600
1599
  mountedFormDataJsonRef.current = null;
1601
1600
  setFormKey((k) => k + 1);
1602
1601
  },
1603
1602
  getFormData: () => formDataRef.current
1604
- }), []);
1603
+ }), [debouncedOnChange, handleValueChange]);
1605
1604
  const formRef = useRef(null);
1606
1605
  useEffect(() => {
1607
1606
  if (onRegisterValidate) onRegisterValidate(() => {