@usefragments/ui 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/assets/fragments-wordmark.cjs +2 -2
- package/dist/assets/fragments-wordmark.d.ts.map +1 -1
- package/dist/assets/fragments-wordmark.js +2 -2
- package/dist/assets/ui.css +4720 -4159
- package/dist/chart.cjs +24 -6
- package/dist/chart.js +24 -6
- package/dist/codeblock.cjs +55 -29
- package/dist/codeblock.js +55 -29
- package/dist/colorpicker.cjs +3 -1
- package/dist/colorpicker.js +3 -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 +15 -12
- package/dist/components/Alert/Alert.module.scss.js +15 -12
- package/dist/components/Alert/index.cjs +7 -1
- package/dist/components/Alert/index.d.ts +12 -6
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +7 -1
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/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 +19 -19
- package/dist/components/Badge/Badge.module.scss.js +19 -19
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
- package/dist/components/Box/Box.module.scss.cjs +152 -152
- package/dist/components/Box/Box.module.scss.js +152 -152
- package/dist/components/Box/index.cjs +64 -75
- package/dist/components/Box/index.d.ts +16 -16
- package/dist/components/Box/index.d.ts.map +1 -1
- package/dist/components/Box/index.js +64 -75
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
- package/dist/components/Button/Button.module.scss.cjs +14 -14
- package/dist/components/Button/Button.module.scss.js +14 -14
- package/dist/components/Card/Card.module.scss.cjs +29 -17
- package/dist/components/Card/Card.module.scss.js +30 -18
- package/dist/components/Card/index.cjs +8 -0
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +8 -0
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -9
- package/dist/components/Checkbox/Checkbox.module.scss.js +9 -9
- package/dist/components/Checkbox/index.cjs +2 -2
- 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 +15 -15
- package/dist/components/Chip/Chip.module.scss.js +15 -15
- package/dist/components/Chip/index.cjs +2 -1
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +2 -1
- 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 +17 -3
- 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 +17 -1
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +17 -1
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- package/dist/components/Command/index.cjs +26 -15
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +26 -15
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- 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 +27 -27
- package/dist/components/DataTable/DataTable.module.scss.js +27 -27
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
- package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
- package/dist/components/Dialog/Dialog.module.scss.js +14 -14
- package/dist/components/Dialog/index.cjs +11 -14
- package/dist/components/Dialog/index.d.ts +7 -7
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +11 -14
- package/dist/components/Drawer/Drawer.module.scss.cjs +29 -29
- package/dist/components/Drawer/Drawer.module.scss.js +29 -29
- 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 +8 -6
- package/dist/components/EmptyState/index.d.ts +9 -4
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +8 -6
- package/dist/components/Field/Field.module.scss.cjs +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/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 +15 -15
- package/dist/components/Icon/Icon.module.scss.js +15 -15
- package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
- package/dist/components/IconButton/IconButton.module.scss.js +8 -8
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.js +2 -1
- package/dist/components/Image/Image.module.scss.cjs +27 -27
- package/dist/components/Image/Image.module.scss.js +27 -27
- package/dist/components/Input/Input.module.scss.cjs +17 -17
- package/dist/components/Input/Input.module.scss.js +17 -17
- package/dist/components/Link/Link.module.scss.cjs +14 -10
- package/dist/components/Link/Link.module.scss.js +14 -10
- package/dist/components/Link/index.d.ts +1 -1
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/List/List.module.scss.cjs +19 -19
- package/dist/components/List/List.module.scss.js +19 -19
- package/dist/components/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 +1 -1
- package/dist/components/Loading/index.js +1 -1
- 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 +18 -18
- package/dist/components/Message/Message.module.scss.js +18 -18
- 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 +25 -25
- package/dist/components/Progress/Progress.module.scss.js +25 -25
- package/dist/components/Prompt/Prompt.module.scss.cjs +28 -28
- package/dist/components/Prompt/Prompt.module.scss.js +28 -28
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -15
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -15
- 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/Separator/Separator.module.scss.cjs +11 -11
- package/dist/components/Separator/Separator.module.scss.js +11 -11
- 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 +12 -35
- 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 +12 -35
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
- 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 +13 -9
- package/dist/components/TableOfContents/index.d.ts +5 -3
- package/dist/components/TableOfContents/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.js +13 -9
- package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
- package/dist/components/Tabs/Tabs.module.scss.js +12 -12
- package/dist/components/Tabs/index.cjs +26 -6
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +26 -6
- package/dist/components/Text/Text.module.scss.cjs +87 -75
- package/dist/components/Text/Text.module.scss.js +87 -75
- package/dist/components/Text/index.cjs +49 -41
- package/dist/components/Text/index.d.ts +12 -11
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +49 -41
- package/dist/components/Textarea/Textarea.module.scss.cjs +24 -24
- package/dist/components/Textarea/Textarea.module.scss.js +24 -24
- package/dist/components/Theme/index.cjs +2 -1
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +2 -1
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +9 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +9 -6
- package/dist/components/ThemeToggle/index.cjs +31 -6
- package/dist/components/ThemeToggle/index.d.ts +7 -2
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +32 -7
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
- 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/index.d.ts +2 -2
- package/dist/data-table.cjs +2 -1
- package/dist/data-table.js +2 -1
- package/dist/datepicker.cjs +3 -2
- package/dist/datepicker.js +3 -2
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +21 -29
- package/dist/measurements/generated.cjs +9 -1
- package/dist/measurements/generated.d.ts +7 -0
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +9 -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 -6
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +10 -6
- package/fragments.json +1 -1
- package/package.json +6 -4
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Alert/Alert.contract.json +37 -53
- package/src/components/Alert/Alert.module.scss +24 -0
- package/src/components/Alert/index.tsx +55 -29
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +53 -40
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +4 -1
- package/src/components/Badge/Badge.contract.json +37 -42
- package/src/components/Badge/Badge.module.scss +9 -2
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +12 -7
- package/src/components/Button/Button.module.scss +8 -7
- package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
- package/src/components/Card/Card.module.scss +82 -1
- package/src/components/Card/index.tsx +21 -2
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/index.tsx +36 -6
- package/src/components/Checkbox/Checkbox.contract.json +24 -24
- package/src/components/Checkbox/Checkbox.module.scss +32 -23
- package/src/components/Checkbox/index.tsx +4 -2
- package/src/components/Chip/Chip.contract.json +33 -40
- package/src/components/Chip/Chip.module.scss +2 -2
- package/src/components/Chip/index.tsx +2 -1
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +40 -15
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +91 -35
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +15 -12
- package/src/components/ColorPicker/index.tsx +5 -1
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +1 -1
- package/src/components/Combobox/index.tsx +31 -5
- package/src/components/Command/Command.contract.json +21 -43
- package/src/components/Command/index.tsx +58 -47
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +12 -8
- package/src/components/DataTable/index.tsx +8 -7
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +12 -5
- package/src/components/DatePicker/index.tsx +5 -2
- package/src/components/Dialog/Dialog.module.scss +3 -3
- package/src/components/Dialog/index.tsx +47 -37
- package/src/components/Drawer/Drawer.contract.json +22 -36
- package/src/components/Editor/Editor.contract.json +31 -48
- package/src/components/Editor/Editor.module.scss +36 -14
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +31 -43
- package/src/components/EmptyState/EmptyState.module.scss +8 -0
- package/src/components/EmptyState/index.tsx +48 -23
- package/src/components/Field/Field.contract.json +28 -46
- package/src/components/Field/index.tsx +5 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +10 -3
- package/src/components/Form/Form.contract.json +20 -20
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/index.tsx +10 -10
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +36 -21
- package/src/components/Header/index.tsx +134 -122
- package/src/components/Icon/Icon.contract.json +22 -62
- package/src/components/IconButton/IconButton.contract.json +34 -18
- package/src/components/IconButton/IconButton.module.scss +6 -7
- package/src/components/IconButton/index.tsx +2 -1
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +26 -32
- package/src/components/Input/Input.module.scss +3 -2
- package/src/components/Link/Link.contract.json +32 -52
- package/src/components/Link/Link.module.scss +23 -6
- package/src/components/Link/index.tsx +1 -1
- package/src/components/List/List.contract.json +23 -52
- package/src/components/List/List.module.scss +1 -1
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Loading/Loading.contract.json +37 -61
- package/src/components/Loading/Loading.module.scss +10 -7
- package/src/components/Loading/index.tsx +2 -2
- 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 +43 -5
- package/src/components/Markdown/index.tsx +48 -49
- package/src/components/Menu/Menu.contract.json +25 -41
- package/src/components/Menu/Menu.module.scss +23 -8
- package/src/components/Message/Message.contract.json +29 -52
- package/src/components/Message/Message.module.scss +12 -5
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +64 -19
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +2 -2
- package/src/components/Popover/Popover.contract.json +24 -46
- package/src/components/Popover/Popover.module.scss +6 -5
- package/src/components/Progress/Progress.contract.json +32 -28
- package/src/components/Progress/Progress.module.scss +3 -2
- package/src/components/Prompt/Prompt.contract.json +31 -47
- package/src/components/Prompt/Prompt.module.scss +13 -5
- package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
- package/src/components/RadioGroup/RadioGroup.module.scss +13 -14
- package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
- package/src/components/ScrollArea/ScrollArea.module.scss +15 -15
- package/src/components/ScrollArea/index.tsx +16 -16
- package/src/components/ScrollArea/scroll-state.ts +24 -24
- package/src/components/Select/Select.module.scss +2 -2
- package/src/components/Separator/Separator.contract.json +24 -48
- package/src/components/Sidebar/Sidebar.contract.json +35 -67
- package/src/components/Sidebar/Sidebar.module.scss +22 -13
- package/src/components/Sidebar/index.tsx +164 -164
- package/src/components/Skeleton/Skeleton.contract.json +28 -54
- package/src/components/Skeleton/Skeleton.module.scss +27 -10
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +3 -3
- package/src/components/Stack/Stack.contract.json +29 -56
- package/src/components/Stack/Stack.module.scss +13 -12
- package/src/components/Stack/index.tsx +3 -3
- package/src/components/Switch/Switch.contract.json +33 -46
- package/src/components/Switch/Switch.module.scss +64 -26
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +15 -3
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +15 -5
- package/src/components/TableOfContents/index.tsx +26 -9
- package/src/components/Tabs/Tabs.contract.json +24 -45
- package/src/components/Tabs/Tabs.module.scss +1 -1
- package/src/components/Tabs/index.tsx +15 -3
- package/src/components/Text/Text.contract.json +30 -72
- package/src/components/Text/Text.module.scss +21 -4
- package/src/components/Text/index.tsx +113 -75
- package/src/components/Textarea/Textarea.contract.json +25 -43
- package/src/components/Textarea/Textarea.module.scss +2 -4
- package/src/components/Theme/Theme.contract.json +32 -51
- package/src/components/Theme/index.tsx +2 -1
- package/src/components/ThemeToggle/ThemeToggle.module.scss +23 -7
- package/src/components/ThemeToggle/index.tsx +43 -7
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
- package/src/components/Toast/Toast.contract.json +30 -40
- package/src/components/Toast/Toast.module.scss +1 -1
- package/src/components/ToggleGroup/ToggleGroup.contract.json +29 -30
- package/src/components/ToggleGroup/ToggleGroup.module.scss +38 -5
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +2 -2
- package/src/measurements/generated.ts +9 -2
- package/src/measurements/measurements.json +7 -0
- package/src/recipes/_boolean-range.scss +3 -11
- package/src/recipes/_field.scss +5 -1
- package/src/recipes/_layout.scss +14 -7
- package/src/recipes/_popup.scss +12 -2
- package/src/recipes/_prose.scss +13 -5
- package/src/recipes/_table-chrome.scss +16 -2
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +20 -19
- package/src/tokens/_computed.scss +5 -16
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +6 -1
- package/src/tokens/_measurements.generated.scss +14 -1
- package/src/tokens/_mixins.scss +7 -8
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_seeds.scss +20 -20
- package/src/tokens/_variables.scss +183 -38
- 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 +10 -6
- 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
|
@@ -5,9 +5,14 @@ import { useResolvedControlSize } from "../ComponentDefaults";
|
|
|
5
5
|
import { useTheme, type ThemeMode } from "../Theme/context";
|
|
6
6
|
import styles from "./ThemeToggle.module.scss";
|
|
7
7
|
|
|
8
|
-
export interface ThemeToggleProps extends React.HTMLAttributes<
|
|
8
|
+
export interface ThemeToggleProps extends React.HTMLAttributes<HTMLElement> {
|
|
9
9
|
/** Size of the toggle button */
|
|
10
10
|
size?: "sm" | "md" | "lg";
|
|
11
|
+
/**
|
|
12
|
+
* `group` is the segmented light/dark control. `icon` is a single button
|
|
13
|
+
* that shows the current resolved theme and toggles light ↔ dark.
|
|
14
|
+
*/
|
|
15
|
+
appearance?: "group" | "icon";
|
|
11
16
|
/** Whether to include system mode option (default: false) */
|
|
12
17
|
showSystem?: boolean;
|
|
13
18
|
/** Controlled value for custom usage (bypasses theme context) */
|
|
@@ -71,6 +76,7 @@ function MonitorIcon({ size = 20 }: { size?: number }) {
|
|
|
71
76
|
*/
|
|
72
77
|
export function ThemeToggle({
|
|
73
78
|
size: sizeProp,
|
|
79
|
+
appearance = "group",
|
|
74
80
|
showSystem = false,
|
|
75
81
|
value: controlledValue,
|
|
76
82
|
onValueChange,
|
|
@@ -79,10 +85,44 @@ export function ThemeToggle({
|
|
|
79
85
|
...htmlProps
|
|
80
86
|
}: ThemeToggleProps) {
|
|
81
87
|
const size = useResolvedControlSize(sizeProp);
|
|
82
|
-
const {
|
|
88
|
+
const {
|
|
89
|
+
mode: contextMode,
|
|
90
|
+
setMode: setContextMode,
|
|
91
|
+
resolvedMode,
|
|
92
|
+
toggleMode,
|
|
93
|
+
} = useTheme();
|
|
83
94
|
|
|
84
95
|
const isControlled = controlledValue !== undefined;
|
|
85
96
|
const currentMode = isControlled ? controlledValue : contextMode;
|
|
97
|
+
const sizeClass = styles[`size${size.charAt(0).toUpperCase() + size.slice(1)}`];
|
|
98
|
+
|
|
99
|
+
if (appearance === "icon") {
|
|
100
|
+
const resolved = isControlled ? controlledValue : resolvedMode;
|
|
101
|
+
const nextMode = resolved === "dark" ? "light" : "dark";
|
|
102
|
+
const iconClasses = [styles.toggleButton, styles.iconButton, sizeClass, className]
|
|
103
|
+
.filter(Boolean)
|
|
104
|
+
.join(" ");
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<button
|
|
108
|
+
{...(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>)}
|
|
109
|
+
type="button"
|
|
110
|
+
className={iconClasses}
|
|
111
|
+
onClick={() => {
|
|
112
|
+
if (isControlled) {
|
|
113
|
+
onValueChange?.(nextMode);
|
|
114
|
+
} else {
|
|
115
|
+
toggleMode();
|
|
116
|
+
}
|
|
117
|
+
}}
|
|
118
|
+
aria-label={
|
|
119
|
+
ariaLabel ?? (resolved === "dark" ? "Switch to light mode" : "Switch to dark mode")
|
|
120
|
+
}
|
|
121
|
+
>
|
|
122
|
+
{resolved === "dark" ? <MoonIcon /> : <SunIcon />}
|
|
123
|
+
</button>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
86
126
|
|
|
87
127
|
const handleModeChange = (newMode: "light" | "dark") => {
|
|
88
128
|
if (isControlled) {
|
|
@@ -92,11 +132,7 @@ export function ThemeToggle({
|
|
|
92
132
|
}
|
|
93
133
|
};
|
|
94
134
|
|
|
95
|
-
const groupClasses = [
|
|
96
|
-
styles.toggleGroup,
|
|
97
|
-
styles[`size${size.charAt(0).toUpperCase() + size.slice(1)}`],
|
|
98
|
-
className,
|
|
99
|
-
]
|
|
135
|
+
const groupClasses = [styles.toggleGroup, sizeClass, className]
|
|
100
136
|
.filter(Boolean)
|
|
101
137
|
.join(" ");
|
|
102
138
|
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "ThinkingIndicator",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Shows that an AI response is being generated.",
|
|
5
5
|
"category": "ai",
|
|
6
|
-
"tags": [
|
|
7
|
-
"thinking",
|
|
8
|
-
"loading",
|
|
9
|
-
"ai",
|
|
10
|
-
"processing",
|
|
11
|
-
"indicator",
|
|
12
|
-
"animation"
|
|
13
|
-
],
|
|
6
|
+
"tags": ["thinking", "loading", "ai", "processing", "indicator", "animation"],
|
|
14
7
|
"status": "stable",
|
|
15
8
|
"sourcePath": "src/components/ThinkingIndicator/index.tsx",
|
|
16
9
|
"exportName": "ThinkingIndicator",
|
|
@@ -39,11 +32,7 @@
|
|
|
39
32
|
"description": "Animation style",
|
|
40
33
|
"default": "dots",
|
|
41
34
|
"required": false,
|
|
42
|
-
"values": [
|
|
43
|
-
"dots",
|
|
44
|
-
"pulse",
|
|
45
|
-
"spinner"
|
|
46
|
-
]
|
|
35
|
+
"values": ["dots", "pulse", "spinner"]
|
|
47
36
|
},
|
|
48
37
|
"showElapsed": {
|
|
49
38
|
"type": "boolean",
|
|
@@ -59,21 +48,21 @@
|
|
|
59
48
|
},
|
|
60
49
|
"usage": {
|
|
61
50
|
"when": [
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
51
|
+
"A model is working on a request",
|
|
52
|
+
"Async AI work that would otherwise look frozen",
|
|
53
|
+
"Multi-stage tasks worth showing stage by stage",
|
|
54
|
+
"The moment before streaming starts"
|
|
66
55
|
],
|
|
67
56
|
"whenNot": [
|
|
68
|
-
"
|
|
69
|
-
"Form submission
|
|
70
|
-
"
|
|
57
|
+
"Ordinary loading (use Progress or Skeleton)",
|
|
58
|
+
"Form submission (use the Button loading state)",
|
|
59
|
+
"Whole-page loading (use Progress or Skeleton)"
|
|
71
60
|
],
|
|
72
61
|
"guidelines": [
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"Use steps for
|
|
62
|
+
"active controls whether it shows at all",
|
|
63
|
+
"dots suits chat; spinner suits a discrete action",
|
|
64
|
+
"Turn on showElapsed once waits run past a few seconds",
|
|
65
|
+
"Use steps for tool calls, research, and other staged work"
|
|
77
66
|
],
|
|
78
67
|
"accessibility": [
|
|
79
68
|
"Uses role=\"status\" and aria-live=\"polite\"",
|
|
@@ -85,37 +74,37 @@
|
|
|
85
74
|
"examples": [
|
|
86
75
|
{
|
|
87
76
|
"name": "Dots (Default)",
|
|
88
|
-
"description": "
|
|
77
|
+
"description": "Three dots bounce in sequence; the quietest option.",
|
|
89
78
|
"code": "<ThinkingIndicator variant=\"dots\" label=\"Thinking...\" />"
|
|
90
79
|
},
|
|
91
80
|
{
|
|
92
81
|
"name": "Pulse",
|
|
93
|
-
"description": "
|
|
82
|
+
"description": "A single ring breathes in place.",
|
|
94
83
|
"code": "<ThinkingIndicator variant=\"pulse\" label=\"Processing...\" />"
|
|
95
84
|
},
|
|
96
85
|
{
|
|
97
86
|
"name": "Spinner",
|
|
98
|
-
"description": "
|
|
87
|
+
"description": "A rotating arc, for work with a definite end.",
|
|
99
88
|
"code": "<ThinkingIndicator variant=\"spinner\" label=\"Loading...\" />"
|
|
100
89
|
},
|
|
101
90
|
{
|
|
102
91
|
"name": "With Elapsed Time",
|
|
103
|
-
"description": "
|
|
92
|
+
"description": "A live counter reassures the reader during long waits.",
|
|
104
93
|
"code": "<ThinkingIndicator\n variant=\"dots\"\n label=\"Generating response...\"\n showElapsed\n/>"
|
|
105
94
|
},
|
|
106
95
|
{
|
|
107
96
|
"name": "Multi-Step Progress",
|
|
108
|
-
"description": "
|
|
97
|
+
"description": "Finished, running, and queued stages read at a glance.",
|
|
109
98
|
"code": "<ThinkingIndicator\n variant=\"spinner\"\n label=\"Working...\"\n steps={[\n { id: '1', label: 'Analyzing request', status: 'complete' },\n { id: '2', label: 'Searching knowledge base', status: 'active' },\n { id: '3', label: 'Generating response', status: 'pending' },\n ]}\n/>"
|
|
110
99
|
},
|
|
111
100
|
{
|
|
112
101
|
"name": "With Error Step",
|
|
113
|
-
"description": "
|
|
102
|
+
"description": "A failed stage turns red while the next one retries.",
|
|
114
103
|
"code": "<ThinkingIndicator\n variant=\"spinner\"\n label=\"Retrying...\"\n steps={[\n { id: '1', label: 'Connecting to API', status: 'complete' },\n { id: '2', label: 'Fetching data', status: 'error' },\n { id: '3', label: 'Retrying with fallback', status: 'active' },\n ]}\n/>"
|
|
115
104
|
},
|
|
116
105
|
{
|
|
117
106
|
"name": "Custom Label",
|
|
118
|
-
"description": "
|
|
107
|
+
"description": "Name the actual task instead of a generic status.",
|
|
119
108
|
"code": "<ThinkingIndicator\n variant=\"dots\"\n label=\"Claude is writing code...\"\n/>"
|
|
120
109
|
}
|
|
121
110
|
],
|
|
@@ -144,17 +133,11 @@
|
|
|
144
133
|
"showElapsed: boolean - show elapsed time",
|
|
145
134
|
"steps: ThinkingStep[] - multi-step progress"
|
|
146
135
|
],
|
|
147
|
-
"a11yRules": [
|
|
148
|
-
"A11Y_ARIA_LIVE",
|
|
149
|
-
"A11Y_MOTION_PREFERENCE"
|
|
150
|
-
]
|
|
136
|
+
"a11yRules": ["A11Y_ARIA_LIVE", "A11Y_MOTION_PREFERENCE"]
|
|
151
137
|
},
|
|
152
138
|
"ai": {
|
|
153
139
|
"compositionPattern": "compound",
|
|
154
|
-
"subComponents": [
|
|
155
|
-
"Steps",
|
|
156
|
-
"Step"
|
|
157
|
-
]
|
|
140
|
+
"subComponents": ["Steps", "Step"]
|
|
158
141
|
},
|
|
159
142
|
"provenance": {
|
|
160
143
|
"source": "migrated",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Toast",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Briefly reports what just happened, without blocking the page.",
|
|
5
5
|
"category": "feedback",
|
|
6
6
|
"tags": ["notification", "alert", "message", "feedback"],
|
|
7
7
|
"status": "stable",
|
|
@@ -70,62 +70,52 @@
|
|
|
70
70
|
},
|
|
71
71
|
"usage": {
|
|
72
72
|
"when": [
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
73
|
+
"Confirming an action landed",
|
|
74
|
+
"Reporting whether an operation worked",
|
|
75
|
+
"News the user does not have to act on",
|
|
76
|
+
"Messages that can disappear on their own"
|
|
77
77
|
],
|
|
78
78
|
"whenNot": [
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
79
|
+
"Errors the user must resolve — use Dialog",
|
|
80
|
+
"Anything that must stay on screen — use Alert",
|
|
81
|
+
"Field-level validation — use form error states",
|
|
82
|
+
"Site-wide notices — use a banner"
|
|
83
83
|
],
|
|
84
84
|
"guidelines": [
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"Auto-dismiss
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"useToast()
|
|
85
|
+
"One sentence, plus a title if it helps",
|
|
86
|
+
"Match the variant to what actually happened",
|
|
87
|
+
"Auto-dismiss in three to five seconds",
|
|
88
|
+
"Anything with an action needs a manual dismiss too",
|
|
89
|
+
"Two or three on screen at once, no more",
|
|
90
|
+
"useToast() helpers take (title, description) or an options object for action, duration, and id"
|
|
91
91
|
],
|
|
92
92
|
"accessibility": [
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
93
|
+
"role=\"alert\" for anything the user must not miss",
|
|
94
|
+
"Leave enough time to read it",
|
|
95
|
+
"Never let colour be the only signal",
|
|
96
|
+
"Give the dismiss button a real label"
|
|
97
97
|
]
|
|
98
98
|
},
|
|
99
99
|
"examples": [
|
|
100
100
|
{
|
|
101
101
|
"name": "Default",
|
|
102
|
-
"description": "
|
|
103
|
-
"code": "<
|
|
102
|
+
"description": "Neutral message with a title and one line under it.",
|
|
103
|
+
"code": "<Toast\n title=\"Draft saved\"\n description=\"We will keep it until you publish.\"\n/>"
|
|
104
104
|
},
|
|
105
105
|
{
|
|
106
|
-
"name": "
|
|
107
|
-
"description": "
|
|
108
|
-
"code": "<Toast\n
|
|
106
|
+
"name": "Variants",
|
|
107
|
+
"description": "Icon and colour together carry the outcome.",
|
|
108
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"sm\">\n <Toast\n title=\"Success!\"\n description=\"Your changes have been saved.\"\n variant=\"success\"\n />\n <Toast\n title=\"Error\"\n description=\"Failed to save changes. Please try again.\"\n variant=\"error\"\n />\n <Toast\n title=\"Warning\"\n description=\"This action cannot be undone.\"\n variant=\"warning\"\n />\n <Toast\n title=\"New update\"\n description=\"Version 2.0 is now available.\"\n variant=\"info\"\n />\n</Stack>"
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
|
-
"name": "
|
|
112
|
-
"description": "
|
|
113
|
-
"code": "<Toast\n title=\"
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"name": "Warning",
|
|
117
|
-
"description": "Warning message variant",
|
|
118
|
-
"code": "<Toast\n title=\"Warning\"\n description=\"This action cannot be undone.\"\n variant=\"warning\"\n/>"
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
"name": "Info",
|
|
122
|
-
"description": "Informational message variant",
|
|
123
|
-
"code": "<Toast\n title=\"New Update\"\n description=\"Version 2.0 is now available.\"\n variant=\"info\"\n/>"
|
|
111
|
+
"name": "With Action",
|
|
112
|
+
"description": "One-tap way back from something destructive.",
|
|
113
|
+
"code": "<Toast\n title=\"File deleted\"\n description=\"The file has been moved to trash.\"\n action={{\n label: 'Undo',\n onClick: () => {},\n }}\n/>"
|
|
124
114
|
},
|
|
125
115
|
{
|
|
126
|
-
"name": "
|
|
127
|
-
"description": "
|
|
128
|
-
"code": "<Toast\n title=\"
|
|
116
|
+
"name": "Dismissible",
|
|
117
|
+
"description": "onDismiss adds a close button for longer messages.",
|
|
118
|
+
"code": "<Toast\n title=\"Export running\"\n description=\"We will email you when the file is ready.\"\n variant=\"info\"\n onDismiss={() => {}}\n/>"
|
|
129
119
|
}
|
|
130
120
|
],
|
|
131
121
|
"relations": [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "ToggleGroup",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
4
|
+
"description": "Picks exactly one option from a short row of toggle buttons.",
|
|
5
|
+
"category": "actions",
|
|
6
6
|
"tags": ["toggle", "group", "fragmented", "control", "tabs", "switch"],
|
|
7
7
|
"status": "stable",
|
|
8
8
|
"sourcePath": "src/components/ToggleGroup/index.tsx",
|
|
@@ -75,64 +75,63 @@
|
|
|
75
75
|
"usage": {
|
|
76
76
|
"when": [
|
|
77
77
|
"Switching between mutually exclusive views or modes",
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"Filter or sort options"
|
|
78
|
+
"Choosing one of two to five options",
|
|
79
|
+
"View switchers and segmented filters"
|
|
81
80
|
],
|
|
82
81
|
"whenNot": [
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
82
|
+
"More than one can be picked — use a Checkbox group",
|
|
83
|
+
"More than five options — use Select or RadioGroup",
|
|
84
|
+
"Moving between pages — use Tabs",
|
|
85
|
+
"A single on/off — use Switch"
|
|
87
86
|
],
|
|
88
87
|
"guidelines": [
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
88
|
+
"Two to five items",
|
|
89
|
+
"Labels short enough to scan in one pass",
|
|
90
|
+
"Icons work for well-known modes like grid and list",
|
|
91
|
+
"default for an inset tonal rail, pills for an open filter cluster, outlined for connected segments",
|
|
92
|
+
"Keep targets at least 24px on touch"
|
|
94
93
|
],
|
|
95
94
|
"accessibility": [
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"Focus visible on
|
|
95
|
+
"The group is a radiogroup; each item is a radio with aria-checked",
|
|
96
|
+
"Arrow keys move between items, Tab enters and leaves the group",
|
|
97
|
+
"Icon-only items still need an aria-label",
|
|
98
|
+
"Focus stays visible on the selected item"
|
|
100
99
|
]
|
|
101
100
|
},
|
|
102
101
|
"examples": [
|
|
103
102
|
{
|
|
104
103
|
"name": "Default",
|
|
105
|
-
"description": "
|
|
104
|
+
"description": "Inset tonal rail; the selected segment lifts.",
|
|
106
105
|
"code": "<ToggleGroup value={value} onChange={setValue}>\n <ToggleGroup.Item value=\"left\">Left</ToggleGroup.Item>\n <ToggleGroup.Item value=\"center\">Center</ToggleGroup.Item>\n <ToggleGroup.Item value=\"right\">Right</ToggleGroup.Item>\n</ToggleGroup>"
|
|
107
106
|
},
|
|
108
107
|
{
|
|
109
|
-
"name": "Pills
|
|
110
|
-
"description": "
|
|
108
|
+
"name": "Pills",
|
|
109
|
+
"description": "Detached rounded buttons for open filter clusters.",
|
|
111
110
|
"code": "<ToggleGroup value={value} onChange={setValue} variant=\"pills\">\n <ToggleGroup.Item value=\"all\">All</ToggleGroup.Item>\n <ToggleGroup.Item value=\"active\">Active</ToggleGroup.Item>\n <ToggleGroup.Item value=\"completed\">Completed</ToggleGroup.Item>\n</ToggleGroup>"
|
|
112
111
|
},
|
|
113
112
|
{
|
|
114
|
-
"name": "
|
|
115
|
-
"description": "
|
|
113
|
+
"name": "Outlined",
|
|
114
|
+
"description": "Bordered segments sharing one continuous edge.",
|
|
116
115
|
"code": "<ToggleGroup value={value} onChange={setValue} variant=\"outlined\">\n <ToggleGroup.Item value=\"day\">Day</ToggleGroup.Item>\n <ToggleGroup.Item value=\"week\">Week</ToggleGroup.Item>\n <ToggleGroup.Item value=\"month\">Month</ToggleGroup.Item>\n</ToggleGroup>"
|
|
117
116
|
},
|
|
118
117
|
{
|
|
119
118
|
"name": "Uncontrolled",
|
|
120
|
-
"description": "
|
|
119
|
+
"description": "defaultValue when nothing outside needs the selection.",
|
|
121
120
|
"code": "<ToggleGroup defaultValue=\"list\">\n <ToggleGroup.Item value=\"grid\">Grid</ToggleGroup.Item>\n <ToggleGroup.Item value=\"list\">List</ToggleGroup.Item>\n</ToggleGroup>"
|
|
122
121
|
},
|
|
123
122
|
{
|
|
124
123
|
"name": "Sizes",
|
|
125
|
-
"description": "
|
|
126
|
-
"code": "
|
|
124
|
+
"description": "sm for toolbars, lg where the rail anchors a page.",
|
|
125
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\" align=\"start\">\n <ToggleGroup defaultValue=\"a\" size=\"sm\">\n <ToggleGroup.Item value=\"a\">Small</ToggleGroup.Item>\n <ToggleGroup.Item value=\"b\">Rail</ToggleGroup.Item>\n </ToggleGroup>\n <ToggleGroup defaultValue=\"a\" size=\"md\">\n <ToggleGroup.Item value=\"a\">Medium</ToggleGroup.Item>\n <ToggleGroup.Item value=\"b\">Rail</ToggleGroup.Item>\n </ToggleGroup>\n <ToggleGroup defaultValue=\"a\" size=\"lg\">\n <ToggleGroup.Item value=\"a\">Large</ToggleGroup.Item>\n <ToggleGroup.Item value=\"b\">Rail</ToggleGroup.Item>\n </ToggleGroup>\n</Stack>"
|
|
127
126
|
},
|
|
128
127
|
{
|
|
129
128
|
"name": "View Switcher",
|
|
130
|
-
"description": "
|
|
131
|
-
"code": "<ToggleGroup value={view} onChange={setView} size=\"sm\">\n <ToggleGroup.Item value=\"grid\"
|
|
129
|
+
"description": "Icon-only modes, each named for screen readers.",
|
|
130
|
+
"code": "import { SquaresFour as GridIcon, ListBullets as ListIcon } from '@phosphor-icons/react';\n\n<ToggleGroup value={view} onChange={setView} size=\"sm\">\n <ToggleGroup.Item value=\"grid\" aria-label=\"Grid view\">\n <GridIcon aria-hidden />\n </ToggleGroup.Item>\n <ToggleGroup.Item value=\"list\" aria-label=\"List view\">\n <ListIcon aria-hidden />\n </ToggleGroup.Item>\n</ToggleGroup>"
|
|
132
131
|
},
|
|
133
132
|
{
|
|
134
|
-
"name": "
|
|
135
|
-
"description": "
|
|
133
|
+
"name": "Disabled Item",
|
|
134
|
+
"description": "One option locked out; the rest stay reachable.",
|
|
136
135
|
"code": "<ToggleGroup value={value} onChange={setValue}>\n <ToggleGroup.Item value=\"basic\">Basic</ToggleGroup.Item>\n <ToggleGroup.Item value=\"pro\">Pro</ToggleGroup.Item>\n <ToggleGroup.Item value=\"enterprise\" disabled>Enterprise</ToggleGroup.Item>\n</ToggleGroup>"
|
|
137
136
|
}
|
|
138
137
|
],
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
position: relative;
|
|
35
35
|
border: 0;
|
|
36
36
|
white-space: nowrap;
|
|
37
|
-
user-select: none;
|
|
38
37
|
transition:
|
|
39
38
|
background-color var(--fui-transition-fast, $fui-transition-fast),
|
|
40
39
|
border-color var(--fui-transition-fast, $fui-transition-fast),
|
|
@@ -112,14 +111,36 @@
|
|
|
112
111
|
var(--_fui-segmented-track) - var(--fui-raw-space-2, 2px) - var(--fui-raw-space-2, 2px)
|
|
113
112
|
);
|
|
114
113
|
background-color: transparent;
|
|
115
|
-
|
|
114
|
+
// Connected segments: only outer corners are rounded. Per-item full radius
|
|
115
|
+
// left a rail-colored notch between items that reads as a gap.
|
|
116
|
+
border-radius: 0;
|
|
117
|
+
|
|
118
|
+
&:first-child {
|
|
119
|
+
border-start-start-radius: var(--fui-radius-md, $fui-radius-md);
|
|
120
|
+
border-end-start-radius: var(--fui-radius-md, $fui-radius-md);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
&:last-child {
|
|
124
|
+
border-start-end-radius: var(--fui-radius-md, $fui-radius-md);
|
|
125
|
+
border-end-end-radius: var(--fui-radius-md, $fui-radius-md);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
&:only-child {
|
|
129
|
+
border-radius: var(--fui-radius-md, $fui-radius-md);
|
|
130
|
+
}
|
|
116
131
|
|
|
117
132
|
&:hover:not(:disabled):not(.selected) {
|
|
118
133
|
background-color: var(--fui-bg-hover, $fui-bg-hover);
|
|
119
134
|
}
|
|
120
135
|
|
|
121
136
|
&.selected {
|
|
122
|
-
background-color: var(
|
|
137
|
+
background-color: var(
|
|
138
|
+
--fui-toggle-group-selected-bg,
|
|
139
|
+
var(
|
|
140
|
+
--fui-control-selected-bg,
|
|
141
|
+
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 9%, transparent)
|
|
142
|
+
)
|
|
143
|
+
);
|
|
123
144
|
box-shadow:
|
|
124
145
|
inset 0 0 0 var(--fui-stroke-hairline, 1px)
|
|
125
146
|
var(--fui-toggle-group-selected-border, transparent),
|
|
@@ -143,7 +164,13 @@
|
|
|
143
164
|
}
|
|
144
165
|
|
|
145
166
|
&.selected {
|
|
146
|
-
background-color: var(
|
|
167
|
+
background-color: var(
|
|
168
|
+
--fui-toggle-group-selected-bg,
|
|
169
|
+
var(
|
|
170
|
+
--fui-control-selected-bg,
|
|
171
|
+
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 9%, transparent)
|
|
172
|
+
)
|
|
173
|
+
);
|
|
147
174
|
box-shadow:
|
|
148
175
|
inset 0 0 0 var(--fui-stroke-hairline, 1px)
|
|
149
176
|
var(--fui-toggle-group-selected-border, transparent),
|
|
@@ -197,7 +224,13 @@
|
|
|
197
224
|
}
|
|
198
225
|
|
|
199
226
|
&.selected {
|
|
200
|
-
background-color: var(
|
|
227
|
+
background-color: var(
|
|
228
|
+
--fui-toggle-group-selected-bg,
|
|
229
|
+
var(
|
|
230
|
+
--fui-control-selected-bg,
|
|
231
|
+
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 9%, transparent)
|
|
232
|
+
)
|
|
233
|
+
);
|
|
201
234
|
box-shadow:
|
|
202
235
|
inset 0 0 0 var(--fui-stroke-hairline, 1px)
|
|
203
236
|
var(--fui-toggle-group-selected-border, transparent),
|