@usefragments/ui 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/assets/fragments-wordmark.cjs +2 -2
- package/dist/assets/fragments-wordmark.d.ts.map +1 -1
- package/dist/assets/fragments-wordmark.js +2 -2
- package/dist/assets/ui.css +4720 -4159
- package/dist/chart.cjs +24 -6
- package/dist/chart.js +24 -6
- package/dist/codeblock.cjs +55 -29
- package/dist/codeblock.js +55 -29
- package/dist/colorpicker.cjs +3 -1
- package/dist/colorpicker.js +3 -1
- package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
- package/dist/components/Accordion/Accordion.module.scss.js +8 -8
- package/dist/components/Alert/Alert.module.scss.cjs +15 -12
- package/dist/components/Alert/Alert.module.scss.js +15 -12
- package/dist/components/Alert/index.cjs +7 -1
- package/dist/components/Alert/index.d.ts +12 -6
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +7 -1
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
- package/dist/components/Avatar/Avatar.module.scss.js +14 -14
- package/dist/components/Badge/Badge.module.scss.cjs +19 -19
- package/dist/components/Badge/Badge.module.scss.js +19 -19
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
- package/dist/components/Box/Box.module.scss.cjs +152 -152
- package/dist/components/Box/Box.module.scss.js +152 -152
- package/dist/components/Box/index.cjs +64 -75
- package/dist/components/Box/index.d.ts +16 -16
- package/dist/components/Box/index.d.ts.map +1 -1
- package/dist/components/Box/index.js +64 -75
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
- package/dist/components/Button/Button.module.scss.cjs +14 -14
- package/dist/components/Button/Button.module.scss.js +14 -14
- package/dist/components/Card/Card.module.scss.cjs +29 -17
- package/dist/components/Card/Card.module.scss.js +30 -18
- package/dist/components/Card/index.cjs +8 -0
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +8 -0
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -9
- package/dist/components/Checkbox/Checkbox.module.scss.js +9 -9
- package/dist/components/Checkbox/index.cjs +2 -2
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/Chip/Chip.module.scss.cjs +15 -15
- package/dist/components/Chip/Chip.module.scss.js +15 -15
- package/dist/components/Chip/index.cjs +2 -1
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +2 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +26 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +26 -23
- package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
- package/dist/components/CodeBlock/css-variables-theme.js +98 -0
- package/dist/components/CodeBlock/index.d.ts +17 -3
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
- package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
- package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
- package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
- package/dist/components/ColorPicker/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
- package/dist/components/Combobox/Combobox.module.scss.js +21 -21
- package/dist/components/Combobox/index.cjs +17 -1
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +17 -1
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- package/dist/components/Command/index.cjs +26 -15
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +26 -15
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- package/dist/components/DataTable/DataTable.icons.cjs +6 -33
- package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.icons.js +6 -33
- package/dist/components/DataTable/DataTable.module.scss.cjs +27 -27
- package/dist/components/DataTable/DataTable.module.scss.js +27 -27
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
- package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
- package/dist/components/Dialog/Dialog.module.scss.js +14 -14
- package/dist/components/Dialog/index.cjs +11 -14
- package/dist/components/Dialog/index.d.ts +7 -7
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +11 -14
- package/dist/components/Drawer/Drawer.module.scss.cjs +29 -29
- package/dist/components/Drawer/Drawer.module.scss.js +29 -29
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- package/dist/components/Editor/index.d.ts +10 -10
- package/dist/components/Editor/index.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -8
- package/dist/components/EmptyState/EmptyState.module.scss.js +11 -8
- package/dist/components/EmptyState/index.cjs +8 -6
- package/dist/components/EmptyState/index.d.ts +9 -4
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +8 -6
- package/dist/components/Field/Field.module.scss.cjs +5 -5
- package/dist/components/Field/Field.module.scss.js +5 -5
- package/dist/components/Field/index.cjs +9 -1
- package/dist/components/Field/index.d.ts.map +1 -1
- package/dist/components/Field/index.js +9 -1
- package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
- package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
- package/dist/components/Grid/index.cjs +1 -1
- package/dist/components/Grid/index.js +1 -1
- package/dist/components/Header/Header.module.scss.cjs +33 -33
- package/dist/components/Header/Header.module.scss.js +33 -33
- package/dist/components/Header/index.cjs +17 -38
- package/dist/components/Header/index.d.ts +15 -11
- package/dist/components/Header/index.d.ts.map +1 -1
- package/dist/components/Header/index.js +17 -38
- package/dist/components/Icon/Icon.module.scss.cjs +15 -15
- package/dist/components/Icon/Icon.module.scss.js +15 -15
- package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
- package/dist/components/IconButton/IconButton.module.scss.js +8 -8
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.js +2 -1
- package/dist/components/Image/Image.module.scss.cjs +27 -27
- package/dist/components/Image/Image.module.scss.js +27 -27
- package/dist/components/Input/Input.module.scss.cjs +17 -17
- package/dist/components/Input/Input.module.scss.js +17 -17
- package/dist/components/Link/Link.module.scss.cjs +14 -10
- package/dist/components/Link/Link.module.scss.js +14 -10
- package/dist/components/Link/index.d.ts +1 -1
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/List/List.module.scss.cjs +19 -19
- package/dist/components/List/List.module.scss.js +19 -19
- package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
- package/dist/components/Listbox/Listbox.module.scss.js +8 -8
- package/dist/components/Loading/Loading.module.scss.cjs +34 -34
- package/dist/components/Loading/Loading.module.scss.js +34 -34
- package/dist/components/Loading/index.cjs +1 -1
- package/dist/components/Loading/index.js +1 -1
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Markdown/index.d.ts +2 -2
- package/dist/components/Markdown/index.d.ts.map +1 -1
- package/dist/components/Menu/Menu.module.scss.cjs +14 -14
- package/dist/components/Menu/Menu.module.scss.js +14 -14
- package/dist/components/Message/Message.module.scss.cjs +18 -18
- package/dist/components/Message/Message.module.scss.js +18 -18
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
- package/dist/components/NavigationMenu/index.cjs +32 -15
- package/dist/components/NavigationMenu/index.d.ts +12 -6
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +32 -15
- package/dist/components/Pagination/Pagination.module.scss.cjs +10 -10
- package/dist/components/Pagination/Pagination.module.scss.js +10 -10
- package/dist/components/Popover/Popover.module.scss.cjs +10 -10
- package/dist/components/Popover/Popover.module.scss.js +10 -10
- package/dist/components/Progress/Progress.module.scss.cjs +25 -25
- package/dist/components/Progress/Progress.module.scss.js +25 -25
- package/dist/components/Prompt/Prompt.module.scss.cjs +28 -28
- package/dist/components/Prompt/Prompt.module.scss.js +28 -28
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -15
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -15
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
- package/dist/components/ScrollArea/index.d.ts +4 -4
- package/dist/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/components/ScrollArea/scroll-state.d.ts +5 -5
- package/dist/components/Select/Select.module.scss.cjs +21 -21
- package/dist/components/Select/Select.module.scss.js +21 -21
- package/dist/components/Separator/Separator.module.scss.cjs +11 -11
- package/dist/components/Separator/Separator.module.scss.js +11 -11
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
- package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
- package/dist/components/Sidebar/index.cjs +12 -35
- package/dist/components/Sidebar/index.d.ts +19 -19
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +12 -35
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
- package/dist/components/Slider/Slider.module.scss.cjs +12 -12
- package/dist/components/Slider/Slider.module.scss.js +12 -12
- package/dist/components/Stack/Stack.module.scss.cjs +25 -25
- package/dist/components/Stack/Stack.module.scss.js +25 -25
- package/dist/components/Stack/index.cjs +1 -1
- package/dist/components/Stack/index.js +1 -1
- package/dist/components/Switch/Switch.module.scss.cjs +9 -9
- package/dist/components/Switch/Switch.module.scss.js +9 -9
- package/dist/components/Table/Table.module.scss.cjs +19 -19
- package/dist/components/Table/Table.module.scss.js +19 -19
- package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
- package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
- package/dist/components/TableOfContents/index.cjs +13 -9
- package/dist/components/TableOfContents/index.d.ts +5 -3
- package/dist/components/TableOfContents/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.js +13 -9
- package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
- package/dist/components/Tabs/Tabs.module.scss.js +12 -12
- package/dist/components/Tabs/index.cjs +26 -6
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +26 -6
- package/dist/components/Text/Text.module.scss.cjs +87 -75
- package/dist/components/Text/Text.module.scss.js +87 -75
- package/dist/components/Text/index.cjs +49 -41
- package/dist/components/Text/index.d.ts +12 -11
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +49 -41
- package/dist/components/Textarea/Textarea.module.scss.cjs +24 -24
- package/dist/components/Textarea/Textarea.module.scss.js +24 -24
- package/dist/components/Theme/index.cjs +2 -1
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +2 -1
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +9 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +9 -6
- package/dist/components/ThemeToggle/index.cjs +31 -6
- package/dist/components/ThemeToggle/index.d.ts +7 -2
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +32 -7
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
- package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
- package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
- package/dist/components/Tooltip/index.cjs +24 -40
- package/dist/components/Tooltip/index.d.ts +4 -4
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +24 -40
- package/dist/components/VisuallyHidden/index.d.ts +2 -2
- package/dist/data-table.cjs +2 -1
- package/dist/data-table.js +2 -1
- package/dist/datepicker.cjs +3 -2
- package/dist/datepicker.js +3 -2
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +21 -29
- package/dist/measurements/generated.cjs +9 -1
- package/dist/measurements/generated.d.ts +7 -0
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +9 -1
- package/dist/utils/a11y.cjs +5 -2
- package/dist/utils/a11y.d.ts +5 -5
- package/dist/utils/a11y.d.ts.map +1 -1
- package/dist/utils/a11y.js +5 -2
- package/dist/utils/canonical-stamp.cjs +2 -8
- package/dist/utils/canonical-stamp.d.ts.map +1 -1
- package/dist/utils/canonical-stamp.js +1 -7
- package/dist/utils/css-warning.cjs +1 -1
- package/dist/utils/css-warning.js +1 -1
- package/dist/utils/env.cjs +17 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +17 -0
- package/dist/utils/keyboard-shortcuts.cjs +3 -10
- package/dist/utils/keyboard-shortcuts.d.ts +4 -4
- package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
- package/dist/utils/keyboard-shortcuts.js +3 -10
- package/dist/utils/seed-derivation.cjs +10 -6
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +10 -6
- package/fragments.json +1 -1
- package/package.json +6 -4
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Alert/Alert.contract.json +37 -53
- package/src/components/Alert/Alert.module.scss +24 -0
- package/src/components/Alert/index.tsx +55 -29
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +53 -40
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +4 -1
- package/src/components/Badge/Badge.contract.json +37 -42
- package/src/components/Badge/Badge.module.scss +9 -2
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +12 -7
- package/src/components/Button/Button.module.scss +8 -7
- package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
- package/src/components/Card/Card.module.scss +82 -1
- package/src/components/Card/index.tsx +21 -2
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/index.tsx +36 -6
- package/src/components/Checkbox/Checkbox.contract.json +24 -24
- package/src/components/Checkbox/Checkbox.module.scss +32 -23
- package/src/components/Checkbox/index.tsx +4 -2
- package/src/components/Chip/Chip.contract.json +33 -40
- package/src/components/Chip/Chip.module.scss +2 -2
- package/src/components/Chip/index.tsx +2 -1
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +40 -15
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +91 -35
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +15 -12
- package/src/components/ColorPicker/index.tsx +5 -1
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +1 -1
- package/src/components/Combobox/index.tsx +31 -5
- package/src/components/Command/Command.contract.json +21 -43
- package/src/components/Command/index.tsx +58 -47
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +12 -8
- package/src/components/DataTable/index.tsx +8 -7
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +12 -5
- package/src/components/DatePicker/index.tsx +5 -2
- package/src/components/Dialog/Dialog.module.scss +3 -3
- package/src/components/Dialog/index.tsx +47 -37
- package/src/components/Drawer/Drawer.contract.json +22 -36
- package/src/components/Editor/Editor.contract.json +31 -48
- package/src/components/Editor/Editor.module.scss +36 -14
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +31 -43
- package/src/components/EmptyState/EmptyState.module.scss +8 -0
- package/src/components/EmptyState/index.tsx +48 -23
- package/src/components/Field/Field.contract.json +28 -46
- package/src/components/Field/index.tsx +5 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +10 -3
- package/src/components/Form/Form.contract.json +20 -20
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/index.tsx +10 -10
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +36 -21
- package/src/components/Header/index.tsx +134 -122
- package/src/components/Icon/Icon.contract.json +22 -62
- package/src/components/IconButton/IconButton.contract.json +34 -18
- package/src/components/IconButton/IconButton.module.scss +6 -7
- package/src/components/IconButton/index.tsx +2 -1
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +26 -32
- package/src/components/Input/Input.module.scss +3 -2
- package/src/components/Link/Link.contract.json +32 -52
- package/src/components/Link/Link.module.scss +23 -6
- package/src/components/Link/index.tsx +1 -1
- package/src/components/List/List.contract.json +23 -52
- package/src/components/List/List.module.scss +1 -1
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Loading/Loading.contract.json +37 -61
- package/src/components/Loading/Loading.module.scss +10 -7
- package/src/components/Loading/index.tsx +2 -2
- package/src/components/Main/Main.contract.json +17 -9
- package/src/components/Markdown/Markdown.contract.json +22 -43
- package/src/components/Markdown/Markdown.module.scss +43 -5
- package/src/components/Markdown/index.tsx +48 -49
- package/src/components/Menu/Menu.contract.json +25 -41
- package/src/components/Menu/Menu.module.scss +23 -8
- package/src/components/Message/Message.contract.json +29 -52
- package/src/components/Message/Message.module.scss +12 -5
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +64 -19
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +2 -2
- package/src/components/Popover/Popover.contract.json +24 -46
- package/src/components/Popover/Popover.module.scss +6 -5
- package/src/components/Progress/Progress.contract.json +32 -28
- package/src/components/Progress/Progress.module.scss +3 -2
- package/src/components/Prompt/Prompt.contract.json +31 -47
- package/src/components/Prompt/Prompt.module.scss +13 -5
- package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
- package/src/components/RadioGroup/RadioGroup.module.scss +13 -14
- package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
- package/src/components/ScrollArea/ScrollArea.module.scss +15 -15
- package/src/components/ScrollArea/index.tsx +16 -16
- package/src/components/ScrollArea/scroll-state.ts +24 -24
- package/src/components/Select/Select.module.scss +2 -2
- package/src/components/Separator/Separator.contract.json +24 -48
- package/src/components/Sidebar/Sidebar.contract.json +35 -67
- package/src/components/Sidebar/Sidebar.module.scss +22 -13
- package/src/components/Sidebar/index.tsx +164 -164
- package/src/components/Skeleton/Skeleton.contract.json +28 -54
- package/src/components/Skeleton/Skeleton.module.scss +27 -10
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +3 -3
- package/src/components/Stack/Stack.contract.json +29 -56
- package/src/components/Stack/Stack.module.scss +13 -12
- package/src/components/Stack/index.tsx +3 -3
- package/src/components/Switch/Switch.contract.json +33 -46
- package/src/components/Switch/Switch.module.scss +64 -26
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +15 -3
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +15 -5
- package/src/components/TableOfContents/index.tsx +26 -9
- package/src/components/Tabs/Tabs.contract.json +24 -45
- package/src/components/Tabs/Tabs.module.scss +1 -1
- package/src/components/Tabs/index.tsx +15 -3
- package/src/components/Text/Text.contract.json +30 -72
- package/src/components/Text/Text.module.scss +21 -4
- package/src/components/Text/index.tsx +113 -75
- package/src/components/Textarea/Textarea.contract.json +25 -43
- package/src/components/Textarea/Textarea.module.scss +2 -4
- package/src/components/Theme/Theme.contract.json +32 -51
- package/src/components/Theme/index.tsx +2 -1
- package/src/components/ThemeToggle/ThemeToggle.module.scss +23 -7
- package/src/components/ThemeToggle/index.tsx +43 -7
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
- package/src/components/Toast/Toast.contract.json +30 -40
- package/src/components/Toast/Toast.module.scss +1 -1
- package/src/components/ToggleGroup/ToggleGroup.contract.json +29 -30
- package/src/components/ToggleGroup/ToggleGroup.module.scss +38 -5
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +2 -2
- package/src/measurements/generated.ts +9 -2
- package/src/measurements/measurements.json +7 -0
- package/src/recipes/_boolean-range.scss +3 -11
- package/src/recipes/_field.scss +5 -1
- package/src/recipes/_layout.scss +14 -7
- package/src/recipes/_popup.scss +12 -2
- package/src/recipes/_prose.scss +13 -5
- package/src/recipes/_table-chrome.scss +16 -2
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +20 -19
- package/src/tokens/_computed.scss +5 -16
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +6 -1
- package/src/tokens/_measurements.generated.scss +14 -1
- package/src/tokens/_mixins.scss +7 -8
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_seeds.scss +20 -20
- package/src/tokens/_variables.scss +183 -38
- package/src/utils/a11y.tsx +69 -69
- package/src/utils/aria.ts +3 -3
- package/src/utils/canonical-stamp.ts +2 -12
- package/src/utils/css-warning.ts +7 -7
- package/src/utils/env.ts +25 -0
- package/src/utils/keyboard-shortcuts.ts +131 -126
- package/src/utils/seed-derivation.ts +10 -6
- package/src/components/Button/Button.contract.json +0 -218
- package/src/components/Card/Card.contract.json +0 -175
- package/src/components/DataTable/DataTable.contract.json +0 -302
- package/src/components/Dialog/Dialog.contract.json +0 -159
- package/src/components/Select/Select.contract.json +0 -259
|
@@ -10,8 +10,13 @@
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.title {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
@include navigation.properties;
|
|
14
|
+
|
|
15
|
+
margin: 0 0 var(--fui-toc-title-gap, var(--fui-space-2, #{$fui-space-2}));
|
|
16
|
+
// Same inline inset as `.link` (navigation.row) so the label and the index
|
|
17
|
+
// share one left edge — extra title padding made "On This Page" sit inward
|
|
18
|
+
// of the items below it.
|
|
19
|
+
padding-inline: var(--fui-toc-inline-inset, var(--fui-navigation-inline-inset));
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
// The quiet index is flush; links and group headers share the title inset.
|
|
@@ -40,6 +45,9 @@
|
|
|
40
45
|
|
|
41
46
|
display: flex;
|
|
42
47
|
align-items: center;
|
|
48
|
+
min-block-size: var(--fui-toc-row-track, var(--fui-navigation-row-track));
|
|
49
|
+
padding-inline: var(--fui-toc-inline-inset, var(--fui-navigation-inline-inset));
|
|
50
|
+
gap: var(--fui-toc-content-gap, var(--fui-navigation-content-gap));
|
|
43
51
|
border-radius: var(--fui-radius-md, $fui-radius-md);
|
|
44
52
|
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
45
53
|
text-decoration: none;
|
|
@@ -48,7 +56,7 @@
|
|
|
48
56
|
color var(--fui-transition-fast, $fui-transition-fast);
|
|
49
57
|
|
|
50
58
|
&:hover {
|
|
51
|
-
background-color: var(--fui-bg-hover, $fui-bg-hover);
|
|
59
|
+
background-color: var(--fui-toc-hover-bg, var(--fui-bg-hover, #{$fui-bg-hover}));
|
|
52
60
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
53
61
|
}
|
|
54
62
|
|
|
@@ -104,6 +112,9 @@
|
|
|
104
112
|
|
|
105
113
|
display: flex;
|
|
106
114
|
align-items: center;
|
|
115
|
+
min-block-size: var(--fui-toc-section-track, var(--fui-navigation-section-track));
|
|
116
|
+
padding-inline: var(--fui-toc-inline-inset, var(--fui-navigation-inline-inset));
|
|
117
|
+
gap: var(--fui-toc-content-gap, var(--fui-navigation-content-gap));
|
|
107
118
|
width: 100%;
|
|
108
119
|
border-radius: var(--fui-radius-md, $fui-radius-md);
|
|
109
120
|
color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
@@ -122,7 +133,7 @@
|
|
|
122
133
|
color var(--fui-transition-fast, $fui-transition-fast);
|
|
123
134
|
|
|
124
135
|
&:hover {
|
|
125
|
-
background-color: var(--fui-bg-hover, $fui-bg-hover);
|
|
136
|
+
background-color: var(--fui-toc-hover-bg, var(--fui-bg-hover, #{$fui-bg-hover}));
|
|
126
137
|
color: var(--fui-text-secondary, $fui-text-secondary);
|
|
127
138
|
}
|
|
128
139
|
|
|
@@ -169,5 +180,4 @@
|
|
|
169
180
|
.groupChevron {
|
|
170
181
|
transition: none;
|
|
171
182
|
}
|
|
172
|
-
|
|
173
183
|
}
|
|
@@ -16,6 +16,8 @@ export interface TableOfContentsProps extends React.HTMLAttributes<HTMLElement>
|
|
|
16
16
|
title?: string;
|
|
17
17
|
/** Hide the title */
|
|
18
18
|
hideTitle?: boolean;
|
|
19
|
+
/** Hide indented items and nested groups. Defaults to false. */
|
|
20
|
+
hideSubItems?: boolean;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
export interface TableOfContentsItemProps extends Omit<
|
|
@@ -63,9 +65,10 @@ export interface TableOfContentsGroupProps {
|
|
|
63
65
|
|
|
64
66
|
interface TocContextValue {
|
|
65
67
|
depth: number;
|
|
68
|
+
hideSubItems: boolean;
|
|
66
69
|
}
|
|
67
70
|
|
|
68
|
-
const TocContext = React.createContext<TocContextValue>({ depth: 0 });
|
|
71
|
+
const TocContext = React.createContext<TocContextValue>({ depth: 0, hideSubItems: false });
|
|
69
72
|
|
|
70
73
|
// ============================================
|
|
71
74
|
// Icons
|
|
@@ -95,6 +98,7 @@ function TableOfContentsRoot({
|
|
|
95
98
|
label = "Table of contents",
|
|
96
99
|
title = "On This Page",
|
|
97
100
|
hideTitle = false,
|
|
101
|
+
hideSubItems = false,
|
|
98
102
|
className,
|
|
99
103
|
"aria-label": ariaLabel,
|
|
100
104
|
...htmlProps
|
|
@@ -108,7 +112,7 @@ function TableOfContentsRoot({
|
|
|
108
112
|
{title}
|
|
109
113
|
</Text>
|
|
110
114
|
)}
|
|
111
|
-
<TocContext.Provider value={{ depth: 0 }}>
|
|
115
|
+
<TocContext.Provider value={{ depth: 0, hideSubItems }}>
|
|
112
116
|
<ul className={styles.list}>{children}</ul>
|
|
113
117
|
</TocContext.Provider>
|
|
114
118
|
</nav>
|
|
@@ -124,22 +128,29 @@ function TableOfContentsItem({
|
|
|
124
128
|
trailing,
|
|
125
129
|
className,
|
|
126
130
|
onClick,
|
|
127
|
-
href
|
|
131
|
+
href,
|
|
128
132
|
...htmlProps
|
|
129
133
|
}: TableOfContentsItemProps) {
|
|
130
|
-
const { depth } = React.useContext(TocContext);
|
|
134
|
+
const { depth, hideSubItems } = React.useContext(TocContext);
|
|
131
135
|
const effectiveDepth = depth > 0 ? depth : indent ? 1 : 0;
|
|
132
136
|
|
|
137
|
+
if (hideSubItems && effectiveDepth > 0) return null;
|
|
138
|
+
|
|
133
139
|
const linkClasses = [styles.link, active && styles.active, className].filter(Boolean).join(" ");
|
|
134
140
|
|
|
135
141
|
const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {
|
|
136
142
|
onClick?.(e);
|
|
137
|
-
|
|
143
|
+
// An explicit href is a route, not an in-page anchor: let the browser
|
|
144
|
+
// (or a wrapping router link) own navigation.
|
|
145
|
+
if (e.defaultPrevented || href) return;
|
|
138
146
|
|
|
139
147
|
e.preventDefault();
|
|
140
148
|
const el = document.getElementById(id);
|
|
141
149
|
if (el) {
|
|
142
|
-
|
|
150
|
+
const prefersReducedMotion =
|
|
151
|
+
typeof window.matchMedia === "function" &&
|
|
152
|
+
window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
153
|
+
el.scrollIntoView({ behavior: prefersReducedMotion ? "auto" : "smooth" });
|
|
143
154
|
window.history.replaceState(null, "", `#${id}`);
|
|
144
155
|
}
|
|
145
156
|
};
|
|
@@ -148,7 +159,7 @@ function TableOfContentsItem({
|
|
|
148
159
|
<li className={styles.item} data-depth={effectiveDepth} data-active={active || undefined}>
|
|
149
160
|
<a
|
|
150
161
|
{...htmlProps}
|
|
151
|
-
href={`#${id}`}
|
|
162
|
+
href={href ?? `#${id}`}
|
|
152
163
|
className={linkClasses}
|
|
153
164
|
onClick={handleClick}
|
|
154
165
|
aria-current={active ? "location" : undefined}
|
|
@@ -194,9 +205,11 @@ function TableOfContentsGroup({
|
|
|
194
205
|
disabled = false,
|
|
195
206
|
active = false,
|
|
196
207
|
}: TableOfContentsGroupProps) {
|
|
197
|
-
const { depth } = React.useContext(TocContext);
|
|
208
|
+
const { depth, hideSubItems } = React.useContext(TocContext);
|
|
198
209
|
const [open, setOpen] = useControlledOpen(controlledOpen, defaultOpen, onOpenChange);
|
|
199
210
|
|
|
211
|
+
if (hideSubItems) return null;
|
|
212
|
+
|
|
200
213
|
const isToggleable = collapsible && !disabled;
|
|
201
214
|
const isOpen = isToggleable ? open : true;
|
|
202
215
|
|
|
@@ -237,7 +250,11 @@ function TableOfContentsGroup({
|
|
|
237
250
|
<div className={headerClasses}>{headerContent}</div>
|
|
238
251
|
)}
|
|
239
252
|
</li>
|
|
240
|
-
{isOpen &&
|
|
253
|
+
{isOpen && (
|
|
254
|
+
<TocContext.Provider value={{ depth: depth + 1, hideSubItems }}>
|
|
255
|
+
{children}
|
|
256
|
+
</TocContext.Provider>
|
|
257
|
+
)}
|
|
241
258
|
</>
|
|
242
259
|
);
|
|
243
260
|
}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Tabs",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Swaps between sibling panels without leaving the page.",
|
|
5
5
|
"category": "navigation",
|
|
6
|
-
"tags": [
|
|
7
|
-
"tabs",
|
|
8
|
-
"navigation",
|
|
9
|
-
"panels",
|
|
10
|
-
"content-switcher"
|
|
11
|
-
],
|
|
6
|
+
"tags": ["tabs", "navigation", "panels", "content-switcher"],
|
|
12
7
|
"status": "stable",
|
|
13
8
|
"sourcePath": "src/components/Tabs/index.tsx",
|
|
14
9
|
"exportName": "Tabs",
|
|
@@ -46,41 +41,35 @@
|
|
|
46
41
|
"description": "Tab list orientation",
|
|
47
42
|
"default": "horizontal",
|
|
48
43
|
"required": false,
|
|
49
|
-
"values": [
|
|
50
|
-
"horizontal",
|
|
51
|
-
"vertical"
|
|
52
|
-
]
|
|
44
|
+
"values": ["horizontal", "vertical"]
|
|
53
45
|
},
|
|
54
46
|
"variant": {
|
|
55
47
|
"type": "enum",
|
|
56
48
|
"description": "Default visual style for Tabs.List (can be overridden on Tabs.List)",
|
|
57
49
|
"default": "underline",
|
|
58
50
|
"required": false,
|
|
59
|
-
"values": [
|
|
60
|
-
"underline",
|
|
61
|
-
"pills"
|
|
62
|
-
]
|
|
51
|
+
"values": ["underline", "pills"]
|
|
63
52
|
}
|
|
64
53
|
},
|
|
65
54
|
"usage": {
|
|
66
55
|
"when": [
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"Settings
|
|
70
|
-
"
|
|
56
|
+
"Sibling sections of equal weight",
|
|
57
|
+
"Cutting scroll on a long page",
|
|
58
|
+
"Settings split by category",
|
|
59
|
+
"One data set seen several ways"
|
|
71
60
|
],
|
|
72
61
|
"whenNot": [
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
62
|
+
"Moving between pages (use Sidebar or header navigation)",
|
|
63
|
+
"Steps in an order (use Stepper)",
|
|
64
|
+
"Content the user compares side by side",
|
|
65
|
+
"More options than fit in a row (use Select)"
|
|
77
66
|
],
|
|
78
67
|
"guidelines": [
|
|
79
|
-
"
|
|
80
|
-
"Order
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
68
|
+
"One or two words per label",
|
|
69
|
+
"Order by how often each panel is used",
|
|
70
|
+
"Past five or six tabs, split the page instead",
|
|
71
|
+
"Keep panels comparable in depth",
|
|
72
|
+
"Pills inside cards, underline at page level"
|
|
84
73
|
],
|
|
85
74
|
"accessibility": [
|
|
86
75
|
"Keyboard navigation with arrow keys",
|
|
@@ -91,22 +80,22 @@
|
|
|
91
80
|
"examples": [
|
|
92
81
|
{
|
|
93
82
|
"name": "Underline",
|
|
94
|
-
"description": "
|
|
83
|
+
"description": "A rule tracks the active panel.",
|
|
95
84
|
"code": "<Tabs defaultValue=\"overview\" variant=\"underline\">\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>"
|
|
96
85
|
},
|
|
97
86
|
{
|
|
98
87
|
"name": "Pills",
|
|
99
|
-
"description": "
|
|
88
|
+
"description": "A filled track suits panels inside a card.",
|
|
100
89
|
"code": "<Tabs defaultValue=\"all\" variant=\"pills\">\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>"
|
|
101
90
|
},
|
|
102
91
|
{
|
|
103
92
|
"name": "With Disabled",
|
|
104
|
-
"description": "
|
|
93
|
+
"description": "An unavailable panel stays visible but unreachable.",
|
|
105
94
|
"code": "<Tabs defaultValue=\"general\" variant=\"underline\">\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>"
|
|
106
95
|
},
|
|
107
96
|
{
|
|
108
97
|
"name": "List Variant Override",
|
|
109
|
-
"description": "
|
|
98
|
+
"description": "One list can opt out of the root's style.",
|
|
110
99
|
"code": "<Tabs defaultValue=\"overview\" variant=\"pills\">\n <Tabs.List variant=\"underline\">\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 pills, but this list overrides to underline.</p>\n </Tabs.Panel>\n <Tabs.Panel value=\"activity\">\n <p>Per-list variant override example.</p>\n </Tabs.Panel>\n</Tabs>"
|
|
111
100
|
}
|
|
112
101
|
],
|
|
@@ -130,22 +119,12 @@
|
|
|
130
119
|
"variant: underline|pills - default style for Tabs.List",
|
|
131
120
|
"Tabs.List variant?: underline|pills - optional per-list override"
|
|
132
121
|
],
|
|
133
|
-
"a11yRules": [
|
|
134
|
-
"A11Y_TABS_KEYBOARD",
|
|
135
|
-
"A11Y_TABS_LABELS"
|
|
136
|
-
]
|
|
122
|
+
"a11yRules": ["A11Y_TABS_KEYBOARD", "A11Y_TABS_LABELS"]
|
|
137
123
|
},
|
|
138
124
|
"ai": {
|
|
139
125
|
"compositionPattern": "compound",
|
|
140
|
-
"subComponents": [
|
|
141
|
-
|
|
142
|
-
"Tab",
|
|
143
|
-
"Panel"
|
|
144
|
-
],
|
|
145
|
-
"requiredChildren": [
|
|
146
|
-
"List",
|
|
147
|
-
"Panel"
|
|
148
|
-
],
|
|
126
|
+
"subComponents": ["List", "Tab", "Panel"],
|
|
127
|
+
"requiredChildren": ["List", "Panel"],
|
|
149
128
|
"commonPatterns": [
|
|
150
129
|
"<Tabs defaultValue=\"tab1\"><Tabs.List><Tabs.Tab value=\"tab1\">{label1}</Tabs.Tab><Tabs.Tab value=\"tab2\">{label2}</Tabs.Tab></Tabs.List><Tabs.Panel value=\"tab1\">{content1}</Tabs.Panel><Tabs.Panel value=\"tab2\">{content2}</Tabs.Panel></Tabs>"
|
|
151
130
|
]
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
border-radius: var(--fui-radius-lg, $fui-radius-lg);
|
|
45
45
|
padding: 0;
|
|
46
46
|
gap: 0;
|
|
47
|
-
box-shadow: inset 0 0 0 1px
|
|
47
|
+
box-shadow: inset 0 0 0 var(--fui-stroke-hairline, 1px)
|
|
48
48
|
var(
|
|
49
49
|
--fui-tabs-pills-border,
|
|
50
50
|
color-mix(in srgb, var(--fui-border, #{$fui-border}) 72%, transparent)
|
|
@@ -95,6 +95,7 @@ function TabsRoot({
|
|
|
95
95
|
onValueChange={onValueChange}
|
|
96
96
|
orientation={orientation}
|
|
97
97
|
className={classes}
|
|
98
|
+
data-slot="tabs"
|
|
98
99
|
>
|
|
99
100
|
{children}
|
|
100
101
|
</BaseTabs.Root>
|
|
@@ -114,7 +115,12 @@ function TabsList({ children, variant, size: sizeProp, className, ...htmlProps }
|
|
|
114
115
|
return (
|
|
115
116
|
<TabsVariantContext.Provider value={resolvedVariant}>
|
|
116
117
|
<TabsSizeContext.Provider value={size}>
|
|
117
|
-
<BaseTabs.List
|
|
118
|
+
<BaseTabs.List
|
|
119
|
+
{...htmlProps}
|
|
120
|
+
className={classes}
|
|
121
|
+
data-slot="tabs-list"
|
|
122
|
+
data-variant={resolvedVariant}
|
|
123
|
+
>
|
|
118
124
|
{children}
|
|
119
125
|
{resolvedVariant === "underline" && <BaseTabs.Indicator className={styles.indicator} />}
|
|
120
126
|
</BaseTabs.List>
|
|
@@ -131,7 +137,7 @@ function Tab({ children, value, disabled, className }: TabProps) {
|
|
|
131
137
|
const classes = [styles.tab, sizeClass, variantClass, className].filter(Boolean).join(" ");
|
|
132
138
|
|
|
133
139
|
return (
|
|
134
|
-
<BaseTabs.Tab value={value} disabled={disabled} className={classes}>
|
|
140
|
+
<BaseTabs.Tab value={value} disabled={disabled} className={classes} data-slot="tabs-tab">
|
|
135
141
|
{children}
|
|
136
142
|
</BaseTabs.Tab>
|
|
137
143
|
);
|
|
@@ -148,7 +154,13 @@ function TabsPanel({
|
|
|
148
154
|
const classes = [styles.panel, flush && styles.panelFlush, className].filter(Boolean).join(" ");
|
|
149
155
|
|
|
150
156
|
return (
|
|
151
|
-
<BaseTabs.Panel
|
|
157
|
+
<BaseTabs.Panel
|
|
158
|
+
{...htmlProps}
|
|
159
|
+
value={value}
|
|
160
|
+
keepMounted={keepMounted}
|
|
161
|
+
className={classes}
|
|
162
|
+
data-slot="tabs-panel"
|
|
163
|
+
>
|
|
152
164
|
{children}
|
|
153
165
|
</BaseTabs.Panel>
|
|
154
166
|
);
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Text",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Applies the type scale to any text element, without hand-rolling font rules.",
|
|
5
5
|
"category": "display",
|
|
6
|
-
"tags": [
|
|
7
|
-
"text",
|
|
8
|
-
"typography",
|
|
9
|
-
"heading",
|
|
10
|
-
"paragraph",
|
|
11
|
-
"font"
|
|
12
|
-
],
|
|
6
|
+
"tags": ["text", "typography", "heading", "paragraph", "font"],
|
|
13
7
|
"status": "stable",
|
|
14
8
|
"sourcePath": "src/components/Text/index.tsx",
|
|
15
9
|
"exportName": "Text",
|
|
@@ -19,7 +13,7 @@
|
|
|
19
13
|
"variant: section-label",
|
|
20
14
|
"size: 2xs|xs|sm|base|md|lg|xl|2xl|3xl|4xl",
|
|
21
15
|
"weight: normal|medium|semibold|bold (default: \"normal\")",
|
|
22
|
-
"color: primary|secondary|tertiary|muted|success|warning|danger (default: \"primary\")",
|
|
16
|
+
"color: primary|secondary|tertiary|muted|accent|success|warning|danger (default: \"primary\")",
|
|
23
17
|
"font: sans|mono (default: sans)",
|
|
24
18
|
"truncate: boolean",
|
|
25
19
|
"lineClamp: number",
|
|
@@ -67,63 +61,34 @@
|
|
|
67
61
|
"type": "enum",
|
|
68
62
|
"description": "Preset text variant",
|
|
69
63
|
"required": false,
|
|
70
|
-
"values": [
|
|
71
|
-
"section-label"
|
|
72
|
-
]
|
|
64
|
+
"values": ["section-label", "eyebrow"]
|
|
73
65
|
},
|
|
74
66
|
"size": {
|
|
75
67
|
"type": "enum",
|
|
76
68
|
"description": "Font size. 2xs (10), xs (12), sm/base (14), md (15 prose body), lg (20), xl (24), 2xl (30), 3xl (36 page title), 4xl (48 hero).",
|
|
77
69
|
"required": false,
|
|
78
|
-
"values": [
|
|
79
|
-
"2xs",
|
|
80
|
-
"xs",
|
|
81
|
-
"sm",
|
|
82
|
-
"base",
|
|
83
|
-
"md",
|
|
84
|
-
"lg",
|
|
85
|
-
"xl",
|
|
86
|
-
"2xl",
|
|
87
|
-
"3xl",
|
|
88
|
-
"4xl"
|
|
89
|
-
]
|
|
70
|
+
"values": ["2xs", "xs", "sm", "base", "md", "lg", "xl", "2xl", "3xl", "4xl"]
|
|
90
71
|
},
|
|
91
72
|
"weight": {
|
|
92
73
|
"type": "enum",
|
|
93
74
|
"description": "Font weight",
|
|
94
75
|
"default": "\"normal\"",
|
|
95
76
|
"required": false,
|
|
96
|
-
"values": [
|
|
97
|
-
"normal",
|
|
98
|
-
"medium",
|
|
99
|
-
"semibold",
|
|
100
|
-
"bold"
|
|
101
|
-
]
|
|
77
|
+
"values": ["normal", "medium", "semibold", "bold"]
|
|
102
78
|
},
|
|
103
79
|
"color": {
|
|
104
80
|
"type": "enum",
|
|
105
|
-
"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
|
|
81
|
+
"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)",
|
|
106
82
|
"default": "\"primary\"",
|
|
107
83
|
"required": false,
|
|
108
|
-
"values": [
|
|
109
|
-
"primary",
|
|
110
|
-
"secondary",
|
|
111
|
-
"tertiary",
|
|
112
|
-
"muted",
|
|
113
|
-
"success",
|
|
114
|
-
"warning",
|
|
115
|
-
"danger"
|
|
116
|
-
]
|
|
84
|
+
"values": ["primary", "secondary", "tertiary", "muted", "accent", "success", "warning", "danger"]
|
|
117
85
|
},
|
|
118
86
|
"font": {
|
|
119
87
|
"type": "enum",
|
|
120
88
|
"description": "Font family",
|
|
121
89
|
"default": "sans",
|
|
122
90
|
"required": false,
|
|
123
|
-
"values": [
|
|
124
|
-
"sans",
|
|
125
|
-
"mono"
|
|
126
|
-
]
|
|
91
|
+
"values": ["sans", "mono"]
|
|
127
92
|
},
|
|
128
93
|
"truncate": {
|
|
129
94
|
"type": "boolean",
|
|
@@ -143,57 +108,55 @@
|
|
|
143
108
|
},
|
|
144
109
|
"usage": {
|
|
145
110
|
"when": [
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"Text that
|
|
149
|
-
"Consistent typography across the application"
|
|
111
|
+
"Any text that should sit on the type scale",
|
|
112
|
+
"Headings and paragraphs that need real tags",
|
|
113
|
+
"Text that must truncate or clamp"
|
|
150
114
|
],
|
|
151
115
|
"whenNot": [
|
|
152
|
-
"
|
|
153
|
-
"Code
|
|
154
|
-
"
|
|
116
|
+
"Rich or authored content (use Markdown)",
|
|
117
|
+
"Code (use CodeBlock)",
|
|
118
|
+
"Anything clickable (use Link or Button)"
|
|
155
119
|
],
|
|
156
120
|
"guidelines": [
|
|
157
|
-
"
|
|
158
|
-
"
|
|
159
|
-
"
|
|
160
|
-
"
|
|
121
|
+
"Pick the tag with as, the look with size — they are separate decisions",
|
|
122
|
+
"Never skip heading levels to get a smaller heading",
|
|
123
|
+
"Color is for hierarchy and state, not decoration",
|
|
124
|
+
"Truncated text needs the full string in title or a tooltip"
|
|
161
125
|
],
|
|
162
126
|
"accessibility": [
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"Truncated text should have full content in title/tooltip"
|
|
127
|
+
"as keeps the document outline intact for screen readers",
|
|
128
|
+
"Clamped text still exposes its full content to assistive tech"
|
|
166
129
|
]
|
|
167
130
|
},
|
|
168
131
|
"examples": [
|
|
169
132
|
{
|
|
170
133
|
"name": "Sizes",
|
|
171
|
-
"description": "
|
|
134
|
+
"description": "Ten steps from caption to hero, all on the same scale.",
|
|
172
135
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text size=\"2xs\">Extra extra small (2xs — 10px)</Text>\n <Text size=\"xs\">Extra small (xs — 12px)</Text>\n <Text size=\"sm\">Small (sm — 14px)</Text>\n <Text size=\"base\">Base size (14px)</Text>\n <Text size=\"md\">Medium prose body (md — 15px)</Text>\n <Text size=\"lg\">Large (lg — 20px)</Text>\n <Text size=\"xl\">Extra large (xl — 24px)</Text>\n <Text size=\"2xl\">Extra extra large (2xl — 30px)</Text>\n <Text size=\"3xl\">Page title (3xl — 36px)</Text>\n <Text size=\"4xl\">Hero display (4xl — 48px)</Text>\n</div>"
|
|
173
136
|
},
|
|
174
137
|
{
|
|
175
138
|
"name": "Weights",
|
|
176
|
-
"description": "
|
|
139
|
+
"description": "Four weights — reach past semibold only for real emphasis.",
|
|
177
140
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text weight=\"normal\">Normal weight</Text>\n <Text weight=\"medium\">Medium weight</Text>\n <Text weight=\"semibold\">Semibold weight</Text>\n <Text weight=\"bold\">Bold weight</Text>\n</div>"
|
|
178
141
|
},
|
|
179
142
|
{
|
|
180
143
|
"name": "Colors",
|
|
181
|
-
"description": "
|
|
144
|
+
"description": "Dimmer tones push text back; success and danger carry state.",
|
|
182
145
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text color=\"primary\">Primary color (default)</Text>\n <Text color=\"secondary\">Secondary color</Text>\n <Text color=\"tertiary\">Tertiary color</Text>\n <Text color=\"muted\">Muted color (alias for tertiary)</Text>\n</div>"
|
|
183
146
|
},
|
|
184
147
|
{
|
|
185
148
|
"name": "Semantic Elements",
|
|
186
|
-
"description": "
|
|
149
|
+
"description": "The as prop picks the tag, so the outline stays correct.",
|
|
187
150
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text as=\"h1\" size=\"3xl\" weight=\"semibold\">Heading 1</Text>\n <Text as=\"h2\" size=\"xl\" weight=\"semibold\">Heading 2</Text>\n <Text as=\"h3\" size=\"lg\" weight=\"semibold\">Heading 3</Text>\n <Text as=\"p\" size=\"md\" color=\"secondary\">\n This is a paragraph of text that demonstrates the Text component\n with semantic paragraph element.\n </Text>\n</div>"
|
|
188
151
|
},
|
|
189
152
|
{
|
|
190
153
|
"name": "Monospace",
|
|
191
|
-
"description": "
|
|
154
|
+
"description": "Fixed width for IDs, keys, and anything meant to be compared.",
|
|
192
155
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text font=\"mono\" size=\"sm\">const greeting = \"Hello, World!\";</Text>\n <Text font=\"mono\" size=\"sm\" color=\"secondary\">npm install @usefragments/ui</Text>\n</div>"
|
|
193
156
|
},
|
|
194
157
|
{
|
|
195
158
|
"name": "Truncation",
|
|
196
|
-
"description": "
|
|
159
|
+
"description": "One line with an ellipsis, or clamp to a set number of lines.",
|
|
197
160
|
"code": "<div style={{ width: '200px', display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text truncate>\n This is a very long text that will be truncated with an ellipsis when it overflows.\n </Text>\n <Text truncate lineClamp={2}>\n This text will be clamped to two lines. Any content beyond two lines\n will be hidden and replaced with an ellipsis at the end.\n </Text>\n</div>"
|
|
198
161
|
}
|
|
199
162
|
],
|
|
@@ -219,21 +182,16 @@
|
|
|
219
182
|
"as: string - HTML element",
|
|
220
183
|
"size: 2xs|xs|sm|base|md|lg|xl|2xl|3xl|4xl - font size (px: 10/12/14/14/15/20/24/30/36/48)",
|
|
221
184
|
"weight: normal|medium|semibold|bold - font weight",
|
|
222
|
-
"color: primary|secondary|tertiary|muted|success|warning|danger - text color (muted = tertiary; semantic colours for inline state)",
|
|
185
|
+
"color: primary|secondary|tertiary|muted|accent|success|warning|danger - text color (muted = tertiary; accent = brand spend; semantic colours for inline state)",
|
|
223
186
|
"font: sans|mono - font family",
|
|
224
187
|
"truncate: boolean - enable truncation",
|
|
225
188
|
"lineClamp: number - max lines"
|
|
226
189
|
],
|
|
227
|
-
"a11yRules": [
|
|
228
|
-
"A11Y_HEADING_HIERARCHY",
|
|
229
|
-
"A11Y_SEMANTIC_ELEMENTS"
|
|
230
|
-
]
|
|
190
|
+
"a11yRules": ["A11Y_HEADING_HIERARCHY", "A11Y_SEMANTIC_ELEMENTS"]
|
|
231
191
|
},
|
|
232
192
|
"ai": {
|
|
233
193
|
"compositionPattern": "compound",
|
|
234
|
-
"subComponents": [
|
|
235
|
-
"Root"
|
|
236
|
-
]
|
|
194
|
+
"subComponents": ["Root"]
|
|
237
195
|
},
|
|
238
196
|
"provenance": {
|
|
239
197
|
"source": "migrated",
|
|
@@ -13,6 +13,17 @@
|
|
|
13
13
|
@include typography.role("ui-compact");
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
// Eyebrow: the small-caps label that names a surface above its statement
|
|
17
|
+
// (page label, card section head). Always tertiary ink — it is never the
|
|
18
|
+
// thing the reader is meant to look at.
|
|
19
|
+
.variant-eyebrow {
|
|
20
|
+
@include typography.role("caption");
|
|
21
|
+
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
|
+
color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
25
|
+
}
|
|
26
|
+
|
|
16
27
|
@each $role
|
|
17
28
|
in (
|
|
18
29
|
"caption",
|
|
@@ -23,6 +34,7 @@
|
|
|
23
34
|
"title-sm",
|
|
24
35
|
"title-md",
|
|
25
36
|
"title-lg",
|
|
37
|
+
"display",
|
|
26
38
|
"code"
|
|
27
39
|
)
|
|
28
40
|
{
|
|
@@ -107,22 +119,27 @@
|
|
|
107
119
|
color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
108
120
|
}
|
|
109
121
|
|
|
122
|
+
.color-accent {
|
|
123
|
+
color: var(--fui-color-accent, $fui-color-accent);
|
|
124
|
+
}
|
|
125
|
+
|
|
110
126
|
// Semantic colours, for a run of text that carries a state on its own — a
|
|
111
127
|
// count going over budget, an inline "expired", a figure in the red. Where
|
|
112
128
|
// there is a component for the job (Badge, Alert, Callout) use that instead:
|
|
113
129
|
// this is for the cases where the state is one word inside a line, and
|
|
114
130
|
// wrapping it in a box would be more chrome than the fact is worth. Colour is
|
|
115
|
-
// never the only carrier — the words still have to say it.
|
|
131
|
+
// never the only carrier — the words still have to say it. Text uses the
|
|
132
|
+
// same *-text stop as Badge so inline ink and chips stay one family.
|
|
116
133
|
.color-success {
|
|
117
|
-
color: var(--fui-color-success, $fui-color-success);
|
|
134
|
+
color: var(--fui-color-success-text, $fui-color-success-text);
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
.color-warning {
|
|
121
|
-
color: var(--fui-color-warning, $fui-color-warning);
|
|
138
|
+
color: var(--fui-color-warning-text, $fui-color-warning-text);
|
|
122
139
|
}
|
|
123
140
|
|
|
124
141
|
.color-danger {
|
|
125
|
-
color: var(--fui-color-danger, $fui-color-danger);
|
|
142
|
+
color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
126
143
|
}
|
|
127
144
|
|
|
128
145
|
// Font family
|