@usefragments/ui 1.5.4 → 1.7.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/README.md +4 -4
- package/dist/assets/fragments-wordmark.cjs +2 -2
- package/dist/assets/fragments-wordmark.d.ts.map +1 -1
- package/dist/assets/fragments-wordmark.js +2 -2
- package/dist/assets/ui.css +10468 -6909
- package/dist/chart.cjs +31 -26
- package/dist/chart.js +31 -26
- package/dist/codeblock.cjs +55 -29
- package/dist/codeblock.js +55 -29
- package/dist/colorpicker.cjs +5 -2
- package/dist/colorpicker.js +5 -2
- package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
- package/dist/components/Accordion/Accordion.module.scss.js +8 -8
- package/dist/components/Alert/Alert.module.scss.cjs +15 -12
- package/dist/components/Alert/Alert.module.scss.js +15 -12
- package/dist/components/Alert/index.cjs +7 -1
- package/dist/components/Alert/index.d.ts +12 -6
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +7 -1
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/AppShell/index.cjs +5 -3
- package/dist/components/AppShell/index.d.ts +4 -2
- package/dist/components/AppShell/index.d.ts.map +1 -1
- package/dist/components/AppShell/index.js +5 -3
- package/dist/components/Avatar/Avatar.module.scss.cjs +17 -14
- package/dist/components/Avatar/Avatar.module.scss.js +17 -14
- package/dist/components/Avatar/index.cjs +100 -118
- package/dist/components/Avatar/index.d.ts +7 -5
- package/dist/components/Avatar/index.d.ts.map +1 -1
- package/dist/components/Avatar/index.js +100 -118
- package/dist/components/Badge/Badge.module.scss.cjs +19 -19
- package/dist/components/Badge/Badge.module.scss.js +19 -19
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
- package/dist/components/Box/Box.module.scss.cjs +152 -152
- package/dist/components/Box/Box.module.scss.js +152 -152
- package/dist/components/Box/index.cjs +64 -75
- package/dist/components/Box/index.d.ts +16 -16
- package/dist/components/Box/index.d.ts.map +1 -1
- package/dist/components/Box/index.js +64 -75
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
- package/dist/components/Button/Button.module.scss.cjs +14 -14
- package/dist/components/Button/Button.module.scss.js +14 -14
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
- package/dist/components/Card/Card.module.scss.cjs +30 -18
- package/dist/components/Card/Card.module.scss.js +31 -19
- package/dist/components/Card/index.cjs +8 -0
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +8 -0
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- package/dist/components/Chart/index.d.ts +7 -7
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -15
- package/dist/components/Checkbox/Checkbox.module.scss.js +9 -15
- package/dist/components/Checkbox/index.cjs +6 -8
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +6 -8
- package/dist/components/Chip/Chip.module.scss.cjs +15 -15
- package/dist/components/Chip/Chip.module.scss.js +15 -15
- package/dist/components/Chip/index.cjs +6 -6
- package/dist/components/Chip/index.d.ts +1 -1
- package/dist/components/Chip/index.js +4 -4
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +27 -24
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +27 -24
- package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
- package/dist/components/CodeBlock/css-variables-theme.js +98 -0
- package/dist/components/CodeBlock/index.d.ts +17 -3
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -12
- package/dist/components/Collapsible/Collapsible.module.scss.js +9 -12
- package/dist/components/Collapsible/index.cjs +3 -2
- package/dist/components/Collapsible/index.d.ts +3 -3
- package/dist/components/Collapsible/index.d.ts.map +1 -1
- package/dist/components/Collapsible/index.js +3 -2
- package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +16 -16
- package/dist/components/ColorPicker/ColorPicker.module.scss.js +16 -16
- package/dist/components/ColorPicker/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +21 -27
- package/dist/components/Combobox/Combobox.module.scss.js +21 -27
- package/dist/components/Combobox/index.cjs +21 -5
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +21 -5
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- package/dist/components/Command/index.cjs +26 -15
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +26 -15
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +11 -14
- package/dist/components/ConversationList/ConversationList.module.scss.js +11 -14
- package/dist/components/ConversationList/index.cjs +40 -44
- package/dist/components/ConversationList/index.d.ts +3 -3
- package/dist/components/ConversationList/index.d.ts.map +1 -1
- package/dist/components/ConversationList/index.js +40 -44
- package/dist/components/DataTable/DataTable.icons.cjs +6 -33
- package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.icons.js +6 -33
- package/dist/components/DataTable/DataTable.module.scss.cjs +32 -56
- package/dist/components/DataTable/DataTable.module.scss.js +32 -56
- package/dist/components/DataTable/index.d.ts +5 -4
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
- package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
- package/dist/components/Dialog/Dialog.module.scss.js +14 -14
- package/dist/components/Dialog/index.cjs +11 -14
- package/dist/components/Dialog/index.d.ts +7 -7
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +11 -14
- package/dist/components/Drawer/Drawer.module.scss.cjs +31 -28
- package/dist/components/Drawer/Drawer.module.scss.js +31 -28
- package/dist/components/Drawer/index.cjs +1 -1
- package/dist/components/Drawer/index.js +1 -1
- package/dist/components/Editor/Editor.module.scss.cjs +23 -23
- package/dist/components/Editor/Editor.module.scss.js +23 -23
- package/dist/components/Editor/index.d.ts +10 -10
- package/dist/components/Editor/index.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.scss.cjs +15 -12
- package/dist/components/EmptyState/EmptyState.module.scss.js +15 -12
- package/dist/components/EmptyState/index.cjs +8 -6
- package/dist/components/EmptyState/index.d.ts +9 -4
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +8 -6
- package/dist/components/Field/Field.module.scss.cjs +8 -5
- package/dist/components/Field/Field.module.scss.js +8 -5
- package/dist/components/Field/index.cjs +18 -1
- package/dist/components/Field/index.d.ts +9 -2
- package/dist/components/Field/index.d.ts.map +1 -1
- package/dist/components/Field/index.js +18 -1
- package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
- package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
- package/dist/components/Form/Form.module.scss.cjs +5 -2
- package/dist/components/Form/Form.module.scss.js +5 -2
- package/dist/components/Form/index.cjs +6 -1
- package/dist/components/Form/index.d.ts +8 -3
- package/dist/components/Form/index.d.ts.map +1 -1
- package/dist/components/Form/index.js +6 -1
- package/dist/components/Grid/Grid.module.scss.cjs +54 -72
- package/dist/components/Grid/Grid.module.scss.js +54 -72
- package/dist/components/Grid/index.cjs +57 -77
- package/dist/components/Grid/index.d.ts +11 -11
- package/dist/components/Grid/index.d.ts.map +1 -1
- package/dist/components/Grid/index.js +57 -77
- package/dist/components/Header/Header.module.scss.cjs +33 -33
- package/dist/components/Header/Header.module.scss.js +33 -33
- package/dist/components/Header/index.cjs +18 -38
- package/dist/components/Header/index.d.ts +15 -11
- package/dist/components/Header/index.d.ts.map +1 -1
- package/dist/components/Header/index.js +18 -38
- package/dist/components/Icon/Icon.module.scss.cjs +29 -8
- package/dist/components/Icon/Icon.module.scss.js +30 -9
- package/dist/components/Icon/index.cjs +30 -48
- package/dist/components/Icon/index.d.ts +6 -6
- package/dist/components/Icon/index.d.ts.map +1 -1
- package/dist/components/Icon/index.js +30 -48
- package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
- package/dist/components/IconButton/IconButton.module.scss.js +8 -8
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.js +2 -1
- package/dist/components/Image/Image.module.scss.cjs +27 -27
- package/dist/components/Image/Image.module.scss.js +27 -27
- package/dist/components/Input/Input.module.scss.cjs +19 -25
- package/dist/components/Input/Input.module.scss.js +19 -25
- package/dist/components/Input/index.cjs +1 -2
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js +1 -2
- package/dist/components/Link/Link.module.scss.cjs +14 -10
- package/dist/components/Link/Link.module.scss.js +14 -10
- package/dist/components/Link/index.d.ts +1 -1
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/List/List.module.scss.cjs +19 -19
- package/dist/components/List/List.module.scss.js +19 -19
- package/dist/components/List/index.cjs +4 -7
- package/dist/components/List/index.d.ts.map +1 -1
- package/dist/components/List/index.js +4 -7
- package/dist/components/Listbox/Listbox.module.scss.cjs +9 -9
- package/dist/components/Listbox/Listbox.module.scss.js +9 -9
- package/dist/components/Loading/Loading.module.scss.cjs +34 -34
- package/dist/components/Loading/Loading.module.scss.js +34 -34
- package/dist/components/Loading/index.cjs +39 -67
- package/dist/components/Loading/index.d.ts +6 -6
- package/dist/components/Loading/index.d.ts.map +1 -1
- package/dist/components/Loading/index.js +39 -67
- package/dist/components/Main/Main.module.scss.cjs +7 -7
- package/dist/components/Main/Main.module.scss.js +7 -7
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Markdown/index.d.ts +2 -2
- package/dist/components/Markdown/index.d.ts.map +1 -1
- package/dist/components/Menu/Menu.module.scss.cjs +16 -16
- package/dist/components/Menu/Menu.module.scss.js +16 -16
- package/dist/components/Menu/index.cjs +19 -61
- package/dist/components/Menu/index.d.ts +10 -10
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/components/Menu/index.js +19 -61
- package/dist/components/Message/Message.module.scss.cjs +18 -21
- package/dist/components/Message/Message.module.scss.js +18 -21
- package/dist/components/Message/index.cjs +15 -2
- package/dist/components/Message/index.d.ts.map +1 -1
- package/dist/components/Message/index.js +15 -2
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
- package/dist/components/NavigationMenu/index.cjs +32 -15
- package/dist/components/NavigationMenu/index.d.ts +12 -6
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +32 -15
- package/dist/components/Pagination/Pagination.module.scss.cjs +18 -9
- package/dist/components/Pagination/Pagination.module.scss.js +19 -10
- package/dist/components/Pagination/index.cjs +5 -2
- package/dist/components/Pagination/index.d.ts +3 -1
- package/dist/components/Pagination/index.d.ts.map +1 -1
- package/dist/components/Pagination/index.js +5 -2
- package/dist/components/Popover/Popover.module.scss.cjs +10 -10
- package/dist/components/Popover/Popover.module.scss.js +10 -10
- package/dist/components/Progress/Progress.module.scss.cjs +29 -32
- package/dist/components/Progress/Progress.module.scss.js +29 -32
- package/dist/components/Progress/geometry.cjs +30 -0
- package/dist/components/Progress/geometry.d.ts +8 -0
- package/dist/components/Progress/geometry.d.ts.map +1 -0
- package/dist/components/Progress/geometry.js +30 -0
- package/dist/components/Progress/index.cjs +40 -29
- package/dist/components/Progress/index.d.ts +4 -3
- package/dist/components/Progress/index.d.ts.map +1 -1
- package/dist/components/Progress/index.js +40 -29
- package/dist/components/Prompt/Prompt.module.scss.cjs +29 -29
- package/dist/components/Prompt/Prompt.module.scss.js +29 -29
- package/dist/components/Prompt/index.cjs +5 -4
- package/dist/components/Prompt/index.d.ts.map +1 -1
- package/dist/components/Prompt/index.js +5 -4
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -21
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -21
- package/dist/components/RadioGroup/index.cjs +7 -6
- package/dist/components/RadioGroup/index.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js +7 -6
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +7 -22
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +7 -22
- package/dist/components/ScrollArea/index.cjs +66 -42
- package/dist/components/ScrollArea/index.d.ts +6 -5
- package/dist/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/components/ScrollArea/index.js +66 -42
- package/dist/components/ScrollArea/scroll-state.cjs +58 -0
- package/dist/components/ScrollArea/scroll-state.d.ts +16 -0
- package/dist/components/ScrollArea/scroll-state.d.ts.map +1 -0
- package/dist/components/ScrollArea/scroll-state.js +58 -0
- package/dist/components/Select/Select.module.scss.cjs +21 -21
- package/dist/components/Select/Select.module.scss.js +21 -21
- package/dist/components/Select/index.cjs +3 -2
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +3 -2
- package/dist/components/Separator/Separator.module.scss.cjs +13 -10
- package/dist/components/Separator/Separator.module.scss.js +13 -10
- package/dist/components/Separator/index.cjs +37 -38
- package/dist/components/Separator/index.d.ts +4 -4
- package/dist/components/Separator/index.d.ts.map +1 -1
- package/dist/components/Separator/index.js +37 -38
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
- package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
- package/dist/components/Sidebar/index.cjs +17 -38
- package/dist/components/Sidebar/index.d.ts +23 -18
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +17 -38
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +56 -40
- package/dist/components/Skeleton/Skeleton.module.scss.js +56 -40
- package/dist/components/Skeleton/index.cjs +41 -55
- package/dist/components/Skeleton/index.d.ts +7 -7
- package/dist/components/Skeleton/index.d.ts.map +1 -1
- package/dist/components/Skeleton/index.js +41 -55
- package/dist/components/Slider/Slider.module.scss.cjs +12 -12
- package/dist/components/Slider/Slider.module.scss.js +12 -12
- package/dist/components/Stack/Stack.module.scss.cjs +25 -45
- package/dist/components/Stack/Stack.module.scss.js +25 -45
- package/dist/components/Stack/index.cjs +106 -101
- package/dist/components/Stack/index.d.ts +7 -7
- package/dist/components/Stack/index.d.ts.map +1 -1
- package/dist/components/Stack/index.js +106 -101
- package/dist/components/Switch/Switch.module.scss.cjs +32 -0
- package/dist/components/Switch/Switch.module.scss.js +32 -0
- package/dist/components/{Toggle → Switch}/index.cjs +9 -14
- package/dist/components/Switch/index.d.ts +37 -1
- package/dist/components/Switch/index.d.ts.map +1 -1
- package/dist/components/{Toggle → Switch}/index.js +5 -10
- package/dist/components/Table/Table.module.scss.cjs +21 -30
- package/dist/components/Table/Table.module.scss.js +21 -30
- package/dist/components/Table/index.d.ts +6 -5
- package/dist/components/Table/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
- package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
- package/dist/components/TableOfContents/index.cjs +13 -9
- package/dist/components/TableOfContents/index.d.ts +5 -3
- package/dist/components/TableOfContents/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.js +13 -9
- package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
- package/dist/components/Tabs/Tabs.module.scss.js +12 -12
- package/dist/components/Tabs/index.cjs +28 -8
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +28 -8
- package/dist/components/Text/Text.module.scss.cjs +105 -57
- package/dist/components/Text/Text.module.scss.js +105 -57
- package/dist/components/Text/index.cjs +49 -33
- package/dist/components/Text/index.d.ts +30 -19
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +49 -33
- package/dist/components/Textarea/Textarea.module.scss.cjs +26 -23
- package/dist/components/Textarea/Textarea.module.scss.js +26 -23
- package/dist/components/Textarea/index.cjs +5 -10
- package/dist/components/Textarea/index.d.ts.map +1 -1
- package/dist/components/Textarea/index.js +5 -10
- package/dist/components/Theme/context.cjs +39 -0
- package/dist/components/Theme/context.d.ts +21 -0
- package/dist/components/Theme/context.d.ts.map +1 -0
- package/dist/components/Theme/context.js +22 -0
- package/dist/components/Theme/index.cjs +16 -210
- package/dist/components/Theme/index.d.ts +4 -37
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +11 -205
- package/dist/components/{Theme → ThemeToggle}/ThemeToggle.module.scss.cjs +9 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +26 -0
- package/dist/components/ThemeToggle/index.cjs +140 -0
- package/dist/components/ThemeToggle/index.d.ts +26 -0
- package/dist/components/ThemeToggle/index.d.ts.map +1 -0
- package/dist/components/ThemeToggle/index.js +140 -0
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
- package/dist/components/ThinkingIndicator/index.cjs +34 -41
- package/dist/components/ThinkingIndicator/index.d.ts +4 -4
- package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
- package/dist/components/ThinkingIndicator/index.js +34 -41
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/Toggle/index.d.ts +2 -42
- package/dist/components/Toggle/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +20 -20
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +20 -20
- package/dist/components/ToggleGroup/index.cjs +3 -2
- package/dist/components/ToggleGroup/index.d.ts +2 -1
- package/dist/components/ToggleGroup/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/index.js +3 -2
- package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
- package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
- package/dist/components/Tooltip/index.cjs +24 -40
- package/dist/components/Tooltip/index.d.ts +4 -4
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +24 -40
- package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
- package/dist/components/VisuallyHidden/index.d.ts +2 -2
- package/dist/data-table.cjs +14 -10
- package/dist/data-table.js +14 -10
- package/dist/datepicker.cjs +5 -3
- package/dist/datepicker.js +5 -3
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +101 -99
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +22 -30
- package/dist/measurements/generated.cjs +304 -0
- package/dist/measurements/generated.d.ts +268 -0
- package/dist/measurements/generated.d.ts.map +1 -0
- package/dist/measurements/generated.js +304 -0
- package/dist/measurements/index.d.ts +2 -0
- package/dist/measurements/index.d.ts.map +1 -0
- package/dist/measurements.cjs +6 -0
- package/dist/measurements.js +6 -0
- package/dist/recipes/popup.cjs +14 -0
- package/dist/recipes/popup.d.ts +4 -0
- package/dist/recipes/popup.d.ts.map +1 -0
- package/dist/recipes/popup.js +14 -0
- package/dist/recipes/table-chrome.cjs +18 -0
- package/dist/recipes/table-chrome.d.ts +10 -0
- package/dist/recipes/table-chrome.d.ts.map +1 -0
- package/dist/recipes/table-chrome.js +18 -0
- package/dist/table.cjs +5 -2
- package/dist/table.js +5 -2
- package/dist/utils/a11y.cjs +5 -2
- package/dist/utils/a11y.d.ts +5 -5
- package/dist/utils/a11y.d.ts.map +1 -1
- package/dist/utils/a11y.js +5 -2
- package/dist/utils/canonical-stamp.cjs +2 -8
- package/dist/utils/canonical-stamp.d.ts.map +1 -1
- package/dist/utils/canonical-stamp.js +1 -7
- package/dist/utils/css-warning.cjs +1 -1
- package/dist/utils/css-warning.js +1 -1
- package/dist/utils/env.cjs +17 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +17 -0
- package/dist/utils/keyboard-shortcuts.cjs +3 -10
- package/dist/utils/keyboard-shortcuts.d.ts +4 -4
- package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
- package/dist/utils/keyboard-shortcuts.js +3 -10
- package/dist/utils/layout-spacing.cjs +27 -0
- package/dist/utils/layout-spacing.d.ts +5 -0
- package/dist/utils/layout-spacing.d.ts.map +1 -0
- package/dist/utils/layout-spacing.js +27 -0
- package/dist/utils/seed-derivation.cjs +14 -48
- package/dist/utils/seed-derivation.d.ts +4 -3
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +14 -48
- package/dist/utils/theme-presets.cjs +1 -0
- package/dist/utils/theme-presets.d.ts +3 -2
- package/dist/utils/theme-presets.d.ts.map +1 -1
- package/dist/utils/theme-presets.js +1 -0
- package/fragments.json +1 -1
- package/package.json +25 -4
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Accordion/Accordion.module.scss +31 -52
- package/src/components/Alert/Alert.contract.json +37 -53
- package/src/components/Alert/Alert.module.scss +52 -44
- package/src/components/Alert/index.tsx +55 -29
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +59 -43
- package/src/components/AppShell/index.tsx +8 -4
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +25 -60
- package/src/components/Avatar/index.tsx +152 -146
- package/src/components/Badge/Badge.contract.json +37 -42
- package/src/components/Badge/Badge.module.scss +59 -47
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/BentoGrid/BentoGrid.module.scss +11 -32
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/Box.module.scss +253 -81
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +19 -15
- package/src/components/Button/Button.module.scss +60 -64
- package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
- package/src/components/ButtonGroup/ButtonGroup.module.scss +5 -5
- package/src/components/Card/Card.consumer-fixture.module.scss +8 -0
- package/src/components/Card/Card.module.scss +284 -167
- package/src/components/Card/index.tsx +21 -2
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/Chart.module.scss +28 -29
- package/src/components/Chart/index.tsx +72 -55
- package/src/components/Checkbox/Checkbox.contract.json +24 -24
- package/src/components/Checkbox/Checkbox.module.scss +75 -87
- package/src/components/Checkbox/index.tsx +8 -11
- package/src/components/Chip/Chip.contract.json +36 -42
- package/src/components/Chip/Chip.module.scss +25 -36
- package/src/components/Chip/index.tsx +5 -5
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +129 -217
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +91 -35
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/Collapsible/Collapsible.module.scss +29 -63
- package/src/components/Collapsible/index.tsx +22 -26
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +54 -33
- package/src/components/ColorPicker/index.tsx +7 -2
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +61 -74
- package/src/components/Combobox/index.tsx +34 -6
- package/src/components/Command/Command.contract.json +21 -43
- package/src/components/Command/Command.module.scss +47 -77
- package/src/components/Command/index.tsx +58 -47
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/ConversationList/ConversationList.module.scss +20 -78
- package/src/components/ConversationList/index.tsx +55 -59
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +81 -217
- package/src/components/DataTable/index.tsx +28 -32
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +66 -38
- package/src/components/DatePicker/index.tsx +7 -3
- package/src/components/Dialog/Dialog.module.scss +45 -69
- package/src/components/Dialog/index.tsx +47 -37
- package/src/components/Drawer/Drawer.contract.json +22 -36
- package/src/components/Drawer/Drawer.module.scss +93 -99
- package/src/components/Drawer/index.tsx +1 -1
- package/src/components/Editor/Editor.contract.json +31 -48
- package/src/components/Editor/Editor.module.scss +137 -220
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +31 -43
- package/src/components/EmptyState/EmptyState.module.scss +45 -84
- package/src/components/EmptyState/index.tsx +48 -23
- package/src/components/Field/Field.contract.json +28 -45
- package/src/components/Field/Field.module.scss +9 -11
- package/src/components/Field/index.tsx +31 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +23 -8
- package/src/components/Form/Form.contract.json +27 -40
- package/src/components/Form/Form.module.scss +9 -4
- package/src/components/Form/index.tsx +22 -7
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/Grid.module.scss +159 -63
- package/src/components/Grid/index.tsx +114 -133
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +56 -48
- package/src/components/Header/index.tsx +134 -121
- package/src/components/Icon/Icon.contract.json +22 -62
- package/src/components/Icon/Icon.module.scss +16 -0
- package/src/components/Icon/index.tsx +74 -86
- package/src/components/IconButton/IconButton.contract.json +34 -18
- package/src/components/IconButton/IconButton.module.scss +15 -26
- package/src/components/IconButton/index.tsx +2 -1
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +26 -32
- package/src/components/Input/Input.module.scss +69 -56
- package/src/components/Input/index.tsx +1 -2
- package/src/components/Link/Link.contract.json +32 -52
- package/src/components/Link/Link.module.scss +29 -13
- package/src/components/Link/index.tsx +1 -1
- package/src/components/List/List.contract.json +23 -52
- package/src/components/List/List.module.scss +16 -21
- package/src/components/List/index.tsx +4 -10
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Listbox/Listbox.module.scss +26 -54
- package/src/components/Loading/Loading.contract.json +37 -61
- package/src/components/Loading/Loading.module.scss +33 -40
- package/src/components/Loading/index.tsx +68 -97
- package/src/components/Main/Main.contract.json +17 -9
- package/src/components/Main/Main.module.scss +3 -5
- package/src/components/Markdown/Markdown.contract.json +22 -43
- package/src/components/Markdown/Markdown.module.scss +72 -182
- package/src/components/Markdown/index.tsx +50 -51
- package/src/components/Menu/Menu.contract.json +25 -41
- package/src/components/Menu/Menu.module.scss +63 -133
- package/src/components/Menu/index.tsx +57 -89
- package/src/components/Message/Message.contract.json +29 -52
- package/src/components/Message/Message.module.scss +60 -143
- package/src/components/Message/index.tsx +16 -6
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +123 -71
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +34 -27
- package/src/components/Pagination/index.tsx +7 -2
- package/src/components/Popover/Popover.contract.json +24 -46
- package/src/components/Popover/Popover.module.scss +43 -78
- package/src/components/Progress/Progress.contract.json +32 -28
- package/src/components/Progress/Progress.module.scss +64 -43
- package/src/components/Progress/geometry.ts +41 -0
- package/src/components/Progress/index.tsx +44 -30
- package/src/components/Prompt/Prompt.contract.json +31 -47
- package/src/components/Prompt/Prompt.module.scss +58 -87
- package/src/components/Prompt/index.tsx +6 -5
- package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
- package/src/components/RadioGroup/RadioGroup.module.scss +63 -83
- package/src/components/RadioGroup/index.tsx +7 -9
- package/src/components/ScrollArea/ScrollArea.contract.json +23 -40
- package/src/components/ScrollArea/ScrollArea.module.scss +123 -97
- package/src/components/ScrollArea/index.tsx +85 -67
- package/src/components/ScrollArea/scroll-state.ts +87 -0
- package/src/components/Select/Select.module.scss +55 -43
- package/src/components/Select/index.tsx +6 -2
- package/src/components/Separator/Separator.contract.json +24 -48
- package/src/components/Separator/Separator.module.scss +29 -19
- package/src/components/Separator/index.tsx +55 -51
- package/src/components/Sidebar/Sidebar.contract.json +42 -62
- package/src/components/Sidebar/Sidebar.module.scss +117 -106
- package/src/components/Sidebar/index.tsx +169 -162
- package/src/components/Skeleton/Skeleton.contract.json +28 -54
- package/src/components/Skeleton/Skeleton.module.scss +51 -34
- package/src/components/Skeleton/index.tsx +65 -72
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +33 -27
- package/src/components/Stack/Stack.contract.json +29 -56
- package/src/components/Stack/Stack.module.scss +110 -38
- package/src/components/Stack/index.tsx +157 -127
- package/src/components/{Toggle/Toggle.contract.json → Switch/Switch.contract.json} +34 -47
- package/src/components/Switch/Switch.module.scss +255 -0
- package/src/components/{Toggle → Switch}/index.tsx +5 -21
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +50 -129
- package/src/components/Table/index.tsx +13 -6
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +35 -182
- package/src/components/TableOfContents/index.tsx +26 -9
- package/src/components/Tabs/Tabs.contract.json +24 -45
- package/src/components/Tabs/Tabs.module.scss +28 -23
- package/src/components/Tabs/index.tsx +17 -5
- package/src/components/Text/Text.contract.json +30 -72
- package/src/components/Text/Text.module.scss +43 -7
- package/src/components/Text/index.tsx +136 -63
- package/src/components/Textarea/Textarea.contract.json +25 -43
- package/src/components/Textarea/Textarea.module.scss +58 -40
- package/src/components/Textarea/index.tsx +5 -12
- package/src/components/Theme/Theme.contract.json +32 -51
- package/src/components/Theme/context.ts +42 -0
- package/src/components/Theme/index.tsx +16 -310
- package/src/components/ThemeToggle/ThemeToggle.module.scss +89 -0
- package/src/components/ThemeToggle/index.tsx +180 -0
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
- package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +24 -19
- package/src/components/ThinkingIndicator/index.tsx +44 -54
- package/src/components/Toast/Toast.contract.json +35 -61
- package/src/components/Toast/Toast.module.scss +62 -139
- package/src/components/Toggle/index.ts +7 -0
- package/src/components/ToggleGroup/ToggleGroup.contract.json +40 -68
- package/src/components/ToggleGroup/ToggleGroup.module.scss +166 -89
- package/src/components/ToggleGroup/index.tsx +5 -3
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/Tooltip.module.scss +23 -39
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/VisuallyHidden.module.scss +3 -0
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +4 -3
- package/src/measurements/MeasurementTargets.module.scss +229 -0
- package/src/measurements/generated.ts +324 -0
- package/src/measurements/index.ts +8 -0
- package/src/measurements/measurements.json +368 -0
- package/src/recipes/_action.scss +138 -0
- package/src/recipes/_boolean-range.scss +116 -0
- package/src/recipes/_feedback.scss +171 -0
- package/src/recipes/_field.scss +102 -0
- package/src/recipes/_layout.scss +74 -0
- package/src/recipes/_navigation.scss +110 -0
- package/src/recipes/_overlay.scss +191 -0
- package/src/recipes/_popup.scss +102 -0
- package/src/recipes/_prose.scss +182 -0
- package/src/recipes/_representation.scss +193 -0
- package/src/recipes/_segmented.scss +26 -0
- package/src/recipes/_surface.scss +13 -0
- package/src/recipes/_table-chrome.scss +119 -0
- package/src/recipes/_target.scss +31 -0
- package/src/recipes/_typography.scss +38 -0
- package/src/recipes/popup.ts +12 -0
- package/src/recipes/table-chrome.ts +30 -0
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +21 -20
- package/src/tokens/_component-properties.scss +2 -2
- package/src/tokens/_computed.scss +14 -25
- package/src/tokens/_density.scss +41 -132
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +96 -0
- package/src/tokens/_measurements.generated.scss +617 -0
- package/src/tokens/_mixins.scss +7 -284
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_property-registrations.scss +96 -92
- package/src/tokens/_radius.scss +16 -70
- package/src/tokens/_seeds.scss +24 -23
- package/src/tokens/_variables.scss +338 -178
- package/src/utils/a11y.tsx +69 -69
- package/src/utils/aria.ts +3 -3
- package/src/utils/canonical-stamp.ts +2 -12
- package/src/utils/css-warning.ts +7 -7
- package/src/utils/env.ts +25 -0
- package/src/utils/keyboard-shortcuts.ts +131 -126
- package/src/utils/layout-spacing.ts +31 -0
- package/src/utils/seed-derivation.ts +144 -178
- package/src/utils/theme-presets.ts +58 -30
- package/dist/components/Theme/ThemeToggle.module.scss.js +0 -23
- package/dist/components/Toggle/Toggle.module.scss.cjs +0 -44
- package/dist/components/Toggle/Toggle.module.scss.js +0 -44
- package/src/components/Button/Button.contract.json +0 -218
- package/src/components/Card/Card.contract.json +0 -175
- package/src/components/DataTable/DataTable.contract.json +0 -302
- package/src/components/Dialog/Dialog.contract.json +0 -159
- package/src/components/Select/Select.contract.json +0 -259
- package/src/components/Switch/index.ts +0 -3
- package/src/components/Theme/ThemeToggle.module.scss +0 -91
- package/src/components/Toggle/Toggle.module.scss +0 -244
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import * as React from
|
|
4
|
-
import styles from
|
|
5
|
-
import { Badge } from
|
|
6
|
-
import { Tooltip } from
|
|
7
|
-
import { Skeleton } from
|
|
8
|
-
import { Collapsible } from
|
|
9
|
-
import { ScrollArea } from
|
|
10
|
-
import { useFocusTrap } from
|
|
11
|
-
import { useKeyboardShortcut } from
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import styles from "./Sidebar.module.scss";
|
|
5
|
+
import { Badge } from "../Badge";
|
|
6
|
+
import { Tooltip } from "../Tooltip";
|
|
7
|
+
import { Skeleton } from "../Skeleton";
|
|
8
|
+
import { Collapsible } from "../Collapsible";
|
|
9
|
+
import { ScrollArea } from "../ScrollArea";
|
|
10
|
+
import { useFocusTrap } from "../../utils/a11y";
|
|
11
|
+
import { useKeyboardShortcut } from "../../utils/keyboard-shortcuts";
|
|
12
12
|
|
|
13
13
|
function composeEventHandlers<E extends { defaultPrevented: boolean }>(
|
|
14
14
|
userHandler: ((event: E) => void) | undefined,
|
|
@@ -46,7 +46,7 @@ function renderSidebarBadge(badge: React.ReactNode) {
|
|
|
46
46
|
// ============================================
|
|
47
47
|
|
|
48
48
|
/** Collapse behavior mode */
|
|
49
|
-
export type SidebarCollapsible =
|
|
49
|
+
export type SidebarCollapsible = "icon" | "offcanvas" | "none";
|
|
50
50
|
|
|
51
51
|
export interface SidebarProviderProps {
|
|
52
52
|
children: React.ReactNode;
|
|
@@ -67,7 +67,7 @@ export interface SidebarProviderProps {
|
|
|
67
67
|
/** Width when collapsed */
|
|
68
68
|
collapsedWidth?: string;
|
|
69
69
|
/** Sidebar position */
|
|
70
|
-
position?:
|
|
70
|
+
position?: "left" | "right";
|
|
71
71
|
/** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */
|
|
72
72
|
collapsible?: SidebarCollapsible;
|
|
73
73
|
/** Enable Cmd/Ctrl+B keyboard shortcut to toggle sidebar */
|
|
@@ -93,9 +93,14 @@ export interface SidebarProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
93
93
|
/** Width when collapsed */
|
|
94
94
|
collapsedWidth?: string;
|
|
95
95
|
/** Sidebar position */
|
|
96
|
-
position?:
|
|
96
|
+
position?: "left" | "right";
|
|
97
97
|
/** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */
|
|
98
98
|
collapsible?: SidebarCollapsible;
|
|
99
|
+
/**
|
|
100
|
+
* Where the active-item affordance paints. `start` is the default rail;
|
|
101
|
+
* `end` is a trailing status dot for product shells that prefer that language.
|
|
102
|
+
*/
|
|
103
|
+
activeIndicator?: "start" | "end";
|
|
99
104
|
}
|
|
100
105
|
|
|
101
106
|
export interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
@@ -107,7 +112,7 @@ export interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement>
|
|
|
107
112
|
export interface SidebarNavProps extends React.HTMLAttributes<HTMLElement> {
|
|
108
113
|
children: React.ReactNode;
|
|
109
114
|
/** Accessible label for navigation */
|
|
110
|
-
|
|
115
|
+
"aria-label"?: string;
|
|
111
116
|
}
|
|
112
117
|
|
|
113
118
|
export interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
@@ -122,15 +127,18 @@ export interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement
|
|
|
122
127
|
defaultOpen?: boolean;
|
|
123
128
|
}
|
|
124
129
|
|
|
125
|
-
export interface SidebarSectionActionProps extends Omit<
|
|
130
|
+
export interface SidebarSectionActionProps extends Omit<
|
|
131
|
+
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
132
|
+
"onClick"
|
|
133
|
+
> {
|
|
126
134
|
children: React.ReactNode;
|
|
127
135
|
/** Click handler */
|
|
128
136
|
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
|
129
137
|
/** Accessible label */
|
|
130
|
-
|
|
138
|
+
"aria-label"?: string;
|
|
131
139
|
}
|
|
132
140
|
|
|
133
|
-
export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
141
|
+
export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>, "onClick"> {
|
|
134
142
|
children: React.ReactNode;
|
|
135
143
|
/** Icon element (required for collapsed mode visibility) */
|
|
136
144
|
icon?: React.ReactNode;
|
|
@@ -164,7 +172,7 @@ export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>
|
|
|
164
172
|
asChild?: boolean;
|
|
165
173
|
}
|
|
166
174
|
|
|
167
|
-
export interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
175
|
+
export interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLElement>, "onClick"> {
|
|
168
176
|
children: React.ReactNode;
|
|
169
177
|
/** Whether item is currently active/selected */
|
|
170
178
|
active?: boolean;
|
|
@@ -184,14 +192,14 @@ export interface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButt
|
|
|
184
192
|
/** Custom trigger element (uses render prop pattern) */
|
|
185
193
|
children?: React.ReactNode;
|
|
186
194
|
/** Accessible label */
|
|
187
|
-
|
|
195
|
+
"aria-label"?: string;
|
|
188
196
|
}
|
|
189
197
|
|
|
190
198
|
export type SidebarOverlayProps = React.HTMLAttributes<HTMLDivElement>;
|
|
191
199
|
|
|
192
200
|
export interface SidebarCollapseToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
193
201
|
/** Accessible label */
|
|
194
|
-
|
|
202
|
+
"aria-label"?: string;
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
export type SidebarRailProps = React.ButtonHTMLAttributes<HTMLButtonElement>;
|
|
@@ -277,7 +285,7 @@ interface SidebarContextValue {
|
|
|
277
285
|
open: boolean;
|
|
278
286
|
setOpen: (open: boolean) => void;
|
|
279
287
|
isMobile: boolean;
|
|
280
|
-
position:
|
|
288
|
+
position: "left" | "right";
|
|
281
289
|
width: string;
|
|
282
290
|
collapsedWidth: string;
|
|
283
291
|
collapsible: SidebarCollapsible;
|
|
@@ -302,21 +310,25 @@ function useSidebar() {
|
|
|
302
310
|
open: false,
|
|
303
311
|
setOpen: () => {},
|
|
304
312
|
isMobile: false,
|
|
305
|
-
position:
|
|
306
|
-
width:
|
|
307
|
-
collapsedWidth:
|
|
308
|
-
collapsible:
|
|
313
|
+
position: "left" as const,
|
|
314
|
+
width: "240px",
|
|
315
|
+
collapsedWidth: "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
316
|
+
collapsible: "icon" as SidebarCollapsible,
|
|
309
317
|
hasIcons: true,
|
|
310
318
|
toggleSidebar: () => {},
|
|
311
|
-
sidebarId:
|
|
312
|
-
state:
|
|
319
|
+
sidebarId: "sidebar",
|
|
320
|
+
state: "expanded" as "expanded" | "collapsed" | "open" | "closed",
|
|
313
321
|
};
|
|
314
322
|
}
|
|
315
323
|
return {
|
|
316
324
|
...context,
|
|
317
325
|
state: context.isMobile
|
|
318
|
-
?
|
|
319
|
-
|
|
326
|
+
? context.open
|
|
327
|
+
? "open"
|
|
328
|
+
: "closed"
|
|
329
|
+
: context.collapsed
|
|
330
|
+
? "collapsed"
|
|
331
|
+
: "expanded",
|
|
320
332
|
};
|
|
321
333
|
}
|
|
322
334
|
|
|
@@ -326,7 +338,7 @@ function useSidebar() {
|
|
|
326
338
|
function useSidebarContext() {
|
|
327
339
|
const context = React.useContext(SidebarContext);
|
|
328
340
|
if (!context) {
|
|
329
|
-
throw new Error(
|
|
341
|
+
throw new Error("Sidebar compound components must be used within a Sidebar");
|
|
330
342
|
}
|
|
331
343
|
return context;
|
|
332
344
|
}
|
|
@@ -339,11 +351,11 @@ function useIsMobile() {
|
|
|
339
351
|
const [isMobile, setIsMobile] = React.useState(false);
|
|
340
352
|
|
|
341
353
|
React.useEffect(() => {
|
|
342
|
-
const mq = window.matchMedia(
|
|
354
|
+
const mq = window.matchMedia("(max-width: 767px)");
|
|
343
355
|
setIsMobile(mq.matches);
|
|
344
356
|
const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);
|
|
345
|
-
mq.addEventListener(
|
|
346
|
-
return () => mq.removeEventListener(
|
|
357
|
+
mq.addEventListener("change", handler);
|
|
358
|
+
return () => mq.removeEventListener("change", handler);
|
|
347
359
|
}, []);
|
|
348
360
|
|
|
349
361
|
return isMobile;
|
|
@@ -375,7 +387,7 @@ function hasSidebarItemIcons(children: React.ReactNode): boolean {
|
|
|
375
387
|
let found = false;
|
|
376
388
|
|
|
377
389
|
const visit = (nodes: React.ReactNode) => {
|
|
378
|
-
React.Children.forEach(nodes, child => {
|
|
390
|
+
React.Children.forEach(nodes, (child) => {
|
|
379
391
|
if (found || !React.isValidElement(child)) return;
|
|
380
392
|
|
|
381
393
|
if (child.type === SidebarItem) {
|
|
@@ -413,10 +425,10 @@ function SidebarProvider({
|
|
|
413
425
|
open: controlledOpen,
|
|
414
426
|
defaultOpen = false,
|
|
415
427
|
onOpenChange,
|
|
416
|
-
width =
|
|
417
|
-
collapsedWidth =
|
|
418
|
-
position =
|
|
419
|
-
collapsible =
|
|
428
|
+
width = "240px",
|
|
429
|
+
collapsedWidth = "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
430
|
+
position = "left",
|
|
431
|
+
collapsible = "icon",
|
|
420
432
|
enableKeyboardShortcut = true,
|
|
421
433
|
}: SidebarProviderProps) {
|
|
422
434
|
const isMobile = useIsMobile();
|
|
@@ -428,14 +440,10 @@ function SidebarProvider({
|
|
|
428
440
|
onCollapsedChange
|
|
429
441
|
);
|
|
430
442
|
|
|
431
|
-
const [open, setOpen] = useControllableState(
|
|
432
|
-
controlledOpen,
|
|
433
|
-
defaultOpen,
|
|
434
|
-
onOpenChange
|
|
435
|
-
);
|
|
443
|
+
const [open, setOpen] = useControllableState(controlledOpen, defaultOpen, onOpenChange);
|
|
436
444
|
|
|
437
445
|
const toggleSidebar = React.useCallback(() => {
|
|
438
|
-
if (collapsible ===
|
|
446
|
+
if (collapsible === "none") return;
|
|
439
447
|
if (isMobile) {
|
|
440
448
|
setOpen(!open);
|
|
441
449
|
} else {
|
|
@@ -445,9 +453,9 @@ function SidebarProvider({
|
|
|
445
453
|
|
|
446
454
|
// Handle Cmd/Ctrl+B keyboard shortcut (skips editable elements like Editor)
|
|
447
455
|
useKeyboardShortcut({
|
|
448
|
-
name:
|
|
456
|
+
name: "SIDEBAR_TOGGLE",
|
|
449
457
|
handler: toggleSidebar,
|
|
450
|
-
enabled: enableKeyboardShortcut && collapsible !==
|
|
458
|
+
enabled: enableKeyboardShortcut && collapsible !== "none",
|
|
451
459
|
});
|
|
452
460
|
|
|
453
461
|
// Handle escape key for mobile drawer
|
|
@@ -455,13 +463,13 @@ function SidebarProvider({
|
|
|
455
463
|
if (!isMobile || !open) return;
|
|
456
464
|
|
|
457
465
|
const handleEscape = (e: KeyboardEvent) => {
|
|
458
|
-
if (e.key ===
|
|
466
|
+
if (e.key === "Escape") {
|
|
459
467
|
setOpen(false);
|
|
460
468
|
}
|
|
461
469
|
};
|
|
462
470
|
|
|
463
|
-
document.addEventListener(
|
|
464
|
-
return () => document.removeEventListener(
|
|
471
|
+
document.addEventListener("keydown", handleEscape);
|
|
472
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
465
473
|
}, [isMobile, open, setOpen]);
|
|
466
474
|
|
|
467
475
|
// Lock body scroll when mobile drawer is open
|
|
@@ -469,13 +477,13 @@ function SidebarProvider({
|
|
|
469
477
|
if (!isMobile) return;
|
|
470
478
|
|
|
471
479
|
if (open) {
|
|
472
|
-
document.body.style.overflow =
|
|
480
|
+
document.body.style.overflow = "hidden";
|
|
473
481
|
} else {
|
|
474
|
-
document.body.style.overflow =
|
|
482
|
+
document.body.style.overflow = "";
|
|
475
483
|
}
|
|
476
484
|
|
|
477
485
|
return () => {
|
|
478
|
-
document.body.style.overflow =
|
|
486
|
+
document.body.style.overflow = "";
|
|
479
487
|
};
|
|
480
488
|
}, [isMobile, open]);
|
|
481
489
|
|
|
@@ -494,11 +502,7 @@ function SidebarProvider({
|
|
|
494
502
|
sidebarId,
|
|
495
503
|
};
|
|
496
504
|
|
|
497
|
-
return
|
|
498
|
-
<SidebarContext.Provider value={contextValue}>
|
|
499
|
-
{children}
|
|
500
|
-
</SidebarContext.Provider>
|
|
501
|
-
);
|
|
505
|
+
return <SidebarContext.Provider value={contextValue}>{children}</SidebarContext.Provider>;
|
|
502
506
|
}
|
|
503
507
|
|
|
504
508
|
function SidebarRoot({
|
|
@@ -509,13 +513,14 @@ function SidebarRoot({
|
|
|
509
513
|
open: controlledOpen,
|
|
510
514
|
defaultOpen = false,
|
|
511
515
|
onOpenChange,
|
|
512
|
-
width =
|
|
513
|
-
collapsedWidth =
|
|
514
|
-
position =
|
|
515
|
-
collapsible
|
|
516
|
+
width = "240px",
|
|
517
|
+
collapsedWidth = "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
518
|
+
position = "left",
|
|
519
|
+
collapsible,
|
|
520
|
+
activeIndicator = "start",
|
|
516
521
|
className,
|
|
517
522
|
style: styleProp,
|
|
518
|
-
|
|
523
|
+
"aria-label": ariaLabel,
|
|
519
524
|
...htmlProps
|
|
520
525
|
}: SidebarProps) {
|
|
521
526
|
// Check if we're inside a SidebarProvider
|
|
@@ -534,19 +539,27 @@ function SidebarRoot({
|
|
|
534
539
|
onOpenChange
|
|
535
540
|
);
|
|
536
541
|
|
|
537
|
-
// Use existing context values if inside a provider, otherwise use internal state
|
|
538
|
-
|
|
539
|
-
|
|
542
|
+
// Use existing context values if inside a provider, otherwise use internal state.
|
|
543
|
+
// An explicitly supplied prop always wins: a Sidebar told to be collapsed must stay
|
|
544
|
+
// collapsed even when an ancestor shell renders its own SidebarProvider.
|
|
545
|
+
const isCollapsedControlled = controlledCollapsed !== undefined;
|
|
546
|
+
const collapsed =
|
|
547
|
+
isCollapsedControlled || !existingContext ? internalCollapsed : existingContext.collapsed;
|
|
548
|
+
const setCollapsed =
|
|
549
|
+
isCollapsedControlled || !existingContext ? setInternalCollapsed : existingContext.setCollapsed;
|
|
540
550
|
const open = existingContext ? existingContext.open : internalOpen;
|
|
541
551
|
const setOpen = existingContext ? existingContext.setOpen : setInternalOpen;
|
|
542
552
|
const resolvedPosition = existingContext ? existingContext.position : position;
|
|
543
553
|
const resolvedWidth = existingContext ? existingContext.width : width;
|
|
544
554
|
const resolvedCollapsedWidth = existingContext ? existingContext.collapsedWidth : collapsedWidth;
|
|
545
|
-
const resolvedCollapsible =
|
|
555
|
+
const resolvedCollapsible =
|
|
556
|
+
collapsible ?? (existingContext ? existingContext.collapsible : "icon");
|
|
546
557
|
const hasIcons = React.useMemo(() => hasSidebarItemIcons(children), [children]);
|
|
547
|
-
const shouldCollapseToZero =
|
|
548
|
-
|
|
549
|
-
const
|
|
558
|
+
const shouldCollapseToZero =
|
|
559
|
+
!isMobile && resolvedCollapsible === "icon" && collapsed && !hasIcons;
|
|
560
|
+
const isOffcanvasCollapsed = !isMobile && resolvedCollapsible === "offcanvas" && collapsed;
|
|
561
|
+
const effectiveCollapsedWidth =
|
|
562
|
+
shouldCollapseToZero || isOffcanvasCollapsed ? "0px" : resolvedCollapsedWidth;
|
|
550
563
|
const sidebarId = React.useId();
|
|
551
564
|
const resolvedSidebarId = existingContext ? existingContext.sidebarId : sidebarId;
|
|
552
565
|
const sidebarRef = React.useRef<HTMLElement>(null);
|
|
@@ -554,7 +567,7 @@ function SidebarRoot({
|
|
|
554
567
|
useFocusTrap(sidebarRef, isMobile && open);
|
|
555
568
|
|
|
556
569
|
const toggleSidebar = React.useCallback(() => {
|
|
557
|
-
if (resolvedCollapsible ===
|
|
570
|
+
if (resolvedCollapsible === "none") return;
|
|
558
571
|
if (isMobile) {
|
|
559
572
|
setOpen(!open);
|
|
560
573
|
} else {
|
|
@@ -568,13 +581,13 @@ function SidebarRoot({
|
|
|
568
581
|
if (!isMobile || !open) return;
|
|
569
582
|
|
|
570
583
|
const handleEscape = (e: KeyboardEvent) => {
|
|
571
|
-
if (e.key ===
|
|
584
|
+
if (e.key === "Escape") {
|
|
572
585
|
setOpen(false);
|
|
573
586
|
}
|
|
574
587
|
};
|
|
575
588
|
|
|
576
|
-
document.addEventListener(
|
|
577
|
-
return () => document.removeEventListener(
|
|
589
|
+
document.addEventListener("keydown", handleEscape);
|
|
590
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
578
591
|
}, [existingContext, isMobile, open, setOpen]);
|
|
579
592
|
|
|
580
593
|
// Lock body scroll when mobile drawer is open (only if no provider)
|
|
@@ -583,13 +596,13 @@ function SidebarRoot({
|
|
|
583
596
|
if (!isMobile) return;
|
|
584
597
|
|
|
585
598
|
if (open) {
|
|
586
|
-
document.body.style.overflow =
|
|
599
|
+
document.body.style.overflow = "hidden";
|
|
587
600
|
} else {
|
|
588
|
-
document.body.style.overflow =
|
|
601
|
+
document.body.style.overflow = "";
|
|
589
602
|
}
|
|
590
603
|
|
|
591
604
|
return () => {
|
|
592
|
-
document.body.style.overflow =
|
|
605
|
+
document.body.style.overflow = "";
|
|
593
606
|
};
|
|
594
607
|
}, [existingContext, isMobile, open]);
|
|
595
608
|
|
|
@@ -611,7 +624,7 @@ function SidebarRoot({
|
|
|
611
624
|
hasIcons,
|
|
612
625
|
};
|
|
613
626
|
|
|
614
|
-
const isCollapsedForStyle = resolvedCollapsible ===
|
|
627
|
+
const isCollapsedForStyle = resolvedCollapsible === "icon" && collapsed;
|
|
615
628
|
|
|
616
629
|
const classes = [
|
|
617
630
|
styles.root,
|
|
@@ -619,14 +632,16 @@ function SidebarRoot({
|
|
|
619
632
|
!isMobile && isCollapsedForStyle && styles.collapsed,
|
|
620
633
|
!isMobile && isCollapsedForStyle && shouldCollapseToZero && styles.collapsedNoIcons,
|
|
621
634
|
isOffcanvasCollapsed && styles.offcanvasCollapsed,
|
|
622
|
-
resolvedPosition ===
|
|
635
|
+
resolvedPosition === "right" && styles.positionRight,
|
|
623
636
|
className,
|
|
624
|
-
]
|
|
637
|
+
]
|
|
638
|
+
.filter(Boolean)
|
|
639
|
+
.join(" ");
|
|
625
640
|
|
|
626
641
|
const style: React.CSSProperties = {
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
642
|
+
"--sidebar-width": resolvedWidth,
|
|
643
|
+
"--sidebar-collapsed-width": resolvedCollapsedWidth,
|
|
644
|
+
"--sidebar-effective-collapsed-width": effectiveCollapsedWidth,
|
|
630
645
|
...styleProp,
|
|
631
646
|
} as React.CSSProperties;
|
|
632
647
|
|
|
@@ -637,24 +652,24 @@ function SidebarRoot({
|
|
|
637
652
|
{...htmlProps}
|
|
638
653
|
className={classes}
|
|
639
654
|
style={style}
|
|
640
|
-
role={isMobile ?
|
|
655
|
+
role={isMobile ? "dialog" : undefined}
|
|
641
656
|
aria-modal={isMobile && open ? true : undefined}
|
|
642
657
|
aria-hidden={isMobile && !open ? true : undefined}
|
|
643
|
-
|
|
644
|
-
|
|
658
|
+
inert={isMobile && !open ? true : undefined}
|
|
659
|
+
aria-label={isMobile ? ariaLabel || "Sidebar navigation" : ariaLabel}
|
|
660
|
+
data-state={isMobile ? (open ? "open" : "closed") : collapsed ? "collapsed" : "expanded"}
|
|
645
661
|
data-position={resolvedPosition}
|
|
646
662
|
data-collapsible={resolvedCollapsible}
|
|
647
|
-
data-
|
|
663
|
+
data-active-indicator={activeIndicator}
|
|
664
|
+
data-icon-collapse={
|
|
665
|
+
resolvedCollapsible === "icon" ? (hasIcons ? "icons" : "none") : undefined
|
|
666
|
+
}
|
|
648
667
|
>
|
|
649
668
|
{children}
|
|
650
669
|
</aside>
|
|
651
670
|
);
|
|
652
671
|
|
|
653
|
-
return
|
|
654
|
-
<SidebarContext.Provider value={contextValue}>
|
|
655
|
-
{content}
|
|
656
|
-
</SidebarContext.Provider>
|
|
657
|
-
);
|
|
672
|
+
return <SidebarContext.Provider value={contextValue}>{content}</SidebarContext.Provider>;
|
|
658
673
|
}
|
|
659
674
|
|
|
660
675
|
function SidebarHeader({
|
|
@@ -665,21 +680,25 @@ function SidebarHeader({
|
|
|
665
680
|
}: SidebarHeaderProps) {
|
|
666
681
|
const { collapsed, isMobile } = useSidebarContext();
|
|
667
682
|
const isCollapsed = collapsed && !isMobile;
|
|
668
|
-
const classes = [styles.header, className].filter(Boolean).join(
|
|
683
|
+
const classes = [styles.header, className].filter(Boolean).join(" ");
|
|
669
684
|
|
|
670
685
|
// Show collapsed content when sidebar is collapsed (and we have it), otherwise show children
|
|
671
686
|
const content = isCollapsed && collapsedContent ? collapsedContent : children;
|
|
672
687
|
|
|
673
|
-
return
|
|
688
|
+
return (
|
|
689
|
+
<div {...htmlProps} className={classes}>
|
|
690
|
+
{content}
|
|
691
|
+
</div>
|
|
692
|
+
);
|
|
674
693
|
}
|
|
675
694
|
|
|
676
695
|
function SidebarNav({
|
|
677
696
|
children,
|
|
678
|
-
|
|
697
|
+
"aria-label": ariaLabel = "Main navigation",
|
|
679
698
|
className,
|
|
680
699
|
...htmlProps
|
|
681
700
|
}: SidebarNavProps) {
|
|
682
|
-
const classes = [styles.nav, className].filter(Boolean).join(
|
|
701
|
+
const classes = [styles.nav, className].filter(Boolean).join(" ");
|
|
683
702
|
return (
|
|
684
703
|
<nav {...htmlProps} className={classes} aria-label={ariaLabel}>
|
|
685
704
|
<ScrollArea orientation="vertical" showFades className={styles.navScrollArea}>
|
|
@@ -700,10 +719,7 @@ function SidebarSection({
|
|
|
700
719
|
}: SidebarSectionProps) {
|
|
701
720
|
const { collapsed, isMobile } = useSidebarContext();
|
|
702
721
|
|
|
703
|
-
const classes = [
|
|
704
|
-
styles.section,
|
|
705
|
-
className
|
|
706
|
-
].filter(Boolean).join(' ');
|
|
722
|
+
const classes = [styles.section, className].filter(Boolean).join(" ");
|
|
707
723
|
|
|
708
724
|
const showLabel = label && (!collapsed || isMobile);
|
|
709
725
|
const showAction = action && (!collapsed || isMobile);
|
|
@@ -719,9 +735,7 @@ function SidebarSection({
|
|
|
719
735
|
{showAction && <div className={styles.sectionActionWrapper}>{action}</div>}
|
|
720
736
|
</div>
|
|
721
737
|
)}
|
|
722
|
-
<ul className={styles.sectionList}>
|
|
723
|
-
{children}
|
|
724
|
-
</ul>
|
|
738
|
+
<ul className={styles.sectionList}>{children}</ul>
|
|
725
739
|
</div>
|
|
726
740
|
);
|
|
727
741
|
}
|
|
@@ -731,18 +745,13 @@ function SidebarSection({
|
|
|
731
745
|
<div {...htmlProps} className={classes} role="group" aria-label={label}>
|
|
732
746
|
<Collapsible defaultOpen={defaultOpen} className={styles.sectionCollapsible}>
|
|
733
747
|
<div className={styles.sectionHeader}>
|
|
734
|
-
<Collapsible.Trigger
|
|
735
|
-
className={styles.sectionTrigger}
|
|
736
|
-
chevronPosition="end"
|
|
737
|
-
>
|
|
748
|
+
<Collapsible.Trigger className={styles.sectionTrigger} chevronPosition="end">
|
|
738
749
|
<span className={styles.sectionLabel}>{label}</span>
|
|
739
750
|
</Collapsible.Trigger>
|
|
740
751
|
{showAction && <div className={styles.sectionActionWrapper}>{action}</div>}
|
|
741
752
|
</div>
|
|
742
753
|
<Collapsible.Content className={styles.sectionContent}>
|
|
743
|
-
<ul className={styles.sectionList}>
|
|
744
|
-
{children}
|
|
745
|
-
</ul>
|
|
754
|
+
<ul className={styles.sectionList}>{children}</ul>
|
|
746
755
|
</Collapsible.Content>
|
|
747
756
|
</Collapsible>
|
|
748
757
|
</div>
|
|
@@ -752,11 +761,11 @@ function SidebarSection({
|
|
|
752
761
|
function SidebarSectionAction({
|
|
753
762
|
children,
|
|
754
763
|
onClick,
|
|
755
|
-
|
|
764
|
+
"aria-label": ariaLabel,
|
|
756
765
|
className,
|
|
757
766
|
...htmlProps
|
|
758
767
|
}: SidebarSectionActionProps) {
|
|
759
|
-
const classes = [styles.sectionAction, className].filter(Boolean).join(
|
|
768
|
+
const classes = [styles.sectionAction, className].filter(Boolean).join(" ");
|
|
760
769
|
|
|
761
770
|
return (
|
|
762
771
|
<button
|
|
@@ -806,7 +815,9 @@ function SidebarItem({
|
|
|
806
815
|
hasSubmenu && styles.itemHasSubmenu,
|
|
807
816
|
expanded && styles.itemExpanded,
|
|
808
817
|
className,
|
|
809
|
-
]
|
|
818
|
+
]
|
|
819
|
+
.filter(Boolean)
|
|
820
|
+
.join(" ");
|
|
810
821
|
|
|
811
822
|
const handleClick = (e: React.MouseEvent<HTMLElement>) => {
|
|
812
823
|
if (disabled) {
|
|
@@ -825,9 +836,9 @@ function SidebarItem({
|
|
|
825
836
|
let labelText: string | undefined;
|
|
826
837
|
if (asChild && React.isValidElement(children)) {
|
|
827
838
|
const childProps = children.props as { children?: React.ReactNode };
|
|
828
|
-
labelText = typeof childProps.children ===
|
|
839
|
+
labelText = typeof childProps.children === "string" ? childProps.children : undefined;
|
|
829
840
|
} else {
|
|
830
|
-
labelText = typeof children ===
|
|
841
|
+
labelText = typeof children === "string" ? children : undefined;
|
|
831
842
|
}
|
|
832
843
|
|
|
833
844
|
const itemContent = (
|
|
@@ -854,10 +865,10 @@ function SidebarItem({
|
|
|
854
865
|
const itemProps = {
|
|
855
866
|
className: classes,
|
|
856
867
|
onClick: handleClick,
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
868
|
+
"aria-current": active ? ("page" as const) : undefined,
|
|
869
|
+
"aria-disabled": disabled || undefined,
|
|
870
|
+
"aria-expanded": hasSubmenu ? expanded : undefined,
|
|
871
|
+
"aria-label": isCollapsed ? labelText : undefined,
|
|
861
872
|
tabIndex: disabled ? -1 : 0,
|
|
862
873
|
};
|
|
863
874
|
|
|
@@ -872,12 +883,11 @@ function SidebarItem({
|
|
|
872
883
|
itemElement = React.cloneElement(children, {
|
|
873
884
|
...itemProps,
|
|
874
885
|
...rest,
|
|
875
|
-
onClick: composeEventHandlers(
|
|
876
|
-
|
|
877
|
-
(event: React.MouseEvent<HTMLElement>) => handleClick(event)
|
|
886
|
+
onClick: composeEventHandlers(childProps.onClick, (event: React.MouseEvent<HTMLElement>) =>
|
|
887
|
+
handleClick(event)
|
|
878
888
|
),
|
|
879
889
|
// Merge classNames
|
|
880
|
-
className: [classes, childProps.className].filter(Boolean).join(
|
|
890
|
+
className: [classes, childProps.className].filter(Boolean).join(" "),
|
|
881
891
|
children: itemContent,
|
|
882
892
|
} as React.HTMLAttributes<HTMLElement>);
|
|
883
893
|
} else if (href) {
|
|
@@ -903,10 +913,9 @@ function SidebarItem({
|
|
|
903
913
|
itemElement
|
|
904
914
|
);
|
|
905
915
|
|
|
906
|
-
const wrapperClasses = [
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
].filter(Boolean).join(' ');
|
|
916
|
+
const wrapperClasses = [styles.itemWrapper, expanded && styles.itemExpanded]
|
|
917
|
+
.filter(Boolean)
|
|
918
|
+
.join(" ");
|
|
910
919
|
|
|
911
920
|
return <li className={wrapperClasses}>{wrappedItem}</li>;
|
|
912
921
|
}
|
|
@@ -932,7 +941,9 @@ function SidebarSubItem({
|
|
|
932
941
|
active && styles.subItemActive,
|
|
933
942
|
disabled && styles.subItemDisabled,
|
|
934
943
|
className,
|
|
935
|
-
]
|
|
944
|
+
]
|
|
945
|
+
.filter(Boolean)
|
|
946
|
+
.join(" ");
|
|
936
947
|
|
|
937
948
|
const handleClick = (e: React.MouseEvent<HTMLElement>) => {
|
|
938
949
|
if (disabled) {
|
|
@@ -945,8 +956,8 @@ function SidebarSubItem({
|
|
|
945
956
|
const itemProps = {
|
|
946
957
|
className: classes,
|
|
947
958
|
onClick: handleClick,
|
|
948
|
-
|
|
949
|
-
|
|
959
|
+
"aria-current": active ? ("page" as const) : undefined,
|
|
960
|
+
"aria-disabled": disabled,
|
|
950
961
|
tabIndex: disabled ? -1 : 0,
|
|
951
962
|
};
|
|
952
963
|
|
|
@@ -966,21 +977,23 @@ function SidebarSubItem({
|
|
|
966
977
|
function SidebarSubmenu({ children }: { children: React.ReactNode }) {
|
|
967
978
|
return (
|
|
968
979
|
<li className={styles.submenuWrapper}>
|
|
969
|
-
<ul className={styles.submenu}>
|
|
970
|
-
{children}
|
|
971
|
-
</ul>
|
|
980
|
+
<ul className={styles.submenu}>{children}</ul>
|
|
972
981
|
</li>
|
|
973
982
|
);
|
|
974
983
|
}
|
|
975
984
|
|
|
976
985
|
function SidebarFooter({ children, className, ...htmlProps }: SidebarFooterProps) {
|
|
977
|
-
const classes = [styles.footer, className].filter(Boolean).join(
|
|
978
|
-
return
|
|
986
|
+
const classes = [styles.footer, className].filter(Boolean).join(" ");
|
|
987
|
+
return (
|
|
988
|
+
<div {...htmlProps} className={classes}>
|
|
989
|
+
{children}
|
|
990
|
+
</div>
|
|
991
|
+
);
|
|
979
992
|
}
|
|
980
993
|
|
|
981
994
|
function SidebarTrigger({
|
|
982
995
|
children,
|
|
983
|
-
|
|
996
|
+
"aria-label": ariaLabel = "Toggle navigation",
|
|
984
997
|
className,
|
|
985
998
|
onClick,
|
|
986
999
|
...htmlProps
|
|
@@ -992,7 +1005,7 @@ function SidebarTrigger({
|
|
|
992
1005
|
return null;
|
|
993
1006
|
}
|
|
994
1007
|
|
|
995
|
-
const classes = [styles.trigger, className].filter(Boolean).join(
|
|
1008
|
+
const classes = [styles.trigger, className].filter(Boolean).join(" ");
|
|
996
1009
|
|
|
997
1010
|
return (
|
|
998
1011
|
<button
|
|
@@ -1017,7 +1030,7 @@ function SidebarOverlay({ className, onClick, ...htmlProps }: SidebarOverlayProp
|
|
|
1017
1030
|
return null;
|
|
1018
1031
|
}
|
|
1019
1032
|
|
|
1020
|
-
const classes = [styles.overlay, className].filter(Boolean).join(
|
|
1033
|
+
const classes = [styles.overlay, className].filter(Boolean).join(" ");
|
|
1021
1034
|
|
|
1022
1035
|
return (
|
|
1023
1036
|
<div
|
|
@@ -1025,13 +1038,13 @@ function SidebarOverlay({ className, onClick, ...htmlProps }: SidebarOverlayProp
|
|
|
1025
1038
|
className={classes}
|
|
1026
1039
|
onClick={composeEventHandlers(onClick, () => setOpen(false))}
|
|
1027
1040
|
aria-hidden="true"
|
|
1028
|
-
data-state={open ?
|
|
1041
|
+
data-state={open ? "open" : "closed"}
|
|
1029
1042
|
/>
|
|
1030
1043
|
);
|
|
1031
1044
|
}
|
|
1032
1045
|
|
|
1033
1046
|
function SidebarCollapseToggle({
|
|
1034
|
-
|
|
1047
|
+
"aria-label": ariaLabel,
|
|
1035
1048
|
className,
|
|
1036
1049
|
onClick,
|
|
1037
1050
|
...htmlProps
|
|
@@ -1039,20 +1052,16 @@ function SidebarCollapseToggle({
|
|
|
1039
1052
|
const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();
|
|
1040
1053
|
|
|
1041
1054
|
// Don't show on mobile or when collapsing is disabled
|
|
1042
|
-
if (isMobile || collapsible ===
|
|
1055
|
+
if (isMobile || collapsible === "none") {
|
|
1043
1056
|
return null;
|
|
1044
1057
|
}
|
|
1045
1058
|
|
|
1046
|
-
const shouldFloat =
|
|
1047
|
-
(collapsible ===
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
shouldFloat && styles.collapseToggleFloating,
|
|
1053
|
-
className,
|
|
1054
|
-
].filter(Boolean).join(' ');
|
|
1055
|
-
const label = ariaLabel || (collapsed ? 'Expand sidebar' : 'Collapse sidebar');
|
|
1059
|
+
const shouldFloat =
|
|
1060
|
+
collapsed && ((collapsible === "icon" && !hasIcons) || collapsible === "offcanvas");
|
|
1061
|
+
const classes = [styles.collapseToggle, shouldFloat && styles.collapseToggleFloating, className]
|
|
1062
|
+
.filter(Boolean)
|
|
1063
|
+
.join(" ");
|
|
1064
|
+
const label = ariaLabel || (collapsed ? "Expand sidebar" : "Collapse sidebar");
|
|
1056
1065
|
|
|
1057
1066
|
return (
|
|
1058
1067
|
<button
|
|
@@ -1071,21 +1080,19 @@ function SidebarRail({
|
|
|
1071
1080
|
className,
|
|
1072
1081
|
onClick,
|
|
1073
1082
|
title,
|
|
1074
|
-
|
|
1083
|
+
"aria-label": ariaLabel,
|
|
1075
1084
|
...htmlProps
|
|
1076
1085
|
}: SidebarRailProps) {
|
|
1077
1086
|
const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();
|
|
1078
1087
|
|
|
1079
1088
|
// Don't show on mobile or when collapsing is disabled
|
|
1080
|
-
if (isMobile || collapsible ===
|
|
1089
|
+
if (isMobile || collapsible === "none") {
|
|
1081
1090
|
return null;
|
|
1082
1091
|
}
|
|
1083
1092
|
|
|
1084
|
-
const classes = [
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
className,
|
|
1088
|
-
].filter(Boolean).join(' ');
|
|
1093
|
+
const classes = [styles.rail, collapsed && styles.railCollapsed, className]
|
|
1094
|
+
.filter(Boolean)
|
|
1095
|
+
.join(" ");
|
|
1089
1096
|
|
|
1090
1097
|
return (
|
|
1091
1098
|
<button
|
|
@@ -1093,8 +1100,8 @@ function SidebarRail({
|
|
|
1093
1100
|
type="button"
|
|
1094
1101
|
className={classes}
|
|
1095
1102
|
onClick={composeEventHandlers(onClick, () => setCollapsed(!collapsed))}
|
|
1096
|
-
aria-label={ariaLabel ?? (collapsed ?
|
|
1097
|
-
title={title ?? (collapsed ?
|
|
1103
|
+
aria-label={ariaLabel ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")}
|
|
1104
|
+
title={title ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")}
|
|
1098
1105
|
/>
|
|
1099
1106
|
);
|
|
1100
1107
|
}
|
|
@@ -1108,8 +1115,8 @@ function SidebarMenuSkeleton({
|
|
|
1108
1115
|
const { collapsed, isMobile } = useSidebarContext();
|
|
1109
1116
|
const isCollapsed = collapsed && !isMobile;
|
|
1110
1117
|
|
|
1111
|
-
const classes = [styles.menuSkeleton, className].filter(Boolean).join(
|
|
1112
|
-
const labelWidths = [
|
|
1118
|
+
const classes = [styles.menuSkeleton, className].filter(Boolean).join(" ");
|
|
1119
|
+
const labelWidths = ["64%", "72%", "68%", "79%", "74%", "66%", "83%", "70%"];
|
|
1113
1120
|
|
|
1114
1121
|
return (
|
|
1115
1122
|
<div {...htmlProps} className={classes} aria-hidden="true">
|