@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
|
@@ -67,27 +67,27 @@
|
|
|
67
67
|
{
|
|
68
68
|
"name": "Default",
|
|
69
69
|
"description": "Confirming action sits last in the row.",
|
|
70
|
-
"code": "<ButtonGroup>\n <Button variant=\"
|
|
70
|
+
"code": "<ButtonGroup>\n <Button variant=\"soft\">Cancel</Button>\n <Button variant=\"solid\">Save</Button>\n</ButtonGroup>"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
"name": "Spacing",
|
|
74
74
|
"description": "Four gap steps, from touching to airy.",
|
|
75
|
-
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup gap=\"none\">\n <Button variant=\"
|
|
75
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup gap=\"none\">\n <Button variant=\"soft\" size=\"sm\">None</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"xs\">\n <Button variant=\"soft\" size=\"sm\">XS</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"sm\">\n <Button variant=\"soft\" size=\"sm\">SM</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n <ButtonGroup gap=\"md\">\n <Button variant=\"soft\" size=\"sm\">MD</Button>\n <Button variant=\"soft\" size=\"sm\">Gap</Button>\n </ButtonGroup>\n</Stack>"
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"name": "Alignment",
|
|
79
79
|
"description": "Pins the row to the left, centre, or right of its container.",
|
|
80
|
-
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup align=\"start\">\n <Button variant=\"
|
|
80
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"column\" gap=\"md\">\n <ButtonGroup align=\"start\">\n <Button variant=\"soft\" size=\"sm\">Start</Button>\n <Button variant=\"soft\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n <ButtonGroup align=\"center\">\n <Button variant=\"soft\" size=\"sm\">Center</Button>\n <Button variant=\"soft\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n <ButtonGroup align=\"end\">\n <Button variant=\"soft\" size=\"sm\">End</Button>\n <Button variant=\"soft\" size=\"sm\">Aligned</Button>\n </ButtonGroup>\n</Stack>"
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"name": "Wrapping",
|
|
84
84
|
"description": "Buttons drop to a second line instead of overflowing.",
|
|
85
|
-
"code": "<ButtonGroup wrap>\n <Button variant=\"
|
|
85
|
+
"code": "<ButtonGroup wrap>\n <Button variant=\"soft\" size=\"sm\">Approve</Button>\n <Button variant=\"soft\" size=\"sm\">Request changes</Button>\n <Button variant=\"soft\" size=\"sm\">Reassign reviewer</Button>\n <Button variant=\"soft\" size=\"sm\">Move to backlog</Button>\n <Button variant=\"soft\" size=\"sm\">Archive</Button>\n</ButtonGroup>"
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
"name": "Form Actions",
|
|
89
89
|
"description": "Right-aligned pair, named for screen readers.",
|
|
90
|
-
"code": "<ButtonGroup align=\"end\" role=\"group\" aria-label=\"Form actions\">\n <Button variant=\"ghost\">Cancel</Button>\n <Button variant=\"
|
|
90
|
+
"code": "<ButtonGroup align=\"end\" role=\"group\" aria-label=\"Form actions\">\n <Button variant=\"ghost\">Cancel</Button>\n <Button variant=\"solid\">Submit</Button>\n</ButtonGroup>"
|
|
91
91
|
}
|
|
92
92
|
],
|
|
93
93
|
"relations": [
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "../../tokens/variables" as *;
|
|
2
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
1
3
|
@use "../../recipes/layout";
|
|
2
4
|
|
|
3
5
|
.group {
|
|
@@ -7,21 +9,21 @@
|
|
|
7
9
|
|
|
8
10
|
// Gap sizes
|
|
9
11
|
.gapNone {
|
|
10
|
-
gap: 0;
|
|
12
|
+
gap: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
11
13
|
|
|
12
14
|
> * {
|
|
13
15
|
position: relative;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
> *:not(:first-child) {
|
|
17
|
-
margin-inline-start: calc(-1 * var(--fui-stroke-hairline,
|
|
18
|
-
border-
|
|
19
|
-
border-
|
|
19
|
+
margin-inline-start: calc(-1 * var(--fui-stroke-hairline, #{$fui-stroke-hairline}));
|
|
20
|
+
border-start-start-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
21
|
+
border-end-start-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
> *:not(:last-child) {
|
|
23
|
-
border-
|
|
24
|
-
border-
|
|
25
|
+
border-start-end-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
26
|
+
border-end-end-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
> *:hover,
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
@use "../../tokens/variables" as *;
|
|
2
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
3
|
+
|
|
1
4
|
// Deliberately unlayered: this proves ordinary consumer CSS can customize a
|
|
2
5
|
// layered Card without specificity escalation or priority hacks.
|
|
3
6
|
.consumerOverride {
|
|
4
7
|
--fui-card-consumer-fixture: 1;
|
|
5
8
|
|
|
6
|
-
padding:
|
|
7
|
-
background-color:
|
|
9
|
+
padding: var(--fui-raw-space-32, #{measurements.raw-space(32)});
|
|
10
|
+
background-color: var(--fui-color-success-bg, #{$fui-color-success-bg});
|
|
8
11
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
2
|
@use "../../tokens/mixins" as *;
|
|
3
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
3
4
|
@use "../../recipes/action" as action;
|
|
4
5
|
@use "../../recipes/surface" as surface;
|
|
5
6
|
@use "../../recipes/typography" as typography;
|
|
@@ -7,13 +8,8 @@
|
|
|
7
8
|
// The private inset channels are element-scoped signals between a card's own
|
|
8
9
|
// classes, but custom properties inherit by default — a Card nested inside
|
|
9
10
|
// another Card (docs previews, dashboard panels) would receive the outer
|
|
10
|
-
// card's
|
|
11
|
+
// card's requested inset and lose its padding. Register them as
|
|
11
12
|
// non-inheriting so each card resolves only its own channels.
|
|
12
|
-
@property --_card-root-forced-inset {
|
|
13
|
-
syntax: "*";
|
|
14
|
-
inherits: false;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
13
|
@property --_card-root-requested-inset {
|
|
18
14
|
syntax: "*";
|
|
19
15
|
inherits: false;
|
|
@@ -24,15 +20,33 @@
|
|
|
24
20
|
inherits: false;
|
|
25
21
|
}
|
|
26
22
|
|
|
23
|
+
// The earned-moment capsule: a tone-tinted hairline, a radial wash from the
|
|
24
|
+
// top-right corner and the softer capsule radius. Any variant can wear it; the
|
|
25
|
+
// tone decides the colour. Reserve it for the few surfaces that earn emphasis
|
|
26
|
+
// (demo banner, upgrade panel, onboarding resume), never for routine content.
|
|
27
|
+
@mixin _capsule($line, $wash) {
|
|
28
|
+
position: relative;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
border-color: $line;
|
|
31
|
+
border-radius: var(--fui-card-accent-radius, #{$fui-card-accent-radius});
|
|
32
|
+
box-shadow: none;
|
|
33
|
+
|
|
34
|
+
&::before {
|
|
35
|
+
content: "";
|
|
36
|
+
position: absolute;
|
|
37
|
+
inset: 0;
|
|
38
|
+
pointer-events: none;
|
|
39
|
+
background: radial-gradient(90% 70% at 100% -10%, $wash, transparent 62%);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
27
43
|
@layer fui.components {
|
|
28
44
|
.card {
|
|
29
45
|
@include surface-elevated;
|
|
30
46
|
@include typography.role("body-compact");
|
|
47
|
+
@include high-contrast-outline;
|
|
31
48
|
|
|
32
|
-
padding: var(
|
|
33
|
-
--_card-root-forced-inset,
|
|
34
|
-
var(--_card-root-requested-inset, #{surface.inset("default")})
|
|
35
|
-
);
|
|
49
|
+
padding: var(--_card-root-requested-inset, #{surface.inset("default")});
|
|
36
50
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
37
51
|
background-color: var(--fui-card-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
|
|
38
52
|
border-color: var(--fui-card-border, var(--fui-border, #{$fui-border}));
|
|
@@ -43,34 +57,24 @@
|
|
|
43
57
|
border-color var(--fui-transition-fast, $fui-transition-fast),
|
|
44
58
|
background-color var(--fui-transition-fast, $fui-transition-fast),
|
|
45
59
|
transform var(--fui-transition-fast, $fui-transition-fast);
|
|
46
|
-
}
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
box-shadow: var(--fui-card-shadow, none);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.outlined {
|
|
56
|
-
background-color: transparent;
|
|
57
|
-
border-color: var(
|
|
58
|
-
--fui-card-outlined-border,
|
|
59
|
-
var(--fui-card-border, var(--fui-border-strong, #{$fui-border-strong}))
|
|
60
|
-
);
|
|
61
|
-
box-shadow: none;
|
|
61
|
+
// A divided header paints full-bleed chrome; clip it to the card radius.
|
|
62
|
+
&:has(> .headerDivided) {
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
}
|
|
62
65
|
}
|
|
63
66
|
|
|
64
|
-
.
|
|
67
|
+
// Variants — the surface only. Colour is the tone's job.
|
|
68
|
+
.solid {
|
|
65
69
|
background-color: var(--fui-card-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
|
|
66
70
|
border-color: var(--fui-card-border, var(--fui-border, #{$fui-border}));
|
|
67
|
-
box-shadow: var(--fui-card-
|
|
71
|
+
box-shadow: var(--fui-card-shadow, none);
|
|
68
72
|
}
|
|
69
73
|
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
.
|
|
74
|
+
// Quiet tint fill: metric tiles and dashboard panels read as one system
|
|
75
|
+
// rather than separate hero cards. Panels add `padding="none"` and let
|
|
76
|
+
// `Card.Header divided` + `Card.Body padding` own their inset.
|
|
77
|
+
.soft {
|
|
74
78
|
background-color: var(
|
|
75
79
|
--fui-card-stat-bg,
|
|
76
80
|
var(
|
|
@@ -85,87 +89,36 @@
|
|
|
85
89
|
box-shadow: var(--fui-card-stat-shadow, var(--fui-card-shadow, none));
|
|
86
90
|
}
|
|
87
91
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
// owns its spacing so panel headers can be full-bleed with a hairline
|
|
91
|
-
// divider underneath. Uses the same surface-agnostic overlay as `.stat`.
|
|
92
|
-
// The private forced-inset channel makes this deterministic regardless of the
|
|
93
|
-
// `padding` prop or DOM class order.
|
|
94
|
-
.panel {
|
|
95
|
-
--_card-root-forced-inset: #{surface.inset("panel")};
|
|
96
|
-
|
|
97
|
-
background-color: var(
|
|
98
|
-
--fui-panel-bg,
|
|
99
|
-
var(
|
|
100
|
-
--fui-card-bg,
|
|
101
|
-
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 2%, transparent)
|
|
102
|
-
)
|
|
103
|
-
);
|
|
92
|
+
.outline {
|
|
93
|
+
background-color: transparent;
|
|
104
94
|
border-color: var(
|
|
105
|
-
--fui-
|
|
106
|
-
var(--fui-card-border, var(--fui-border, #{$fui-border}))
|
|
95
|
+
--fui-card-outlined-border,
|
|
96
|
+
var(--fui-card-border, var(--fui-border-strong, #{$fui-border-strong}))
|
|
107
97
|
);
|
|
108
|
-
box-shadow: var(--fui-card-panel-shadow, var(--fui-card-shadow, none));
|
|
109
|
-
overflow: hidden;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Accent capsule — the earned-moment surface (demo banner, upgrade panel,
|
|
113
|
-
// onboarding resume capsule). Accent-tinted hairline, radial accent wash
|
|
114
|
-
// from the top-right corner. Radius matches the default card.
|
|
115
|
-
.accent {
|
|
116
|
-
position: relative;
|
|
117
|
-
overflow: hidden;
|
|
118
|
-
background-color: var(--fui-card-accent-bg, #{$fui-card-accent-bg});
|
|
119
|
-
border-color: var(--fui-card-accent-border, #{$fui-card-accent-border});
|
|
120
|
-
border-radius: var(--fui-card-accent-radius, #{$fui-card-accent-radius});
|
|
121
98
|
box-shadow: none;
|
|
99
|
+
}
|
|
122
100
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
color-mix(in srgb, var(--fui-color-accent, #{$fui-color-accent}) 13%, transparent),
|
|
131
|
-
transparent 62%
|
|
132
|
-
);
|
|
133
|
-
}
|
|
101
|
+
// Tones — chroma is earned by state: accent = the moment, danger = a merge
|
|
102
|
+
// is held, warning = enforcement lapsed. Neutral is the absence of a class.
|
|
103
|
+
.toneAccent {
|
|
104
|
+
@include _capsule(
|
|
105
|
+
var(--fui-card-accent-border, #{$fui-card-accent-border}),
|
|
106
|
+
color-mix(in srgb, var(--fui-color-accent, #{$fui-color-accent}) 13%, transparent)
|
|
107
|
+
);
|
|
134
108
|
}
|
|
135
109
|
|
|
136
|
-
// Accent tones — same capsule, state-coloured hairline + wash. Chroma is
|
|
137
|
-
// earned by state (SPEC §4.4): danger = a merge is held, warning =
|
|
138
|
-
// enforcement lapsed, neutral = waiting (no wash at all).
|
|
139
110
|
.toneDanger {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
90% 70% at 100% -10%,
|
|
145
|
-
var(--fui-color-danger-bg, #{$fui-color-danger-bg}),
|
|
146
|
-
transparent 62%
|
|
147
|
-
);
|
|
148
|
-
}
|
|
111
|
+
@include _capsule(
|
|
112
|
+
var(--fui-color-danger-border, #{$fui-color-danger-border}),
|
|
113
|
+
var(--fui-color-danger-bg, #{$fui-color-danger-bg})
|
|
114
|
+
);
|
|
149
115
|
}
|
|
150
116
|
|
|
151
117
|
.toneWarning {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
90% 70% at 100% -10%,
|
|
157
|
-
var(--fui-color-warning-bg, #{$fui-color-warning-bg}),
|
|
158
|
-
transparent 62%
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
.toneNeutral {
|
|
164
|
-
border-color: var(--fui-border, #{$fui-border});
|
|
165
|
-
|
|
166
|
-
&::before {
|
|
167
|
-
content: none;
|
|
168
|
-
}
|
|
118
|
+
@include _capsule(
|
|
119
|
+
var(--fui-color-warning-border, #{$fui-color-warning-border}),
|
|
120
|
+
var(--fui-color-warning-bg, #{$fui-color-warning-bg})
|
|
121
|
+
);
|
|
169
122
|
}
|
|
170
123
|
|
|
171
124
|
// Padding
|
|
@@ -211,32 +164,35 @@
|
|
|
211
164
|
background-color: var(--fui-card-active-bg, var(--fui-bg-active, $fui-bg-active));
|
|
212
165
|
box-shadow: var(
|
|
213
166
|
--fui-card-active-shadow,
|
|
214
|
-
inset 0
|
|
167
|
+
inset 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline})
|
|
168
|
+
var(--fui-raw-space-2, #{measurements.raw-space(2)})
|
|
169
|
+
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 12%, transparent)
|
|
215
170
|
);
|
|
216
171
|
}
|
|
217
172
|
}
|
|
218
173
|
|
|
219
174
|
.header {
|
|
220
175
|
display: grid;
|
|
221
|
-
gap: var(--fui-raw-space-4,
|
|
222
|
-
margin-bottom: var(--fui-raw-space-16,
|
|
176
|
+
gap: var(--fui-raw-space-4, #{measurements.raw-space(4)});
|
|
177
|
+
margin-bottom: var(--fui-raw-space-16, #{measurements.raw-space(16)});
|
|
223
178
|
}
|
|
224
179
|
|
|
225
180
|
// Full-bleed panel-header region on the control-md track, canonical inset,
|
|
226
181
|
// and a hairline bottom divider. No trailing margin — it sits flush above the
|
|
227
|
-
// panel body, which manages its own padding. Use
|
|
182
|
+
// panel body, which manages its own padding. Use with `padding="none"`.
|
|
228
183
|
// Title cluster (left) and trailing controls (right) pin to opposite edges —
|
|
229
184
|
// wrap Title + Description in a stack so space-between has two children.
|
|
230
185
|
.headerDivided {
|
|
231
186
|
display: flex;
|
|
232
187
|
align-items: center;
|
|
233
188
|
justify-content: space-between;
|
|
234
|
-
gap: var(--fui-raw-space-12,
|
|
189
|
+
gap: var(--fui-raw-space-12, #{measurements.raw-space(12)});
|
|
235
190
|
min-height: #{action.track("md")};
|
|
236
191
|
padding: #{surface.inset("compact")};
|
|
237
|
-
margin-bottom: 0;
|
|
192
|
+
margin-bottom: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
238
193
|
background-color: var(--fui-card-header-bg, var(--fui-bg-subtle, #{$fui-bg-subtle}));
|
|
239
|
-
border-bottom: var(--fui-stroke-hairline,
|
|
194
|
+
border-bottom: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
195
|
+
var(--fui-border, $fui-border);
|
|
240
196
|
|
|
241
197
|
// Multi-line copy: top-align trailing controls with the title line.
|
|
242
198
|
&:has(.description) {
|
|
@@ -247,21 +203,21 @@
|
|
|
247
203
|
.title {
|
|
248
204
|
@include typography.role("title-sm");
|
|
249
205
|
|
|
250
|
-
margin: 0;
|
|
206
|
+
margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
251
207
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
252
208
|
}
|
|
253
209
|
|
|
254
210
|
.description {
|
|
255
211
|
@include typography.role("body-compact");
|
|
256
212
|
|
|
257
|
-
margin: 0;
|
|
213
|
+
margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
258
214
|
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
259
215
|
}
|
|
260
216
|
|
|
261
217
|
.body {
|
|
262
218
|
@include typography.role("body-compact");
|
|
263
219
|
|
|
264
|
-
padding: var(--_card-body-inset, 0);
|
|
220
|
+
padding: var(--_card-body-inset, var(--fui-raw-space-0, #{measurements.raw-space(0)}));
|
|
265
221
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
266
222
|
}
|
|
267
223
|
|
|
@@ -284,10 +240,11 @@
|
|
|
284
240
|
.footer {
|
|
285
241
|
display: flex;
|
|
286
242
|
align-items: center;
|
|
287
|
-
gap: var(--fui-raw-space-8,
|
|
288
|
-
margin-top: var(--fui-raw-space-16,
|
|
289
|
-
padding-top: var(--fui-raw-space-16,
|
|
290
|
-
border-top: var(--fui-stroke-hairline,
|
|
243
|
+
gap: var(--fui-raw-space-8, #{measurements.raw-space(8)});
|
|
244
|
+
margin-top: var(--fui-raw-space-16, #{measurements.raw-space(16)});
|
|
245
|
+
padding-top: var(--fui-raw-space-16, #{measurements.raw-space(16)});
|
|
246
|
+
border-top: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
247
|
+
var(--fui-border, $fui-border);
|
|
291
248
|
}
|
|
292
249
|
|
|
293
250
|
// ============================================
|
|
@@ -309,21 +266,4 @@
|
|
|
309
266
|
}
|
|
310
267
|
}
|
|
311
268
|
}
|
|
312
|
-
|
|
313
|
-
// ============================================
|
|
314
|
-
// Accessibility: High Contrast Mode
|
|
315
|
-
// ============================================
|
|
316
|
-
|
|
317
|
-
@media (prefers-contrast: more) {
|
|
318
|
-
.card {
|
|
319
|
-
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
320
|
-
outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
|
|
321
|
-
outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
.footer {
|
|
325
|
-
box-shadow: inset 0 var(--fui-stroke-hairline, 1px) 0
|
|
326
|
-
var(--fui-text-primary, $fui-text-primary);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
269
|
}
|
|
@@ -7,36 +7,35 @@ import styles from "./Card.module.scss";
|
|
|
7
7
|
// Types
|
|
8
8
|
// ============================================
|
|
9
9
|
|
|
10
|
+
export type CardVariant = "solid" | "soft" | "outline";
|
|
11
|
+
export type CardTone = "neutral" | "accent" | "warning" | "danger";
|
|
12
|
+
export type CardPadding = "none" | "sm" | "md" | "lg";
|
|
13
|
+
|
|
10
14
|
/**
|
|
11
15
|
* Card container for grouping related content.
|
|
12
16
|
* @see https://usefragments.com/components/card
|
|
13
17
|
*/
|
|
14
18
|
export interface CardProps extends Omit<React.HTMLAttributes<HTMLElement>, "children"> {
|
|
15
19
|
children: React.ReactNode;
|
|
16
|
-
/**
|
|
20
|
+
/** Surface chrome.
|
|
17
21
|
*
|
|
18
|
-
* - `
|
|
19
|
-
* - `
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* - `accent`: the earned-moment capsule — accent-tinted hairline, radial
|
|
25
|
-
* accent wash, soft fixed radius. Reserve for the few surfaces that earn
|
|
26
|
-
* emphasis (demo banner, upgrade panel, onboarding resume), never for
|
|
27
|
-
* routine content.
|
|
28
|
-
* @default "default"
|
|
22
|
+
* - `solid`: the filled, elevated surface for general-purpose cards.
|
|
23
|
+
* - `soft`: quiet tint fill for metric tiles and dashboard panels. Add
|
|
24
|
+
* `padding="none"` and let `Card.Header divided` + `Card.Body padding`
|
|
25
|
+
* own their inset for a panel.
|
|
26
|
+
* - `outline`: transparent with a hairline border, for dense layouts.
|
|
27
|
+
* @default "solid"
|
|
29
28
|
* @see https://usefragments.com/components/card#variants */
|
|
30
|
-
variant?:
|
|
31
|
-
/**
|
|
32
|
-
* tone
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* @default "
|
|
36
|
-
tone?:
|
|
29
|
+
variant?: CardVariant;
|
|
30
|
+
/** Earned-moment capsule. Any tone other than `neutral` paints a
|
|
31
|
+
* tone-tinted hairline, a radial wash and the capsule radius on top of the
|
|
32
|
+
* variant: `accent` (the moment), `danger` (a merge is held), `warning`
|
|
33
|
+
* (enforcement lapsed). Reserve it for the few surfaces that earn emphasis.
|
|
34
|
+
* @default "neutral" */
|
|
35
|
+
tone?: CardTone;
|
|
37
36
|
/** Inner padding.
|
|
38
37
|
* @default "md" */
|
|
39
|
-
padding?:
|
|
38
|
+
padding?: CardPadding;
|
|
40
39
|
/** Root element tag.
|
|
41
40
|
* @default "article" */
|
|
42
41
|
as?: "article" | "div" | "section";
|
|
@@ -46,7 +45,7 @@ export interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
46
45
|
children: React.ReactNode;
|
|
47
46
|
/** Renders the header as a divided region with a minimum height, canonical
|
|
48
47
|
* inset, hairline bottom border, and no trailing margin. Used with
|
|
49
|
-
* `
|
|
48
|
+
* `padding="none"` for dashboard-style panel headers. */
|
|
50
49
|
divided?: boolean;
|
|
51
50
|
}
|
|
52
51
|
|
|
@@ -63,9 +62,9 @@ export interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraph
|
|
|
63
62
|
|
|
64
63
|
export interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
65
64
|
children: React.ReactNode;
|
|
66
|
-
/** Inner padding for body-only spacing, useful with `
|
|
67
|
-
* Omit when the card root already owns padding. */
|
|
68
|
-
padding?:
|
|
65
|
+
/** Inner padding for body-only spacing, useful with `padding="none"` on the
|
|
66
|
+
* root. Omit when the card root already owns padding. */
|
|
67
|
+
padding?: CardPadding;
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
@@ -77,8 +76,9 @@ export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
77
76
|
// ============================================
|
|
78
77
|
|
|
79
78
|
interface CardContextValue {
|
|
80
|
-
variant:
|
|
81
|
-
|
|
79
|
+
variant: CardVariant;
|
|
80
|
+
tone: CardTone;
|
|
81
|
+
padding: CardPadding;
|
|
82
82
|
isInteractive: boolean;
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -110,25 +110,29 @@ function composeEventHandlers<E extends { defaultPrevented: boolean }>(
|
|
|
110
110
|
// Components
|
|
111
111
|
// ============================================
|
|
112
112
|
|
|
113
|
-
const
|
|
114
|
-
|
|
113
|
+
const variantMap: Record<CardVariant, string> = {
|
|
114
|
+
solid: styles.solid,
|
|
115
|
+
soft: styles.soft,
|
|
116
|
+
outline: styles.outline,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const toneMap: Record<CardTone, string | undefined> = {
|
|
120
|
+
neutral: undefined,
|
|
121
|
+
accent: styles.toneAccent,
|
|
115
122
|
danger: styles.toneDanger,
|
|
116
123
|
warning: styles.toneWarning,
|
|
117
|
-
|
|
118
|
-
} as const;
|
|
124
|
+
};
|
|
119
125
|
|
|
120
126
|
function CardRoot({
|
|
121
127
|
children,
|
|
122
|
-
variant
|
|
123
|
-
tone = "
|
|
128
|
+
variant = "solid",
|
|
129
|
+
tone = "neutral",
|
|
124
130
|
padding = "md",
|
|
125
131
|
as: Component = "article",
|
|
126
132
|
className,
|
|
127
133
|
style,
|
|
128
134
|
...htmlProps
|
|
129
135
|
}: CardProps) {
|
|
130
|
-
// Resolve alias: "outline" → "outlined"
|
|
131
|
-
const variant = variantProp === "outline" ? "outlined" : variantProp;
|
|
132
136
|
const { onKeyDown, onKeyUp, role, tabIndex, ...elementProps } = htmlProps;
|
|
133
137
|
|
|
134
138
|
const isInteractive = typeof elementProps.onClick === "function";
|
|
@@ -137,8 +141,8 @@ function CardRoot({
|
|
|
137
141
|
|
|
138
142
|
const classes = [
|
|
139
143
|
styles.card,
|
|
140
|
-
|
|
141
|
-
|
|
144
|
+
variantMap[variant],
|
|
145
|
+
toneMap[tone],
|
|
142
146
|
paddingMap[padding],
|
|
143
147
|
isInteractive && styles.interactive,
|
|
144
148
|
className,
|
|
@@ -148,6 +152,7 @@ function CardRoot({
|
|
|
148
152
|
|
|
149
153
|
const contextValue: CardContextValue = {
|
|
150
154
|
variant,
|
|
155
|
+
tone,
|
|
151
156
|
padding,
|
|
152
157
|
isInteractive,
|
|
153
158
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
2
|
@use "../../tokens/mixins" as *;
|
|
3
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
3
4
|
@use "../../recipes/representation" as representation;
|
|
4
5
|
@use "../../recipes/typography" as typography;
|
|
5
6
|
|
|
@@ -57,13 +58,13 @@
|
|
|
57
58
|
.tooltipItems {
|
|
58
59
|
display: flex;
|
|
59
60
|
flex-direction: column;
|
|
60
|
-
gap: var(--_fui-chart-tooltip-item-gap);
|
|
61
|
+
gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
.tooltipItem {
|
|
64
65
|
display: flex;
|
|
65
66
|
align-items: center;
|
|
66
|
-
gap: var(--_fui-chart-tooltip-item-gap);
|
|
67
|
+
gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
|
|
67
68
|
justify-content: space-between;
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -82,8 +83,8 @@
|
|
|
82
83
|
@include representation.chart-marker("dashed");
|
|
83
84
|
|
|
84
85
|
box-sizing: border-box;
|
|
85
|
-
border-
|
|
86
|
-
border-radius:
|
|
86
|
+
border-block-start: var(--fui-chart-marker-stroke, var(--fui-raw-space-2, #{measurements.raw-space(2)})) dashed;
|
|
87
|
+
border-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
|
|
@@ -104,7 +105,7 @@
|
|
|
104
105
|
flex-wrap: wrap;
|
|
105
106
|
align-items: center;
|
|
106
107
|
justify-content: center;
|
|
107
|
-
gap: var(--fui-raw-space-12,
|
|
108
|
+
gap: var(--fui-raw-space-12, #{measurements.raw-space(12)});
|
|
108
109
|
padding-block-start: var(--fui-raw-space-8, 8px);
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"disabled: boolean (default: false)",
|
|
17
17
|
"required: boolean (default: false)",
|
|
18
18
|
"size: sm|md|lg (default: md)",
|
|
19
|
+
"variant: outline",
|
|
19
20
|
"label: string",
|
|
20
21
|
"helperText: string",
|
|
21
22
|
"description: string",
|
|
@@ -76,10 +77,9 @@
|
|
|
76
77
|
},
|
|
77
78
|
"variant": {
|
|
78
79
|
"type": "enum",
|
|
79
|
-
"description": "
|
|
80
|
-
"default": "default",
|
|
80
|
+
"description": "Chrome. Omit for the inline checkbox beside its label; 'outline' renders a full-width bordered surface with the checkbox tucked inside.",
|
|
81
81
|
"required": false,
|
|
82
|
-
"values": ["
|
|
82
|
+
"values": ["outline"]
|
|
83
83
|
},
|
|
84
84
|
"label": {
|
|
85
85
|
"type": "string",
|
|
@@ -217,6 +217,7 @@
|
|
|
217
217
|
"onCheckedChange: (checked) => void - change handler",
|
|
218
218
|
"onChange: (checked) => void - alias for onCheckedChange",
|
|
219
219
|
"indeterminate: boolean - partial selection state",
|
|
220
|
+
"variant: outline - full-width bordered surface; omit for the inline control",
|
|
220
221
|
"label: string - checkbox label",
|
|
221
222
|
"helperText: string - helper text (preferred)",
|
|
222
223
|
"description: string - deprecated alias for helperText",
|