@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
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
@include button-reset;
|
|
8
8
|
@include interactive-base;
|
|
9
9
|
@include action.base;
|
|
10
|
+
@include high-contrast-outline;
|
|
10
11
|
|
|
11
|
-
border-radius: var(--fui-radius-
|
|
12
|
+
border-radius: var(--fui-radius-l2, $fui-radius-l2);
|
|
12
13
|
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
13
|
-
border: var(--fui-stroke-hairline,
|
|
14
|
+
border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid transparent;
|
|
14
15
|
background-color: transparent;
|
|
15
16
|
flex-shrink: 0;
|
|
16
17
|
|
|
@@ -18,6 +19,14 @@
|
|
|
18
19
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
// Tactile press. 0.96 exactly: lower reads as exaggerated. Rides the
|
|
23
|
+
// interactive-base transition, so a release mid-press eases back.
|
|
24
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
25
|
+
&:active:not(:disabled):not([data-disabled]) {
|
|
26
|
+
scale: 0.96;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
svg {
|
|
22
31
|
display: block;
|
|
23
32
|
}
|
|
@@ -59,7 +68,7 @@
|
|
|
59
68
|
}
|
|
60
69
|
}
|
|
61
70
|
|
|
62
|
-
.
|
|
71
|
+
.soft {
|
|
63
72
|
background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
|
|
64
73
|
|
|
65
74
|
&:hover:not(:disabled):not([data-disabled]) {
|
|
@@ -71,7 +80,7 @@
|
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
82
|
|
|
74
|
-
.
|
|
83
|
+
.outline {
|
|
75
84
|
border-color: var(--fui-border, $fui-border);
|
|
76
85
|
|
|
77
86
|
&:hover:not(:disabled):not([data-disabled]) {
|
|
@@ -28,12 +28,12 @@ export interface IconButtonProps extends Omit<
|
|
|
28
28
|
*
|
|
29
29
|
* - `ghost` (default): transparent at rest, subtle hover. Fits inside
|
|
30
30
|
* dense topbars and row affordances.
|
|
31
|
-
* - `
|
|
31
|
+
* - `soft`: painted with the tertiary surface; use when the affordance
|
|
32
32
|
* sits on a matching surface and needs a touch more weight.
|
|
33
|
-
* - `
|
|
34
|
-
*
|
|
33
|
+
* - `outline`: hairline border; use as a secondary control alongside a
|
|
34
|
+
* solid `Button`.
|
|
35
35
|
* @default "ghost" */
|
|
36
|
-
variant?: "ghost" | "
|
|
36
|
+
variant?: "ghost" | "soft" | "outline";
|
|
37
37
|
/** Button size. Uses the same height ladder as Button so icon-only
|
|
38
38
|
* affordances align with toolbar actions and adjacent fields.
|
|
39
39
|
* @default "md" */
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"size: sm|md|lg (default: md)",
|
|
16
16
|
"disabled: boolean (default: false)",
|
|
17
17
|
"error: boolean (default: false)",
|
|
18
|
-
"success: boolean (default: false)",
|
|
19
18
|
"label: string",
|
|
20
19
|
"required: boolean (default: false)",
|
|
21
20
|
"helperText: string",
|
|
@@ -78,12 +77,6 @@
|
|
|
78
77
|
"default": "false",
|
|
79
78
|
"required": false
|
|
80
79
|
},
|
|
81
|
-
"success": {
|
|
82
|
-
"type": "boolean",
|
|
83
|
-
"description": "Whether to show success/validated styling",
|
|
84
|
-
"default": "false",
|
|
85
|
-
"required": false
|
|
86
|
-
},
|
|
87
80
|
"label": {
|
|
88
81
|
"type": "string",
|
|
89
82
|
"description": "Label text displayed above input",
|
|
@@ -251,11 +244,6 @@
|
|
|
251
244
|
"description": "Leading icon and a ⌘K hint that focuses the field.",
|
|
252
245
|
"code": "<Input\n aria-label=\"Search findings\"\n placeholder=\"Search findings...\"\n shortcut=\"⌘K\"\n shortcutBehavior=\"focus-input\"\n startAdornment={<MagnifyingGlass aria-hidden=\"true\" />}\n withFieldWrapper={false}\n/>"
|
|
253
246
|
},
|
|
254
|
-
{
|
|
255
|
-
"name": "Success State",
|
|
256
|
-
"description": "Green border confirms the value passed validation.",
|
|
257
|
-
"code": "<Input\n label=\"Email\"\n type=\"email\"\n value=\"user@example.com\"\n success\n helperText=\"Email verified\"\n/>"
|
|
258
|
-
},
|
|
259
247
|
{
|
|
260
248
|
"name": "With Start Adornment",
|
|
261
249
|
"description": "Prefix sits inside the field, before the text.",
|
|
@@ -293,7 +281,6 @@
|
|
|
293
281
|
"disabled: boolean - disables interaction",
|
|
294
282
|
"required: boolean - required field indicator",
|
|
295
283
|
"error: boolean - shows error styling",
|
|
296
|
-
"success: boolean - shows success/validated styling",
|
|
297
284
|
"startAdornment: ReactNode - content before the input (icon or prefix)",
|
|
298
285
|
"endAdornment: ReactNode - content after the input (icon or suffix)",
|
|
299
286
|
"shortcut: string - visual kbd hint inside the input; do not hand-roll extra kbd markup",
|
|
@@ -40,6 +40,8 @@
|
|
|
40
40
|
&:focus-visible {
|
|
41
41
|
@include field.focus-state;
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
@include high-contrast-outline;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
// Size variants — shared control-size + field-padding path
|
|
@@ -63,18 +65,7 @@
|
|
|
63
65
|
@include field.invalid-state;
|
|
64
66
|
|
|
65
67
|
&:focus-visible {
|
|
66
|
-
|
|
67
|
-
@include focus-ring-error;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Success state — green border for validated fields (DoorDash/Stocksy pattern)
|
|
72
|
-
.success {
|
|
73
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
74
|
-
|
|
75
|
-
&:focus-visible {
|
|
76
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
77
|
-
@include focus-ring-success;
|
|
68
|
+
@include field.invalid-focus-state;
|
|
78
69
|
}
|
|
79
70
|
}
|
|
80
71
|
|
|
@@ -83,12 +74,6 @@
|
|
|
83
74
|
color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
84
75
|
}
|
|
85
76
|
|
|
86
|
-
// Auto-detect success state via :has() — applies success color to helper
|
|
87
|
-
.wrapper[data-success] .helper,
|
|
88
|
-
.helperSuccess {
|
|
89
|
-
color: var(--fui-color-success-text, $fui-color-success-text);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
77
|
// ============================================
|
|
93
78
|
// Input with adornments or shortcut indicator
|
|
94
79
|
// ============================================
|
|
@@ -149,18 +134,7 @@
|
|
|
149
134
|
@include field.invalid-state;
|
|
150
135
|
|
|
151
136
|
&:focus-within {
|
|
152
|
-
|
|
153
|
-
@include focus-ring-error;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Success state on adornment container
|
|
158
|
-
&:has(.success) {
|
|
159
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
160
|
-
|
|
161
|
-
&:focus-within {
|
|
162
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
163
|
-
@include focus-ring-success;
|
|
137
|
+
@include field.invalid-focus-state;
|
|
164
138
|
}
|
|
165
139
|
}
|
|
166
140
|
}
|
|
@@ -209,30 +183,6 @@
|
|
|
209
183
|
user-select: none;
|
|
210
184
|
}
|
|
211
185
|
|
|
212
|
-
// ============================================
|
|
213
|
-
// Accessibility: High Contrast Mode
|
|
214
|
-
// ============================================
|
|
215
|
-
|
|
216
|
-
@media (prefers-contrast: more) {
|
|
217
|
-
.input {
|
|
218
|
-
border-width: var(--fui-stroke-default, 2px);
|
|
219
|
-
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
220
|
-
|
|
221
|
-
&:focus-visible {
|
|
222
|
-
border-color: var(--fui-color-accent, $fui-color-accent);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
.error,
|
|
227
|
-
.input[aria-invalid] {
|
|
228
|
-
border-color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.success {
|
|
232
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
186
|
// ============================================
|
|
237
187
|
// Accessibility: Reduced Motion
|
|
238
188
|
// ============================================
|
|
@@ -30,8 +30,6 @@ export interface InputProps extends Omit<
|
|
|
30
30
|
disabled?: boolean;
|
|
31
31
|
/** Show error styling */
|
|
32
32
|
error?: boolean;
|
|
33
|
-
/** Show success styling */
|
|
34
|
-
success?: boolean;
|
|
35
33
|
/** Visible label text */
|
|
36
34
|
label?: string;
|
|
37
35
|
/** Whether the field is required */
|
|
@@ -105,7 +103,6 @@ const InputRoot = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
|
|
105
103
|
size: sizeProp,
|
|
106
104
|
disabled = false,
|
|
107
105
|
error = false,
|
|
108
|
-
success = false,
|
|
109
106
|
required = false,
|
|
110
107
|
label,
|
|
111
108
|
helperText,
|
|
@@ -174,23 +171,11 @@ const InputRoot = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
|
|
174
171
|
|
|
175
172
|
const hasAdornment = !!(startAdornment || endAdornment);
|
|
176
173
|
|
|
177
|
-
const inputClasses = [
|
|
178
|
-
styles.input,
|
|
179
|
-
styles[size],
|
|
180
|
-
error && styles.error,
|
|
181
|
-
success && styles.success,
|
|
182
|
-
inputClassName,
|
|
183
|
-
]
|
|
174
|
+
const inputClasses = [styles.input, styles[size], error && styles.error, inputClassName]
|
|
184
175
|
.filter(Boolean)
|
|
185
176
|
.join(" ");
|
|
186
177
|
|
|
187
|
-
const helperClasses = [
|
|
188
|
-
styles.helper,
|
|
189
|
-
error && styles.helperError,
|
|
190
|
-
success && styles.helperSuccess,
|
|
191
|
-
]
|
|
192
|
-
.filter(Boolean)
|
|
193
|
-
.join(" ");
|
|
178
|
+
const helperClasses = [styles.helper, error && styles.helperError].filter(Boolean).join(" ");
|
|
194
179
|
|
|
195
180
|
const wrapperClasses = [styles.wrapper, className].filter(Boolean).join(" ");
|
|
196
181
|
const labelClasses = styles.label;
|
|
@@ -275,7 +260,6 @@ const InputRoot = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
|
|
275
260
|
{...rootProps}
|
|
276
261
|
disabled={disabled}
|
|
277
262
|
invalid={error}
|
|
278
|
-
data-success={success || undefined}
|
|
279
263
|
className={[wrapperClasses, rootProps?.className].filter(Boolean).join(" ")}
|
|
280
264
|
style={{ ...(rootProps?.style ?? {}), ...(style ?? {}) }}
|
|
281
265
|
>
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"exportName": "Link",
|
|
10
10
|
"propsSummary": [
|
|
11
11
|
"children: node (required)",
|
|
12
|
-
"
|
|
12
|
+
"tone: accent|neutral (default: accent)",
|
|
13
|
+
"color: primary|secondary|tertiary",
|
|
13
14
|
"underline: always|hover|none|dotted (default: hover)",
|
|
14
15
|
"external: boolean (default: false)",
|
|
15
16
|
"asChild: boolean (default: false)",
|
|
@@ -24,12 +25,18 @@
|
|
|
24
25
|
"description": "Link text content",
|
|
25
26
|
"required": true
|
|
26
27
|
},
|
|
27
|
-
"
|
|
28
|
+
"tone": {
|
|
28
29
|
"type": "enum",
|
|
29
|
-
"description": "
|
|
30
|
-
"default": "
|
|
30
|
+
"description": "Colour. accent is the link ink; neutral reads as body text until hovered",
|
|
31
|
+
"default": "accent",
|
|
31
32
|
"required": false,
|
|
32
|
-
"values": ["
|
|
33
|
+
"values": ["accent", "neutral"]
|
|
34
|
+
},
|
|
35
|
+
"color": {
|
|
36
|
+
"type": "enum",
|
|
37
|
+
"description": "Text-hierarchy colour for a neutral link (Text color axis); tertiary is the quietest link",
|
|
38
|
+
"required": false,
|
|
39
|
+
"values": ["primary", "secondary", "tertiary"]
|
|
33
40
|
},
|
|
34
41
|
"underline": {
|
|
35
42
|
"type": "enum",
|
|
@@ -86,7 +93,7 @@
|
|
|
86
93
|
"guidelines": [
|
|
87
94
|
"Name the destination; never \"click here\"",
|
|
88
95
|
"external sets target and rel — add your own \"opens in a new tab\" cue",
|
|
89
|
-
"
|
|
96
|
+
"tone=\"neutral\" for secondary links; add color=\"tertiary\" for metadata and footers",
|
|
90
97
|
"Links must stay distinguishable from surrounding text",
|
|
91
98
|
"asChild composes handlers with the child rather than replacing them"
|
|
92
99
|
],
|
|
@@ -104,9 +111,9 @@
|
|
|
104
111
|
"code": "<Link href=\"#\">Learn more about our services</Link>"
|
|
105
112
|
},
|
|
106
113
|
{
|
|
107
|
-
"name": "
|
|
108
|
-
"description": "Accent, then
|
|
109
|
-
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"md\" align=\"center\" wrap>\n <Link href=\"#\"
|
|
114
|
+
"name": "Tones",
|
|
115
|
+
"description": "Accent, then neutral, then the quietest neutral.",
|
|
116
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"md\" align=\"center\" wrap>\n <Link href=\"#\" tone=\"accent\">Accent</Link>\n <Link href=\"#\" tone=\"neutral\">Neutral</Link>\n <Link href=\"#\" tone=\"neutral\" color=\"tertiary\">Tertiary</Link>\n</Stack>"
|
|
110
117
|
},
|
|
111
118
|
{
|
|
112
119
|
"name": "Underline Styles",
|
|
@@ -121,7 +128,7 @@
|
|
|
121
128
|
{
|
|
122
129
|
"name": "As Child (Polymorphic)",
|
|
123
130
|
"description": "Paints Link styling onto a router link and keeps both click handlers.",
|
|
124
|
-
"code": "<Link asChild
|
|
131
|
+
"code": "<Link asChild tone=\"neutral\" onClick={() => {}}>\n <a href=\"#pricing\" onClick={() => {}}>\n Client-side navigation\n </a>\n</Link>"
|
|
125
132
|
}
|
|
126
133
|
],
|
|
127
134
|
"relations": [
|
|
@@ -140,7 +147,8 @@
|
|
|
140
147
|
"propsSummary": [
|
|
141
148
|
"children: ReactNode - link text (required)",
|
|
142
149
|
"href: string - destination URL",
|
|
143
|
-
"
|
|
150
|
+
"tone: accent|neutral - colour",
|
|
151
|
+
"color: primary|secondary|tertiary - hierarchy colour on a neutral link",
|
|
144
152
|
"underline: always|hover|none|dotted - underline behavior",
|
|
145
153
|
"external: boolean - opens in new tab",
|
|
146
154
|
"asChild: boolean - polymorphic child rendering with merged styles and composed event handlers"
|
|
@@ -17,16 +17,22 @@
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
//
|
|
21
|
-
.
|
|
22
|
-
|
|
20
|
+
// Tone. The accent ink is `--fui-link-ink` (the read-safe step, gated by
|
|
21
|
+
// read-safe-contrast.test.ts); hover keeps the same ink and underlines.
|
|
22
|
+
.toneAccent {
|
|
23
|
+
color: var(--fui-link-ink, #{$fui-link-ink});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.toneNeutral {
|
|
27
|
+
color: var(--fui-text-primary, $fui-text-primary);
|
|
23
28
|
|
|
24
29
|
&:hover {
|
|
25
|
-
color: var(--fui-
|
|
30
|
+
color: var(--fui-color-accent, $fui-color-accent);
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
|
|
29
|
-
.
|
|
34
|
+
// Text-hierarchy colour on a neutral link; hover steps one rung up the ladder.
|
|
35
|
+
.colorPrimary {
|
|
30
36
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
31
37
|
|
|
32
38
|
&:hover {
|
|
@@ -34,7 +40,15 @@
|
|
|
34
40
|
}
|
|
35
41
|
}
|
|
36
42
|
|
|
37
|
-
.
|
|
43
|
+
.colorSecondary {
|
|
44
|
+
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
45
|
+
|
|
46
|
+
&:hover {
|
|
47
|
+
color: var(--fui-text-primary, $fui-text-primary);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.colorTertiary {
|
|
38
52
|
color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
39
53
|
|
|
40
54
|
&:hover {
|
|
@@ -45,19 +59,19 @@
|
|
|
45
59
|
// Underline styles
|
|
46
60
|
.underline-always {
|
|
47
61
|
text-decoration: underline;
|
|
48
|
-
text-decoration-style:
|
|
62
|
+
text-decoration-style: solid;
|
|
49
63
|
text-underline-offset: 0.2em;
|
|
50
64
|
}
|
|
51
65
|
|
|
52
66
|
.underline-hover {
|
|
53
|
-
text-decoration-line:
|
|
54
|
-
text-decoration-style:
|
|
67
|
+
text-decoration-line: none;
|
|
68
|
+
text-decoration-style: solid;
|
|
55
69
|
text-underline-offset: 0.2em;
|
|
56
70
|
text-decoration-color: color-mix(in srgb, currentColor 55%, transparent);
|
|
57
71
|
|
|
58
72
|
&:hover {
|
|
59
73
|
text-decoration-line: underline;
|
|
60
|
-
text-decoration-style:
|
|
74
|
+
text-decoration-style: solid;
|
|
61
75
|
text-decoration-color: currentColor;
|
|
62
76
|
text-underline-offset: 0.2em;
|
|
63
77
|
}
|
|
@@ -13,10 +13,18 @@ function composeEventHandlers<T extends (...args: any[]) => void>(
|
|
|
13
13
|
}) as T;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export
|
|
16
|
+
export type LinkTone = 'accent' | 'neutral';
|
|
17
|
+
export type LinkColor = 'primary' | 'secondary' | 'tertiary';
|
|
18
|
+
|
|
19
|
+
export interface LinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'color'> {
|
|
17
20
|
children: React.ReactNode;
|
|
18
|
-
/**
|
|
19
|
-
|
|
21
|
+
/** Colour. `accent` (default) is the link ink; `neutral` reads as body text
|
|
22
|
+
* until hovered, for secondary and contextual links.
|
|
23
|
+
* @default 'accent' */
|
|
24
|
+
tone?: LinkTone;
|
|
25
|
+
/** Text-hierarchy colour for a `neutral` link (Text's `color` axis).
|
|
26
|
+
* `tertiary` is the quietest link, for metadata and footers. */
|
|
27
|
+
color?: LinkColor;
|
|
20
28
|
/** Underline style */
|
|
21
29
|
underline?: 'always' | 'hover' | 'none' | 'dotted';
|
|
22
30
|
/** Open in new tab (adds rel="noopener noreferrer") */
|
|
@@ -32,11 +40,23 @@ export interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement>
|
|
|
32
40
|
style?: React.CSSProperties;
|
|
33
41
|
}
|
|
34
42
|
|
|
43
|
+
const TONE_CLASS: Record<LinkTone, string> = {
|
|
44
|
+
accent: styles.toneAccent,
|
|
45
|
+
neutral: styles.toneNeutral,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const COLOR_CLASS: Record<LinkColor, string> = {
|
|
49
|
+
primary: styles.colorPrimary,
|
|
50
|
+
secondary: styles.colorSecondary,
|
|
51
|
+
tertiary: styles.colorTertiary,
|
|
52
|
+
};
|
|
53
|
+
|
|
35
54
|
const LinkRoot = React.forwardRef<HTMLAnchorElement, LinkProps>(
|
|
36
55
|
function Link(
|
|
37
56
|
{
|
|
38
57
|
children,
|
|
39
|
-
|
|
58
|
+
tone = 'accent',
|
|
59
|
+
color,
|
|
40
60
|
underline = 'hover',
|
|
41
61
|
external = false,
|
|
42
62
|
asChild = false,
|
|
@@ -50,7 +70,8 @@ const LinkRoot = React.forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
50
70
|
) {
|
|
51
71
|
const classes = [
|
|
52
72
|
styles.link,
|
|
53
|
-
|
|
73
|
+
TONE_CLASS[tone],
|
|
74
|
+
color && COLOR_CLASS[color],
|
|
54
75
|
styles[`underline-${underline}`],
|
|
55
76
|
className,
|
|
56
77
|
]
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"propsSummary": [
|
|
11
11
|
"children: node (required)",
|
|
12
12
|
"as: ul|ol (default: ul)",
|
|
13
|
-
"
|
|
14
|
-
"gap: none|xs|sm|md|lg (default: sm)",
|
|
13
|
+
"marker: none|disc|decimal|icon (default: disc)",
|
|
14
|
+
"gap: none|xs|sm|md|lg|xl (default: sm)",
|
|
15
15
|
"style: object"
|
|
16
16
|
],
|
|
17
17
|
"props": {
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"required": false,
|
|
28
28
|
"values": ["ul", "ol"]
|
|
29
29
|
},
|
|
30
|
-
"
|
|
30
|
+
"marker": {
|
|
31
31
|
"type": "enum",
|
|
32
|
-
"description": "
|
|
32
|
+
"description": "Marker drawn before each item",
|
|
33
33
|
"default": "disc",
|
|
34
34
|
"required": false,
|
|
35
35
|
"values": ["none", "disc", "decimal", "icon"]
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"description": "Spacing between items",
|
|
40
40
|
"default": "sm",
|
|
41
41
|
"required": false,
|
|
42
|
-
"values": ["none", "xs", "sm", "md", "lg"]
|
|
42
|
+
"values": ["none", "xs", "sm", "md", "lg", "xl"]
|
|
43
43
|
},
|
|
44
44
|
"style": {
|
|
45
45
|
"type": "object",
|
|
@@ -73,22 +73,22 @@
|
|
|
73
73
|
{
|
|
74
74
|
"name": "Bullet List",
|
|
75
75
|
"description": "The default marker — reach for it when order does not matter.",
|
|
76
|
-
"code": "<List
|
|
76
|
+
"code": "<List marker=\"disc\">\n <List.Item>First item</List.Item>\n <List.Item>Second item</List.Item>\n <List.Item>Third item</List.Item>\n</List>"
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
"name": "Numbered List",
|
|
80
80
|
"description": "as=\"ol\" makes the sequence real, not just visual.",
|
|
81
|
-
"code": "<List as=\"ol\"
|
|
81
|
+
"code": "<List as=\"ol\" marker=\"decimal\">\n <List.Item>Create your account</List.Item>\n <List.Item>Configure your settings</List.Item>\n <List.Item>Start building</List.Item>\n</List>"
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
"name": "Icon List",
|
|
85
85
|
"description": "Each item takes its own icon — checkmarks sell a feature list.",
|
|
86
|
-
"code": "<List
|
|
86
|
+
"code": "<List marker=\"icon\">\n <List.Item icon={<Check weight=\"bold\" color=\"var(--fui-color-success)\" />}>\n Unlimited projects\n </List.Item>\n <List.Item icon={<Check weight=\"bold\" color=\"var(--fui-color-success)\" />}>\n Priority support\n </List.Item>\n <List.Item icon={<Check weight=\"bold\" color=\"var(--fui-color-success)\" />}>\n Advanced analytics\n </List.Item>\n</List>"
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
"name": "No Style",
|
|
90
90
|
"description": "No markers, wider gap — the shape for stacked nav links.",
|
|
91
|
-
"code": "<List
|
|
91
|
+
"code": "<List marker=\"none\" gap=\"md\">\n <List.Item>Dashboard</List.Item>\n <List.Item>Settings</List.Item>\n <List.Item>Profile</List.Item>\n</List>"
|
|
92
92
|
}
|
|
93
93
|
],
|
|
94
94
|
"relations": [
|
|
@@ -107,8 +107,8 @@
|
|
|
107
107
|
"propsSummary": [
|
|
108
108
|
"children: List.Item[] - list items (required)",
|
|
109
109
|
"as: ul|ol - list type",
|
|
110
|
-
"
|
|
111
|
-
"gap: none|xs|sm|md|lg - item spacing"
|
|
110
|
+
"marker: none|disc|decimal|icon - marker before each item",
|
|
111
|
+
"gap: none|xs|sm|md|lg|xl - item spacing"
|
|
112
112
|
],
|
|
113
113
|
"a11yRules": ["A11Y_LIST_SEMANTIC", "A11Y_LIST_NESTING"]
|
|
114
114
|
},
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
2
3
|
@use "../../recipes/layout" as layout;
|
|
3
4
|
@use "../../recipes/prose" as prose;
|
|
4
5
|
|
|
5
6
|
.list {
|
|
6
|
-
margin: 0;
|
|
7
|
-
padding: 0;
|
|
7
|
+
margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
8
|
+
padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
//
|
|
11
|
+
// Markers
|
|
11
12
|
.none {
|
|
12
13
|
@include prose.list("none");
|
|
13
14
|
}
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
@include prose.list("icon");
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
// Gap
|
|
28
|
+
// Gap
|
|
28
29
|
.gap-none {
|
|
29
30
|
row-gap: layout.gap("none");
|
|
30
31
|
}
|
|
@@ -45,6 +46,10 @@
|
|
|
45
46
|
row-gap: layout.gap("lg");
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
.gap-xl {
|
|
50
|
+
row-gap: layout.gap("xl");
|
|
51
|
+
}
|
|
52
|
+
|
|
48
53
|
// List item
|
|
49
54
|
.item {
|
|
50
55
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
@@ -58,7 +63,7 @@
|
|
|
58
63
|
display: inline-flex;
|
|
59
64
|
align-items: center;
|
|
60
65
|
justify-content: center;
|
|
61
|
-
min-inline-size: var(--fui-raw-space-12,
|
|
66
|
+
min-inline-size: var(--fui-raw-space-12, #{measurements.raw-space(12)});
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
.itemContent {
|
|
@@ -7,19 +7,23 @@ import styles from './List.module.scss';
|
|
|
7
7
|
// Types
|
|
8
8
|
// ============================================
|
|
9
9
|
|
|
10
|
+
export type ListMarker = 'none' | 'disc' | 'decimal' | 'icon';
|
|
11
|
+
|
|
10
12
|
export interface ListProps extends React.HTMLAttributes<HTMLUListElement | HTMLOListElement> {
|
|
11
13
|
children: React.ReactNode;
|
|
12
14
|
/** List type */
|
|
13
15
|
as?: 'ul' | 'ol';
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
/** Marker drawn before each item. Not chrome, so it is `marker`, not `variant`.
|
|
17
|
+
* @default 'disc' */
|
|
18
|
+
marker?: ListMarker;
|
|
19
|
+
/** Spacing between items
|
|
20
|
+
* @default 'sm' */
|
|
21
|
+
gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
export interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
|
|
21
25
|
children: React.ReactNode;
|
|
22
|
-
/** Icon to display (only used with
|
|
26
|
+
/** Icon to display (only used with marker="icon") */
|
|
23
27
|
icon?: React.ReactNode;
|
|
24
28
|
}
|
|
25
29
|
|
|
@@ -28,10 +32,10 @@ export interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
|
|
|
28
32
|
// ============================================
|
|
29
33
|
|
|
30
34
|
interface ListContextValue {
|
|
31
|
-
|
|
35
|
+
marker: ListMarker;
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
const ListContext = React.createContext<ListContextValue>({
|
|
38
|
+
const ListContext = React.createContext<ListContextValue>({ marker: 'disc' });
|
|
35
39
|
|
|
36
40
|
function useListContext() {
|
|
37
41
|
return React.useContext(ListContext);
|
|
@@ -44,7 +48,7 @@ function useListContext() {
|
|
|
44
48
|
function ListRoot({
|
|
45
49
|
children,
|
|
46
50
|
as: Component = 'ul',
|
|
47
|
-
|
|
51
|
+
marker = 'disc',
|
|
48
52
|
gap = 'sm',
|
|
49
53
|
className,
|
|
50
54
|
style,
|
|
@@ -52,7 +56,7 @@ function ListRoot({
|
|
|
52
56
|
}: ListProps) {
|
|
53
57
|
const classes = [
|
|
54
58
|
styles.list,
|
|
55
|
-
styles[
|
|
59
|
+
styles[marker],
|
|
56
60
|
styles[`gap-${gap}`],
|
|
57
61
|
className,
|
|
58
62
|
]
|
|
@@ -60,7 +64,7 @@ function ListRoot({
|
|
|
60
64
|
.join(' ');
|
|
61
65
|
|
|
62
66
|
return (
|
|
63
|
-
<ListContext.Provider value={{
|
|
67
|
+
<ListContext.Provider value={{ marker }}>
|
|
64
68
|
<Component {...htmlProps} className={classes} style={style}>
|
|
65
69
|
{children}
|
|
66
70
|
</Component>
|
|
@@ -69,11 +73,11 @@ function ListRoot({
|
|
|
69
73
|
}
|
|
70
74
|
|
|
71
75
|
function ListItem({ children, icon, className, style, ...htmlProps }: ListItemProps) {
|
|
72
|
-
const {
|
|
76
|
+
const { marker } = useListContext();
|
|
73
77
|
|
|
74
78
|
const classes = [
|
|
75
79
|
styles.item,
|
|
76
|
-
|
|
80
|
+
marker === 'icon' && styles.iconItem,
|
|
77
81
|
className,
|
|
78
82
|
]
|
|
79
83
|
.filter(Boolean)
|
|
@@ -81,7 +85,7 @@ function ListItem({ children, icon, className, style, ...htmlProps }: ListItemPr
|
|
|
81
85
|
|
|
82
86
|
return (
|
|
83
87
|
<li {...htmlProps} className={classes} style={style}>
|
|
84
|
-
{
|
|
88
|
+
{marker === 'icon' && icon ? (
|
|
85
89
|
<span className={styles.iconWrapper}>{icon}</span>
|
|
86
90
|
) : null}
|
|
87
91
|
<span className={styles.itemContent}>{children}</span>
|