@usefragments/ui 1.6.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -66
- 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/nav-glyph.cjs +139 -0
- package/dist/assets/nav-glyph.d.ts +28 -0
- package/dist/assets/nav-glyph.d.ts.map +1 -0
- package/dist/assets/nav-glyph.js +139 -0
- package/dist/assets/nav-glyph.module.scss.cjs +71 -0
- package/dist/assets/nav-glyph.module.scss.js +71 -0
- package/dist/assets/ui.css +6885 -6308
- package/dist/blocks/components/StatsCard.d.ts +1 -1
- package/dist/blocks/components/StatsCard.d.ts.map +1 -1
- package/dist/chart.cjs +24 -6
- package/dist/chart.js +24 -6
- package/dist/codeblock.cjs +76 -43
- package/dist/codeblock.js +71 -38
- package/dist/colorpicker.cjs +4 -1
- package/dist/colorpicker.js +4 -1
- 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 +23 -20
- package/dist/components/Alert/Alert.module.scss.js +23 -20
- package/dist/components/Alert/index.cjs +20 -8
- package/dist/components/Alert/index.d.ts +17 -11
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +20 -8
- 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 +2 -2
- package/dist/components/AppShell/index.js +2 -2
- package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
- package/dist/components/Avatar/Avatar.module.scss.js +14 -14
- package/dist/components/Badge/Badge.module.scss.cjs +33 -31
- package/dist/components/Badge/Badge.module.scss.js +33 -31
- package/dist/components/Badge/index.cjs +13 -3
- package/dist/components/Badge/index.d.ts +18 -13
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js +13 -3
- 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 +11 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +11 -8
- package/dist/components/Breadcrumbs/index.cjs +1 -1
- package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/index.js +1 -1
- package/dist/components/Button/Button.module.scss.cjs +36 -27
- package/dist/components/Button/Button.module.scss.js +36 -27
- package/dist/components/Button/index.cjs +20 -4
- package/dist/components/Button/index.d.ts +18 -10
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +20 -4
- 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 +31 -26
- package/dist/components/Card/Card.module.scss.js +32 -27
- package/dist/components/Card/index.cjs +16 -3
- package/dist/components/Card/index.d.ts +23 -15
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +16 -3
- 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.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +11 -11
- package/dist/components/Checkbox/Checkbox.module.scss.js +11 -11
- package/dist/components/Checkbox/index.cjs +4 -4
- package/dist/components/Checkbox/index.d.ts +4 -6
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +4 -4
- package/dist/components/Chip/Chip.module.scss.cjs +19 -19
- package/dist/components/Chip/Chip.module.scss.js +19 -19
- package/dist/components/Chip/index.cjs +3 -3
- package/dist/components/Chip/index.d.ts +8 -3
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +3 -3
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +26 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +26 -23
- 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 +20 -5
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
- package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
- package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
- package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
- package/dist/components/ColorPicker/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
- package/dist/components/Combobox/Combobox.module.scss.js +21 -21
- package/dist/components/Combobox/index.cjs +26 -6
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +26 -6
- package/dist/components/Command/Command.module.scss.cjs +14 -11
- package/dist/components/Command/Command.module.scss.js +14 -11
- package/dist/components/Command/index.cjs +28 -16
- package/dist/components/Command/index.d.ts +8 -3
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +28 -16
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- package/dist/components/ConversationList/index.cjs +2 -2
- package/dist/components/ConversationList/index.js +2 -2
- 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 +31 -28
- package/dist/components/DataTable/DataTable.module.scss.js +31 -28
- package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -1
- 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 +13 -16
- package/dist/components/Dialog/index.d.ts +11 -10
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +13 -16
- package/dist/components/Drawer/Drawer.module.scss.cjs +39 -39
- package/dist/components/Drawer/Drawer.module.scss.js +40 -40
- package/dist/components/Drawer/index.cjs +2 -2
- package/dist/components/Drawer/index.d.ts +5 -4
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +2 -2
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- 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 +11 -8
- package/dist/components/EmptyState/EmptyState.module.scss.js +11 -8
- package/dist/components/EmptyState/index.cjs +13 -6
- package/dist/components/EmptyState/index.d.ts +13 -5
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +13 -6
- package/dist/components/Field/Field.module.scss.cjs +5 -5
- package/dist/components/Field/Field.module.scss.js +5 -5
- package/dist/components/Field/index.cjs +9 -1
- package/dist/components/Field/index.d.ts.map +1 -1
- package/dist/components/Field/index.js +9 -1
- package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
- package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
- package/dist/components/Grid/Grid.module.scss.cjs +54 -54
- package/dist/components/Grid/Grid.module.scss.js +54 -54
- package/dist/components/Grid/index.cjs +1 -1
- package/dist/components/Grid/index.js +1 -1
- 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 +17 -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 +17 -38
- package/dist/components/Icon/Icon.module.scss.cjs +30 -33
- package/dist/components/Icon/Icon.module.scss.js +30 -33
- package/dist/components/Icon/index.cjs +15 -14
- package/dist/components/Icon/index.d.ts +23 -12
- package/dist/components/Icon/index.d.ts.map +1 -1
- package/dist/components/Icon/index.js +15 -14
- package/dist/components/IconButton/IconButton.module.scss.cjs +12 -12
- package/dist/components/IconButton/IconButton.module.scss.js +12 -12
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts +4 -4
- 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 +15 -21
- package/dist/components/Input/Input.module.scss.js +15 -21
- package/dist/components/Input/index.cjs +2 -14
- package/dist/components/Input/index.d.ts +0 -2
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js +2 -14
- package/dist/components/Link/Link.module.scss.cjs +26 -14
- package/dist/components/Link/Link.module.scss.js +26 -14
- package/dist/components/Link/index.cjs +13 -2
- package/dist/components/Link/index.d.ts +11 -4
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/Link/index.js +13 -2
- package/dist/components/List/List.module.scss.cjs +23 -19
- package/dist/components/List/List.module.scss.js +23 -19
- package/dist/components/List/index.cjs +7 -7
- package/dist/components/List/index.d.ts +10 -7
- package/dist/components/List/index.d.ts.map +1 -1
- package/dist/components/List/index.js +7 -7
- package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
- package/dist/components/Listbox/Listbox.module.scss.js +8 -8
- 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 +5 -5
- package/dist/components/Loading/index.d.ts +8 -7
- package/dist/components/Loading/index.d.ts.map +1 -1
- package/dist/components/Loading/index.js +5 -5
- 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 +14 -14
- package/dist/components/Menu/Menu.module.scss.js +14 -14
- package/dist/components/Message/Message.module.scss.cjs +20 -20
- package/dist/components/Message/Message.module.scss.js +20 -20
- package/dist/components/Message/index.cjs +1 -1
- package/dist/components/Message/index.d.ts +1 -1
- package/dist/components/Message/index.js +1 -1
- 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 +10 -10
- package/dist/components/Pagination/Pagination.module.scss.js +10 -10
- 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 +28 -25
- package/dist/components/Progress/Progress.module.scss.js +28 -25
- package/dist/components/Progress/index.cjs +21 -12
- package/dist/components/Progress/index.d.ts +10 -6
- package/dist/components/Progress/index.d.ts.map +1 -1
- package/dist/components/Progress/index.js +21 -12
- package/dist/components/Prompt/Prompt.module.scss.cjs +30 -30
- package/dist/components/Prompt/Prompt.module.scss.js +30 -30
- package/dist/components/Prompt/index.cjs +7 -7
- package/dist/components/Prompt/index.d.ts +11 -9
- package/dist/components/Prompt/index.d.ts.map +1 -1
- package/dist/components/Prompt/index.js +7 -7
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +20 -17
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +20 -17
- package/dist/components/RadioGroup/index.cjs +10 -5
- package/dist/components/RadioGroup/index.d.ts +11 -7
- package/dist/components/RadioGroup/index.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js +10 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
- package/dist/components/ScrollArea/index.d.ts +4 -4
- package/dist/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/components/ScrollArea/scroll-state.d.ts +5 -5
- 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 +26 -20
- package/dist/components/Select/index.d.ts +5 -5
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +26 -20
- package/dist/components/Separator/Separator.module.scss.cjs +25 -19
- package/dist/components/Separator/Separator.module.scss.js +25 -19
- package/dist/components/Separator/index.cjs +10 -8
- package/dist/components/Separator/index.d.ts +4 -2
- package/dist/components/Separator/index.d.ts.map +1 -1
- package/dist/components/Separator/index.js +10 -8
- 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 +15 -38
- package/dist/components/Sidebar/index.d.ts +19 -19
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +15 -38
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
- package/dist/components/Skeleton/index.cjs +7 -7
- package/dist/components/Skeleton/index.d.ts +8 -7
- package/dist/components/Skeleton/index.d.ts.map +1 -1
- package/dist/components/Skeleton/index.js +7 -7
- 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 -25
- package/dist/components/Stack/Stack.module.scss.js +25 -25
- package/dist/components/Stack/index.cjs +1 -1
- package/dist/components/Stack/index.js +1 -1
- package/dist/components/Switch/Switch.module.scss.cjs +9 -9
- package/dist/components/Switch/Switch.module.scss.js +9 -9
- package/dist/components/Table/Table.module.scss.cjs +19 -19
- package/dist/components/Table/Table.module.scss.js +19 -19
- 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 +14 -10
- 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 +14 -10
- package/dist/components/Tabs/Tabs.module.scss.cjs +18 -18
- package/dist/components/Tabs/Tabs.module.scss.js +18 -18
- package/dist/components/Tabs/index.cjs +30 -11
- package/dist/components/Tabs/index.d.ts +8 -6
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +30 -11
- package/dist/components/Text/Text.module.scss.cjs +109 -97
- package/dist/components/Text/Text.module.scss.js +109 -97
- package/dist/components/Text/index.cjs +45 -41
- package/dist/components/Text/index.d.ts +24 -19
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +45 -41
- package/dist/components/Textarea/Textarea.module.scss.cjs +22 -28
- package/dist/components/Textarea/Textarea.module.scss.js +22 -28
- package/dist/components/Textarea/index.cjs +3 -10
- package/dist/components/Textarea/index.d.ts +0 -2
- package/dist/components/Textarea/index.d.ts.map +1 -1
- package/dist/components/Textarea/index.js +3 -10
- package/dist/components/Theme/index.cjs +22 -5
- package/dist/components/Theme/index.d.ts +6 -12
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +22 -5
- package/dist/components/ThemeToggle/ThemeButton.cjs +51 -0
- package/dist/components/ThemeToggle/ThemeButton.d.ts +16 -0
- package/dist/components/ThemeToggle/ThemeButton.d.ts.map +1 -0
- package/dist/components/ThemeToggle/ThemeButton.js +34 -0
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +6 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -6
- package/dist/components/ThemeToggle/icons.cjs +48 -0
- package/dist/components/ThemeToggle/icons.d.ts +10 -0
- package/dist/components/ThemeToggle/icons.d.ts.map +1 -0
- package/dist/components/ThemeToggle/icons.js +48 -0
- package/dist/components/ThemeToggle/index.cjs +6 -50
- package/dist/components/ThemeToggle/index.d.ts +5 -3
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +3 -47
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +18 -15
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +18 -15
- package/dist/components/ThinkingIndicator/index.cjs +7 -8
- package/dist/components/ThinkingIndicator/index.d.ts +6 -5
- package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
- package/dist/components/ThinkingIndicator/index.js +7 -8
- package/dist/components/Toast/Toast.module.scss.cjs +28 -29
- package/dist/components/Toast/Toast.module.scss.js +29 -30
- package/dist/components/Toast/index.cjs +28 -30
- package/dist/components/Toast/index.d.ts +9 -8
- package/dist/components/Toast/index.d.ts.map +1 -1
- package/dist/components/Toast/index.js +28 -30
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +21 -19
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +22 -20
- package/dist/components/ToggleGroup/index.cjs +4 -5
- package/dist/components/ToggleGroup/index.d.ts +7 -6
- package/dist/components/ToggleGroup/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/index.js +4 -5
- 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-virtual.cjs +3 -2
- package/dist/data-table-virtual.js +3 -2
- package/dist/data-table.cjs +3 -2
- package/dist/data-table.js +3 -2
- package/dist/datepicker.cjs +26 -13
- package/dist/datepicker.js +26 -13
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +6 -2
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +21 -29
- package/dist/measurements/generated.cjs +46 -94
- package/dist/measurements/generated.d.ts +44 -92
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +46 -94
- package/dist/measurements/index.d.ts +1 -1
- package/dist/measurements/index.d.ts.map +1 -1
- 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/seed-derivation.cjs +10 -7
- package/dist/utils/seed-derivation.d.ts +1 -3
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +10 -7
- package/dist/utils/theme-presets.cjs +5 -10
- package/dist/utils/theme-presets.d.ts +1 -2
- package/dist/utils/theme-presets.d.ts.map +1 -1
- package/dist/utils/theme-presets.js +5 -10
- package/fragments.json +1 -1
- package/package.json +9 -10
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/assets/nav-glyph.module.scss +166 -0
- package/src/assets/nav-glyph.tsx +188 -0
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Accordion/Accordion.module.scss +5 -3
- package/src/components/Alert/Alert.contract.json +49 -65
- package/src/components/Alert/Alert.module.scss +57 -47
- package/src/components/Alert/index.tsx +72 -39
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +99 -54
- package/src/components/AppShell/index.tsx +2 -2
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +4 -2
- package/src/components/Badge/Badge.contract.json +86 -55
- package/src/components/Badge/Badge.module.scss +80 -48
- package/src/components/Badge/index.tsx +34 -17
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/Box.module.scss +7 -6
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +27 -12
- package/src/components/Breadcrumbs/index.tsx +5 -1
- package/src/components/Button/Button.module.scss +261 -185
- package/src/components/Button/index.tsx +41 -28
- package/src/components/ButtonGroup/ButtonGroup.contract.json +34 -49
- package/src/components/ButtonGroup/ButtonGroup.module.scss +8 -6
- package/src/components/Card/Card.consumer-fixture.module.scss +5 -2
- package/src/components/Card/Card.module.scss +97 -76
- package/src/components/Card/index.tsx +44 -20
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/Chart.module.scss +6 -5
- package/src/components/Chart/index.tsx +36 -6
- package/src/components/Checkbox/Checkbox.contract.json +28 -27
- package/src/components/Checkbox/Checkbox.module.scss +47 -54
- package/src/components/Checkbox/index.tsx +10 -10
- package/src/components/Chip/Chip.contract.json +38 -45
- package/src/components/Chip/Chip.module.scss +24 -23
- package/src/components/Chip/index.tsx +12 -7
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +75 -73
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +114 -51
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/Collapsible/Collapsible.module.scss +1 -7
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +34 -24
- package/src/components/ColorPicker/index.tsx +6 -1
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +16 -19
- package/src/components/Combobox/index.tsx +41 -6
- package/src/components/Command/Command.contract.json +28 -44
- package/src/components/Command/Command.module.scss +19 -21
- package/src/components/Command/index.tsx +64 -47
- package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/ConversationList/ConversationList.module.scss +2 -3
- package/src/components/ConversationList/index.tsx +2 -2
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +24 -17
- package/src/components/DataTable/DataTable.virtual.tsx +3 -2
- package/src/components/DataTable/index.tsx +9 -8
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +41 -44
- package/src/components/DatePicker/index.tsx +23 -9
- package/src/components/Dialog/Dialog.module.scss +26 -32
- package/src/components/Dialog/index.tsx +51 -39
- package/src/components/Drawer/Drawer.contract.json +28 -42
- package/src/components/Drawer/Drawer.module.scss +123 -64
- package/src/components/Drawer/index.tsx +7 -5
- package/src/components/Editor/Editor.contract.json +32 -49
- package/src/components/Editor/Editor.module.scss +60 -25
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +33 -45
- package/src/components/EmptyState/EmptyState.module.scss +37 -21
- package/src/components/EmptyState/index.tsx +56 -23
- package/src/components/Field/Field.contract.json +28 -46
- package/src/components/Field/Field.module.scss +2 -1
- package/src/components/Field/index.tsx +5 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +15 -7
- package/src/components/Form/Form.contract.json +23 -23
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/Grid.module.scss +2 -2
- package/src/components/Grid/index.tsx +10 -10
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +57 -54
- package/src/components/Header/index.tsx +134 -122
- package/src/components/Icon/Icon.contract.json +37 -81
- package/src/components/Icon/Icon.module.scss +13 -12
- package/src/components/Icon/index.tsx +31 -31
- package/src/components/IconButton/IconButton.contract.json +37 -21
- package/src/components/IconButton/IconButton.module.scss +19 -11
- package/src/components/IconButton/index.tsx +6 -5
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +25 -44
- package/src/components/Input/Input.module.scss +6 -55
- package/src/components/Input/index.tsx +2 -18
- package/src/components/Link/Link.contract.json +46 -58
- package/src/components/Link/Link.module.scss +41 -10
- package/src/components/Link/index.tsx +27 -6
- package/src/components/List/List.contract.json +33 -62
- package/src/components/List/List.module.scss +10 -5
- package/src/components/List/index.tsx +17 -13
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Listbox/Listbox.module.scss +14 -20
- package/src/components/Loading/Loading.contract.json +41 -65
- package/src/components/Loading/Loading.module.scss +37 -31
- package/src/components/Loading/index.tsx +15 -14
- package/src/components/Main/Main.contract.json +17 -9
- package/src/components/Markdown/Markdown.contract.json +22 -43
- package/src/components/Markdown/Markdown.module.scss +45 -6
- package/src/components/Markdown/index.tsx +48 -49
- package/src/components/Menu/Menu.contract.json +30 -46
- package/src/components/Menu/Menu.module.scss +32 -16
- package/src/components/Message/Message.contract.json +31 -54
- package/src/components/Message/Message.module.scss +18 -9
- package/src/components/Message/index.tsx +2 -2
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +66 -66
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +9 -16
- package/src/components/Popover/Popover.contract.json +28 -50
- package/src/components/Popover/Popover.module.scss +30 -28
- package/src/components/Progress/Progress.contract.json +39 -35
- package/src/components/Progress/Progress.module.scss +16 -10
- package/src/components/Progress/index.tsx +34 -16
- package/src/components/Prompt/Prompt.contract.json +40 -56
- package/src/components/Prompt/Prompt.module.scss +49 -48
- package/src/components/Prompt/index.tsx +17 -15
- package/src/components/RadioGroup/RadioGroup.contract.json +29 -28
- package/src/components/RadioGroup/RadioGroup.module.scss +50 -45
- package/src/components/RadioGroup/index.tsx +23 -10
- package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
- package/src/components/ScrollArea/ScrollArea.module.scss +45 -48
- package/src/components/ScrollArea/index.tsx +16 -16
- package/src/components/ScrollArea/scroll-state.ts +24 -24
- package/src/components/Select/Select.module.scss +20 -19
- package/src/components/Select/index.tsx +26 -24
- package/src/components/Separator/Separator.contract.json +29 -53
- package/src/components/Separator/Separator.module.scss +24 -40
- package/src/components/Separator/index.tsx +16 -11
- package/src/components/Sidebar/Sidebar.contract.json +35 -67
- package/src/components/Sidebar/Sidebar.module.scss +94 -88
- package/src/components/Sidebar/index.tsx +167 -167
- package/src/components/Skeleton/Skeleton.contract.json +34 -60
- package/src/components/Skeleton/Skeleton.module.scss +50 -26
- package/src/components/Skeleton/index.tsx +16 -15
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +9 -22
- package/src/components/Stack/Stack.contract.json +30 -57
- package/src/components/Stack/Stack.module.scss +26 -24
- package/src/components/Stack/index.tsx +3 -3
- package/src/components/Switch/Switch.contract.json +33 -46
- package/src/components/Switch/Switch.module.scss +106 -59
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +24 -16
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +17 -13
- package/src/components/TableOfContents/index.tsx +27 -10
- package/src/components/Tabs/Tabs.contract.json +35 -56
- package/src/components/Tabs/Tabs.module.scss +27 -31
- package/src/components/Tabs/index.tsx +30 -15
- package/src/components/Text/Text.contract.json +52 -72
- package/src/components/Text/Text.module.scss +34 -18
- package/src/components/Text/index.tsx +123 -83
- package/src/components/Textarea/Textarea.contract.json +24 -55
- package/src/components/Textarea/Textarea.module.scss +22 -52
- package/src/components/Textarea/index.tsx +3 -14
- package/src/components/Theme/Theme.contract.json +35 -53
- package/src/components/Theme/index.tsx +41 -13
- package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
- package/src/components/ThemeToggle/ThemeToggle.module.scss +20 -27
- package/src/components/ThemeToggle/icons.tsx +46 -0
- package/src/components/ThemeToggle/index.tsx +9 -55
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +34 -50
- package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
- package/src/components/ThinkingIndicator/index.tsx +12 -14
- package/src/components/Toast/Toast.contract.json +55 -49
- package/src/components/Toast/Toast.module.scss +50 -105
- package/src/components/Toast/index.tsx +39 -34
- package/src/components/ToggleGroup/ToggleGroup.contract.json +39 -40
- package/src/components/ToggleGroup/ToggleGroup.module.scss +30 -27
- package/src/components/ToggleGroup/index.tsx +11 -11
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/Tooltip.module.scss +16 -10
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +16 -12
- package/src/measurements/MeasurementTargets.module.scss +6 -7
- package/src/measurements/generated.ts +46 -97
- package/src/measurements/index.ts +0 -1
- package/src/measurements/measurements.json +44 -116
- package/src/recipes/_action.scss +4 -4
- package/src/recipes/_boolean-range.scss +12 -16
- package/src/recipes/_feedback.scss +17 -16
- package/src/recipes/_field.scss +28 -16
- package/src/recipes/_layout.scss +14 -7
- package/src/recipes/_navigation.scss +84 -29
- package/src/recipes/_overlay.scss +143 -43
- package/src/recipes/_popup.scss +54 -34
- package/src/recipes/_prose.scss +48 -28
- package/src/recipes/_representation.scss +10 -9
- package/src/recipes/_segmented.scss +1 -1
- package/src/recipes/_table-chrome.scss +42 -17
- package/src/recipes/_target.scss +2 -4
- package/src/recipes/_typography.scss +10 -0
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +31 -25
- package/src/tokens/_component-properties.scss +19 -1
- package/src/tokens/_computed.scss +32 -49
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +62 -44
- package/src/tokens/_measurements.generated.scss +119 -249
- package/src/tokens/_mixins.scss +49 -48
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_property-registrations.scss +9 -0
- package/src/tokens/_seeds.scss +20 -31
- package/src/tokens/_variables.scss +251 -94
- 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/seed-derivation.ts +11 -14
- package/src/utils/theme-presets.ts +5 -12
- package/dist/blocks/AccountSettings.block.d.ts +0 -3
- package/dist/blocks/AccountSettings.block.d.ts.map +0 -1
- package/dist/blocks/ActivityFeedSkeleton.block.d.ts +0 -3
- package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/BlogEditor.block.d.ts +0 -3
- package/dist/blocks/BlogEditor.block.d.ts.map +0 -1
- package/dist/blocks/ChatInterface.block.d.ts +0 -3
- package/dist/blocks/ChatInterface.block.d.ts.map +0 -1
- package/dist/blocks/ChatMessages.block.d.ts +0 -3
- package/dist/blocks/ChatMessages.block.d.ts.map +0 -1
- package/dist/blocks/CheckoutForm.block.d.ts +0 -3
- package/dist/blocks/CheckoutForm.block.d.ts.map +0 -1
- package/dist/blocks/CommandPalette.block.d.ts +0 -3
- package/dist/blocks/CommandPalette.block.d.ts.map +0 -1
- package/dist/blocks/ContactForm.block.d.ts +0 -3
- package/dist/blocks/ContactForm.block.d.ts.map +0 -1
- package/dist/blocks/DashboardPage.block.d.ts +0 -3
- package/dist/blocks/DashboardPage.block.d.ts.map +0 -1
- package/dist/blocks/DashboardSkeleton.block.d.ts +0 -3
- package/dist/blocks/DashboardSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/DataTable.block.d.ts +0 -3
- package/dist/blocks/DataTable.block.d.ts.map +0 -1
- package/dist/blocks/EmptyState.block.d.ts +0 -3
- package/dist/blocks/EmptyState.block.d.ts.map +0 -1
- package/dist/blocks/FAQSection.block.d.ts +0 -3
- package/dist/blocks/FAQSection.block.d.ts.map +0 -1
- package/dist/blocks/FeatureGrid.block.d.ts +0 -3
- package/dist/blocks/FeatureGrid.block.d.ts.map +0 -1
- package/dist/blocks/HeroSection.block.d.ts +0 -3
- package/dist/blocks/HeroSection.block.d.ts.map +0 -1
- package/dist/blocks/NavigationHeader.block.d.ts +0 -3
- package/dist/blocks/NavigationHeader.block.d.ts.map +0 -1
- package/dist/blocks/PaginatedTable.block.d.ts +0 -3
- package/dist/blocks/PaginatedTable.block.d.ts.map +0 -1
- package/dist/blocks/PricingComparison.block.d.ts +0 -3
- package/dist/blocks/PricingComparison.block.d.ts.map +0 -1
- package/dist/blocks/ProductCard.block.d.ts +0 -3
- package/dist/blocks/ProductCard.block.d.ts.map +0 -1
- package/dist/blocks/RegistrationForm.block.d.ts +0 -3
- package/dist/blocks/RegistrationForm.block.d.ts.map +0 -1
- package/dist/blocks/SettingsDrawer.block.d.ts +0 -3
- package/dist/blocks/SettingsDrawer.block.d.ts.map +0 -1
- package/dist/blocks/SettingsPanel.block.d.ts +0 -3
- package/dist/blocks/SettingsPanel.block.d.ts.map +0 -1
- package/dist/blocks/ShoppingCart.block.d.ts +0 -3
- package/dist/blocks/ShoppingCart.block.d.ts.map +0 -1
- package/dist/blocks/StatsCardSkeleton.block.d.ts +0 -3
- package/dist/blocks/StatsCardSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/TableSkeleton.block.d.ts +0 -3
- package/dist/blocks/TableSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/ThinkingStates.block.d.ts +0 -3
- package/dist/blocks/ThinkingStates.block.d.ts.map +0 -1
- package/dist/components/Toggle/index.d.ts +0 -3
- package/dist/components/Toggle/index.d.ts.map +0 -1
- 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/Toggle/index.ts +0 -7
- package/src/tokens/_density.scss +0 -85
|
@@ -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,
|
|
@@ -35,7 +35,7 @@ function renderSidebarBadge(badge: React.ReactNode) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
|
-
<Badge
|
|
38
|
+
<Badge tone="neutral" size="sm">
|
|
39
39
|
{badge}
|
|
40
40
|
</Badge>
|
|
41
41
|
);
|
|
@@ -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,14 +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
99
|
/**
|
|
100
100
|
* Where the active-item affordance paints. `start` is the default rail;
|
|
101
101
|
* `end` is a trailing status dot for product shells that prefer that language.
|
|
102
102
|
*/
|
|
103
|
-
activeIndicator?:
|
|
103
|
+
activeIndicator?: "start" | "end";
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
export interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
@@ -112,7 +112,7 @@ export interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement>
|
|
|
112
112
|
export interface SidebarNavProps extends React.HTMLAttributes<HTMLElement> {
|
|
113
113
|
children: React.ReactNode;
|
|
114
114
|
/** Accessible label for navigation */
|
|
115
|
-
|
|
115
|
+
"aria-label"?: string;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
export interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
@@ -127,15 +127,18 @@ export interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement
|
|
|
127
127
|
defaultOpen?: boolean;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
export interface SidebarSectionActionProps extends Omit<
|
|
130
|
+
export interface SidebarSectionActionProps extends Omit<
|
|
131
|
+
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
132
|
+
"onClick"
|
|
133
|
+
> {
|
|
131
134
|
children: React.ReactNode;
|
|
132
135
|
/** Click handler */
|
|
133
136
|
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
|
134
137
|
/** Accessible label */
|
|
135
|
-
|
|
138
|
+
"aria-label"?: string;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
|
-
export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
141
|
+
export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>, "onClick"> {
|
|
139
142
|
children: React.ReactNode;
|
|
140
143
|
/** Icon element (required for collapsed mode visibility) */
|
|
141
144
|
icon?: React.ReactNode;
|
|
@@ -169,7 +172,7 @@ export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>
|
|
|
169
172
|
asChild?: boolean;
|
|
170
173
|
}
|
|
171
174
|
|
|
172
|
-
export interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLElement>,
|
|
175
|
+
export interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLElement>, "onClick"> {
|
|
173
176
|
children: React.ReactNode;
|
|
174
177
|
/** Whether item is currently active/selected */
|
|
175
178
|
active?: boolean;
|
|
@@ -189,14 +192,14 @@ export interface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButt
|
|
|
189
192
|
/** Custom trigger element (uses render prop pattern) */
|
|
190
193
|
children?: React.ReactNode;
|
|
191
194
|
/** Accessible label */
|
|
192
|
-
|
|
195
|
+
"aria-label"?: string;
|
|
193
196
|
}
|
|
194
197
|
|
|
195
198
|
export type SidebarOverlayProps = React.HTMLAttributes<HTMLDivElement>;
|
|
196
199
|
|
|
197
200
|
export interface SidebarCollapseToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
198
201
|
/** Accessible label */
|
|
199
|
-
|
|
202
|
+
"aria-label"?: string;
|
|
200
203
|
}
|
|
201
204
|
|
|
202
205
|
export type SidebarRailProps = React.ButtonHTMLAttributes<HTMLButtonElement>;
|
|
@@ -282,7 +285,7 @@ interface SidebarContextValue {
|
|
|
282
285
|
open: boolean;
|
|
283
286
|
setOpen: (open: boolean) => void;
|
|
284
287
|
isMobile: boolean;
|
|
285
|
-
position:
|
|
288
|
+
position: "left" | "right";
|
|
286
289
|
width: string;
|
|
287
290
|
collapsedWidth: string;
|
|
288
291
|
collapsible: SidebarCollapsible;
|
|
@@ -307,21 +310,25 @@ function useSidebar() {
|
|
|
307
310
|
open: false,
|
|
308
311
|
setOpen: () => {},
|
|
309
312
|
isMobile: false,
|
|
310
|
-
position:
|
|
311
|
-
width:
|
|
312
|
-
collapsedWidth:
|
|
313
|
-
collapsible:
|
|
313
|
+
position: "left" as const,
|
|
314
|
+
width: "240px",
|
|
315
|
+
collapsedWidth: "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
316
|
+
collapsible: "icon" as SidebarCollapsible,
|
|
314
317
|
hasIcons: true,
|
|
315
318
|
toggleSidebar: () => {},
|
|
316
|
-
sidebarId:
|
|
317
|
-
state:
|
|
319
|
+
sidebarId: "sidebar",
|
|
320
|
+
state: "expanded" as "expanded" | "collapsed" | "open" | "closed",
|
|
318
321
|
};
|
|
319
322
|
}
|
|
320
323
|
return {
|
|
321
324
|
...context,
|
|
322
325
|
state: context.isMobile
|
|
323
|
-
?
|
|
324
|
-
|
|
326
|
+
? context.open
|
|
327
|
+
? "open"
|
|
328
|
+
: "closed"
|
|
329
|
+
: context.collapsed
|
|
330
|
+
? "collapsed"
|
|
331
|
+
: "expanded",
|
|
325
332
|
};
|
|
326
333
|
}
|
|
327
334
|
|
|
@@ -331,7 +338,7 @@ function useSidebar() {
|
|
|
331
338
|
function useSidebarContext() {
|
|
332
339
|
const context = React.useContext(SidebarContext);
|
|
333
340
|
if (!context) {
|
|
334
|
-
throw new Error(
|
|
341
|
+
throw new Error("Sidebar compound components must be used within a Sidebar");
|
|
335
342
|
}
|
|
336
343
|
return context;
|
|
337
344
|
}
|
|
@@ -344,11 +351,11 @@ function useIsMobile() {
|
|
|
344
351
|
const [isMobile, setIsMobile] = React.useState(false);
|
|
345
352
|
|
|
346
353
|
React.useEffect(() => {
|
|
347
|
-
const mq = window.matchMedia(
|
|
354
|
+
const mq = window.matchMedia("(max-width: 767px)");
|
|
348
355
|
setIsMobile(mq.matches);
|
|
349
356
|
const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);
|
|
350
|
-
mq.addEventListener(
|
|
351
|
-
return () => mq.removeEventListener(
|
|
357
|
+
mq.addEventListener("change", handler);
|
|
358
|
+
return () => mq.removeEventListener("change", handler);
|
|
352
359
|
}, []);
|
|
353
360
|
|
|
354
361
|
return isMobile;
|
|
@@ -380,7 +387,7 @@ function hasSidebarItemIcons(children: React.ReactNode): boolean {
|
|
|
380
387
|
let found = false;
|
|
381
388
|
|
|
382
389
|
const visit = (nodes: React.ReactNode) => {
|
|
383
|
-
React.Children.forEach(nodes, child => {
|
|
390
|
+
React.Children.forEach(nodes, (child) => {
|
|
384
391
|
if (found || !React.isValidElement(child)) return;
|
|
385
392
|
|
|
386
393
|
if (child.type === SidebarItem) {
|
|
@@ -418,10 +425,10 @@ function SidebarProvider({
|
|
|
418
425
|
open: controlledOpen,
|
|
419
426
|
defaultOpen = false,
|
|
420
427
|
onOpenChange,
|
|
421
|
-
width =
|
|
422
|
-
collapsedWidth =
|
|
423
|
-
position =
|
|
424
|
-
collapsible =
|
|
428
|
+
width = "240px",
|
|
429
|
+
collapsedWidth = "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
430
|
+
position = "left",
|
|
431
|
+
collapsible = "icon",
|
|
425
432
|
enableKeyboardShortcut = true,
|
|
426
433
|
}: SidebarProviderProps) {
|
|
427
434
|
const isMobile = useIsMobile();
|
|
@@ -433,14 +440,10 @@ function SidebarProvider({
|
|
|
433
440
|
onCollapsedChange
|
|
434
441
|
);
|
|
435
442
|
|
|
436
|
-
const [open, setOpen] = useControllableState(
|
|
437
|
-
controlledOpen,
|
|
438
|
-
defaultOpen,
|
|
439
|
-
onOpenChange
|
|
440
|
-
);
|
|
443
|
+
const [open, setOpen] = useControllableState(controlledOpen, defaultOpen, onOpenChange);
|
|
441
444
|
|
|
442
445
|
const toggleSidebar = React.useCallback(() => {
|
|
443
|
-
if (collapsible ===
|
|
446
|
+
if (collapsible === "none") return;
|
|
444
447
|
if (isMobile) {
|
|
445
448
|
setOpen(!open);
|
|
446
449
|
} else {
|
|
@@ -450,9 +453,9 @@ function SidebarProvider({
|
|
|
450
453
|
|
|
451
454
|
// Handle Cmd/Ctrl+B keyboard shortcut (skips editable elements like Editor)
|
|
452
455
|
useKeyboardShortcut({
|
|
453
|
-
name:
|
|
456
|
+
name: "SIDEBAR_TOGGLE",
|
|
454
457
|
handler: toggleSidebar,
|
|
455
|
-
enabled: enableKeyboardShortcut && collapsible !==
|
|
458
|
+
enabled: enableKeyboardShortcut && collapsible !== "none",
|
|
456
459
|
});
|
|
457
460
|
|
|
458
461
|
// Handle escape key for mobile drawer
|
|
@@ -460,13 +463,13 @@ function SidebarProvider({
|
|
|
460
463
|
if (!isMobile || !open) return;
|
|
461
464
|
|
|
462
465
|
const handleEscape = (e: KeyboardEvent) => {
|
|
463
|
-
if (e.key ===
|
|
466
|
+
if (e.key === "Escape") {
|
|
464
467
|
setOpen(false);
|
|
465
468
|
}
|
|
466
469
|
};
|
|
467
470
|
|
|
468
|
-
document.addEventListener(
|
|
469
|
-
return () => document.removeEventListener(
|
|
471
|
+
document.addEventListener("keydown", handleEscape);
|
|
472
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
470
473
|
}, [isMobile, open, setOpen]);
|
|
471
474
|
|
|
472
475
|
// Lock body scroll when mobile drawer is open
|
|
@@ -474,13 +477,13 @@ function SidebarProvider({
|
|
|
474
477
|
if (!isMobile) return;
|
|
475
478
|
|
|
476
479
|
if (open) {
|
|
477
|
-
document.body.style.overflow =
|
|
480
|
+
document.body.style.overflow = "hidden";
|
|
478
481
|
} else {
|
|
479
|
-
document.body.style.overflow =
|
|
482
|
+
document.body.style.overflow = "";
|
|
480
483
|
}
|
|
481
484
|
|
|
482
485
|
return () => {
|
|
483
|
-
document.body.style.overflow =
|
|
486
|
+
document.body.style.overflow = "";
|
|
484
487
|
};
|
|
485
488
|
}, [isMobile, open]);
|
|
486
489
|
|
|
@@ -499,11 +502,7 @@ function SidebarProvider({
|
|
|
499
502
|
sidebarId,
|
|
500
503
|
};
|
|
501
504
|
|
|
502
|
-
return
|
|
503
|
-
<SidebarContext.Provider value={contextValue}>
|
|
504
|
-
{children}
|
|
505
|
-
</SidebarContext.Provider>
|
|
506
|
-
);
|
|
505
|
+
return <SidebarContext.Provider value={contextValue}>{children}</SidebarContext.Provider>;
|
|
507
506
|
}
|
|
508
507
|
|
|
509
508
|
function SidebarRoot({
|
|
@@ -514,14 +513,14 @@ function SidebarRoot({
|
|
|
514
513
|
open: controlledOpen,
|
|
515
514
|
defaultOpen = false,
|
|
516
515
|
onOpenChange,
|
|
517
|
-
width =
|
|
518
|
-
collapsedWidth =
|
|
519
|
-
position =
|
|
520
|
-
collapsible
|
|
521
|
-
activeIndicator =
|
|
516
|
+
width = "240px",
|
|
517
|
+
collapsedWidth = "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
518
|
+
position = "left",
|
|
519
|
+
collapsible,
|
|
520
|
+
activeIndicator = "start",
|
|
522
521
|
className,
|
|
523
522
|
style: styleProp,
|
|
524
|
-
|
|
523
|
+
"aria-label": ariaLabel,
|
|
525
524
|
...htmlProps
|
|
526
525
|
}: SidebarProps) {
|
|
527
526
|
// Check if we're inside a SidebarProvider
|
|
@@ -540,19 +539,27 @@ function SidebarRoot({
|
|
|
540
539
|
onOpenChange
|
|
541
540
|
);
|
|
542
541
|
|
|
543
|
-
// Use existing context values if inside a provider, otherwise use internal state
|
|
544
|
-
|
|
545
|
-
|
|
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;
|
|
546
550
|
const open = existingContext ? existingContext.open : internalOpen;
|
|
547
551
|
const setOpen = existingContext ? existingContext.setOpen : setInternalOpen;
|
|
548
552
|
const resolvedPosition = existingContext ? existingContext.position : position;
|
|
549
553
|
const resolvedWidth = existingContext ? existingContext.width : width;
|
|
550
554
|
const resolvedCollapsedWidth = existingContext ? existingContext.collapsedWidth : collapsedWidth;
|
|
551
|
-
const resolvedCollapsible =
|
|
555
|
+
const resolvedCollapsible =
|
|
556
|
+
collapsible ?? (existingContext ? existingContext.collapsible : "icon");
|
|
552
557
|
const hasIcons = React.useMemo(() => hasSidebarItemIcons(children), [children]);
|
|
553
|
-
const shouldCollapseToZero =
|
|
554
|
-
|
|
555
|
-
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;
|
|
556
563
|
const sidebarId = React.useId();
|
|
557
564
|
const resolvedSidebarId = existingContext ? existingContext.sidebarId : sidebarId;
|
|
558
565
|
const sidebarRef = React.useRef<HTMLElement>(null);
|
|
@@ -560,7 +567,7 @@ function SidebarRoot({
|
|
|
560
567
|
useFocusTrap(sidebarRef, isMobile && open);
|
|
561
568
|
|
|
562
569
|
const toggleSidebar = React.useCallback(() => {
|
|
563
|
-
if (resolvedCollapsible ===
|
|
570
|
+
if (resolvedCollapsible === "none") return;
|
|
564
571
|
if (isMobile) {
|
|
565
572
|
setOpen(!open);
|
|
566
573
|
} else {
|
|
@@ -574,13 +581,13 @@ function SidebarRoot({
|
|
|
574
581
|
if (!isMobile || !open) return;
|
|
575
582
|
|
|
576
583
|
const handleEscape = (e: KeyboardEvent) => {
|
|
577
|
-
if (e.key ===
|
|
584
|
+
if (e.key === "Escape") {
|
|
578
585
|
setOpen(false);
|
|
579
586
|
}
|
|
580
587
|
};
|
|
581
588
|
|
|
582
|
-
document.addEventListener(
|
|
583
|
-
return () => document.removeEventListener(
|
|
589
|
+
document.addEventListener("keydown", handleEscape);
|
|
590
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
584
591
|
}, [existingContext, isMobile, open, setOpen]);
|
|
585
592
|
|
|
586
593
|
// Lock body scroll when mobile drawer is open (only if no provider)
|
|
@@ -589,13 +596,13 @@ function SidebarRoot({
|
|
|
589
596
|
if (!isMobile) return;
|
|
590
597
|
|
|
591
598
|
if (open) {
|
|
592
|
-
document.body.style.overflow =
|
|
599
|
+
document.body.style.overflow = "hidden";
|
|
593
600
|
} else {
|
|
594
|
-
document.body.style.overflow =
|
|
601
|
+
document.body.style.overflow = "";
|
|
595
602
|
}
|
|
596
603
|
|
|
597
604
|
return () => {
|
|
598
|
-
document.body.style.overflow =
|
|
605
|
+
document.body.style.overflow = "";
|
|
599
606
|
};
|
|
600
607
|
}, [existingContext, isMobile, open]);
|
|
601
608
|
|
|
@@ -617,7 +624,7 @@ function SidebarRoot({
|
|
|
617
624
|
hasIcons,
|
|
618
625
|
};
|
|
619
626
|
|
|
620
|
-
const isCollapsedForStyle = resolvedCollapsible ===
|
|
627
|
+
const isCollapsedForStyle = resolvedCollapsible === "icon" && collapsed;
|
|
621
628
|
|
|
622
629
|
const classes = [
|
|
623
630
|
styles.root,
|
|
@@ -625,14 +632,16 @@ function SidebarRoot({
|
|
|
625
632
|
!isMobile && isCollapsedForStyle && styles.collapsed,
|
|
626
633
|
!isMobile && isCollapsedForStyle && shouldCollapseToZero && styles.collapsedNoIcons,
|
|
627
634
|
isOffcanvasCollapsed && styles.offcanvasCollapsed,
|
|
628
|
-
resolvedPosition ===
|
|
635
|
+
resolvedPosition === "right" && styles.positionRight,
|
|
629
636
|
className,
|
|
630
|
-
]
|
|
637
|
+
]
|
|
638
|
+
.filter(Boolean)
|
|
639
|
+
.join(" ");
|
|
631
640
|
|
|
632
641
|
const style: React.CSSProperties = {
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
642
|
+
"--sidebar-width": resolvedWidth,
|
|
643
|
+
"--sidebar-collapsed-width": resolvedCollapsedWidth,
|
|
644
|
+
"--sidebar-effective-collapsed-width": effectiveCollapsedWidth,
|
|
636
645
|
...styleProp,
|
|
637
646
|
} as React.CSSProperties;
|
|
638
647
|
|
|
@@ -643,25 +652,24 @@ function SidebarRoot({
|
|
|
643
652
|
{...htmlProps}
|
|
644
653
|
className={classes}
|
|
645
654
|
style={style}
|
|
646
|
-
role={isMobile ?
|
|
655
|
+
role={isMobile ? "dialog" : undefined}
|
|
647
656
|
aria-modal={isMobile && open ? true : undefined}
|
|
648
657
|
aria-hidden={isMobile && !open ? true : undefined}
|
|
649
|
-
|
|
650
|
-
|
|
658
|
+
inert={isMobile && !open ? true : undefined}
|
|
659
|
+
aria-label={isMobile ? ariaLabel || "Sidebar navigation" : ariaLabel}
|
|
660
|
+
data-state={isMobile ? (open ? "open" : "closed") : collapsed ? "collapsed" : "expanded"}
|
|
651
661
|
data-position={resolvedPosition}
|
|
652
662
|
data-collapsible={resolvedCollapsible}
|
|
653
663
|
data-active-indicator={activeIndicator}
|
|
654
|
-
data-icon-collapse={
|
|
664
|
+
data-icon-collapse={
|
|
665
|
+
resolvedCollapsible === "icon" ? (hasIcons ? "icons" : "none") : undefined
|
|
666
|
+
}
|
|
655
667
|
>
|
|
656
668
|
{children}
|
|
657
669
|
</aside>
|
|
658
670
|
);
|
|
659
671
|
|
|
660
|
-
return
|
|
661
|
-
<SidebarContext.Provider value={contextValue}>
|
|
662
|
-
{content}
|
|
663
|
-
</SidebarContext.Provider>
|
|
664
|
-
);
|
|
672
|
+
return <SidebarContext.Provider value={contextValue}>{content}</SidebarContext.Provider>;
|
|
665
673
|
}
|
|
666
674
|
|
|
667
675
|
function SidebarHeader({
|
|
@@ -672,21 +680,25 @@ function SidebarHeader({
|
|
|
672
680
|
}: SidebarHeaderProps) {
|
|
673
681
|
const { collapsed, isMobile } = useSidebarContext();
|
|
674
682
|
const isCollapsed = collapsed && !isMobile;
|
|
675
|
-
const classes = [styles.header, className].filter(Boolean).join(
|
|
683
|
+
const classes = [styles.header, className].filter(Boolean).join(" ");
|
|
676
684
|
|
|
677
685
|
// Show collapsed content when sidebar is collapsed (and we have it), otherwise show children
|
|
678
686
|
const content = isCollapsed && collapsedContent ? collapsedContent : children;
|
|
679
687
|
|
|
680
|
-
return
|
|
688
|
+
return (
|
|
689
|
+
<div {...htmlProps} className={classes}>
|
|
690
|
+
{content}
|
|
691
|
+
</div>
|
|
692
|
+
);
|
|
681
693
|
}
|
|
682
694
|
|
|
683
695
|
function SidebarNav({
|
|
684
696
|
children,
|
|
685
|
-
|
|
697
|
+
"aria-label": ariaLabel = "Main navigation",
|
|
686
698
|
className,
|
|
687
699
|
...htmlProps
|
|
688
700
|
}: SidebarNavProps) {
|
|
689
|
-
const classes = [styles.nav, className].filter(Boolean).join(
|
|
701
|
+
const classes = [styles.nav, className].filter(Boolean).join(" ");
|
|
690
702
|
return (
|
|
691
703
|
<nav {...htmlProps} className={classes} aria-label={ariaLabel}>
|
|
692
704
|
<ScrollArea orientation="vertical" showFades className={styles.navScrollArea}>
|
|
@@ -707,10 +719,7 @@ function SidebarSection({
|
|
|
707
719
|
}: SidebarSectionProps) {
|
|
708
720
|
const { collapsed, isMobile } = useSidebarContext();
|
|
709
721
|
|
|
710
|
-
const classes = [
|
|
711
|
-
styles.section,
|
|
712
|
-
className
|
|
713
|
-
].filter(Boolean).join(' ');
|
|
722
|
+
const classes = [styles.section, className].filter(Boolean).join(" ");
|
|
714
723
|
|
|
715
724
|
const showLabel = label && (!collapsed || isMobile);
|
|
716
725
|
const showAction = action && (!collapsed || isMobile);
|
|
@@ -726,9 +735,7 @@ function SidebarSection({
|
|
|
726
735
|
{showAction && <div className={styles.sectionActionWrapper}>{action}</div>}
|
|
727
736
|
</div>
|
|
728
737
|
)}
|
|
729
|
-
<ul className={styles.sectionList}>
|
|
730
|
-
{children}
|
|
731
|
-
</ul>
|
|
738
|
+
<ul className={styles.sectionList}>{children}</ul>
|
|
732
739
|
</div>
|
|
733
740
|
);
|
|
734
741
|
}
|
|
@@ -738,18 +745,13 @@ function SidebarSection({
|
|
|
738
745
|
<div {...htmlProps} className={classes} role="group" aria-label={label}>
|
|
739
746
|
<Collapsible defaultOpen={defaultOpen} className={styles.sectionCollapsible}>
|
|
740
747
|
<div className={styles.sectionHeader}>
|
|
741
|
-
<Collapsible.Trigger
|
|
742
|
-
className={styles.sectionTrigger}
|
|
743
|
-
chevronPosition="end"
|
|
744
|
-
>
|
|
748
|
+
<Collapsible.Trigger className={styles.sectionTrigger} chevronPosition="end">
|
|
745
749
|
<span className={styles.sectionLabel}>{label}</span>
|
|
746
750
|
</Collapsible.Trigger>
|
|
747
751
|
{showAction && <div className={styles.sectionActionWrapper}>{action}</div>}
|
|
748
752
|
</div>
|
|
749
753
|
<Collapsible.Content className={styles.sectionContent}>
|
|
750
|
-
<ul className={styles.sectionList}>
|
|
751
|
-
{children}
|
|
752
|
-
</ul>
|
|
754
|
+
<ul className={styles.sectionList}>{children}</ul>
|
|
753
755
|
</Collapsible.Content>
|
|
754
756
|
</Collapsible>
|
|
755
757
|
</div>
|
|
@@ -759,11 +761,11 @@ function SidebarSection({
|
|
|
759
761
|
function SidebarSectionAction({
|
|
760
762
|
children,
|
|
761
763
|
onClick,
|
|
762
|
-
|
|
764
|
+
"aria-label": ariaLabel,
|
|
763
765
|
className,
|
|
764
766
|
...htmlProps
|
|
765
767
|
}: SidebarSectionActionProps) {
|
|
766
|
-
const classes = [styles.sectionAction, className].filter(Boolean).join(
|
|
768
|
+
const classes = [styles.sectionAction, className].filter(Boolean).join(" ");
|
|
767
769
|
|
|
768
770
|
return (
|
|
769
771
|
<button
|
|
@@ -813,7 +815,9 @@ function SidebarItem({
|
|
|
813
815
|
hasSubmenu && styles.itemHasSubmenu,
|
|
814
816
|
expanded && styles.itemExpanded,
|
|
815
817
|
className,
|
|
816
|
-
]
|
|
818
|
+
]
|
|
819
|
+
.filter(Boolean)
|
|
820
|
+
.join(" ");
|
|
817
821
|
|
|
818
822
|
const handleClick = (e: React.MouseEvent<HTMLElement>) => {
|
|
819
823
|
if (disabled) {
|
|
@@ -832,9 +836,9 @@ function SidebarItem({
|
|
|
832
836
|
let labelText: string | undefined;
|
|
833
837
|
if (asChild && React.isValidElement(children)) {
|
|
834
838
|
const childProps = children.props as { children?: React.ReactNode };
|
|
835
|
-
labelText = typeof childProps.children ===
|
|
839
|
+
labelText = typeof childProps.children === "string" ? childProps.children : undefined;
|
|
836
840
|
} else {
|
|
837
|
-
labelText = typeof children ===
|
|
841
|
+
labelText = typeof children === "string" ? children : undefined;
|
|
838
842
|
}
|
|
839
843
|
|
|
840
844
|
const itemContent = (
|
|
@@ -861,10 +865,10 @@ function SidebarItem({
|
|
|
861
865
|
const itemProps = {
|
|
862
866
|
className: classes,
|
|
863
867
|
onClick: handleClick,
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
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,
|
|
868
872
|
tabIndex: disabled ? -1 : 0,
|
|
869
873
|
};
|
|
870
874
|
|
|
@@ -879,12 +883,11 @@ function SidebarItem({
|
|
|
879
883
|
itemElement = React.cloneElement(children, {
|
|
880
884
|
...itemProps,
|
|
881
885
|
...rest,
|
|
882
|
-
onClick: composeEventHandlers(
|
|
883
|
-
|
|
884
|
-
(event: React.MouseEvent<HTMLElement>) => handleClick(event)
|
|
886
|
+
onClick: composeEventHandlers(childProps.onClick, (event: React.MouseEvent<HTMLElement>) =>
|
|
887
|
+
handleClick(event)
|
|
885
888
|
),
|
|
886
889
|
// Merge classNames
|
|
887
|
-
className: [classes, childProps.className].filter(Boolean).join(
|
|
890
|
+
className: [classes, childProps.className].filter(Boolean).join(" "),
|
|
888
891
|
children: itemContent,
|
|
889
892
|
} as React.HTMLAttributes<HTMLElement>);
|
|
890
893
|
} else if (href) {
|
|
@@ -910,10 +913,9 @@ function SidebarItem({
|
|
|
910
913
|
itemElement
|
|
911
914
|
);
|
|
912
915
|
|
|
913
|
-
const wrapperClasses = [
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
].filter(Boolean).join(' ');
|
|
916
|
+
const wrapperClasses = [styles.itemWrapper, expanded && styles.itemExpanded]
|
|
917
|
+
.filter(Boolean)
|
|
918
|
+
.join(" ");
|
|
917
919
|
|
|
918
920
|
return <li className={wrapperClasses}>{wrappedItem}</li>;
|
|
919
921
|
}
|
|
@@ -939,7 +941,9 @@ function SidebarSubItem({
|
|
|
939
941
|
active && styles.subItemActive,
|
|
940
942
|
disabled && styles.subItemDisabled,
|
|
941
943
|
className,
|
|
942
|
-
]
|
|
944
|
+
]
|
|
945
|
+
.filter(Boolean)
|
|
946
|
+
.join(" ");
|
|
943
947
|
|
|
944
948
|
const handleClick = (e: React.MouseEvent<HTMLElement>) => {
|
|
945
949
|
if (disabled) {
|
|
@@ -952,8 +956,8 @@ function SidebarSubItem({
|
|
|
952
956
|
const itemProps = {
|
|
953
957
|
className: classes,
|
|
954
958
|
onClick: handleClick,
|
|
955
|
-
|
|
956
|
-
|
|
959
|
+
"aria-current": active ? ("page" as const) : undefined,
|
|
960
|
+
"aria-disabled": disabled,
|
|
957
961
|
tabIndex: disabled ? -1 : 0,
|
|
958
962
|
};
|
|
959
963
|
|
|
@@ -973,21 +977,23 @@ function SidebarSubItem({
|
|
|
973
977
|
function SidebarSubmenu({ children }: { children: React.ReactNode }) {
|
|
974
978
|
return (
|
|
975
979
|
<li className={styles.submenuWrapper}>
|
|
976
|
-
<ul className={styles.submenu}>
|
|
977
|
-
{children}
|
|
978
|
-
</ul>
|
|
980
|
+
<ul className={styles.submenu}>{children}</ul>
|
|
979
981
|
</li>
|
|
980
982
|
);
|
|
981
983
|
}
|
|
982
984
|
|
|
983
985
|
function SidebarFooter({ children, className, ...htmlProps }: SidebarFooterProps) {
|
|
984
|
-
const classes = [styles.footer, className].filter(Boolean).join(
|
|
985
|
-
return
|
|
986
|
+
const classes = [styles.footer, className].filter(Boolean).join(" ");
|
|
987
|
+
return (
|
|
988
|
+
<div {...htmlProps} className={classes}>
|
|
989
|
+
{children}
|
|
990
|
+
</div>
|
|
991
|
+
);
|
|
986
992
|
}
|
|
987
993
|
|
|
988
994
|
function SidebarTrigger({
|
|
989
995
|
children,
|
|
990
|
-
|
|
996
|
+
"aria-label": ariaLabel = "Toggle navigation",
|
|
991
997
|
className,
|
|
992
998
|
onClick,
|
|
993
999
|
...htmlProps
|
|
@@ -999,7 +1005,7 @@ function SidebarTrigger({
|
|
|
999
1005
|
return null;
|
|
1000
1006
|
}
|
|
1001
1007
|
|
|
1002
|
-
const classes = [styles.trigger, className].filter(Boolean).join(
|
|
1008
|
+
const classes = [styles.trigger, className].filter(Boolean).join(" ");
|
|
1003
1009
|
|
|
1004
1010
|
return (
|
|
1005
1011
|
<button
|
|
@@ -1024,7 +1030,7 @@ function SidebarOverlay({ className, onClick, ...htmlProps }: SidebarOverlayProp
|
|
|
1024
1030
|
return null;
|
|
1025
1031
|
}
|
|
1026
1032
|
|
|
1027
|
-
const classes = [styles.overlay, className].filter(Boolean).join(
|
|
1033
|
+
const classes = [styles.overlay, className].filter(Boolean).join(" ");
|
|
1028
1034
|
|
|
1029
1035
|
return (
|
|
1030
1036
|
<div
|
|
@@ -1032,13 +1038,13 @@ function SidebarOverlay({ className, onClick, ...htmlProps }: SidebarOverlayProp
|
|
|
1032
1038
|
className={classes}
|
|
1033
1039
|
onClick={composeEventHandlers(onClick, () => setOpen(false))}
|
|
1034
1040
|
aria-hidden="true"
|
|
1035
|
-
data-state={open ?
|
|
1041
|
+
data-state={open ? "open" : "closed"}
|
|
1036
1042
|
/>
|
|
1037
1043
|
);
|
|
1038
1044
|
}
|
|
1039
1045
|
|
|
1040
1046
|
function SidebarCollapseToggle({
|
|
1041
|
-
|
|
1047
|
+
"aria-label": ariaLabel,
|
|
1042
1048
|
className,
|
|
1043
1049
|
onClick,
|
|
1044
1050
|
...htmlProps
|
|
@@ -1046,20 +1052,16 @@ function SidebarCollapseToggle({
|
|
|
1046
1052
|
const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();
|
|
1047
1053
|
|
|
1048
1054
|
// Don't show on mobile or when collapsing is disabled
|
|
1049
|
-
if (isMobile || collapsible ===
|
|
1055
|
+
if (isMobile || collapsible === "none") {
|
|
1050
1056
|
return null;
|
|
1051
1057
|
}
|
|
1052
1058
|
|
|
1053
|
-
const shouldFloat =
|
|
1054
|
-
(collapsible ===
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
shouldFloat && styles.collapseToggleFloating,
|
|
1060
|
-
className,
|
|
1061
|
-
].filter(Boolean).join(' ');
|
|
1062
|
-
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");
|
|
1063
1065
|
|
|
1064
1066
|
return (
|
|
1065
1067
|
<button
|
|
@@ -1078,21 +1080,19 @@ function SidebarRail({
|
|
|
1078
1080
|
className,
|
|
1079
1081
|
onClick,
|
|
1080
1082
|
title,
|
|
1081
|
-
|
|
1083
|
+
"aria-label": ariaLabel,
|
|
1082
1084
|
...htmlProps
|
|
1083
1085
|
}: SidebarRailProps) {
|
|
1084
1086
|
const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();
|
|
1085
1087
|
|
|
1086
1088
|
// Don't show on mobile or when collapsing is disabled
|
|
1087
|
-
if (isMobile || collapsible ===
|
|
1089
|
+
if (isMobile || collapsible === "none") {
|
|
1088
1090
|
return null;
|
|
1089
1091
|
}
|
|
1090
1092
|
|
|
1091
|
-
const classes = [
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
className,
|
|
1095
|
-
].filter(Boolean).join(' ');
|
|
1093
|
+
const classes = [styles.rail, collapsed && styles.railCollapsed, className]
|
|
1094
|
+
.filter(Boolean)
|
|
1095
|
+
.join(" ");
|
|
1096
1096
|
|
|
1097
1097
|
return (
|
|
1098
1098
|
<button
|
|
@@ -1100,8 +1100,8 @@ function SidebarRail({
|
|
|
1100
1100
|
type="button"
|
|
1101
1101
|
className={classes}
|
|
1102
1102
|
onClick={composeEventHandlers(onClick, () => setCollapsed(!collapsed))}
|
|
1103
|
-
aria-label={ariaLabel ?? (collapsed ?
|
|
1104
|
-
title={title ?? (collapsed ?
|
|
1103
|
+
aria-label={ariaLabel ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")}
|
|
1104
|
+
title={title ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")}
|
|
1105
1105
|
/>
|
|
1106
1106
|
);
|
|
1107
1107
|
}
|
|
@@ -1115,17 +1115,17 @@ function SidebarMenuSkeleton({
|
|
|
1115
1115
|
const { collapsed, isMobile } = useSidebarContext();
|
|
1116
1116
|
const isCollapsed = collapsed && !isMobile;
|
|
1117
1117
|
|
|
1118
|
-
const classes = [styles.menuSkeleton, className].filter(Boolean).join(
|
|
1119
|
-
const labelWidths = [
|
|
1118
|
+
const classes = [styles.menuSkeleton, className].filter(Boolean).join(" ");
|
|
1119
|
+
const labelWidths = ["64%", "72%", "68%", "79%", "74%", "66%", "83%", "70%"];
|
|
1120
1120
|
|
|
1121
1121
|
return (
|
|
1122
1122
|
<div {...htmlProps} className={classes} aria-hidden="true">
|
|
1123
1123
|
{Array.from({ length: count }).map((_, i) => (
|
|
1124
1124
|
<div key={i} className={styles.skeletonItem}>
|
|
1125
|
-
{showIcon && <Skeleton
|
|
1125
|
+
{showIcon && <Skeleton shape="avatar" size="sm" />}
|
|
1126
1126
|
{!isCollapsed && (
|
|
1127
1127
|
<Skeleton
|
|
1128
|
-
|
|
1128
|
+
shape="text"
|
|
1129
1129
|
className={styles.skeletonLabel}
|
|
1130
1130
|
width={labelWidths[i % labelWidths.length]}
|
|
1131
1131
|
/>
|