@usefragments/ui 1.6.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -66
- package/dist/assets/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/nav-glyph.cjs +139 -0
- package/dist/assets/nav-glyph.d.ts +28 -0
- package/dist/assets/nav-glyph.d.ts.map +1 -0
- package/dist/assets/nav-glyph.js +139 -0
- package/dist/assets/nav-glyph.module.scss.cjs +71 -0
- package/dist/assets/nav-glyph.module.scss.js +71 -0
- package/dist/assets/ui.css +6885 -6308
- package/dist/blocks/components/StatsCard.d.ts +1 -1
- package/dist/blocks/components/StatsCard.d.ts.map +1 -1
- package/dist/chart.cjs +24 -6
- package/dist/chart.js +24 -6
- package/dist/codeblock.cjs +76 -43
- package/dist/codeblock.js +71 -38
- package/dist/colorpicker.cjs +4 -1
- package/dist/colorpicker.js +4 -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 +23 -20
- package/dist/components/Alert/Alert.module.scss.js +23 -20
- package/dist/components/Alert/index.cjs +20 -8
- package/dist/components/Alert/index.d.ts +17 -11
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +20 -8
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/AppShell/index.cjs +2 -2
- package/dist/components/AppShell/index.js +2 -2
- package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
- package/dist/components/Avatar/Avatar.module.scss.js +14 -14
- package/dist/components/Badge/Badge.module.scss.cjs +33 -31
- package/dist/components/Badge/Badge.module.scss.js +33 -31
- package/dist/components/Badge/index.cjs +13 -3
- package/dist/components/Badge/index.d.ts +18 -13
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js +13 -3
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
- package/dist/components/Box/Box.module.scss.cjs +152 -152
- package/dist/components/Box/Box.module.scss.js +152 -152
- package/dist/components/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 +11 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +11 -8
- package/dist/components/Breadcrumbs/index.cjs +1 -1
- package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/index.js +1 -1
- package/dist/components/Button/Button.module.scss.cjs +36 -27
- package/dist/components/Button/Button.module.scss.js +36 -27
- package/dist/components/Button/index.cjs +20 -4
- package/dist/components/Button/index.d.ts +18 -10
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +20 -4
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
- package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
- package/dist/components/Card/Card.module.scss.cjs +31 -26
- package/dist/components/Card/Card.module.scss.js +32 -27
- package/dist/components/Card/index.cjs +16 -3
- package/dist/components/Card/index.d.ts +23 -15
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +16 -3
- 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 +11 -11
- package/dist/components/Checkbox/Checkbox.module.scss.js +11 -11
- package/dist/components/Checkbox/index.cjs +4 -4
- package/dist/components/Checkbox/index.d.ts +4 -6
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +4 -4
- package/dist/components/Chip/Chip.module.scss.cjs +19 -19
- package/dist/components/Chip/Chip.module.scss.js +19 -19
- package/dist/components/Chip/index.cjs +3 -3
- package/dist/components/Chip/index.d.ts +8 -3
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +3 -3
- 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 +20 -5
- 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 +26 -6
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +26 -6
- package/dist/components/Command/Command.module.scss.cjs +14 -11
- package/dist/components/Command/Command.module.scss.js +14 -11
- package/dist/components/Command/index.cjs +28 -16
- package/dist/components/Command/index.d.ts +8 -3
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +28 -16
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- package/dist/components/ConversationList/index.cjs +2 -2
- package/dist/components/ConversationList/index.js +2 -2
- package/dist/components/DataTable/DataTable.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 +31 -28
- package/dist/components/DataTable/DataTable.module.scss.js +31 -28
- package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -1
- package/dist/components/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 +13 -16
- package/dist/components/Dialog/index.d.ts +11 -10
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +13 -16
- package/dist/components/Drawer/Drawer.module.scss.cjs +39 -39
- package/dist/components/Drawer/Drawer.module.scss.js +40 -40
- package/dist/components/Drawer/index.cjs +2 -2
- package/dist/components/Drawer/index.d.ts +5 -4
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +2 -2
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- package/dist/components/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 +13 -6
- package/dist/components/EmptyState/index.d.ts +13 -5
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +13 -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/Grid.module.scss.cjs +54 -54
- package/dist/components/Grid/Grid.module.scss.js +54 -54
- 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 +30 -33
- package/dist/components/Icon/Icon.module.scss.js +30 -33
- package/dist/components/Icon/index.cjs +15 -14
- package/dist/components/Icon/index.d.ts +23 -12
- package/dist/components/Icon/index.d.ts.map +1 -1
- package/dist/components/Icon/index.js +15 -14
- package/dist/components/IconButton/IconButton.module.scss.cjs +12 -12
- package/dist/components/IconButton/IconButton.module.scss.js +12 -12
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts +4 -4
- 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 +15 -21
- package/dist/components/Input/Input.module.scss.js +15 -21
- package/dist/components/Input/index.cjs +2 -14
- package/dist/components/Input/index.d.ts +0 -2
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js +2 -14
- package/dist/components/Link/Link.module.scss.cjs +26 -14
- package/dist/components/Link/Link.module.scss.js +26 -14
- package/dist/components/Link/index.cjs +13 -2
- package/dist/components/Link/index.d.ts +11 -4
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/Link/index.js +13 -2
- package/dist/components/List/List.module.scss.cjs +23 -19
- package/dist/components/List/List.module.scss.js +23 -19
- package/dist/components/List/index.cjs +7 -7
- package/dist/components/List/index.d.ts +10 -7
- package/dist/components/List/index.d.ts.map +1 -1
- package/dist/components/List/index.js +7 -7
- package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
- package/dist/components/Listbox/Listbox.module.scss.js +8 -8
- package/dist/components/Loading/Loading.module.scss.cjs +34 -34
- package/dist/components/Loading/Loading.module.scss.js +34 -34
- package/dist/components/Loading/index.cjs +5 -5
- package/dist/components/Loading/index.d.ts +8 -7
- package/dist/components/Loading/index.d.ts.map +1 -1
- package/dist/components/Loading/index.js +5 -5
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/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 +20 -20
- package/dist/components/Message/Message.module.scss.js +20 -20
- package/dist/components/Message/index.cjs +1 -1
- package/dist/components/Message/index.d.ts +1 -1
- package/dist/components/Message/index.js +1 -1
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +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 +28 -25
- package/dist/components/Progress/Progress.module.scss.js +28 -25
- package/dist/components/Progress/index.cjs +21 -12
- package/dist/components/Progress/index.d.ts +10 -6
- package/dist/components/Progress/index.d.ts.map +1 -1
- package/dist/components/Progress/index.js +21 -12
- package/dist/components/Prompt/Prompt.module.scss.cjs +30 -30
- package/dist/components/Prompt/Prompt.module.scss.js +30 -30
- package/dist/components/Prompt/index.cjs +7 -7
- package/dist/components/Prompt/index.d.ts +11 -9
- package/dist/components/Prompt/index.d.ts.map +1 -1
- package/dist/components/Prompt/index.js +7 -7
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +20 -17
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +20 -17
- package/dist/components/RadioGroup/index.cjs +10 -5
- package/dist/components/RadioGroup/index.d.ts +11 -7
- package/dist/components/RadioGroup/index.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js +10 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
- package/dist/components/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/Select/index.cjs +26 -20
- package/dist/components/Select/index.d.ts +5 -5
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +26 -20
- package/dist/components/Separator/Separator.module.scss.cjs +25 -19
- package/dist/components/Separator/Separator.module.scss.js +25 -19
- package/dist/components/Separator/index.cjs +10 -8
- package/dist/components/Separator/index.d.ts +4 -2
- package/dist/components/Separator/index.d.ts.map +1 -1
- package/dist/components/Separator/index.js +10 -8
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
- package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
- package/dist/components/Sidebar/index.cjs +15 -38
- 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 +15 -38
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
- package/dist/components/Skeleton/index.cjs +7 -7
- package/dist/components/Skeleton/index.d.ts +8 -7
- package/dist/components/Skeleton/index.d.ts.map +1 -1
- package/dist/components/Skeleton/index.js +7 -7
- package/dist/components/Slider/Slider.module.scss.cjs +12 -12
- package/dist/components/Slider/Slider.module.scss.js +12 -12
- package/dist/components/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 +14 -10
- 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 +14 -10
- package/dist/components/Tabs/Tabs.module.scss.cjs +18 -18
- package/dist/components/Tabs/Tabs.module.scss.js +18 -18
- package/dist/components/Tabs/index.cjs +30 -11
- package/dist/components/Tabs/index.d.ts +8 -6
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +30 -11
- package/dist/components/Text/Text.module.scss.cjs +109 -97
- package/dist/components/Text/Text.module.scss.js +109 -97
- package/dist/components/Text/index.cjs +45 -41
- package/dist/components/Text/index.d.ts +24 -19
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +45 -41
- package/dist/components/Textarea/Textarea.module.scss.cjs +22 -28
- package/dist/components/Textarea/Textarea.module.scss.js +22 -28
- package/dist/components/Textarea/index.cjs +3 -10
- package/dist/components/Textarea/index.d.ts +0 -2
- package/dist/components/Textarea/index.d.ts.map +1 -1
- package/dist/components/Textarea/index.js +3 -10
- package/dist/components/Theme/index.cjs +22 -5
- package/dist/components/Theme/index.d.ts +6 -12
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +22 -5
- package/dist/components/ThemeToggle/ThemeButton.cjs +51 -0
- package/dist/components/ThemeToggle/ThemeButton.d.ts +16 -0
- package/dist/components/ThemeToggle/ThemeButton.d.ts.map +1 -0
- package/dist/components/ThemeToggle/ThemeButton.js +34 -0
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +6 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -6
- package/dist/components/ThemeToggle/icons.cjs +48 -0
- package/dist/components/ThemeToggle/icons.d.ts +10 -0
- package/dist/components/ThemeToggle/icons.d.ts.map +1 -0
- package/dist/components/ThemeToggle/icons.js +48 -0
- package/dist/components/ThemeToggle/index.cjs +6 -50
- package/dist/components/ThemeToggle/index.d.ts +5 -3
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +3 -47
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +18 -15
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +18 -15
- package/dist/components/ThinkingIndicator/index.cjs +7 -8
- package/dist/components/ThinkingIndicator/index.d.ts +6 -5
- package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
- package/dist/components/ThinkingIndicator/index.js +7 -8
- package/dist/components/Toast/Toast.module.scss.cjs +28 -29
- package/dist/components/Toast/Toast.module.scss.js +29 -30
- package/dist/components/Toast/index.cjs +28 -30
- package/dist/components/Toast/index.d.ts +9 -8
- package/dist/components/Toast/index.d.ts.map +1 -1
- package/dist/components/Toast/index.js +28 -30
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +21 -19
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +22 -20
- package/dist/components/ToggleGroup/index.cjs +4 -5
- package/dist/components/ToggleGroup/index.d.ts +7 -6
- package/dist/components/ToggleGroup/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/index.js +4 -5
- package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
- package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
- package/dist/components/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/VisuallyHidden.module.scss.cjs +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
- package/dist/components/VisuallyHidden/index.d.ts +2 -2
- package/dist/data-table-virtual.cjs +3 -2
- package/dist/data-table-virtual.js +3 -2
- package/dist/data-table.cjs +3 -2
- package/dist/data-table.js +3 -2
- package/dist/datepicker.cjs +26 -13
- package/dist/datepicker.js +26 -13
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +6 -2
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +21 -29
- package/dist/measurements/generated.cjs +46 -94
- package/dist/measurements/generated.d.ts +44 -92
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +46 -94
- package/dist/measurements/index.d.ts +1 -1
- package/dist/measurements/index.d.ts.map +1 -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 -7
- package/dist/utils/seed-derivation.d.ts +1 -3
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +10 -7
- package/dist/utils/theme-presets.cjs +5 -10
- package/dist/utils/theme-presets.d.ts +1 -2
- package/dist/utils/theme-presets.d.ts.map +1 -1
- package/dist/utils/theme-presets.js +5 -10
- package/fragments.json +1 -1
- package/package.json +9 -10
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/assets/nav-glyph.module.scss +166 -0
- package/src/assets/nav-glyph.tsx +188 -0
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Accordion/Accordion.module.scss +5 -3
- package/src/components/Alert/Alert.contract.json +49 -65
- package/src/components/Alert/Alert.module.scss +57 -47
- package/src/components/Alert/index.tsx +72 -39
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +99 -54
- package/src/components/AppShell/index.tsx +2 -2
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +4 -2
- package/src/components/Badge/Badge.contract.json +86 -55
- package/src/components/Badge/Badge.module.scss +80 -48
- package/src/components/Badge/index.tsx +34 -17
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/Box.module.scss +7 -6
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +27 -12
- package/src/components/Breadcrumbs/index.tsx +5 -1
- package/src/components/Button/Button.module.scss +261 -185
- package/src/components/Button/index.tsx +41 -28
- package/src/components/ButtonGroup/ButtonGroup.contract.json +34 -49
- package/src/components/ButtonGroup/ButtonGroup.module.scss +8 -6
- package/src/components/Card/Card.consumer-fixture.module.scss +5 -2
- package/src/components/Card/Card.module.scss +97 -76
- package/src/components/Card/index.tsx +44 -20
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/Chart.module.scss +6 -5
- package/src/components/Chart/index.tsx +36 -6
- package/src/components/Checkbox/Checkbox.contract.json +28 -27
- package/src/components/Checkbox/Checkbox.module.scss +47 -54
- package/src/components/Checkbox/index.tsx +10 -10
- package/src/components/Chip/Chip.contract.json +38 -45
- package/src/components/Chip/Chip.module.scss +24 -23
- package/src/components/Chip/index.tsx +12 -7
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +75 -73
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +114 -51
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/Collapsible/Collapsible.module.scss +1 -7
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +34 -24
- package/src/components/ColorPicker/index.tsx +6 -1
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +16 -19
- package/src/components/Combobox/index.tsx +41 -6
- package/src/components/Command/Command.contract.json +28 -44
- package/src/components/Command/Command.module.scss +19 -21
- package/src/components/Command/index.tsx +64 -47
- package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/ConversationList/ConversationList.module.scss +2 -3
- package/src/components/ConversationList/index.tsx +2 -2
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +24 -17
- package/src/components/DataTable/DataTable.virtual.tsx +3 -2
- package/src/components/DataTable/index.tsx +9 -8
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +41 -44
- package/src/components/DatePicker/index.tsx +23 -9
- package/src/components/Dialog/Dialog.module.scss +26 -32
- package/src/components/Dialog/index.tsx +51 -39
- package/src/components/Drawer/Drawer.contract.json +28 -42
- package/src/components/Drawer/Drawer.module.scss +123 -64
- package/src/components/Drawer/index.tsx +7 -5
- package/src/components/Editor/Editor.contract.json +32 -49
- package/src/components/Editor/Editor.module.scss +60 -25
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +33 -45
- package/src/components/EmptyState/EmptyState.module.scss +37 -21
- package/src/components/EmptyState/index.tsx +56 -23
- package/src/components/Field/Field.contract.json +28 -46
- package/src/components/Field/Field.module.scss +2 -1
- package/src/components/Field/index.tsx +5 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +15 -7
- package/src/components/Form/Form.contract.json +23 -23
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/Grid.module.scss +2 -2
- package/src/components/Grid/index.tsx +10 -10
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +57 -54
- package/src/components/Header/index.tsx +134 -122
- package/src/components/Icon/Icon.contract.json +37 -81
- package/src/components/Icon/Icon.module.scss +13 -12
- package/src/components/Icon/index.tsx +31 -31
- package/src/components/IconButton/IconButton.contract.json +37 -21
- package/src/components/IconButton/IconButton.module.scss +19 -11
- package/src/components/IconButton/index.tsx +6 -5
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +25 -44
- package/src/components/Input/Input.module.scss +6 -55
- package/src/components/Input/index.tsx +2 -18
- package/src/components/Link/Link.contract.json +46 -58
- package/src/components/Link/Link.module.scss +41 -10
- package/src/components/Link/index.tsx +27 -6
- package/src/components/List/List.contract.json +33 -62
- package/src/components/List/List.module.scss +10 -5
- package/src/components/List/index.tsx +17 -13
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Listbox/Listbox.module.scss +14 -20
- package/src/components/Loading/Loading.contract.json +41 -65
- package/src/components/Loading/Loading.module.scss +37 -31
- package/src/components/Loading/index.tsx +15 -14
- 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 +45 -6
- package/src/components/Markdown/index.tsx +48 -49
- package/src/components/Menu/Menu.contract.json +30 -46
- package/src/components/Menu/Menu.module.scss +32 -16
- package/src/components/Message/Message.contract.json +31 -54
- package/src/components/Message/Message.module.scss +18 -9
- package/src/components/Message/index.tsx +2 -2
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +66 -66
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +9 -16
- package/src/components/Popover/Popover.contract.json +28 -50
- package/src/components/Popover/Popover.module.scss +30 -28
- package/src/components/Progress/Progress.contract.json +39 -35
- package/src/components/Progress/Progress.module.scss +16 -10
- package/src/components/Progress/index.tsx +34 -16
- package/src/components/Prompt/Prompt.contract.json +40 -56
- package/src/components/Prompt/Prompt.module.scss +49 -48
- package/src/components/Prompt/index.tsx +17 -15
- package/src/components/RadioGroup/RadioGroup.contract.json +29 -28
- package/src/components/RadioGroup/RadioGroup.module.scss +50 -45
- package/src/components/RadioGroup/index.tsx +23 -10
- package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
- package/src/components/ScrollArea/ScrollArea.module.scss +45 -48
- package/src/components/ScrollArea/index.tsx +16 -16
- package/src/components/ScrollArea/scroll-state.ts +24 -24
- package/src/components/Select/Select.module.scss +20 -19
- package/src/components/Select/index.tsx +26 -24
- package/src/components/Separator/Separator.contract.json +29 -53
- package/src/components/Separator/Separator.module.scss +24 -40
- package/src/components/Separator/index.tsx +16 -11
- package/src/components/Sidebar/Sidebar.contract.json +35 -67
- package/src/components/Sidebar/Sidebar.module.scss +94 -88
- package/src/components/Sidebar/index.tsx +167 -167
- package/src/components/Skeleton/Skeleton.contract.json +34 -60
- package/src/components/Skeleton/Skeleton.module.scss +50 -26
- package/src/components/Skeleton/index.tsx +16 -15
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +9 -22
- package/src/components/Stack/Stack.contract.json +30 -57
- package/src/components/Stack/Stack.module.scss +26 -24
- package/src/components/Stack/index.tsx +3 -3
- package/src/components/Switch/Switch.contract.json +33 -46
- package/src/components/Switch/Switch.module.scss +106 -59
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +24 -16
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +17 -13
- package/src/components/TableOfContents/index.tsx +27 -10
- package/src/components/Tabs/Tabs.contract.json +35 -56
- package/src/components/Tabs/Tabs.module.scss +27 -31
- package/src/components/Tabs/index.tsx +30 -15
- package/src/components/Text/Text.contract.json +52 -72
- package/src/components/Text/Text.module.scss +34 -18
- package/src/components/Text/index.tsx +123 -83
- package/src/components/Textarea/Textarea.contract.json +24 -55
- package/src/components/Textarea/Textarea.module.scss +22 -52
- package/src/components/Textarea/index.tsx +3 -14
- package/src/components/Theme/Theme.contract.json +35 -53
- package/src/components/Theme/index.tsx +41 -13
- package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
- package/src/components/ThemeToggle/ThemeToggle.module.scss +20 -27
- package/src/components/ThemeToggle/icons.tsx +46 -0
- package/src/components/ThemeToggle/index.tsx +9 -55
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +34 -50
- package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
- package/src/components/ThinkingIndicator/index.tsx +12 -14
- package/src/components/Toast/Toast.contract.json +55 -49
- package/src/components/Toast/Toast.module.scss +50 -105
- package/src/components/Toast/index.tsx +39 -34
- package/src/components/ToggleGroup/ToggleGroup.contract.json +39 -40
- package/src/components/ToggleGroup/ToggleGroup.module.scss +30 -27
- package/src/components/ToggleGroup/index.tsx +11 -11
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/Tooltip.module.scss +16 -10
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +16 -12
- package/src/measurements/MeasurementTargets.module.scss +6 -7
- package/src/measurements/generated.ts +46 -97
- package/src/measurements/index.ts +0 -1
- package/src/measurements/measurements.json +44 -116
- package/src/recipes/_action.scss +4 -4
- package/src/recipes/_boolean-range.scss +12 -16
- package/src/recipes/_feedback.scss +17 -16
- package/src/recipes/_field.scss +28 -16
- package/src/recipes/_layout.scss +14 -7
- package/src/recipes/_navigation.scss +84 -29
- package/src/recipes/_overlay.scss +143 -43
- package/src/recipes/_popup.scss +54 -34
- package/src/recipes/_prose.scss +48 -28
- package/src/recipes/_representation.scss +10 -9
- package/src/recipes/_segmented.scss +1 -1
- package/src/recipes/_table-chrome.scss +42 -17
- package/src/recipes/_target.scss +2 -4
- package/src/recipes/_typography.scss +10 -0
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +31 -25
- package/src/tokens/_component-properties.scss +19 -1
- package/src/tokens/_computed.scss +32 -49
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +62 -44
- package/src/tokens/_measurements.generated.scss +119 -249
- package/src/tokens/_mixins.scss +49 -48
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_property-registrations.scss +9 -0
- package/src/tokens/_seeds.scss +20 -31
- package/src/tokens/_variables.scss +251 -94
- 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 +11 -14
- package/src/utils/theme-presets.ts +5 -12
- package/dist/blocks/AccountSettings.block.d.ts +0 -3
- package/dist/blocks/AccountSettings.block.d.ts.map +0 -1
- package/dist/blocks/ActivityFeedSkeleton.block.d.ts +0 -3
- package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/BlogEditor.block.d.ts +0 -3
- package/dist/blocks/BlogEditor.block.d.ts.map +0 -1
- package/dist/blocks/ChatInterface.block.d.ts +0 -3
- package/dist/blocks/ChatInterface.block.d.ts.map +0 -1
- package/dist/blocks/ChatMessages.block.d.ts +0 -3
- package/dist/blocks/ChatMessages.block.d.ts.map +0 -1
- package/dist/blocks/CheckoutForm.block.d.ts +0 -3
- package/dist/blocks/CheckoutForm.block.d.ts.map +0 -1
- package/dist/blocks/CommandPalette.block.d.ts +0 -3
- package/dist/blocks/CommandPalette.block.d.ts.map +0 -1
- package/dist/blocks/ContactForm.block.d.ts +0 -3
- package/dist/blocks/ContactForm.block.d.ts.map +0 -1
- package/dist/blocks/DashboardPage.block.d.ts +0 -3
- package/dist/blocks/DashboardPage.block.d.ts.map +0 -1
- package/dist/blocks/DashboardSkeleton.block.d.ts +0 -3
- package/dist/blocks/DashboardSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/DataTable.block.d.ts +0 -3
- package/dist/blocks/DataTable.block.d.ts.map +0 -1
- package/dist/blocks/EmptyState.block.d.ts +0 -3
- package/dist/blocks/EmptyState.block.d.ts.map +0 -1
- package/dist/blocks/FAQSection.block.d.ts +0 -3
- package/dist/blocks/FAQSection.block.d.ts.map +0 -1
- package/dist/blocks/FeatureGrid.block.d.ts +0 -3
- package/dist/blocks/FeatureGrid.block.d.ts.map +0 -1
- package/dist/blocks/HeroSection.block.d.ts +0 -3
- package/dist/blocks/HeroSection.block.d.ts.map +0 -1
- package/dist/blocks/NavigationHeader.block.d.ts +0 -3
- package/dist/blocks/NavigationHeader.block.d.ts.map +0 -1
- package/dist/blocks/PaginatedTable.block.d.ts +0 -3
- package/dist/blocks/PaginatedTable.block.d.ts.map +0 -1
- package/dist/blocks/PricingComparison.block.d.ts +0 -3
- package/dist/blocks/PricingComparison.block.d.ts.map +0 -1
- package/dist/blocks/ProductCard.block.d.ts +0 -3
- package/dist/blocks/ProductCard.block.d.ts.map +0 -1
- package/dist/blocks/RegistrationForm.block.d.ts +0 -3
- package/dist/blocks/RegistrationForm.block.d.ts.map +0 -1
- package/dist/blocks/SettingsDrawer.block.d.ts +0 -3
- package/dist/blocks/SettingsDrawer.block.d.ts.map +0 -1
- package/dist/blocks/SettingsPanel.block.d.ts +0 -3
- package/dist/blocks/SettingsPanel.block.d.ts.map +0 -1
- package/dist/blocks/ShoppingCart.block.d.ts +0 -3
- package/dist/blocks/ShoppingCart.block.d.ts.map +0 -1
- package/dist/blocks/StatsCardSkeleton.block.d.ts +0 -3
- package/dist/blocks/StatsCardSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/TableSkeleton.block.d.ts +0 -3
- package/dist/blocks/TableSkeleton.block.d.ts.map +0 -1
- package/dist/blocks/ThinkingStates.block.d.ts +0 -3
- package/dist/blocks/ThinkingStates.block.d.ts.map +0 -1
- package/dist/components/Toggle/index.d.ts +0 -3
- package/dist/components/Toggle/index.d.ts.map +0 -1
- package/src/components/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
- package/src/components/Toggle/index.ts +0 -7
- package/src/tokens/_density.scss +0 -85
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Chart",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Plots your data with tooltips, legends, and colors that track the theme.",
|
|
5
5
|
"category": "display",
|
|
6
|
-
"tags": [
|
|
7
|
-
"chart",
|
|
8
|
-
"graph",
|
|
9
|
-
"data-visualization",
|
|
10
|
-
"recharts"
|
|
11
|
-
],
|
|
6
|
+
"tags": ["chart", "graph", "data-visualization", "recharts"],
|
|
12
7
|
"status": "stable",
|
|
13
8
|
"dependencies": [
|
|
14
9
|
{
|
|
@@ -55,48 +50,47 @@
|
|
|
55
50
|
},
|
|
56
51
|
"usage": {
|
|
57
52
|
"when": [
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"Dashboard data visualizations"
|
|
53
|
+
"A trend over time is the point",
|
|
54
|
+
"Categories need comparing side by side",
|
|
55
|
+
"A whole splits into parts worth seeing"
|
|
62
56
|
],
|
|
63
57
|
"whenNot": [
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
58
|
+
"One number tells the story (use Text or Badge)",
|
|
59
|
+
"Distance to a goal (use Progress)",
|
|
60
|
+
"Readers need exact values (use Table)"
|
|
67
61
|
],
|
|
68
62
|
"guidelines": [
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
63
|
+
"Wrap every recharts chart in ChartContainer",
|
|
64
|
+
"Map each data key to a label and color in ChartConfig",
|
|
65
|
+
"Colors come from --fui-* variables so both themes stay readable",
|
|
66
|
+
"Pair with ChartTooltip and ChartLegend rather than recharts' own",
|
|
67
|
+
"Give the container a real height — recharts cannot measure zero"
|
|
74
68
|
],
|
|
75
69
|
"accessibility": [
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
70
|
+
"accessibilityLayer is on by default",
|
|
71
|
+
"ChartConfig labels are what screen readers read",
|
|
72
|
+
"Pass dataTable to offer the same numbers as text"
|
|
79
73
|
]
|
|
80
74
|
},
|
|
81
75
|
"examples": [
|
|
82
76
|
{
|
|
83
77
|
"name": "Line Chart",
|
|
84
|
-
"description": "
|
|
78
|
+
"description": "Two series share one scale, so the gap between them reads instantly.",
|
|
85
79
|
"code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n revenue: { label: 'Revenue', color: 'var(--fui-color-accent)' },\n users: { label: 'Users', color: 'var(--fui-color-info)' },\n }}\n >\n <LineChart data={monthlyData} margin={{ top: 5, right: 20, bottom: 5, left: 0 }}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"month\" />\n <YAxis />\n <ChartTooltip />\n <ChartLegend />\n <Line type=\"monotone\" dataKey=\"revenue\" stroke=\"var(--fui-color-accent)\" strokeWidth={2} dot={false} />\n <Line type=\"monotone\" dataKey=\"users\" stroke=\"var(--fui-color-info)\" strokeWidth={2} dot={false} />\n </LineChart>\n </ChartContainer>\n</div>"
|
|
86
80
|
},
|
|
87
81
|
{
|
|
88
82
|
"name": "Bar Chart",
|
|
89
|
-
"description": "
|
|
83
|
+
"description": "Fixed categories, compared by height — the safest default.",
|
|
90
84
|
"code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n sessions: { label: 'Sessions', color: 'var(--fui-color-accent)' },\n }}\n >\n <BarChart data={deviceData} margin={{ top: 5, right: 20, bottom: 5, left: 0 }}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"device\" />\n <YAxis />\n <ChartTooltip />\n <Bar dataKey=\"sessions\" fill=\"var(--fui-color-accent)\" radius={[4, 4, 0, 0]} />\n </BarChart>\n </ChartContainer>\n</div>"
|
|
91
85
|
},
|
|
92
86
|
{
|
|
93
87
|
"name": "Area Chart",
|
|
94
|
-
"description": "
|
|
88
|
+
"description": "The fill under the line stresses volume, not just direction.",
|
|
95
89
|
"code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n revenue: { label: 'Revenue', color: 'var(--fui-color-accent)' },\n }}\n >\n <AreaChart data={monthlyData} margin={{ top: 5, right: 20, bottom: 5, left: 0 }}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"month\" />\n <YAxis />\n <ChartTooltip />\n <Area type=\"monotone\" dataKey=\"revenue\" stroke=\"var(--fui-color-accent)\" fill=\"var(--fui-color-accent)\" fillOpacity={0.15} strokeWidth={2} />\n </AreaChart>\n </ChartContainer>\n</div>"
|
|
96
90
|
},
|
|
97
91
|
{
|
|
98
92
|
"name": "Pie Chart",
|
|
99
|
-
"description": "
|
|
93
|
+
"description": "Parts of one whole — keep it under six slices or it stops reading.",
|
|
100
94
|
"code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n Chrome: { label: 'Chrome', color: 'var(--fui-color-accent)' },\n Firefox: { label: 'Firefox', color: 'var(--fui-color-info)' },\n Safari: { label: 'Safari', color: 'var(--fui-color-success)' },\n Edge: { label: 'Edge', color: 'var(--fui-color-warning)' },\n }}\n >\n <PieChart>\n <ChartTooltip />\n <ChartLegend />\n <Pie\n data={browserData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n strokeWidth={2}\n >\n {browserData.map((entry) => (\n <Cell key={entry.name} fill={entry.color} />\n ))}\n </Pie>\n </PieChart>\n </ChartContainer>\n</div>"
|
|
101
95
|
}
|
|
102
96
|
],
|
|
@@ -123,9 +117,7 @@
|
|
|
123
117
|
"children: ReactElement - recharts chart component",
|
|
124
118
|
"Chart.Tooltip / Chart.Legend support custom content renderers for advanced overlays"
|
|
125
119
|
],
|
|
126
|
-
"a11yRules": [
|
|
127
|
-
"A11Y_CHART_LABEL"
|
|
128
|
-
]
|
|
120
|
+
"a11yRules": ["A11Y_CHART_LABEL"]
|
|
129
121
|
},
|
|
130
122
|
"provenance": {
|
|
131
123
|
"source": "migrated",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
2
|
@use "../../tokens/mixins" as *;
|
|
3
|
+
@use "../../tokens/measurements.generated" as measurements;
|
|
3
4
|
@use "../../recipes/representation" as representation;
|
|
4
5
|
@use "../../recipes/typography" as typography;
|
|
5
6
|
|
|
@@ -57,13 +58,13 @@
|
|
|
57
58
|
.tooltipItems {
|
|
58
59
|
display: flex;
|
|
59
60
|
flex-direction: column;
|
|
60
|
-
gap: var(--_fui-chart-tooltip-item-gap);
|
|
61
|
+
gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
.tooltipItem {
|
|
64
65
|
display: flex;
|
|
65
66
|
align-items: center;
|
|
66
|
-
gap: var(--_fui-chart-tooltip-item-gap);
|
|
67
|
+
gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
|
|
67
68
|
justify-content: space-between;
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -82,8 +83,8 @@
|
|
|
82
83
|
@include representation.chart-marker("dashed");
|
|
83
84
|
|
|
84
85
|
box-sizing: border-box;
|
|
85
|
-
border-
|
|
86
|
-
border-radius:
|
|
86
|
+
border-block-start: var(--fui-chart-marker-stroke, var(--fui-raw-space-2, #{measurements.raw-space(2)})) dashed;
|
|
87
|
+
border-radius: var(--fui-radius-none, #{$fui-radius-none});
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
|
|
@@ -104,7 +105,7 @@
|
|
|
104
105
|
flex-wrap: wrap;
|
|
105
106
|
align-items: center;
|
|
106
107
|
justify-content: center;
|
|
107
|
-
gap: var(--fui-raw-space-12,
|
|
108
|
+
gap: var(--fui-raw-space-12, #{measurements.raw-space(12)});
|
|
108
109
|
padding-block-start: var(--fui-raw-space-8, 8px);
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -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",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"disabled: boolean (default: false)",
|
|
17
17
|
"required: boolean (default: false)",
|
|
18
18
|
"size: sm|md|lg (default: md)",
|
|
19
|
+
"variant: outline",
|
|
19
20
|
"label: string",
|
|
20
21
|
"helperText: string",
|
|
21
22
|
"description: string",
|
|
@@ -76,10 +77,9 @@
|
|
|
76
77
|
},
|
|
77
78
|
"variant": {
|
|
78
79
|
"type": "enum",
|
|
79
|
-
"description": "
|
|
80
|
-
"default": "default",
|
|
80
|
+
"description": "Chrome. Omit for the inline checkbox beside its label; 'outline' renders a full-width bordered surface with the checkbox tucked inside.",
|
|
81
81
|
"required": false,
|
|
82
|
-
"values": ["
|
|
82
|
+
"values": ["outline"]
|
|
83
83
|
},
|
|
84
84
|
"label": {
|
|
85
85
|
"type": "string",
|
|
@@ -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
|
],
|
|
@@ -217,6 +217,7 @@
|
|
|
217
217
|
"onCheckedChange: (checked) => void - change handler",
|
|
218
218
|
"onChange: (checked) => void - alias for onCheckedChange",
|
|
219
219
|
"indeterminate: boolean - partial selection state",
|
|
220
|
+
"variant: outline - full-width bordered surface; omit for the inline control",
|
|
220
221
|
"label: string - checkbox label",
|
|
221
222
|
"helperText: string - helper text (preferred)",
|
|
222
223
|
"description: string - deprecated alias for helperText",
|
|
@@ -21,8 +21,7 @@
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
&[data-disabled] {
|
|
24
|
-
|
|
25
|
-
opacity: 0.5;
|
|
24
|
+
@include disabled-state;
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
27
|
|
|
@@ -38,46 +37,45 @@
|
|
|
38
37
|
flex-shrink: 0;
|
|
39
38
|
box-sizing: border-box;
|
|
40
39
|
margin-block-start: var(--_fui-boolean-mark-offset, 0);
|
|
41
|
-
background-color: var(--fui-
|
|
42
|
-
border: var(--fui-stroke-hairline, 1px) solid var(--fui-
|
|
40
|
+
background-color: var(--fui-bg-primary, $fui-bg-primary);
|
|
41
|
+
border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-strong, $fui-border-strong);
|
|
43
42
|
border-radius: var(--fui-checkbox-radius, var(--fui-radius-sm, #{$fui-radius-sm}));
|
|
44
43
|
cursor: inherit;
|
|
44
|
+
@include high-contrast-outline;
|
|
45
45
|
|
|
46
46
|
&:hover:not([data-disabled]) {
|
|
47
|
-
border-color: var(--fui-
|
|
47
|
+
border-color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&:focus-visible {
|
|
51
|
+
@include field.focus-state;
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
&[data-checked],
|
|
51
55
|
&[data-indeterminate] {
|
|
52
|
-
background-color: var(--fui-
|
|
53
|
-
border-color: var(
|
|
54
|
-
|
|
55
|
-
var(--fui-
|
|
56
|
-
);
|
|
57
|
-
box-shadow: inset 0 1px 0 color-mix(in srgb, white 24%, transparent);
|
|
56
|
+
background-color: var(--fui-control-checked-bg, $fui-color-accent);
|
|
57
|
+
border-color: var(--fui-control-checked-border, $fui-color-accent);
|
|
58
|
+
box-shadow: inset 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline}) 0
|
|
59
|
+
color-mix(in srgb, var(--fui-control-checked-color, #{$fui-color-on-accent}) 24%, transparent);
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
&[data-checked]:hover:not([data-disabled]),
|
|
61
63
|
&[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
|
-
);
|
|
64
|
+
background-color: var(--fui-control-checked-bg-hover, $fui-color-accent-hover);
|
|
65
|
+
border-color: var(--fui-control-checked-border-hover, $fui-color-accent-hover);
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
&[data-invalid] {
|
|
70
|
-
border-color: var(--fui-color-danger
|
|
69
|
+
border-color: var(--fui-color-danger, $fui-color-danger);
|
|
71
70
|
}
|
|
72
71
|
|
|
73
72
|
&[data-invalid][data-checked],
|
|
74
73
|
&[data-invalid][data-indeterminate] {
|
|
75
74
|
background-color: var(--fui-color-danger-bg, $fui-color-danger-bg);
|
|
76
|
-
border-color: var(--fui-color-danger
|
|
75
|
+
border-color: var(--fui-color-danger, $fui-color-danger);
|
|
77
76
|
box-shadow: inset 0 0 0 1px
|
|
78
77
|
color-mix(in srgb, var(--fui-color-danger-text, #{$fui-color-danger-text}) 35%, transparent);
|
|
79
78
|
}
|
|
80
|
-
|
|
81
79
|
}
|
|
82
80
|
|
|
83
81
|
// Size variants
|
|
@@ -99,24 +97,40 @@
|
|
|
99
97
|
display: flex;
|
|
100
98
|
align-items: center;
|
|
101
99
|
justify-content: center;
|
|
102
|
-
color: var(--fui-
|
|
100
|
+
color: var(--fui-control-checked-color, $fui-color-on-accent);
|
|
103
101
|
|
|
104
102
|
svg {
|
|
105
103
|
width: var(--fui-icon-xs, $fui-icon-xs);
|
|
106
104
|
height: var(--fui-icon-xs, $fui-icon-xs);
|
|
107
105
|
}
|
|
108
106
|
|
|
109
|
-
// Animation
|
|
107
|
+
// Animation: the mark draws itself in (stroke-dashoffset over the
|
|
108
|
+
// pathLength-normalized glyphs) instead of popping. Opacity keeps the
|
|
109
|
+
// un-draw exit from lingering.
|
|
110
110
|
opacity: 0;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
transition: opacity var(--fui-transition-fast, $fui-transition-fast);
|
|
112
|
+
|
|
113
|
+
svg :is(polyline, line) {
|
|
114
|
+
stroke-dasharray: 24;
|
|
115
|
+
stroke-dashoffset: 24;
|
|
116
|
+
transition: stroke-dashoffset var(--fui-transition-normal, $fui-transition-normal);
|
|
117
|
+
}
|
|
115
118
|
|
|
116
119
|
[data-checked] > &,
|
|
117
120
|
[data-indeterminate] > & {
|
|
118
121
|
opacity: 1;
|
|
119
|
-
|
|
122
|
+
|
|
123
|
+
svg :is(polyline, line) {
|
|
124
|
+
stroke-dashoffset: 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@media (prefers-reduced-motion: reduce) {
|
|
129
|
+
transition: none;
|
|
130
|
+
|
|
131
|
+
svg :is(polyline, line) {
|
|
132
|
+
transition: none;
|
|
133
|
+
}
|
|
120
134
|
}
|
|
121
135
|
|
|
122
136
|
[data-invalid][data-checked] > &,
|
|
@@ -152,11 +166,11 @@
|
|
|
152
166
|
}
|
|
153
167
|
|
|
154
168
|
// ============================================
|
|
155
|
-
//
|
|
156
|
-
//
|
|
169
|
+
// Outline variant: full-width bordered surface that mirrors the RadioGroup
|
|
170
|
+
// outline variant. Selection state is driven by `:has([data-checked])` so the
|
|
157
171
|
// styling reacts to the same control state the rest of the component uses.
|
|
158
172
|
// ============================================
|
|
159
|
-
.
|
|
173
|
+
.wrapperOutline {
|
|
160
174
|
width: 100%;
|
|
161
175
|
border-radius: var(--fui-radius-md, $fui-radius-md);
|
|
162
176
|
border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-default, $fui-border-default);
|
|
@@ -173,23 +187,23 @@
|
|
|
173
187
|
|
|
174
188
|
&:focus-within:not([data-disabled]) {
|
|
175
189
|
@include focus-ring;
|
|
176
|
-
border-color: var(--fui-
|
|
190
|
+
border-color: var(--fui-control-checked-border, $fui-color-accent);
|
|
177
191
|
}
|
|
178
192
|
|
|
179
193
|
&:has([data-checked]),
|
|
180
194
|
&:has([data-indeterminate]) {
|
|
181
195
|
background: color-mix(
|
|
182
196
|
in srgb,
|
|
183
|
-
var(--fui-
|
|
197
|
+
var(--fui-control-checked-bg, #{$fui-color-accent}) 13%,
|
|
184
198
|
transparent
|
|
185
199
|
);
|
|
186
200
|
border-color: color-mix(
|
|
187
201
|
in srgb,
|
|
188
|
-
var(--fui-
|
|
202
|
+
var(--fui-control-checked-border, #{$fui-color-accent}) 62%,
|
|
189
203
|
transparent
|
|
190
204
|
);
|
|
191
205
|
box-shadow: 0 0 0 1px
|
|
192
|
-
color-mix(in srgb, var(--fui-
|
|
206
|
+
color-mix(in srgb, var(--fui-control-checked-border, #{$fui-color-accent}) 28%, transparent);
|
|
193
207
|
}
|
|
194
208
|
|
|
195
209
|
&[data-size="sm"] {
|
|
@@ -205,27 +219,6 @@
|
|
|
205
219
|
}
|
|
206
220
|
}
|
|
207
221
|
|
|
208
|
-
// ============================================
|
|
209
|
-
// Accessibility: High Contrast Mode
|
|
210
|
-
// ============================================
|
|
211
|
-
|
|
212
|
-
@media (prefers-contrast: more) {
|
|
213
|
-
.checkbox {
|
|
214
|
-
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
215
|
-
outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
|
|
216
|
-
outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
|
|
217
|
-
|
|
218
|
-
&[data-checked],
|
|
219
|
-
&[data-indeterminate] {
|
|
220
|
-
border-color: var(--fui-button-primary-base, $fui-color-accent);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
&[data-invalid] {
|
|
224
|
-
border-color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
222
|
// ============================================
|
|
230
223
|
// Accessibility: Reduced Motion
|
|
231
224
|
// ============================================
|
|
@@ -38,13 +38,11 @@ export interface CheckboxProps extends Omit<
|
|
|
38
38
|
* @default "md" */
|
|
39
39
|
size?: "sm" | "md" | "lg";
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* Useful for multi-select question lists, settings toggles, etc.
|
|
45
|
-
* @default "default"
|
|
41
|
+
* Chrome. Omit it for the inline checkbox next to a label (form-control
|
|
42
|
+
* style); `outline` renders a full-width bordered surface with the checkbox
|
|
43
|
+
* tucked inside — multi-select question lists, settings toggles, plan pickers.
|
|
46
44
|
*/
|
|
47
|
-
variant?: "
|
|
45
|
+
variant?: "outline";
|
|
48
46
|
/** Label text */
|
|
49
47
|
label?: string;
|
|
50
48
|
/** Helper text shown below the label */
|
|
@@ -93,7 +91,9 @@ function CheckIcon() {
|
|
|
93
91
|
strokeLinejoin="round"
|
|
94
92
|
aria-hidden="true"
|
|
95
93
|
>
|
|
96
|
-
|
|
94
|
+
{/* Point order = draw order: the mark draws short arm first, then the
|
|
95
|
+
long stroke. pathLength normalizes the dash budget for the CSS draw. */}
|
|
96
|
+
<polyline points="4 12 9 17 20 6" pathLength={24} />
|
|
97
97
|
</svg>
|
|
98
98
|
);
|
|
99
99
|
}
|
|
@@ -110,7 +110,7 @@ function MinusIcon() {
|
|
|
110
110
|
strokeLinejoin="round"
|
|
111
111
|
aria-hidden="true"
|
|
112
112
|
>
|
|
113
|
-
<line x1="5" y1="12" x2="19" y2="12" />
|
|
113
|
+
<line x1="5" y1="12" x2="19" y2="12" pathLength={24} />
|
|
114
114
|
</svg>
|
|
115
115
|
);
|
|
116
116
|
}
|
|
@@ -130,7 +130,7 @@ const CheckboxRoot = React.forwardRef<HTMLButtonElement, CheckboxProps>(function
|
|
|
130
130
|
readOnly = false,
|
|
131
131
|
required = false,
|
|
132
132
|
size: sizeProp,
|
|
133
|
-
variant
|
|
133
|
+
variant,
|
|
134
134
|
label,
|
|
135
135
|
helperText,
|
|
136
136
|
description,
|
|
@@ -167,7 +167,7 @@ const CheckboxRoot = React.forwardRef<HTMLButtonElement, CheckboxProps>(function
|
|
|
167
167
|
.filter(Boolean)
|
|
168
168
|
.join(" ");
|
|
169
169
|
|
|
170
|
-
const wrapperClasses = [styles.wrapper, variant === "
|
|
170
|
+
const wrapperClasses = [styles.wrapper, variant === "outline" && styles.wrapperOutline, className]
|
|
171
171
|
.filter(Boolean)
|
|
172
172
|
.join(" ");
|
|
173
173
|
const handleCheckedChange = onChange ?? onCheckedChange;
|