@usefragments/ui 1.7.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/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 +4975 -4959
- package/dist/blocks/components/StatsCard.d.ts +1 -1
- package/dist/blocks/components/StatsCard.d.ts.map +1 -1
- package/dist/codeblock.cjs +23 -16
- package/dist/codeblock.js +16 -9
- package/dist/colorpicker.cjs +1 -0
- package/dist/colorpicker.js +1 -0
- 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 +21 -21
- package/dist/components/Alert/Alert.module.scss.js +21 -21
- package/dist/components/Alert/index.cjs +14 -8
- package/dist/components/Alert/index.d.ts +9 -9
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +14 -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/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 +27 -34
- package/dist/components/Card/Card.module.scss.js +27 -34
- package/dist/components/Card/index.cjs +13 -8
- package/dist/components/Card/index.d.ts +23 -25
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +13 -8
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- 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 +2 -2
- 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 +2 -2
- 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 +1 -2
- 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 +1 -2
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +22 -22
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +22 -22
- package/dist/components/CodeBlock/index.d.ts +3 -2
- 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 +9 -5
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +9 -5
- 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 +2 -1
- package/dist/components/Command/index.d.ts +6 -1
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +2 -1
- 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.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/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 +2 -2
- package/dist/components/Dialog/index.d.ts +5 -4
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +2 -2
- 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/EmptyState/EmptyState.module.scss.cjs +11 -11
- package/dist/components/EmptyState/EmptyState.module.scss.js +11 -11
- package/dist/components/EmptyState/index.cjs +9 -4
- package/dist/components/EmptyState/index.d.ts +8 -5
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +9 -4
- package/dist/components/Field/Field.module.scss.cjs +5 -5
- package/dist/components/Field/Field.module.scss.js +5 -5
- 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/Header/Header.module.scss.cjs +33 -33
- package/dist/components/Header/Header.module.scss.js +33 -33
- 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.d.ts +4 -4
- package/dist/components/IconButton/index.d.ts.map +1 -1
- 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 +24 -16
- package/dist/components/Link/Link.module.scss.js +24 -16
- package/dist/components/Link/index.cjs +13 -2
- package/dist/components/Link/index.d.ts +10 -3
- 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 +30 -30
- package/dist/components/Loading/Loading.module.scss.js +30 -30
- 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/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 +29 -29
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +29 -29
- 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/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 +3 -3
- package/dist/components/Sidebar/index.js +3 -3
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +46 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +46 -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/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 +15 -15
- package/dist/components/Table/Table.module.scss.js +15 -15
- 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 +1 -1
- package/dist/components/TableOfContents/index.js +1 -1
- 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 +5 -6
- 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 +5 -6
- package/dist/components/Text/Text.module.scss.cjs +105 -105
- package/dist/components/Text/Text.module.scss.js +105 -105
- package/dist/components/Text/index.cjs +5 -9
- package/dist/components/Text/index.d.ts +15 -11
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +5 -9
- 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 +20 -4
- 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 +20 -4
- 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 -9
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -9
- 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 +5 -74
- package/dist/components/ThemeToggle/index.d.ts +5 -8
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +3 -72
- 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/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
- package/dist/data-table-virtual.cjs +3 -2
- package/dist/data-table-virtual.js +3 -2
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.js +1 -1
- package/dist/datepicker.cjs +23 -11
- package/dist/datepicker.js +23 -11
- package/dist/index.cjs +5 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/measurements/generated.cjs +37 -93
- package/dist/measurements/generated.d.ts +37 -92
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +37 -93
- package/dist/measurements/index.d.ts +1 -1
- package/dist/measurements/index.d.ts.map +1 -1
- package/dist/utils/seed-derivation.cjs +0 -1
- 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 +0 -1
- 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 +5 -8
- package/src/assets/nav-glyph.module.scss +166 -0
- package/src/assets/nav-glyph.tsx +188 -0
- package/src/components/Accordion/Accordion.module.scss +5 -3
- package/src/components/Alert/Alert.contract.json +18 -18
- package/src/components/Alert/Alert.module.scss +50 -64
- package/src/components/Alert/index.tsx +24 -17
- package/src/components/AppShell/AppShell.contract.json +7 -7
- package/src/components/AppShell/AppShell.module.scss +49 -17
- package/src/components/AppShell/index.tsx +2 -2
- package/src/components/Avatar/Avatar.module.scss +0 -1
- package/src/components/Badge/Badge.contract.json +58 -22
- package/src/components/Badge/Badge.module.scss +72 -47
- package/src/components/Badge/index.tsx +34 -17
- package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
- package/src/components/Box/Box.module.scss +7 -6
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +15 -5
- package/src/components/Breadcrumbs/index.tsx +5 -1
- package/src/components/Button/Button.module.scss +261 -186
- package/src/components/Button/index.tsx +41 -28
- package/src/components/ButtonGroup/ButtonGroup.contract.json +5 -5
- 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 +73 -133
- package/src/components/Card/index.tsx +41 -36
- package/src/components/Chart/Chart.module.scss +6 -5
- package/src/components/Checkbox/Checkbox.contract.json +4 -3
- package/src/components/Checkbox/Checkbox.module.scss +16 -32
- package/src/components/Checkbox/index.tsx +6 -8
- package/src/components/Chip/Chip.contract.json +10 -10
- package/src/components/Chip/Chip.module.scss +23 -22
- package/src/components/Chip/index.tsx +10 -6
- package/src/components/CodeBlock/CodeBlock.module.scss +47 -70
- package/src/components/CodeBlock/index.tsx +23 -16
- package/src/components/Collapsible/Collapsible.module.scss +1 -7
- package/src/components/ColorPicker/ColorPicker.module.scss +20 -13
- package/src/components/ColorPicker/index.tsx +1 -0
- package/src/components/Combobox/Combobox.module.scss +16 -19
- package/src/components/Combobox/index.tsx +10 -1
- package/src/components/Command/Command.contract.json +7 -1
- package/src/components/Command/Command.module.scss +19 -21
- package/src/components/Command/index.tsx +7 -1
- package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
- package/src/components/ConversationList/ConversationList.module.scss +2 -3
- package/src/components/ConversationList/index.tsx +2 -2
- package/src/components/DataTable/DataTable.module.scss +12 -9
- package/src/components/DataTable/DataTable.virtual.tsx +3 -2
- package/src/components/DataTable/index.tsx +1 -1
- package/src/components/DatePicker/DatePicker.module.scss +32 -42
- package/src/components/DatePicker/index.tsx +18 -7
- package/src/components/Dialog/Dialog.module.scss +23 -29
- package/src/components/Dialog/index.tsx +7 -5
- package/src/components/Drawer/Drawer.contract.json +6 -6
- package/src/components/Drawer/Drawer.module.scss +123 -64
- package/src/components/Drawer/index.tsx +7 -5
- package/src/components/Editor/Editor.contract.json +1 -1
- package/src/components/Editor/Editor.module.scss +26 -13
- package/src/components/EmptyState/EmptyState.contract.json +6 -6
- package/src/components/EmptyState/EmptyState.module.scss +31 -23
- package/src/components/EmptyState/index.tsx +17 -9
- package/src/components/Field/Field.module.scss +2 -1
- package/src/components/Fieldset/Fieldset.module.scss +5 -4
- package/src/components/Form/Form.contract.json +4 -4
- package/src/components/Grid/Grid.module.scss +2 -2
- package/src/components/Header/Header.contract.json +2 -2
- package/src/components/Header/Header.module.scss +24 -36
- package/src/components/Icon/Icon.contract.json +19 -23
- package/src/components/Icon/Icon.module.scss +13 -12
- package/src/components/Icon/index.tsx +31 -31
- package/src/components/IconButton/IconButton.contract.json +8 -8
- package/src/components/IconButton/IconButton.module.scss +13 -4
- package/src/components/IconButton/index.tsx +4 -4
- package/src/components/Input/Input.contract.json +0 -13
- package/src/components/Input/Input.module.scss +4 -54
- package/src/components/Input/index.tsx +2 -18
- package/src/components/Link/Link.contract.json +19 -11
- package/src/components/Link/Link.module.scss +24 -10
- package/src/components/Link/index.tsx +26 -5
- package/src/components/List/List.contract.json +11 -11
- package/src/components/List/List.module.scss +10 -5
- package/src/components/List/index.tsx +17 -13
- package/src/components/Listbox/Listbox.module.scss +14 -20
- package/src/components/Loading/Loading.contract.json +6 -6
- package/src/components/Loading/Loading.module.scss +29 -26
- package/src/components/Loading/index.tsx +13 -12
- package/src/components/Markdown/Markdown.module.scss +2 -1
- package/src/components/Menu/Menu.contract.json +5 -5
- package/src/components/Menu/Menu.module.scss +11 -10
- package/src/components/Message/Message.contract.json +5 -5
- package/src/components/Message/Message.module.scss +8 -6
- package/src/components/Message/index.tsx +2 -2
- package/src/components/NavigationMenu/NavigationMenu.module.scss +22 -67
- package/src/components/Pagination/Pagination.module.scss +7 -14
- package/src/components/Popover/Popover.contract.json +4 -4
- package/src/components/Popover/Popover.module.scss +24 -23
- package/src/components/Progress/Progress.contract.json +11 -11
- package/src/components/Progress/Progress.module.scss +13 -8
- package/src/components/Progress/index.tsx +34 -16
- package/src/components/Prompt/Prompt.contract.json +12 -12
- package/src/components/Prompt/Prompt.module.scss +40 -47
- package/src/components/Prompt/index.tsx +17 -15
- package/src/components/RadioGroup/RadioGroup.contract.json +6 -4
- package/src/components/RadioGroup/RadioGroup.module.scss +38 -32
- package/src/components/RadioGroup/index.tsx +23 -10
- package/src/components/ScrollArea/ScrollArea.module.scss +30 -33
- package/src/components/Select/Select.module.scss +19 -18
- package/src/components/Select/index.tsx +26 -24
- package/src/components/Separator/Separator.contract.json +10 -10
- package/src/components/Separator/Separator.module.scss +24 -40
- package/src/components/Separator/index.tsx +16 -11
- package/src/components/Sidebar/Sidebar.contract.json +1 -1
- package/src/components/Sidebar/Sidebar.module.scss +92 -95
- package/src/components/Sidebar/index.tsx +3 -3
- package/src/components/Skeleton/Skeleton.contract.json +9 -9
- package/src/components/Skeleton/Skeleton.module.scss +23 -16
- package/src/components/Skeleton/index.tsx +16 -15
- package/src/components/Slider/Slider.module.scss +6 -19
- package/src/components/Stack/Stack.contract.json +1 -1
- package/src/components/Stack/Stack.module.scss +13 -12
- package/src/components/Switch/Switch.module.scss +44 -35
- package/src/components/Table/Table.module.scss +9 -13
- package/src/components/TableOfContents/TableOfContents.module.scss +12 -18
- package/src/components/TableOfContents/index.tsx +1 -1
- package/src/components/Tabs/Tabs.contract.json +14 -14
- package/src/components/Tabs/Tabs.module.scss +27 -31
- package/src/components/Tabs/index.tsx +15 -12
- package/src/components/Text/Text.contract.json +36 -14
- package/src/components/Text/Text.module.scss +19 -20
- package/src/components/Text/index.tsx +23 -21
- package/src/components/Textarea/Textarea.contract.json +0 -13
- package/src/components/Textarea/Textarea.module.scss +24 -52
- package/src/components/Textarea/index.tsx +3 -14
- package/src/components/Theme/Theme.contract.json +9 -8
- package/src/components/Theme/index.tsx +39 -12
- package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
- package/src/components/ThemeToggle/ThemeToggle.module.scss +21 -44
- package/src/components/ThemeToggle/icons.tsx +46 -0
- package/src/components/ThemeToggle/index.tsx +8 -90
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +11 -10
- package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
- package/src/components/ThinkingIndicator/index.tsx +12 -14
- package/src/components/Toast/Toast.contract.json +29 -13
- package/src/components/Toast/Toast.module.scss +49 -104
- package/src/components/Toast/index.tsx +39 -34
- package/src/components/ToggleGroup/ToggleGroup.contract.json +13 -13
- package/src/components/ToggleGroup/ToggleGroup.module.scss +16 -46
- package/src/components/ToggleGroup/index.tsx +11 -11
- package/src/components/Tooltip/Tooltip.contract.json +3 -3
- package/src/components/Tooltip/Tooltip.module.scss +16 -10
- package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
- package/src/index.ts +14 -10
- package/src/measurements/MeasurementTargets.module.scss +6 -7
- package/src/measurements/generated.ts +38 -96
- package/src/measurements/index.ts +0 -1
- package/src/measurements/measurements.json +37 -116
- package/src/recipes/_action.scss +4 -4
- package/src/recipes/_boolean-range.scss +9 -5
- package/src/recipes/_feedback.scss +17 -16
- package/src/recipes/_field.scss +28 -20
- package/src/recipes/_navigation.scss +84 -29
- package/src/recipes/_overlay.scss +143 -43
- package/src/recipes/_popup.scss +46 -36
- package/src/recipes/_prose.scss +35 -23
- package/src/recipes/_representation.scss +10 -9
- package/src/recipes/_segmented.scss +1 -1
- package/src/recipes/_table-chrome.scss +27 -16
- package/src/recipes/_target.scss +2 -4
- package/src/recipes/_typography.scss +10 -0
- package/src/styles/globals.scss +14 -9
- package/src/tokens/_component-properties.scss +19 -1
- package/src/tokens/_computed.scss +27 -33
- package/src/tokens/_measurements.catalog.generated.css +58 -45
- package/src/tokens/_measurements.generated.scss +107 -250
- package/src/tokens/_mixins.scss +42 -40
- package/src/tokens/_palettes.scss +1 -1
- package/src/tokens/_property-registrations.scss +9 -0
- package/src/tokens/_seeds.scss +1 -12
- package/src/tokens/_variables.scss +71 -59
- package/src/utils/seed-derivation.ts +1 -8
- 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/Toggle/index.ts +0 -7
- package/src/tokens/_density.scss +0 -85
|
@@ -1,66 +1,70 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
2
|
@use "../../tokens/mixins" as *;
|
|
3
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
3
4
|
@use "../../recipes/feedback" as feedback;
|
|
4
5
|
|
|
6
|
+
// The tone publishes its ramp on three channels; the alert paints wash, hairline
|
|
7
|
+
// and ink from them, and `emphasis="surface"` keeps only the hairline + title.
|
|
5
8
|
.alert {
|
|
6
9
|
@include feedback.contextual;
|
|
10
|
+
@include high-contrast-outline;
|
|
7
11
|
|
|
12
|
+
--_alert-tint: var(--fui-color-info-bg, #{$fui-color-info-bg});
|
|
13
|
+
--_alert-ink: var(--fui-color-info-text, #{$fui-color-info-text});
|
|
14
|
+
--_alert-line: var(--fui-color-info-border, #{$fui-color-info-border});
|
|
15
|
+
|
|
16
|
+
border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
17
|
+
var(--_alert-line, var(--fui-color-info-border, #{$fui-color-info-border}));
|
|
8
18
|
border-radius: var(--fui-card-radius, var(--fui-radius-lg, $fui-radius-lg));
|
|
19
|
+
background: var(--_alert-tint, var(--fui-color-info-bg, #{$fui-color-info-bg}));
|
|
20
|
+
color: var(--_alert-ink, var(--fui-color-info-text, #{$fui-color-info-text}));
|
|
9
21
|
}
|
|
10
22
|
|
|
11
23
|
.alert:has(.title) {
|
|
12
24
|
align-items: flex-start;
|
|
13
25
|
}
|
|
14
26
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
@mixin _tone($tone, $bg, $text, $border) {
|
|
28
|
+
--_alert-tint: var(--fui-color-#{$tone}-bg, #{$bg});
|
|
29
|
+
--_alert-ink: var(--fui-color-#{$tone}-text, #{$text});
|
|
30
|
+
--_alert-line: var(--fui-color-#{$tone}-border, #{$border});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.toneInfo {
|
|
34
|
+
@include _tone("info", $fui-color-info-bg, $fui-color-info-text, $fui-color-info-border);
|
|
19
35
|
}
|
|
20
36
|
|
|
21
|
-
.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
.toneSuccess {
|
|
38
|
+
@include _tone(
|
|
39
|
+
"success",
|
|
40
|
+
$fui-color-success-bg,
|
|
41
|
+
$fui-color-success-text,
|
|
42
|
+
$fui-color-success-border
|
|
43
|
+
);
|
|
26
44
|
}
|
|
27
45
|
|
|
28
|
-
.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
.toneWarning {
|
|
47
|
+
@include _tone(
|
|
48
|
+
"warning",
|
|
49
|
+
$fui-color-warning-bg,
|
|
50
|
+
$fui-color-warning-text,
|
|
51
|
+
$fui-color-warning-border
|
|
52
|
+
);
|
|
33
53
|
}
|
|
34
54
|
|
|
35
|
-
.
|
|
36
|
-
|
|
37
|
-
border: var(--fui-stroke-hairline, 1px) solid
|
|
38
|
-
var(--fui-color-danger-border, $fui-color-danger-border);
|
|
39
|
-
color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
55
|
+
.toneDanger {
|
|
56
|
+
@include _tone("danger", $fui-color-danger-bg, $fui-color-danger-text, $fui-color-danger-border);
|
|
40
57
|
}
|
|
41
58
|
|
|
42
59
|
// `emphasis="surface"`: the card keeps the page's own surface and spends the
|
|
43
|
-
//
|
|
44
|
-
// so it overrides their wash while their border survives.
|
|
60
|
+
// tone only on the hairline and the title.
|
|
45
61
|
.surface {
|
|
46
62
|
background: var(--fui-bg-secondary, $fui-bg-secondary);
|
|
47
63
|
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.surface.info .title {
|
|
51
|
-
color: var(--fui-color-info-text, $fui-color-info-text);
|
|
52
|
-
}
|
|
53
64
|
|
|
54
|
-
.
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.surface.warning .title {
|
|
59
|
-
color: var(--fui-color-warning-text, $fui-color-warning-text);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.surface.error .title {
|
|
63
|
-
color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
65
|
+
.title {
|
|
66
|
+
color: var(--_alert-ink, var(--fui-color-info-text, #{$fui-color-info-text}));
|
|
67
|
+
}
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
.icon {
|
|
@@ -69,35 +73,20 @@
|
|
|
69
73
|
display: flex;
|
|
70
74
|
align-items: center;
|
|
71
75
|
justify-content: center;
|
|
72
|
-
border-radius:
|
|
76
|
+
border-radius: var(--fui-radius-full, #{$fui-radius-full});
|
|
77
|
+
background-color: var(--_alert-ink, var(--fui-color-info-text, #{$fui-color-info-text}));
|
|
73
78
|
color: var(--fui-text-inverse, $fui-text-inverse);
|
|
74
79
|
font: inherit;
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
.alert:has(.title) .icon {
|
|
78
|
-
margin-block-start: var(--fui-stroke-hairline,
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.info .icon {
|
|
82
|
-
background-color: var(--fui-color-info-text, $fui-color-info-text);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.success .icon {
|
|
86
|
-
background-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.warning .icon {
|
|
90
|
-
background-color: var(--fui-color-warning-text, $fui-color-warning-text);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.error .icon {
|
|
94
|
-
background-color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
83
|
+
margin-block-start: var(--fui-stroke-hairline, #{$fui-stroke-hairline});
|
|
95
84
|
}
|
|
96
85
|
|
|
97
86
|
.body {
|
|
98
87
|
display: grid;
|
|
99
88
|
flex: 1;
|
|
100
|
-
gap: var(--fui-feedback-text-gap, var(--fui-raw-space-4,
|
|
89
|
+
gap: var(--fui-feedback-text-gap, var(--fui-raw-space-4, #{measurements.raw-space(4)}));
|
|
101
90
|
min-inline-size: 0;
|
|
102
91
|
}
|
|
103
92
|
|
|
@@ -107,14 +96,12 @@
|
|
|
107
96
|
|
|
108
97
|
.content {
|
|
109
98
|
@include feedback.body;
|
|
110
|
-
|
|
111
|
-
opacity: 0.9;
|
|
112
99
|
}
|
|
113
100
|
|
|
114
101
|
.actions {
|
|
115
102
|
display: flex;
|
|
116
103
|
align-items: center;
|
|
117
|
-
gap: var(--fui-feedback-transient-gap, var(--fui-raw-space-8,
|
|
104
|
+
gap: var(--fui-feedback-transient-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
|
|
118
105
|
}
|
|
119
106
|
|
|
120
107
|
.close {
|
|
@@ -123,13 +110,12 @@
|
|
|
123
110
|
@include feedback.close;
|
|
124
111
|
|
|
125
112
|
margin-inline-start: auto;
|
|
126
|
-
border-radius: var(--fui-radius-
|
|
127
|
-
color:
|
|
113
|
+
border-radius: var(--fui-radius-l3, $fui-radius-l3);
|
|
114
|
+
color: color-mix(in srgb, currentColor 60%, transparent);
|
|
128
115
|
line-height: 1;
|
|
129
|
-
opacity: 0.6;
|
|
130
116
|
|
|
131
117
|
&:hover {
|
|
132
|
-
|
|
118
|
+
color: currentColor;
|
|
133
119
|
}
|
|
134
120
|
}
|
|
135
121
|
|
|
@@ -137,12 +123,12 @@
|
|
|
137
123
|
@include button-reset;
|
|
138
124
|
@include feedback.compact-action;
|
|
139
125
|
|
|
140
|
-
border-radius: var(--fui-radius-
|
|
126
|
+
border-radius: var(--fui-radius-l3, $fui-radius-l3);
|
|
141
127
|
color: inherit;
|
|
142
128
|
text-decoration: underline;
|
|
143
129
|
|
|
144
130
|
&:hover {
|
|
145
|
-
|
|
131
|
+
color: color-mix(in srgb, currentColor 80%, transparent);
|
|
146
132
|
}
|
|
147
133
|
|
|
148
134
|
&:focus-visible {
|
|
@@ -8,20 +8,20 @@ import styles from "./Alert.module.scss";
|
|
|
8
8
|
// Types
|
|
9
9
|
// ============================================
|
|
10
10
|
|
|
11
|
-
export type
|
|
11
|
+
export type AlertTone = "info" | "success" | "warning" | "danger";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Alert for contextual feedback messages (info, success, warning,
|
|
14
|
+
* Alert for contextual feedback messages (info, success, warning, danger).
|
|
15
15
|
* @see https://usefragments.com/components/alert
|
|
16
16
|
*/
|
|
17
17
|
export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
18
18
|
children: React.ReactNode;
|
|
19
|
-
/**
|
|
19
|
+
/** Tone. Controls color and default icon.
|
|
20
20
|
* @default "info"
|
|
21
|
-
* @see https://usefragments.com/components/alert#
|
|
22
|
-
|
|
23
|
-
/** How much surface the
|
|
24
|
-
*
|
|
21
|
+
* @see https://usefragments.com/components/alert#tones */
|
|
22
|
+
tone?: AlertTone;
|
|
23
|
+
/** How much surface the tone claims. `tint` washes the whole card in the
|
|
24
|
+
* tone colour. `surface` keeps the card on the page's own background and
|
|
25
25
|
* spends the colour only on the hairline and the title — for a standing
|
|
26
26
|
* failure that owns the view, where a full wash would read as a red page.
|
|
27
27
|
* @default "tint" */
|
|
@@ -68,7 +68,7 @@ export interface AlertBodyProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
68
68
|
// ============================================
|
|
69
69
|
|
|
70
70
|
interface AlertContextValue {
|
|
71
|
-
|
|
71
|
+
tone: AlertTone;
|
|
72
72
|
titleId: string;
|
|
73
73
|
descId: string;
|
|
74
74
|
dismiss: () => void;
|
|
@@ -96,14 +96,21 @@ function composeEventHandlers<E extends { defaultPrevented: boolean }>(
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
// ============================================
|
|
99
|
-
//
|
|
99
|
+
// Tone Icons
|
|
100
100
|
// ============================================
|
|
101
101
|
|
|
102
|
-
const
|
|
102
|
+
const toneIcons: Record<AlertTone, string> = {
|
|
103
103
|
info: "i",
|
|
104
104
|
success: "\u2713",
|
|
105
105
|
warning: "!",
|
|
106
|
-
|
|
106
|
+
danger: "\u2717",
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const TONE_CLASS: Record<AlertTone, string> = {
|
|
110
|
+
info: styles.toneInfo,
|
|
111
|
+
success: styles.toneSuccess,
|
|
112
|
+
warning: styles.toneWarning,
|
|
113
|
+
danger: styles.toneDanger,
|
|
107
114
|
};
|
|
108
115
|
|
|
109
116
|
// ============================================
|
|
@@ -112,7 +119,7 @@ const severityIcons: Record<AlertSeverity, string> = {
|
|
|
112
119
|
|
|
113
120
|
function AlertRoot({
|
|
114
121
|
children,
|
|
115
|
-
|
|
122
|
+
tone = "info",
|
|
116
123
|
emphasis = "tint",
|
|
117
124
|
className,
|
|
118
125
|
...htmlProps
|
|
@@ -129,16 +136,16 @@ function AlertRoot({
|
|
|
129
136
|
|
|
130
137
|
const classes = [
|
|
131
138
|
styles.alert,
|
|
132
|
-
|
|
139
|
+
TONE_CLASS[tone],
|
|
133
140
|
emphasis === "surface" ? styles.surface : null,
|
|
134
141
|
className,
|
|
135
142
|
]
|
|
136
143
|
.filter(Boolean)
|
|
137
144
|
.join(" ");
|
|
138
|
-
const role =
|
|
145
|
+
const role = tone === "warning" || tone === "danger" ? "alert" : "status";
|
|
139
146
|
|
|
140
147
|
const contextValue: AlertContextValue = {
|
|
141
|
-
|
|
148
|
+
tone,
|
|
142
149
|
titleId,
|
|
143
150
|
descId,
|
|
144
151
|
dismiss,
|
|
@@ -160,12 +167,12 @@ function AlertRoot({
|
|
|
160
167
|
}
|
|
161
168
|
|
|
162
169
|
function AlertIcon({ children, className, ...htmlProps }: AlertIconProps) {
|
|
163
|
-
const {
|
|
170
|
+
const { tone } = useAlertContext();
|
|
164
171
|
const classes = [styles.icon, className].filter(Boolean).join(" ");
|
|
165
172
|
|
|
166
173
|
return (
|
|
167
174
|
<span {...htmlProps} className={classes} aria-hidden="true">
|
|
168
|
-
{children ??
|
|
175
|
+
{children ?? toneIcons[tone]}
|
|
169
176
|
</span>
|
|
170
177
|
);
|
|
171
178
|
}
|
|
@@ -70,17 +70,17 @@
|
|
|
70
70
|
{
|
|
71
71
|
"name": "Default Layout",
|
|
72
72
|
"description": "Header spans the full width above the sidebar.",
|
|
73
|
-
"code": "import { ChartBar, Gear, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"default\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Brand>MyApp</Header.Brand>\n <Header.Nav>\n <Header.NavItem active>Dashboard</Header.NavItem>\n <Header.NavItem>Settings</Header.NavItem>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\">\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={Gear} size=\"md\" />}>Settings</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h2\"
|
|
73
|
+
"code": "import { ChartBar, Gear, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"default\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Brand>MyApp</Header.Brand>\n <Header.Nav>\n <Header.NavItem active>Dashboard</Header.NavItem>\n <Header.NavItem>Settings</Header.NavItem>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\">\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={Gear} size=\"md\" />}>Settings</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Default Layout</Text>\n <Text as=\"p\" color=\"secondary\">\n Header spans full width. Logo is in the header.\n </Text>\n </Stack>\n </AppShell.Main>\n </AppShell>\n</Box>"
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
"name": "Sidebar Layout",
|
|
77
77
|
"description": "Sidebar runs full height with the header beside it.",
|
|
78
|
-
"code": "import { ChartBar, Gear, House, MagnifyingGlass } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Search>\n <Box background=\"secondary\" rounded=\"sm\" paddingX=\"sm\" paddingY=\"xs\">\n <Stack direction=\"row\" align=\"center\" gap=\"sm\">\n <Icon icon={MagnifyingGlass} size=\"sm\"
|
|
78
|
+
"code": "import { ChartBar, Gear, House, MagnifyingGlass } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Search>\n <Box background=\"secondary\" rounded=\"sm\" paddingX=\"sm\" paddingY=\"xs\">\n <Stack direction=\"row\" align=\"center\" gap=\"sm\">\n <Icon icon={MagnifyingGlass} size=\"sm\" color=\"tertiary\" />\n <Text scale=\"sm\" color=\"tertiary\">Search...</Text>\n </Stack>\n </Box>\n </Header.Search>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\">\n <Sidebar.Header>\n <Text weight=\"semibold\">MyApp</Text>\n </Sidebar.Header>\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={Gear} size=\"md\" />}>Settings</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n <Sidebar.Footer>v1.0.0</Sidebar.Footer>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Sidebar Layout</Text>\n <Text as=\"p\" color=\"secondary\">\n Sidebar is full height. Logo is in the sidebar header.\n </Text>\n </Stack>\n </AppShell.Main>\n </AppShell>\n</Box>"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
"name": "With Aside Panel",
|
|
82
82
|
"description": "Adds a right rail for context, filters, or actions.",
|
|
83
|
-
"code": "import { ChartBar, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"default\">\n <AppShell.Header>\n <Header>\n <Header.Brand>App</Header.Brand>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"180px\" collapsible=\"offcanvas\">\n <Sidebar.Nav>\n <Sidebar.Section>\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Stats</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h2\"
|
|
83
|
+
"code": "import { ChartBar, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"default\">\n <AppShell.Header>\n <Header>\n <Header.Brand>App</Header.Brand>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"180px\" collapsible=\"offcanvas\">\n <Sidebar.Nav>\n <Sidebar.Section>\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Stats</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Main Content</Text>\n <Text as=\"p\">Content with aside panel on the right.</Text>\n </Stack>\n </AppShell.Main>\n\n <AppShell.Aside width=\"180px\">\n <Box padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h3\" scale=\"sm\" weight=\"semibold\">Aside Panel</Text>\n <Text as=\"p\" scale=\"sm\" color=\"secondary\">\n Additional context, filters, or quick actions.\n </Text>\n </Stack>\n </Box>\n </AppShell.Aside>\n </AppShell>\n</Box>"
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
86
|
"name": "Collapsible Icon Sidebar",
|
|
@@ -90,22 +90,22 @@
|
|
|
90
90
|
{
|
|
91
91
|
"name": "Floating Main",
|
|
92
92
|
"description": "Only the main slot floats — rounded, raised, on its own background.",
|
|
93
|
-
"code": "import { ChartBar, Gear, House, MagnifyingGlass } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Search>\n <Box background=\"primary\" border rounded=\"sm\" paddingX=\"sm\" paddingY=\"xs\">\n <Stack direction=\"row\" align=\"center\" gap=\"sm\">\n <Icon icon={MagnifyingGlass} size=\"sm\"
|
|
93
|
+
"code": "import { ChartBar, Gear, House, MagnifyingGlass } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Search>\n <Box background=\"primary\" border rounded=\"sm\" paddingX=\"sm\" paddingY=\"xs\">\n <Stack direction=\"row\" align=\"center\" gap=\"sm\">\n <Icon icon={MagnifyingGlass} size=\"sm\" color=\"tertiary\" />\n <Text scale=\"sm\" color=\"tertiary\">Search...</Text>\n </Stack>\n </Box>\n </Header.Search>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\" variant=\"floating\">\n <Sidebar.Header>\n <Text weight=\"semibold\">MyApp</Text>\n </Sidebar.Header>\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={Gear} size=\"md\" />}>Settings</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n <Sidebar.Footer>v1.0.0</Sidebar.Footer>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\" variant=\"floating\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Floating Main</Text>\n <Text as=\"p\" color=\"secondary\">\n Main content has rounded corners and visual separation from the sidebar.\n </Text>\n </Stack>\n </AppShell.Main>\n </AppShell>\n</Box>"
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
"name": "Floating Main & Aside",
|
|
97
97
|
"description": "Two slots float independently; the sidebar stays flush.",
|
|
98
|
-
"code": "import { ChartBar, Gear, House, MagnifyingGlass } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Search>\n <Box background=\"primary\" border rounded=\"sm\" paddingX=\"sm\" paddingY=\"xs\">\n <Stack direction=\"row\" align=\"center\" gap=\"sm\">\n <Icon icon={MagnifyingGlass} size=\"sm\"
|
|
98
|
+
"code": "import { ChartBar, Gear, House, MagnifyingGlass } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Search>\n <Box background=\"primary\" border rounded=\"sm\" paddingX=\"sm\" paddingY=\"xs\">\n <Stack direction=\"row\" align=\"center\" gap=\"sm\">\n <Icon icon={MagnifyingGlass} size=\"sm\" color=\"tertiary\" />\n <Text scale=\"sm\" color=\"tertiary\">Search...</Text>\n </Stack>\n </Box>\n </Header.Search>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\" variant=\"floating\">\n <Sidebar.Header>\n <Text weight=\"semibold\">MyApp</Text>\n </Sidebar.Header>\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={Gear} size=\"md\" />}>Settings</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n <Sidebar.Footer>v1.0.0</Sidebar.Footer>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\" variant=\"floating\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Floating Main & Aside</Text>\n <Text as=\"p\" color=\"secondary\">\n Both main content and aside panel float with rounded corners.\n </Text>\n </Stack>\n </AppShell.Main>\n\n <AppShell.Aside width=\"200px\" variant=\"floating\">\n <Box padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h3\" scale=\"sm\" weight=\"semibold\">Aside Panel</Text>\n <Text as=\"p\" scale=\"sm\" color=\"secondary\">\n This aside also floats, matching the main content area.\n </Text>\n </Stack>\n </Box>\n </AppShell.Aside>\n </AppShell>\n</Box>"
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
"name": "Floating Default Layout",
|
|
102
102
|
"description": "Floating works under any layout, including header-on-top.",
|
|
103
|
-
"code": "import { ChartBar, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"default\">\n <AppShell.Header>\n <Header>\n <Header.Brand>MyApp</Header.Brand>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"180px\" collapsible=\"offcanvas\" variant=\"floating\">\n <Sidebar.Nav>\n <Sidebar.Section>\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Stats</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\" variant=\"floating\">\n <Stack gap=\"xs\">\n <Text as=\"h2\"
|
|
103
|
+
"code": "import { ChartBar, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"default\">\n <AppShell.Header>\n <Header>\n <Header.Brand>MyApp</Header.Brand>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"180px\" collapsible=\"offcanvas\" variant=\"floating\">\n <Sidebar.Nav>\n <Sidebar.Section>\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Stats</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\" variant=\"floating\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Floating Default Layout</Text>\n <Text as=\"p\" color=\"secondary\">\n Default structure (header on top) with floating main content. Any slot can float in any layout.\n </Text>\n </Stack>\n </AppShell.Main>\n </AppShell>\n</Box>"
|
|
104
104
|
},
|
|
105
105
|
{
|
|
106
106
|
"name": "Custom Backgrounds",
|
|
107
107
|
"description": "Each slot takes its own bg, so regions read apart.",
|
|
108
|
-
"code": "import { ChartBar, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\" bg=\"var(--fui-bg-elevated)\">\n <Sidebar.Header>\n <Text weight=\"semibold\">MyApp</Text>\n </Sidebar.Header>\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\" bg=\"var(--fui-bg-primary)\">\n <Stack gap=\"xs\">\n <Text as=\"h2\"
|
|
108
|
+
"code": "import { ChartBar, House } from '@phosphor-icons/react';\nimport { AppShell } from '@/components/AppShell';\nimport { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Icon } from '@/components/Icon';\nimport { Sidebar } from '@/components/Sidebar';\nimport { Stack } from '@/components/Stack';\nimport { Text } from '@/components/Text';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box height=\"360px\" overflow=\"hidden\" border rounded=\"md\">\n <AppShell layout=\"sidebar\">\n <AppShell.Header>\n <Header>\n <Header.Trigger />\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"sm\" />\n </Header.Actions>\n </Header>\n </AppShell.Header>\n\n <AppShell.Sidebar width=\"200px\" collapsible=\"offcanvas\" bg=\"var(--fui-bg-elevated)\">\n <Sidebar.Header>\n <Text weight=\"semibold\">MyApp</Text>\n </Sidebar.Header>\n <Sidebar.Nav>\n <Sidebar.Section label=\"Menu\">\n <Sidebar.Item icon={<Icon icon={House} size=\"md\" />} active>Home</Sidebar.Item>\n <Sidebar.Item icon={<Icon icon={ChartBar} size=\"md\" />}>Analytics</Sidebar.Item>\n </Sidebar.Section>\n </Sidebar.Nav>\n </AppShell.Sidebar>\n\n <AppShell.Main padding=\"md\" bg=\"var(--fui-bg-primary)\">\n <Stack gap=\"xs\">\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Custom Backgrounds</Text>\n <Text as=\"p\" color=\"secondary\">\n Sidebar uses bg-elevated (lighter), main uses bg-primary (darker). Any CSS color or token works.\n </Text>\n </Stack>\n </AppShell.Main>\n\n <AppShell.Aside width=\"200px\" bg=\"var(--fui-bg-elevated)\">\n <Box padding=\"md\">\n <Stack gap=\"xs\">\n <Text as=\"h3\" scale=\"sm\" weight=\"semibold\">Aside Panel</Text>\n <Text as=\"p\" scale=\"sm\" color=\"secondary\">\n Aside with bg-elevated background matching the sidebar.\n </Text>\n </Stack>\n </Box>\n </AppShell.Aside>\n </AppShell>\n</Box>"
|
|
109
109
|
}
|
|
110
110
|
],
|
|
111
111
|
"relations": [
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
2
3
|
@use "../../tokens/mixins" as *;
|
|
3
4
|
@use "../../recipes/navigation" as navigation;
|
|
4
5
|
|
|
6
|
+
// Tablet band (md ≤ width < lg): the sidebar stays docked but a third column
|
|
7
|
+
// would starve main, so the aside stacks under it. Below md the sidebar
|
|
8
|
+
// becomes an overlay and everything is one column.
|
|
9
|
+
@mixin tablet {
|
|
10
|
+
@media (min-width: $fui-breakpoint-md) and (max-width: #{$fui-breakpoint-lg - 1px}) {
|
|
11
|
+
@content;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
5
15
|
// ============================================
|
|
6
16
|
// AppShell Root - CSS Grid Layout
|
|
7
17
|
// ============================================
|
|
@@ -25,9 +35,9 @@
|
|
|
25
35
|
"header header header"
|
|
26
36
|
"sidebar main aside";
|
|
27
37
|
grid-template-columns:
|
|
28
|
-
var(--appshell-sidebar-width
|
|
38
|
+
var(--appshell-sidebar-width)
|
|
29
39
|
1fr
|
|
30
|
-
var(--appshell-aside-width
|
|
40
|
+
var(--appshell-aside-width);
|
|
31
41
|
grid-template-rows:
|
|
32
42
|
var(--appshell-header-height, var(--fui-appshell-header-height, $fui-appshell-header-height))
|
|
33
43
|
1fr;
|
|
@@ -40,6 +50,19 @@
|
|
|
40
50
|
transition: none;
|
|
41
51
|
}
|
|
42
52
|
|
|
53
|
+
// Tablet: sidebar + main, aside stacked under main
|
|
54
|
+
@include tablet {
|
|
55
|
+
grid-template-areas:
|
|
56
|
+
"header header"
|
|
57
|
+
"sidebar main"
|
|
58
|
+
"sidebar aside";
|
|
59
|
+
grid-template-columns: var(--appshell-sidebar-width) 1fr;
|
|
60
|
+
grid-template-rows:
|
|
61
|
+
var(--appshell-header-height, var(--fui-appshell-header-height, $fui-appshell-header-height))
|
|
62
|
+
1fr
|
|
63
|
+
auto;
|
|
64
|
+
}
|
|
65
|
+
|
|
43
66
|
// Mobile: single column layout
|
|
44
67
|
@include below-md {
|
|
45
68
|
grid-template-areas:
|
|
@@ -63,6 +86,14 @@
|
|
|
63
86
|
"sidebar header header"
|
|
64
87
|
"sidebar main aside";
|
|
65
88
|
|
|
89
|
+
@include tablet {
|
|
90
|
+
grid-template-areas:
|
|
91
|
+
"sidebar header"
|
|
92
|
+
"sidebar main"
|
|
93
|
+
"sidebar aside";
|
|
94
|
+
grid-template-columns: var(--appshell-sidebar-width) 1fr;
|
|
95
|
+
}
|
|
96
|
+
|
|
66
97
|
@include below-md {
|
|
67
98
|
grid-template-areas:
|
|
68
99
|
"header"
|
|
@@ -103,12 +134,12 @@
|
|
|
103
134
|
position: relative;
|
|
104
135
|
height: auto;
|
|
105
136
|
min-height: 100%;
|
|
106
|
-
z-index:
|
|
137
|
+
z-index: 1;
|
|
107
138
|
overflow: visible;
|
|
108
139
|
background-color: inherit;
|
|
109
140
|
// Border lives on the grid column so the rail runs the full content
|
|
110
141
|
// height; the sticky inner sidebar is viewport-tall for nav scrolling.
|
|
111
|
-
border-inline-end: var(--fui-stroke-hairline,
|
|
142
|
+
border-inline-end: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
112
143
|
var(
|
|
113
144
|
--fui-sidebar-border,
|
|
114
145
|
var(--fui-border-subtle, var(--fui-border-default, #{$fui-border-default}))
|
|
@@ -146,13 +177,13 @@
|
|
|
146
177
|
width: 0;
|
|
147
178
|
height: 100vh;
|
|
148
179
|
height: 100dvh;
|
|
149
|
-
z-index:
|
|
180
|
+
z-index: var(--fui-overlay-layer-modal, #{$fui-overlay-layer-modal});
|
|
150
181
|
border-inline-end: 0;
|
|
151
182
|
|
|
152
183
|
> aside {
|
|
153
184
|
position: relative;
|
|
154
185
|
top: 0;
|
|
155
|
-
width: var(--appshell-sidebar-expanded-width
|
|
186
|
+
width: var(--appshell-sidebar-expanded-width);
|
|
156
187
|
height: 100vh;
|
|
157
188
|
height: 100dvh;
|
|
158
189
|
}
|
|
@@ -200,10 +231,10 @@
|
|
|
200
231
|
margin: var(--fui-space-1, $fui-space-1) var(--fui-space-1, $fui-space-1)
|
|
201
232
|
var(--fui-space-1, $fui-space-1) 0;
|
|
202
233
|
padding: var(--fui-space-4, $fui-space-4);
|
|
203
|
-
border: var(--fui-stroke-hairline,
|
|
234
|
+
border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
|
|
204
235
|
border-radius: var(--fui-radius-xl, $fui-radius-xl);
|
|
205
236
|
background-color: var(--fui-app-main-bg, var(--fui-main-bg, #{$fui-main-bg}));
|
|
206
|
-
box-shadow: inset 0 var(--fui-stroke-hairline,
|
|
237
|
+
box-shadow: inset 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline}) 0
|
|
207
238
|
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 5%, transparent);
|
|
208
239
|
overflow: hidden auto;
|
|
209
240
|
|
|
@@ -220,7 +251,7 @@
|
|
|
220
251
|
// Keep these compound rules after `.mainFloating`: the explicit padding prop
|
|
221
252
|
// owns the content inset even when the floating surface supplies its default.
|
|
222
253
|
.main.paddingNone {
|
|
223
|
-
padding: 0;
|
|
254
|
+
padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
224
255
|
}
|
|
225
256
|
|
|
226
257
|
.main.paddingSm {
|
|
@@ -258,18 +289,19 @@
|
|
|
258
289
|
var(--fui-appshell-header-height, $fui-appshell-header-height)
|
|
259
290
|
)
|
|
260
291
|
);
|
|
261
|
-
width: var(--aside-width
|
|
292
|
+
width: var(--aside-width);
|
|
262
293
|
min-height: 0; // Allow shrinking in grid
|
|
263
|
-
z-index:
|
|
294
|
+
z-index: 1;
|
|
264
295
|
background-color: var(--fui-app-sidebar-bg, inherit);
|
|
265
296
|
overflow: hidden;
|
|
266
297
|
|
|
267
|
-
// Stack below main on mobile
|
|
268
|
-
@include below-
|
|
298
|
+
// Stack below main on tablet and mobile
|
|
299
|
+
@include below-lg {
|
|
269
300
|
position: static;
|
|
270
301
|
width: 100%;
|
|
271
302
|
height: auto;
|
|
272
|
-
border-top: var(--fui-stroke-hairline,
|
|
303
|
+
border-top: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
304
|
+
var(--fui-border, $fui-border);
|
|
273
305
|
}
|
|
274
306
|
}
|
|
275
307
|
|
|
@@ -295,14 +327,14 @@
|
|
|
295
327
|
);
|
|
296
328
|
margin: var(--fui-space-1, $fui-space-1) var(--fui-space-1, $fui-space-1)
|
|
297
329
|
var(--fui-space-1, $fui-space-1) 0;
|
|
298
|
-
border: var(--fui-stroke-hairline,
|
|
330
|
+
border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
|
|
299
331
|
border-radius: var(--fui-radius-xl, $fui-radius-xl);
|
|
300
332
|
background-color: var(--fui-panel-bg, inherit);
|
|
301
|
-
box-shadow: inset 0 var(--fui-stroke-hairline,
|
|
333
|
+
box-shadow: inset 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline}) 0
|
|
302
334
|
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 5%, transparent);
|
|
303
335
|
overflow: hidden;
|
|
304
336
|
|
|
305
|
-
@include below-
|
|
337
|
+
@include below-lg {
|
|
306
338
|
margin: var(--fui-space-1, $fui-space-1) 0;
|
|
307
339
|
border-left: none;
|
|
308
340
|
border-right: none;
|
|
@@ -156,7 +156,7 @@ interface AppShellContextValue {
|
|
|
156
156
|
const AppShellContext = React.createContext<AppShellContextValue>({
|
|
157
157
|
layout: "default",
|
|
158
158
|
structure: "default",
|
|
159
|
-
headerHeight: "56px",
|
|
159
|
+
headerHeight: "var(--fui-appshell-header-height, 56px)",
|
|
160
160
|
sidebarWidth: "240px",
|
|
161
161
|
sidebarCollapsedWidth: "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
162
162
|
asideWidth: "280px",
|
|
@@ -204,7 +204,7 @@ interface ExtractedConfig {
|
|
|
204
204
|
|
|
205
205
|
function extractConfigFromChildren(children: React.ReactNode): ExtractedConfig {
|
|
206
206
|
const config: ExtractedConfig = {
|
|
207
|
-
headerHeight: "56px",
|
|
207
|
+
headerHeight: "var(--fui-appshell-header-height, 56px)",
|
|
208
208
|
sidebarWidth: "240px",
|
|
209
209
|
sidebarCollapsedWidth: "var(--fui-navigation-sidebar-collapsed-width, 56px)",
|
|
210
210
|
sidebarCollapsible: "icon",
|