@keboola/design 11.0.0 → 11.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 +16 -1
- package/CHANGELOG.md +2138 -0
- package/COMPONENT-API.md +40 -1
- package/dist/AIKit-DiS0CVOW.js +1320 -0
- package/dist/AIKit-DiS0CVOW.js.map +1 -0
- package/dist/Alert-DfZq9kGe.js +133 -0
- package/dist/Alert-DfZq9kGe.js.map +1 -0
- package/dist/AlertModal-Dp_XuJBW.js +219 -0
- package/dist/AlertModal-Dp_XuJBW.js.map +1 -0
- package/dist/AppShell-B5GQN6Zs.js +143 -0
- package/dist/AppShell-B5GQN6Zs.js.map +1 -0
- package/dist/AutoSaveTextarea-BeuWuszr.js +58 -0
- package/dist/{chunk-UGT6DKWM.js.map → AutoSaveTextarea-BeuWuszr.js.map} +1 -1
- package/dist/Badge-Ch26CXoP.js +195 -0
- package/dist/Badge-Ch26CXoP.js.map +1 -0
- package/dist/BrandEditor-DyzgfVkl.js +903 -0
- package/dist/BrandEditor-DyzgfVkl.js.map +1 -0
- package/dist/BrandLogo-CJkRd0F8.js +46 -0
- package/dist/BrandLogo-CJkRd0F8.js.map +1 -0
- package/dist/Breadcrumb-Frst8MTA.js +330 -0
- package/dist/Breadcrumb-Frst8MTA.js.map +1 -0
- package/dist/Button-6xBX0nNl.js +391 -0
- package/dist/Button-6xBX0nNl.js.map +1 -0
- package/dist/Calendar-cG5NIJ4O.js +6768 -0
- package/dist/Calendar-cG5NIJ4O.js.map +1 -0
- package/dist/Card-BAoZ35CV.js +105 -0
- package/dist/Card-BAoZ35CV.js.map +1 -0
- package/dist/Checkbox-GJ8-srt4.js +97 -0
- package/dist/Checkbox-GJ8-srt4.js.map +1 -0
- package/dist/Clipboard-CBJZiviP.js +58 -0
- package/dist/Clipboard-CBJZiviP.js.map +1 -0
- package/dist/ClipboardButton-ClcluT0C.js +43 -0
- package/dist/ClipboardButton-ClcluT0C.js.map +1 -0
- package/dist/CodeEditor-DyaN-Ij2.js +1000 -0
- package/dist/CodeEditor-DyaN-Ij2.js.map +1 -0
- package/dist/Collapsible-BQXWEOBC.js +34 -0
- package/dist/Collapsible-BQXWEOBC.js.map +1 -0
- package/dist/ColorInput-B8z4j4Y_.js +180 -0
- package/dist/ColorInput-B8z4j4Y_.js.map +1 -0
- package/dist/ColorModeSwitch-dZFZyqy1.js +77 -0
- package/dist/ColorModeSwitch-dZFZyqy1.js.map +1 -0
- package/dist/Combobox-Dgm6Z4ib.js +443 -0
- package/dist/Combobox-Dgm6Z4ib.js.map +1 -0
- package/dist/Command-C0aZfVTq.js +102 -0
- package/dist/Command-C0aZfVTq.js.map +1 -0
- package/dist/CopyField-BJ96zvXs.js +322 -0
- package/dist/CopyField-BJ96zvXs.js.map +1 -0
- package/dist/DateInput-B3UdzRfW.js +141 -0
- package/dist/DateInput-B3UdzRfW.js.map +1 -0
- package/dist/DatePicker-Dw3DpbUh.js +24 -0
- package/dist/DatePicker-Dw3DpbUh.js.map +1 -0
- package/dist/DateRangeInput-DTuySEiq.js +139 -0
- package/dist/DateRangeInput-DTuySEiq.js.map +1 -0
- package/dist/DateRangePicker-DCmMHg4s.js +159 -0
- package/dist/DateRangePicker-DCmMHg4s.js.map +1 -0
- package/dist/DiagramSkeleton-lwBS2YBa.js +11 -0
- package/dist/DiagramSkeleton-lwBS2YBa.js.map +1 -0
- package/dist/DiffView-ppTIzh2h.js +429 -0
- package/dist/DiffView-ppTIzh2h.js.map +1 -0
- package/dist/DropdownMenu-t90tVw6l.js +327 -0
- package/dist/DropdownMenu-t90tVw6l.js.map +1 -0
- package/dist/FieldBox-D7DYtX_m.js +70 -0
- package/dist/FieldBox-D7DYtX_m.js.map +1 -0
- package/dist/FieldItem-CAPj9lj3.d.ts +111 -0
- package/dist/FieldItem-D-h1NeBo.js +108 -0
- package/dist/FieldItem-D-h1NeBo.js.map +1 -0
- package/dist/FileUpload-BRv0TaZk.js +2527 -0
- package/dist/FileUpload-BRv0TaZk.js.map +1 -0
- package/dist/Form-DHvcFoEi.js +311 -0
- package/dist/Form-DHvcFoEi.js.map +1 -0
- package/dist/FormGroup-C41n65cE.js +124 -0
- package/dist/FormGroup-C41n65cE.js.map +1 -0
- package/dist/FullScreenModal-Cb3PGgh4.js +96 -0
- package/dist/FullScreenModal-Cb3PGgh4.js.map +1 -0
- package/dist/HoverCard-WfDkLK1s.js +31 -0
- package/dist/HoverCard-WfDkLK1s.js.map +1 -0
- package/dist/InputGroup-CdTq8H7c.js +292 -0
- package/dist/InputGroup-CdTq8H7c.js.map +1 -0
- package/dist/Kbd-CxHAo1oo.js +111 -0
- package/dist/Kbd-CxHAo1oo.js.map +1 -0
- package/dist/MarkedText-Ckbft5mw.js +44 -0
- package/dist/MarkedText-Ckbft5mw.js.map +1 -0
- package/dist/MermaidDiagram-ChL3WIQT.js +399 -0
- package/dist/MermaidDiagram-ChL3WIQT.js.map +1 -0
- package/dist/Modal-wqG8nJiK.js +185 -0
- package/dist/Modal-wqG8nJiK.js.map +1 -0
- package/dist/ModalTitle-C76ke2eo.js +28 -0
- package/dist/ModalTitle-C76ke2eo.js.map +1 -0
- package/dist/MultiActionButtonGroup-BiIIubiL.js +33 -0
- package/dist/MultiActionButtonGroup-BiIIubiL.js.map +1 -0
- package/dist/Navbar-BfaPeLUL.js +325 -0
- package/dist/Navbar-BfaPeLUL.js.map +1 -0
- package/dist/OtpInput-CbbymqYs.js +93 -0
- package/dist/OtpInput-CbbymqYs.js.map +1 -0
- package/dist/PageHeader-Q3IpCnQd.js +177 -0
- package/dist/PageHeader-Q3IpCnQd.js.map +1 -0
- package/dist/PageLayout-DSVM-ASz.js +176 -0
- package/dist/PageLayout-DSVM-ASz.js.map +1 -0
- package/dist/PageToolbar-OQg3mPF-.js +153 -0
- package/dist/PageToolbar-OQg3mPF-.js.map +1 -0
- package/dist/Pagination-Cjfda8KG.js +70 -0
- package/dist/Pagination-Cjfda8KG.js.map +1 -0
- package/dist/Popconfirm-D7_vfxFd.js +167 -0
- package/dist/Popconfirm-D7_vfxFd.js.map +1 -0
- package/dist/Popover-CzeHjvrB.js +85 -0
- package/dist/Popover-CzeHjvrB.js.map +1 -0
- package/dist/RadioGroup-sIveSsNa.js +233 -0
- package/dist/RadioGroup-sIveSsNa.js.map +1 -0
- package/dist/Resizable-D3vYToZH.js +52 -0
- package/dist/Resizable-D3vYToZH.js.map +1 -0
- package/dist/Search-3UiqNZRj.js +184 -0
- package/dist/Search-3UiqNZRj.js.map +1 -0
- package/dist/SearchInput-C7dF_Ir-.js +102 -0
- package/dist/SearchInput-C7dF_Ir-.js.map +1 -0
- package/dist/SectionNav-8NoTOKO8.js +276 -0
- package/dist/SectionNav-8NoTOKO8.js.map +1 -0
- package/dist/Select-Is0VkePH.js +181 -0
- package/dist/Select-Is0VkePH.js.map +1 -0
- package/dist/Sheet-Dw9BDvjI.js +169 -0
- package/dist/Sheet-Dw9BDvjI.js.map +1 -0
- package/dist/Sidebar-Dcb4rinA.js +799 -0
- package/dist/Sidebar-Dcb4rinA.js.map +1 -0
- package/dist/Slider-BOPfMOMm.js +127 -0
- package/dist/Slider-BOPfMOMm.js.map +1 -0
- package/dist/Stepper-C8sm9ZFM.js +325 -0
- package/dist/Stepper-C8sm9ZFM.js.map +1 -0
- package/dist/Switch-CX2A0v50.js +201 -0
- package/dist/Switch-CX2A0v50.js.map +1 -0
- package/dist/Table-CvYuTuNU.js +104 -0
- package/dist/Table-CvYuTuNU.js.map +1 -0
- package/dist/Tabs-UMQuDoW8.js +74 -0
- package/dist/Tabs-UMQuDoW8.js.map +1 -0
- package/dist/TextInput-CMuN1WfY.js +110 -0
- package/dist/TextInput-CMuN1WfY.js.map +1 -0
- package/dist/ThemeProvider-QncUrfJn.js +203 -0
- package/dist/ThemeProvider-QncUrfJn.js.map +1 -0
- package/dist/TimePicker-D9zktB8A.js +98 -0
- package/dist/TimePicker-D9zktB8A.js.map +1 -0
- package/dist/Timeline-6btyJl4D.js +154 -0
- package/dist/Timeline-6btyJl4D.js.map +1 -0
- package/dist/Toast-DQSbs3oA.js +49 -0
- package/dist/Toast-DQSbs3oA.js.map +1 -0
- package/dist/ToggleGroup-Cy_10Mvu.js +47 -0
- package/dist/ToggleGroup-Cy_10Mvu.js.map +1 -0
- package/dist/Workbench-BzE-Vvd9.js +293 -0
- package/dist/Workbench-BzE-Vvd9.js.map +1 -0
- package/dist/ZoomableSvg-CZEu6sAq.js +248 -0
- package/dist/ZoomableSvg-CZEu6sAq.js.map +1 -0
- package/dist/charts.d.ts +110 -103
- package/dist/charts.js +303 -254
- package/dist/charts.js.map +1 -1
- package/dist/classNames-BzrkDnOD.js +9 -0
- package/dist/classNames-BzrkDnOD.js.map +1 -0
- package/dist/context-KxxeMHbR.js +62 -0
- package/dist/context-KxxeMHbR.js.map +1 -0
- package/dist/editors.d.ts +244 -175
- package/dist/editors.js +802 -428
- package/dist/editors.js.map +1 -1
- package/dist/escapeStringRegexp-8MxP2knR.js +6 -0
- package/dist/escapeStringRegexp-8MxP2knR.js.map +1 -0
- package/dist/icons-Cek151jC.js +640 -0
- package/dist/icons-Cek151jC.js.map +1 -0
- package/dist/icons.d.ts +2 -41
- package/dist/icons.js +2 -9
- package/dist/index-m-kQEWiY.d.ts +54 -0
- package/dist/index.d.ts +6191 -9891
- package/dist/index.js +113 -124
- package/dist/internal/blocks/AIKit.js +2 -30
- package/dist/internal/blocks/AppShell.js +2 -11
- package/dist/internal/blocks/AutoSaveTextarea.js +2 -14
- package/dist/internal/blocks/BrandEditor.js +2 -23
- package/dist/internal/blocks/ChartPanel.js +45 -9
- package/dist/internal/blocks/ChartPanel.js.map +1 -1
- package/dist/internal/blocks/ClipboardButton.js +2 -12
- package/dist/internal/blocks/ColorInput.js +2 -13
- package/dist/internal/blocks/ColorModeSwitch.js +2 -13
- package/dist/internal/blocks/Command.js +2 -15
- package/dist/internal/blocks/CopyField.js +2 -11
- package/dist/internal/blocks/DashboardHero.js +58 -8
- package/dist/internal/blocks/DashboardHero.js.map +1 -1
- package/dist/internal/blocks/DateInput.js +2 -16
- package/dist/internal/blocks/DateRangeInput.js +2 -16
- package/dist/internal/blocks/EmptyConfigurationActionCard.js +15 -9
- package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -1
- package/dist/internal/blocks/EmptyState.js +141 -3
- package/dist/internal/blocks/EmptyState.js.map +1 -1
- package/dist/internal/blocks/ErrorState.js +178 -4
- package/dist/internal/blocks/ErrorState.js.map +1 -1
- package/dist/internal/blocks/ExportMenu.js +40 -12
- package/dist/internal/blocks/ExportMenu.js.map +1 -1
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +56 -0
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js.map +1 -0
- package/dist/internal/blocks/Form.js +2 -29
- package/dist/internal/blocks/FormGroup.js +2 -18
- package/dist/internal/blocks/GoogleButton.js +94 -9
- package/dist/internal/blocks/GoogleButton.js.map +1 -1
- package/dist/internal/blocks/MicrosoftButton.js +63 -9
- package/dist/internal/blocks/MicrosoftButton.js.map +1 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js +2 -12
- package/dist/internal/blocks/MultiCombobox.js +192 -13
- package/dist/internal/blocks/MultiCombobox.js.map +1 -1
- package/dist/internal/blocks/NumberInput.js +43 -11
- package/dist/internal/blocks/NumberInput.js.map +1 -1
- package/dist/internal/blocks/OtpInput.js +2 -10
- package/dist/internal/blocks/PageHeader.js +2 -9
- package/dist/internal/blocks/PageLayout.js +2 -9
- package/dist/internal/blocks/PageToolbar.js +2 -13
- package/dist/internal/blocks/PasswordInput.js +96 -12
- package/dist/internal/blocks/PasswordInput.js.map +1 -1
- package/dist/internal/blocks/SearchInput.js +2 -12
- package/dist/internal/blocks/SearchInputWithNavigation.js +64 -15
- package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -1
- package/dist/internal/blocks/SectionNav.js +2 -15
- package/dist/internal/blocks/SplitButton.js +45 -13
- package/dist/internal/blocks/SplitButton.js.map +1 -1
- package/dist/internal/blocks/StatCard.js +96 -9
- package/dist/internal/blocks/StatCard.js.map +1 -1
- package/dist/internal/blocks/TextInput.js +2 -13
- package/dist/internal/blocks/Textarea.js +31 -12
- package/dist/internal/blocks/Textarea.js.map +1 -1
- package/dist/internal/blocks/TimeInput.js +76 -16
- package/dist/internal/blocks/TimeInput.js.map +1 -1
- package/dist/internal/components/Alert.js +2 -11
- package/dist/internal/components/AlertModal.js +2 -11
- package/dist/internal/components/Avatar.js +52 -8
- package/dist/internal/components/Avatar.js.map +1 -1
- package/dist/internal/components/Badge.js +2 -9
- package/dist/internal/components/BrandLogo.js +2 -11
- package/dist/internal/components/Breadcrumb.js +2 -14
- package/dist/internal/components/Button.js +2 -10
- package/dist/internal/components/ButtonGroup.js +65 -8
- package/dist/internal/components/ButtonGroup.js.map +1 -1
- package/dist/internal/components/Calendar.js +2 -9
- package/dist/internal/components/Card.js +2 -9
- package/dist/internal/components/Checkbox.js +2 -11
- package/dist/internal/components/Clipboard.js +2 -9
- package/dist/internal/components/Collapsible.js +2 -9
- package/dist/internal/components/CollapsiblePanel.js +86 -10
- package/dist/internal/components/CollapsiblePanel.js.map +1 -1
- package/dist/internal/components/Combobox.js +2 -13
- package/dist/internal/components/DatePicker.js +2 -11
- package/dist/internal/components/DateRangePicker.js +2 -17
- package/dist/internal/components/DiffView.js +2 -9
- package/dist/internal/components/DotsLoader.js +17 -4
- package/dist/internal/components/DotsLoader.js.map +1 -1
- package/dist/internal/components/DropdownMenu.js +2 -11
- package/dist/internal/components/EmptySearchContent.js +11 -3
- package/dist/internal/components/EmptySearchContent.js.map +1 -1
- package/dist/internal/components/FileUpload.js +2 -11
- package/dist/internal/components/FullScreenModal.js +2 -12
- package/dist/internal/components/HelpBlock.js +24 -3
- package/dist/internal/components/HelpBlock.js.map +1 -1
- package/dist/internal/components/HoverCard.js +2 -9
- package/dist/internal/components/InputGroup.js +2 -11
- package/dist/internal/components/Kbd.js +2 -9
- package/dist/internal/components/Label.js +38 -8
- package/dist/internal/components/Label.js.map +1 -1
- package/dist/internal/components/Link.js +21 -8
- package/dist/internal/components/Link.js.map +1 -1
- package/dist/internal/components/MarkedText.js +2 -5
- package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +19 -9
- package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -1
- package/dist/internal/components/MergeEditor/PaneHeader.js +12 -3
- package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -1
- package/dist/internal/components/MergeEditor/constants.js +17 -3
- package/dist/internal/components/MergeEditor/constants.js.map +1 -1
- package/dist/internal/components/MergeEditor/useMergeDiff.js +2 -5
- package/dist/internal/components/Modal.js +2 -13
- package/dist/internal/components/Navbar.js +2 -14
- package/dist/internal/components/Pagination.js +2 -11
- package/dist/internal/components/PanelWithDetails.js +30 -10
- package/dist/internal/components/PanelWithDetails.js.map +1 -1
- package/dist/internal/components/Popconfirm.js +2 -12
- package/dist/internal/components/Popover.js +2 -9
- package/dist/internal/components/Progress.js +46 -8
- package/dist/internal/components/Progress.js.map +1 -1
- package/dist/internal/components/RadioGroup.js +2 -12
- package/dist/internal/components/Resizable.js +2 -9
- package/dist/internal/components/ScrollArea.js +41 -8
- package/dist/internal/components/ScrollArea.js.map +1 -1
- package/dist/internal/components/Search.js +2 -10
- package/dist/internal/components/Select.js +2 -12
- package/dist/internal/components/Separator.js +83 -8
- package/dist/internal/components/Separator.js.map +1 -1
- package/dist/internal/components/Sheet.js +2 -12
- package/dist/internal/components/Sidebar.js +2 -20
- package/dist/internal/components/Skeleton/Skeleton.js +38 -8
- package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/internal/components/Skeleton/SkeletonList.js +40 -9
- package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -1
- package/dist/internal/components/Slider.js +2 -11
- package/dist/internal/components/SpotlightBackdrop.js +131 -8
- package/dist/internal/components/SpotlightBackdrop.js.map +1 -1
- package/dist/internal/components/Stepper.js +2 -10
- package/dist/internal/components/Switch.js +2 -10
- package/dist/internal/components/Table.js +2 -10
- package/dist/internal/components/Tabs.js +2 -12
- package/dist/internal/components/ThemeProvider.js +3 -10
- package/dist/internal/components/TimePicker.js +2 -12
- package/dist/internal/components/Timeline.js +2 -10
- package/dist/internal/components/Toast.js +3 -11
- package/dist/internal/components/Toggle.js +168 -8
- package/dist/internal/components/Toggle.js.map +1 -1
- package/dist/internal/components/ToggleGroup.js +2 -9
- package/dist/internal/components/Tooltip.js +2 -8
- package/dist/internal/components/Truncated.js +44 -8
- package/dist/internal/components/Truncated.js.map +1 -1
- package/dist/internal/components/Workbench.js +2 -11
- package/dist/internal/components/ZoomableSvg.js +2 -13
- package/dist/internal/hooks/useAutosizeInput.js +76 -3
- package/dist/internal/hooks/useAutosizeInput.js.map +1 -1
- package/dist/internal/hooks/useScrollbarPosition.js +44 -4
- package/dist/internal/hooks/useScrollbarPosition.js.map +1 -1
- package/dist/internal/hooks/useStableCallback.js +28 -3
- package/dist/internal/hooks/useStableCallback.js.map +1 -1
- package/dist/internal/utils/mergeRefs.js +19 -3
- package/dist/internal/utils/mergeRefs.js.map +1 -1
- package/dist/internal/utils.js +5 -8
- package/dist/markdown-editor.d.ts +72 -72
- package/dist/markdown-editor.js +1122 -1207
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.d.ts +12 -12
- package/dist/mermaid.js +2 -18
- package/dist/rjsf.d.ts +45 -34
- package/dist/rjsf.js +1601 -1671
- package/dist/rjsf.js.map +1 -1
- package/dist/rolldown-runtime-Bdc48AWt.js +33 -0
- package/dist/styles-DSUP_-9Z.js +158 -0
- package/dist/styles-DSUP_-9Z.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/testing.d.ts +8 -7
- package/dist/testing.js +36 -21
- package/dist/testing.js.map +1 -1
- package/dist/themeTokens-BNg98Mu9.js +85 -0
- package/dist/themeTokens-BNg98Mu9.js.map +1 -0
- package/dist/toast-CjkURw0M.js +184 -0
- package/dist/toast-CjkURw0M.js.map +1 -0
- package/dist/useColorSchemeState-CYqcUfSH.js +61 -0
- package/dist/useColorSchemeState-CYqcUfSH.js.map +1 -0
- package/dist/useControllableState-M6494mCT.js +31 -0
- package/dist/useControllableState-M6494mCT.js.map +1 -0
- package/dist/useElement-DkF6esWL.js +15 -0
- package/dist/useElement-DkF6esWL.js.map +1 -0
- package/dist/useMergeDiff-CvowEXJ1.js +465 -0
- package/dist/useMergeDiff-CvowEXJ1.js.map +1 -0
- package/dist/utils-D0c5VAyF.js +308 -0
- package/dist/utils-D0c5VAyF.js.map +1 -0
- package/package.json +11 -10
- package/dist/MermaidDiagram-ZU5KAVRT.js +0 -18
- package/dist/MermaidDiagram-ZU5KAVRT.js.map +0 -1
- package/dist/chunk-2YYJDKSP.js +0 -51
- package/dist/chunk-2YYJDKSP.js.map +0 -1
- package/dist/chunk-3P5UUCFI.js +0 -385
- package/dist/chunk-3P5UUCFI.js.map +0 -1
- package/dist/chunk-3QDFDDWZ.js +0 -99
- package/dist/chunk-3QDFDDWZ.js.map +0 -1
- package/dist/chunk-3W27OLK5.js +0 -15
- package/dist/chunk-3W27OLK5.js.map +0 -1
- package/dist/chunk-4FIZZONW.js +0 -40
- package/dist/chunk-4FIZZONW.js.map +0 -1
- package/dist/chunk-4GIAXOJG.js +0 -133
- package/dist/chunk-4GIAXOJG.js.map +0 -1
- package/dist/chunk-52NDNMK7.js +0 -99
- package/dist/chunk-52NDNMK7.js.map +0 -1
- package/dist/chunk-576G5OES.js +0 -201
- package/dist/chunk-576G5OES.js.map +0 -1
- package/dist/chunk-5AIE6SET.js +0 -659
- package/dist/chunk-5AIE6SET.js.map +0 -1
- package/dist/chunk-5FTNAZRW.js +0 -327
- package/dist/chunk-5FTNAZRW.js.map +0 -1
- package/dist/chunk-5IG2S7ZY.js +0 -70
- package/dist/chunk-5IG2S7ZY.js.map +0 -1
- package/dist/chunk-5QCXHNCW.js +0 -404
- package/dist/chunk-5QCXHNCW.js.map +0 -1
- package/dist/chunk-6DUMGC7Y.js +0 -105
- package/dist/chunk-6DUMGC7Y.js.map +0 -1
- package/dist/chunk-6J25CVST.js +0 -174
- package/dist/chunk-6J25CVST.js.map +0 -1
- package/dist/chunk-6NN35XOP.js +0 -120
- package/dist/chunk-6NN35XOP.js.map +0 -1
- package/dist/chunk-6NZBVA4T.js +0 -24
- package/dist/chunk-6NZBVA4T.js.map +0 -1
- package/dist/chunk-6W5BHRCL.js +0 -295
- package/dist/chunk-6W5BHRCL.js.map +0 -1
- package/dist/chunk-72BKRCEG.js +0 -409
- package/dist/chunk-72BKRCEG.js.map +0 -1
- package/dist/chunk-7GTI3PPI.js +0 -95
- package/dist/chunk-7GTI3PPI.js.map +0 -1
- package/dist/chunk-7P6PLZ4B.js +0 -74
- package/dist/chunk-7P6PLZ4B.js.map +0 -1
- package/dist/chunk-7WZWY5IA.js +0 -46
- package/dist/chunk-7WZWY5IA.js.map +0 -1
- package/dist/chunk-AIYO2632.js +0 -489
- package/dist/chunk-AIYO2632.js.map +0 -1
- package/dist/chunk-ANFZWPNE.js +0 -112
- package/dist/chunk-ANFZWPNE.js.map +0 -1
- package/dist/chunk-ANZTVAJU.js +0 -73
- package/dist/chunk-ANZTVAJU.js.map +0 -1
- package/dist/chunk-BD5BTJKX.js +0 -166
- package/dist/chunk-BD5BTJKX.js.map +0 -1
- package/dist/chunk-BHGIDSRJ.js +0 -140
- package/dist/chunk-BHGIDSRJ.js.map +0 -1
- package/dist/chunk-BSQWZITZ.js +0 -507
- package/dist/chunk-BSQWZITZ.js.map +0 -1
- package/dist/chunk-D3LAIK62.js +0 -23
- package/dist/chunk-D3LAIK62.js.map +0 -1
- package/dist/chunk-DODCR43C.js +0 -155
- package/dist/chunk-DODCR43C.js.map +0 -1
- package/dist/chunk-EEK5NGZF.js +0 -40
- package/dist/chunk-EEK5NGZF.js.map +0 -1
- package/dist/chunk-ENRG7TXA.js +0 -11
- package/dist/chunk-ENRG7TXA.js.map +0 -1
- package/dist/chunk-EQRMGIGY.js +0 -239
- package/dist/chunk-EQRMGIGY.js.map +0 -1
- package/dist/chunk-ERAHK5YQ.js +0 -495
- package/dist/chunk-ERAHK5YQ.js.map +0 -1
- package/dist/chunk-F3FOFY2P.js +0 -124
- package/dist/chunk-F3FOFY2P.js.map +0 -1
- package/dist/chunk-F6BTWFOC.js +0 -507
- package/dist/chunk-F6BTWFOC.js.map +0 -1
- package/dist/chunk-F6J6NNAL.js +0 -34
- package/dist/chunk-F6J6NNAL.js.map +0 -1
- package/dist/chunk-FCHJ7D5O.js +0 -59
- package/dist/chunk-FCHJ7D5O.js.map +0 -1
- package/dist/chunk-FFJTEQCC.js +0 -80
- package/dist/chunk-FFJTEQCC.js.map +0 -1
- package/dist/chunk-FUFMVW7O.js +0 -64
- package/dist/chunk-FUFMVW7O.js.map +0 -1
- package/dist/chunk-FVPGQ6UE.js +0 -25
- package/dist/chunk-FVPGQ6UE.js.map +0 -1
- package/dist/chunk-G3PMV62Z.js +0 -33
- package/dist/chunk-G3PMV62Z.js.map +0 -1
- package/dist/chunk-GACFOW3E.js +0 -51
- package/dist/chunk-GACFOW3E.js.map +0 -1
- package/dist/chunk-GDT6HQMK.js +0 -42
- package/dist/chunk-GDT6HQMK.js.map +0 -1
- package/dist/chunk-HLGU22C6.js +0 -2589
- package/dist/chunk-HLGU22C6.js.map +0 -1
- package/dist/chunk-HPMYYGP7.js +0 -134
- package/dist/chunk-HPMYYGP7.js.map +0 -1
- package/dist/chunk-I2UCOD45.js +0 -197
- package/dist/chunk-I2UCOD45.js.map +0 -1
- package/dist/chunk-IEGDZUVM.js +0 -75
- package/dist/chunk-IEGDZUVM.js.map +0 -1
- package/dist/chunk-IIS7INHF.js +0 -47
- package/dist/chunk-IIS7INHF.js.map +0 -1
- package/dist/chunk-ITELSEFU.js +0 -256
- package/dist/chunk-ITELSEFU.js.map +0 -1
- package/dist/chunk-IXAYNBOY.js +0 -407
- package/dist/chunk-IXAYNBOY.js.map +0 -1
- package/dist/chunk-JUW2ETEI.js +0 -191
- package/dist/chunk-JUW2ETEI.js.map +0 -1
- package/dist/chunk-K65C7CVE.js +0 -127
- package/dist/chunk-K65C7CVE.js.map +0 -1
- package/dist/chunk-KDI64MCY.js +0 -189
- package/dist/chunk-KDI64MCY.js.map +0 -1
- package/dist/chunk-KN4ASMH5.js +0 -160
- package/dist/chunk-KN4ASMH5.js.map +0 -1
- package/dist/chunk-KQW7QNTU.js +0 -1549
- package/dist/chunk-KQW7QNTU.js.map +0 -1
- package/dist/chunk-KR7NXXHC.js +0 -66
- package/dist/chunk-KR7NXXHC.js.map +0 -1
- package/dist/chunk-KRZKIVMA.js +0 -142
- package/dist/chunk-KRZKIVMA.js.map +0 -1
- package/dist/chunk-KTTLLKGQ.js +0 -185
- package/dist/chunk-KTTLLKGQ.js.map +0 -1
- package/dist/chunk-KWKSHPDP.js +0 -234
- package/dist/chunk-KWKSHPDP.js.map +0 -1
- package/dist/chunk-KZVC7OYG.js +0 -57
- package/dist/chunk-KZVC7OYG.js.map +0 -1
- package/dist/chunk-L5DHUN2V.js +0 -204
- package/dist/chunk-L5DHUN2V.js.map +0 -1
- package/dist/chunk-LCTGEH57.js +0 -1376
- package/dist/chunk-LCTGEH57.js.map +0 -1
- package/dist/chunk-LXLIQ2D6.js +0 -12
- package/dist/chunk-LXLIQ2D6.js.map +0 -1
- package/dist/chunk-M4CTURKX.js +0 -84
- package/dist/chunk-M4CTURKX.js.map +0 -1
- package/dist/chunk-M6LTUPVP.js +0 -301
- package/dist/chunk-M6LTUPVP.js.map +0 -1
- package/dist/chunk-MA6RRHDT.js +0 -291
- package/dist/chunk-MA6RRHDT.js.map +0 -1
- package/dist/chunk-MODE4QIA.js +0 -6
- package/dist/chunk-MODE4QIA.js.map +0 -1
- package/dist/chunk-MVILMVGG.js +0 -118
- package/dist/chunk-MVILMVGG.js.map +0 -1
- package/dist/chunk-MWS4VCLV.js +0 -17
- package/dist/chunk-MWS4VCLV.js.map +0 -1
- package/dist/chunk-NEUX74SO.js +0 -315
- package/dist/chunk-NEUX74SO.js.map +0 -1
- package/dist/chunk-NFHKYBRD.js +0 -156
- package/dist/chunk-NFHKYBRD.js.map +0 -1
- package/dist/chunk-NHJNNXD3.js +0 -89
- package/dist/chunk-NHJNNXD3.js.map +0 -1
- package/dist/chunk-O2BF3HZL.js +0 -33
- package/dist/chunk-O2BF3HZL.js.map +0 -1
- package/dist/chunk-OANXCZYD.js +0 -212
- package/dist/chunk-OANXCZYD.js.map +0 -1
- package/dist/chunk-ODJF7YIP.js +0 -230
- package/dist/chunk-ODJF7YIP.js.map +0 -1
- package/dist/chunk-ON4BJTHI.js +0 -101
- package/dist/chunk-ON4BJTHI.js.map +0 -1
- package/dist/chunk-OTL5WXIJ.js +0 -16
- package/dist/chunk-OTL5WXIJ.js.map +0 -1
- package/dist/chunk-PACNBKJV.js +0 -47
- package/dist/chunk-PACNBKJV.js.map +0 -1
- package/dist/chunk-PROCA7K7.js +0 -23
- package/dist/chunk-PROCA7K7.js.map +0 -1
- package/dist/chunk-QGMIPA67.js +0 -85
- package/dist/chunk-QGMIPA67.js.map +0 -1
- package/dist/chunk-QQA37LFB.js +0 -190
- package/dist/chunk-QQA37LFB.js.map +0 -1
- package/dist/chunk-QZAWRSEB.js +0 -61
- package/dist/chunk-QZAWRSEB.js.map +0 -1
- package/dist/chunk-R74KGWNS.js +0 -699
- package/dist/chunk-R74KGWNS.js.map +0 -1
- package/dist/chunk-RFDLHMKL.js +0 -110
- package/dist/chunk-RFDLHMKL.js.map +0 -1
- package/dist/chunk-RL64HN7S.js +0 -40
- package/dist/chunk-RL64HN7S.js.map +0 -1
- package/dist/chunk-RMRQKPL7.js +0 -115
- package/dist/chunk-RMRQKPL7.js.map +0 -1
- package/dist/chunk-RQVK4IYC.js +0 -606
- package/dist/chunk-RQVK4IYC.js.map +0 -1
- package/dist/chunk-RTW56PWZ.js +0 -59
- package/dist/chunk-RTW56PWZ.js.map +0 -1
- package/dist/chunk-RUTPQNLR.js +0 -266
- package/dist/chunk-RUTPQNLR.js.map +0 -1
- package/dist/chunk-S6TAF63G.js +0 -25
- package/dist/chunk-S6TAF63G.js.map +0 -1
- package/dist/chunk-SBGAUGXY.js +0 -224
- package/dist/chunk-SBGAUGXY.js.map +0 -1
- package/dist/chunk-SC275NHZ.js +0 -407
- package/dist/chunk-SC275NHZ.js.map +0 -1
- package/dist/chunk-SCQPU4UE.js +0 -97
- package/dist/chunk-SCQPU4UE.js.map +0 -1
- package/dist/chunk-SFFF2WQP.js +0 -8
- package/dist/chunk-SFFF2WQP.js.map +0 -1
- package/dist/chunk-SJYMHZKA.js +0 -36
- package/dist/chunk-SJYMHZKA.js.map +0 -1
- package/dist/chunk-SLCCUJVN.js +0 -125
- package/dist/chunk-SLCCUJVN.js.map +0 -1
- package/dist/chunk-SVBSNSD4.js +0 -259
- package/dist/chunk-SVBSNSD4.js.map +0 -1
- package/dist/chunk-SVPLTL35.js +0 -62
- package/dist/chunk-SVPLTL35.js.map +0 -1
- package/dist/chunk-SWQFYNYG.js +0 -338
- package/dist/chunk-SWQFYNYG.js.map +0 -1
- package/dist/chunk-THHB4EWS.js +0 -72
- package/dist/chunk-THHB4EWS.js.map +0 -1
- package/dist/chunk-TUCDD33E.js +0 -246
- package/dist/chunk-TUCDD33E.js.map +0 -1
- package/dist/chunk-TV4WAP2R.js +0 -14
- package/dist/chunk-TV4WAP2R.js.map +0 -1
- package/dist/chunk-U3A6YBTZ.js +0 -134
- package/dist/chunk-U3A6YBTZ.js.map +0 -1
- package/dist/chunk-UGT6DKWM.js +0 -95
- package/dist/chunk-VSERHUWD.js +0 -212
- package/dist/chunk-VSERHUWD.js.map +0 -1
- package/dist/chunk-VYG7BDXC.js +0 -49
- package/dist/chunk-VYG7BDXC.js.map +0 -1
- package/dist/chunk-WETKNYZX.js +0 -52
- package/dist/chunk-WETKNYZX.js.map +0 -1
- package/dist/chunk-WGG4AML3.js +0 -216
- package/dist/chunk-WGG4AML3.js.map +0 -1
- package/dist/chunk-WKAUEL6I.js +0 -30
- package/dist/chunk-WKAUEL6I.js.map +0 -1
- package/dist/chunk-WPOLA5CG.js +0 -81
- package/dist/chunk-WPOLA5CG.js.map +0 -1
- package/dist/chunk-WPVETCGJ.js +0 -254
- package/dist/chunk-WPVETCGJ.js.map +0 -1
- package/dist/chunk-WTSM3A7E.js +0 -13
- package/dist/chunk-WTSM3A7E.js.map +0 -1
- package/dist/chunk-WU3F2K3T.js +0 -148
- package/dist/chunk-WU3F2K3T.js.map +0 -1
- package/dist/chunk-WZZK2DTZ.js +0 -39
- package/dist/chunk-WZZK2DTZ.js.map +0 -1
- package/dist/chunk-X4IHLKRD.js +0 -42
- package/dist/chunk-X4IHLKRD.js.map +0 -1
- package/dist/chunk-XAHEXZJC.js +0 -80
- package/dist/chunk-XAHEXZJC.js.map +0 -1
- package/dist/chunk-XCYGJDUX.js +0 -31
- package/dist/chunk-XCYGJDUX.js.map +0 -1
- package/dist/chunk-Y4W3JORC.js +0 -104
- package/dist/chunk-Y4W3JORC.js.map +0 -1
- package/dist/chunk-YFZJ3ZLG.js +0 -1297
- package/dist/chunk-YFZJ3ZLG.js.map +0 -1
- package/dist/chunk-YI3WLXEN.js +0 -4387
- package/dist/chunk-YI3WLXEN.js.map +0 -1
- package/dist/chunk-ZBKFSPD3.js +0 -29
- package/dist/chunk-ZBKFSPD3.js.map +0 -1
- package/dist/chunk-ZOERRQ6A.js +0 -79
- package/dist/chunk-ZOERRQ6A.js.map +0 -1
- package/dist/chunk-ZSTGUKHU.js +0 -10
- package/dist/chunk-ZSTGUKHU.js.map +0 -1
- package/dist/chunk-ZUEHDL27.js +0 -65
- package/dist/chunk-ZUEHDL27.js.map +0 -1
- package/dist/constants-D3gaMY-W.d.ts +0 -39
- package/dist/icons.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal/blocks/AIKit.js.map +0 -1
- package/dist/internal/blocks/AppShell.js.map +0 -1
- package/dist/internal/blocks/AutoSaveTextarea.js.map +0 -1
- package/dist/internal/blocks/BrandEditor.js.map +0 -1
- package/dist/internal/blocks/ClipboardButton.js.map +0 -1
- package/dist/internal/blocks/ColorInput.js.map +0 -1
- package/dist/internal/blocks/ColorModeSwitch.js.map +0 -1
- package/dist/internal/blocks/Command.js.map +0 -1
- package/dist/internal/blocks/CopyField.js.map +0 -1
- package/dist/internal/blocks/DateInput.js.map +0 -1
- package/dist/internal/blocks/DateRangeInput.js.map +0 -1
- package/dist/internal/blocks/Form.js.map +0 -1
- package/dist/internal/blocks/FormGroup.js.map +0 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js.map +0 -1
- package/dist/internal/blocks/OtpInput.js.map +0 -1
- package/dist/internal/blocks/PageHeader.js.map +0 -1
- package/dist/internal/blocks/PageLayout.js.map +0 -1
- package/dist/internal/blocks/PageToolbar.js.map +0 -1
- package/dist/internal/blocks/SearchInput.js.map +0 -1
- package/dist/internal/blocks/SectionNav.js.map +0 -1
- package/dist/internal/blocks/TextInput.js.map +0 -1
- package/dist/internal/components/Alert.js.map +0 -1
- package/dist/internal/components/AlertModal.js.map +0 -1
- package/dist/internal/components/Badge.js.map +0 -1
- package/dist/internal/components/BrandLogo.js.map +0 -1
- package/dist/internal/components/Breadcrumb.js.map +0 -1
- package/dist/internal/components/Button.js.map +0 -1
- package/dist/internal/components/Calendar.js.map +0 -1
- package/dist/internal/components/Card.js.map +0 -1
- package/dist/internal/components/Checkbox.js.map +0 -1
- package/dist/internal/components/Clipboard.js.map +0 -1
- package/dist/internal/components/Collapsible.js.map +0 -1
- package/dist/internal/components/Combobox.js.map +0 -1
- package/dist/internal/components/DatePicker.js.map +0 -1
- package/dist/internal/components/DateRangePicker.js.map +0 -1
- package/dist/internal/components/DiffView.js.map +0 -1
- package/dist/internal/components/DropdownMenu.js.map +0 -1
- package/dist/internal/components/FileUpload.js.map +0 -1
- package/dist/internal/components/FullScreenModal.js.map +0 -1
- package/dist/internal/components/HoverCard.js.map +0 -1
- package/dist/internal/components/InputGroup.js.map +0 -1
- package/dist/internal/components/Kbd.js.map +0 -1
- package/dist/internal/components/MarkedText.js.map +0 -1
- package/dist/internal/components/MergeEditor/useMergeDiff.js.map +0 -1
- package/dist/internal/components/Modal.js.map +0 -1
- package/dist/internal/components/Navbar.js.map +0 -1
- package/dist/internal/components/Pagination.js.map +0 -1
- package/dist/internal/components/Popconfirm.js.map +0 -1
- package/dist/internal/components/Popover.js.map +0 -1
- package/dist/internal/components/RadioGroup.js.map +0 -1
- package/dist/internal/components/Resizable.js.map +0 -1
- package/dist/internal/components/Search.js.map +0 -1
- package/dist/internal/components/Select.js.map +0 -1
- package/dist/internal/components/Sheet.js.map +0 -1
- package/dist/internal/components/Sidebar.js.map +0 -1
- package/dist/internal/components/Slider.js.map +0 -1
- package/dist/internal/components/Stepper.js.map +0 -1
- package/dist/internal/components/Switch.js.map +0 -1
- package/dist/internal/components/Table.js.map +0 -1
- package/dist/internal/components/Tabs.js.map +0 -1
- package/dist/internal/components/ThemeProvider.js.map +0 -1
- package/dist/internal/components/TimePicker.js.map +0 -1
- package/dist/internal/components/Timeline.js.map +0 -1
- package/dist/internal/components/Toast.js.map +0 -1
- package/dist/internal/components/ToggleGroup.js.map +0 -1
- package/dist/internal/components/Tooltip.js.map +0 -1
- package/dist/internal/components/Workbench.js.map +0 -1
- package/dist/internal/components/ZoomableSvg.js.map +0 -1
- package/dist/internal/utils.js.map +0 -1
- package/dist/mermaid.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar-Dcb4rinA.js","names":[],"sources":["../src/components/Sidebar/SidebarProvider/useTransitionPresence.ts","../src/components/Sidebar/SidebarContent.tsx","../src/components/Sidebar/utils.ts","../src/components/Sidebar/SidebarProvider/context.ts","../src/components/Sidebar/SidebarProvider/useHoverTracking.ts","../src/components/Sidebar/SidebarProvider/useSidebarState.ts","../src/components/Sidebar/SidebarProvider/SidebarProvider.tsx","../src/components/Sidebar/SidebarFillTrigger.tsx","../src/components/Sidebar/SidebarFooter.tsx","../src/components/Sidebar/SidebarGroup/SidebarGroup.tsx","../src/components/Sidebar/SidebarGroup/SidebarGroupContent.tsx","../src/components/Sidebar/SidebarGroup/SidebarGroupAction.tsx","../src/components/Sidebar/SidebarGroup/SidebarGroupLabel.tsx","../src/components/Sidebar/SidebarInstanceContext.ts","../src/components/Sidebar/SidebarHeader.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenu.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuIcon.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuButton.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuItem.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuAction.tsx","../src/components/Sidebar/SidebarMenu/SidebarSearchInput.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuCard.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuBadge.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuSub.tsx","../src/components/Sidebar/SidebarMenu/SidebarMenuSubItem.tsx","../src/components/Sidebar/useResizeSidebar.ts","../src/components/Sidebar/SidebarResizeHandle.tsx","../src/components/Sidebar/SidebarSeparator.tsx","../src/components/Sidebar/SidebarTrigger.tsx","../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useMemo, useReducer } from 'react';\n\ntype MountState = 'mounted' | 'unmountSuspended' | 'unmounted';\ntype MountEvent = 'MOUNT' | 'TRANSITION_OUT' | 'TRANSITION_END';\n\ntype UseTransitionPresenceOptions = {\n mounted: boolean;\n keepMounted?: boolean;\n};\n\nconst FALLBACK_TIMEOUT_MS = 500;\n\nconst reducer = (state: MountState, event: MountEvent): MountState => {\n switch (event) {\n case 'MOUNT':\n return 'mounted';\n case 'TRANSITION_OUT':\n return state === 'mounted' ? 'unmountSuspended' : state;\n case 'TRANSITION_END':\n return state === 'unmountSuspended' ? 'unmounted' : state;\n default:\n return state;\n }\n};\n\nexport const useTransitionPresence = ({\n mounted,\n keepMounted = false,\n}: UseTransitionPresenceOptions) => {\n const [state, send] = useReducer(reducer, mounted ? 'mounted' : 'unmounted');\n\n useLayoutEffect(() => {\n if (keepMounted) return;\n mounted ? send('MOUNT') : send('TRANSITION_OUT');\n }, [mounted, keepMounted]);\n\n // Fallback: complete unmount if onTransitionEnd never fires\n // (e.g. prefers-reduced-motion, interrupted or missing transitions)\n useEffect(() => {\n if (state !== 'unmountSuspended') return;\n\n const id = setTimeout(() => send('TRANSITION_END'), FALLBACK_TIMEOUT_MS);\n return () => clearTimeout(id);\n }, [state]);\n\n return useMemo(\n () => ({\n isMounted: keepMounted || state !== 'unmounted',\n completeUnmount: () => send('TRANSITION_END'),\n }),\n [state, keepMounted],\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { useScrollbarPosition } from '../../hooks/useScrollbarPosition';\nimport { cn, mergeRefs } from '../../utils';\nimport { ScrollArea } from '../ScrollArea';\n\ntype Props = {\n className?: string;\n children?: ReactNode;\n contentRef?: ComponentProps<'div'>['ref'];\n ref?: ComponentProps<'div'>['ref'];\n};\n\nexport const SidebarContent = ({ ref, className, children, contentRef }: Props) => {\n const { setElement, isBottom, isTop, isMiddle } = useScrollbarPosition();\n const mergedRefs = mergeRefs(ref ?? null, (ref) => setElement(ref));\n\n return (\n <ScrollArea\n ref={mergedRefs}\n type=\"scroll\"\n className=\"tw:group/sidebar-content tw:flex-1\"\n data-slot=\"sidebar-content\"\n scrollBarClassName=\"tw:w-1.5\"\n viewPortClassName={cn(\n 'tw:overflow-x-hidden',\n 'tw:overscroll-contain',\n 'tw:[&>div]:!flex', // overflow fix for scrollbar\n // Hide scroll-position-based borders (top/bottom) if SidebarHeader or SidebarFooter is omitted.\n 'tw:group-first/sidebar-content:before:hidden',\n 'tw:group-last/sidebar-content:after:hidden',\n 'tw:!box-border',\n {\n 'tw:before:absolute tw:before:top-0 tw:before:left-0 tw:before:right-0 tw:before:h-px tw:before:bg-sidebar-border tw:before:z-10 tw:before:content-[\"\"]':\n isBottom || isMiddle,\n 'tw:after:absolute tw:after:bottom-0 tw:after:left-0 tw:after:right-0 tw:after:h-px tw:after:bg-sidebar-border tw:after:z-10 tw:after:content-[\"\"]':\n isTop || isMiddle,\n },\n )}\n >\n <div\n ref={contentRef}\n className={cn(\n 'tw:flex',\n 'tw:flex-1',\n 'tw:flex-col',\n 'tw:gap-1',\n 'tw:overflow-x-hidden',\n 'tw:p-2',\n className,\n )}\n >\n {children}\n </div>\n </ScrollArea>\n );\n};\n","import type { SidebarCollapsible, SidebarMode, SidebarState, SidebarVariant } from './types';\n\nexport const SidebarWidthInPx = {\n MIN_DEFAULT: 256,\n\n // 8 px / 36 px / 8 px = 52 px\n // left padding / icon width / right padding\n COLLAPSED_ICON: 52,\n\n // padding from every side for floating variant (see --sidebar-floating-padding)\n FLOATING_VARIANT_PADDING: 8,\n} as const;\n\nconst floatingSideCount: Record<SidebarVariant, number> = {\n 'sided-floating': 1,\n floating: 2,\n inset: 0,\n none: 0,\n};\n\ntype Input = {\n variant: SidebarVariant;\n width?: number;\n collapsible: SidebarCollapsible;\n mode: SidebarMode;\n state: SidebarState;\n};\n\ntype EffectiveWidths = {\n sidebar: number;\n gap: number;\n fill: number;\n};\n\nexport const calcEffectiveWidths = ({\n variant,\n width: customWidth,\n collapsible,\n state,\n mode,\n}: Input) => {\n if (variant === 'none') return { sidebar: 0, gap: 0, fill: 0 };\n\n const padding = floatingSideCount[variant] * SidebarWidthInPx.FLOATING_VARIANT_PADDING;\n const width = Math.max(customWidth ?? 0, SidebarWidthInPx.MIN_DEFAULT) + padding;\n const iconWidth = SidebarWidthInPx.COLLAPSED_ICON + padding;\n const isExpanded = state === 'expanded';\n\n // Only compensate for floating padding when this sidebar itself has padding,\n // so the opposite filled sidebar doesn't double-count the gap.\n const reduction = variant === 'inset' ? 0 : SidebarWidthInPx.FLOATING_VARIANT_PADDING;\n\n const iconWidths = ((): EffectiveWidths => {\n const sidebar = isExpanded ? width : iconWidth;\n const gap = mode === 'expand-on-hover' ? iconWidth : sidebar;\n // Use gap (not sidebar) so the opposite filled sidebar stays stable\n // during expand-on-hover — gap stays at iconWidth while sidebar grows\n const fill = gap - reduction;\n return { sidebar, gap, fill };\n })();\n\n const offCanvasWidths = ((): EffectiveWidths => {\n const sidebar = width; //We use CSS translate to hide elements because it allows for transitions without shrinking the width.\n const gap = isExpanded ? width : SidebarWidthInPx.FLOATING_VARIANT_PADDING; // The gap is invisible and needs to be shrunk to move the content to its place.\n const fill = gap - reduction;\n return { sidebar, gap, fill };\n })();\n\n return collapsible === 'icon' ? iconWidths : offCanvasWidths;\n};\n","import { createContext, use } from 'react';\n\nimport type { SidebarCollapsible, SidebarSide, SidebarVariant } from '../types';\nimport type { calcEffectiveWidths } from '../utils';\n\nimport type { useSidebarState } from './useSidebarState';\n\ntype SidebarWidths = ReturnType<typeof calcEffectiveWidths>;\ntype SidebarState = ReturnType<typeof useSidebarState>;\n\ntype SidebarSideValue = SidebarState & {\n isFill: boolean;\n toggleFill: () => void;\n widths: SidebarWidths;\n collapsible: SidebarCollapsible;\n variant: SidebarVariant;\n baseWidth: number | undefined;\n onWidthChange: ((width: number) => void) | undefined;\n setDragWidth: (width: number | null) => void;\n isDragging: boolean;\n setIsDragging: (dragging: boolean) => void;\n};\n\nexport type SidebarContextValue = {\n left: SidebarSideValue;\n right: SidebarSideValue;\n};\n\nexport const SidebarContext = createContext<SidebarContextValue | null>(null);\n\n/**\n * The sidebar if there is one, `null` otherwise — for code that ENHANCES a page when the app shell is\n * around it (borrowing width, collapsing a panel) and must still render without one, in a test, a\n * story, or an embedded surface. Anything that genuinely requires a sidebar keeps `useSidebar`.\n */\nexport const useOptionalSidebar = (side: SidebarSide = 'left'): SidebarSideValue | null =>\n use(SidebarContext)?.[side] ?? null;\n\nexport const useSidebar = (side: SidebarSide = 'left'): SidebarSideValue => {\n const context = use(SidebarContext);\n if (context === null) throw new Error('useSidebar must be used within a SidebarProvider.');\n return context[side];\n};\n","import { useEffect, useRef, useState } from 'react';\n\n/**\n * CSS selectors matching portal-based overlay triggers in their open state.\n *\n * The sidebar's hover tracking ignores `mouseleave` while any of these selectors\n * match inside the sidebar DOM — preventing the sidebar from collapsing while the\n * user interacts with portal content rendered outside the sidebar tree.\n *\n * Update this list when changing or adding new components:\n */\nconst PORTAL_OPEN_SELECTORS = [\n '[aria-haspopup=\"menu\"][aria-expanded=true]', // DropdownMenu\n '[aria-haspopup=\"dialog\"][aria-expanded=true]', // Popover, Dialogs (Modal, Sheet)\n];\n\nconst PORTAL_OPEN_SELECTORS_STRING = PORTAL_OPEN_SELECTORS.join(',');\n\nexport const useHoverTracking = (sidebarElement: HTMLElement | null) => {\n const [isHovered, setIsHovered] = useState(false);\n const isLockedRef = useRef(false);\n\n useEffect(() => {\n if (!sidebarElement) return;\n\n const handleMouseEnter = () => setIsHovered(true);\n const handleMouseLeave = () => {\n if (isLockedRef.current) return;\n setIsHovered(false);\n };\n\n sidebarElement.addEventListener('mouseenter', handleMouseEnter);\n sidebarElement.addEventListener('mouseleave', handleMouseLeave);\n\n return () => {\n sidebarElement.removeEventListener('mouseenter', handleMouseEnter);\n sidebarElement.removeEventListener('mouseleave', handleMouseLeave);\n };\n }, [sidebarElement]);\n\n useEffect(() => {\n if (!sidebarElement) return;\n let animationFrameId: number;\n\n const observer = new MutationObserver(() => {\n const hasOpenPortal = sidebarElement.querySelector(PORTAL_OPEN_SELECTORS_STRING) !== null;\n isLockedRef.current = hasOpenPortal;\n\n if (hasOpenPortal) return;\n\n animationFrameId = requestAnimationFrame(() => {\n setIsHovered(sidebarElement.matches(':hover'));\n });\n });\n\n // Sync lock state immediately in case a portal trigger is already open on mount.\n isLockedRef.current = sidebarElement.querySelector(PORTAL_OPEN_SELECTORS_STRING) !== null;\n\n observer.observe(sidebarElement, {\n attributes: true,\n attributeFilter: ['aria-expanded'],\n subtree: true,\n });\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n observer.disconnect();\n };\n }, [sidebarElement]);\n\n return isHovered;\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useElement } from '../../../hooks/useElement';\nimport type { SidebarMode, SidebarState } from '../types';\n\nimport { useHoverTracking } from './useHoverTracking';\n\ntype Props = {\n defaultMode?: SidebarMode;\n mode?: SidebarMode;\n onModeChange?: (state: SidebarMode) => void;\n};\n\nexport const useSidebarState = ({ defaultMode, mode: modeProp, onModeChange }: Props) => {\n const [sidebarElement, setSidebarElement] = useElement();\n const isHovered = useHoverTracking(sidebarElement);\n const [_mode, _setMode] = useState(defaultMode ?? 'expanded');\n const mode = modeProp ?? _mode;\n\n const setMode = useCallback(\n (dispatch: Parameters<typeof _setMode>[0]) => {\n const newState = typeof dispatch === 'function' ? dispatch(mode) : dispatch;\n const set = onModeChange ?? _setMode;\n set(newState);\n },\n [onModeChange, mode],\n );\n\n const toggle = useCallback(() => {\n setMode((currState) => (currState === 'expanded' ? 'collapsed' : 'expanded'));\n }, [setMode]);\n\n const state: SidebarState = (() => {\n if (mode === 'expand-on-hover') return isHovered ? 'expanded' : 'collapsed';\n return mode;\n })();\n\n return useMemo(\n () => ({\n isHovered,\n toggle,\n setMode,\n mode,\n state,\n sidebarElement,\n setSidebarElement,\n }),\n [isHovered, toggle, setMode, mode, state, sidebarElement, setSidebarElement],\n );\n};\n","import { type ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport type { SidebarCollapsible, SidebarMode, SidebarSide, SidebarVariant } from '../types';\nimport { calcEffectiveWidths } from '../utils';\n\nimport type { SidebarContextValue } from './context';\nimport { SidebarContext } from './context';\nimport { useSidebarState } from './useSidebarState';\n\nconst DEFAULT_SIDEBAR_VARIANT: SidebarVariant = 'none';\nconst DEFAULT_SIDEBAR_MODE: SidebarMode = 'expanded';\nconst DEFAULT_SIDEBAR_COLLAPSIBLE: SidebarCollapsible = 'off-canvas';\n\ntype Props = {\n children?: ReactNode;\n // left state\n defaultLeftMode?: SidebarMode;\n leftMode?: SidebarMode;\n onLeftModeChange?: (mode: SidebarMode) => void;\n\n // right state\n defaultRightMode?: SidebarMode;\n rightMode?: SidebarMode;\n onRightModeChange?: (mode: SidebarMode) => void;\n\n // left\n leftVariant?: SidebarVariant;\n leftWidth?: number;\n leftCollapsible?: SidebarCollapsible;\n\n // right\n rightVariant?: SidebarVariant;\n rightWidth?: number;\n rightCollapsible?: SidebarCollapsible;\n\n // width change callbacks\n onLeftWidthChange?: (width: number) => void;\n onRightWidthChange?: (width: number) => void;\n\n // fill\n defaultFilledSide?: SidebarSide | null;\n};\n\nexport const SidebarProvider = ({\n children,\n // left state\n defaultLeftMode = DEFAULT_SIDEBAR_MODE,\n leftMode,\n onLeftModeChange,\n\n // right state\n defaultRightMode = DEFAULT_SIDEBAR_MODE,\n rightMode,\n onRightModeChange,\n\n // left\n leftCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE,\n leftVariant = DEFAULT_SIDEBAR_VARIANT,\n leftWidth,\n\n // right\n rightCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE,\n rightVariant = DEFAULT_SIDEBAR_VARIANT,\n rightWidth,\n\n // width change callbacks\n onLeftWidthChange,\n onRightWidthChange,\n\n // fill\n defaultFilledSide = null,\n}: Props) => {\n const [filledSide, setFilledSide] = useState<SidebarSide | null>(defaultFilledSide);\n const [isLeftDragging, setIsLeftDragging] = useState(false);\n const [isRightDragging, setIsRightDragging] = useState(false);\n const [leftDragWidth, setLeftDragWidth] = useState<number | null>(null);\n const [rightDragWidth, setRightDragWidth] = useState<number | null>(null);\n\n // Clear the local drag override the moment it matches the controlled width, so a\n // later width prop change isn't masked by a stale override (`baseWidth` is\n // `dragWidth ?? width`). Done during render rather than in an effect: it\n // converges (the override becomes null, so it can't loop) and triggers on a\n // change to either the prop or the drag width — matching the original effect,\n // whose dependency array also watched the drag width.\n if (leftDragWidth !== null && leftWidth === leftDragWidth) setLeftDragWidth(null);\n if (rightDragWidth !== null && rightWidth === rightDragWidth) setRightDragWidth(null);\n\n const leftState = useSidebarState({\n defaultMode: defaultLeftMode,\n mode: leftMode,\n onModeChange: onLeftModeChange,\n });\n\n const rightState = useSidebarState({\n defaultMode: defaultRightMode,\n mode: rightMode,\n onModeChange: onRightModeChange,\n });\n\n const toggleLeftFill = useCallback(\n () => setFilledSide((prev) => (prev === 'left' ? null : 'left')),\n [],\n );\n const toggleRightFill = useCallback(\n () => setFilledSide((prev) => (prev === 'right' ? null : 'right')),\n [],\n );\n\n const value = useMemo<SidebarContextValue>(\n () => ({\n left: {\n ...leftState,\n isFill: filledSide === 'left',\n toggleFill: toggleLeftFill,\n widths: calcEffectiveWidths({\n variant: leftVariant,\n width: leftDragWidth ?? leftWidth,\n collapsible: leftCollapsible,\n state: leftState.state,\n mode: leftState.mode,\n }),\n collapsible: leftCollapsible,\n variant: leftVariant,\n baseWidth: leftDragWidth ?? leftWidth,\n onWidthChange: onLeftWidthChange,\n setDragWidth: setLeftDragWidth,\n isDragging: isLeftDragging,\n setIsDragging: setIsLeftDragging,\n },\n right: {\n ...rightState,\n isFill: filledSide === 'right',\n toggleFill: toggleRightFill,\n widths: calcEffectiveWidths({\n variant: rightVariant,\n width: rightDragWidth ?? rightWidth,\n collapsible: rightCollapsible,\n state: rightState.state,\n mode: rightState.mode,\n }),\n collapsible: rightCollapsible,\n variant: rightVariant,\n baseWidth: rightDragWidth ?? rightWidth,\n onWidthChange: onRightWidthChange,\n setDragWidth: setRightDragWidth,\n isDragging: isRightDragging,\n setIsDragging: setIsRightDragging,\n },\n }),\n [\n leftState,\n filledSide,\n toggleLeftFill,\n leftVariant,\n leftWidth,\n leftDragWidth,\n leftCollapsible,\n onLeftWidthChange,\n isLeftDragging,\n rightState,\n toggleRightFill,\n rightVariant,\n rightWidth,\n rightDragWidth,\n rightCollapsible,\n onRightWidthChange,\n isRightDragging,\n ],\n );\n\n return <SidebarContext value={value}>{children}</SidebarContext>;\n};\n","import type { ComponentProps, MouseEventHandler } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { useSidebar } from './SidebarProvider';\nimport type { SidebarSide } from './types';\n\ntype Props = ComponentProps<typeof Slot> & {\n side?: SidebarSide;\n};\n\nexport const SidebarFillTrigger = ({ ref, side = 'left', onClick, ...rest }: Props) => {\n const { toggleFill, isFill } = useSidebar(side);\n\n const handleOnClick: MouseEventHandler<HTMLElement> = (event) => {\n toggleFill();\n onClick?.(event);\n };\n\n return <Slot {...rest} ref={ref} onClick={handleOnClick} aria-selected={isFill} />;\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const SidebarFooter = ({ className, ...props }: Props) => (\n <div\n data-slot=\"sidebar-footer\"\n className={cn('tw:flex', 'tw:flex-col', 'tw:gap-2', 'tw:p-2', className)}\n {...props}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const SidebarGroup = ({ className, ...props }: Props) => (\n <div\n className={cn(\n 'tw:group/sidebar-group',\n 'tw:relative',\n 'tw:w-full',\n\n // positioning\n 'tw:flex',\n 'tw:flex-col',\n 'tw:min-w-0',\n 'tw:rounded-lg',\n className,\n )}\n {...props}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const SidebarGroupContent = ({ className, ...props }: Props) => (\n <div\n className={cn(\n // positioning\n 'tw:flex',\n 'tw:flex-col',\n 'tw:gap-2',\n\n 'tw:w-full',\n className,\n )}\n {...props}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'button'>;\n\nexport const SidebarGroupAction = ({\n ref,\n className,\n type = 'button',\n children,\n ...props\n}: Props) => (\n <button\n {...props}\n type={type}\n ref={ref}\n className={cn(\n 'tw:group-data-[state=collapsed]/sidebar:hidden',\n\n // positioning\n 'tw:absolute',\n 'tw:right-1.5',\n 'tw:top-2',\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n\n // sizing\n 'tw:size-5',\n\n // styles\n 'tw:text-neutral-800',\n 'tw:rounded-full',\n\n // svg defaults: size + colour\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-3',\n 'tw:[&_svg]:text-neutral-400',\n 'tw:hover:[&_svg]:text-secondary-600',\n\n 'tw:hover:bg-neutral-100',\n\n 'tw:focus-visible:ring-4',\n 'tw:focus-visible:ring-ring/30',\n 'tw:focus-visible:outline',\n 'tw:focus-visible:outline-1',\n 'tw:focus-visible:outline-ring',\n className,\n )}\n >\n {children}\n </button>\n);\n","import type { ComponentProps, Ref } from 'react';\n\nimport { cn } from '../../../utils';\nimport { Separator } from '../../Separator';\n\ntype Props = ComponentProps<'div'>;\n\nexport const SidebarGroupLabel = ({\n ref,\n className,\n children,\n ...props\n}: Props & { ref?: Ref<HTMLDivElement> }) => (\n <div\n ref={ref}\n className={cn(\n 'tw:relative',\n // positioning\n 'tw:flex',\n 'tw:flex-col',\n 'tw:shrink-0',\n\n // styling\n 'tw:h-8',\n 'tw:px-2',\n 'tw:-mb-1',\n 'tw:rounded-lg',\n\n // text\n 'tw:uppercase',\n 'tw:font-sans',\n 'tw:text-xs',\n 'tw:tracking-[1px]',\n className,\n )}\n {...props}\n >\n <Separator\n orientation=\"horizontal\"\n size=\"3/4\"\n className={cn(\n 'tw:opacity-0',\n 'tw:group-data-[state=collapsed]/sidebar:opacity-100',\n\n // positioning\n 'tw:absolute',\n 'tw:w-full',\n 'tw:left-0',\n 'tw:top-1/2 tw:-translate-y-1/2',\n\n 'tw:transition-opacity',\n 'tw:duration-200',\n 'tw:ease-linear',\n )}\n />\n\n <span\n className={cn(\n 'tw:flex',\n 'tw:group-data-[state=collapsed]/sidebar:opacity-0',\n\n 'tw:items-center',\n 'tw:flex-1',\n 'tw:text-muted-foreground',\n 'tw:whitespace-nowrap',\n\n // transition\n 'tw:transition-opacity',\n 'tw:duration-200',\n 'tw:ease-linear',\n )}\n >\n {children}\n </span>\n </div>\n);\n","import { createContext, use } from 'react';\n\nimport type { SidebarMode, SidebarSide, SidebarState } from './types';\n\ntype SidebarInstanceContextValue = {\n state: SidebarState;\n mode: SidebarMode;\n side: SidebarSide;\n};\n\nexport const SidebarInstanceContext = createContext<SidebarInstanceContextValue | null>(null);\n\nexport const useSidebarInstance = () => {\n const context = use(SidebarInstanceContext);\n if (context === null)\n throw new Error('useSidebarInstance must be used within a SidebarInstanceContext.');\n return context;\n};\n","import { type ComponentProps, use } from 'react';\n\nimport { cn } from '../../utils';\nimport { BrandLogo } from '../BrandLogo';\n\nimport { SidebarInstanceContext } from './SidebarInstanceContext';\n\ntype Props = ComponentProps<'div'>;\n\nexport const SidebarHeader = ({ className, children, ...props }: Props) => {\n const instance = use(SidebarInstanceContext);\n // BrandLogo reads the nearest ThemeProvider (or the default context) and renders\n // null when the active brand ships no logo, so no provider gate is needed.\n const variant = instance?.state === 'collapsed' ? 'mark' : 'wordmark';\n const fallback = <BrandLogo variant={variant} className=\"tw:h-7\" />;\n\n return (\n <div\n data-slot=\"sidebar-header\"\n className={cn(\n 'tw:peer/sidebar-header',\n 'tw:flex',\n 'tw:flex-col',\n 'tw:gap-2',\n 'tw:p-2',\n className,\n )}\n {...props}\n >\n {children ?? fallback}\n </div>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'ul'>;\n\nexport const SidebarMenu = ({ className, ...props }: Props) => (\n <ul\n data-sidebar=\"menu\"\n className={cn(\n 'tw:flex',\n 'tw:w-full',\n 'tw:min-w-0',\n 'tw:flex-col',\n 'tw:gap-1',\n\n // transition\n 'tw:transition-[margin,opacity]',\n 'tw:duration-200',\n 'tw:ease-linear',\n\n // TODO: remove when boostrap is gone\n 'tw:pl-0',\n className,\n )}\n {...props}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'span'>;\n\nexport const SidebarMenuIcon = ({ ref, className, children, ...rest }: Props) => (\n <span\n {...rest}\n ref={ref}\n className={cn(\n 'tw:inline-flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:aspect-square',\n 'tw:shrink-0',\n 'tw:p-0.5',\n 'tw:text-sidebar-primary',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n className,\n )}\n >\n {children}\n </span>\n);\n","import type { ComponentProps, ReactNode, Ref } from 'react';\nimport { Root, Slottable } from '@radix-ui/react-slot';\n\nimport { cn } from '../../../utils';\nimport { Tooltip } from '../../Tooltip';\nimport { useSidebarInstance } from '../SidebarInstanceContext';\n\nimport { SidebarMenuIcon } from './SidebarMenuIcon';\n\ntype Props = ComponentProps<'button'> & {\n asChild?: boolean;\n tooltip?: ReactNode;\n icon?: ReactNode;\n};\n\nexport const SidebarMenuButton = ({\n ref,\n 'aria-selected': selected,\n className,\n children,\n asChild = false,\n icon,\n tooltip,\n ...props\n}: Props & { ref?: Ref<HTMLButtonElement> }) => {\n const Component = asChild ? Root : 'button';\n const { state, mode, side } = useSidebarInstance();\n\n const button = (\n <Component\n {...props}\n ref={ref}\n data-slot=\"sidebar-menu-button\"\n // `type` and `aria-selected` belong to a real <button>. With `asChild` the slot is\n // usually an <a> (the canonical nav item), where both are invalid — axe flags\n // `aria-selected` on a link as a critical violation. Mark the active link with\n // `aria-current=\"page\"` instead; it is styled identically below. `aria-selected`\n // is still forwarded when a caller passes it explicitly.\n {...(asChild ? {} : { type: 'button' as const })}\n {...(selected === undefined ? {} : { 'aria-selected': selected })}\n className={cn(\n 'tw:peer/sidebar-menu-button',\n 'tw:group/sidebar-menu-button',\n\n // if <SidebarMenuAction /> visible, prevent the text from being under the action button.\n 'tw:group-data-[state=expanded]/sidebar:group-has-[[data-slot=sidebar-menu-action][data-hover-only=false]]/sidebar-menu-item:pr-8',\n 'tw:group-data-[state=expanded]/sidebar:[&:has(+[data-slot=\"sidebar-menu-action\"])]:group-hover/sidebar-menu-item:pr-8',\n 'tw:group-data-[state=expanded]/sidebar:[&:has(+[data-slot=\"sidebar-menu-action\"])]:group-focus-within/sidebar-menu-item:pr-8',\n 'tw:group-data-[state=expanded]/sidebar:[&:has(+[data-slot=\"sidebar-menu-action\"][data-hover-only=true][data-state=open])]:pr-8',\n\n 'tw:flex',\n 'tw:w-full',\n 'tw:gap-2',\n 'tw:items-center',\n 'tw:z-10',\n 'tw:font-normal',\n 'tw:text-sidebar-foreground',\n 'tw:p-2',\n 'tw:whitespace-nowrap',\n 'tw:overflow-hidden',\n 'tw:rounded-lg',\n 'tw:text-start',\n 'tw:no-underline',\n 'tw:select-none',\n\n // hover\n 'tw:hover:not-disabled:bg-sidebar-accent',\n 'tw:hover:text-sidebar-accent-foreground',\n 'tw:focus:text-sidebar-accent-foreground', // anchor override\n 'tw:data-[slot=dropdown-menu-trigger]:data-[state=open]:bg-sidebar-accent',\n\n // disabled\n 'tw:disabled:opacity-50',\n 'tw:disabled:cursor-not-allowed',\n\n // active\n 'tw:aria-selected:font-medium',\n 'tw:aria-selected:bg-sidebar-accent',\n 'tw:aria-selected:cursor-default',\n // active for links https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-current\n 'tw:aria-[current=page]:bg-sidebar-accent',\n 'tw:aria-[current=page]:font-medium',\n 'tw:aria-[current=page]:focus:text-sidebar-accent-foreground',\n\n // focus-visible\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:z-10',\n 'tw:focus-visible:ring-2',\n 'tw:focus-visible:ring-sidebar-ring/50',\n 'tw:focus-visible:text-sidebar-foreground', // anchor override\n className,\n )}\n // Explicitly set the tabIndex to 0 to ensure the button is focusable; in Safari, anchors are not focusable by default.\n tabIndex={0}\n >\n {icon && <SidebarMenuIcon>{icon}</SidebarMenuIcon>}\n <Slottable>{children}</Slottable>\n </Component>\n );\n\n const shouldShowTooltip = state === 'collapsed' && mode !== 'expand-on-hover' && tooltip;\n\n if (shouldShowTooltip) {\n const tooltipPlacement = side === 'right' ? 'left' : 'right';\n\n return (\n <Tooltip tooltip={tooltip} placement={tooltipPlacement} triggerAsChild>\n {button}\n </Tooltip>\n );\n }\n\n return button;\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'li'>;\n\nexport const SidebarMenuItem = ({ className, ...props }: Props) => (\n <li className={cn('tw:group/sidebar-menu-item', 'tw:relative', className)} {...props} />\n);\n","import type { ComponentProps } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n};\n\nexport const SidebarMenuAction = ({\n ref,\n className,\n asChild = false,\n showOnHover = false,\n children,\n ...props\n}: Props) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n {...props}\n data-slot=\"sidebar-menu-action\"\n data-hover-only={showOnHover}\n ref={ref}\n className={cn(\n 'tw:absolute',\n 'tw:top-1/2',\n 'tw:-translate-y-1/2',\n 'tw:right-3',\n 'tw:z-10',\n 'tw:p-0.5',\n\n // display\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:aspect-square',\n\n // hiding\n 'tw:data-[hover-only=true]:opacity-0',\n 'tw:group-data-[state=collapsed]/sidebar:hidden',\n\n 'tw:group-data-[state=expanded]/sidebar:group-hover/sidebar-menu-item:opacity-100',\n 'tw:group-data-[state=expanded]/sidebar:group-focus-within/sidebar-menu-item:opacity-100', // keyboard navigation\n\n 'tw:group-data-[state=expanded]/sidebar:data-[hover-only=true]:data-[state=open]:opacity-100', // for triggers (dropdown, tooltip, popover)\n\n 'tw:size-4',\n 'tw:rounded',\n\n // icon styling\n 'tw:[&_svg]:shrink-0',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-3.5',\n 'tw:[&_svg]:text-sidebar-accent-foreground',\n\n // focus visible\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:z-10',\n 'tw:focus-visible:ring-2',\n 'tw:focus-visible:ring-sidebar-ring/50',\n 'tw:focus-visible:text-sidebar-foreground',\n className,\n )}\n >\n {children}\n </Comp>\n );\n};\n","import { useRef } from 'react';\nimport type { ComponentProps } from 'react';\n\nimport { Search } from '../../../icons';\nimport { cn, mergeRefs } from '../../../utils';\nimport { useSidebarInstance } from '../SidebarInstanceContext';\nimport { useSidebar } from '../SidebarProvider';\n\nconst wrapperClassnames = cn(\n 'tw:group/search-input',\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:min-h-9',\n 'tw:rounded-lg',\n 'tw:border',\n 'tw:transition-all',\n\n // collapsed state - transparent border/bg, hover like search button\n 'tw:group-data-[state=collapsed]/sidebar:cursor-pointer',\n 'tw:group-data-[state=collapsed]/sidebar:border-transparent',\n 'tw:group-data-[state=collapsed]/sidebar:hover:bg-sidebar-accent',\n\n // expanded state - visible border/bg, padding for input, text cursor\n 'tw:group-data-[state=expanded]/sidebar:cursor-text',\n 'tw:group-data-[state=expanded]/sidebar:px-2',\n 'tw:group-data-[state=expanded]/sidebar:border-neutral-200',\n\n // focus styles (only relevant when expanded)\n 'tw:focus-within:ring-2',\n 'tw:focus-within:ring-sidebar-ring/50',\n 'tw:focus-within:text-sidebar-foreground',\n);\n\ntype Props = Omit<ComponentProps<'input'>, 'prefix'>;\n\nexport const SidebarSearchInput = ({ ref: forwardedRef, className, ...inputProps }: Props) => {\n const { side } = useSidebarInstance();\n const { setMode } = useSidebar(side);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleFocus = () => {\n setMode('expanded');\n };\n\n return (\n <div className={cn(wrapperClassnames, className)}>\n <Search\n className={cn(\n 'tw:pointer-events-none',\n 'tw:absolute',\n 'tw:left-2',\n 'tw:size-4',\n\n 'tw:text-sidebar-primary',\n 'tw:group-data-[state=expanded]/sidebar:text-neutral-400',\n )}\n />\n <input\n ref={mergeRefs(forwardedRef ?? null, inputRef)}\n {...inputProps}\n onFocus={(e) => {\n handleFocus();\n inputProps.onFocus?.(e);\n }}\n className={cn(\n 'tw:w-full',\n 'tw:bg-transparent',\n 'tw:text-sm',\n 'tw:font-sans',\n 'tw:outline-hidden',\n 'tw:placeholder:text-neutral-400',\n\n // collapsed state - visually hidden but still focusable for a11y\n 'tw:group-data-[state=collapsed]/sidebar:opacity-0',\n 'tw:group-data-[state=collapsed]/sidebar:cursor-pointer',\n\n // expanded state\n 'tw:group-data-[state=expanded]/sidebar:pl-6',\n )}\n />\n </div>\n );\n};\n","import { useCallback, useState } from 'react';\nimport type { ComponentProps, HTMLAttributes, ReactNode } from 'react';\n\nimport { cn } from '../../../utils';\nimport { HoverCard } from '../../HoverCard';\nimport { useSidebarInstance } from '../SidebarInstanceContext';\nimport { useSidebar } from '../SidebarProvider';\n\nimport { SidebarMenuIcon } from './SidebarMenuIcon';\n\nconst Title = ({ children }: { children: ReactNode }) => (\n <div className=\"tw:flex tw:select-none tw:gap-2 tw:text-sm tw:font-semibold\">{children}</div>\n);\n\nconst Content = ({ children, className }: { children: ReactNode; className?: string }) => (\n <div\n className={cn(\n 'tw:whitespace-pre-line',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:invisible',\n className,\n )}\n >\n {children}\n </div>\n);\n\ntype Props = HTMLAttributes<HTMLDivElement> & {\n icon: ReactNode;\n title: ReactNode;\n};\n\nexport const SidebarMenuCard = ({ children, className, icon, title, ...rest }: Props) => {\n const [isOpen, setIsOpen] = useState(false);\n const { side = 'left' } = useSidebarInstance();\n const { state, isFill } = useSidebar(side);\n const isExpanded = state === 'expanded' || isFill;\n\n const handleOnOpenChange: ComponentProps<typeof HoverCard>['onOpenChange'] = useCallback(\n (open: boolean) => {\n setIsOpen(isExpanded || document.hidden ? false : open);\n },\n [isExpanded],\n );\n\n return (\n <HoverCard open={isOpen} onOpenChange={handleOnOpenChange}>\n <HoverCard.Trigger asChild>\n <div\n {...rest}\n data-slot=\"sidebar-menu-card\"\n tabIndex={isExpanded ? -1 : 0}\n className={cn(\n 'tw:group/sidebar-menu-card',\n 'tw:peer/sidebar-menu-card',\n\n 'tw:overflow-hidden',\n\n 'tw:border',\n 'tw:border-sidebar-border',\n 'tw:rounded-2xl',\n\n // layout\n 'tw:grid',\n 'tw:grid-rows-[1fr]',\n 'tw:flex-1',\n 'tw:p-4',\n\n // icon collapsed\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:p-2',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:border-transparent',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:grid-rows-[18px]',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:rounded-md',\n\n // focus-visible\n 'tw:outline-hidden',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:hover:bg-sidebar-accent',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:focus-visible:ring-2',\n 'tw:group-data-[fill=false]/sidebar:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:focus-visible:ring-sidebar-ring/50',\n\n // transition\n 'tw:transition-[padding,border]',\n 'tw:duration-200',\n 'tw:ease-linear',\n )}\n >\n <div className=\"tw:flex tw:flex-col tw:gap-2\">\n <Title>\n <SidebarMenuIcon className=\"tw:p-px\">{icon}</SidebarMenuIcon>\n {title}\n </Title>\n <Content className={className}>{children}</Content>\n </div>\n </div>\n </HoverCard.Trigger>\n\n <HoverCard.Content\n sideOffset={10}\n align=\"center\"\n side={side === 'left' ? 'right' : 'left'}\n className=\"tw:flex tw:flex-col tw:gap-2\"\n >\n <Title>{title}</Title>\n <Content className={className}>{children}</Content>\n </HoverCard.Content>\n </HoverCard>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const SidebarMenuBadge = ({ ref, className, ...props }: Props) => {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n // layout\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:z-20',\n\n 'tw:absolute',\n\n // menu button position\n 'tw:peer-[]/sidebar-menu-button:right-2',\n // menu card position\n 'tw:peer-[]/sidebar-menu-card:right-4',\n 'tw:peer-[]/sidebar-menu-card:top-4',\n\n // icon collapsed position\n 'tw:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:right-0',\n 'tw:group-data-[state=collapsed]/sidebar:group-data-[collapsible=icon]/sidebar:-top-1',\n\n 'tw:text-xs',\n 'tw:text-sidebar-primary-foreground',\n 'tw:bg-sidebar-primary',\n 'tw:px-1',\n 'tw:min-w-5',\n 'tw:h-5',\n 'tw:rounded-full',\n 'tw:pointer-events-none',\n 'tw:font-medium',\n 'tw:tabular-nums',\n 'tw:select-none',\n\n 'tw:transition-[top,right]',\n 'tw:delay-50',\n 'tw:ease-linear',\n className,\n )}\n {...props}\n />\n );\n};\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { ChevronDown } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { Collapsible } from '../../Collapsible';\nimport { DropdownMenu } from '../../DropdownMenu';\nimport { Tooltip } from '../../Tooltip';\nimport { useSidebarInstance } from '../SidebarInstanceContext';\n\nimport { SidebarMenuButton } from './SidebarMenuButton';\n\ntype Props = {\n children: ReactNode;\n icon: ReactNode;\n isActive?: boolean;\n label: string;\n} & Pick<ComponentProps<typeof Collapsible>, 'defaultOpen' | 'open' | 'onOpenChange'>;\n\nexport const SidebarMenuSub = ({\n children,\n icon,\n isActive = false,\n label,\n\n // collapsible props\n defaultOpen = false,\n open: openProp,\n onOpenChange,\n}: Props) => {\n const { state, side, mode } = useSidebarInstance();\n const [open, setOpen] = useState<'open-tooltip' | 'open-dropdown-menu' | null>(null);\n const [innerCollapsibleOpen, setInnerCollapsibleOpen] = useState(defaultOpen);\n\n const isCollapsibleOpen = (() => {\n // In the collapsed sidebar state, it is always closed.\n if (state === 'collapsed') return false;\n return openProp ?? innerCollapsibleOpen;\n })();\n\n const isDropdownMenu = mode === 'expand-on-hover' || mode === 'collapsed';\n\n const handleCollapsibleOpenChange = (open: boolean) => {\n if (openProp === undefined) setInnerCollapsibleOpen(open);\n\n onOpenChange?.(open);\n };\n\n const handleDropdownOpenChange = (open: boolean) => {\n setOpen(open ? 'open-dropdown-menu' : null);\n };\n\n const handleTooltipOpenChange = (open: boolean) => {\n setOpen((currentOpen) => {\n // dropdown menu has higher priority than tooltip, if it's open, keep it open\n if (currentOpen === 'open-dropdown-menu') return 'open-dropdown-menu';\n // no need to show tooltip in expanded state, so return null\n if (state === 'expanded') return null;\n return open ? 'open-tooltip' : null;\n });\n };\n\n if (isDropdownMenu) {\n return (\n <DropdownMenu open={open === 'open-dropdown-menu'} onOpenChange={handleDropdownOpenChange}>\n <Tooltip.Root open={open === 'open-tooltip'} onOpenChange={handleTooltipOpenChange}>\n <Tooltip.Trigger asChild>\n <DropdownMenu.Trigger asChild>\n <SidebarMenuButton\n icon={icon}\n data-active={isActive}\n className={cn(\n 'tw:data-[active=true]:bg-sidebar-accent',\n 'tw:data-[active=true]:font-medium',\n )}\n >\n {label}\n </SidebarMenuButton>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <Tooltip.Content variant=\"action\" placement={side}>\n {label}\n </Tooltip.Content>\n </Tooltip.Root>\n\n <DropdownMenu.Content side={side} align=\"start\">\n <DropdownMenu.Label>{label}</DropdownMenu.Label>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n }\n\n return (\n <Collapsible open={isCollapsibleOpen} onOpenChange={handleCollapsibleOpenChange}>\n <Collapsible.Trigger asChild>\n <SidebarMenuButton\n icon={icon}\n data-active={isActive && !isCollapsibleOpen}\n className={cn(\n 'tw:group',\n 'tw:data-[active=true]:bg-sidebar-accent',\n 'tw:data-[active=true]:font-medium',\n )}\n >\n {label}\n <ChevronDown className=\"tw:ml-auto tw:size-5 tw:transition-transform tw:duration-200 tw:group-data-[state=open]:rotate-180\" />\n </SidebarMenuButton>\n </Collapsible.Trigger>\n <Collapsible.Content>\n <ul\n data-sidebar=\"menu-sub\"\n className={cn(\n 'tw:ml-3.5',\n 'tw:flex',\n 'tw:min-w-0',\n 'tw:translate-x-px',\n 'tw:flex-col',\n 'tw:gap-1',\n 'tw:border-l',\n 'tw:border-sidebar-border',\n 'tw:py-0.5',\n 'tw:pl-2.5',\n 'tw:pr-0',\n\n // TODO: remove when bootstrap is gone\n 'tw:list-none',\n )}\n >\n {children}\n </ul>\n </Collapsible.Content>\n </Collapsible>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Root, Slottable } from '@radix-ui/react-slot';\n\nimport { cn } from '../../../utils';\nimport { DropdownMenu } from '../../DropdownMenu';\nimport { useSidebarInstance } from '../SidebarInstanceContext';\n\ntype Props = ComponentProps<'button'> & {\n asChild?: boolean;\n};\n\nexport const SidebarMenuSubItem = ({\n ref,\n className,\n asChild = false,\n children,\n disabled,\n 'aria-current': ariaCurrent,\n ...props\n}: Props) => {\n const { mode } = useSidebarInstance();\n const isDropdownMenu = mode === 'collapsed' || mode === 'expand-on-hover';\n\n if (isDropdownMenu) {\n return (\n <DropdownMenu.Item\n aria-current={ariaCurrent}\n asChild={asChild}\n disabled={disabled}\n className={cn(\n // use sidebar colors for active and focus states\n 'tw:focus:!bg-sidebar-accent',\n 'tw:aria-[current=page]:bg-sidebar-accent',\n 'tw:aria-[current=page]:focus:text-sidebar-accent-foreground',\n className,\n )}\n >\n {children}\n </DropdownMenu.Item>\n );\n }\n\n const Component = asChild ? Root : 'button';\n\n return (\n <li className=\"tw:group/sidebar-menu-sub-item tw:relative\">\n <Component\n {...props}\n ref={ref}\n aria-current={ariaCurrent}\n data-slot=\"sidebar-menu-sub-button\"\n type=\"button\"\n disabled={disabled}\n className={cn(\n // layout\n 'tw:flex',\n 'tw:items-center',\n 'tw:gap-2',\n\n // sizing\n 'tw:h-7',\n 'tw:w-full',\n 'tw:min-w-0',\n 'tw:px-2',\n\n //font\n 'tw:text-sidebar-foreground',\n 'tw:text-sm',\n 'tw:font-normal',\n 'tw:text-start',\n 'tw:whitespace-nowrap',\n\n 'tw:overflow-hidden',\n 'tw:rounded-md',\n 'tw:no-underline',\n\n 'tw:select-none',\n 'tw:outline-hidden',\n\n // hover\n 'tw:hover:not-disabled:bg-sidebar-accent',\n 'tw:hover:text-sidebar-accent-foreground',\n 'tw:focus:text-sidebar-accent-foreground',\n\n // active\n 'tw:aria-selected:font-medium',\n 'tw:aria-selected:bg-sidebar-accent',\n 'tw:aria-[current=page]:bg-sidebar-accent',\n 'tw:aria-[current=page]:font-medium',\n\n // disabled\n 'tw:disabled:opacity-50',\n 'tw:disabled:cursor-not-allowed',\n\n // focus-visible\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:ring-2',\n 'tw:focus-visible:ring-sidebar-ring/50',\n className,\n )}\n >\n <Slottable>{children}</Slottable>\n </Component>\n </li>\n );\n};\n","import { type MouseEventHandler, useCallback, useEffect, useRef } from 'react';\n\nimport { useSidebar } from './SidebarProvider';\nimport type { SidebarSide } from './types';\nimport { SidebarWidthInPx } from './utils';\n\nconst DEFAULT_MIN_WIDTH = 384;\nconst DEFAULT_MAX_WIDTH = 800;\n\ntype UseResizeSidebarInput = {\n side: SidebarSide;\n minWidth?: number;\n maxWidth?: number;\n};\n\nexport const useResizeSidebar = ({\n side,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n}: UseResizeSidebarInput) => {\n const { onWidthChange, baseWidth, isFill, state, isDragging, setIsDragging, setDragWidth } =\n useSidebar(side);\n const isResizable = state === 'expanded' && !isFill && onWidthChange !== undefined;\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n useEffect(() => {\n return () => {\n cleanupRef.current?.();\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n }, []);\n\n const clampToRange = useCallback(\n (width: number) => {\n const effectiveMax = Math.max(minWidth, Math.min(maxWidth, window.innerWidth * 0.5));\n return Math.round(Math.min(effectiveMax, Math.max(minWidth, width)));\n },\n [minWidth, maxWidth],\n );\n\n const handleMouseDown: MouseEventHandler = useCallback(\n (e) => {\n if (!isResizable || isDragging) return;\n\n cleanupRef.current?.();\n setIsDragging(true);\n\n startWidthRef.current = baseWidth ?? SidebarWidthInPx.MIN_DEFAULT;\n startXRef.current = e.clientX;\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta =\n side === 'right'\n ? startXRef.current - moveEvent.clientX\n : moveEvent.clientX - startXRef.current;\n setDragWidth(clampToRange(startWidthRef.current + delta));\n };\n\n const handleMouseUp = (upEvent: MouseEvent) => {\n const delta =\n side === 'right'\n ? startXRef.current - upEvent.clientX\n : upEvent.clientX - startXRef.current;\n onWidthChange?.(clampToRange(startWidthRef.current + delta));\n setIsDragging(false);\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n cleanupRef.current = null;\n };\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n cleanupRef.current = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n setIsDragging(false);\n setDragWidth(null);\n };\n },\n [\n isResizable,\n isDragging,\n side,\n onWidthChange,\n baseWidth,\n setIsDragging,\n setDragWidth,\n clampToRange,\n ],\n );\n\n const handleDoubleClick = useCallback(() => {\n onWidthChange?.(minWidth);\n }, [onWidthChange, minWidth]);\n\n return {\n handleProps: {\n onMouseDown: handleMouseDown,\n onDoubleClick: handleDoubleClick,\n },\n isDragging,\n isResizable,\n };\n};\n","import { cn } from '../../utils';\n\nimport type { SidebarSide } from './types';\nimport { useResizeSidebar } from './useResizeSidebar';\n\ntype Props = {\n side: SidebarSide;\n minWidth?: number;\n maxWidth?: number;\n};\n\nexport const SidebarResizeHandle = ({ side, minWidth, maxWidth }: Props) => {\n const { handleProps, isResizable } = useResizeSidebar({ side, minWidth, maxWidth });\n\n if (!isResizable) return null;\n\n return (\n <div\n {...handleProps}\n aria-hidden\n className={cn(\n 'tw:absolute tw:inset-y-0 tw:z-10 tw:w-3',\n side === 'right' ? 'tw:left-0' : 'tw:right-0',\n 'tw:cursor-col-resize',\n )}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\nimport { Separator } from '../Separator';\n\ntype Props = Omit<ComponentProps<typeof Separator>, 'orientation' | 'size'>;\n\nexport const SidebarSeparator = ({ className, ...props }: Props) => (\n <Separator\n {...props}\n orientation=\"horizontal\"\n size=\"full\"\n className={cn('tw:before:bg-sidebar-border tw:p-2', className)}\n />\n);\n","import type { ComponentProps, MouseEventHandler } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '../../utils';\n\nimport { useSidebar } from './SidebarProvider';\nimport type { SidebarSide } from './types';\n\ntype Props = ComponentProps<typeof Slot> & {\n side?: SidebarSide;\n hideWhenCollapsed?: boolean;\n};\n\nexport const SidebarTrigger = ({\n side = 'left',\n onClick,\n hideWhenCollapsed = false,\n className,\n ...rest\n}: Props) => {\n const { toggle } = useSidebar(side);\n\n const handleOnClick: MouseEventHandler<HTMLElement> = (event) => {\n toggle();\n onClick?.(event);\n };\n\n return (\n <Slot\n {...rest}\n onClick={handleOnClick}\n className={cn(\n {\n 'tw:group-data-[state=collapsed]/sidebar:hidden': hideWhenCollapsed,\n },\n className,\n )}\n />\n );\n};\n","import { useMemo } from 'react';\nimport type { CSSProperties, ReactNode, TransitionEventHandler } from 'react';\n\nimport { cn } from '../../utils';\nimport { TooltipProvider } from '../Tooltip';\n\nimport { useTransitionPresence } from './SidebarProvider/useTransitionPresence';\nimport { SidebarContent } from './SidebarContent';\nimport { SidebarFillTrigger } from './SidebarFillTrigger';\nimport { SidebarFooter } from './SidebarFooter';\nimport {\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n} from './SidebarGroup';\nimport { SidebarHeader } from './SidebarHeader';\nimport { SidebarInstanceContext } from './SidebarInstanceContext';\nimport {\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuCard,\n SidebarMenuIcon,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarSearchInput,\n} from './SidebarMenu';\nimport { useSidebar } from './SidebarProvider';\nimport { SidebarResizeHandle } from './SidebarResizeHandle';\nimport { SidebarSeparator } from './SidebarSeparator';\nimport { SidebarTrigger } from './SidebarTrigger';\nimport type { SidebarSide } from './types';\nimport { SidebarWidthInPx } from './utils';\n\ntype Props = {\n children: ReactNode;\n className?: string;\n id?: string;\n side?: SidebarSide;\n style?: CSSProperties;\n container?: boolean;\n keepMounted?: boolean;\n resizable?: boolean;\n};\n\nexport const Sidebar = ({\n children,\n className,\n id,\n side = 'left',\n style,\n container = false,\n keepMounted,\n resizable = false,\n}: Props) => {\n const oppositeSide = side === 'left' ? 'right' : 'left';\n const { setSidebarElement, state, mode, isFill, widths, collapsible, variant, isDragging } =\n useSidebar(side);\n\n const { isMounted, completeUnmount } = useTransitionPresence({\n mounted: collapsible !== 'off-canvas' || mode !== 'collapsed',\n keepMounted,\n });\n const { widths: oppositeWidths } = useSidebar(oppositeSide);\n const sidebarInstanceContextValue = useMemo(() => ({ state, mode, side }), [state, mode, side]);\n\n const handleTransitionEnd: TransitionEventHandler<HTMLDivElement> = (event) => {\n // Ignore bubbled transitions from child elements\n if (event.target !== event.currentTarget) return;\n completeUnmount();\n };\n\n const styles = {\n '--sidebar-floating-padding': `${SidebarWidthInPx.FLOATING_VARIANT_PADDING}px`,\n '--sidebar-width': `${widths.sidebar}px`,\n '--sidebar-width-gap': `${widths.gap}px`,\n '--opposite-sidebar-width': `${oppositeWidths.fill}px`,\n } as CSSProperties;\n\n if (variant === 'none') return null;\n\n return (\n <TooltipProvider>\n <SidebarInstanceContext value={sidebarInstanceContextValue}>\n <div\n id={id}\n ref={setSidebarElement}\n data-state={state}\n data-side={side}\n data-mode={mode}\n data-collapsible={collapsible}\n data-variant={variant}\n data-fill={isFill}\n style={styles}\n className={cn(\n 'tailwindcss-preflight',\n 'tw:flex',\n 'tw:relative',\n // expand-on-hover needs a higher z-index so the expanding sidebar\n // overlaps the opposite filled sidebar instead of sliding behind it\n mode === 'expand-on-hover' ? 'tw:z-[51]' : 'tw:z-50',\n {\n // group/peer scoping is only for page-level sidebars — container\n // sidebars are nested inside other components and must not leak\n // group/peer selectors to avoid clashing with the outer sidebar\n 'tw:group/sidebar tw:peer/sidebar': !container,\n },\n\n // ── GAP DIV ──\n 'tw:[&>[data-slot=gap]]:w-(--sidebar-width-gap)',\n 'tw:[&[data-side=right]>[data-slot=gap]]:rotate-180',\n\n // ── SIDEBAR-WRAPPER DIV ──\n 'tw:[&>[data-slot=sidebar-wrapper]]:w-(--sidebar-width)',\n 'tw:[&[data-side=left]>[data-slot=sidebar-wrapper]]:left-0',\n 'tw:[&[data-side=right]>[data-slot=sidebar-wrapper]]:right-0',\n // Off-canvas hiding.\n // - `translate-x-*` sets the standalone `translate` property, not `transform`.\n // - The wrapper's transition list must therefore name `translate`, or the rail\n // teleports instead of sliding.\n 'tw:[&[data-state=collapsed][data-collapsible=off-canvas][data-side=left]>[data-slot=sidebar-wrapper]]:-translate-x-full',\n 'tw:[&[data-state=collapsed][data-collapsible=off-canvas][data-side=right]>[data-slot=sidebar-wrapper]]:translate-x-full',\n\n // floating variants styles\n 'tw:[&[data-variant=sided-floating]>[data-slot=sidebar-wrapper]]:pt-(--sidebar-floating-padding)',\n 'tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]]:pr-(--sidebar-floating-padding)',\n 'tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]]:pl-(--sidebar-floating-padding)',\n\n 'tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]]:p-(--sidebar-floating-padding)',\n\n // fill state\n 'tw:[&[data-fill=true]>[data-slot=sidebar-wrapper]]:!w-[calc(100svw-var(--opposite-sidebar-width))]',\n 'tw:[&[data-fill=true][data-variant=floating]>[data-slot=sidebar-wrapper]]:!p-(--sidebar-floating-padding)',\n 'tw:[&[data-fill=true][data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:!rounded-tr-xl',\n 'tw:[&[data-fill=true][data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:!rounded-tl-xl',\n\n // ── SIDEBAR DIV (INNERMOST) ──\n 'tw:[&[data-variant=inset][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-r',\n 'tw:[&[data-variant=inset][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-l',\n 'tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:shadow',\n 'tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-xl',\n 'tw:[&[data-variant=sided-floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:shadow',\n 'tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-tr-xl',\n 'tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-tl-xl',\n // The rail's inner edge, mirroring `inset`. The shadow above cannot carry\n // this alone: a shadow needs a lighter ground to fall on, and on the dark\n // scheme `--sidebar` is darker than `--background`, so the rail's edge\n // dissolves into the page beside it.\n 'tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-r',\n 'tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-l',\n\n // transitions\n isDragging\n ? 'tw:transition-none'\n : 'tw:transition-[width,translate,transform] tw:duration-200 tw:ease-linear',\n )}\n >\n <div\n data-slot=\"gap\"\n className={cn(\n 'tw:bg-transparent',\n isDragging ? '' : 'tw:transition-[width] tw:duration-200 tw:ease-linear',\n )}\n />\n\n <div\n data-slot=\"sidebar-wrapper\"\n onTransitionEnd={handleTransitionEnd}\n className={cn(\n 'tw:fixed',\n 'tw:inset-y-0',\n 'tw:border-neutral-100',\n\n // transition\n isDragging\n ? 'tw:transition-none'\n : 'tw:transition-[width,translate,transform] tw:duration-200 tw:ease-linear',\n className,\n )}\n style={style}\n >\n {resizable && <SidebarResizeHandle side={side} />}\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'tw:bg-sidebar',\n 'tw:overflow-hidden',\n 'tw:relative',\n 'tw:flex',\n 'tw:flex-col',\n 'tw:size-full',\n 'tw:border-sidebar-border',\n 'tw:group-[]/sidebar:pt-2',\n )}\n >\n {isMounted ? children : null}\n </div>\n </div>\n </div>\n </SidebarInstanceContext>\n </TooltipProvider>\n );\n};\n\n// main layout\nSidebar.Header = SidebarHeader;\nSidebar.Content = SidebarContent;\nSidebar.Footer = SidebarFooter;\nSidebar.Trigger = SidebarTrigger;\nSidebar.FillTrigger = SidebarFillTrigger;\nSidebar.Separator = SidebarSeparator;\nSidebar.MenuIcon = SidebarMenuIcon;\n\n// group features\nSidebar.Group = SidebarGroup;\nSidebar.GroupLabel = SidebarGroupLabel;\nSidebar.GroupContent = SidebarGroupContent;\nSidebar.GroupAction = SidebarGroupAction;\n\n// menu features\nSidebar.Menu = SidebarMenu;\nSidebar.MenuItem = SidebarMenuItem;\nSidebar.MenuButton = SidebarMenuButton;\nSidebar.MenuAction = SidebarMenuAction;\nSidebar.SearchInput = SidebarSearchInput;\nSidebar.MenuCard = SidebarMenuCard;\nSidebar.MenuBadge = SidebarMenuBadge;\n\n// sub-menu features\nSidebar.SubMenu = SidebarMenuSub;\nSidebar.SubItem = SidebarMenuSubItem;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { cn } from "./classNames-BzrkDnOD.js";
|
|
2
|
+
import { Tooltip, TooltipProvider } from "./utils-D0c5VAyF.js";
|
|
3
|
+
import { mergeRefs } from "./internal/utils/mergeRefs.js";
|
|
4
|
+
import { argoVariants } from "./Button-6xBX0nNl.js";
|
|
5
|
+
import { useCallback, useRef, useState } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Range, Root, Thumb, Track } from "@radix-ui/react-slider";
|
|
8
|
+
//#region src/components/Slider/useInteracting.ts
|
|
9
|
+
const useInteracting = () => {
|
|
10
|
+
const [isInteracting, setIsInteracting] = useState(false);
|
|
11
|
+
const cleanupRef = useRef(null);
|
|
12
|
+
return [isInteracting, useCallback((element) => {
|
|
13
|
+
cleanupRef.current?.();
|
|
14
|
+
cleanupRef.current = null;
|
|
15
|
+
if (!element) return;
|
|
16
|
+
let hover = false;
|
|
17
|
+
let focus = false;
|
|
18
|
+
let press = false;
|
|
19
|
+
const recompute = () => setIsInteracting(hover || focus || press);
|
|
20
|
+
const handleEnter = () => {
|
|
21
|
+
hover = true;
|
|
22
|
+
recompute();
|
|
23
|
+
};
|
|
24
|
+
const handleLeave = () => {
|
|
25
|
+
hover = false;
|
|
26
|
+
recompute();
|
|
27
|
+
};
|
|
28
|
+
const handleFocus = () => {
|
|
29
|
+
focus = true;
|
|
30
|
+
recompute();
|
|
31
|
+
};
|
|
32
|
+
const handleBlur = () => {
|
|
33
|
+
focus = false;
|
|
34
|
+
recompute();
|
|
35
|
+
};
|
|
36
|
+
const handleDown = () => {
|
|
37
|
+
press = true;
|
|
38
|
+
recompute();
|
|
39
|
+
};
|
|
40
|
+
const handleRelease = () => {
|
|
41
|
+
press = false;
|
|
42
|
+
recompute();
|
|
43
|
+
};
|
|
44
|
+
element.addEventListener("pointerenter", handleEnter);
|
|
45
|
+
element.addEventListener("pointerleave", handleLeave);
|
|
46
|
+
element.addEventListener("focus", handleFocus);
|
|
47
|
+
element.addEventListener("blur", handleBlur);
|
|
48
|
+
element.addEventListener("pointerdown", handleDown);
|
|
49
|
+
element.addEventListener("pointerup", handleRelease);
|
|
50
|
+
element.addEventListener("pointercancel", handleRelease);
|
|
51
|
+
cleanupRef.current = () => {
|
|
52
|
+
element.removeEventListener("pointerenter", handleEnter);
|
|
53
|
+
element.removeEventListener("pointerleave", handleLeave);
|
|
54
|
+
element.removeEventListener("focus", handleFocus);
|
|
55
|
+
element.removeEventListener("blur", handleBlur);
|
|
56
|
+
element.removeEventListener("pointerdown", handleDown);
|
|
57
|
+
element.removeEventListener("pointerup", handleRelease);
|
|
58
|
+
element.removeEventListener("pointercancel", handleRelease);
|
|
59
|
+
};
|
|
60
|
+
}, [])];
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/components/Slider/SliderThumb.tsx
|
|
64
|
+
const SliderThumb = ({ ref: forwardedRef, className, tooltip, tooltipSide = "top", ...props }) => {
|
|
65
|
+
const [isInteracting, interactingRef] = useInteracting();
|
|
66
|
+
const thumb = /* @__PURE__ */ jsx(Thumb, {
|
|
67
|
+
ref: mergeRefs(forwardedRef ?? null, interactingRef),
|
|
68
|
+
className: cn(argoVariants({
|
|
69
|
+
variant: "outline",
|
|
70
|
+
size: "icon-sm"
|
|
71
|
+
}), "tw:p-0", "tw:active:opacity-100", "tw:block", "tw:size-4", "tw:rounded-full", "tw:data-[disabled]:cursor-not-allowed", "tw:[&:not([data-disabled])]:cursor-pointer", className),
|
|
72
|
+
...props
|
|
73
|
+
});
|
|
74
|
+
if (tooltip == null) return thumb;
|
|
75
|
+
return /* @__PURE__ */ jsxs(Tooltip.Root, {
|
|
76
|
+
open: isInteracting,
|
|
77
|
+
children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
78
|
+
asChild: true,
|
|
79
|
+
children: thumb
|
|
80
|
+
}), /* @__PURE__ */ jsx(Tooltip.Content, {
|
|
81
|
+
variant: "action",
|
|
82
|
+
placement: tooltipSide,
|
|
83
|
+
children: tooltip
|
|
84
|
+
})]
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/components/Slider/SliderTrack.tsx
|
|
89
|
+
const SliderTrack = ({ ref, className, ...props }) => /* @__PURE__ */ jsx(Track, {
|
|
90
|
+
ref,
|
|
91
|
+
className: cn("tw:relative", "tw:grow", "tw:w-full", "tw:h-1.5", "tw:overflow-hidden", "tw:rounded-full", "tw:bg-muted", "tw:data-[orientation=vertical]:h-full", "tw:data-[orientation=vertical]:w-1.5"),
|
|
92
|
+
...props,
|
|
93
|
+
children: /* @__PURE__ */ jsx(Range, { className: cn("tw:absolute", "tw:h-full", "tw:bg-primary", "tw:data-[orientation=vertical]:w-full", className) })
|
|
94
|
+
});
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/components/Slider/Slider.tsx
|
|
97
|
+
const Slider = ({ ref, className, value, defaultValue, min = 0, max = 100, onValueChange, thumbTooltip, thumbTooltipSide, rangeClassName, ...rest }) => {
|
|
98
|
+
const isControlled = Array.isArray(value);
|
|
99
|
+
const [internalValues, setInternalValues] = useState(() => {
|
|
100
|
+
if (isControlled) return value;
|
|
101
|
+
if (Array.isArray(defaultValue)) return defaultValue;
|
|
102
|
+
return [min];
|
|
103
|
+
});
|
|
104
|
+
const liveValues = isControlled ? value : internalValues;
|
|
105
|
+
const handleValueChange = (next) => {
|
|
106
|
+
if (!isControlled) setInternalValues(next);
|
|
107
|
+
onValueChange?.(next);
|
|
108
|
+
};
|
|
109
|
+
const body = /* @__PURE__ */ jsxs(Root, {
|
|
110
|
+
ref,
|
|
111
|
+
value: liveValues,
|
|
112
|
+
min,
|
|
113
|
+
max,
|
|
114
|
+
onValueChange: handleValueChange,
|
|
115
|
+
className: cn("tw:relative", "tw:flex", "tw:items-center", "tw:w-full", "tw:touch-none", "tw:select-none", "tw:data-[orientation=vertical]:h-full", "tw:data-[orientation=vertical]:w-auto", "tw:data-[orientation=vertical]:flex-col", "tw:data-[disabled]:opacity-50", className),
|
|
116
|
+
...rest,
|
|
117
|
+
children: [/* @__PURE__ */ jsx(SliderTrack, { className: rangeClassName }), liveValues.map((thumbValue, index) => /* @__PURE__ */ jsx(SliderThumb, {
|
|
118
|
+
tooltip: thumbTooltip?.(thumbValue, index),
|
|
119
|
+
tooltipSide: thumbTooltipSide
|
|
120
|
+
}, index))]
|
|
121
|
+
});
|
|
122
|
+
return thumbTooltip ? /* @__PURE__ */ jsx(TooltipProvider, { children: body }) : body;
|
|
123
|
+
};
|
|
124
|
+
//#endregion
|
|
125
|
+
export { Slider };
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=Slider-BOPfMOMm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Slider-BOPfMOMm.js","names":["RadixThumb","RadixTrack","RadixRange"],"sources":["../src/components/Slider/useInteracting.ts","../src/components/Slider/SliderThumb.tsx","../src/components/Slider/SliderTrack.tsx","../src/components/Slider/Slider.tsx"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\ntype InteractingRef = (element: HTMLElement | null) => void;\n\nexport const useInteracting = (): readonly [boolean, InteractingRef] => {\n const [isInteracting, setIsInteracting] = useState(false);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n const setRef = useCallback<InteractingRef>((element) => {\n cleanupRef.current?.();\n cleanupRef.current = null;\n if (!element) return;\n\n let hover = false;\n let focus = false;\n let press = false;\n const recompute = () => setIsInteracting(hover || focus || press);\n\n const handleEnter = () => {\n hover = true;\n recompute();\n };\n const handleLeave = () => {\n hover = false;\n recompute();\n };\n const handleFocus = () => {\n focus = true;\n recompute();\n };\n const handleBlur = () => {\n focus = false;\n recompute();\n };\n const handleDown = () => {\n press = true;\n recompute();\n };\n const handleRelease = () => {\n press = false;\n recompute();\n };\n\n element.addEventListener('pointerenter', handleEnter);\n element.addEventListener('pointerleave', handleLeave);\n element.addEventListener('focus', handleFocus);\n element.addEventListener('blur', handleBlur);\n element.addEventListener('pointerdown', handleDown);\n element.addEventListener('pointerup', handleRelease);\n element.addEventListener('pointercancel', handleRelease);\n\n cleanupRef.current = () => {\n element.removeEventListener('pointerenter', handleEnter);\n element.removeEventListener('pointerleave', handleLeave);\n element.removeEventListener('focus', handleFocus);\n element.removeEventListener('blur', handleBlur);\n element.removeEventListener('pointerdown', handleDown);\n element.removeEventListener('pointerup', handleRelease);\n element.removeEventListener('pointercancel', handleRelease);\n };\n }, []);\n\n return [isInteracting, setRef] as const;\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport { Thumb as RadixThumb } from '@radix-ui/react-slider';\n\nimport { cn, mergeRefs } from '../../utils';\nimport { argoVariants } from '../Button';\nimport { Tooltip } from '../Tooltip';\n\nimport { useInteracting } from './useInteracting';\n\ntype Props = ComponentProps<typeof RadixThumb> & {\n tooltip?: ReactNode;\n tooltipSide?: ComponentProps<typeof Tooltip.Content>['placement'];\n};\n\nexport const SliderThumb = ({\n ref: forwardedRef,\n className,\n tooltip,\n tooltipSide = 'top',\n ...props\n}: Props) => {\n const [isInteracting, interactingRef] = useInteracting();\n\n const thumb = (\n <RadixThumb\n ref={mergeRefs(forwardedRef ?? null, interactingRef)}\n className={cn(\n argoVariants({ variant: 'outline', size: 'icon-sm' }),\n\n // layout\n 'tw:p-0',\n 'tw:active:opacity-100',\n 'tw:block',\n 'tw:size-4',\n 'tw:rounded-full',\n\n // cursors\n 'tw:data-[disabled]:cursor-not-allowed',\n 'tw:[&:not([data-disabled])]:cursor-pointer',\n\n className,\n )}\n {...props}\n />\n );\n\n if (tooltip == null) return thumb;\n\n return (\n <Tooltip.Root open={isInteracting}>\n <Tooltip.Trigger asChild>{thumb}</Tooltip.Trigger>\n <Tooltip.Content variant=\"action\" placement={tooltipSide}>\n {tooltip}\n </Tooltip.Content>\n </Tooltip.Root>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Range as RadixRange, Track as RadixTrack } from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof RadixTrack> & { rangeClassName?: string };\n\nexport const SliderTrack = ({ ref, className, ...props }: Props) => (\n <RadixTrack\n ref={ref}\n className={cn(\n // layout\n 'tw:relative',\n 'tw:grow',\n 'tw:w-full',\n 'tw:h-1.5',\n 'tw:overflow-hidden',\n\n // style\n 'tw:rounded-full',\n 'tw:bg-muted',\n\n // vertical orientation\n 'tw:data-[orientation=vertical]:h-full',\n 'tw:data-[orientation=vertical]:w-1.5',\n )}\n {...props}\n >\n <RadixRange\n className={cn(\n // layout\n 'tw:absolute',\n 'tw:h-full',\n\n // style\n 'tw:bg-primary',\n\n // vertical orientation\n 'tw:data-[orientation=vertical]:w-full',\n\n className,\n )}\n />\n </RadixTrack>\n);\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { Root } from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils';\nimport { TooltipProvider } from '../Tooltip';\n\nimport { SliderThumb } from './SliderThumb';\nimport { SliderTrack } from './SliderTrack';\n\nexport type ThumbTooltipFn = (value: number, index: number) => ReactNode;\n\ntype Props = ComponentProps<typeof Root> & {\n thumbTooltip?: ThumbTooltipFn;\n thumbTooltipSide?: ComponentProps<typeof SliderThumb>['tooltipSide'];\n rangeClassName?: string;\n};\n\nexport const Slider = ({\n ref,\n className,\n value,\n defaultValue,\n min = 0,\n max = 100,\n onValueChange,\n thumbTooltip,\n thumbTooltipSide,\n rangeClassName,\n ...rest\n}: Props) => {\n const isControlled = Array.isArray(value);\n\n const [internalValues, setInternalValues] = useState<number[]>(() => {\n if (isControlled) return value;\n if (Array.isArray(defaultValue)) return defaultValue;\n return [min];\n });\n\n const liveValues = isControlled ? value : internalValues;\n\n const handleValueChange = (next: number[]) => {\n if (!isControlled) setInternalValues(next);\n onValueChange?.(next);\n };\n\n const body = (\n <Root\n ref={ref}\n value={liveValues}\n min={min}\n max={max}\n onValueChange={handleValueChange}\n className={cn(\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:w-full',\n\n 'tw:touch-none',\n 'tw:select-none',\n\n 'tw:data-[orientation=vertical]:h-full',\n 'tw:data-[orientation=vertical]:w-auto',\n 'tw:data-[orientation=vertical]:flex-col',\n\n 'tw:data-[disabled]:opacity-50',\n className,\n )}\n {...rest}\n >\n <SliderTrack className={rangeClassName} />\n {liveValues.map((thumbValue, index) => (\n <SliderThumb\n // oxlint-disable-next-line react/no-array-index-key\n key={index}\n tooltip={thumbTooltip?.(thumbValue, index)}\n tooltipSide={thumbTooltipSide}\n />\n ))}\n </Root>\n );\n\n return thumbTooltip ? <TooltipProvider>{body}</TooltipProvider> : body;\n};\n"],"mappings":"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"}
|