@keboola/design 13.1.2 → 13.2.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 +63 -5
- package/CHANGELOG.md +49 -0
- package/COMPONENT-API.md +8 -8
- package/dist/{AIKit-BVCWP9Ks.js → AIKit-C5FbKjwa.js} +22 -22
- package/dist/AIKit-C5FbKjwa.js.map +1 -0
- package/dist/{Alert-UI-CIs-1.js → Alert-DuAGeYyM.js} +7 -7
- package/dist/{Alert-UI-CIs-1.js.map → Alert-DuAGeYyM.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-Dq168RJc.js} +154 -16
- package/dist/BrandEditor-Dq168RJc.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-CUyYu5Bi.js} +10 -10
- package/dist/Breadcrumb-CUyYu5Bi.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-D9rafoKh.js} +6 -6
- package/dist/Checkbox-D9rafoKh.js.map +1 -0
- package/dist/{Clipboard-_xf6hMDD.js → Clipboard-BHWUodAx.js} +3 -3
- package/dist/{Clipboard-_xf6hMDD.js.map → Clipboard-BHWUodAx.js.map} +1 -1
- package/dist/{ClipboardButton-srUgWgwH.js → ClipboardButton-Urg-kZbh.js} +4 -4
- package/dist/{ClipboardButton-srUgWgwH.js.map → ClipboardButton-Urg-kZbh.js.map} +1 -1
- package/dist/{CodeEditor-Df7VVx08.js → CodeEditor-Y0iE-SwV.js} +5 -5
- package/dist/{CodeEditor-Df7VVx08.js.map → CodeEditor-Y0iE-SwV.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-D1nC0X6i.js} +5 -5
- package/dist/{ColorInput-B3gBZ8Ya.js.map → ColorInput-D1nC0X6i.js.map} +1 -1
- package/dist/{ColorModeSwitch-D8Cki137.js → ColorModeSwitch-Cxee8jnB.js} +4 -4
- package/dist/{ColorModeSwitch-D8Cki137.js.map → ColorModeSwitch-Cxee8jnB.js.map} +1 -1
- package/dist/{Combobox-BNhW0TDB.js → Combobox-B1Kjoy5J.js} +9 -9
- package/dist/Combobox-B1Kjoy5J.js.map +1 -0
- package/dist/{Command-BQPiZCNz.js → Command-BuOA3V18.js} +5 -5
- package/dist/Command-BuOA3V18.js.map +1 -0
- package/dist/{CopyField-Ba7h8MqZ.js → CopyField-DsOVtV2Q.js} +4 -4
- package/dist/{CopyField-Ba7h8MqZ.js.map → CopyField-DsOVtV2Q.js.map} +1 -1
- package/dist/{DateInput-D0nWUasV.js → DateInput-BlKkequE.js} +5 -5
- package/dist/{DateInput-D0nWUasV.js.map → DateInput-BlKkequE.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-DOxJHw8V.js} +5 -5
- package/dist/{DateRangeInput-i6wE45-V.js.map → DateRangeInput-DOxJHw8V.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/{DiagramSource-C5_d8Gdj.js → DiagramSource-jTwmmi9g.js} +2 -2
- package/dist/{DiagramSource-C5_d8Gdj.js.map → DiagramSource-jTwmmi9g.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-DtRYcKEx.js} +8 -8
- package/dist/DropdownMenu-DtRYcKEx.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-Cf1E3rfQ.js} +4 -4
- package/dist/{FieldItem-BHViBJS3.js.map → FieldItem-Cf1E3rfQ.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-CuaAn-lR.js} +10 -10
- package/dist/{Form-VkzfVPyT.js.map → Form-CuaAn-lR.js.map} +1 -1
- package/dist/{FormGroup-CmCppxOn.js → FormGroup-D4O96YPm.js} +4 -4
- package/dist/{FormGroup-CmCppxOn.js.map → FormGroup-D4O96YPm.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-Cy6nhg4u.js +31 -0
- package/dist/HoverCard-Cy6nhg4u.js.map +1 -0
- package/dist/InlineEdit-DSMIEUUa.js +370 -0
- package/dist/InlineEdit-DSMIEUUa.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-Du93F3o4.js} +3 -3
- package/dist/{Kbd-J4n1J6i4.js.map → Kbd-Du93F3o4.js.map} +1 -1
- package/dist/{MermaidDiagram-B30x2yV7.js → MermaidDiagram-D2ThT8Q-.js} +3 -3
- package/dist/{MermaidDiagram-B30x2yV7.js.map → MermaidDiagram-D2ThT8Q-.js.map} +1 -1
- package/dist/{Modal-BkSuS9Yz.js → Modal-DQIauzar.js} +6 -6
- package/dist/Modal-DQIauzar.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-xKqiucAN.js} +5 -5
- package/dist/{MultiActionButtonGroup-AWLj1Tg7.js.map → MultiActionButtonGroup-xKqiucAN.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-C2vk5acr.js} +6 -6
- package/dist/{RadioGroup-CYEp8Wnx.js.map → RadioGroup-C2vk5acr.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-CVrv3hqf.js} +4 -4
- package/dist/{Search-DmkQo716.js.map → Search-CVrv3hqf.js.map} +1 -1
- package/dist/{SearchInput-D3qMkHaW.js → SearchInput-BnU6YHgT.js} +4 -4
- package/dist/{SearchInput-D3qMkHaW.js.map → SearchInput-BnU6YHgT.js.map} +1 -1
- package/dist/{SectionNav-I2p2uXTd.js → SectionNav-XlhvXXdF.js} +11 -11
- package/dist/{SectionNav-I2p2uXTd.js.map → SectionNav-XlhvXXdF.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-CKaxOPwY.js} +21 -18
- package/dist/Sidebar-CKaxOPwY.js.map +1 -0
- package/dist/{Slider-B0ou9r0B.js → Slider-Rcc2qVct.js} +5 -5
- package/dist/{Slider-B0ou9r0B.js.map → Slider-Rcc2qVct.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-CgSC-fSo.js} +4 -4
- package/dist/{Table-BaVT5Tkn.js.map → Table-CgSC-fSo.js.map} +1 -1
- package/dist/{Tabs-CTDmye1N.js → Tabs-C0uvkPHc.js} +5 -5
- package/dist/Tabs-C0uvkPHc.js.map +1 -0
- package/dist/{TextInput-BWYXbfs4.js → TextInput-B5TDDOty.js} +5 -5
- package/dist/{TextInput-BWYXbfs4.js.map → TextInput-B5TDDOty.js.map} +1 -1
- package/dist/{ThemeProvider-VF38VfUa.js → ThemeProvider-Dt9b67sW.js} +22 -5
- package/dist/ThemeProvider-Dt9b67sW.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/{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-D8sXKpoV.js} +6 -6
- package/dist/{ZoomableSvg-C65nta_r.js.map → ZoomableSvg-D8sXKpoV.js.map} +1 -1
- 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 +5 -5
- package/dist/flint.js +2 -2
- 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 +388 -316
- package/dist/index.js +72 -70
- package/dist/internal/blocks/AIKit.js +1 -1
- 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/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 +2 -2
- 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 +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 +116 -78
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.js +1 -1
- package/dist/rjsf.js +12 -12
- 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/testing.js +1 -1
- package/dist/{toast-CyXEdaCZ.js → toast-D6Z6MOB5.js} +5 -5
- package/dist/toast-D6Z6MOB5.js.map +1 -0
- package/dist/{utils-Bd28bWgm.js → utils-p6tjltbX.js} +4 -4
- package/dist/utils-p6tjltbX.js.map +1 -0
- package/package.json +2 -1
- package/src/styles.css +179 -0
- 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/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/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/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/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/toast-CyXEdaCZ.js.map +0 -1
- package/dist/utils-Bd28bWgm.js.map +0 -1
|
@@ -1,9 +1,135 @@
|
|
|
1
|
-
import { cn } from "./classNames-
|
|
1
|
+
import { cn } from "./classNames-DcGnTh2N.js";
|
|
2
2
|
import { useArgoDesign } from "./context-U293r3v-.js";
|
|
3
|
-
import {
|
|
3
|
+
import { mergeRefs } from "./internal/utils/mergeRefs.js";
|
|
4
|
+
import { Loader2 } from "./icons-ZIeZXXS7.js";
|
|
5
|
+
import { Fragment, createElement, isValidElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
4
6
|
import { Root, Slottable } from "@radix-ui/react-slot";
|
|
5
7
|
import { cva } from "class-variance-authority";
|
|
6
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region src/components/Button/motion.ts
|
|
10
|
+
const ends = (animation) => Number.isFinite(animation.effect?.getComputedTiming().endTime);
|
|
11
|
+
/** Runs `callback` once the finite `animations` have finished or been cancelled; returns a cancel. */
|
|
12
|
+
const afterAnimations = (animations, callback) => {
|
|
13
|
+
let isCurrent = true;
|
|
14
|
+
Promise.allSettled(animations.filter(ends).map((animation) => animation.finished)).then(() => {
|
|
15
|
+
if (isCurrent) callback();
|
|
16
|
+
});
|
|
17
|
+
return () => {
|
|
18
|
+
isCurrent = false;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
let waiting = /* @__PURE__ */ new Set();
|
|
22
|
+
let framed = /* @__PURE__ */ new Set();
|
|
23
|
+
let isTicking = false;
|
|
24
|
+
const tick = () => {
|
|
25
|
+
for (const node of framed) if (node.isConnected) node.setAttribute("data-button-ready", "");
|
|
26
|
+
framed = waiting;
|
|
27
|
+
waiting = /* @__PURE__ */ new Set();
|
|
28
|
+
isTicking = framed.size > 0;
|
|
29
|
+
if (isTicking) requestAnimationFrame(tick);
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Sets `data-button-ready` on `node` two frames after it mounts, arming its entry animations.
|
|
33
|
+
*
|
|
34
|
+
* - One shared frame loop serves every Button mounting at once.
|
|
35
|
+
* - Arming twice is a no-op, so a re-attached ref doesn't restart the countdown.
|
|
36
|
+
*/
|
|
37
|
+
const armMotion = (node) => {
|
|
38
|
+
if (node.hasAttribute("data-button-ready") || waiting.has(node) || framed.has(node)) return;
|
|
39
|
+
waiting.add(node);
|
|
40
|
+
if (!isTicking) {
|
|
41
|
+
isTicking = true;
|
|
42
|
+
requestAnimationFrame(tick);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/components/Button/ButtonLabel.tsx
|
|
47
|
+
const isText = (node) => typeof node === "string" || typeof node === "number";
|
|
48
|
+
/** Milliseconds from a computed `transition-duration` such as `0.3s`. */
|
|
49
|
+
const toMs = (duration) => parseFloat(duration) * (duration.endsWith("ms") ? 1 : 1e3);
|
|
50
|
+
/**
|
|
51
|
+
* A button's text, rolled over when it changes.
|
|
52
|
+
*
|
|
53
|
+
* - The new text rolls in; the old one stays absolutely positioned while it rolls out.
|
|
54
|
+
* - The width animates from the old text's to the new one's, so neighbours slide instead of jumping.
|
|
55
|
+
* - Motion lives in `styles.css` under `[data-slot='button-label']`.
|
|
56
|
+
*/
|
|
57
|
+
const ButtonLabel = ({ text }) => {
|
|
58
|
+
const ref = useRef(null);
|
|
59
|
+
const exitRef = useRef(null);
|
|
60
|
+
const interruptedWidthRef = useRef(null);
|
|
61
|
+
const [shown, setShown] = useState(text);
|
|
62
|
+
const [exiting, setExiting] = useState(null);
|
|
63
|
+
const [hasChanged, setHasChanged] = useState(false);
|
|
64
|
+
if (shown !== text) {
|
|
65
|
+
setShown(text);
|
|
66
|
+
setExiting(shown);
|
|
67
|
+
setHasChanged(true);
|
|
68
|
+
}
|
|
69
|
+
useLayoutEffect(() => {
|
|
70
|
+
const node = ref.current;
|
|
71
|
+
const from = interruptedWidthRef.current ?? exitRef.current?.offsetWidth;
|
|
72
|
+
interruptedWidthRef.current = null;
|
|
73
|
+
if (!node || !from || !node.closest("[data-button-ready]")) return;
|
|
74
|
+
const to = node.offsetWidth;
|
|
75
|
+
if (Math.abs(to - from) < .5 || window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) return;
|
|
76
|
+
const { transitionDuration, transitionTimingFunction } = getComputedStyle(node);
|
|
77
|
+
const animation = node.animate?.([{
|
|
78
|
+
width: `${from}px`,
|
|
79
|
+
overflowX: "clip",
|
|
80
|
+
textAlign: "start"
|
|
81
|
+
}, {
|
|
82
|
+
width: `${to}px`,
|
|
83
|
+
overflowX: "clip",
|
|
84
|
+
textAlign: "start"
|
|
85
|
+
}], {
|
|
86
|
+
duration: toMs(transitionDuration),
|
|
87
|
+
easing: transitionTimingFunction
|
|
88
|
+
});
|
|
89
|
+
return () => {
|
|
90
|
+
if (animation?.playState === "running") interruptedWidthRef.current = node.offsetWidth;
|
|
91
|
+
animation?.cancel();
|
|
92
|
+
};
|
|
93
|
+
}, [text]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
const node = exitRef.current;
|
|
96
|
+
if (!node) return;
|
|
97
|
+
return afterAnimations(node.getAnimations?.() ?? [], () => setExiting(null));
|
|
98
|
+
}, [exiting]);
|
|
99
|
+
if (!hasChanged) return text;
|
|
100
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
101
|
+
ref,
|
|
102
|
+
"data-slot": "button-label",
|
|
103
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
104
|
+
"data-slot": "button-label-text",
|
|
105
|
+
children: text
|
|
106
|
+
}, text), exiting !== null && /* @__PURE__ */ jsx("span", {
|
|
107
|
+
ref: exitRef,
|
|
108
|
+
"aria-hidden": true,
|
|
109
|
+
"data-slot": "button-label-exit",
|
|
110
|
+
children: exiting
|
|
111
|
+
}, exiting)]
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* `children` with each run of text wrapped in a `ButtonLabel`.
|
|
116
|
+
*
|
|
117
|
+
* - Positions are kept: a joined run leaves `null` behind, so siblings keep their identity.
|
|
118
|
+
* - Whitespace-only text stays bare: as a span it would become a flex item and take a gap.
|
|
119
|
+
*/
|
|
120
|
+
const withLabels = (children) => {
|
|
121
|
+
if (isValidElement(children) && children.type === Fragment) return withLabels(children.props.children);
|
|
122
|
+
const items = Array.isArray(children) ? children : [children];
|
|
123
|
+
const wrapped = items.map((item, index) => {
|
|
124
|
+
if (!isText(item)) return item;
|
|
125
|
+
if (index > 0 && isText(items[index - 1])) return null;
|
|
126
|
+
let text = "";
|
|
127
|
+
for (let i = index; i < items.length && isText(items[i]); i++) text += String(items[i]);
|
|
128
|
+
return text.trim() ? /* @__PURE__ */ jsx(ButtonLabel, { text }, index) : text;
|
|
129
|
+
});
|
|
130
|
+
return createElement(Fragment, null, ...wrapped);
|
|
131
|
+
};
|
|
132
|
+
//#endregion
|
|
7
133
|
//#region src/components/Button/styles.ts
|
|
8
134
|
const variants = cva([
|
|
9
135
|
"tailwindcss-preflight",
|
|
@@ -190,12 +316,12 @@ const argoVariants = cva([
|
|
|
190
316
|
"tw:!outline-hidden",
|
|
191
317
|
"tw:focus-visible:ring-2",
|
|
192
318
|
"tw:disabled:cursor-not-allowed",
|
|
193
|
-
"tw:disabled:opacity-
|
|
319
|
+
"tw:disabled:opacity-disabled",
|
|
194
320
|
"tw:active:opacity-60",
|
|
195
321
|
"tw:transition-all",
|
|
196
322
|
"tw:!no-underline",
|
|
197
323
|
"tw:aria-disabled:cursor-not-allowed",
|
|
198
|
-
"tw:aria-disabled:opacity-
|
|
324
|
+
"tw:aria-disabled:opacity-disabled",
|
|
199
325
|
"tw:shrink-0",
|
|
200
326
|
"tw:[&_svg]:pointer-events-none",
|
|
201
327
|
"tw:[&_svg]:shrink-0",
|
|
@@ -303,6 +429,12 @@ const argoVariants = cva([
|
|
|
303
429
|
});
|
|
304
430
|
//#endregion
|
|
305
431
|
//#region src/components/Button/Button.tsx
|
|
432
|
+
/** The children that render anything, looking through arrays and fragments. */
|
|
433
|
+
const renderedChildren = (node) => {
|
|
434
|
+
if (Array.isArray(node)) return node.flatMap(renderedChildren);
|
|
435
|
+
if (isValidElement(node) && node.type === Fragment) return renderedChildren(node.props.children);
|
|
436
|
+
return node == null || typeof node === "boolean" || typeof node === "string" && !node.trim() ? [] : [node];
|
|
437
|
+
};
|
|
306
438
|
/**
|
|
307
439
|
* Any user-initiated action; `size="icon-*"` with no children is the icon-only button.
|
|
308
440
|
*
|
|
@@ -327,6 +459,57 @@ const Button = ({ ref, children, disabled = false, className, type = "button", i
|
|
|
327
459
|
block,
|
|
328
460
|
className
|
|
329
461
|
});
|
|
462
|
+
const content = asChild && isValidElement(children) ? children.props.children : children;
|
|
463
|
+
const rendered = renderedChildren(content);
|
|
464
|
+
const leadsWithElement = isValidElement(rendered[0]);
|
|
465
|
+
const elementTypes = rendered.flatMap((child) => isValidElement(child) ? [child.type] : []);
|
|
466
|
+
const [prev, setPrev] = useState({
|
|
467
|
+
leadsWithElement,
|
|
468
|
+
elementTypes
|
|
469
|
+
});
|
|
470
|
+
const [spinnerEnter, setSpinnerEnter] = useState(isLoading ? "fade" : null);
|
|
471
|
+
const [iconEnter, setIconEnter] = useState("fade");
|
|
472
|
+
const placement = isIconOnly ? "center" : leadsWithElement ? "leading" : "inline";
|
|
473
|
+
if (isLoading && !spinnerEnter) setSpinnerEnter(placement === "inline" && !prev.leadsWithElement ? "grow" : "fade");
|
|
474
|
+
const typesChanged = prev.elementTypes.length !== elementTypes.length || prev.elementTypes.some((type, index) => type !== elementTypes[index]);
|
|
475
|
+
if (typesChanged || prev.leadsWithElement !== leadsWithElement) setPrev({
|
|
476
|
+
leadsWithElement,
|
|
477
|
+
elementTypes
|
|
478
|
+
});
|
|
479
|
+
if (typesChanged) setIconEnter(elementTypes.length > prev.elementTypes.length && !isLoading && !spinnerEnter ? "grow" : "fade");
|
|
480
|
+
const spinnerRef = useRef(null);
|
|
481
|
+
useEffect(() => {
|
|
482
|
+
const node = spinnerRef.current;
|
|
483
|
+
if (isLoading || !node) return;
|
|
484
|
+
return afterAnimations(node.getAnimations?.() ?? [], () => setSpinnerEnter(null));
|
|
485
|
+
}, [isLoading]);
|
|
486
|
+
useLayoutEffect(() => {
|
|
487
|
+
const slot = spinnerRef.current;
|
|
488
|
+
const button = slot?.offsetParent;
|
|
489
|
+
if (!slot || !button || placement !== "leading") return;
|
|
490
|
+
const centre = () => {
|
|
491
|
+
const icon = slot.nextElementSibling;
|
|
492
|
+
if (!(icon instanceof SVGElement)) return;
|
|
493
|
+
const [iconBox, buttonBox] = [icon.getBoundingClientRect(), button.getBoundingClientRect()];
|
|
494
|
+
const scale = buttonBox.width / (button instanceof HTMLElement ? button.offsetWidth : 1) || 1;
|
|
495
|
+
const x = (iconBox.left - buttonBox.left + iconBox.width / 2) / scale - button.clientLeft;
|
|
496
|
+
slot.style.left = `${x - parseFloat(getComputedStyle(slot).width) / 2}px`;
|
|
497
|
+
};
|
|
498
|
+
centre();
|
|
499
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
500
|
+
const observer = new ResizeObserver(centre);
|
|
501
|
+
observer.observe(button);
|
|
502
|
+
return () => observer.disconnect();
|
|
503
|
+
}, [placement, spinnerEnter]);
|
|
504
|
+
const buttonRef = useRef(null);
|
|
505
|
+
const armRef = useCallback((node) => node ? armMotion(node) : void 0, []);
|
|
506
|
+
const mergedRef = useMemo(() => mergeRefs(ref, buttonRef, armRef), [ref, armRef]);
|
|
507
|
+
useEffect(() => {
|
|
508
|
+
const node = buttonRef.current;
|
|
509
|
+
if (iconEnter !== "grow" || !node) return;
|
|
510
|
+
const entries = [...node.querySelectorAll(":scope > svg")].flatMap((icon) => icon.getAnimations?.() ?? []);
|
|
511
|
+
return afterAnimations(entries, () => setIconEnter("fade"));
|
|
512
|
+
}, [iconEnter]);
|
|
330
513
|
const handleClick = (event) => {
|
|
331
514
|
if (event.currentTarget.tagName === "A" && disabled) {
|
|
332
515
|
event.preventDefault();
|
|
@@ -336,15 +519,24 @@ const Button = ({ ref, children, disabled = false, className, type = "button", i
|
|
|
336
519
|
};
|
|
337
520
|
return /* @__PURE__ */ jsxs(Comp, {
|
|
338
521
|
...buttonProps,
|
|
339
|
-
ref,
|
|
522
|
+
ref: mergedRef,
|
|
340
523
|
disabled,
|
|
341
524
|
"aria-disabled": buttonProps["aria-disabled"] ?? disabled,
|
|
342
525
|
"data-variant": variant,
|
|
343
526
|
"data-icon-only": isIconOnly,
|
|
527
|
+
"data-icon-enter": iconEnter,
|
|
344
528
|
type,
|
|
345
529
|
onClick: handleClick,
|
|
346
530
|
className: cn(classNames),
|
|
347
|
-
children: [
|
|
531
|
+
children: [spinnerEnter && /* @__PURE__ */ jsx("span", {
|
|
532
|
+
ref: spinnerRef,
|
|
533
|
+
"aria-hidden": true,
|
|
534
|
+
"data-slot": "button-spinner",
|
|
535
|
+
"data-state": isLoading ? "open" : "closed",
|
|
536
|
+
"data-placement": placement,
|
|
537
|
+
"data-enter": spinnerEnter,
|
|
538
|
+
children: /* @__PURE__ */ jsx(Loader2, { className: "tw:animate-spin" })
|
|
539
|
+
}), /* @__PURE__ */ jsx(Slottable, { children: asChild ? children : withLabels(children) })]
|
|
348
540
|
});
|
|
349
541
|
};
|
|
350
542
|
//#endregion
|
|
@@ -406,4 +598,4 @@ const ButtonInline = ({ ref, children, className, variant, color, type = "button
|
|
|
406
598
|
//#endregion
|
|
407
599
|
export { Button, ButtonInline, argoVariants };
|
|
408
600
|
|
|
409
|
-
//# sourceMappingURL=Button-
|
|
601
|
+
//# sourceMappingURL=Button-D2JqBAq7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button-D2JqBAq7.js","names":[],"sources":["../src/components/Button/motion.ts","../src/components/Button/ButtonLabel.tsx","../src/components/Button/styles.ts","../src/components/Button/Button.tsx","../src/components/Button/ButtonInline.tsx"],"sourcesContent":["const ends = (animation: Animation) =>\n Number.isFinite(animation.effect?.getComputedTiming().endTime);\n\n/** Runs `callback` once the finite `animations` have finished or been cancelled; returns a cancel. */\nexport const afterAnimations = (animations: Animation[], callback: () => void) => {\n let isCurrent = true;\n Promise.allSettled(animations.filter(ends).map((animation) => animation.finished)).then(() => {\n if (isCurrent) callback();\n });\n return () => {\n isCurrent = false;\n };\n};\n\nlet waiting = new Set<Element>();\nlet framed = new Set<Element>();\nlet isTicking = false;\n\nconst tick = () => {\n for (const node of framed) if (node.isConnected) node.setAttribute('data-button-ready', '');\n framed = waiting;\n waiting = new Set();\n isTicking = framed.size > 0;\n if (isTicking) requestAnimationFrame(tick);\n};\n\n/**\n * Sets `data-button-ready` on `node` two frames after it mounts, arming its entry animations.\n *\n * - One shared frame loop serves every Button mounting at once.\n * - Arming twice is a no-op, so a re-attached ref doesn't restart the countdown.\n */\nexport const armMotion = (node: Element) => {\n if (node.hasAttribute('data-button-ready') || waiting.has(node) || framed.has(node)) return;\n waiting.add(node);\n if (!isTicking) {\n isTicking = true;\n requestAnimationFrame(tick);\n }\n};\n","import {\n createElement,\n Fragment,\n isValidElement,\n type ReactNode,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { afterAnimations } from './motion';\n\nconst isText = (node: ReactNode): node is string | number =>\n typeof node === 'string' || typeof node === 'number';\n\n/** Milliseconds from a computed `transition-duration` such as `0.3s`. */\nconst toMs = (duration: string) => parseFloat(duration) * (duration.endsWith('ms') ? 1 : 1000);\n\n/**\n * A button's text, rolled over when it changes.\n *\n * - The new text rolls in; the old one stays absolutely positioned while it rolls out.\n * - The width animates from the old text's to the new one's, so neighbours slide instead of jumping.\n * - Motion lives in `styles.css` under `[data-slot='button-label']`.\n */\nconst ButtonLabel = ({ text }: { text: string }) => {\n const ref = useRef<HTMLSpanElement>(null);\n const exitRef = useRef<HTMLSpanElement>(null);\n const interruptedWidthRef = useRef<number | null>(null);\n const [shown, setShown] = useState(text);\n const [exiting, setExiting] = useState<string | null>(null);\n const [hasChanged, setHasChanged] = useState(false);\n if (shown !== text) {\n setShown(text);\n setExiting(shown);\n setHasChanged(true);\n }\n\n useLayoutEffect(() => {\n const node = ref.current;\n // An interrupted animation's on-screen width, else the outgoing text's, still in the DOM.\n const from = interruptedWidthRef.current ?? exitRef.current?.offsetWidth;\n interruptedWidthRef.current = null;\n if (!node || !from || !node.closest('[data-button-ready]')) return;\n\n const to = node.offsetWidth;\n if (\n Math.abs(to - from) < 0.5 ||\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n )\n return;\n\n const { transitionDuration, transitionTimingFunction } = getComputedStyle(node);\n const animation = node.animate?.(\n [\n { width: `${from}px`, overflowX: 'clip', textAlign: 'start' },\n { width: `${to}px`, overflowX: 'clip', textAlign: 'start' },\n ],\n { duration: toMs(transitionDuration), easing: transitionTimingFunction },\n );\n return () => {\n if (animation?.playState === 'running') {\n interruptedWidthRef.current = node.offsetWidth;\n }\n animation?.cancel();\n };\n }, [text]);\n\n useEffect(() => {\n const node = exitRef.current;\n if (!node) return;\n return afterAnimations(node.getAnimations?.() ?? [], () => setExiting(null));\n }, [exiting]);\n\n // Bare text until the first change, so an unchanged button keeps its markup.\n if (!hasChanged) return text;\n\n return (\n <span ref={ref} data-slot=\"button-label\">\n <span key={text} data-slot=\"button-label-text\">\n {text}\n </span>\n {exiting !== null && (\n <span key={exiting} ref={exitRef} aria-hidden data-slot=\"button-label-exit\">\n {exiting}\n </span>\n )}\n </span>\n );\n};\n\n/**\n * `children` with each run of text wrapped in a `ButtonLabel`.\n *\n * - Positions are kept: a joined run leaves `null` behind, so siblings keep their identity.\n * - Whitespace-only text stays bare: as a span it would become a flex item and take a gap.\n */\nexport const withLabels = (children: ReactNode): ReactNode => {\n if (isValidElement<{ children?: ReactNode }>(children) && children.type === Fragment) {\n return withLabels(children.props.children);\n }\n const items = Array.isArray(children) ? children : [children];\n const wrapped = items.map((item: ReactNode, index) => {\n if (!isText(item)) return item;\n if (index > 0 && isText(items[index - 1])) return null;\n\n let text = '';\n for (let i = index; i < items.length && isText(items[i]); i++) text += String(items[i]);\n return text.trim() ? <ButtonLabel key={index} text={text} /> : text;\n });\n return createElement(Fragment, null, ...wrapped);\n};\n","import { cva } from 'class-variance-authority';\n\n// Opaque tints use `bg-[color-mix(in_oklab,rgb(var(--tint))_N%,rgb(var(--base)))]`, not `bg-<token>/N`.\n//\n// - `bg-<token>/N` mixes into `transparent`, showing whatever the button overlaps.\n// - Raw `--*` triples: `--color-*` exist at build time only; unresolved → `transparent`.\n// - Write the whole class literally — Tailwind scans source; assembled strings get no CSS.\n\nexport const variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw:group/button',\n 'tw:border-box',\n\n // layout\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:gap-2',\n\n // text — weight/tracking are brand tokens; only `keboola-legacy-*` brands uppercase\n 'tw:text-xs',\n 'tw:leading-5',\n 'tw:font-medium',\n 'tw:[[data-brand^=keboola-legacy]_&]:tracking-chrome',\n 'tw:[[data-brand^=keboola-legacy]_&]:uppercase',\n\n // border — legacy (non-argo) chrome uses a fixed radius, not the brand token.\n 'tw:rounded',\n 'tw:border',\n 'tw:border-transparent',\n\n // styling\n 'tw:shadow-none',\n 'tw:[a]:cursor-pointer', // explicitly set for anchor\n\n 'tw:focus-visible:outline',\n 'tw:focus-visible:outline-1',\n 'tw:focus-visible:-outline-offset-1',\n 'tw:focus-visible:outline-ring',\n 'tw:focus-visible:ring-4',\n 'tw:focus-visible:ring-ring/30',\n\n // disabled\n 'tw:disabled:opacity-40',\n 'tw:disabled:cursor-not-allowed',\n\n // anchor support\n 'tw:!no-underline',\n 'tw:aria-disabled:opacity-40',\n 'tw:aria-disabled:cursor-not-allowed',\n\n 'tw:[&_svg]:shrink-0',\n ],\n {\n defaultVariants: {\n size: 'medium',\n variant: 'primary',\n block: false,\n },\n variants: {\n block: {\n true: ['tw:w-full'],\n },\n variant: {\n primary: [\n 'tw:text-white',\n 'tw:bg-primary-500',\n\n 'tw:focus:text-white',\n 'tw:hover:text-white',\n 'tw:hover:not-disabled:bg-primary-600',\n 'tw:active:not-disabled:bg-primary-800',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-primary-500',\n ],\n secondary: [\n 'tw:text-white',\n 'tw:bg-secondary-500',\n\n 'tw:focus:text-white',\n 'tw:hover:text-white',\n 'tw:hover:not-disabled:bg-secondary-700',\n 'tw:active:not-disabled:bg-secondary-800',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-secondary-500',\n ],\n // Kai's actions: its gradient, three light pools drifting behind the label.\n kai: [\n 'tw:bg-kai',\n 'tw:animate-kai-drift',\n 'tw:motion-reduce:animate-none',\n 'tw:text-white',\n 'tw:hover:text-white',\n 'tw:focus:text-white',\n 'tw:hover:not-disabled:brightness-110',\n 'tw:focus-visible:ring-ring/50',\n ],\n danger: [\n 'tw:text-white',\n 'tw:bg-error-500',\n\n 'tw:focus:text-white',\n 'tw:hover:text-white',\n 'tw:hover:not-disabled:bg-error-600',\n 'tw:active:not-disabled:bg-error-700',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-error-500',\n ],\n // Tokens, not the fixed neutral scale: a transparent button cannot assume a light page.\n invisible: [\n 'tw:text-foreground',\n 'tw:bg-transparent',\n\n 'tw:focus:text-foreground',\n 'tw:hover:not-disabled:bg-muted',\n 'tw:hover:text-foreground',\n 'tw:active:not-disabled:bg-secondary',\n\n // contrasting icon on hover/active\n 'tw:[&_svg]:text-neutral-400',\n 'tw:hover:not-disabled:[&_svg]:text-secondary-600',\n 'tw:active:not-disabled:[&_svg]:text-secondary-600',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-transparent',\n ],\n outline: [\n 'tw:text-foreground',\n 'tw:bg-card',\n // border\n 'tw:!border-input',\n 'tw:hover:text-foreground',\n 'tw:focus:text-foreground',\n // Hover/pressed are `muted-foreground` tints: `bg-muted` is 4/255 from `bg-card` in dark.\n //\n // - Fills mix into `--card`: unchanged on a card, opaque off one.\n // - Border tints `transparent`: no `bg-clip-padding`, so it composites over the fill.\n 'tw:hover:not-disabled:!border-muted-foreground/60',\n 'tw:hover:not-disabled:bg-[color-mix(in_oklab,rgb(var(--muted-foreground))_15%,rgb(var(--card)))]',\n 'tw:active:not-disabled:bg-[color-mix(in_oklab,rgb(var(--muted-foreground))_35%,rgb(var(--card)))]',\n\n // contrasting icon hover, same as invisible\n 'tw:[&_svg]:text-muted-foreground',\n 'tw:not-disabled:hover:[&_svg]:text-secondary-600',\n 'tw:active:not-disabled:[&_svg]:text-secondary-600',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-card',\n 'tw:aria-disabled:!border-input',\n ],\n\n inline: [\n 'tw:text-foreground',\n 'tw:bg-transparent',\n 'tw:rounded-full',\n\n 'tw:[&_svg]:text-muted-foreground',\n 'tw:not-disabled:hover:[&_svg]:text-secondary-600',\n 'tw:not-disabled:focus:[&_svg]:text-secondary-600',\n ],\n },\n size: {\n medium: [\n 'tw:max-h-10',\n 'tw:min-h-10',\n 'tw:px-4',\n 'tw:py-2.5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n ],\n small: [\n 'tw:max-h-8',\n 'tw:min-h-8',\n 'tw:px-4',\n 'tw:py-1.5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n ],\n large: [\n 'tw:max-h-12',\n 'tw:min-h-12',\n 'tw:px-4',\n 'tw:py-3.5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n ],\n\n 'icon-lg': ['tw:size-12', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-6'],\n icon: ['tw:size-10', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n 'icon-sm': ['tw:size-8', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n 'icon-xs': ['tw:size-6', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n 'icon-2xs': [\n 'tw:!inline-flex',\n 'tw:size-5',\n 'tw:max-h-5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-3',\n ],\n 'icon-3xs': ['tw:h-fit', 'tw:w-fit', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n },\n },\n },\n);\n\nexport const argoVariants = cva(\n [\n 'tailwindcss-preflight',\n\n // layout\n 'tw:relative',\n 'tw:inline-flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:whitespace-nowrap',\n 'tw:gap-2',\n\n // border\n 'tw:border',\n 'tw:border-transparent',\n 'tw:rounded-[var(--radius-lg,0.25rem)]',\n\n // text\n 'tw:font-medium',\n 'tw:select-none',\n\n // focus visible\n 'tw:!outline-hidden',\n 'tw:focus-visible:ring-2',\n\n // disabled\n 'tw:disabled:cursor-not-allowed',\n 'tw:disabled:opacity-disabled',\n 'tw:active:opacity-60',\n\n 'tw:transition-all',\n\n // anchor support\n 'tw:!no-underline',\n 'tw:aria-disabled:cursor-not-allowed',\n 'tw:aria-disabled:opacity-disabled',\n\n // icon\n 'tw:shrink-0',\n 'tw:[&_svg]:pointer-events-none',\n 'tw:[&_svg]:shrink-0',\n \"tw:[&_svg:not([class*='tw:size-'])]:size-4\",\n ],\n {\n defaultVariants: {\n variant: 'primary',\n size: 'medium',\n },\n variants: {\n block: {\n true: ['tw:w-full'],\n },\n variant: {\n primary: [\n 'tw:bg-primary',\n 'tw:text-primary-foreground',\n 'tw:[a]:hover:bg-primary/80',\n 'tw:hover:not-disabled:bg-primary/90',\n 'tw:hover:text-primary-foreground',\n 'tw:focus:text-primary-foreground',\n\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-ring/50',\n ],\n secondary: [\n 'tw:bg-primary/10',\n 'tw:text-primary',\n 'tw:hover:not-disabled:bg-primary/20',\n\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-ring/50',\n ],\n\n // should be called \"destructive\" by Figma\n // Kai's actions: its gradient, three light pools drifting behind the label.\n kai: [\n 'tw:bg-kai',\n 'tw:animate-kai-drift',\n 'tw:motion-reduce:animate-none',\n 'tw:text-white',\n 'tw:hover:text-white',\n 'tw:focus:text-white',\n 'tw:hover:not-disabled:brightness-110',\n 'tw:focus-visible:ring-ring/50',\n ],\n danger: [\n 'tw:bg-destructive',\n 'tw:text-destructive-foreground',\n 'tw:hover:not-disabled:bg-destructive/90',\n 'tw:hover:text-destructive-foreground',\n 'tw:focus:text-destructive-foreground',\n\n 'tw:focus-visible:border-destructive',\n 'tw:focus-visible:ring-destructive/20',\n ],\n outline: [\n 'tw:!border-input',\n 'tw:bg-background',\n 'tw:bg-clip-padding',\n // Semantic text color so the label/icon flips in dark mode (matches `invisible`).\n 'tw:text-foreground',\n // Hover hue comes from the brand primary, not the fixed `accent` blue.\n //\n // - Fill mixes into `--background`: `bg-clip-padding` gives a translucent fill no backing.\n // - The *chrome* border carries the state (fill is ~1.5:1); `--primary` is for `focus-visible`.\n // - Border is solid, not a tint: its contrast would depend on the call site.\n 'tw:hover:not-disabled:bg-[color-mix(in_oklab,rgb(var(--primary))_10%,rgb(var(--background)))]',\n 'tw:hover:not-disabled:!border-muted-foreground',\n 'tw:hover:not-disabled:text-primary',\n 'tw:hover:active:bg-background',\n 'tw:focus-visible:!border-primary',\n 'tw:focus-visible:ring-ring/50',\n ],\n\n // should be called \"ghost\" by Figma\n invisible: [\n 'tw:bg-transparent',\n 'tw:bg-clip-padding',\n 'tw:text-foreground',\n 'tw:hover:not-disabled:bg-primary/10',\n 'tw:hover:not-disabled:text-primary',\n 'tw:hover:not-disabled:border-primary/10',\n\n 'tw:focus-visible:ring-ring/50',\n ],\n // should be called \"link\" by Figma\n inline: [\n 'tw:bg-transparent',\n 'tw:text-primary',\n 'tw:hover:underline',\n 'tw:hover:active:bg-transparent',\n 'tw:focus-visible:ring-ring/50',\n ],\n },\n size: {\n // should be called \"default\" by Figma\n medium: ['tw:max-h-9', 'tw:py-2', 'tw:px-4', 'tw:text-sm'],\n // should be called \"small\" by Figma\n small: ['tw:max-h-8', 'tw:py-2', 'tw:px-3', 'tw:text-xs'],\n // should be called \"large\" by Figma\n large: ['tw:max-h-10', 'tw:py-2.5', 'tw:px-6', 'tw:text-sm'],\n\n 'icon-lg': ['tw:size-10'],\n icon: ['tw:size-9'],\n 'icon-sm': ['tw:size-8'],\n 'icon-xs': ['tw:size-6'],\n // unsupported in ARGO, remove when old design is gone\n 'icon-2xs': [],\n 'icon-3xs': [],\n },\n },\n },\n);\n","import {\n type ComponentProps,\n Fragment,\n isValidElement,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Root, Slottable } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { Loader2 } from '../../icons';\nimport { cn, mergeRefs } from '../../utils';\nimport { useArgoDesign } from '../ThemeProvider/context';\n\nimport { withLabels } from './ButtonLabel';\nimport { afterAnimations, armMotion } from './motion';\nimport { argoVariants, variants } from './styles';\n\n/** Props for `Button`; icons are composed as children. */\ntype Props = {\n /** Shows a spinner in place of the leading icon, or before the label when there is none. The caller still controls `disabled`. */\n isLoading?: boolean;\n /** Render as a Radix `Slot` so the parent JSX (e.g. a `react-router` `<Link>`) becomes the button element. */\n asChild?: boolean;\n} & ComponentProps<'button'> &\n VariantProps<typeof variants>;\n\n/** The children that render anything, looking through arrays and fragments. */\nconst renderedChildren = (node: ReactNode): ReactNode[] => {\n if (Array.isArray(node)) return node.flatMap(renderedChildren);\n if (isValidElement<{ children?: ReactNode }>(node) && node.type === Fragment) {\n return renderedChildren(node.props.children);\n }\n const isBlank =\n node == null || typeof node === 'boolean' || (typeof node === 'string' && !node.trim());\n return isBlank ? [] : [node];\n};\n\n/**\n * Any user-initiated action; `size=\"icon-*\"` with no children is the icon-only button.\n *\n * - Not for: inline text links (`ButtonInline`), URL navigation (`Link`), action + dropdown (`SplitButton`).\n * - Wrap in `Tooltip` when icon-only or disabled; `Popconfirm` for destructive actions.\n *\n * @see RECIPES.md#disabled-button-tooltip\n * @see RECIPES.md#confirm-dialog\n */\nexport const Button = ({\n ref,\n children,\n disabled = false,\n className,\n type = 'button',\n isLoading = false,\n asChild = false,\n onClick,\n variant = 'primary',\n size = 'medium',\n block = false,\n ...buttonProps\n}: Props) => {\n const renderArgo = useArgoDesign();\n const Comp = asChild ? Root : 'button';\n const isIconOnly = String(size).startsWith('icon');\n const classNames = renderArgo\n ? argoVariants({ variant, size, block, className })\n : variants({ size, variant, block, className });\n\n const content =\n asChild && isValidElement<{ children?: ReactNode }>(children)\n ? children.props.children\n : children;\n const rendered = renderedChildren(content);\n const leadsWithElement = isValidElement(rendered[0]);\n const elementTypes = rendered.flatMap((child) => (isValidElement(child) ? [child.type] : []));\n\n // The previous render's children, which decide how the spinner and a new icon enter.\n const [prev, setPrev] = useState({ leadsWithElement, elementTypes });\n const [spinnerEnter, setSpinnerEnter] = useState<'grow' | 'fade' | null>(\n isLoading ? 'fade' : null,\n );\n const [iconEnter, setIconEnter] = useState<'grow' | 'fade'>('fade');\n const placement = isIconOnly ? 'center' : leadsWithElement ? 'leading' : 'inline';\n\n if (isLoading && !spinnerEnter) {\n // `fade` also when the caller dropped its leading icon this render: the spinner takes that icon's place.\n setSpinnerEnter(placement === 'inline' && !prev.leadsWithElement ? 'grow' : 'fade');\n }\n const typesChanged =\n prev.elementTypes.length !== elementTypes.length ||\n prev.elementTypes.some((type, index) => type !== elementTypes[index]);\n if (typesChanged || prev.leadsWithElement !== leadsWithElement) {\n setPrev({ leadsWithElement, elementTypes });\n }\n if (typesChanged) {\n const isAdded = elementTypes.length > prev.elementTypes.length;\n setIconEnter(isAdded && !isLoading && !spinnerEnter ? 'grow' : 'fade');\n }\n\n // The spinner stays mounted through its exit transition and unmounts when that ends.\n const spinnerRef = useRef<HTMLSpanElement>(null);\n useEffect(() => {\n const node = spinnerRef.current;\n if (isLoading || !node) return;\n return afterAnimations(node.getAnimations?.() ?? [], () => setSpinnerEnter(null));\n }, [isLoading]);\n\n // A leading spinner is kept centred over the leading icon while the button resizes.\n useLayoutEffect(() => {\n const slot = spinnerRef.current;\n const button = slot?.offsetParent;\n if (!slot || !button || placement !== 'leading') return;\n const centre = () => {\n const icon = slot.nextElementSibling;\n if (!(icon instanceof SVGElement)) return;\n const [iconBox, buttonBox] = [icon.getBoundingClientRect(), button.getBoundingClientRect()];\n const scale = buttonBox.width / (button instanceof HTMLElement ? button.offsetWidth : 1) || 1;\n const x = (iconBox.left - buttonBox.left + iconBox.width / 2) / scale - button.clientLeft;\n slot.style.left = `${x - parseFloat(getComputedStyle(slot).width) / 2}px`;\n };\n centre();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(centre);\n observer.observe(button);\n return () => observer.disconnect();\n }, [placement, spinnerEnter]);\n\n // `data-button-ready` arms the entry animations a frame after mount, so nothing animates on page load.\n const buttonRef = useRef<HTMLButtonElement>(null);\n const armRef = useCallback(\n (node: HTMLButtonElement | null) => (node ? armMotion(node) : undefined),\n [],\n );\n const mergedRef = useMemo(() => mergeRefs(ref, buttonRef, armRef), [ref, armRef]);\n\n // `grow` lasts only through the entry, so a later rotation or swap keeps the default origin.\n useEffect(() => {\n const node = buttonRef.current;\n if (iconEnter !== 'grow' || !node) return;\n const entries = [...node.querySelectorAll(':scope > svg')].flatMap(\n (icon) => icon.getAnimations?.() ?? [],\n );\n return afterAnimations(entries, () => setIconEnter('fade'));\n }, [iconEnter]);\n\n const handleClick: ComponentProps<'button'>['onClick'] = (event) => {\n const isAnchor = event.currentTarget.tagName === 'A';\n\n // <a/> does not support disabled by default, and we cannot use pointer-events: none because cursor-not-allowed would not work.\n if (isAnchor && disabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Comp\n {...buttonProps}\n ref={mergedRef}\n disabled={disabled}\n // An explicit `aria-disabled` wins: unavailable yet focusable, unlike `disabled`.\n aria-disabled={buttonProps['aria-disabled'] ?? disabled}\n data-variant={variant}\n // Icon-only flag; `ButtonGroup space=\"block\"` stretches only non-icon children.\n data-icon-only={isIconOnly}\n data-icon-enter={iconEnter}\n type={type}\n onClick={handleClick}\n className={cn(classNames)}\n >\n {spinnerEnter && (\n // Motion lives in `styles.css` under `[data-slot='button-spinner']`.\n <span\n ref={spinnerRef}\n aria-hidden\n data-slot=\"button-spinner\"\n data-state={isLoading ? 'open' : 'closed'}\n data-placement={placement}\n data-enter={spinnerEnter}\n >\n <Loader2 className=\"tw:animate-spin\" />\n </span>\n )}\n <Slottable>{asChild ? children : withLabels(children)}</Slottable>\n </Comp>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Root } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nconst buttonInlineVariants = cva(\n [\n 'tailwindcss-preflight',\n\n 'tw:inline-flex',\n 'tw:items-center',\n 'tw:gap-2',\n\n 'tw:underline-offset-2',\n\n 'tw:disabled:opacity-40',\n 'tw:disabled:cursor-not-allowed',\n 'tw:disabled:text-neutral-500',\n 'tw:disabled:no-underline',\n 'tw:disabled:[&_svg]:text-neutral-400',\n\n // Default size for nested Lucide icons; callers can override on the icon.\n \"tw:[&_svg.lucide:not([class*='tw:size-'])]:size-4\",\n 'tw:[&_svg]:shrink-0',\n ],\n {\n defaultVariants: {\n variant: 'link',\n color: 'link',\n },\n variants: {\n color: {\n link: ['tw:text-primary', 'tw:hover:text-primary/90', 'tw:[&_svg]:text-primary'],\n dark: ['tw:text-foreground tw:[&_svg]:text-muted-foreground'],\n danger: ['tw:text-error-500 tw:[&_svg]:text-error-500'],\n muted: ['tw:text-muted-foreground tw:[&_svg]:text-muted-foreground'],\n custom: [],\n },\n variant: {\n link: ['tw:underline', 'tw:hover:no-underline'],\n 'link-reverse': ['tw:no-underline', '', 'tw:hover:underline'],\n custom: [],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'button'> &\n VariantProps<typeof buttonInlineVariants> & { asChild?: boolean };\n\nexport const ButtonInline = ({\n ref,\n children,\n className,\n variant,\n color,\n type = 'button',\n asChild = false,\n ...buttonProps\n}: Props) => {\n const Comp = asChild ? Root : 'button';\n\n return (\n <Comp\n {...buttonProps}\n ref={ref}\n type={asChild ? undefined : type}\n className={buttonInlineVariants({ variant, color, className })}\n >\n {children}\n </Comp>\n );\n};\n"],"mappings":"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,KAAK,IAAI,oBAAC,aAAD,EAA+B,KAAO,GAApB,KAAoB,IAAI;CACjE,CAAC;CACD,OAAO,cAAc,UAAU,MAAM,GAAG,OAAO;AACjD;;;ACxGA,MAAa,WAAW,IACtB;CACE;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CAGA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CAGA;CACA;CACA;CAEA;AACF,GACA;CACE,iBAAiB;EACf,MAAM;EACN,SAAS;EACT,OAAO;CACT;CACA,UAAU;EACR,OAAO,EACL,MAAM,CAAC,WAAW,EACpB;EACA,SAAS;GACP,SAAS;IACP;IACA;IAEA;IACA;IACA;IACA;IAGA;GACF;GACA,WAAW;IACT;IACA;IAEA;IACA;IACA;IACA;IAGA;GACF;GAEA,KAAK;IACH;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,QAAQ;IACN;IACA;IAEA;IACA;IACA;IACA;IAGA;GACF;GAEA,WAAW;IACT;IACA;IAEA;IACA;IACA;IACA;IAGA;IACA;IACA;IAGA;GACF;GACA,SAAS;IACP;IACA;IAEA;IACA;IACA;IAKA;IACA;IACA;IAGA;IACA;IACA;IAGA;IACA;GACF;GAEA,QAAQ;IACN;IACA;IACA;IAEA;IACA;IACA;GACF;EACF;EACA,MAAM;GACJ,QAAQ;IACN;IACA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;IACA;IACA;GACF;GAEA,WAAW;IAAC;IAAc;IAAU;GAA4C;GAChF,MAAM;IAAC;IAAc;IAAU;GAA4C;GAC3E,WAAW;IAAC;IAAa;IAAU;GAA4C;GAC/E,WAAW;IAAC;IAAa;IAAU;GAA4C;GAC/E,YAAY;IACV;IACA;IACA;IACA;GACF;GACA,YAAY;IAAC;IAAY;IAAY;GAA4C;EACnF;CACF;AACF,CACF;AAEA,MAAa,eAAe,IAC1B;CACE;CAGA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __exportAll } from "./rolldown-runtime-Bdc48AWt.js";
|
|
2
|
-
import { cn } from "./classNames-
|
|
2
|
+
import { cn } from "./classNames-DcGnTh2N.js";
|
|
3
3
|
import React, { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region ../../node_modules/.pnpm/@date-fns+tz@1.4.1/node_modules/@date-fns/tz/tzName/index.js
|
|
@@ -6740,7 +6740,7 @@ const rangePickerClassNames = {
|
|
|
6740
6740
|
range_start: `tw:bg-primary tw:rounded-r-none tw:font-medium tw:border-primary tw:hover:bg-primary/90 tw:hover:border-primary/90 tw:text-primary-foreground`,
|
|
6741
6741
|
range_end: `tw:bg-primary tw:rounded-l-none tw:font-medium tw:border-primary tw:hover:bg-primary/90 tw:hover:border-primary/90 tw:text-primary-foreground`,
|
|
6742
6742
|
selected: `tw:font-medium tw:rounded`,
|
|
6743
|
-
range_middle: `tw:bg-
|
|
6743
|
+
range_middle: `tw:bg-selected tw:border-selected tw:text-selected-foreground tw:rounded-none tw:font-medium`
|
|
6744
6744
|
};
|
|
6745
6745
|
const Calendar = ({ className, classNames, ...props }) => {
|
|
6746
6746
|
const defaultClassNames = getDefaultClassNames();
|
|
@@ -6750,7 +6750,7 @@ const Calendar = ({ className, classNames, ...props }) => {
|
|
|
6750
6750
|
className: cn(className, "tw:p-3"),
|
|
6751
6751
|
classNames: {
|
|
6752
6752
|
chevron: `${defaultClassNames.chevron} tw:fill-foreground`,
|
|
6753
|
-
day: `${defaultClassNames.day} tw:hover:bg-
|
|
6753
|
+
day: `${defaultClassNames.day} tw:hover:bg-hover tw:rounded`,
|
|
6754
6754
|
day_button: `${defaultClassNames.day_button} tw:rounded`,
|
|
6755
6755
|
today: `tw:bg-accent tw:text-accent-foreground tw:font-medium`,
|
|
6756
6756
|
...dayPickerClassNames,
|
|
@@ -6765,4 +6765,4 @@ Calendar.displayName = "Calendar";
|
|
|
6765
6765
|
//#endregion
|
|
6766
6766
|
export { Calendar };
|
|
6767
6767
|
|
|
6768
|
-
//# sourceMappingURL=Calendar-
|
|
6768
|
+
//# sourceMappingURL=Calendar-BnKi1kPu.js.map
|