@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
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"value: string",
|
|
14
14
|
"onValueChange: function",
|
|
15
15
|
"orientation: horizontal|vertical (default: horizontal)",
|
|
16
|
-
"variant:
|
|
16
|
+
"variant: ghost|soft (default: ghost)"
|
|
17
17
|
],
|
|
18
18
|
"props": {
|
|
19
19
|
"children": {
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
},
|
|
46
46
|
"variant": {
|
|
47
47
|
"type": "enum",
|
|
48
|
-
"description": "Default
|
|
49
|
-
"default": "
|
|
48
|
+
"description": "Default chrome for Tabs.List (can be overridden on Tabs.List): ghost draws a rule under the active tab, soft is a filled rail with a selected segment",
|
|
49
|
+
"default": "ghost",
|
|
50
50
|
"required": false,
|
|
51
|
-
"values": ["
|
|
51
|
+
"values": ["ghost", "soft"]
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
"usage": {
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"Order by how often each panel is used",
|
|
70
70
|
"Past five or six tabs, split the page instead",
|
|
71
71
|
"Keep panels comparable in depth",
|
|
72
|
-
"
|
|
72
|
+
"Soft rails inside cards, ghost at page level"
|
|
73
73
|
],
|
|
74
74
|
"accessibility": [
|
|
75
75
|
"Keyboard navigation with arrow keys",
|
|
@@ -79,24 +79,24 @@
|
|
|
79
79
|
},
|
|
80
80
|
"examples": [
|
|
81
81
|
{
|
|
82
|
-
"name": "
|
|
82
|
+
"name": "Ghost",
|
|
83
83
|
"description": "A rule tracks the active panel.",
|
|
84
|
-
"code": "<Tabs defaultValue=\"overview\" variant=\"
|
|
84
|
+
"code": "<Tabs defaultValue=\"overview\" variant=\"ghost\">\n <Tabs.List>\n <Tabs.Tab value=\"overview\">Overview</Tabs.Tab>\n <Tabs.Tab value=\"analytics\">Analytics</Tabs.Tab>\n <Tabs.Tab value=\"settings\">Settings</Tabs.Tab>\n </Tabs.List>\n <Tabs.Panel value=\"overview\">\n <p>Overview content goes here.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"analytics\">\n <p>Analytics content goes here.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"settings\">\n <p>Settings content goes here.</p>\n </Tabs.Panel>\n</Tabs>"
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
|
-
"name": "
|
|
88
|
-
"description": "A filled
|
|
89
|
-
"code": "<Tabs defaultValue=\"all\" variant=\"
|
|
87
|
+
"name": "Soft",
|
|
88
|
+
"description": "A filled rail suits panels inside a card.",
|
|
89
|
+
"code": "<Tabs defaultValue=\"all\" variant=\"soft\">\n <Tabs.List>\n <Tabs.Tab value=\"all\">All</Tabs.Tab>\n <Tabs.Tab value=\"active\">Active</Tabs.Tab>\n <Tabs.Tab value=\"archived\">Archived</Tabs.Tab>\n </Tabs.List>\n <Tabs.Panel value=\"all\">\n <p>Showing all items.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"active\">\n <p>Showing active items only.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"archived\">\n <p>Showing archived items.</p>\n </Tabs.Panel>\n</Tabs>"
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
"name": "With Disabled",
|
|
93
93
|
"description": "An unavailable panel stays visible but unreachable.",
|
|
94
|
-
"code": "<Tabs defaultValue=\"general\" variant=\"
|
|
94
|
+
"code": "<Tabs defaultValue=\"general\" variant=\"ghost\">\n <Tabs.List>\n <Tabs.Tab value=\"general\">General</Tabs.Tab>\n <Tabs.Tab value=\"security\">Security</Tabs.Tab>\n <Tabs.Tab value=\"billing\" disabled>Billing</Tabs.Tab>\n </Tabs.List>\n <Tabs.Panel value=\"general\">\n <p>General settings panel.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"security\">\n <p>Security settings panel.</p>\n </Tabs.Panel>\n</Tabs>"
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"name": "List Variant Override",
|
|
98
98
|
"description": "One list can opt out of the root's style.",
|
|
99
|
-
"code": "<Tabs defaultValue=\"overview\" variant=\"
|
|
99
|
+
"code": "<Tabs defaultValue=\"overview\" variant=\"soft\">\n <Tabs.List variant=\"ghost\">\n <Tabs.Tab value=\"overview\">Overview</Tabs.Tab>\n <Tabs.Tab value=\"activity\">Activity</Tabs.Tab>\n </Tabs.List>\n <Tabs.Panel value=\"overview\">\n <p>Root sets soft, but this list overrides to ghost.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"activity\">\n <p>Per-list variant override example.</p>\n </Tabs.Panel>\n</Tabs>"
|
|
100
100
|
}
|
|
101
101
|
],
|
|
102
102
|
"relations": [
|
|
@@ -116,8 +116,8 @@
|
|
|
116
116
|
"value: string - controlled active tab",
|
|
117
117
|
"defaultValue: string - initial active tab",
|
|
118
118
|
"onValueChange: (value) => void - tab change handler",
|
|
119
|
-
"variant:
|
|
120
|
-
"Tabs.List variant?:
|
|
119
|
+
"variant: ghost|soft - default chrome for Tabs.List",
|
|
120
|
+
"Tabs.List variant?: ghost|soft - optional per-list override"
|
|
121
121
|
],
|
|
122
122
|
"a11yRules": ["A11Y_TABS_KEYBOARD", "A11Y_TABS_LABELS"]
|
|
123
123
|
},
|
|
@@ -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/layout";
|
|
4
5
|
@use "../../recipes/segmented";
|
|
5
6
|
|
|
@@ -14,37 +15,39 @@
|
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
// Tab list container
|
|
18
|
+
// Tab list container (ghost: a rule under the row, the indicator tracks the active tab)
|
|
18
19
|
.list {
|
|
19
20
|
position: relative;
|
|
20
21
|
display: flex;
|
|
21
22
|
align-items: center;
|
|
22
23
|
gap: layout.gap("xs");
|
|
23
|
-
border-bottom: var(--fui-stroke-hairline,
|
|
24
|
+
border-bottom: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
25
|
+
var(--fui-border, $fui-border);
|
|
24
26
|
padding-inline: layout.gap("xs");
|
|
25
27
|
|
|
26
28
|
&[data-orientation="vertical"] {
|
|
27
29
|
flex-direction: column;
|
|
28
30
|
align-items: stretch;
|
|
29
31
|
border-bottom: none;
|
|
30
|
-
border-right: var(--fui-stroke-hairline,
|
|
32
|
+
border-right: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid
|
|
33
|
+
var(--fui-border, $fui-border);
|
|
31
34
|
padding-block: layout.gap("xs");
|
|
32
|
-
padding-inline: 0;
|
|
35
|
+
padding-inline: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
38
|
|
|
36
|
-
// Variant:
|
|
37
|
-
.
|
|
39
|
+
// Variant: soft (filled rail with a selected segment)
|
|
40
|
+
.listSoft {
|
|
38
41
|
border-bottom: none;
|
|
39
42
|
border: 0;
|
|
40
43
|
background-color: var(
|
|
41
44
|
--fui-tabs-pills-bg,
|
|
42
45
|
color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 5%, transparent)
|
|
43
46
|
);
|
|
44
|
-
border-radius: var(--fui-radius-
|
|
45
|
-
padding: 0;
|
|
46
|
-
gap: 0;
|
|
47
|
-
box-shadow: inset 0 0 0 var(--fui-stroke-hairline,
|
|
47
|
+
border-radius: var(--fui-radius-l1, $fui-radius-l1);
|
|
48
|
+
padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
49
|
+
gap: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
50
|
+
box-shadow: inset 0 0 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline})
|
|
48
51
|
var(
|
|
49
52
|
--fui-tabs-pills-border,
|
|
50
53
|
color-mix(in srgb, var(--fui-border, #{$fui-border}) 72%, transparent)
|
|
@@ -52,11 +55,6 @@
|
|
|
52
55
|
width: fit-content;
|
|
53
56
|
}
|
|
54
57
|
|
|
55
|
-
// Variant: underline (default, with indicator line)
|
|
56
|
-
.listUnderline {
|
|
57
|
-
// Default styles already applied to .list
|
|
58
|
-
}
|
|
59
|
-
|
|
60
58
|
// Individual tab button
|
|
61
59
|
.tab {
|
|
62
60
|
@include button-reset;
|
|
@@ -65,7 +63,7 @@
|
|
|
65
63
|
position: relative;
|
|
66
64
|
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
67
65
|
white-space: nowrap;
|
|
68
|
-
border-radius: var(--fui-radius-
|
|
66
|
+
border-radius: var(--fui-radius-l3, $fui-radius-l3);
|
|
69
67
|
|
|
70
68
|
&:hover:not([data-disabled]) {
|
|
71
69
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
@@ -105,18 +103,18 @@
|
|
|
105
103
|
}
|
|
106
104
|
}
|
|
107
105
|
|
|
108
|
-
// Tab in
|
|
109
|
-
.
|
|
110
|
-
border-radius:
|
|
106
|
+
// Tab in the ghost variant: the indicator carries the selection, the tab stays flat
|
|
107
|
+
.tabGhost {
|
|
108
|
+
border-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
111
109
|
|
|
112
110
|
&:hover:not([data-disabled]) {
|
|
113
111
|
background-color: transparent;
|
|
114
112
|
}
|
|
115
113
|
}
|
|
116
114
|
|
|
117
|
-
// Tab in
|
|
118
|
-
.
|
|
119
|
-
border-radius: var(--fui-radius-
|
|
115
|
+
// Tab in the soft variant: a segment on the rail
|
|
116
|
+
.tabSoft {
|
|
117
|
+
border-radius: var(--fui-radius-l2, $fui-radius-l2);
|
|
120
118
|
transition:
|
|
121
119
|
background-color var(--fui-transition-fast, $fui-transition-fast),
|
|
122
120
|
color var(--fui-transition-fast, $fui-transition-fast),
|
|
@@ -128,18 +126,16 @@
|
|
|
128
126
|
}
|
|
129
127
|
|
|
130
128
|
&[data-active] {
|
|
131
|
-
|
|
132
|
-
color: var(--fui-text-primary, $fui-text-primary);
|
|
133
|
-
box-shadow: var(--fui-tabs-pill-active-shadow, none);
|
|
129
|
+
@include segmented-selection;
|
|
134
130
|
}
|
|
135
131
|
}
|
|
136
132
|
|
|
137
|
-
// Animated indicator (
|
|
133
|
+
// Animated indicator (ghost variant)
|
|
138
134
|
.indicator {
|
|
139
135
|
position: absolute;
|
|
140
136
|
bottom: 0;
|
|
141
137
|
left: 0;
|
|
142
|
-
height: var(--fui-stroke-default,
|
|
138
|
+
height: var(--fui-stroke-default, #{$fui-stroke-default});
|
|
143
139
|
background-color: var(--fui-color-accent, $fui-color-accent);
|
|
144
140
|
border-radius: var(--fui-radius-full, $fui-radius-full);
|
|
145
141
|
|
|
@@ -155,7 +151,7 @@
|
|
|
155
151
|
left: auto;
|
|
156
152
|
right: 0;
|
|
157
153
|
top: 0;
|
|
158
|
-
width: var(--fui-stroke-default,
|
|
154
|
+
width: var(--fui-stroke-default, #{$fui-stroke-default});
|
|
159
155
|
height: var(--active-tab-height);
|
|
160
156
|
transform: translateY(var(--active-tab-top));
|
|
161
157
|
}
|
|
@@ -164,7 +160,7 @@
|
|
|
164
160
|
// Tab panel content
|
|
165
161
|
.panel {
|
|
166
162
|
padding-block: layout.gap("sm");
|
|
167
|
-
padding-inline: 0;
|
|
163
|
+
padding-inline: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
168
164
|
outline: none;
|
|
169
165
|
|
|
170
166
|
&[data-hidden] {
|
|
@@ -174,11 +170,11 @@
|
|
|
174
170
|
// Focus visible for keyboard navigation
|
|
175
171
|
&:focus-visible {
|
|
176
172
|
@include focus-ring;
|
|
177
|
-
border-radius: var(--fui-radius-
|
|
173
|
+
border-radius: var(--fui-radius-l2, $fui-radius-l2);
|
|
178
174
|
}
|
|
179
175
|
}
|
|
180
176
|
|
|
181
177
|
// Panel with no padding (for custom layouts)
|
|
182
178
|
.panelFlush {
|
|
183
|
-
padding: 0;
|
|
179
|
+
padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
184
180
|
}
|
|
@@ -10,6 +10,7 @@ import styles from "./Tabs.module.scss";
|
|
|
10
10
|
// ============================================
|
|
11
11
|
|
|
12
12
|
export type TabValue = string;
|
|
13
|
+
export type TabsVariant = "ghost" | "soft";
|
|
13
14
|
export type TabsChangeEventDetails = Parameters<
|
|
14
15
|
NonNullable<React.ComponentProps<typeof BaseTabs.Root>["onValueChange"]>
|
|
15
16
|
>[1];
|
|
@@ -29,19 +30,20 @@ export interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "d
|
|
|
29
30
|
/** Tab layout direction.
|
|
30
31
|
* @default "horizontal" */
|
|
31
32
|
orientation?: "horizontal" | "vertical";
|
|
32
|
-
/** Tab list
|
|
33
|
-
*
|
|
34
|
-
|
|
33
|
+
/** Tab list chrome (default for Tabs.List): `ghost` draws a rule under the
|
|
34
|
+
* active tab, `soft` is a filled rail with a selected segment.
|
|
35
|
+
* @default "ghost" */
|
|
36
|
+
variant?: TabsVariant;
|
|
35
37
|
/** Tab control size. Defaults to the component-default control size. */
|
|
36
38
|
size?: ControlSize;
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
export interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
40
42
|
children: React.ReactNode;
|
|
41
|
-
/** Tab list
|
|
42
|
-
* @default "
|
|
43
|
+
/** Tab list chrome.
|
|
44
|
+
* @default "ghost"
|
|
43
45
|
* @see https://usefragments.com/components/tabs#variants */
|
|
44
|
-
variant?:
|
|
46
|
+
variant?: TabsVariant;
|
|
45
47
|
/** Tab control size. Defaults to the nearest Tabs root or provider default. */
|
|
46
48
|
size?: ControlSize;
|
|
47
49
|
}
|
|
@@ -64,7 +66,7 @@ export interface TabsPanelProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
64
66
|
// Context for variant
|
|
65
67
|
// ============================================
|
|
66
68
|
|
|
67
|
-
const TabsVariantContext = React.createContext<
|
|
69
|
+
const TabsVariantContext = React.createContext<TabsVariant>("ghost");
|
|
68
70
|
const TabsSizeContext = React.createContext<ControlSize>("md");
|
|
69
71
|
|
|
70
72
|
// ============================================
|
|
@@ -77,7 +79,7 @@ function TabsRoot({
|
|
|
77
79
|
value,
|
|
78
80
|
onValueChange,
|
|
79
81
|
orientation = "horizontal",
|
|
80
|
-
variant = "
|
|
82
|
+
variant = "ghost",
|
|
81
83
|
size: sizeProp,
|
|
82
84
|
className,
|
|
83
85
|
...htmlProps
|
|
@@ -109,8 +111,9 @@ function TabsList({ children, variant, size: sizeProp, className, ...htmlProps }
|
|
|
109
111
|
const rootSize = React.useContext(TabsSizeContext);
|
|
110
112
|
const size = sizeProp ?? rootSize;
|
|
111
113
|
const resolvedVariant = variant ?? rootVariant;
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
+
const classes = [styles.list, resolvedVariant === "soft" && styles.listSoft, className]
|
|
115
|
+
.filter(Boolean)
|
|
116
|
+
.join(" ");
|
|
114
117
|
|
|
115
118
|
return (
|
|
116
119
|
<TabsVariantContext.Provider value={resolvedVariant}>
|
|
@@ -122,7 +125,7 @@ function TabsList({ children, variant, size: sizeProp, className, ...htmlProps }
|
|
|
122
125
|
data-variant={resolvedVariant}
|
|
123
126
|
>
|
|
124
127
|
{children}
|
|
125
|
-
{resolvedVariant === "
|
|
128
|
+
{resolvedVariant === "ghost" && <BaseTabs.Indicator className={styles.indicator} />}
|
|
126
129
|
</BaseTabs.List>
|
|
127
130
|
</TabsSizeContext.Provider>
|
|
128
131
|
</TabsVariantContext.Provider>
|
|
@@ -132,7 +135,7 @@ function TabsList({ children, variant, size: sizeProp, className, ...htmlProps }
|
|
|
132
135
|
function Tab({ children, value, disabled, className }: TabProps) {
|
|
133
136
|
const variant = React.useContext(TabsVariantContext);
|
|
134
137
|
const size = React.useContext(TabsSizeContext);
|
|
135
|
-
const variantClass = variant === "
|
|
138
|
+
const variantClass = variant === "soft" ? styles.tabSoft : styles.tabGhost;
|
|
136
139
|
const sizeClass = size === "sm" ? styles.tabSm : size === "lg" ? styles.tabLg : styles.tabMd;
|
|
137
140
|
const classes = [styles.tab, sizeClass, variantClass, className].filter(Boolean).join(" ");
|
|
138
141
|
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"propsSummary": [
|
|
11
11
|
"children: node (required)",
|
|
12
12
|
"as: h1|h2|h3|h4|h5|h6|p|span|label|div|strong|em|small|mark|del|ins|sub|sup|time|address|blockquote|cite|code|abbr (default: span)",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
13
|
+
"role: caption|ui-compact|ui-standard|body-compact|body-relaxed|title-sm|title-md|title-lg|code|section-label|eyebrow",
|
|
14
|
+
"scale: 2xs|xs|sm|base|md|lg|xl|2xl|3xl|4xl",
|
|
15
15
|
"weight: normal|medium|semibold|bold (default: \"normal\")",
|
|
16
16
|
"color: primary|secondary|tertiary|muted|accent|success|warning|danger (default: \"primary\")",
|
|
17
17
|
"font: sans|mono (default: sans)",
|
|
@@ -57,15 +57,27 @@
|
|
|
57
57
|
"abbr"
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
|
-
"
|
|
60
|
+
"role": {
|
|
61
61
|
"type": "enum",
|
|
62
|
-
"description": "
|
|
62
|
+
"description": "Typography role: one named setting of size, weight, line height and tracking. section-label is the small list heading; eyebrow is the small semibold label above a statement. A role owns the whole setting, so scale, weight, font and letterSpacing are unavailable beside it.",
|
|
63
63
|
"required": false,
|
|
64
|
-
"values": [
|
|
64
|
+
"values": [
|
|
65
|
+
"caption",
|
|
66
|
+
"ui-compact",
|
|
67
|
+
"ui-standard",
|
|
68
|
+
"body-compact",
|
|
69
|
+
"body-relaxed",
|
|
70
|
+
"title-sm",
|
|
71
|
+
"title-md",
|
|
72
|
+
"title-lg",
|
|
73
|
+
"code",
|
|
74
|
+
"section-label",
|
|
75
|
+
"eyebrow"
|
|
76
|
+
]
|
|
65
77
|
},
|
|
66
|
-
"
|
|
78
|
+
"scale": {
|
|
67
79
|
"type": "enum",
|
|
68
|
-
"description": "
|
|
80
|
+
"description": "Type-scale step for text with no role. 2xs (10), xs (12), sm/base (14), md (15 prose body), lg (20), xl (24), 2xl (30), 3xl (36 page title), 4xl (48 hero).",
|
|
69
81
|
"required": false,
|
|
70
82
|
"values": ["2xs", "xs", "sm", "base", "md", "lg", "xl", "2xl", "3xl", "4xl"]
|
|
71
83
|
},
|
|
@@ -81,7 +93,16 @@
|
|
|
81
93
|
"description": "Text color (muted is an alias for tertiary; success/warning/danger are for a run of text that carries a state on its own — prefer Badge or Alert when the state deserves a container)",
|
|
82
94
|
"default": "\"primary\"",
|
|
83
95
|
"required": false,
|
|
84
|
-
"values": [
|
|
96
|
+
"values": [
|
|
97
|
+
"primary",
|
|
98
|
+
"secondary",
|
|
99
|
+
"tertiary",
|
|
100
|
+
"muted",
|
|
101
|
+
"accent",
|
|
102
|
+
"success",
|
|
103
|
+
"warning",
|
|
104
|
+
"danger"
|
|
105
|
+
]
|
|
85
106
|
},
|
|
86
107
|
"font": {
|
|
87
108
|
"type": "enum",
|
|
@@ -118,7 +139,7 @@
|
|
|
118
139
|
"Anything clickable (use Link or Button)"
|
|
119
140
|
],
|
|
120
141
|
"guidelines": [
|
|
121
|
-
"Pick the tag with as, the look with
|
|
142
|
+
"Pick the tag with as, the look with role (or scale) — they are separate decisions",
|
|
122
143
|
"Never skip heading levels to get a smaller heading",
|
|
123
144
|
"Color is for hierarchy and state, not decoration",
|
|
124
145
|
"Truncated text needs the full string in title or a tooltip"
|
|
@@ -130,9 +151,9 @@
|
|
|
130
151
|
},
|
|
131
152
|
"examples": [
|
|
132
153
|
{
|
|
133
|
-
"name": "
|
|
154
|
+
"name": "Scale",
|
|
134
155
|
"description": "Ten steps from caption to hero, all on the same scale.",
|
|
135
|
-
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text
|
|
156
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text scale=\"2xs\">Extra extra small (2xs — 10px)</Text>\n <Text scale=\"xs\">Extra small (xs — 12px)</Text>\n <Text scale=\"sm\">Small (sm — 14px)</Text>\n <Text scale=\"base\">Base size (14px)</Text>\n <Text scale=\"md\">Medium prose body (md — 15px)</Text>\n <Text scale=\"lg\">Large (lg — 20px)</Text>\n <Text scale=\"xl\">Extra large (xl — 24px)</Text>\n <Text scale=\"2xl\">Extra extra large (2xl — 30px)</Text>\n <Text scale=\"3xl\">Page title (3xl — 36px)</Text>\n <Text scale=\"4xl\">Hero display (4xl — 48px)</Text>\n</div>"
|
|
136
157
|
},
|
|
137
158
|
{
|
|
138
159
|
"name": "Weights",
|
|
@@ -147,12 +168,12 @@
|
|
|
147
168
|
{
|
|
148
169
|
"name": "Semantic Elements",
|
|
149
170
|
"description": "The as prop picks the tag, so the outline stays correct.",
|
|
150
|
-
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text as=\"h1\"
|
|
171
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text as=\"h1\" scale=\"3xl\" weight=\"semibold\">Heading 1</Text>\n <Text as=\"h2\" scale=\"xl\" weight=\"semibold\">Heading 2</Text>\n <Text as=\"h3\" scale=\"lg\" weight=\"semibold\">Heading 3</Text>\n <Text as=\"p\" scale=\"md\" color=\"secondary\">\n This is a paragraph of text that demonstrates the Text component\n with semantic paragraph element.\n </Text>\n</div>"
|
|
151
172
|
},
|
|
152
173
|
{
|
|
153
174
|
"name": "Monospace",
|
|
154
175
|
"description": "Fixed width for IDs, keys, and anything meant to be compared.",
|
|
155
|
-
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text font=\"mono\"
|
|
176
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text font=\"mono\" scale=\"sm\">const greeting = \"Hello, World!\";</Text>\n <Text font=\"mono\" scale=\"sm\" color=\"secondary\">npm install @usefragments/ui</Text>\n</div>"
|
|
156
177
|
},
|
|
157
178
|
{
|
|
158
179
|
"name": "Truncation",
|
|
@@ -180,7 +201,8 @@
|
|
|
180
201
|
"contract": {
|
|
181
202
|
"propsSummary": [
|
|
182
203
|
"as: string - HTML element",
|
|
183
|
-
"
|
|
204
|
+
"role: caption|ui-compact|ui-standard|body-compact|body-relaxed|title-sm|title-md|title-lg|code|section-label|eyebrow - typography role (owns size, weight, line height, tracking)",
|
|
205
|
+
"scale: 2xs|xs|sm|base|md|lg|xl|2xl|3xl|4xl - type-scale step for text with no role (px: 10/12/14/14/15/20/24/30/36/48)",
|
|
184
206
|
"weight: normal|medium|semibold|bold - font weight",
|
|
185
207
|
"color: primary|secondary|tertiary|muted|accent|success|warning|danger - text color (muted = tertiary; accent = brand spend; semantic colours for inline state)",
|
|
186
208
|
"font: sans|mono - font family",
|
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
2
|
@use "../../tokens/mixins" as *;
|
|
3
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
3
4
|
@use "../../recipes/typography" as typography;
|
|
4
5
|
|
|
5
6
|
.text {
|
|
6
7
|
font-family: var(--fui-font-sans, $fui-font-sans);
|
|
7
8
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
8
|
-
margin: 0;
|
|
9
|
+
margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
//
|
|
12
|
-
.
|
|
12
|
+
// Label roles: the small list heading and the eyebrow.
|
|
13
|
+
.role-section-label {
|
|
13
14
|
@include typography.role("ui-compact");
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
// Eyebrow: the small
|
|
17
|
-
//
|
|
18
|
-
// thing the reader is meant to look at.
|
|
19
|
-
.
|
|
17
|
+
// Eyebrow: the small label that names a surface above its statement (page
|
|
18
|
+
// label, card section head). Caption size, semibold, natural case, always
|
|
19
|
+
// tertiary ink — it is never the thing the reader is meant to look at.
|
|
20
|
+
.role-eyebrow {
|
|
20
21
|
@include typography.role("caption");
|
|
21
22
|
font-weight: var(--fui-font-weight-semibold, $fui-font-weight-semibold);
|
|
22
|
-
letter-spacing: var(--fui-letter-spacing-wide, $fui-letter-spacing-wide);
|
|
23
|
-
text-transform: uppercase;
|
|
24
23
|
color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
25
24
|
}
|
|
26
25
|
|
|
@@ -43,46 +42,46 @@
|
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
//
|
|
47
|
-
.
|
|
45
|
+
// Scale steps, for text with no role
|
|
46
|
+
.scale-2xs {
|
|
48
47
|
font-size: var(--fui-font-size-2xs, $fui-font-size-2xs);
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
.
|
|
50
|
+
.scale-xs {
|
|
52
51
|
font-size: var(--fui-font-size-xs, $fui-font-size-xs);
|
|
53
52
|
}
|
|
54
53
|
|
|
55
|
-
.
|
|
54
|
+
.scale-sm {
|
|
56
55
|
font-size: var(--fui-font-size-sm, $fui-font-size-sm);
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
.
|
|
58
|
+
.scale-base {
|
|
60
59
|
font-size: var(--fui-font-size-base, $fui-font-size-base);
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
.
|
|
62
|
+
.scale-md {
|
|
64
63
|
font-size: var(--fui-font-size-md, $fui-font-size-md);
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
.
|
|
66
|
+
.scale-lg {
|
|
68
67
|
font-size: var(--fui-font-size-lg, $fui-font-size-lg);
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
.
|
|
70
|
+
.scale-xl {
|
|
72
71
|
font-size: var(--fui-font-size-xl, $fui-font-size-xl);
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
.
|
|
74
|
+
.scale-2xl {
|
|
76
75
|
font-size: var(--fui-font-size-2xl, $fui-font-size-2xl);
|
|
77
76
|
}
|
|
78
77
|
|
|
79
|
-
.
|
|
78
|
+
.scale-3xl {
|
|
80
79
|
font-size: var(--fui-font-size-3xl, $fui-font-size-3xl);
|
|
81
80
|
line-height: var(--fui-line-height-display, $fui-line-height-display);
|
|
82
81
|
letter-spacing: var(--fui-letter-spacing-display, $fui-letter-spacing-display);
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
.
|
|
84
|
+
.scale-4xl {
|
|
86
85
|
font-size: var(--fui-font-size-4xl, $fui-font-size-4xl);
|
|
87
86
|
line-height: var(--fui-line-height-display, $fui-line-height-display);
|
|
88
87
|
letter-spacing: var(--fui-letter-spacing-display, $fui-letter-spacing-display);
|
|
@@ -16,9 +16,11 @@ export type TextRole =
|
|
|
16
16
|
| "title-md"
|
|
17
17
|
| "title-lg"
|
|
18
18
|
| "display"
|
|
19
|
-
| "code"
|
|
19
|
+
| "code"
|
|
20
|
+
| "section-label"
|
|
21
|
+
| "eyebrow";
|
|
20
22
|
|
|
21
|
-
export type
|
|
23
|
+
export type TextScale = "2xs" | "xs" | "sm" | "base" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl";
|
|
22
24
|
export type TextWeight = "normal" | "medium" | "semibold" | "bold";
|
|
23
25
|
export type TextFont = "sans" | "mono";
|
|
24
26
|
export type TextTracking = "normal" | "tight" | "tighter" | "tightest";
|
|
@@ -70,41 +72,44 @@ type TextSharedProps = Omit<React.HTMLAttributes<HTMLElement>, "color" | "role">
|
|
|
70
72
|
truncate?: boolean;
|
|
71
73
|
/** Number of lines before truncating (requires truncate=true) */
|
|
72
74
|
lineClamp?: number;
|
|
73
|
-
/** Letter-spacing preset. `"tight"` suits dense UI chrome labels (-0.01em);
|
|
74
|
-
* `"tighter"` suits headings and stat values (-0.02em); `"tightest"` suits
|
|
75
|
-
* display numerics (-0.025em). Omit for the font's default tracking. */
|
|
76
75
|
/** Use tabular (fixed-width) numerals so digits align in columns. Ideal for
|
|
77
76
|
* stat values, tables, timestamps, and any updating number. */
|
|
78
77
|
tabularNums?: boolean;
|
|
79
78
|
};
|
|
80
79
|
|
|
81
80
|
type TextRoleProps = {
|
|
81
|
+
/** Typography role: one named setting of size, weight, line height and
|
|
82
|
+
* tracking. `section-label` is the small list heading; `eyebrow` is the
|
|
83
|
+
* small semibold label that names a surface above its statement. A role owns the
|
|
84
|
+
* whole setting, so `scale`, `weight`, `font` and `letterSpacing` are
|
|
85
|
+
* unavailable beside it. */
|
|
82
86
|
role: TextRole;
|
|
83
|
-
|
|
84
|
-
variant?: never;
|
|
87
|
+
scale?: never;
|
|
85
88
|
weight?: never;
|
|
86
89
|
font?: never;
|
|
87
90
|
letterSpacing?: never;
|
|
88
91
|
};
|
|
89
92
|
|
|
90
|
-
type
|
|
93
|
+
type TextScaleProps = {
|
|
91
94
|
role?: never;
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
/** Step on the type scale, for text that has no role. */
|
|
96
|
+
scale?: TextScale;
|
|
94
97
|
weight?: TextWeight;
|
|
95
98
|
font?: TextFont;
|
|
99
|
+
/** Letter-spacing preset. `"tight"` suits dense UI chrome labels (-0.01em);
|
|
100
|
+
* `"tighter"` suits headings and stat values (-0.02em); `"tightest"` suits
|
|
101
|
+
* display numerics (-0.025em). Omit for the font's default tracking. */
|
|
96
102
|
letterSpacing?: TextTracking;
|
|
97
103
|
};
|
|
98
104
|
|
|
99
|
-
export type TextProps = TextSharedProps & (TextRoleProps |
|
|
105
|
+
export type TextProps = TextSharedProps & (TextRoleProps | TextScaleProps);
|
|
100
106
|
|
|
101
107
|
const TextRoot = React.forwardRef<HTMLElement, TextProps>(function Text(
|
|
102
108
|
{
|
|
103
109
|
children,
|
|
104
110
|
as: Component = "span",
|
|
105
111
|
role,
|
|
106
|
-
|
|
107
|
-
size,
|
|
112
|
+
scale,
|
|
108
113
|
weight,
|
|
109
114
|
color,
|
|
110
115
|
font,
|
|
@@ -118,21 +123,18 @@ const TextRoot = React.forwardRef<HTMLElement, TextProps>(function Text(
|
|
|
118
123
|
},
|
|
119
124
|
ref
|
|
120
125
|
) {
|
|
121
|
-
const
|
|
122
|
-
? [
|
|
126
|
+
const ignoredScaleProps = role
|
|
127
|
+
? [scale, weight, font, letterSpacing].some((value) => value !== undefined)
|
|
123
128
|
: false;
|
|
124
129
|
|
|
125
|
-
if (!isProductionBuild() &&
|
|
126
|
-
console.warn(
|
|
127
|
-
"[Text] Semantic role takes precedence over size, variant, weight, font, and letterSpacing."
|
|
128
|
-
);
|
|
130
|
+
if (!isProductionBuild() && ignoredScaleProps) {
|
|
131
|
+
console.warn("[Text] A role takes precedence over scale, weight, font, and letterSpacing.");
|
|
129
132
|
}
|
|
130
133
|
|
|
131
134
|
const classes = [
|
|
132
135
|
styles.text,
|
|
133
136
|
role && styles[`role-${role}`],
|
|
134
|
-
!role &&
|
|
135
|
-
!role && size && styles[`size-${size}`],
|
|
137
|
+
!role && scale && styles[`scale-${scale}`],
|
|
136
138
|
!role && weight && styles[`weight-${weight}`],
|
|
137
139
|
color && styles[`color-${color}`],
|
|
138
140
|
!role && font === "mono" && styles.mono,
|