@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
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { mergeAriaIds } from "../../utils/aria";
|
|
5
5
|
import styles from "./Chart.module.scss";
|
|
6
|
+
import { isDevelopmentBuild } from "../../utils/env";
|
|
6
7
|
|
|
7
8
|
// ============================================
|
|
8
9
|
// Types (self-owned — no external dependency for types)
|
|
@@ -74,7 +75,7 @@ function loadChartDeps(): Promise<void> {
|
|
|
74
75
|
_RechartsLegend = rc.Legend as unknown as React.ComponentType<Record<string, unknown>>;
|
|
75
76
|
} catch {
|
|
76
77
|
_chartFailed = true;
|
|
77
|
-
if (
|
|
78
|
+
if (isDevelopmentBuild()) {
|
|
78
79
|
console.warn(
|
|
79
80
|
"[@usefragments/ui] Chart: recharts is not installed. " +
|
|
80
81
|
"Install it with: npm install recharts"
|
|
@@ -132,6 +133,34 @@ export function ChartContainer({
|
|
|
132
133
|
...htmlProps
|
|
133
134
|
}: ChartContainerProps) {
|
|
134
135
|
const chartId = React.useId();
|
|
136
|
+
const frameRef = React.useRef<HTMLDivElement | null>(null);
|
|
137
|
+
// Recharts only lays a chart out once it knows a pixel box. Percentage
|
|
138
|
+
// sizing leaves the first paint blank until something else happens to
|
|
139
|
+
// resize the window, so the container measures its own frame and hands the
|
|
140
|
+
// chart real numbers — re-measured whenever the frame changes.
|
|
141
|
+
const [frame, setFrame] = React.useState<{ width: number; height: number } | null>(null);
|
|
142
|
+
|
|
143
|
+
React.useEffect(() => {
|
|
144
|
+
const element = frameRef.current;
|
|
145
|
+
if (!element || typeof ResizeObserver === "undefined") return;
|
|
146
|
+
|
|
147
|
+
const measure = () => {
|
|
148
|
+
const rect = element.getBoundingClientRect();
|
|
149
|
+
const width = Math.round(rect.width);
|
|
150
|
+
const height = Math.round(rect.height);
|
|
151
|
+
setFrame((current) =>
|
|
152
|
+
current && current.width === width && current.height === height
|
|
153
|
+
? current
|
|
154
|
+
: { width, height }
|
|
155
|
+
);
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
measure();
|
|
159
|
+
const observer = new ResizeObserver(measure);
|
|
160
|
+
observer.observe(element);
|
|
161
|
+
return () => observer.disconnect();
|
|
162
|
+
}, []);
|
|
163
|
+
|
|
135
164
|
const summaryId = summary ? `chart-summary-${chartId}` : undefined;
|
|
136
165
|
const dataTableId = dataTable ? `chart-data-${chartId}` : undefined;
|
|
137
166
|
|
|
@@ -149,12 +178,12 @@ export function ChartContainer({
|
|
|
149
178
|
// Inject sizing props into the chart child (recharts API).
|
|
150
179
|
// Only pass `responsive` for custom component types to avoid leaking the
|
|
151
180
|
// prop to intrinsic DOM nodes in test/demo usage.
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
height:
|
|
155
|
-
|
|
181
|
+
const measured = frame !== null && frame.width > 0 && frame.height > 0;
|
|
182
|
+
const chartChildProps: Record<string, unknown> = measured
|
|
183
|
+
? { width: frame.width, height: frame.height }
|
|
184
|
+
: { width: "100%", height: "100%" };
|
|
156
185
|
|
|
157
|
-
if (typeof children.type !== "string") {
|
|
186
|
+
if (!measured && typeof children.type !== "string") {
|
|
158
187
|
chartChildProps.responsive = true;
|
|
159
188
|
}
|
|
160
189
|
|
|
@@ -167,6 +196,7 @@ export function ChartContainer({
|
|
|
167
196
|
<ChartConfigContext.Provider value={config}>
|
|
168
197
|
<div
|
|
169
198
|
{...htmlProps}
|
|
199
|
+
ref={frameRef}
|
|
170
200
|
className={rootClasses}
|
|
171
201
|
style={{ ...cssVars, ...style }}
|
|
172
202
|
role="img"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Checkbox",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
4
|
+
"description": "Selects options that take effect when a form is submitted.",
|
|
5
|
+
"category": "inputs",
|
|
6
6
|
"tags": ["checkbox", "form", "boolean", "selection", "input"],
|
|
7
7
|
"status": "stable",
|
|
8
8
|
"sourcePath": "src/components/Checkbox/index.tsx",
|
|
@@ -139,63 +139,63 @@
|
|
|
139
139
|
},
|
|
140
140
|
"usage": {
|
|
141
141
|
"when": [
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"Filter
|
|
142
|
+
"Choices that apply only once the form is submitted",
|
|
143
|
+
"Picking several items from a list",
|
|
144
|
+
"Accepting terms",
|
|
145
|
+
"Filter and preference lists"
|
|
146
146
|
],
|
|
147
147
|
"whenNot": [
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
"
|
|
148
|
+
"Settings that apply instantly (use Switch)",
|
|
149
|
+
"One choice from a few (use RadioGroup)",
|
|
150
|
+
"Many options (use Select)"
|
|
151
151
|
],
|
|
152
152
|
"guidelines": [
|
|
153
|
-
"Always
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"Use indeterminate
|
|
153
|
+
"Always show a label",
|
|
154
|
+
"Add helperText when the consequence is not obvious",
|
|
155
|
+
"Keep related boxes together",
|
|
156
|
+
"Use indeterminate for a parent whose children are partly checked"
|
|
157
157
|
],
|
|
158
158
|
"accessibility": [
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"Indeterminate
|
|
159
|
+
"Label is tied to the box",
|
|
160
|
+
"Space toggles it",
|
|
161
|
+
"Focus ring stays visible",
|
|
162
|
+
"Indeterminate is announced as mixed"
|
|
163
163
|
]
|
|
164
164
|
},
|
|
165
165
|
"examples": [
|
|
166
166
|
{
|
|
167
167
|
"name": "Default",
|
|
168
|
-
"description": "
|
|
168
|
+
"description": "One box, one label, off to start.",
|
|
169
169
|
"code": "<StatefulCheckbox label=\"Accept terms and conditions\" />"
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
"name": "With Helper Text",
|
|
173
|
-
"description": "
|
|
173
|
+
"description": "Second line spells out what opting in does.",
|
|
174
174
|
"code": "<StatefulCheckbox\n label=\"Email notifications\"\n helperText=\"Receive email updates about your account activity\"\n/>"
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
"name": "Checked",
|
|
178
|
-
"description": "
|
|
178
|
+
"description": "Starts on.",
|
|
179
179
|
"code": "<StatefulCheckbox defaultChecked label=\"Subscribe to newsletter\" />"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"name": "Indeterminate",
|
|
183
|
-
"description": "
|
|
183
|
+
"description": "A dash on the parent means only some children are on.",
|
|
184
184
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Checkbox indeterminate label=\"Select all\" />\n <div style={{ marginLeft: '24px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <StatefulCheckbox defaultChecked label=\"Option 1\" />\n <StatefulCheckbox label=\"Option 2\" />\n <StatefulCheckbox defaultChecked label=\"Option 3\" />\n </div>\n</div>"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"name": "Sizes",
|
|
188
|
-
"description": "
|
|
188
|
+
"description": "Three box sizes: sm, md, lg.",
|
|
189
189
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <StatefulCheckbox size=\"sm\" label=\"Small checkbox\" />\n <StatefulCheckbox size=\"md\" label=\"Medium checkbox\" />\n <StatefulCheckbox size=\"lg\" label=\"Large checkbox\" />\n</div>"
|
|
190
190
|
},
|
|
191
191
|
{
|
|
192
192
|
"name": "Disabled",
|
|
193
|
-
"description": "
|
|
193
|
+
"description": "Locked in both positions, on and off.",
|
|
194
194
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Checkbox disabled label=\"Disabled unchecked\" />\n <Checkbox disabled checked label=\"Disabled checked\" />\n</div>"
|
|
195
195
|
},
|
|
196
196
|
{
|
|
197
197
|
"name": "Custom Styling Targets",
|
|
198
|
-
"description": "
|
|
198
|
+
"description": "controlClassName styles the box, contentClassName the text.",
|
|
199
199
|
"code": "<Checkbox\n label=\"Styled checkbox\"\n helperText=\"Control and content wrappers can be targeted independently\"\n controlClassName=\"demo-checkbox-control\"\n contentClassName=\"demo-checkbox-content\"\n/>"
|
|
200
200
|
}
|
|
201
201
|
],
|
|
@@ -49,21 +49,15 @@
|
|
|
49
49
|
|
|
50
50
|
&[data-checked],
|
|
51
51
|
&[data-indeterminate] {
|
|
52
|
-
background-color: var(--fui-
|
|
53
|
-
border-color: var(
|
|
54
|
-
--fui-button-primary-border,
|
|
55
|
-
var(--fui-button-primary-base, #{$fui-color-accent})
|
|
56
|
-
);
|
|
52
|
+
background-color: var(--fui-control-checked-bg, $fui-color-accent);
|
|
53
|
+
border-color: var(--fui-control-checked-border, $fui-color-accent);
|
|
57
54
|
box-shadow: inset 0 1px 0 color-mix(in srgb, white 24%, transparent);
|
|
58
55
|
}
|
|
59
56
|
|
|
60
57
|
&[data-checked]:hover:not([data-disabled]),
|
|
61
58
|
&[data-indeterminate]:hover:not([data-disabled]) {
|
|
62
|
-
background-color: var(--fui-
|
|
63
|
-
border-color: var(
|
|
64
|
-
--fui-button-primary-border-hover,
|
|
65
|
-
var(--fui-button-primary-hover, #{$fui-color-accent})
|
|
66
|
-
);
|
|
59
|
+
background-color: var(--fui-control-checked-bg-hover, $fui-color-accent-hover);
|
|
60
|
+
border-color: var(--fui-control-checked-border-hover, $fui-color-accent-hover);
|
|
67
61
|
}
|
|
68
62
|
|
|
69
63
|
&[data-invalid] {
|
|
@@ -77,7 +71,6 @@
|
|
|
77
71
|
box-shadow: inset 0 0 0 1px
|
|
78
72
|
color-mix(in srgb, var(--fui-color-danger-text, #{$fui-color-danger-text}) 35%, transparent);
|
|
79
73
|
}
|
|
80
|
-
|
|
81
74
|
}
|
|
82
75
|
|
|
83
76
|
// Size variants
|
|
@@ -99,24 +92,40 @@
|
|
|
99
92
|
display: flex;
|
|
100
93
|
align-items: center;
|
|
101
94
|
justify-content: center;
|
|
102
|
-
color: var(--fui-
|
|
95
|
+
color: var(--fui-control-checked-color, $fui-color-on-accent);
|
|
103
96
|
|
|
104
97
|
svg {
|
|
105
98
|
width: var(--fui-icon-xs, $fui-icon-xs);
|
|
106
99
|
height: var(--fui-icon-xs, $fui-icon-xs);
|
|
107
100
|
}
|
|
108
101
|
|
|
109
|
-
// Animation
|
|
102
|
+
// Animation: the mark draws itself in (stroke-dashoffset over the
|
|
103
|
+
// pathLength-normalized glyphs) instead of popping. Opacity keeps the
|
|
104
|
+
// un-draw exit from lingering.
|
|
110
105
|
opacity: 0;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
106
|
+
transition: opacity var(--fui-transition-fast, $fui-transition-fast);
|
|
107
|
+
|
|
108
|
+
svg :is(polyline, line) {
|
|
109
|
+
stroke-dasharray: 24;
|
|
110
|
+
stroke-dashoffset: 24;
|
|
111
|
+
transition: stroke-dashoffset var(--fui-transition-normal, $fui-transition-normal);
|
|
112
|
+
}
|
|
115
113
|
|
|
116
114
|
[data-checked] > &,
|
|
117
115
|
[data-indeterminate] > & {
|
|
118
116
|
opacity: 1;
|
|
119
|
-
|
|
117
|
+
|
|
118
|
+
svg :is(polyline, line) {
|
|
119
|
+
stroke-dashoffset: 0;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@media (prefers-reduced-motion: reduce) {
|
|
124
|
+
transition: none;
|
|
125
|
+
|
|
126
|
+
svg :is(polyline, line) {
|
|
127
|
+
transition: none;
|
|
128
|
+
}
|
|
120
129
|
}
|
|
121
130
|
|
|
122
131
|
[data-invalid][data-checked] > &,
|
|
@@ -173,23 +182,23 @@
|
|
|
173
182
|
|
|
174
183
|
&:focus-within:not([data-disabled]) {
|
|
175
184
|
@include focus-ring;
|
|
176
|
-
border-color: var(--fui-
|
|
185
|
+
border-color: var(--fui-control-checked-border, $fui-color-accent);
|
|
177
186
|
}
|
|
178
187
|
|
|
179
188
|
&:has([data-checked]),
|
|
180
189
|
&:has([data-indeterminate]) {
|
|
181
190
|
background: color-mix(
|
|
182
191
|
in srgb,
|
|
183
|
-
var(--fui-
|
|
192
|
+
var(--fui-control-checked-bg, #{$fui-color-accent}) 13%,
|
|
184
193
|
transparent
|
|
185
194
|
);
|
|
186
195
|
border-color: color-mix(
|
|
187
196
|
in srgb,
|
|
188
|
-
var(--fui-
|
|
197
|
+
var(--fui-control-checked-border, #{$fui-color-accent}) 62%,
|
|
189
198
|
transparent
|
|
190
199
|
);
|
|
191
200
|
box-shadow: 0 0 0 1px
|
|
192
|
-
color-mix(in srgb, var(--fui-
|
|
201
|
+
color-mix(in srgb, var(--fui-control-checked-border, #{$fui-color-accent}) 28%, transparent);
|
|
193
202
|
}
|
|
194
203
|
|
|
195
204
|
&[data-size="sm"] {
|
|
@@ -217,7 +226,7 @@
|
|
|
217
226
|
|
|
218
227
|
&[data-checked],
|
|
219
228
|
&[data-indeterminate] {
|
|
220
|
-
border-color: var(--fui-
|
|
229
|
+
border-color: var(--fui-control-checked-border, $fui-color-accent);
|
|
221
230
|
}
|
|
222
231
|
|
|
223
232
|
&[data-invalid] {
|
|
@@ -93,7 +93,9 @@ function CheckIcon() {
|
|
|
93
93
|
strokeLinejoin="round"
|
|
94
94
|
aria-hidden="true"
|
|
95
95
|
>
|
|
96
|
-
|
|
96
|
+
{/* Point order = draw order: the mark draws short arm first, then the
|
|
97
|
+
long stroke. pathLength normalizes the dash budget for the CSS draw. */}
|
|
98
|
+
<polyline points="4 12 9 17 20 6" pathLength={24} />
|
|
97
99
|
</svg>
|
|
98
100
|
);
|
|
99
101
|
}
|
|
@@ -110,7 +112,7 @@ function MinusIcon() {
|
|
|
110
112
|
strokeLinejoin="round"
|
|
111
113
|
aria-hidden="true"
|
|
112
114
|
>
|
|
113
|
-
<line x1="5" y1="12" x2="19" y2="12" />
|
|
115
|
+
<line x1="5" y1="12" x2="19" y2="12" pathLength={24} />
|
|
114
116
|
</svg>
|
|
115
117
|
);
|
|
116
118
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Chip",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
4
|
+
"description": "Pill control for filtering, multi-select, and removable tags.",
|
|
5
|
+
"category": "inputs",
|
|
6
6
|
"tags": ["chip", "tag", "filter", "selection", "multi-select", "action"],
|
|
7
7
|
"status": "stable",
|
|
8
8
|
"sourcePath": "src/components/Chip/index.tsx",
|
|
@@ -79,77 +79,70 @@
|
|
|
79
79
|
},
|
|
80
80
|
"usage": {
|
|
81
81
|
"when": [
|
|
82
|
-
"Filtering
|
|
83
|
-
"Multi-select
|
|
84
|
-
"
|
|
85
|
-
"Displaying removable user-applied filters"
|
|
82
|
+
"Filtering a list by tag or category",
|
|
83
|
+
"Multi-select from a compact set",
|
|
84
|
+
"Showing filters the user can dismiss"
|
|
86
85
|
],
|
|
87
86
|
"whenNot": [
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
87
|
+
"Read-only status — use Badge",
|
|
88
|
+
"Switching views — use Tabs",
|
|
89
|
+
"On/off state — use Switch",
|
|
90
|
+
"A main call to action — use Button"
|
|
92
91
|
],
|
|
93
92
|
"guidelines": [
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"Keep
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"Provide an explicit value on Chip when using non-string/custom JSX children inside Chip.Group"
|
|
93
|
+
"One to three words per chip",
|
|
94
|
+
"Chip.Group when chips share selection state",
|
|
95
|
+
"Keep xs for filters and tags; size up only to match a taller control track",
|
|
96
|
+
"onRemove only when the chip is genuinely dismissible",
|
|
97
|
+
"Pass an explicit value when children are custom JSX"
|
|
100
98
|
],
|
|
101
99
|
"accessibility": [
|
|
102
|
-
"Chips are buttons
|
|
103
|
-
"
|
|
104
|
-
"Remove buttons
|
|
105
|
-
"Disabled chips are
|
|
100
|
+
"Chips are buttons; selection is reported via aria-pressed",
|
|
101
|
+
"Add role and aria-label to Chip.Group when the set needs a name",
|
|
102
|
+
"Remove buttons carry the chip text in their aria-label",
|
|
103
|
+
"Disabled chips are skipped by keyboard and pointer"
|
|
106
104
|
]
|
|
107
105
|
},
|
|
108
106
|
"examples": [
|
|
109
107
|
{
|
|
110
|
-
"name": "
|
|
111
|
-
"description": "
|
|
112
|
-
"code": "<Chip>
|
|
108
|
+
"name": "Variants",
|
|
109
|
+
"description": "Tinted, hairline, and accent-soft chrome.",
|
|
110
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Chip variant=\"filled\">Filled</Chip>\n <Chip variant=\"outlined\">Outlined</Chip>\n <Chip variant=\"soft\">Soft</Chip>\n</Stack>"
|
|
113
111
|
},
|
|
114
112
|
{
|
|
115
|
-
"name": "
|
|
116
|
-
"description": "
|
|
117
|
-
"code": "
|
|
113
|
+
"name": "Sizes",
|
|
114
|
+
"description": "xs for filter rows; larger sizes match taller field tracks.",
|
|
115
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Chip variant=\"outlined\" size=\"xs\">Extra small</Chip>\n <Chip variant=\"outlined\" size=\"sm\">Small</Chip>\n <Chip variant=\"outlined\" size=\"md\">Medium</Chip>\n <Chip variant=\"outlined\" size=\"lg\">Large</Chip>\n</Stack>"
|
|
118
116
|
},
|
|
119
117
|
{
|
|
120
118
|
"name": "Selected",
|
|
121
|
-
"description": "
|
|
122
|
-
"code": "<Stack direction=\"row\" gap=\"sm\" wrap>\n <Chip selected>Filled</Chip>\n <Chip variant=\"outlined\" selected>Outlined</Chip>\n <Chip variant=\"soft\" selected>Soft</Chip>\n</Stack>"
|
|
119
|
+
"description": "All three variants share one selection treatment.",
|
|
120
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Chip selected>Filled</Chip>\n <Chip variant=\"outlined\" selected>Outlined</Chip>\n <Chip variant=\"soft\" selected>Soft</Chip>\n</Stack>"
|
|
123
121
|
},
|
|
124
122
|
{
|
|
125
123
|
"name": "With Avatar",
|
|
126
|
-
"description": "
|
|
124
|
+
"description": "Leading face, for people-shaped selections.",
|
|
127
125
|
"code": "<Chip avatar={<img src=\"https://i.pravatar.cc/32?u=chip\" alt=\"\" />}>\n Jane Doe\n</Chip>"
|
|
128
126
|
},
|
|
129
127
|
{
|
|
130
128
|
"name": "With Remove",
|
|
131
|
-
"description": "
|
|
132
|
-
"code": "
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"name": "Selected Removable",
|
|
136
|
-
"description": "Selected removable chips retain the shared selection treatment across variants",
|
|
137
|
-
"code": "<Stack direction=\"row\" gap=\"sm\" wrap>\n <Chip selected onRemove={() => {}}>Filled</Chip>\n <Chip variant=\"outlined\" selected onRemove={() => {}}>Outlined</Chip>\n <Chip variant=\"soft\" selected onRemove={() => {}}>Soft</Chip>\n</Stack>"
|
|
129
|
+
"description": "Trailing dismiss button clears the tag.",
|
|
130
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Chip variant=\"outlined\" onRemove={() => {}}>React</Chip>\n <Chip variant=\"outlined\" selected onRemove={() => {}}>TypeScript</Chip>\n <Chip variant=\"soft\" onRemove={() => {}}>SCSS</Chip>\n</Stack>"
|
|
138
131
|
},
|
|
139
132
|
{
|
|
140
133
|
"name": "Chip Group",
|
|
141
|
-
"description": "
|
|
134
|
+
"description": "Selection state is held by the group, not each chip.",
|
|
142
135
|
"code": "<Chip.Group defaultValue={['react']}>\n <Chip value=\"react\">React</Chip>\n <Chip value=\"vue\">Vue</Chip>\n <Chip value=\"angular\">Angular</Chip>\n <Chip value=\"svelte\">Svelte</Chip>\n</Chip.Group>"
|
|
143
136
|
},
|
|
144
137
|
{
|
|
145
138
|
"name": "Chip Group with Custom Labels",
|
|
146
|
-
"description": "
|
|
139
|
+
"description": "Custom JSX children need an explicit value.",
|
|
147
140
|
"code": "<Chip.Group aria-label=\"Assignees\">\n <Chip value=\"jane\">\n <span>Jane Doe</span>\n </Chip>\n <Chip value=\"sam\">\n <span>Sam Lee</span>\n </Chip>\n</Chip.Group>"
|
|
148
141
|
},
|
|
149
142
|
{
|
|
150
143
|
"name": "Disabled",
|
|
151
|
-
"description": "
|
|
152
|
-
"code": "
|
|
144
|
+
"description": "Dimmed and unreachable, selected or not.",
|
|
145
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Chip variant=\"outlined\" disabled>Disabled</Chip>\n <Chip variant=\"outlined\" disabled selected>Disabled selected</Chip>\n</Stack>"
|
|
153
146
|
}
|
|
154
147
|
],
|
|
155
148
|
"relations": [
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
|
|
14
14
|
&:active:not(:disabled) {
|
|
15
15
|
background-color: var(--fui-field-selection-bg-hover, $fui-bg-hover);
|
|
16
|
-
box-shadow: inset 0 0 0
|
|
16
|
+
box-shadow: inset 0 0 0 var(--fui-stroke-hairline, 1px)
|
|
17
|
+
var(--fui-field-selection-border, $fui-border-strong);
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
|
|
@@ -24,7 +25,6 @@
|
|
|
24
25
|
|
|
25
26
|
border-radius: var(--fui-radius-full, $fui-radius-full);
|
|
26
27
|
white-space: nowrap;
|
|
27
|
-
user-select: none;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
.withRemove {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import styles from "./Chip.module.scss";
|
|
5
|
+
import { isProductionBuild } from "../../utils/env";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Chip for selections, filters, and tags. Use with Chip.Group for multi-select.
|
|
@@ -165,7 +166,7 @@ function ChipGroupInner(
|
|
|
165
166
|
if (child.props.value != null) return child.props.value;
|
|
166
167
|
if (typeof child.props.children === "string") return child.props.children;
|
|
167
168
|
if (child.key != null) return String(child.key);
|
|
168
|
-
if (
|
|
169
|
+
if (!isProductionBuild()) {
|
|
169
170
|
// Non-string labels need an explicit value to avoid unstable group selection keys.
|
|
170
171
|
console.warn(
|
|
171
172
|
"Chip.Group: Chips with non-string children should provide a `value` prop."
|