@keboola/design 13.1.3 → 14.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.
- package/AGENTS.md +68 -6
- package/CHANGELOG.md +196 -0
- package/COMPONENT-API.md +60 -50
- package/dist/{AIKit-BVCWP9Ks.js → AIKit-BRSZ3nY7.js} +2227 -313
- package/dist/AIKit-BRSZ3nY7.js.map +1 -0
- package/dist/{Alert-UI-CIs-1.js → Alert-CZ0dDsuk.js} +7 -7
- package/dist/{Alert-UI-CIs-1.js.map → Alert-CZ0dDsuk.js.map} +1 -1
- package/dist/{AlertModal-mbSnuuka.js → AlertModal-BDle9ZVQ.js} +6 -6
- package/dist/AlertModal-BDle9ZVQ.js.map +1 -0
- package/dist/{AppShell-WSQabK8r.js → AppShell-B03fj1j7.js} +2 -2
- package/dist/{AppShell-WSQabK8r.js.map → AppShell-B03fj1j7.js.map} +1 -1
- package/dist/{AutoSaveTextarea-C5iIr2Ts.js → AutoSaveTextarea-jiqNeeE4.js} +3 -3
- package/dist/{AutoSaveTextarea-C5iIr2Ts.js.map → AutoSaveTextarea-jiqNeeE4.js.map} +1 -1
- package/dist/{Badge-Dz0cj6rj.js → Badge-Ba3epgcI.js} +2 -2
- package/dist/{Badge-Dz0cj6rj.js.map → Badge-Ba3epgcI.js.map} +1 -1
- package/dist/{BrandEditor-P8OZX2hi.js → BrandEditor-CN2HJ_12.js} +155 -17
- package/dist/BrandEditor-CN2HJ_12.js.map +1 -0
- package/dist/{BrandLogo-CKpVSZb6.js → BrandLogo-BfITD0im.js} +2 -2
- package/dist/{BrandLogo-CKpVSZb6.js.map → BrandLogo-BfITD0im.js.map} +1 -1
- package/dist/{Breadcrumb-BUoAZyhO.js → Breadcrumb-BnIlsoIH.js} +62 -20
- package/dist/Breadcrumb-BnIlsoIH.js.map +1 -0
- package/dist/{Button-B21oVcPU.js → Button-D2JqBAq7.js} +199 -7
- package/dist/Button-D2JqBAq7.js.map +1 -0
- package/dist/{Calendar-DFtmZzbF.js → Calendar-BnKi1kPu.js} +4 -4
- package/dist/{Calendar-DFtmZzbF.js.map → Calendar-BnKi1kPu.js.map} +1 -1
- package/dist/{Card-BQmBWHXl.js → Card-Bpc_ZlL4.js} +3 -3
- package/dist/Card-Bpc_ZlL4.js.map +1 -0
- package/dist/{Checkbox-8yIIgY7g.js → Checkbox-uFE8XLT_.js} +6 -6
- package/dist/Checkbox-uFE8XLT_.js.map +1 -0
- package/dist/{Clipboard-_xf6hMDD.js → Clipboard-D-9XOqy4.js} +3 -3
- package/dist/{Clipboard-_xf6hMDD.js.map → Clipboard-D-9XOqy4.js.map} +1 -1
- package/dist/{ClipboardButton-srUgWgwH.js → ClipboardButton-DxvZG_H0.js} +4 -4
- package/dist/{ClipboardButton-srUgWgwH.js.map → ClipboardButton-DxvZG_H0.js.map} +1 -1
- package/dist/{CodeEditor-Df7VVx08.js → CodeEditor-BfRSCKEs.js} +6 -6
- package/dist/{CodeEditor-Df7VVx08.js.map → CodeEditor-BfRSCKEs.js.map} +1 -1
- package/dist/{Collapsible-BQXWEOBC.js → Collapsible-DD4xTL75.js} +2 -2
- package/dist/{Collapsible-BQXWEOBC.js.map → Collapsible-DD4xTL75.js.map} +1 -1
- package/dist/{ColorInput-B3gBZ8Ya.js → ColorInput-CDKH8q_f.js} +5 -5
- package/dist/{ColorInput-B3gBZ8Ya.js.map → ColorInput-CDKH8q_f.js.map} +1 -1
- package/dist/{ColorModeSwitch-D8Cki137.js → ColorModeSwitch-DR6J2U6M.js} +4 -4
- package/dist/{ColorModeSwitch-D8Cki137.js.map → ColorModeSwitch-DR6J2U6M.js.map} +1 -1
- package/dist/{Combobox-BNhW0TDB.js → Combobox-CEesMe2M.js} +246 -44
- package/dist/Combobox-CEesMe2M.js.map +1 -0
- package/dist/{Command-BQPiZCNz.js → Command-T3MLRaen.js} +10 -6
- package/dist/Command-T3MLRaen.js.map +1 -0
- package/dist/{CopyField-Ba7h8MqZ.js → CopyField-CNbCHw9a.js} +4 -4
- package/dist/{CopyField-Ba7h8MqZ.js.map → CopyField-CNbCHw9a.js.map} +1 -1
- package/dist/{DateInput-D0nWUasV.js → DateInput-ClK1lCxz.js} +5 -5
- package/dist/{DateInput-D0nWUasV.js.map → DateInput-ClK1lCxz.js.map} +1 -1
- package/dist/{DatePicker-CtSa9b3V.js → DatePicker-CgHAu9KX.js} +3 -3
- package/dist/{DatePicker-CtSa9b3V.js.map → DatePicker-CgHAu9KX.js.map} +1 -1
- package/dist/{DateRangeInput-i6wE45-V.js → DateRangeInput-DtlAffS1.js} +5 -5
- package/dist/{DateRangeInput-i6wE45-V.js.map → DateRangeInput-DtlAffS1.js.map} +1 -1
- package/dist/{DateRangePicker-BAnuz6vO.js → DateRangePicker-CXpXPMoh.js} +8 -8
- package/dist/{DateRangePicker-BAnuz6vO.js.map → DateRangePicker-CXpXPMoh.js.map} +1 -1
- package/dist/{DiffView-ppTIzh2h.js → DiffView-Dy4z-n-1.js} +3 -3
- package/dist/{DiffView-ppTIzh2h.js.map → DiffView-Dy4z-n-1.js.map} +1 -1
- package/dist/{DropdownMenu-BJGLjpVc.js → DropdownMenu-B1gGvZoh.js} +9 -9
- package/dist/DropdownMenu-B1gGvZoh.js.map +1 -0
- package/dist/{FieldBox-D7DYtX_m.js → FieldBox-BrxLkY9C.js} +8 -6
- package/dist/FieldBox-BrxLkY9C.js.map +1 -0
- package/dist/{FieldItem-BHViBJS3.js → FieldItem-CYvJyjiI.js} +4 -4
- package/dist/{FieldItem-BHViBJS3.js.map → FieldItem-CYvJyjiI.js.map} +1 -1
- package/dist/{FileUpload-Ch2hrIWq.js → FileUpload-D6vPG3WB.js} +9 -9
- package/dist/FileUpload-D6vPG3WB.js.map +1 -0
- package/dist/{Form-VkzfVPyT.js → Form-CD55zJiy.js} +10 -10
- package/dist/{Form-VkzfVPyT.js.map → Form-CD55zJiy.js.map} +1 -1
- package/dist/{FormGroup-CmCppxOn.js → FormGroup-DiYFdEhH.js} +4 -4
- package/dist/{FormGroup-CmCppxOn.js.map → FormGroup-DiYFdEhH.js.map} +1 -1
- package/dist/{FullScreenModal-Cwnm8WdM.js → FullScreenModal-CUuAakh3.js} +20 -6
- package/dist/{FullScreenModal-Cwnm8WdM.js.map → FullScreenModal-CUuAakh3.js.map} +1 -1
- package/dist/HoverCard-BBdPYqEf.js +31 -0
- package/dist/HoverCard-BBdPYqEf.js.map +1 -0
- package/dist/InlineEdit-D5RdunZo.js +370 -0
- package/dist/InlineEdit-D5RdunZo.js.map +1 -0
- package/dist/{InputGroup-CrlMRz4X.js → InputGroup-Dm014ruw.js} +4 -4
- package/dist/{InputGroup-CrlMRz4X.js.map → InputGroup-Dm014ruw.js.map} +1 -1
- package/dist/{Kbd-J4n1J6i4.js → Kbd-3YM7NQO4.js} +3 -3
- package/dist/{Kbd-J4n1J6i4.js.map → Kbd-3YM7NQO4.js.map} +1 -1
- package/dist/MermaidDiagram-CeiOkI60.js +199 -0
- package/dist/MermaidDiagram-CeiOkI60.js.map +1 -0
- package/dist/{Modal-BkSuS9Yz.js → Modal-DMZRswk4.js} +8 -7
- package/dist/Modal-DMZRswk4.js.map +1 -0
- package/dist/{ModalTitle-BxopkIoQ.js → ModalTitle-CTECVgL8.js} +3 -3
- package/dist/ModalTitle-CTECVgL8.js.map +1 -0
- package/dist/{MultiActionButtonGroup-AWLj1Tg7.js → MultiActionButtonGroup-CEv_txvz.js} +5 -5
- package/dist/{MultiActionButtonGroup-AWLj1Tg7.js.map → MultiActionButtonGroup-CEv_txvz.js.map} +1 -1
- package/dist/{Navbar-B_DNpv5s.js → Navbar-CtVYcRFn.js} +18 -14
- package/dist/Navbar-CtVYcRFn.js.map +1 -0
- package/dist/{OtpInput-I8B8Vjdl.js → OtpInput-CY8yCaJk.js} +4 -4
- package/dist/{OtpInput-I8B8Vjdl.js.map → OtpInput-CY8yCaJk.js.map} +1 -1
- package/dist/{PageHeader-CgfyXpf1.js → PageHeader-CL1A6jFM.js} +21 -14
- package/dist/PageHeader-CL1A6jFM.js.map +1 -0
- package/dist/{PageLayout-DiAAILuS.js → PageLayout-C9aXTpqV.js} +2 -2
- package/dist/{PageLayout-DiAAILuS.js.map → PageLayout-C9aXTpqV.js.map} +1 -1
- package/dist/{PageToolbar-C06RKIif.js → PageToolbar-B_e7HGva.js} +6 -6
- package/dist/{PageToolbar-C06RKIif.js.map → PageToolbar-B_e7HGva.js.map} +1 -1
- package/dist/{Pagination-DH3f6LN0.js → Pagination-DDp6PRqf.js} +5 -5
- package/dist/Pagination-DDp6PRqf.js.map +1 -0
- package/dist/{Popconfirm-Dhzn7sy6.js → Popconfirm-BgV6a0sl.js} +5 -5
- package/dist/{Popconfirm-Dhzn7sy6.js.map → Popconfirm-BgV6a0sl.js.map} +1 -1
- package/dist/{Popover-CEk915I1.js → Popover-BU7nGOv-.js} +3 -3
- package/dist/Popover-BU7nGOv-.js.map +1 -0
- package/dist/{RadioGroup-CYEp8Wnx.js → RadioGroup-C8EC3fqO.js} +6 -6
- package/dist/{RadioGroup-CYEp8Wnx.js.map → RadioGroup-C8EC3fqO.js.map} +1 -1
- package/dist/{Resizable-D3vYToZH.js → Resizable-D8zs0kcq.js} +2 -2
- package/dist/{Resizable-D3vYToZH.js.map → Resizable-D8zs0kcq.js.map} +1 -1
- package/dist/{Search-DmkQo716.js → Search-aaUMI4ix.js} +4 -4
- package/dist/{Search-DmkQo716.js.map → Search-aaUMI4ix.js.map} +1 -1
- package/dist/{SearchInput-D3qMkHaW.js → SearchInput-Dxi2GK4n.js} +4 -4
- package/dist/{SearchInput-D3qMkHaW.js.map → SearchInput-Dxi2GK4n.js.map} +1 -1
- package/dist/{SectionNav-I2p2uXTd.js → SectionNav-BnHOMLtE.js} +11 -11
- package/dist/{SectionNav-I2p2uXTd.js.map → SectionNav-BnHOMLtE.js.map} +1 -1
- package/dist/{Select-B4uK0QVm.js → Select-CjQgU_6K.js} +6 -6
- package/dist/Select-CjQgU_6K.js.map +1 -0
- package/dist/{Sheet-D0fAE14T.js → Sheet-utw4_rUa.js} +9 -9
- package/dist/Sheet-utw4_rUa.js.map +1 -0
- package/dist/{Sidebar-D9ytIs8V.js → Sidebar-BAmux2Uj.js} +21 -18
- package/dist/Sidebar-BAmux2Uj.js.map +1 -0
- package/dist/{Slider-B0ou9r0B.js → Slider-DbzzSDRV.js} +5 -5
- package/dist/{Slider-B0ou9r0B.js.map → Slider-DbzzSDRV.js.map} +1 -1
- package/dist/{Stepper-BLkLhfnd.js → Stepper-BBPembeK.js} +3 -3
- package/dist/{Stepper-BLkLhfnd.js.map → Stepper-BBPembeK.js.map} +1 -1
- package/dist/{Switch-DZvNePOm.js → Switch-Dw4tvQls.js} +3 -3
- package/dist/Switch-Dw4tvQls.js.map +1 -0
- package/dist/{Table-BaVT5Tkn.js → Table-CilEvpMq.js} +65 -6
- package/dist/Table-CilEvpMq.js.map +1 -0
- package/dist/{Tabs-CTDmye1N.js → Tabs-C0uvkPHc.js} +5 -5
- package/dist/Tabs-C0uvkPHc.js.map +1 -0
- package/dist/{TextInput-BWYXbfs4.js → TextInput-K2DSDs5O.js} +5 -5
- package/dist/{TextInput-BWYXbfs4.js.map → TextInput-K2DSDs5O.js.map} +1 -1
- package/dist/{ThemeProvider-VF38VfUa.js → ThemeProvider-C8yaKlM1.js} +22 -5
- package/dist/ThemeProvider-C8yaKlM1.js.map +1 -0
- package/dist/{TimePicker-CDGYrRxi.js → TimePicker-DyyV3nw8.js} +2 -2
- package/dist/{TimePicker-CDGYrRxi.js.map → TimePicker-DyyV3nw8.js.map} +1 -1
- package/dist/{Timeline-B-I6sb0M.js → Timeline-DUXgByUE.js} +3 -3
- package/dist/{Timeline-B-I6sb0M.js.map → Timeline-DUXgByUE.js.map} +1 -1
- package/dist/{Toast-NrOdDDru.js → Toast-BGnUL4jV.js} +2 -2
- package/dist/{Toast-NrOdDDru.js.map → Toast-BGnUL4jV.js.map} +1 -1
- package/dist/ToggleAllTooltip-Dlmq-yqS.js +37 -0
- package/dist/ToggleAllTooltip-Dlmq-yqS.js.map +1 -0
- package/dist/{ToggleGroup-Cy_10Mvu.js → ToggleGroup-BOz1yyz6.js} +3 -3
- package/dist/ToggleGroup-BOz1yyz6.js.map +1 -0
- package/dist/{Workbench-DmZzpkj7.js → Workbench-CxgNCs3I.js} +4 -4
- package/dist/{Workbench-DmZzpkj7.js.map → Workbench-CxgNCs3I.js.map} +1 -1
- package/dist/{ZoomableSvg-C65nta_r.js → ZoomableSvg-Dh1OstPN.js} +87 -83
- package/dist/ZoomableSvg-Dh1OstPN.js.map +1 -0
- package/dist/charts.js +1 -1
- package/dist/classNames-DcGnTh2N.js +21 -0
- package/dist/classNames-DcGnTh2N.js.map +1 -0
- package/dist/editors.js +6 -6
- package/dist/flint.js +10 -45
- package/dist/flint.js.map +1 -1
- package/dist/highlightCode-D354tCXO.js +81 -0
- package/dist/highlightCode-D354tCXO.js.map +1 -0
- package/dist/{icons-wcA70iQx.js → icons-ZIeZXXS7.js} +37 -4
- package/dist/icons-ZIeZXXS7.js.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/icons.js +2 -2
- package/dist/{index-B7k-09i1.d.ts → index-D-itZ3VP.d.ts} +14 -3
- package/dist/index.d.ts +942 -424
- package/dist/index.js +72 -70
- package/dist/internal/blocks/AIKit.js +2 -2
- package/dist/internal/blocks/AppShell.js +1 -1
- package/dist/internal/blocks/AuthLayout.js +2 -2
- package/dist/internal/blocks/AutoSaveTextarea.js +1 -1
- package/dist/internal/blocks/BrandEditor.js +1 -1
- package/dist/internal/blocks/ChartPanel.js +2 -2
- package/dist/internal/blocks/ChipEditor.js +4 -4
- package/dist/internal/blocks/ClipboardButton.js +1 -1
- package/dist/internal/blocks/ColorInput.js +1 -1
- package/dist/internal/blocks/ColorModeSwitch.js +1 -1
- package/dist/internal/blocks/Command.js +1 -1
- package/dist/internal/blocks/CopyField.js +1 -1
- package/dist/internal/blocks/DashboardHero.js +2 -2
- package/dist/internal/blocks/DashboardHero.js.map +1 -1
- package/dist/internal/blocks/DateInput.js +1 -1
- package/dist/internal/blocks/DateRangeInput.js +1 -1
- package/dist/internal/blocks/DiagramShared/DiagramSkeleton.js.map +1 -1
- package/dist/internal/blocks/EmptyConfigurationActionCard.js +1 -1
- package/dist/internal/blocks/ExportMenu.js +4 -4
- package/dist/internal/blocks/FacebookButton.js +66 -0
- package/dist/internal/blocks/FacebookButton.js.map +1 -0
- package/dist/internal/blocks/Form/connectors/ComboboxField.js +2 -2
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +1 -1
- package/dist/internal/blocks/Form.js +1 -1
- package/dist/internal/blocks/FormGroup.js +1 -1
- package/dist/internal/blocks/GoogleButton.js +2 -2
- package/dist/internal/blocks/InlineEdit.js +2 -0
- package/dist/internal/blocks/MicrosoftButton.js +2 -2
- package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
- package/dist/internal/blocks/MultiCombobox.js +204 -68
- package/dist/internal/blocks/MultiCombobox.js.map +1 -1
- package/dist/internal/blocks/NumberInput.js +1 -1
- package/dist/internal/blocks/OtpInput.js +1 -1
- package/dist/internal/blocks/PageHeader.js +1 -1
- package/dist/internal/blocks/PageLayout.js +1 -1
- package/dist/internal/blocks/PageToolbar.js +1 -1
- package/dist/internal/blocks/PasswordInput.js +3 -3
- package/dist/internal/blocks/SearchInput.js +1 -1
- package/dist/internal/blocks/SearchInputWithNavigation.js +5 -5
- package/dist/internal/blocks/SectionNav.js +1 -1
- package/dist/internal/blocks/SplitButton.js +6 -5
- package/dist/internal/blocks/SplitButton.js.map +1 -1
- package/dist/internal/blocks/StatCard.js +2 -2
- package/dist/internal/blocks/TextInput.js +1 -1
- package/dist/internal/blocks/Textarea.js +1 -1
- package/dist/internal/blocks/TimeInput.js +4 -4
- package/dist/internal/components/Alert.js +1 -1
- package/dist/internal/components/AlertModal.js +1 -1
- package/dist/internal/components/Avatar.js +2 -2
- package/dist/internal/components/Badge.js +1 -1
- package/dist/internal/components/BrandLogo.js +1 -1
- package/dist/internal/components/Breadcrumb.js +1 -1
- package/dist/internal/components/Button.js +1 -1
- package/dist/internal/components/ButtonGroup.js +1 -1
- package/dist/internal/components/Calendar.js +1 -1
- package/dist/internal/components/Card.js +1 -1
- package/dist/internal/components/Checkbox.js +1 -1
- package/dist/internal/components/Clipboard.js +1 -1
- package/dist/internal/components/Collapsible.js +1 -1
- package/dist/internal/components/CollapsiblePanel.js +5 -5
- package/dist/internal/components/CollapsiblePanel.js.map +1 -1
- package/dist/internal/components/Combobox.js +1 -1
- package/dist/internal/components/DatePicker.js +1 -1
- package/dist/internal/components/DateRangePicker.js +1 -1
- package/dist/internal/components/DiffView.js +1 -1
- package/dist/internal/components/DotsLoader.js +1 -1
- package/dist/internal/components/DropdownMenu.js +1 -1
- package/dist/internal/components/FileUpload.js +1 -1
- package/dist/internal/components/FullScreenModal.js +1 -1
- package/dist/internal/components/HoverCard.js +1 -1
- package/dist/internal/components/InputGroup.js +1 -1
- package/dist/internal/components/Kbd.js +1 -1
- package/dist/internal/components/Label.js +2 -2
- package/dist/internal/components/Label.js.map +1 -1
- package/dist/internal/components/Link.js +1 -1
- package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +2 -2
- package/dist/internal/components/Modal.js +1 -1
- package/dist/internal/components/Navbar.js +1 -1
- package/dist/internal/components/Pagination.js +1 -1
- package/dist/internal/components/PanelWithDetails.js +3 -3
- package/dist/internal/components/Popconfirm.js +1 -1
- package/dist/internal/components/Popover.js +1 -1
- package/dist/internal/components/Progress.js +1 -1
- package/dist/internal/components/RadioGroup.js +1 -1
- package/dist/internal/components/Resizable.js +1 -1
- package/dist/internal/components/ScrollArea.js +1 -1
- package/dist/internal/components/Search.js +1 -1
- package/dist/internal/components/Select.js +1 -1
- package/dist/internal/components/Separator.js +1 -1
- package/dist/internal/components/Sheet.js +1 -1
- package/dist/internal/components/Sidebar.js +1 -1
- package/dist/internal/components/Skeleton/Skeleton.js +2 -2
- package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/internal/components/Skeleton/SkeletonList.js +1 -1
- package/dist/internal/components/Slider.js +1 -1
- package/dist/internal/components/SpotlightBackdrop.js +1 -1
- package/dist/internal/components/Stepper.js +1 -1
- package/dist/internal/components/Switch.js +1 -1
- package/dist/internal/components/Table.js +1 -1
- package/dist/internal/components/Tabs.js +1 -1
- package/dist/internal/components/ThemeProvider.js +1 -1
- package/dist/internal/components/TimePicker.js +1 -1
- package/dist/internal/components/Timeline.js +1 -1
- package/dist/internal/components/Toast.js +2 -2
- package/dist/internal/components/Toggle.js +5 -5
- package/dist/internal/components/Toggle.js.map +1 -1
- package/dist/internal/components/ToggleGroup.js +1 -1
- package/dist/internal/components/Tooltip.js +1 -1
- package/dist/internal/components/Truncated.js +2 -2
- package/dist/internal/components/Workbench.js +1 -1
- package/dist/internal/components/ZoomableSvg.js +1 -1
- package/dist/internal/utils.js +2 -2
- package/dist/markdown-editor.js +14 -14
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.d.ts +1 -2
- package/dist/mermaid.js +1 -1
- package/dist/rjsf.js +101 -14
- package/dist/rjsf.js.map +1 -1
- package/dist/{styles-DBGXH5-_.js → styles-BDA5rQz3.js} +6 -6
- package/dist/styles-BDA5rQz3.js.map +1 -0
- package/dist/{styles-gzcjOyKv.js → styles-YQdM7G8c.js} +3 -3
- package/dist/{styles-gzcjOyKv.js.map → styles-YQdM7G8c.js.map} +1 -1
- package/dist/styles.css +1 -1
- package/dist/svgCache-Dhmbe-7i.js +26 -0
- package/dist/svgCache-Dhmbe-7i.js.map +1 -0
- package/dist/svgTransforms-Hnvev3Vs.js +38 -0
- package/dist/svgTransforms-Hnvev3Vs.js.map +1 -0
- package/dist/testing.js +1 -1
- package/dist/{themeTokens-7DEab0kp.js → themeTokens-l2Fsfcs7.js} +3 -12
- package/dist/themeTokens-l2Fsfcs7.js.map +1 -0
- package/dist/{toast-CyXEdaCZ.js → toast-D6Z6MOB5.js} +5 -5
- package/dist/toast-D6Z6MOB5.js.map +1 -0
- package/dist/{utils-Bd28bWgm.js → utils-LQ4jJA-9.js} +21 -5
- package/dist/utils-LQ4jJA-9.js.map +1 -0
- package/dist/vega.js +1 -1
- package/dist/vegaTheme-BrmVoPEz.js +49 -0
- package/dist/vegaTheme-BrmVoPEz.js.map +1 -0
- package/dist/{vegaTheme-VQMWTlBw.js → vegaTokens-Ce07C0DH.js} +36 -44
- package/dist/vegaTokens-Ce07C0DH.js.map +1 -0
- package/package.json +4 -4
- package/src/styles.css +183 -4
- package/src/theme.css +47 -3
- package/dist/AIKit-BVCWP9Ks.js.map +0 -1
- package/dist/AlertModal-mbSnuuka.js.map +0 -1
- package/dist/BrandEditor-P8OZX2hi.js.map +0 -1
- package/dist/Breadcrumb-BUoAZyhO.js.map +0 -1
- package/dist/Button-B21oVcPU.js.map +0 -1
- package/dist/Card-BQmBWHXl.js.map +0 -1
- package/dist/Checkbox-8yIIgY7g.js.map +0 -1
- package/dist/Combobox-BNhW0TDB.js.map +0 -1
- package/dist/Command-BQPiZCNz.js.map +0 -1
- package/dist/DiagramSource-C5_d8Gdj.js +0 -11
- package/dist/DiagramSource-C5_d8Gdj.js.map +0 -1
- package/dist/DropdownMenu-BJGLjpVc.js.map +0 -1
- package/dist/FieldBox-D7DYtX_m.js.map +0 -1
- package/dist/FileUpload-Ch2hrIWq.js.map +0 -1
- package/dist/HoverCard-B8OKu9XZ.js +0 -31
- package/dist/HoverCard-B8OKu9XZ.js.map +0 -1
- package/dist/MermaidDiagram-B30x2yV7.js +0 -302
- package/dist/MermaidDiagram-B30x2yV7.js.map +0 -1
- package/dist/Modal-BkSuS9Yz.js.map +0 -1
- package/dist/ModalTitle-BxopkIoQ.js.map +0 -1
- package/dist/Navbar-B_DNpv5s.js.map +0 -1
- package/dist/PageHeader-CgfyXpf1.js.map +0 -1
- package/dist/Pagination-DH3f6LN0.js.map +0 -1
- package/dist/Popover-CEk915I1.js.map +0 -1
- package/dist/Select-B4uK0QVm.js.map +0 -1
- package/dist/Sheet-D0fAE14T.js.map +0 -1
- package/dist/Sidebar-D9ytIs8V.js.map +0 -1
- package/dist/Switch-DZvNePOm.js.map +0 -1
- package/dist/Table-BaVT5Tkn.js.map +0 -1
- package/dist/Tabs-CTDmye1N.js.map +0 -1
- package/dist/ThemeProvider-VF38VfUa.js.map +0 -1
- package/dist/ToggleGroup-Cy_10Mvu.js.map +0 -1
- package/dist/ZoomableSvg-C65nta_r.js.map +0 -1
- package/dist/classNames-BzrkDnOD.js +0 -9
- package/dist/classNames-BzrkDnOD.js.map +0 -1
- package/dist/icons-wcA70iQx.js.map +0 -1
- package/dist/styles-DBGXH5-_.js.map +0 -1
- package/dist/svgTransforms-Dw2hRA-i.js +0 -51
- package/dist/svgTransforms-Dw2hRA-i.js.map +0 -1
- package/dist/themeTokens-7DEab0kp.js.map +0 -1
- package/dist/toast-CyXEdaCZ.js.map +0 -1
- package/dist/utils-Bd28bWgm.js.map +0 -1
- package/dist/vegaTheme-VQMWTlBw.js.map +0 -1
package/AGENTS.md
CHANGED
|
@@ -79,6 +79,8 @@ This file answers **which** component to use; [`COMPONENT-API.md`](./COMPONENT-A
|
|
|
79
79
|
|
|
80
80
|
**Never** use `Popover` for destructive confirmations (use `Popconfirm`) or hover-only previews (use `HoverCard`). **Never** hand-roll a confirmation from `Modal` + buttons — use `AlertModal`, which owns the confirm/cancel actions and the async loading state.
|
|
81
81
|
|
|
82
|
+
**`Modal.Content` is centred by default.** Pass `align="top"` when the content changes height while in use (fields appear or drop as the user picks), so the modal stops re-centring and moving the field under the pointer. The legacy brand ignores it: its modals are always top-anchored.
|
|
83
|
+
|
|
82
84
|
**Filters in a menu are menu items:** `DropdownMenu.RadioItem indicator="check"` for one value, `DropdownMenu.CheckboxItem indicator="checkbox"` for several, both `indicatorAlign="end"`. Never `RadioGroup` or `Checkbox` in a `DropdownMenu` or `Popover`.
|
|
83
85
|
|
|
84
86
|
### Inputs
|
|
@@ -92,6 +94,7 @@ This file answers **which** component to use; [`COMPONENT-API.md`](./COMPONENT-A
|
|
|
92
94
|
| `OtpInput` | Fixed-length verification code (MFA, email confirm, sudo step-up) |
|
|
93
95
|
| `FileUpload` | Drag-and-drop file picker box; caller owns the file array |
|
|
94
96
|
| `useFileDropTarget` | Make an existing subtree a drop target, styled by you |
|
|
97
|
+
| `InlineEdit` | Click-to-edit name or title in place (`multiline` for page titles) |
|
|
95
98
|
|
|
96
99
|
**Never** build custom label + input combinations — compose `Label` + `FormGroup.TextInput` + `FormGroup.Help` inside `FormGroup`.
|
|
97
100
|
|
|
@@ -742,10 +745,12 @@ takes the node, and the chip lets it have the keyboard.
|
|
|
742
745
|
/>
|
|
743
746
|
```
|
|
744
747
|
|
|
745
|
-
- A query
|
|
748
|
+
- A query opens every group with a match, and a group with none disappears — so the group's row always stands for something the user can see. A fold made under a query lasts until the query changes.
|
|
746
749
|
- `value` holds items only. The row reads checked / mixed from them and never becomes a chip, so `allowSelectAll` and `renderChips` count what they always count.
|
|
747
750
|
- Without `selectableGroups` / `groupToValue` a press on the row folds the group; with them, the chevron and `ArrowRight` / `ArrowLeft` do.
|
|
748
751
|
- Don't hand-roll it from a flat list and an `onValueChange` that expands a parent into its children — the control owns the fold, the query override and the mixed state.
|
|
752
|
+
- An item the user picked elsewhere and can't remove here (a table another mapping uses) is `itemToLocked`, not `itemToDisabled`: a locked row looks disabled but still takes the highlight, so `renderAside` describes it and its group still folds; a disabled row takes neither.
|
|
753
|
+
- `renderAside={(highlighted) => …}` adds an inspector beside the list about the last row the pointer or the arrow keys were on — `{ kind: 'item' }`, `{ kind: 'group' }` or `null` before any. A button in the popup hides it (`asideOpen` / `onAsideOpenChange` to persist that), and it stays hidden while the popup is under 40rem. Reach for it when a row needs more detail than fits on it.
|
|
749
754
|
|
|
750
755
|
**Long lists** — a `Combobox` or `MultiCombobox` whose options can run into the hundreds (tables, configurations, users) takes `virtualized="auto"`: past 30 options, grouped or not, only the rows in view reach the DOM. It is opt-in because a test that clicks a far row needs every option rendered.
|
|
751
756
|
|
|
@@ -773,7 +778,7 @@ import { ChevronDown, Keboola, Loader2 } from '@keboola/design/icons';
|
|
|
773
778
|
```
|
|
774
779
|
|
|
775
780
|
- **One import surface**: Lucide icons and Keboola-custom icons (e.g. `Keboola`) both export from `@keboola/design/icons` and share the `LucideIcon` type, so they're interchangeable in any API typed `icon: LucideIcon` (Button, etc.).
|
|
776
|
-
- **Vendor marks** also ship from `@keboola/design/icons` — `Auth0`, `Aws`, `Azure`, `ChatGpt`, `Claude`, `Cursor`, `Devin`, `Gcp`, `GitHub`, `GitLab`, `Google`, `Keboola`, `Make`, `Microsoft`, `Okta` — in their own brand colours by default; pass **`mono`** to render one in `currentColor` instead. The `Eu` / `Us` flags are colour-only.
|
|
781
|
+
- **Vendor marks** also ship from `@keboola/design/icons` — `Auth0`, `Aws`, `Azure`, `ChatGpt`, `Claude`, `Cursor`, `Devin`, `Facebook`, `Gcp`, `GitHub`, `GitLab`, `Google`, `Keboola`, `Make`, `Microsoft`, `Okta` — in their own brand colours by default; pass **`mono`** to render one in `currentColor` instead. The `Eu` / `Us` flags are colour-only.
|
|
777
782
|
- **Sizing**: prefixed Tailwind `tw:size-*` utility — `tw:size-4` = 16px (default for inline icons), `tw:size-5` = 20px, `tw:size-6` = 24px.
|
|
778
783
|
- **Spinner animation**: explicit via `tw:animate-spin`.
|
|
779
784
|
|
|
@@ -783,7 +788,9 @@ import { ChevronDown, Keboola, Loader2 } from '@keboola/design/icons';
|
|
|
783
788
|
|
|
784
789
|
Layer-0 colour usage splits into three buckets.
|
|
785
790
|
|
|
786
|
-
**Chrome — follows the brand.** Surface, structure, navigation: Card body, Modal frame, Input border, Button outline, focus rings, Sidebar, generic text. Re-skins when a customer brand is applied. **Rule:** use semantic tokens (`tw:bg-background`, `tw:text-foreground`, `tw:border-border`, `tw:bg-muted`, `tw:text-muted-foreground`, `tw:bg-
|
|
791
|
+
**Chrome — follows the brand.** Surface, structure, navigation: Card body, Modal frame, Input border, Button outline, focus rings, Sidebar, generic text. Re-skins when a customer brand is applied. **Rule:** use semantic tokens (`tw:bg-background`, `tw:text-foreground`, `tw:border-border`, `tw:bg-muted`, `tw:text-muted-foreground`, `tw:bg-hover`, `tw:bg-selected`, `tw:bg-destructive`, …). Customers override these via `@keboola/brand-registry`.
|
|
792
|
+
|
|
793
|
+
**State has its own tokens — never `accent`.** Hover and keyboard highlight paint `tw:bg-hover` (+ `tw:text-hover-foreground` where the label changes); selected, checked and current paint `tw:bg-selected` / `tw:text-selected-foreground`; a pressed wash is `tw:bg-pressed`; a modal backdrop is `tw:bg-scrim`; a disabled control is `tw:disabled:opacity-disabled`. Unset, `hover` and `selected` both resolve to `accent`, so they look alike by default — a brand that sets them separately is what tells a hovered row from a selected one, and a component that paints either with `accent` opts out of that. `accent` stays for a decorative tinted surface (an icon tile) that is neither.
|
|
787
794
|
|
|
788
795
|
A border **width** utility carries no colour of its own — a lone `tw:border` / `tw:border-t` / `tw:border-2` paints the element's _text_ colour, a near-black frame where a light-grey rule belongs. Pair every width with a colour: `tw:border tw:border-border` for chrome, `tw:border-input` on form controls. `pnpm test:stories` fails on any story that ships a width without one.
|
|
789
796
|
|
|
@@ -842,6 +849,61 @@ Because the value is read from the nearest provider, a nested override scopes to
|
|
|
842
849
|
|
|
843
850
|
Define a custom brand with `@keboola/brand-registry`'s `brandSchema` (Zod) and pass it in `brands`; or override the `--color-*` / `--radius-*` CSS variables directly on `:root`.
|
|
844
851
|
|
|
852
|
+
**Interaction states and surface corners** are part of the same theme. Every one is optional and, unset, keeps the look the package ships:
|
|
853
|
+
|
|
854
|
+
| Theme field | CSS variable | Unset |
|
|
855
|
+
| -------------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------- |
|
|
856
|
+
| `colors.hover` / `hoverForeground` | `--hover` / `--hover-foreground` | `accent` / `accent-foreground` |
|
|
857
|
+
| `colors.pressed` | `--pressed` | `accent`, a step stronger — no component reads it yet |
|
|
858
|
+
| `colors.selected` / `selectedForeground` | `--selected` / `--selected-foreground` | `accent` / `accent-foreground` |
|
|
859
|
+
| `colors.scrim` | `--scrim` | black at 50% |
|
|
860
|
+
| `opacity.disabled` | `--disabled-opacity` | `0.5` |
|
|
861
|
+
| `radii.card` | `--radius-card` | `Card`: `radii.lg`; `tw:rounded-card`: 10px |
|
|
862
|
+
| `radii.popover` | `--radius-popover` | menus, popovers, hover cards, tooltips 1rem |
|
|
863
|
+
| `radii.modal` | `--radius-modal` | `Modal` / `AlertModal` 1.5rem |
|
|
864
|
+
| `radii.sheet` | `--radius-sheet` | `Sheet`'s inner edge: `radii.lg` |
|
|
865
|
+
| `radii.toast` | `--radius-toast` | `Toast`: `radii.lg` |
|
|
866
|
+
| `colors.sidebar.sidebarHover` / `sidebarHoverForeground` | `--sidebar-hover` / `--sidebar-hover-foreground` | `sidebarAccent` / `sidebarAccentForeground` |
|
|
867
|
+
| `colors.sidebar.sidebarSelected` / `sidebarSelectedForeground` | `--sidebar-selected` / `--sidebar-selected-foreground` | `sidebarAccent` / `sidebarAccentForeground` |
|
|
868
|
+
|
|
869
|
+
- The state colours take **any CSS colour**, not the `R G B` channels the other colours use, so a wash can be translucent.
|
|
870
|
+
- Each scheme falls back on its own: a value set in `colors` does not reach dark mode. Set `colorsDark` too.
|
|
871
|
+
- Set `hover` and `hoverForeground` together, and `selected` and `selectedForeground`. Several components change the label on hover, and an unset foreground keeps the `accent-foreground` blue over whatever wash you chose.
|
|
872
|
+
- Unset, a few components keep a hover or selected look of their own rather than `accent`: argo `DropdownMenu` (a `primary` tint), `Table` rows and `SectionNav` (`muted`). Once a theme sets the token, they follow it like the rest.
|
|
873
|
+
- `Sidebar` and `Navbar` sit on their own surface, so they take their own pair: `sidebarHover` for a hovered or open item, `sidebarSelected` for the current page. Set them inside `colors.sidebar` (and `colorsDark.sidebar`).
|
|
874
|
+
- The fallbacks resolve where each class is used, so a brand that only re-points `accent` still moves hover and selected with it.
|
|
875
|
+
|
|
876
|
+
```ts
|
|
877
|
+
const brand: Brand = {
|
|
878
|
+
// …
|
|
879
|
+
theme: {
|
|
880
|
+
colors: {
|
|
881
|
+
// …
|
|
882
|
+
hover: 'color-mix(in srgb, rgb(15 23 42) 4%, transparent)',
|
|
883
|
+
hoverForeground: 'rgb(15 23 42)',
|
|
884
|
+
selected: 'rgb(224 242 254)',
|
|
885
|
+
selectedForeground: 'rgb(7 89 133)',
|
|
886
|
+
scrim: 'rgb(15 23 42 / 0.55)',
|
|
887
|
+
},
|
|
888
|
+
colorsDark: {
|
|
889
|
+
// …
|
|
890
|
+
hover: 'color-mix(in srgb, rgb(241 245 249) 7%, transparent)',
|
|
891
|
+
hoverForeground: 'rgb(241 245 249)',
|
|
892
|
+
},
|
|
893
|
+
radii: {
|
|
894
|
+
sm: '6px',
|
|
895
|
+
md: '8px',
|
|
896
|
+
lg: '10px',
|
|
897
|
+
card: '16px',
|
|
898
|
+
popover: '16px',
|
|
899
|
+
modal: '24px',
|
|
900
|
+
sheet: '24px',
|
|
901
|
+
toast: '16px',
|
|
902
|
+
},
|
|
903
|
+
},
|
|
904
|
+
};
|
|
905
|
+
```
|
|
906
|
+
|
|
845
907
|
## Testing (Vitest)
|
|
846
908
|
|
|
847
909
|
The published ESM barrel is plain-Node resolvable — `import('@keboola/design')` works under raw Node, so **no special Vitest config is required** to render a component. A default jsdom project is enough:
|
|
@@ -873,10 +935,10 @@ pnpm exec ui-gen-bench eval --serve dist --route /tokens --brief "Tokens list wi
|
|
|
873
935
|
## Common Tailwind patterns
|
|
874
936
|
|
|
875
937
|
```
|
|
876
|
-
tw:not-disabled:hover:bg-
|
|
877
|
-
tw:disabled:opacity-
|
|
938
|
+
tw:not-disabled:hover:bg-hover
|
|
939
|
+
tw:disabled:opacity-disabled tw:cursor-not-allowed
|
|
878
940
|
tw:focus-visible:ring-2 tw:ring-primary
|
|
879
941
|
tw:[&_svg]:text-muted-foreground
|
|
880
942
|
```
|
|
881
943
|
|
|
882
|
-
The `tw:` prefix always comes **first**, ahead of every variant — `tw:not-disabled:hover:bg-
|
|
944
|
+
The `tw:` prefix always comes **first**, ahead of every variant — `tw:not-disabled:hover:bg-hover`, never `not-disabled:hover:tw-bg-hover`. Tailwind v4 makes the prefix a variant of its own, so it leads the chain and the utility keeps its bare name.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,201 @@
|
|
|
1
1
|
# @keboola/design
|
|
2
2
|
|
|
3
|
+
## 14.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- `ToolCallApproval` v2 — redesigned around what an agent chat's approval card needs. It had no consumers, so the old API is replaced outright.
|
|
8
|
+
- Removed: `enableShortcuts` (Enter approve / Escape reject) and the `actions` override; `toolName` is now optional.
|
|
9
|
+
- Actions: `approveLabel` / `rejectLabel`, `approveVariant` (`'primary' | 'danger'`), an optional `extraAction` (e.g. "Always allow"), `pendingAction` (that button spins, every action disables), `isDisabled`.
|
|
10
|
+
- Header: `eyebrow` slot, optional `toolName`, `title`.
|
|
11
|
+
- Terminal states: `approved`, `rejected`, `expired`, `timed-out`, `cancelled`, `unattended`, with `statusLabel` / `statusMessage`, `resolvedBy` / `resolvedAt`, and `density="record"` for a one-line resolved record.
|
|
12
|
+
- Body: `children`, `notices` (warning / destructive / info rows), `aside` (beside the detail, stacked in a narrow container), `error`.
|
|
13
|
+
- Keyboard: `shortcutKey` (`'enter' | 'mod-enter' | 'none'`) approves from anywhere and shows the key on the button; `isShortcutHintOnly` shows it for an app that owns the shortcut.
|
|
14
|
+
- Stable test ids: `tool-call-approval`, `tool-approve-button`, `tool-decline-button`, `tool-extra-action-button`.
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- `AnswerSources` and `SourceChip`: the provenance row under an answer. Chips carry a `verified` / `unverified` / `neutral` verdict and render as a link, button or label; the row collapses past six chips, summarises unverified ones once, states when none were declared and takes a `footnote` slot.
|
|
19
|
+
|
|
20
|
+
- `ChatNotice`: a transcript notice row over `Alert` with `tone` (`error` / `warn` / `info`), an `action` slot, collapsible "Technical details" and an optional `retryAfter` countdown.
|
|
21
|
+
|
|
22
|
+
- AI Kit composer chips: `AttachmentChip` (uploading / ready / error file chip with remove), `ContextChip` (quoted excerpt with "Show all" and images), `ModeChip` (removable animated mode pill) and `JumpToLatest` (scroll-to-latest button that pulses while the agent is working).
|
|
23
|
+
|
|
24
|
+
- `SuggestedPrompt` takes `description` (a secondary line under the label), `trailing` (content pinned to the row's end, e.g. a badge) and `aria-label`. Without them it renders as before.
|
|
25
|
+
|
|
26
|
+
- `PlanApproval` and `AnswerSummary` take an `expired` state for a card closed with no decision.
|
|
27
|
+
- `PlanApproval`: `status="expired"` (orange `Expired` pill, no actions), plus `statusLabel` to rename the pill and `statusMessage` shown under the title.
|
|
28
|
+
- `AnswerSummary`: `variant="expired"` (header ends `Expired`), plus `statusLabel` and a `statusMessage` shown first once expanded.
|
|
29
|
+
|
|
30
|
+
- `PromptInput` takes `allowSendWhileBusy`: with it, a non-empty box sends while the conversation is `streaming` or `submitted` instead of refusing the keystroke, and Stop moves to a control of its own so cancelling never means emptying the box first. Off by default, so every existing composer behaves exactly as before.
|
|
31
|
+
|
|
32
|
+
Kai's composer turns that on. A message typed while Kai is working is queued and shown waiting rather than silently dropped, and a message typed under an open question answers it.
|
|
33
|
+
|
|
34
|
+
- `AnswerActions` takes opt-in `onDownComment` (+ `commentPlaceholder`), a one-line comment input after a thumbs-down, and `onRegenerate` (+ `regenerateLabel`), an "Ask again" button; both are off by default
|
|
35
|
+
|
|
36
|
+
- `FileDownloadChip` takes opt-in `onPreview` (split chip) and `actions`; new `FileGallery` block for image thumbnails (lazy, host-owned URLs and loading, capped with "+N more"). The default chip renders as before
|
|
37
|
+
|
|
38
|
+
- `MessageBubble` takes opt-in `timestamp="visible"`, `quote`, `status` + `onRetry`, `author`, `collapseAfterPx` and `avatar`; without them it renders as before
|
|
39
|
+
|
|
40
|
+
- `Modal.Content` takes `align="top"`: a new-design modal pinned to the top instead of centred, for a form whose height changes while it is in use. The legacy modal is always top-anchored.
|
|
41
|
+
|
|
42
|
+
- `MultiCombobox` takes `renderAside`, a pane beside the list that describes the highlighted row, a group's own row included.
|
|
43
|
+
|
|
44
|
+
A combobox row's label fills the row, so content inside it can align to the row's end.
|
|
45
|
+
|
|
46
|
+
`MultiCombobox` takes `groupAppearance="banded"`, which puts each group, its row and open items, on a white card over a grey list.
|
|
47
|
+
|
|
48
|
+
A selectable group row reads checked or mixed from its locked items that are already selected.
|
|
49
|
+
|
|
50
|
+
`MultiCombobox` takes `collapseSelectedGroups`: each time the popup opens, a group whose items are all selected starts folded. A disabled group row still folds from its chevron.
|
|
51
|
+
|
|
52
|
+
`MultiCombobox` takes `asideOpen` and `onAsideOpenChange`: a button with a tooltip in the popup's bottom-right corner hides and shows the `renderAside` inspector. It is a grid column going from `0fr` to `1fr`, so the list narrows beside it rather than being covered, it keeps describing the last highlighted row until the popup closes, and it stays hidden, button included, while the popup is under 40rem wide.
|
|
53
|
+
|
|
54
|
+
A collapsible group's items fade and slide in as it unfolds and out as it folds, except under reduced motion. Banded rows are square inside their card, the first and last taking its corners, and enabled rows show a pointer.
|
|
55
|
+
|
|
56
|
+
`MultiCombobox` takes `defaultOpen` and `onOpenChange`, for a picker shown on demand with its list already open.
|
|
57
|
+
|
|
58
|
+
`MultiCombobox` takes `anchor`: with it there is no field, and the popup opens against that element with its search at the top. A banded popup is grey throughout, inspector included, with 8px of real space between group cards.
|
|
59
|
+
|
|
60
|
+
`MultiCombobox` takes `query`: search text typed elsewhere. With `anchor`, the popup then has no search of its own, and the host forwards the list keys to its hidden combobox input.
|
|
61
|
+
|
|
62
|
+
`Breadcrumb.Dropdown` takes `panelClassName`, for a panel background its search row shares with the list; the search row carries `data-slot="breadcrumb-dropdown-search"`.
|
|
63
|
+
|
|
64
|
+
A collapsible group's chevron, in `Combobox` / `MultiCombobox` and in `Breadcrumb.Dropdown.Group`, has a tooltip, and Cmd-click (Ctrl elsewhere) expands or collapses every group at once.
|
|
65
|
+
|
|
66
|
+
When a combobox group folds or unfolds, including all at once, the groups under it slide to their new place, and a windowed list keeps each row's measured height across a fold.
|
|
67
|
+
|
|
68
|
+
A query opens every collapsible group with a match, in `Combobox` / `MultiCombobox` and `Breadcrumb.Dropdown.Group`; a group folded under it stays folded until the query changes.
|
|
69
|
+
|
|
70
|
+
`MultiCombobox` takes `itemToLocked`: a selected item the user cannot remove looks disabled but still takes the highlight, so `renderAside` describes it and its group still folds; a group of only locked items locks its row.
|
|
71
|
+
|
|
72
|
+
An open `Combobox` / `MultiCombobox` popup marks `<body>` with `data-combobox-open`, counted across popups, so an app can lift the tooltips of the rows it lists. Combobox row labels carry `data-slot="combobox-item-label"`.
|
|
73
|
+
|
|
74
|
+
- `PromptInput` takes `canSubmitEmpty`, so a composer whose attachments are the message can send with no text. Off by default.
|
|
75
|
+
|
|
76
|
+
- `PromptInput` takes `blurOnEscape`, an `onKeyDown` that runs after its own key handling, `onPasteFiles` for files on the clipboard, and `busy` to hold the composer read-only while keeping focus. All opt-in.
|
|
77
|
+
|
|
78
|
+
- `PromptInput`'s `/` menu picks the highlighted command on Tab, and opens with an empty or loading row (`commandsLoading`, `commandsEmptyText`) when `commands` is an empty list. New opt-in `slashTrigger="typed"` opens it only for a `/` typed into an empty composer.
|
|
79
|
+
|
|
80
|
+
- Interaction-state and surface-corner tokens, so a theme can tell a hovered item from a selected one and round cards, menus and dialogs apart from controls. Unset, every token resolves to the value it replaced, so nothing changes until a theme sets one.
|
|
81
|
+
- `tw:bg-hover` / `tw:text-hover-foreground` (`--hover`, `--hover-foreground`) paint hover and keyboard highlight in Select, Combobox, Command, Breadcrumb, RadioGroup, Toggle, Calendar, DiffView, FileUpload, the markdown toolbar and AIKit. Unset: `accent` / `accent-foreground`. Argo `DropdownMenu` items, `Table` rows and `SectionNav` follow `--hover` too and, unset, keep their own `primary` / `muted` tint.
|
|
82
|
+
- `tw:bg-selected` / `tw:text-selected-foreground` (`--selected`, `--selected-foreground`) paint selected, checked and current in Table, Pagination, a checked `FieldBox`, the Calendar range, the active Breadcrumb item, SectionNav and a checked Command item. Unset: `accent` / `accent-foreground`. A checked argo `DropdownMenu` item follows `--selected` and, unset, keeps its `primary` tint.
|
|
83
|
+
- `tw:bg-pressed` (`--pressed`) is available for a pressed wash; no component paints it yet. Unset: `accent` a step towards its foreground.
|
|
84
|
+
- `tw:bg-scrim` (`--scrim`) is the `Modal`, `AlertModal` and `Sheet` backdrop. Unset: black at 50%.
|
|
85
|
+
- `tw:opacity-disabled` (`--disabled-opacity`) replaces every disabled `opacity-50`, `FieldBox` labels and `InputGroup` included. Unset: `0.5`. Controls disabled at 30%, 40% or 60% keep their own value.
|
|
86
|
+
- `--radius-card` rounds `Card`, `DashboardHero` and `tw:rounded-card`; unset, `Card` keeps `--radius-lg` and `rounded-card` keeps 10px. `--radius-popover` (`tw:rounded-popover`) rounds argo menus, popovers, hover cards and tooltips (unset 1rem). `--radius-modal` (`tw:rounded-modal`) rounds argo `Modal` and `AlertModal` (unset 1.5rem). `--radius-sheet` (`tw:rounded-sheet`) rounds the inner edge of an argo `Sheet` and `--radius-toast` (`tw:rounded-toast`) a `Toast`; unset, both keep `--radius-lg`.
|
|
87
|
+
- `tw:bg-sidebar-hover` / `tw:bg-sidebar-selected` (+ `-foreground`) split the `Sidebar` and `Navbar` hover from the current page, which both painted `sidebar-accent`. Unset, both are `sidebar-accent`; a current item keeps its selected fill while hovered.
|
|
88
|
+
- `ThemeProvider` emits all of them from a brand's `colors` / `colorsDark`, `radii` and `opacity`, and `BrandEditor` edits them.
|
|
89
|
+
|
|
90
|
+
- `InlineStepLabel` takes opt-in `meta`, and `detail` + `defaultExpanded` for a collapsible per-row detail; `InlineStepGroup` takes an opt-in `footer`. Both render as before without them
|
|
91
|
+
|
|
92
|
+
- `Tooltip.Title` heads a rich tooltip, and every floating overlay carries its own layer.
|
|
93
|
+
- `Tooltip.Title` is a small uppercase heading in the tooltip's text colour.
|
|
94
|
+
- `Tooltip` content spaces a nested `hr` and drops the last paragraph's bottom margin; on the legacy chrome a link takes the tooltip's text colour.
|
|
95
|
+
- `Tooltip` sits above `Modal` and every popup (1060); `HoverCard` sits with `Modal` (1051); a `DropdownMenu` submenu sits with its menu (1055).
|
|
96
|
+
- `Combobox` leaves `<body>` untouched while its popup is open.
|
|
97
|
+
|
|
98
|
+
- `Markdown` gains opt-in streaming and code features; every default renders as before:
|
|
99
|
+
- `splitSealedBlocks(text)` and `withholdOpenTail(text, { diagram, tableHead })` — pure helpers for streaming an answer through `Markdown.Root` / memoised `Markdown.Block`s.
|
|
100
|
+
- `highlight` — colours fenced SQL, Python, JS/TS, JSON, shell and YAML through a lazily loaded highlighter.
|
|
101
|
+
- `sortable` (also on `MarkdownTable`) — header presses sort rows, numeric-aware, with `aria-sort`.
|
|
102
|
+
- `diagramActions` and `diagramDownload` — extra diagram toolbar controls and a built-in "Download SVG" action; `DiagramBlock` forwards `renderActions`.
|
|
103
|
+
- `ChatInlineIcon` also draws Lucide names (`icon:info`, `icon:trash-2`, …).
|
|
104
|
+
|
|
105
|
+
- `Markdown` takes an opt-in `allowSvgFences`: an `svg fence, or an `xml / ```html fence whose body is a single SVG document, renders as a responsive chart instead of code. The SVG is sanitized with DOMPurify's SVG profile and loses scripts, event handlers, `foreignObject`, SMIL animation, `<style>` elements and every non-`#` reference. Raw inline HTML stays escaped, and the default is unchanged.
|
|
106
|
+
|
|
107
|
+
`ZoomableSvg` takes an opt-in `allowUse` to keep `<use>` (matplotlib draws every glyph with it) for markup whose `href`s are already limited to `#` references.
|
|
108
|
+
|
|
109
|
+
- `PromptInput` takes `history`: the prompts already sent, oldest first. ↑ with the caret at the start of the text recalls them, newest first; ↓ steps back to the draft. Open `/` and `@` menus keep the arrows.
|
|
110
|
+
|
|
111
|
+
- `Question` takes what an agent chat's question card needs. Additive; existing callers are unchanged.
|
|
112
|
+
- `isSubmitDisabled` keeps the answer from being sent, by click or ⌘/Ctrl+Enter.
|
|
113
|
+
- `isSubmitting` spins Submit and disables Skip.
|
|
114
|
+
- `error` shows why the last send failed, above the footer.
|
|
115
|
+
- `customAnswerMaxLength` caps the "Other" answer.
|
|
116
|
+
- An option's `badge` (e.g. `Recommended`) follows its label.
|
|
117
|
+
- `skipTooltip` replaces the Skip button's `Space` hint; `null` drops it.
|
|
118
|
+
|
|
119
|
+
- `Table.Header` puts its row on the card surface, and `Table.SkeletonRows` draws placeholder rows in a table's own columns while its rows load.
|
|
120
|
+
- The header is `bg-card` with an `h-11` row and a border under it; `withShadow` and `className` work as before.
|
|
121
|
+
- The surface sits on `thead`, so `className="tw:bg-table-header"` (the former default tint) or any other `bg-*` replaces it at rest and on hover.
|
|
122
|
+
- `Table.SkeletonRows` takes `columns`, `noun` and `rows` (5 by default); the first row announces `Loading {noun}` to screen readers.
|
|
123
|
+
- Each column takes the real cell's `className` and `colSpan` and draws a `text` line, a `name` (icon, name and description lines) or nothing (`empty`).
|
|
124
|
+
- A width class can be a list, cycled over the rows; the name line varies in width from row to row unless given one.
|
|
125
|
+
|
|
126
|
+
- `MermaidDiagram` renders with Pele, a dependency-free Mermaid renderer, in place of `mermaid` and `beautiful-mermaid`.
|
|
127
|
+
- Every Mermaid 12.1 diagram type; each type's code loads on first use, after which a diagram renders synchronously.
|
|
128
|
+
- Colours and font come from the DS tokens for the active scheme and are written into the SVG, so an exported SVG or PNG keeps them.
|
|
129
|
+
- `lucide:<name>` icons draw from the bundled Lucide pack; other icon packs draw no icon.
|
|
130
|
+
- A diagram cut off mid-stream shows the skeleton, and its source after 2 s without more input; invalid syntax shows the source.
|
|
131
|
+
- Layout and look follow Pele, not Mermaid.
|
|
132
|
+
|
|
133
|
+
- `Table` puts its body on the card surface, the same `bg-card` as `Table.Header`.
|
|
134
|
+
- The fill sits on `<table>`, so a caller's `bg-*` in `className` replaces it.
|
|
135
|
+
- Row hover and selection tints draw over it as before.
|
|
136
|
+
|
|
137
|
+
- `RjsfSchemaEditor` draws a `format: 'checkbox'` array as a group of DS `Checkbox`es.
|
|
138
|
+
- Each option toggles its value in the array; `readOnly` and `options.enumDisabled` disable them.
|
|
139
|
+
- `options.inline` lays the options out in a wrapping row.
|
|
140
|
+
|
|
141
|
+
- `RjsfSchemaEditor` renders an array of enum values (`uniqueItems` + `items.enum`, no `format: 'checkbox'`) as a `MultiCombobox`.
|
|
142
|
+
- The default `async-multi-select` widget offers the `items.enum` options, labelled by `items.options.enum_titles`, and writes the selection back as an array of the typed enum values.
|
|
143
|
+
- A stored value outside `items.enum` shows as a chip labelled by the value and survives an edit.
|
|
144
|
+
- `readOnly` and `ui:disabled` disable it; options in `ui:enumDisabled` cannot be picked.
|
|
145
|
+
- It does not load `async` options, create `tags` / `creatable` values or read `enumSource`; a host widget passed under `async-multi-select` replaces it for that.
|
|
146
|
+
|
|
147
|
+
### Patch Changes
|
|
148
|
+
|
|
149
|
+
- `MultiCombobox`: while nothing matches, the inspector and its button go at once and the list takes the whole width, so the inspector never describes a row the list no longer shows.
|
|
150
|
+
|
|
151
|
+
- `MultiCombobox`: with the inspector hidden, the list ends above the inspector button, so the button never covers a row at any scroll position.
|
|
152
|
+
|
|
153
|
+
- `Markdown`'s `allowSvgFences` keeps only an allowlist of paint and text declarations in a fenced chart's `style` attributes, so `image-set()` can no longer load a URL and `position: fixed` can no longer lay an overlay over the page.
|
|
154
|
+
|
|
155
|
+
- `Markdown`'s `allowSvgFences` caps the nodes a fence's `<use>` elements clone (20,000), not their count, so a few `<use>` aimed at a large group can no longer multiply into millions of rendered nodes.
|
|
156
|
+
|
|
157
|
+
- `Table.SkeletonRows` takes `gapClassName` on a `name` column, the gap between its icon and lines (`tw:gap-3.5` by default), so a table's placeholder name starts where its real name does.
|
|
158
|
+
|
|
159
|
+
- `Command.Item`'s keyboard highlight is the only row fill: a `checked` row shows a trailing check (or its checkbox / radio indicator), and rows no longer cross-fade on ↑/↓. The project switcher and Kai's chat history mark the current row this way (UT-5894)
|
|
160
|
+
|
|
161
|
+
- Updated dependencies:
|
|
162
|
+
- @keboola/brand-registry@2.1.0
|
|
163
|
+
|
|
164
|
+
## 13.2.0
|
|
165
|
+
|
|
166
|
+
### Minor Changes
|
|
167
|
+
|
|
168
|
+
- `Button` animates its state changes. `isLoading` crossfades the spinner with a leading or icon-only icon in its place, or grows it in before a bare label. An icon that appears fades in (and widens into place when it is new rather than swapped), and a changed label rolls over while the button's width follows. Nothing animates on first render, and `prefers-reduced-motion` turns it all off.
|
|
169
|
+
|
|
170
|
+
A label's text is wrapped in `span[data-slot="button-label"]` once it first changes; until then the markup is unchanged.
|
|
171
|
+
|
|
172
|
+
- `InlineEdit` is the one click-to-edit field for names and titles: a hover fill and focus ring instead of an underline, a field that fills its row while editing, Save / Cancel that scale with the text and read as text on a wide sized title, opt-in `multiline` wrapping that keeps the buttons on the first line, `Kbd` shortcut tooltips, argo Save / Cancel on every brand, and Enter / Escape / blur that hold while a save is in flight.
|
|
173
|
+
|
|
174
|
+
- `FacebookButton` block and `Facebook` vendor mark: Meta's Facebook Blue login button, the same in every brand and colour scheme.
|
|
175
|
+
- `label` picks "Log in with Facebook" (default) or "Continue with Facebook"; `isLoading` swaps the mark for a spinner and disables the button.
|
|
176
|
+
- `Facebook` is the logo pack's primary logo; `mono` renders the secondary logo (the disc with the "f" cut out).
|
|
177
|
+
|
|
178
|
+
### Patch Changes
|
|
179
|
+
|
|
180
|
+
- SplitButton, MultiActionButton and FileDownloadChip keep their leading icon while loading; Button crossfades it with the spinner.
|
|
181
|
+
|
|
182
|
+
- `SplitButton` takes `onActionsCloseAutoFocus`, run as its actions menu closes. New folder in Transformations, Flows and Workspaces opens Create folder from it, so the Name field keeps its focus instead of losing it to the menu teardown
|
|
183
|
+
|
|
184
|
+
- `Alert` sets its description 4 px under the title instead of 16 px.
|
|
185
|
+
|
|
186
|
+
- Depends on `@tanstack/form-core` directly, so the form types in `dist` import it instead of carrying their own copy.
|
|
187
|
+
|
|
188
|
+
- `FullScreenModal` locks the page's scroll while it is open (`lockBodyScroll`, on by default)
|
|
189
|
+
- Sets `overflow: hidden` on `<body>` next to the `full-screen-modal-open` class.
|
|
190
|
+
- Releases both once the last locking modal closes; modals with `lockBodyScroll={false}` don't hold the lock.
|
|
191
|
+
- Hands `<body>` back the inline `overflow` it had before the first lock.
|
|
192
|
+
|
|
193
|
+
- `PageHeader.Detail`: while the title is renamed, the hidden badges and actions take no room — the field's last button lines up with the actions above it, and no empty space opens below the field.
|
|
194
|
+
|
|
195
|
+
- `PageHeader` lets an inline rename take the whole title row: a title holding a textarea grows to fill the row and drops its right padding, an empty badges slot collapses instead of reserving space, the title icon and badges stay centred on the first line when a long title wraps, and the badges and actions step aside while the title is renamed, fading back once it has shrunk.
|
|
196
|
+
|
|
197
|
+
- Collapsed sidebar labels show after 50ms instead of 300ms.
|
|
198
|
+
|
|
3
199
|
## 13.1.3
|
|
4
200
|
|
|
5
201
|
### Patch Changes
|
package/COMPONENT-API.md
CHANGED
|
@@ -14,13 +14,13 @@ Source: `src/components/Button/Button.tsx`
|
|
|
14
14
|
|
|
15
15
|
> Icons are composed as children, not an `icon` prop. Plus all native `<button>` attributes.
|
|
16
16
|
|
|
17
|
-
| Prop | Type | Required | Default | Description
|
|
18
|
-
| ----------- | --------------------------------------------------------------------------------------------------------------------- | -------- | --------- |
|
|
19
|
-
| `asChild` | `boolean` | no | `false` | Render as a Radix `Slot` so the parent JSX (e.g. a `react-router` `<Link>`) becomes the button element.
|
|
20
|
-
| `block` | `boolean \| null` | no | `false` |
|
|
21
|
-
| `isLoading` | `boolean` | no | `false` |
|
|
22
|
-
| `size` | `"small" \| "medium" \| "large" \| "icon-lg" \| "icon" \| "icon-sm" \| "icon-xs" \| "icon-2xs" \| "icon-3xs" \| null` | no | `medium` |
|
|
23
|
-
| `variant` | `"primary" \| "secondary" \| "kai" \| "danger" \| "invisible" \| "outline" \| "inline" \| null` | no | `primary` |
|
|
17
|
+
| Prop | Type | Required | Default | Description |
|
|
18
|
+
| ----------- | --------------------------------------------------------------------------------------------------------------------- | -------- | --------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| `asChild` | `boolean` | no | `false` | Render as a Radix `Slot` so the parent JSX (e.g. a `react-router` `<Link>`) becomes the button element. |
|
|
20
|
+
| `block` | `boolean \| null` | no | `false` | |
|
|
21
|
+
| `isLoading` | `boolean` | no | `false` | Shows a spinner in place of the leading icon, or before the label when there is none. The caller still controls `disabled`. |
|
|
22
|
+
| `size` | `"small" \| "medium" \| "large" \| "icon-lg" \| "icon" \| "icon-sm" \| "icon-xs" \| "icon-2xs" \| "icon-3xs" \| null` | no | `medium` | |
|
|
23
|
+
| `variant` | `"primary" \| "secondary" \| "kai" \| "danger" \| "invisible" \| "outline" \| "inline" \| null` | no | `primary` | |
|
|
24
24
|
|
|
25
25
|
### `ButtonInline`
|
|
26
26
|
|
|
@@ -363,48 +363,58 @@ Source: `src/blocks/Form/connectors/MultiComboboxField.tsx`
|
|
|
363
363
|
|
|
364
364
|
> Several values from a searchable list — state is `string[]`, never objects, so the form value stays what gets submitted. Project labels with `itemToLabel`; add `allowCreate` for an enum the user may extend. Imported by name from `@keboola/design`, composed inside `form.AppField` — NOT reachable as `field.MultiComboboxField`.
|
|
365
365
|
|
|
366
|
-
| Prop
|
|
367
|
-
|
|
|
368
|
-
| `action`
|
|
369
|
-
| `allowClear`
|
|
370
|
-
| `allowCreate`
|
|
371
|
-
| `allowSelectAll`
|
|
372
|
-
| `
|
|
373
|
-
| `
|
|
374
|
-
| `
|
|
375
|
-
| `
|
|
376
|
-
| `
|
|
377
|
-
| `
|
|
378
|
-
| `
|
|
379
|
-
| `
|
|
380
|
-
| `
|
|
381
|
-
| `
|
|
382
|
-
| `
|
|
383
|
-
| `
|
|
384
|
-
| `
|
|
385
|
-
| `
|
|
386
|
-
| `
|
|
387
|
-
| `
|
|
388
|
-
| `
|
|
389
|
-
| `
|
|
390
|
-
| `
|
|
391
|
-
| `
|
|
392
|
-
| `
|
|
393
|
-
| `
|
|
394
|
-
| `
|
|
395
|
-
| `
|
|
396
|
-
| `
|
|
397
|
-
| `
|
|
398
|
-
| `
|
|
399
|
-
| `
|
|
400
|
-
| `
|
|
401
|
-
| `
|
|
402
|
-
| `
|
|
403
|
-
| `
|
|
404
|
-
| `
|
|
405
|
-
| `
|
|
406
|
-
| `
|
|
407
|
-
| `
|
|
366
|
+
| Prop | Type | Required | Default | Description |
|
|
367
|
+
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
368
|
+
| `action` | `ReactNode` | no | — | Trailing node on the label row (e.g. a `Link`); not part of the accessible name. |
|
|
369
|
+
| `allowClear` | `boolean` | no | — | Clear-all button, shown only while chips exist. Chips stay removable either way. |
|
|
370
|
+
| `allowCreate` | `boolean` | no | — | |
|
|
371
|
+
| `allowSelectAll` | `boolean` | no | — | "Select All" row for the whole set; hidden while a query is active, clears when all are selected. |
|
|
372
|
+
| `anchor` | `Element \| VirtualElement \| RefObject<Element \| null> \| (() => Element \| VirtualElement \| null) \| null` | no | — | No field: the popup opens against this element, its search at the top. Pair with `defaultOpen`. |
|
|
373
|
+
| `aria-describedby` | `string` | no | — | |
|
|
374
|
+
| `asideOpen` | `boolean` | no | — | Whether the inspector shows; a button in the popup toggles it. Uncontrolled, it starts open. |
|
|
375
|
+
| `canCreate` | `((query: string) => boolean)` | no | — | Rejects a value `allowCreate` would mint; values naming an item or already selected skip it. |
|
|
376
|
+
| `className` | `string` | no | — | |
|
|
377
|
+
| `collapseSelectedGroups` | `boolean` | no | — | Each time the popup opens, a group whose items are all selected starts folded. |
|
|
378
|
+
| `collapsibleGroups` | `boolean` | no | — | A row per group that folds it. A query shows every match regardless; state is keyed by position. |
|
|
379
|
+
| `createSeparator` | `string \| RegExp \| null` | no | — | Splits one entry into several values (default `','`). A `RegExp` must not capture; `null` never splits. |
|
|
380
|
+
| `defaultOpen` | `boolean` | no | — | The popup is open on mount, for a picker shown on demand. |
|
|
381
|
+
| `empty` | `ReactNode` | no | — | |
|
|
382
|
+
| `focusVariant` | `"off" \| "on" \| "default" \| null` | no | — | |
|
|
383
|
+
| `groupAppearance` | `"plain" \| "banded"` | no | — | `banded`: each group, its row and open items, is a white card on a grey list. |
|
|
384
|
+
| `groupToLabel` | `((group: Group<string>) => ReactNode)` | no | — | Defaults to the group's `label`, as `Select` shows it. |
|
|
385
|
+
| `help` | `ReactNode` | no | — | |
|
|
386
|
+
| `indicator` | `Indicator` | no | — | |
|
|
387
|
+
| `inputClassName` | `string` | no | — | |
|
|
388
|
+
| `inputValueSanitizer` | `((input: string) => string)` | no | — | Rewrites typed text before filtering and creating. Sees the whole text per keystroke — don't `trim()`. |
|
|
389
|
+
| `isItemEqualToValue` | `((itemValue: string, value: string) => boolean)` | no | — | Custom comparison logic used to determine if a combobox item value matches the current selected value. Useful when item values are objects without matching referentially. Defaults to `Object.is` comparison. |
|
|
390
|
+
| `isLoading` | `boolean` | no | — | Options still arriving; doesn't disable — pass `disabled` where the user must wait. |
|
|
391
|
+
| `items` | `readonly (string \| Group<string>)[]` | no | — | Read as immutable: pass a new array to change it; one mutated in place is not re-filtered. |
|
|
392
|
+
| `itemToChipColor` | `((item: string) => "gray" \| "gray-darker" \| "gray-inverse" \| "green" \| "green-darker" \| "green-inverse" \| "blue" \| "blue-inverse" \| "red" \| "orange" \| "orange-inverse" \| "amber" \| ... 9 more ...)` | no | — | |
|
|
393
|
+
| `itemToChipLabel` | `((item: string) => ReactNode)` | no | — | |
|
|
394
|
+
| `itemToDisabled` | `((item: string) => boolean)` | no | — | |
|
|
395
|
+
| `itemToIcon` | `((item: string) => ReactNode)` | no | — | |
|
|
396
|
+
| `itemToLabel` | `((item: string, query: string) => ReactNode)` | no | — | Row and chip content (unless `itemToChipLabel`), `itemToStringLabel` by default. - `query` is the search text, for `MarkedText`; a chip gets `''`. |
|
|
397
|
+
| `itemToLocked` | `((item: string) => boolean)` | no | — | A selected item no press removes: looks disabled, still highlights for `renderAside`. |
|
|
398
|
+
| `itemToStringLabel` | `((itemValue: string) => string)` | no | — | When the item values are objects (`<Combobox.Item value={object}>`), this function converts the object value to a string representation for display in the input. If the shape of the object is `{ value, label }`, the label will be used automatically without needing to specify this prop. |
|
|
399
|
+
| `itemToStringValue` | `((itemValue: string) => string)` | no | — | When the item values are objects (`<Combobox.Item value={object}>`), this function converts the object value to a string representation for form submission. If the shape of the object is `{ value, label }`, the value will be used automatically without needing to specify this prop. |
|
|
400
|
+
| `label` | `ReactNode` | no | — | |
|
|
401
|
+
| `maxVisible` | `number` | no | — | |
|
|
402
|
+
| `onAsideOpenChange` | `((open: boolean) => void)` | no | — | |
|
|
403
|
+
| `onOpenChange` | `((open: boolean) => void)` | no | — | |
|
|
404
|
+
| `onQueryChange` | `((query: string) => void)` | no | — | Reports the sanitized query, on mount too. Notification only — the control owns the text. |
|
|
405
|
+
| `pinnedChipLabels` | `ReactNode[]` | no | — | Non-removable chips ahead of the values, outside `maxVisible` and absent from `value`. |
|
|
406
|
+
| `query` | `string` | no | — | The search text, typed elsewhere (a chat composer): with `anchor`, the popup has no search. The host forwards ArrowUp, ArrowDown, Enter and Escape to the `combobox` input it renders. |
|
|
407
|
+
| `queryToCreateLabel` | `((query: string) => ReactNode)` | no | — | Words the create row. Receives the values it adds, trimmed and re-joined — not the entry as typed. |
|
|
408
|
+
| `queryToCreateValue` | `((query: string) => string)` | no | — | Projects one entered value into an item. Called once per trimmed part of a split entry. |
|
|
409
|
+
| `renderAside` | `((highlighted: MultiComboboxHighlighted<string, Group<string>>) => ReactNode)` | no | — | An inspector beside the list about the last highlighted row; `null` before any. Hidden while the popup is under 40rem wide. |
|
|
410
|
+
| `renderChips` | `((values: string[]) => ReactNode)` | no | — | Replaces the default chips; the chip props, `maxVisible` included, are then ignored. |
|
|
411
|
+
| `required` | `boolean` | no | — | |
|
|
412
|
+
| `requiredMark` | `RequiredMark` | no | — | Gated by `required`: `'required'` shows `*` only if required, `'optional'` shows `(optional)` only if not, `'hidden'` neither. Defaults to `'required'`. |
|
|
413
|
+
| `selectableGroups` | `boolean` | no | — | A group's row selects its matching enabled items. The row itself never enters `value`. |
|
|
414
|
+
| `sizing` | `"small" \| "medium" \| "default" \| null` | no | — | |
|
|
415
|
+
| `tooltip` | `ReactNode` | no | — | |
|
|
416
|
+
| `variant` | `"primary" \| "secondary" \| null` | no | — | |
|
|
417
|
+
| `virtualized` | `boolean \| "auto"` | no | — | Puts only the rows in view into the DOM: `'auto'` past 30 options, grouped or not; `true` always. |
|
|
408
418
|
|
|
409
419
|
### `field.CheckboxField`
|
|
410
420
|
|
|
@@ -524,7 +534,7 @@ Source: `src/components/ThemeProvider/ThemeProvider.tsx`
|
|
|
524
534
|
| Prop | Type | Required | Default | Description |
|
|
525
535
|
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
526
536
|
| `brandId` | `string` | no | — | Controlled active brand id. When set, the parent owns the value and `setBrand` only notifies via `onBrandIdChange` (it does not mutate internal state). |
|
|
527
|
-
| `brands` | `readonly { id: string; name: string; theme: { colors?: { foreground?: string; background?: string; muted?: string \| undefined; mutedForeground?: string \| undefined; border?: string \| undefined; ...
|
|
537
|
+
| `brands` | `readonly { id: string; name: string; theme: { colors?: { foreground?: string; background?: string; muted?: string \| undefined; mutedForeground?: string \| undefined; border?: string \| undefined; ... 29 more ...; sidebar?: { ...; } \| undefined; } \| undefined; ... 7 more ...; opacity?: { ...; } ...` | no | `[]` | Brands this provider knows about; the active brand id resolves against these. |
|
|
528
538
|
| `defaultBrandId` | `string` | no | — | Initial active brand id for uncontrolled use. Defaults to the design-system sentinel (`DEFAULT_BRAND_ID`) — no brand tokens injected, so the stylesheet defaults apply. |
|
|
529
539
|
| `defaultScheme` | `ColorScheme` | no | — | Initial scheme when uncontrolled; defaults to `light`. |
|
|
530
540
|
| `onBrandIdChange` | `((brandId: string) => void)` | no | — | Called with the next id whenever `setBrand` runs — required to persist the choice in controlled mode. |
|