@keboola/design 11.9.0 → 13.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 +45 -14
- package/CHANGELOG.md +246 -0
- package/COMPONENT-API.md +352 -294
- package/README.md +11 -1
- package/dist/{AIKit-ELIsegJz.js → AIKit-DcOlHIBr.js} +420 -247
- package/dist/AIKit-DcOlHIBr.js.map +1 -0
- package/dist/{Alert-BsIM_oFK.js → Alert-UI-CIs-1.js} +16 -16
- package/dist/Alert-UI-CIs-1.js.map +1 -0
- package/dist/{AlertModal-BGJdaRRj.js → AlertModal-mbSnuuka.js} +8 -8
- package/dist/AlertModal-mbSnuuka.js.map +1 -0
- package/dist/{AppShell-DRgJxpXW.js → AppShell-WSQabK8r.js} +15 -52
- package/dist/AppShell-WSQabK8r.js.map +1 -0
- package/dist/{AutoSaveTextarea-BeuWuszr.js → AutoSaveTextarea-C5iIr2Ts.js} +2 -2
- package/dist/{AutoSaveTextarea-BeuWuszr.js.map → AutoSaveTextarea-C5iIr2Ts.js.map} +1 -1
- package/dist/{Badge-o5jURtpB.js → Badge-DIjhwPvh.js} +4 -9
- package/dist/Badge-DIjhwPvh.js.map +1 -0
- package/dist/{BrandEditor-BsTBM3s6.js → BrandEditor-Bkd6dhb8.js} +7 -7
- package/dist/{BrandEditor-BsTBM3s6.js.map → BrandEditor-Bkd6dhb8.js.map} +1 -1
- package/dist/{BrandLogo-CoKBk4MI.js → BrandLogo-CKpVSZb6.js} +4 -4
- package/dist/BrandLogo-CKpVSZb6.js.map +1 -0
- package/dist/{Breadcrumb-xqEUxfwn.js → Breadcrumb-BUoAZyhO.js} +8 -14
- package/dist/Breadcrumb-BUoAZyhO.js.map +1 -0
- package/dist/{Button-DsRrU5F1.js → Button-B21oVcPU.js} +31 -14
- package/dist/Button-B21oVcPU.js.map +1 -0
- package/dist/{Calendar-cG5NIJ4O.js → Calendar-DFtmZzbF.js} +99 -99
- package/dist/Calendar-DFtmZzbF.js.map +1 -0
- package/dist/{Card-Dyo7055Q.js → Card-BQmBWHXl.js} +35 -7
- package/dist/Card-BQmBWHXl.js.map +1 -0
- package/dist/{Checkbox-Dq5fPNrO.js → Checkbox-8yIIgY7g.js} +4 -4
- package/dist/Checkbox-8yIIgY7g.js.map +1 -0
- package/dist/{Clipboard-BZitKiSA.js → Clipboard-_xf6hMDD.js} +2 -2
- package/dist/{Clipboard-BZitKiSA.js.map → Clipboard-_xf6hMDD.js.map} +1 -1
- package/dist/{ClipboardButton-KHQnPEh_.js → ClipboardButton-srUgWgwH.js} +4 -4
- package/dist/{ClipboardButton-KHQnPEh_.js.map → ClipboardButton-srUgWgwH.js.map} +1 -1
- package/dist/{CodeEditor-BJKJXA0c.js → CodeEditor-jZMw1ioj.js} +55 -165
- package/dist/CodeEditor-jZMw1ioj.js.map +1 -0
- package/dist/{ColorInput-Bj3dfPFA.js → ColorInput-B3gBZ8Ya.js} +12 -27
- package/dist/ColorInput-B3gBZ8Ya.js.map +1 -0
- package/dist/{ColorModeSwitch-CWt-DZGC.js → ColorModeSwitch-Bw9wMyoL.js} +7 -17
- package/dist/ColorModeSwitch-Bw9wMyoL.js.map +1 -0
- package/dist/Combobox-C_MTpQ1l.js +1081 -0
- package/dist/Combobox-C_MTpQ1l.js.map +1 -0
- package/dist/{Command-BDU3C1gg.js → Command-BQPiZCNz.js} +4 -4
- package/dist/{Command-BDU3C1gg.js.map → Command-BQPiZCNz.js.map} +1 -1
- package/dist/{CopyField-BHRQUyuF.js → CopyField-Ba7h8MqZ.js} +19 -55
- package/dist/{CopyField-BHRQUyuF.js.map → CopyField-Ba7h8MqZ.js.map} +1 -1
- package/dist/{DateInput-B6N8g0ra.js → DateInput-D0nWUasV.js} +6 -6
- package/dist/{DateInput-B6N8g0ra.js.map → DateInput-D0nWUasV.js.map} +1 -1
- package/dist/{DatePicker-nA8YdE84.js → DatePicker-CtSa9b3V.js} +3 -3
- package/dist/{DatePicker-nA8YdE84.js.map → DatePicker-CtSa9b3V.js.map} +1 -1
- package/dist/{DateRangeInput-7M9Z4cVO.js → DateRangeInput-i6wE45-V.js} +10 -14
- package/dist/DateRangeInput-i6wE45-V.js.map +1 -0
- package/dist/{DateRangePicker-DjSUFjh4.js → DateRangePicker-BAnuz6vO.js} +9 -13
- package/dist/DateRangePicker-BAnuz6vO.js.map +1 -0
- package/dist/DiffView-ppTIzh2h.js.map +1 -1
- package/dist/{DropdownMenu-CgVwhDvl.js → DropdownMenu-gRM-A8qU.js} +3 -3
- package/dist/DropdownMenu-gRM-A8qU.js.map +1 -0
- package/dist/{FieldItem-DZGIdiXE.js → FieldItem-BHViBJS3.js} +12 -25
- package/dist/FieldItem-BHViBJS3.js.map +1 -0
- package/dist/{FieldItem-vhIJW4pj.d.ts → FieldItem-CPN1xjN5.d.ts} +11 -25
- package/dist/{FileUpload-DYQCTGjU.js → FileUpload-Ch2hrIWq.js} +11 -16
- package/dist/{FileUpload-DYQCTGjU.js.map → FileUpload-Ch2hrIWq.js.map} +1 -1
- package/dist/{Form-CcK7dRrC.js → Form-VkzfVPyT.js} +15 -23
- package/dist/{Form-CcK7dRrC.js.map → Form-VkzfVPyT.js.map} +1 -1
- package/dist/{FormGroup-DR_gZ25-.js → FormGroup-CmCppxOn.js} +11 -17
- package/dist/FormGroup-CmCppxOn.js.map +1 -0
- package/dist/{FullScreenModal-CN9nAs72.js → FullScreenModal-Cwnm8WdM.js} +15 -29
- package/dist/FullScreenModal-Cwnm8WdM.js.map +1 -0
- package/dist/{HoverCard-B9ZMJxjn.js → HoverCard-B8OKu9XZ.js} +2 -2
- package/dist/{HoverCard-B9ZMJxjn.js.map → HoverCard-B8OKu9XZ.js.map} +1 -1
- package/dist/{InputGroup-Do8K2hvD.js → InputGroup-CrlMRz4X.js} +11 -13
- package/dist/InputGroup-CrlMRz4X.js.map +1 -0
- package/dist/{Kbd-LCFMumoq.js → Kbd-J4n1J6i4.js} +23 -13
- package/dist/Kbd-J4n1J6i4.js.map +1 -0
- package/dist/{MarkedText-DNGEUVWc.js → MarkedText-DlmlJO0u.js} +2 -2
- package/dist/{MarkedText-DNGEUVWc.js.map → MarkedText-DlmlJO0u.js.map} +1 -1
- package/dist/{MermaidDiagram-ZG0iiDV_.js → MermaidDiagram-B30x2yV7.js} +16 -34
- package/dist/MermaidDiagram-B30x2yV7.js.map +1 -0
- package/dist/{Modal-I3VWk2oo.js → Modal-BkSuS9Yz.js} +17 -34
- package/dist/Modal-BkSuS9Yz.js.map +1 -0
- package/dist/{ModalTitle-CeLM_mX9.js → ModalTitle-BxopkIoQ.js} +3 -3
- package/dist/ModalTitle-BxopkIoQ.js.map +1 -0
- package/dist/{MultiActionButtonGroup-CYZ8IgSf.js → MultiActionButtonGroup-AWLj1Tg7.js} +3 -3
- package/dist/{MultiActionButtonGroup-CYZ8IgSf.js.map → MultiActionButtonGroup-AWLj1Tg7.js.map} +1 -1
- package/dist/{Navbar-Liy1TPI7.js → Navbar-B_DNpv5s.js} +9 -13
- package/dist/{Navbar-Liy1TPI7.js.map → Navbar-B_DNpv5s.js.map} +1 -1
- package/dist/{OtpInput-CbbymqYs.js → OtpInput-I8B8Vjdl.js} +2 -2
- package/dist/{OtpInput-CbbymqYs.js.map → OtpInput-I8B8Vjdl.js.map} +1 -1
- package/dist/{PageHeader-Q3IpCnQd.js → PageHeader-CgfyXpf1.js} +13 -26
- package/dist/PageHeader-CgfyXpf1.js.map +1 -0
- package/dist/{PageLayout-DSVM-ASz.js → PageLayout-DiAAILuS.js} +12 -20
- package/dist/PageLayout-DiAAILuS.js.map +1 -0
- package/dist/{PageToolbar-BKVJiDAL.js → PageToolbar-CIW0VmKe.js} +12 -42
- package/dist/PageToolbar-CIW0VmKe.js.map +1 -0
- package/dist/{Pagination-C_b7Xhey.js → Pagination-DH3f6LN0.js} +3 -3
- package/dist/{Pagination-C_b7Xhey.js.map → Pagination-DH3f6LN0.js.map} +1 -1
- package/dist/{Popconfirm-5pBzT_HQ.js → Popconfirm-Dhzn7sy6.js} +3 -3
- package/dist/{Popconfirm-5pBzT_HQ.js.map → Popconfirm-Dhzn7sy6.js.map} +1 -1
- package/dist/{Popover-BEbQrC_P.js → Popover-CEk915I1.js} +4 -3
- package/dist/Popover-CEk915I1.js.map +1 -0
- package/dist/{RadioGroup-Byc2mym4.js → RadioGroup-CBPRLRN0.js} +4 -4
- package/dist/{RadioGroup-Byc2mym4.js.map → RadioGroup-CBPRLRN0.js.map} +1 -1
- package/dist/{Search-Dhig_hPD.js → Search-DmkQo716.js} +3 -3
- package/dist/{Search-Dhig_hPD.js.map → Search-DmkQo716.js.map} +1 -1
- package/dist/{SearchInput-92r2bkA7.js → SearchInput-D3qMkHaW.js} +8 -13
- package/dist/SearchInput-D3qMkHaW.js.map +1 -0
- package/dist/{SectionNav-CNLJsiVG.js → SectionNav-TU5i3JeM.js} +10 -42
- package/dist/SectionNav-TU5i3JeM.js.map +1 -0
- package/dist/{Select-DV3Hak_l.js → Select-B4uK0QVm.js} +10 -12
- package/dist/Select-B4uK0QVm.js.map +1 -0
- package/dist/{Sheet-OparjIi-.js → Sheet-D0fAE14T.js} +5 -9
- package/dist/Sheet-D0fAE14T.js.map +1 -0
- package/dist/{Sidebar-CLEbBtNY.js → Sidebar-ZLMNIbg5.js} +16 -33
- package/dist/Sidebar-ZLMNIbg5.js.map +1 -0
- package/dist/{Slider-DLclvRws.js → Slider-B0ou9r0B.js} +3 -3
- package/dist/{Slider-DLclvRws.js.map → Slider-B0ou9r0B.js.map} +1 -1
- package/dist/{Stepper-C8sm9ZFM.js → Stepper-BLkLhfnd.js} +6 -9
- package/dist/{Stepper-C8sm9ZFM.js.map → Stepper-BLkLhfnd.js.map} +1 -1
- package/dist/{Switch-B0WdGSjz.js → Switch-DZvNePOm.js} +2 -2
- package/dist/{Switch-B0WdGSjz.js.map → Switch-DZvNePOm.js.map} +1 -1
- package/dist/{Table-CvYuTuNU.js → Table-BaVT5Tkn.js} +6 -11
- package/dist/{Table-CvYuTuNU.js.map → Table-BaVT5Tkn.js.map} +1 -1
- package/dist/{Tabs-eB974xJf.js → Tabs-CTDmye1N.js} +3 -3
- package/dist/{Tabs-eB974xJf.js.map → Tabs-CTDmye1N.js.map} +1 -1
- package/dist/{TextInput-CFTf4Cz1.js → TextInput-BWYXbfs4.js} +10 -14
- package/dist/TextInput-BWYXbfs4.js.map +1 -0
- package/dist/{ThemeProvider-DAmNn9Sd.js → ThemeProvider-VF38VfUa.js} +13 -31
- package/dist/ThemeProvider-VF38VfUa.js.map +1 -0
- package/dist/{TimePicker-BGeqc-Ed.js → TimePicker-CDGYrRxi.js} +2 -2
- package/dist/{TimePicker-BGeqc-Ed.js.map → TimePicker-CDGYrRxi.js.map} +1 -1
- package/dist/{Timeline-C8-wnRRr.js → Timeline-B-I6sb0M.js} +2 -2
- package/dist/{Timeline-C8-wnRRr.js.map → Timeline-B-I6sb0M.js.map} +1 -1
- package/dist/{Toast-Dr6Uw7ao.js → Toast-PfQf3vj-.js} +2 -2
- package/dist/{Toast-Dr6Uw7ao.js.map → Toast-PfQf3vj-.js.map} +1 -1
- package/dist/{Workbench-UR2FBC7I.js → Workbench-DmZzpkj7.js} +2 -2
- package/dist/{Workbench-UR2FBC7I.js.map → Workbench-DmZzpkj7.js.map} +1 -1
- package/dist/{ZoomableSvg-BZlk3PFJ.js → ZoomableSvg-C65nta_r.js} +5 -19
- package/dist/ZoomableSvg-C65nta_r.js.map +1 -0
- package/dist/charts.d.ts +21 -52
- package/dist/charts.js +13 -39
- package/dist/charts.js.map +1 -1
- package/dist/{context-D7X470dy.js → context-U293r3v-.js} +5 -9
- package/dist/context-U293r3v-.js.map +1 -0
- package/dist/editors.d.ts +27 -124
- package/dist/editors.js +29 -71
- package/dist/editors.js.map +1 -1
- package/dist/{findLiteralMatches-BGBw8Vbl.js → findLiteralMatches-DgGLzyG0.js} +8 -20
- package/dist/findLiteralMatches-DgGLzyG0.js.map +1 -0
- package/dist/flint.d.ts +3 -6
- package/dist/flint.js +31 -80
- package/dist/flint.js.map +1 -1
- package/dist/{icons-Cek151jC.js → icons-wcA70iQx.js} +105 -2
- package/dist/icons-wcA70iQx.js.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/icons.js +2 -2
- package/dist/{index-m-kQEWiY.d.ts → index-B7k-09i1.d.ts} +14 -2
- package/dist/index.d.ts +1180 -1867
- package/dist/index.js +69 -68
- package/dist/internal/blocks/AIKit.js +2 -2
- package/dist/internal/blocks/AppShell.js +1 -1
- package/dist/internal/blocks/AuthLayout.js +7 -27
- package/dist/internal/blocks/AuthLayout.js.map +1 -1
- package/dist/internal/blocks/AutoSaveTextarea.js +1 -1
- package/dist/internal/blocks/BrandEditor.js +1 -1
- package/dist/internal/blocks/ChartPanel.js +4 -8
- package/dist/internal/blocks/ChartPanel.js.map +1 -1
- package/dist/internal/blocks/ChipEditor.js +13 -21
- package/dist/internal/blocks/ChipEditor.js.map +1 -1
- 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 +4 -7
- 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/EmptyConfigurationActionCard.js +1 -1
- package/dist/internal/blocks/EmptyState.js +5 -9
- package/dist/internal/blocks/EmptyState.js.map +1 -1
- package/dist/internal/blocks/ErrorState.js +5 -9
- package/dist/internal/blocks/ErrorState.js.map +1 -1
- package/dist/internal/blocks/ExportMenu.js +6 -10
- package/dist/internal/blocks/ExportMenu.js.map +1 -1
- package/dist/internal/blocks/Form/connectors/ComboboxField.js +40 -0
- package/dist/internal/blocks/Form/connectors/ComboboxField.js.map +1 -0
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +5 -22
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js.map +1 -1
- package/dist/internal/blocks/Form.js +1 -1
- package/dist/internal/blocks/FormGroup.js +1 -1
- package/dist/internal/blocks/GoogleButton.js +1 -1
- package/dist/internal/blocks/MicrosoftButton.js +1 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
- package/dist/internal/blocks/MultiCombobox.js +160 -154
- 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 +4 -4
- package/dist/internal/blocks/PasswordInput.js.map +1 -1
- package/dist/internal/blocks/SearchInput.js +1 -1
- package/dist/internal/blocks/SearchInputWithNavigation.js +4 -4
- package/dist/internal/blocks/SectionNav.js +1 -1
- package/dist/internal/blocks/SplitButton.js +3 -3
- package/dist/internal/blocks/StatCard.js +4 -8
- package/dist/internal/blocks/StatCard.js.map +1 -1
- package/dist/internal/blocks/TextInput.js +1 -1
- package/dist/internal/blocks/Textarea.js +2 -2
- package/dist/internal/blocks/TimeInput.js +5 -5
- package/dist/internal/blocks/TimeInput.js.map +1 -1
- package/dist/internal/components/Alert.js +1 -1
- package/dist/internal/components/AlertModal.js +1 -1
- package/dist/internal/components/Avatar.js +1 -1
- 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.map +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/CollapsiblePanel.js +3 -3
- package/dist/internal/components/CollapsiblePanel.js.map +1 -1
- package/dist/internal/components/Combobox.js +2 -2
- package/dist/internal/components/DatePicker.js +1 -1
- package/dist/internal/components/DateRangePicker.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/MarkedText.js +1 -1
- package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +1 -1
- 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 +1 -1
- package/dist/internal/components/Popconfirm.js +1 -1
- package/dist/internal/components/Popover.js +1 -1
- package/dist/internal/components/RadioGroup.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.map +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 +5 -9
- package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/internal/components/Slider.js +1 -1
- package/dist/internal/components/SpotlightBackdrop.js +3 -8
- package/dist/internal/components/SpotlightBackdrop.js.map +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 +3 -3
- 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/Tooltip.js +1 -1
- package/dist/internal/components/Truncated.js +4 -8
- package/dist/internal/components/Truncated.js.map +1 -1
- package/dist/internal/components/Workbench.js +1 -1
- package/dist/internal/components/ZoomableSvg.js +1 -1
- package/dist/internal/hooks/useScrollbarPosition.js +1 -1
- package/dist/internal/hooks/useStableCallback.js +4 -13
- package/dist/internal/hooks/useStableCallback.js.map +1 -1
- package/dist/internal/utils/accessibleName.js +11 -0
- package/dist/internal/utils/accessibleName.js.map +1 -0
- package/dist/internal/utils.js +2 -2
- package/dist/markdown-editor.d.ts +15 -37
- package/dist/markdown-editor.js +17 -23
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.d.ts +4 -6
- package/dist/mermaid.js +1 -1
- package/dist/rjsf.d.ts +9 -19
- package/dist/rjsf.js +44 -84
- package/dist/rjsf.js.map +1 -1
- package/dist/{styles-BAFscjSV.js → styles-gzcjOyKv.js} +6 -6
- package/dist/styles-gzcjOyKv.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/svgTransforms-Dw2hRA-i.js +51 -0
- package/dist/svgTransforms-Dw2hRA-i.js.map +1 -0
- package/dist/testing.d.ts +3 -10
- package/dist/testing.js +7 -15
- package/dist/testing.js.map +1 -1
- package/dist/themeTokens-7DEab0kp.js +31 -0
- package/dist/themeTokens-7DEab0kp.js.map +1 -0
- package/dist/{toast-DIC0iNRf.js → toast-CyXEdaCZ.js} +3 -3
- package/dist/toast-CyXEdaCZ.js.map +1 -0
- package/dist/{themeScopeContext-D7fSyb06.js → useColorSchemeState-Cw4MCXUs.js} +14 -14
- package/dist/useColorSchemeState-Cw4MCXUs.js.map +1 -0
- package/dist/{useControllableState-M6494mCT.js → useControllableState-CUYXMsfz.js} +3 -7
- package/dist/useControllableState-CUYXMsfz.js.map +1 -0
- package/dist/useElement-D-RjrGa4.js +21 -0
- package/dist/useElement-D-RjrGa4.js.map +1 -0
- package/dist/useThemeAttributes-B199Regy.js +67 -0
- package/dist/useThemeAttributes-B199Regy.js.map +1 -0
- package/dist/{utils-BW4AE8VP.js → utils-Bd28bWgm.js} +31 -26
- package/dist/utils-Bd28bWgm.js.map +1 -0
- package/dist/vega.d.ts +8 -30
- package/dist/vega.js +5 -13
- package/dist/vega.js.map +1 -1
- package/dist/{vegaTheme-CSvFEMBl.js → vegaTheme-VQMWTlBw.js} +7 -21
- package/dist/vegaTheme-VQMWTlBw.js.map +1 -0
- package/package.json +28 -27
- package/src/styles.css +120 -14
- package/src/theme.css +130 -5
- package/dist/AIKit-ELIsegJz.js.map +0 -1
- package/dist/Alert-BsIM_oFK.js.map +0 -1
- package/dist/AlertModal-BGJdaRRj.js.map +0 -1
- package/dist/AppShell-DRgJxpXW.js.map +0 -1
- package/dist/Badge-o5jURtpB.js.map +0 -1
- package/dist/BrandLogo-CoKBk4MI.js.map +0 -1
- package/dist/Breadcrumb-xqEUxfwn.js.map +0 -1
- package/dist/Button-DsRrU5F1.js.map +0 -1
- package/dist/Calendar-cG5NIJ4O.js.map +0 -1
- package/dist/Card-Dyo7055Q.js.map +0 -1
- package/dist/Checkbox-Dq5fPNrO.js.map +0 -1
- package/dist/CodeEditor-BJKJXA0c.js.map +0 -1
- package/dist/ColorInput-Bj3dfPFA.js.map +0 -1
- package/dist/ColorModeSwitch-CWt-DZGC.js.map +0 -1
- package/dist/Combobox-D8PrEqTG.js +0 -619
- package/dist/Combobox-D8PrEqTG.js.map +0 -1
- package/dist/DateRangeInput-7M9Z4cVO.js.map +0 -1
- package/dist/DateRangePicker-DjSUFjh4.js.map +0 -1
- package/dist/DropdownMenu-CgVwhDvl.js.map +0 -1
- package/dist/FieldItem-DZGIdiXE.js.map +0 -1
- package/dist/FormGroup-DR_gZ25-.js.map +0 -1
- package/dist/FullScreenModal-CN9nAs72.js.map +0 -1
- package/dist/InputGroup-Do8K2hvD.js.map +0 -1
- package/dist/Kbd-LCFMumoq.js.map +0 -1
- package/dist/MermaidDiagram-ZG0iiDV_.js.map +0 -1
- package/dist/Modal-I3VWk2oo.js.map +0 -1
- package/dist/ModalTitle-CeLM_mX9.js.map +0 -1
- package/dist/PageHeader-Q3IpCnQd.js.map +0 -1
- package/dist/PageLayout-DSVM-ASz.js.map +0 -1
- package/dist/PageToolbar-BKVJiDAL.js.map +0 -1
- package/dist/Popover-BEbQrC_P.js.map +0 -1
- package/dist/SearchInput-92r2bkA7.js.map +0 -1
- package/dist/SectionNav-CNLJsiVG.js.map +0 -1
- package/dist/Select-DV3Hak_l.js.map +0 -1
- package/dist/Sheet-OparjIi-.js.map +0 -1
- package/dist/Sidebar-CLEbBtNY.js.map +0 -1
- package/dist/TextInput-CFTf4Cz1.js.map +0 -1
- package/dist/ThemeProvider-DAmNn9Sd.js.map +0 -1
- package/dist/ZoomableSvg-BZlk3PFJ.js.map +0 -1
- package/dist/context-D7X470dy.js.map +0 -1
- package/dist/findLiteralMatches-BGBw8Vbl.js.map +0 -1
- package/dist/icons-Cek151jC.js.map +0 -1
- package/dist/internal/components/StatusDot.js +0 -67
- package/dist/internal/components/StatusDot.js.map +0 -1
- package/dist/styles-BAFscjSV.js.map +0 -1
- package/dist/svgTransforms-CJAYPk7o.js +0 -81
- package/dist/svgTransforms-CJAYPk7o.js.map +0 -1
- package/dist/themeScopeContext-D7fSyb06.js.map +0 -1
- package/dist/themeTokens-qP1-55O7.js +0 -119
- package/dist/themeTokens-qP1-55O7.js.map +0 -1
- package/dist/toast-DIC0iNRf.js.map +0 -1
- package/dist/useControllableState-M6494mCT.js.map +0 -1
- package/dist/useElement-BK3AAiIf.js +0 -24
- package/dist/useElement-BK3AAiIf.js.map +0 -1
- package/dist/utils-BW4AE8VP.js.map +0 -1
- package/dist/vegaTheme-CSvFEMBl.js.map +0 -1
package/dist/vega.d.ts
CHANGED
|
@@ -2,43 +2,21 @@ import { ResolvedColorScheme } from "./types-BPcAjMG0.js";
|
|
|
2
2
|
import { Config } from "vega-lite";
|
|
3
3
|
//#region src/vega/useVegaTheme.d.ts
|
|
4
4
|
/**
|
|
5
|
-
* {@link vegaTheme} for the scheme and brand
|
|
6
|
-
* rebuilt whenever either changes.
|
|
5
|
+
* {@link vegaTheme} for the current scheme and brand, rebuilt when either changes.
|
|
7
6
|
*
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
* - The `useThemeAttributes` snapshot is the memo key: its reference moves on a
|
|
11
|
-
* scheme or brand switch and stands still otherwise, and `scheme` comes out of
|
|
12
|
-
* the same read, so the colours can never be resolved under one scheme and
|
|
13
|
-
* memoized under the other.
|
|
14
|
-
* - Re-rendering is not enough on its own — a consumer that compiles a spec in
|
|
15
|
-
* an effect must depend on this config (or on `useThemeAttributes().cacheKey`)
|
|
16
|
-
* and re-render the chart.
|
|
7
|
+
* - A consumer compiling a spec in an effect must depend on this config (or
|
|
8
|
+
* `useThemeAttributes().cacheKey`) and re-render the chart.
|
|
17
9
|
*/
|
|
18
10
|
declare const useVegaTheme: () => Config;
|
|
19
11
|
//#endregion
|
|
20
12
|
//#region src/vega/vegaTheme.d.ts
|
|
21
13
|
/**
|
|
22
|
-
*
|
|
23
|
-
* `Config`, for any consumer that compiles or renders a Vega-Lite spec.
|
|
14
|
+
* The design system's Vega-Lite chart look, following scheme and brand.
|
|
24
15
|
*
|
|
25
|
-
* - `
|
|
26
|
-
*
|
|
27
|
-
* -
|
|
28
|
-
*
|
|
29
|
-
* - `range.category` is `--chart-1..5` in series order — the same decorative
|
|
30
|
-
* palette the recharts wrappers in `@keboola/design/charts` use — so a
|
|
31
|
-
* categorical encoding matches the rest of the platform's data-viz instead of
|
|
32
|
-
* falling back to vega's `tableau10`.
|
|
33
|
-
* - `range.ramp` puts the low end of a quantitative scale on `--accent` rather
|
|
34
|
-
* than vega's blue-only default, which keeps the pale end legible on a dark
|
|
35
|
-
* surface.
|
|
36
|
-
* - A range set on the spec's own scale still wins, which is how a Flint chart
|
|
37
|
-
* keeps the series colours it resolves during assembly.
|
|
38
|
-
* - Colours are resolved to concrete `rgb(R, G, B)` strings, not `var()`
|
|
39
|
-
* references: vega does its colour maths in JS and never consults the
|
|
40
|
-
* stylesheet. Rebuild the config when the scheme or brand changes —
|
|
41
|
-
* `useVegaTheme` does that for you.
|
|
16
|
+
* - `range.category` is `--chart-1..5`, the same palette as `@keboola/design/charts`.
|
|
17
|
+
* - A range set on the spec's own scale still wins (Flint charts rely on it).
|
|
18
|
+
* - Colours are concrete `rgb()` strings — vega never reads the stylesheet — so rebuild on a
|
|
19
|
+
* scheme or brand change; `useVegaTheme` does.
|
|
42
20
|
*/
|
|
43
21
|
declare const vegaTheme: (scheme: ResolvedColorScheme, from?: Element | null) => Config;
|
|
44
22
|
//#endregion
|
package/dist/vega.js
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import { useThemeAttributes } from "./
|
|
2
|
-
import { vegaTheme } from "./vegaTheme-
|
|
1
|
+
import { useThemeAttributes } from "./useThemeAttributes-B199Regy.js";
|
|
2
|
+
import { vegaTheme } from "./vegaTheme-VQMWTlBw.js";
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
//#region src/vega/useVegaTheme.ts
|
|
5
5
|
/**
|
|
6
|
-
* {@link vegaTheme} for the scheme and brand
|
|
7
|
-
* rebuilt whenever either changes.
|
|
6
|
+
* {@link vegaTheme} for the current scheme and brand, rebuilt when either changes.
|
|
8
7
|
*
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
11
|
-
* - The `useThemeAttributes` snapshot is the memo key: its reference moves on a
|
|
12
|
-
* scheme or brand switch and stands still otherwise, and `scheme` comes out of
|
|
13
|
-
* the same read, so the colours can never be resolved under one scheme and
|
|
14
|
-
* memoized under the other.
|
|
15
|
-
* - Re-rendering is not enough on its own — a consumer that compiles a spec in
|
|
16
|
-
* an effect must depend on this config (or on `useThemeAttributes().cacheKey`)
|
|
17
|
-
* and re-render the chart.
|
|
8
|
+
* - A consumer compiling a spec in an effect must depend on this config (or
|
|
9
|
+
* `useThemeAttributes().cacheKey`) and re-render the chart.
|
|
18
10
|
*/
|
|
19
11
|
const useVegaTheme = () => {
|
|
20
12
|
const theme = useThemeAttributes();
|
package/dist/vega.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vega.js","names":[],"sources":["../src/vega/useVegaTheme.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { Config } from 'vega-lite';\n\nimport { useThemeAttributes } from '../components/ThemeProvider/useThemeAttributes';\n\nimport { vegaTheme } from './vegaTheme';\n\n/**\n * {@link vegaTheme} for the scheme and brand
|
|
1
|
+
{"version":3,"file":"vega.js","names":[],"sources":["../src/vega/useVegaTheme.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { Config } from 'vega-lite';\n\nimport { useThemeAttributes } from '../components/ThemeProvider/useThemeAttributes';\n\nimport { vegaTheme } from './vegaTheme';\n\n/**\n * {@link vegaTheme} for the current scheme and brand, rebuilt when either changes.\n *\n * - A consumer compiling a spec in an effect must depend on this config (or\n * `useThemeAttributes().cacheKey`) and re-render the chart.\n */\nexport const useVegaTheme = (): Config => {\n const theme = useThemeAttributes();\n\n // Keyed on the whole snapshot, not `theme.scheme` — a brand switch repaints tokens too.\n return useMemo(() => vegaTheme(theme.scheme, theme.scope), [theme]);\n};\n"],"mappings":";;;;;;;;;;AAaA,MAAa,qBAA6B;CACxC,MAAM,QAAQ,mBAAmB;CAGjC,OAAO,cAAc,UAAU,MAAM,QAAQ,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC;AACpE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createChannelResolver } from "./themeTokens-
|
|
1
|
+
import { createChannelResolver } from "./themeTokens-7DEab0kp.js";
|
|
2
2
|
//#region src/vega/vegaTokens.ts
|
|
3
3
|
/**
|
|
4
4
|
* Serializes `"R G B"` channels comma-separated, the only form vega parses.
|
|
@@ -85,26 +85,12 @@ const createVegaColorResolver = (scheme, from) => {
|
|
|
85
85
|
//#region src/vega/vegaTheme.ts
|
|
86
86
|
const CHART_FONT = "Inter, system-ui, sans-serif";
|
|
87
87
|
/**
|
|
88
|
-
*
|
|
89
|
-
* `Config`, for any consumer that compiles or renders a Vega-Lite spec.
|
|
88
|
+
* The design system's Vega-Lite chart look, following scheme and brand.
|
|
90
89
|
*
|
|
91
|
-
* - `
|
|
92
|
-
*
|
|
93
|
-
* -
|
|
94
|
-
*
|
|
95
|
-
* - `range.category` is `--chart-1..5` in series order — the same decorative
|
|
96
|
-
* palette the recharts wrappers in `@keboola/design/charts` use — so a
|
|
97
|
-
* categorical encoding matches the rest of the platform's data-viz instead of
|
|
98
|
-
* falling back to vega's `tableau10`.
|
|
99
|
-
* - `range.ramp` puts the low end of a quantitative scale on `--accent` rather
|
|
100
|
-
* than vega's blue-only default, which keeps the pale end legible on a dark
|
|
101
|
-
* surface.
|
|
102
|
-
* - A range set on the spec's own scale still wins, which is how a Flint chart
|
|
103
|
-
* keeps the series colours it resolves during assembly.
|
|
104
|
-
* - Colours are resolved to concrete `rgb(R, G, B)` strings, not `var()`
|
|
105
|
-
* references: vega does its colour maths in JS and never consults the
|
|
106
|
-
* stylesheet. Rebuild the config when the scheme or brand changes —
|
|
107
|
-
* `useVegaTheme` does that for you.
|
|
90
|
+
* - `range.category` is `--chart-1..5`, the same palette as `@keboola/design/charts`.
|
|
91
|
+
* - A range set on the spec's own scale still wins (Flint charts rely on it).
|
|
92
|
+
* - Colours are concrete `rgb()` strings — vega never reads the stylesheet — so rebuild on a
|
|
93
|
+
* scheme or brand change; `useVegaTheme` does.
|
|
108
94
|
*/
|
|
109
95
|
const vegaTheme = (scheme, from) => {
|
|
110
96
|
const token = createVegaColorResolver(scheme, from);
|
|
@@ -143,4 +129,4 @@ const vegaTheme = (scheme, from) => {
|
|
|
143
129
|
//#endregion
|
|
144
130
|
export { SERIES_TOKENS, createVegaColorResolver, vegaRgb, vegaTheme };
|
|
145
131
|
|
|
146
|
-
//# sourceMappingURL=vegaTheme-
|
|
132
|
+
//# sourceMappingURL=vegaTheme-VQMWTlBw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vegaTheme-VQMWTlBw.js","names":[],"sources":["../src/vega/vegaTokens.ts","../src/vega/vegaTheme.ts"],"sourcesContent":["import type { ResolvedColorScheme } from '../components/ThemeProvider/types';\nimport { createChannelResolver } from '../utils/themeTokens';\n\n/**\n * Serializes `\"R G B\"` channels comma-separated, the only form vega parses.\n *\n * - vega reads colours through d3-color 3.1, which answers `null` for the\n * space-separated CSS Color 4 form the rest of the package emits.\n * - A flat fill survives that anyway — the string reaches the SVG attribute and\n * the browser parses it. An interpolated one does not: both endpoints of a\n * sequential ramp collapse, and a quantitative scale paints solid black.\n */\nexport const vegaRgb = (channels: string, alpha?: number): string => {\n const c = channels.split(/\\s+/).join(', ');\n return alpha === undefined ? `rgb(${c})` : `rgba(${c}, ${alpha})`;\n};\n\n/** The `--chart-*` slots, in series order. */\nexport const SERIES_TOKENS = ['chart-1', 'chart-2', 'chart-3', 'chart-4', 'chart-5'] as const;\n\n/**\n * Fallback channels for the tokens a vega chart reads, mirroring the `:root` /\n * `[data-theme='dark']` blocks of `styles.css`. The resolver reaches these only\n * when the live custom property is missing — SSR, or a unit test that loads no\n * CSS.\n */\nconst FALLBACK_CHANNELS = {\n foreground: { light: '30 41 59', dark: '229 230 236' },\n 'muted-foreground': { light: '100 116 139', dark: '141 144 153' },\n border: { light: '229 231 235', dark: '52 53 62' },\n 'chart-1': { light: '31 143 255', dark: '92 173 255' },\n 'chart-2': { light: '0 194 135', dark: '0 230 161' },\n 'chart-3': { light: '146 92 255', dark: '173 133 255' },\n 'chart-4': { light: '245 147 0', dark: '255 190 92' },\n 'chart-5': { light: '237 94 223', dark: '242 140 232' },\n // The sequential ramp's low end and the surface it must stay legible against.\n accent: { light: '224 242 254', dark: '30 58 95' },\n card: { light: '255 255 255', dark: '34 34 40' },\n} as const;\n\nexport type VegaTokenName = keyof typeof FALLBACK_CHANNELS;\n\n/**\n * A vega-serializing token resolver bound to one `getComputedStyle` snapshot.\n *\n * - Answers `rgb(R, G, B)` / `rgba(R, G, B, a)` — see {@link vegaRgb}.\n * - Falls back per scheme when the custom property is not painted.\n * - Build one per palette, never at module level: the values change whenever\n * the scheme or the brand does.\n */\nexport const createVegaColorResolver = (scheme: ResolvedColorScheme, from?: Element | null) => {\n const resolve = createChannelResolver(from);\n\n return (token: VegaTokenName, alpha?: number): string =>\n vegaRgb(resolve(token, FALLBACK_CHANNELS[token][scheme]), alpha);\n};\n","import type { Config } from 'vega-lite';\n\nimport type { ResolvedColorScheme } from '../components/ThemeProvider/types';\n\nimport { createVegaColorResolver, SERIES_TOKENS } from './vegaTokens';\n\nconst CHART_FONT = 'Inter, system-ui, sans-serif';\n\n/**\n * The design system's Vega-Lite chart look, following scheme and brand.\n *\n * - `range.category` is `--chart-1..5`, the same palette as `@keboola/design/charts`.\n * - A range set on the spec's own scale still wins (Flint charts rely on it).\n * - Colours are concrete `rgb()` strings — vega never reads the stylesheet — so rebuild on a\n * scheme or brand change; `useVegaTheme` does.\n */\nexport const vegaTheme = (scheme: ResolvedColorScheme, from?: Element | null): Config => {\n const token = createVegaColorResolver(scheme, from);\n\n const label = token('muted-foreground');\n const heading = token('foreground');\n const line = token('border');\n\n return {\n background: 'transparent',\n font: CHART_FONT,\n axis: {\n labelColor: label,\n titleColor: heading,\n gridColor: token('border', 0.6),\n domainColor: line,\n tickColor: line,\n },\n legend: { labelColor: label, titleColor: heading },\n header: { labelColor: label, titleColor: heading },\n title: { color: heading, subtitleColor: label },\n text: { color: heading },\n range: {\n category: SERIES_TOKENS.map((name) => token(name)),\n ramp: [token('accent'), token('chart-1')],\n },\n };\n};\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,WAAW,UAAkB,UAA2B;CACnE,MAAM,IAAI,SAAS,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI;CACzC,OAAO,UAAU,KAAA,IAAY,OAAO,EAAE,KAAK,QAAQ,EAAE,IAAI,MAAM;AACjE;;AAGA,MAAa,gBAAgB;CAAC;CAAW;CAAW;CAAW;CAAW;AAAS;;;;;;;AAQnF,MAAM,oBAAoB;CACxB,YAAY;EAAE,OAAO;EAAY,MAAM;CAAc;CACrD,oBAAoB;EAAE,OAAO;EAAe,MAAM;CAAc;CAChE,QAAQ;EAAE,OAAO;EAAe,MAAM;CAAW;CACjD,WAAW;EAAE,OAAO;EAAc,MAAM;CAAa;CACrD,WAAW;EAAE,OAAO;EAAa,MAAM;CAAY;CACnD,WAAW;EAAE,OAAO;EAAc,MAAM;CAAc;CACtD,WAAW;EAAE,OAAO;EAAa,MAAM;CAAa;CACpD,WAAW;EAAE,OAAO;EAAc,MAAM;CAAc;CAEtD,QAAQ;EAAE,OAAO;EAAe,MAAM;CAAW;CACjD,MAAM;EAAE,OAAO;EAAe,MAAM;CAAW;AACjD;;;;;;;;;AAYA,MAAa,2BAA2B,QAA6B,SAA0B;CAC7F,MAAM,UAAU,sBAAsB,IAAI;CAE1C,QAAQ,OAAsB,UAC5B,QAAQ,QAAQ,OAAO,kBAAkB,MAAM,CAAC,OAAO,GAAG,KAAK;AACnE;;;ACjDA,MAAM,aAAa;;;;;;;;;AAUnB,MAAa,aAAa,QAA6B,SAAkC;CACvF,MAAM,QAAQ,wBAAwB,QAAQ,IAAI;CAElD,MAAM,QAAQ,MAAM,kBAAkB;CACtC,MAAM,UAAU,MAAM,YAAY;CAClC,MAAM,OAAO,MAAM,QAAQ;CAE3B,OAAO;EACL,YAAY;EACZ,MAAM;EACN,MAAM;GACJ,YAAY;GACZ,YAAY;GACZ,WAAW,MAAM,UAAU,EAAG;GAC9B,aAAa;GACb,WAAW;EACb;EACA,QAAQ;GAAE,YAAY;GAAO,YAAY;EAAQ;EACjD,QAAQ;GAAE,YAAY;GAAO,YAAY;EAAQ;EACjD,OAAO;GAAE,OAAO;GAAS,eAAe;EAAM;EAC9C,MAAM,EAAE,OAAO,QAAQ;EACvB,OAAO;GACL,UAAU,cAAc,KAAK,SAAS,MAAM,IAAI,CAAC;GACjD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;EAC1C;CACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keboola/design",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "13.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",
|
|
@@ -121,14 +121,19 @@
|
|
|
121
121
|
"devDependencies": {
|
|
122
122
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
123
123
|
"@google/design.md": "0.2.0",
|
|
124
|
+
"@keboola/agent-vocabulary": "^0.1.1",
|
|
125
|
+
"@keboola/eslint-plugin-design": "^0.5.0",
|
|
126
|
+
"@keboola/oxlint-config": "^10.2.0",
|
|
127
|
+
"@keboola/tsconfig": "^0.2.1",
|
|
128
|
+
"@keboola/vitest-config": "^1.0.0",
|
|
124
129
|
"@playwright/test": "1.63.0",
|
|
125
130
|
"@size-limit/esbuild": "12.1.0",
|
|
126
131
|
"@size-limit/file": "12.1.0",
|
|
127
|
-
"@storybook/addon-a11y": "10.
|
|
128
|
-
"@storybook/addon-docs": "^10.
|
|
129
|
-
"@storybook/addon-links": "^10.
|
|
130
|
-
"@storybook/addon-vitest": "10.
|
|
131
|
-
"@storybook/react-vite": "^10.
|
|
132
|
+
"@storybook/addon-a11y": "10.6.1",
|
|
133
|
+
"@storybook/addon-docs": "^10.6.1",
|
|
134
|
+
"@storybook/addon-links": "^10.6.1",
|
|
135
|
+
"@storybook/addon-vitest": "10.6.1",
|
|
136
|
+
"@storybook/react-vite": "^10.6.1",
|
|
132
137
|
"@tailwindcss/cli": "^4.3.3",
|
|
133
138
|
"@tailwindcss/typography": "^0.5.19",
|
|
134
139
|
"@tailwindcss/vite": "^4.3.3",
|
|
@@ -137,24 +142,24 @@
|
|
|
137
142
|
"@testing-library/react": "^16.3.3",
|
|
138
143
|
"@testing-library/user-event": "^14.6.7",
|
|
139
144
|
"@types/d3-color": "^3.1.3",
|
|
140
|
-
"@types/react": "^19.
|
|
141
|
-
"@types/react-dom": "^19.
|
|
145
|
+
"@types/react": "^19.3.0",
|
|
146
|
+
"@types/react-dom": "^19.3.0",
|
|
142
147
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
143
148
|
"@vitejs/plugin-react": "^6.1.1",
|
|
144
|
-
"@vitest/browser": "
|
|
145
|
-
"@vitest/browser-playwright": "
|
|
146
|
-
"@vitest/coverage-istanbul": "
|
|
147
|
-
"@vitest/coverage-v8": "^
|
|
149
|
+
"@vitest/browser": "5.0.1",
|
|
150
|
+
"@vitest/browser-playwright": "5.0.1",
|
|
151
|
+
"@vitest/coverage-istanbul": "5.0.1",
|
|
152
|
+
"@vitest/coverage-v8": "^5.0.1",
|
|
148
153
|
"d3-color": "^3.1.0",
|
|
149
154
|
"eslint-plugin-storybook": "^10.3.5",
|
|
150
155
|
"oxfmt": "^0.66.0",
|
|
151
156
|
"oxlint": "^1.81.0",
|
|
152
157
|
"playwright": "1.63.0",
|
|
153
|
-
"react": "^19.
|
|
158
|
+
"react": "^19.3.0",
|
|
154
159
|
"react-docgen-typescript": "^2.4.0",
|
|
155
|
-
"react-dom": "^19.
|
|
160
|
+
"react-dom": "^19.3.0",
|
|
156
161
|
"size-limit": "12.1.0",
|
|
157
|
-
"storybook": "^10.
|
|
162
|
+
"storybook": "^10.6.1",
|
|
158
163
|
"tailwindcss": "^4.3.3",
|
|
159
164
|
"tailwindcss-scoped-preflight": "^4.0.6",
|
|
160
165
|
"tsdown": "^0.22.14",
|
|
@@ -162,11 +167,7 @@
|
|
|
162
167
|
"tw-animate-css": "^1.4.0",
|
|
163
168
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
164
169
|
"vite": "^8.3.0",
|
|
165
|
-
"vitest": "^
|
|
166
|
-
"@keboola/agent-vocabulary": "^0.1.1",
|
|
167
|
-
"@keboola/oxlint-config": "^10.1.0",
|
|
168
|
-
"@keboola/tsconfig": "^0.2.1",
|
|
169
|
-
"@keboola/vitest-config": "^1.0.0"
|
|
170
|
+
"vitest": "^5.0.1"
|
|
170
171
|
},
|
|
171
172
|
"peerDependencies": {
|
|
172
173
|
"@testing-library/react": "^16.3.2",
|
|
@@ -193,6 +194,9 @@
|
|
|
193
194
|
"@codemirror/state": "^6.7.1",
|
|
194
195
|
"@codemirror/view": "^6.43.9",
|
|
195
196
|
"@iconify-json/lucide": "^1.2.118",
|
|
197
|
+
"@keboola/brand-registry": "^2.0.0",
|
|
198
|
+
"@keboola/codemirror-lang-sql": "^0.7.3",
|
|
199
|
+
"@keboola/tailwind-config": "^1.2.0",
|
|
196
200
|
"@lexical/code": "^0.42.0",
|
|
197
201
|
"@lexical/link": "^0.42.0",
|
|
198
202
|
"@lexical/list": "^0.42.0",
|
|
@@ -237,7 +241,7 @@
|
|
|
237
241
|
"clsx": "^2.1.1",
|
|
238
242
|
"cmdk": "^1.1.1",
|
|
239
243
|
"diff": "^9.0.0",
|
|
240
|
-
"dompurify": "^3.4.
|
|
244
|
+
"dompurify": "^3.4.16",
|
|
241
245
|
"flint-chart": "0.5.1",
|
|
242
246
|
"input-otp": "^1.4.2",
|
|
243
247
|
"lexical": "^0.42.0",
|
|
@@ -254,10 +258,7 @@
|
|
|
254
258
|
"sonner": "^2.0.7",
|
|
255
259
|
"tailwind-merge": "^3.6.0",
|
|
256
260
|
"vega": "^6.4.0",
|
|
257
|
-
"vega-lite": "^6.4.3"
|
|
258
|
-
"@keboola/brand-registry": "^1.9.4",
|
|
259
|
-
"@keboola/codemirror-lang-sql": "^0.7.3",
|
|
260
|
-
"@keboola/tailwind-config": "^1.1.2"
|
|
261
|
+
"vega-lite": "^6.4.3"
|
|
261
262
|
},
|
|
262
263
|
"scripts": {
|
|
263
264
|
"dev": "storybook dev -p \"${PORT:-6006}\"",
|
|
@@ -267,8 +268,8 @@
|
|
|
267
268
|
"build:js": "tsdown",
|
|
268
269
|
"build:css": "tailwindcss -i src/styles.css -o dist/styles.css --minify",
|
|
269
270
|
"build:check": "node ../../tooling/check-dist-exports.mjs && attw --pack . --profile esm-only --exclude-entrypoints ./styles ./styles/compiled ./theme",
|
|
270
|
-
"test": "vitest run --config vite.config.ts --
|
|
271
|
-
"test:stories": "vitest run --config vitest.config.ts",
|
|
271
|
+
"test": "vitest run --config vite.config.ts --reporter=dot",
|
|
272
|
+
"test:stories": "vitest run --config vitest.config.ts --reporter=default --reporter=github-actions --reporter=junit --outputFile.junit=./junit-report.stories.xml",
|
|
272
273
|
"test:stories:coverage": "vitest run --config vitest.config.ts --coverage",
|
|
273
274
|
"test:visual": "playwright test -c playwright.visual.config.ts",
|
|
274
275
|
"test:visual:update": "playwright test -c playwright.visual.config.ts --update-snapshots",
|
package/src/styles.css
CHANGED
|
@@ -310,6 +310,12 @@
|
|
|
310
310
|
color-scheme: normal;
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
+
/* Dark selection — a translucent primary wash, so the selected run keeps its own ink
|
|
314
|
+
instead of flipping to a solid fill. Light keeps the UA default. */
|
|
315
|
+
[data-theme='dark'] ::selection {
|
|
316
|
+
background-color: rgb(var(--primary) / 0.35);
|
|
317
|
+
}
|
|
318
|
+
|
|
313
319
|
@font-face {
|
|
314
320
|
font-family: 'Inter';
|
|
315
321
|
font-style: normal;
|
|
@@ -379,6 +385,7 @@
|
|
|
379
385
|
h1 {
|
|
380
386
|
font-size: 28px;
|
|
381
387
|
line-height: 32px;
|
|
388
|
+
@apply tw:text-foreground;
|
|
382
389
|
font-weight: 500;
|
|
383
390
|
}
|
|
384
391
|
|
|
@@ -483,23 +490,122 @@
|
|
|
483
490
|
}
|
|
484
491
|
}
|
|
485
492
|
|
|
486
|
-
@layer utilities {
|
|
487
|
-
/* Tailwind Typography pins its own palette (`--tw-prose-bold`, `--tw-prose-headings`,
|
|
488
|
-
…) to light-mode values, so those elements stay near-black when the semantic tokens
|
|
489
|
-
flip — bold text in a Markdown answer renders dark-on-dark. `prose` has no awareness
|
|
490
|
-
of `[data-theme]`, so invert it here.
|
|
491
|
-
|
|
492
|
-
In `utilities`, not `components`: `.tw:prose` is itself a utility, and a v4 cascade
|
|
493
|
-
layer beats specificity outright — a more specific rule in `components` still loses
|
|
494
|
-
to the plain utility. Same layer, higher specificity, so this wins. */
|
|
495
|
-
[data-theme='dark'] .tw\:prose {
|
|
496
|
-
@apply tw:prose-invert;
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
493
|
@layer utilities {
|
|
501
494
|
[data-header-span='full']
|
|
502
495
|
> [data-app-shell-slot]:has(> [data-collapsible='off-canvas'][data-state='collapsed']) {
|
|
503
496
|
overflow-x: clip;
|
|
504
497
|
}
|
|
505
498
|
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* `tw:prose-answer` — how an assistant answer reads.
|
|
502
|
+
*
|
|
503
|
+
* - An answer is long-form prose read once, top to bottom, and wants different typography from the
|
|
504
|
+
* dense table-and-form UI it sits beside. Bare `tw:prose` stays the chrome rhythm that config
|
|
505
|
+
* descriptions and the markdown editor are written in.
|
|
506
|
+
* - Plain CSS rather than a `typography.ts` modifier: the typography plugin runs every key of a
|
|
507
|
+
* `css` object through `inWhere()`, so an at-rule key compiles to `:where(@container …)` — a
|
|
508
|
+
* selector, and a dead one. The width-responsive half of this rhythm cannot be written there.
|
|
509
|
+
* - `@utility` cannot be nested in a layer, so these rules keep real specificity (`0,1,1`) against
|
|
510
|
+
* prose's `:where()`-wrapped `0,1,0`. They win on specificity, not on source order.
|
|
511
|
+
* - Every length is `em`, so the whole scale follows the base size rather than being pinned.
|
|
512
|
+
*/
|
|
513
|
+
@utility prose-answer {
|
|
514
|
+
/* Capped in `ch`, not pixels: an 828px column at 14px carries ~114 characters, well past the
|
|
515
|
+
* 45–75 a reader tracks comfortably, and a pixel cap drifts with the type size. */
|
|
516
|
+
max-width: 78ch;
|
|
517
|
+
|
|
518
|
+
/* Headings inside a reply are document structure, not page titles. The chrome scale starts where
|
|
519
|
+
* a page heading has a whole screen under it; a message is a column inside a panel, so the same
|
|
520
|
+
* ratios make an `h1` shout. These step clearly and stay relative. */
|
|
521
|
+
h1 {
|
|
522
|
+
font-size: 1.5em;
|
|
523
|
+
}
|
|
524
|
+
h2 {
|
|
525
|
+
font-size: 1.25em;
|
|
526
|
+
}
|
|
527
|
+
h3 {
|
|
528
|
+
font-size: 1.1em;
|
|
529
|
+
}
|
|
530
|
+
:is(h1, h2, h3, h4, h5, h6) {
|
|
531
|
+
font-weight: 600;
|
|
532
|
+
line-height: 1.375;
|
|
533
|
+
/* Far more space above than below. That asymmetry is what makes an answer scannable — it reads
|
|
534
|
+
* as "new section, and this belongs to it". */
|
|
535
|
+
margin-bottom: 0.6em;
|
|
536
|
+
}
|
|
537
|
+
/* `:not(:first-child)` keeps the rhythm off the top edge of a message: prose zeroes the outer
|
|
538
|
+
* margins with a rule of its own, and a top margin that survives it lands inside the bubble as
|
|
539
|
+
* padding. */
|
|
540
|
+
:is(h1, h2, h3, h4, h5, h6):not(:first-child) {
|
|
541
|
+
margin-top: 1.4em;
|
|
542
|
+
}
|
|
543
|
+
/* An icon leading a heading belongs to it, so it takes the heading's ink. Muted grey beside bold
|
|
544
|
+
* near-black text reads as washed out rather than secondary; in body copy the icon keeps its
|
|
545
|
+
* muted default. */
|
|
546
|
+
:is(h1, h2, h3, h4, h5, h6) svg {
|
|
547
|
+
color: currentColor;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/* Bottom margin only. With a top margin too, a paragraph following a heading wins the margin
|
|
551
|
+
* collapse and reopens the gap the heading's tight bottom margin closes — the asymmetry only
|
|
552
|
+
* holds if one side owns it. */
|
|
553
|
+
:is(p, ul, ol) {
|
|
554
|
+
margin-top: 0;
|
|
555
|
+
}
|
|
556
|
+
:is(p, ul, ol):not(:last-child) {
|
|
557
|
+
margin-bottom: 0.8em;
|
|
558
|
+
}
|
|
559
|
+
/* Prose pins a line-height per element, so the root's is not inherited and has to be restated
|
|
560
|
+
* where it matters. */
|
|
561
|
+
:is(p, li) {
|
|
562
|
+
line-height: 1.55;
|
|
563
|
+
}
|
|
564
|
+
li:not(:first-child) {
|
|
565
|
+
margin-top: 0.35em;
|
|
566
|
+
}
|
|
567
|
+
li {
|
|
568
|
+
margin-bottom: 0;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/* Long lines need more leading, not less. A container query, not a viewport one: the panel
|
|
572
|
+
* narrows this column without the viewport changing at all. The `messages` container is the
|
|
573
|
+
* contract a transcript declares (`tw:@container/messages`); where none exists, the narrow
|
|
574
|
+
* values stand. */
|
|
575
|
+
@container messages (min-width: 640px) {
|
|
576
|
+
:is(h1, h2, h3, h4, h5, h6):not(:first-child) {
|
|
577
|
+
margin-top: 1.6em;
|
|
578
|
+
}
|
|
579
|
+
:is(p, ul, ol):not(:last-child) {
|
|
580
|
+
margin-bottom: 0.9em;
|
|
581
|
+
}
|
|
582
|
+
:is(p, li) {
|
|
583
|
+
line-height: 1.6;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* `tw:prose-code-chip` — inline code as a chip rather than a bare accent word.
|
|
590
|
+
*
|
|
591
|
+
* - Every markdown surface this package draws is full of identifiers, and a chip separates them
|
|
592
|
+
* from the sentence. The fill is the `--muted` / `--foreground` pair every inset surface takes.
|
|
593
|
+
* - Its own utility, not part of `tw:prose-answer`: this is palette, and the palette does not
|
|
594
|
+
* depend on which rhythm the surface wears. Inside `prose-answer` it left every `rhythm="chrome"`
|
|
595
|
+
* surface on `--tw-prose-code`, which is `#c7254e` in both schemes — 3.36:1 on the dark page,
|
|
596
|
+
* under AA.
|
|
597
|
+
* - An `@utility` for the same reason `prose-answer` is one: it has to out-specify prose's
|
|
598
|
+
* `:where()`-wrapped `code` colour from the same layer. A rule in `components` loses on layer
|
|
599
|
+
* order and leaves the accent ink on the chip's fill.
|
|
600
|
+
* - The dark tooltip keeps its own chip: `[data-tooltip-content='true'] .tw\:prose :not(pre) > code`
|
|
601
|
+
* is `(0,2,2)` against this rule's `(0,1,2)`, both in `utilities`.
|
|
602
|
+
*/
|
|
603
|
+
@utility prose-code-chip {
|
|
604
|
+
:not(pre) > code {
|
|
605
|
+
background-color: rgb(var(--muted));
|
|
606
|
+
color: rgb(var(--foreground));
|
|
607
|
+
border-radius: 0.25rem;
|
|
608
|
+
padding: 0.125rem 0.25rem;
|
|
609
|
+
font-weight: inherit;
|
|
610
|
+
}
|
|
611
|
+
}
|
package/src/theme.css
CHANGED
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
--animate-progress-bar: progress-bar var(--progress-bar-duration, 3s) linear forwards;
|
|
62
62
|
--animate-spinner-dots: spinner-dots 1s ease-in-out infinite;
|
|
63
63
|
--animate-marching-ants: marching-ants 1s linear infinite;
|
|
64
|
+
--animate-kai-drift: kai-drift 12s ease-in-out infinite;
|
|
64
65
|
|
|
65
66
|
/* Collapsible disclosure — keyframes below. `tw-animate-css` owns `collapsible-down`/`-up`
|
|
66
67
|
* and every app imports it unlayered, so those two names are unusable here.
|
|
@@ -69,6 +70,130 @@
|
|
|
69
70
|
--animate-collapsible-close: collapsible-close 300ms ease;
|
|
70
71
|
}
|
|
71
72
|
|
|
73
|
+
/* Kai's fill: bright pools drift over its blue, a darker one circles on its own slower path. */
|
|
74
|
+
@utility bg-kai {
|
|
75
|
+
isolation: isolate;
|
|
76
|
+
overflow: hidden;
|
|
77
|
+
background-color: #1f8fff;
|
|
78
|
+
background-image:
|
|
79
|
+
radial-gradient(circle, #61e4ff 0, transparent 50%),
|
|
80
|
+
radial-gradient(circle, #8b5cff 0, transparent 50%),
|
|
81
|
+
radial-gradient(circle, #2dd4ff 0, transparent 45%);
|
|
82
|
+
background-size:
|
|
83
|
+
160% 300%,
|
|
84
|
+
180% 320%,
|
|
85
|
+
140% 280%;
|
|
86
|
+
background-position:
|
|
87
|
+
0% 20%,
|
|
88
|
+
100% 80%,
|
|
89
|
+
50% 0%;
|
|
90
|
+
background-repeat: no-repeat;
|
|
91
|
+
/* The glow sits under the focus ring's own shadows, so keyboard focus still shows. */
|
|
92
|
+
box-shadow:
|
|
93
|
+
var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
94
|
+
var(--tw-ring-shadow, 0 0 #0000),
|
|
95
|
+
0 6px 18px -8px rgb(56 132 255 / 0.55);
|
|
96
|
+
|
|
97
|
+
&::before {
|
|
98
|
+
content: '';
|
|
99
|
+
position: absolute;
|
|
100
|
+
z-index: -1;
|
|
101
|
+
inset: -60% -20%;
|
|
102
|
+
background: radial-gradient(closest-side, rgb(37 20 140 / 0.45), transparent 70%);
|
|
103
|
+
background-size: 45% 90%;
|
|
104
|
+
background-repeat: no-repeat;
|
|
105
|
+
animation: kai-shade 20s linear infinite;
|
|
106
|
+
pointer-events: none;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@media (prefers-reduced-motion: reduce) {
|
|
110
|
+
&::before {
|
|
111
|
+
animation: none;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@keyframes kai-drift {
|
|
117
|
+
0%,
|
|
118
|
+
100% {
|
|
119
|
+
background-position:
|
|
120
|
+
0% 20%,
|
|
121
|
+
100% 80%,
|
|
122
|
+
50% 0%;
|
|
123
|
+
}
|
|
124
|
+
10% {
|
|
125
|
+
background-position:
|
|
126
|
+
30% 0%,
|
|
127
|
+
80% 100%,
|
|
128
|
+
90% 30%;
|
|
129
|
+
}
|
|
130
|
+
20% {
|
|
131
|
+
background-position:
|
|
132
|
+
70% 10%,
|
|
133
|
+
40% 90%,
|
|
134
|
+
100% 70%;
|
|
135
|
+
}
|
|
136
|
+
30% {
|
|
137
|
+
background-position:
|
|
138
|
+
100% 40%,
|
|
139
|
+
10% 60%,
|
|
140
|
+
60% 100%;
|
|
141
|
+
}
|
|
142
|
+
40% {
|
|
143
|
+
background-position:
|
|
144
|
+
80% 90%,
|
|
145
|
+
0% 20%,
|
|
146
|
+
20% 80%;
|
|
147
|
+
}
|
|
148
|
+
50% {
|
|
149
|
+
background-position:
|
|
150
|
+
40% 100%,
|
|
151
|
+
30% 0%,
|
|
152
|
+
0% 40%;
|
|
153
|
+
}
|
|
154
|
+
60% {
|
|
155
|
+
background-position:
|
|
156
|
+
10% 70%,
|
|
157
|
+
70% 10%,
|
|
158
|
+
30% 0%;
|
|
159
|
+
}
|
|
160
|
+
70% {
|
|
161
|
+
background-position:
|
|
162
|
+
0% 30%,
|
|
163
|
+
100% 40%,
|
|
164
|
+
80% 20%;
|
|
165
|
+
}
|
|
166
|
+
80% {
|
|
167
|
+
background-position:
|
|
168
|
+
50% 0%,
|
|
169
|
+
90% 90%,
|
|
170
|
+
100% 90%;
|
|
171
|
+
}
|
|
172
|
+
90% {
|
|
173
|
+
background-position:
|
|
174
|
+
20% 50%,
|
|
175
|
+
60% 70%,
|
|
176
|
+
40% 60%;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* The darker pool's orbit: a slow loop across the button, out of step with the bright ones. */
|
|
181
|
+
@keyframes kai-shade {
|
|
182
|
+
0%,
|
|
183
|
+
100% {
|
|
184
|
+
background-position: 0% 50%;
|
|
185
|
+
}
|
|
186
|
+
25% {
|
|
187
|
+
background-position: 50% 0%;
|
|
188
|
+
}
|
|
189
|
+
50% {
|
|
190
|
+
background-position: 100% 50%;
|
|
191
|
+
}
|
|
192
|
+
75% {
|
|
193
|
+
background-position: 50% 100%;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
72
197
|
@keyframes progress-bar {
|
|
73
198
|
from {
|
|
74
199
|
width: 0%;
|
|
@@ -158,11 +283,11 @@
|
|
|
158
283
|
* still highlighted a `[data-disabled="true"]` control on hover and focus. */
|
|
159
284
|
@custom-variant not-disabled (&:not([data-disabled="true"]):not(:disabled));
|
|
160
285
|
|
|
161
|
-
/*
|
|
162
|
-
*
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
286
|
+
/* Interactive-surface variant — `interactive:hover:…`. Matches:
|
|
287
|
+
* - an `<a href>`, unless it opts out with `data-interactive="false"`;
|
|
288
|
+
* - any element that opts in with `data-interactive="true"`.
|
|
289
|
+
* Lives here, not in a JS plugin, for the same reason as `not-disabled`: apps compile design's classes. */
|
|
290
|
+
@custom-variant interactive (&:is([data-interactive="true"], a[href]:not([data-interactive="false"])));
|
|
166
291
|
|
|
167
292
|
@theme inline {
|
|
168
293
|
--color-inherit: inherit;
|