@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,19 @@
|
|
|
1
|
-
@use
|
|
2
|
-
@use
|
|
3
|
-
@use
|
|
4
|
-
@use
|
|
5
|
-
@use
|
|
6
|
-
|
|
7
|
-
// Local component tokens
|
|
1
|
+
@use "../../tokens/variables" as *;
|
|
2
|
+
@use "../../tokens/mixins" as *;
|
|
3
|
+
@use "../../recipes/action";
|
|
4
|
+
@use "../../recipes/field";
|
|
5
|
+
@use "../../recipes/popup";
|
|
6
|
+
|
|
7
|
+
// Local component tokens.
|
|
8
|
+
//
|
|
9
|
+
// The raw pixel values in this file (200px here, and the 80px/120px hex-input
|
|
10
|
+
// min-widths below) are deliberate, not missed tokens: react-colorful lays the
|
|
11
|
+
// saturation/hue canvas out in fixed pixels, and the hex field has to stay wide
|
|
12
|
+
// enough for a full "#rrggbb" string. Spacing tokens do not map onto either
|
|
13
|
+
// constraint, so these stay literal.
|
|
8
14
|
$fui-colorpicker-size: 200px !default; // react-colorful saturation/hue square
|
|
9
15
|
$fui-colorpicker-hue-height: $fui-target-size-min !default;
|
|
10
16
|
$fui-colorpicker-pointer-size: $fui-target-size-min !default;
|
|
11
|
-
$fui-colorpicker-pointer-border: 2px !default;
|
|
12
17
|
|
|
13
18
|
.wrapper {
|
|
14
19
|
@include field.wrapper;
|
|
@@ -44,7 +49,6 @@ $fui-colorpicker-pointer-border: 2px !default;
|
|
|
44
49
|
min-width: 80px;
|
|
45
50
|
flex: 0 0 auto;
|
|
46
51
|
}
|
|
47
|
-
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
.sizeMd {
|
|
@@ -75,7 +79,6 @@ $fui-colorpicker-pointer-border: 2px !default;
|
|
|
75
79
|
.hexInput {
|
|
76
80
|
min-width: 120px;
|
|
77
81
|
}
|
|
78
|
-
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
.inputWrapper {
|
|
@@ -89,7 +92,27 @@ $fui-colorpicker-pointer-border: 2px !default;
|
|
|
89
92
|
@include field.shell;
|
|
90
93
|
|
|
91
94
|
flex-shrink: 0;
|
|
95
|
+
|
|
96
|
+
&:focus-visible,
|
|
97
|
+
&[data-popup-open] {
|
|
98
|
+
@include field.focus-state;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.wrapper[data-invalid] & {
|
|
102
|
+
@include field.invalid-state;
|
|
103
|
+
|
|
104
|
+
// Focused while invalid keeps the danger edge and takes the danger ring,
|
|
105
|
+
// the same pairing Input and Textarea render. Without it the ring stays
|
|
106
|
+
// accent-coloured and the control reads half-valid at the moment the user
|
|
107
|
+
// is actually in it.
|
|
108
|
+
&:focus-visible,
|
|
109
|
+
&[data-popup-open] {
|
|
110
|
+
@include field.invalid-focus-state;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
92
114
|
// Disabled state (opacity + pointer-events) comes from @include interactive-base.
|
|
115
|
+
@include high-contrast-outline;
|
|
93
116
|
}
|
|
94
117
|
|
|
95
118
|
// Hex input wrapper (using Input component)
|
|
@@ -112,8 +135,6 @@ $fui-colorpicker-pointer-border: 2px !default;
|
|
|
112
135
|
.popup {
|
|
113
136
|
@include popup.container;
|
|
114
137
|
|
|
115
|
-
border-radius: var(--fui-radius-lg, $fui-radius-lg);
|
|
116
|
-
|
|
117
138
|
// react-colorful styling overrides
|
|
118
139
|
:global(.react-colorful) {
|
|
119
140
|
width: var(--fui-colorpicker-size, #{$fui-colorpicker-size});
|
|
@@ -133,22 +154,11 @@ $fui-colorpicker-pointer-border: 2px !default;
|
|
|
133
154
|
:global(.react-colorful__pointer) {
|
|
134
155
|
width: var(--fui-colorpicker-pointer-size, #{$fui-colorpicker-pointer-size});
|
|
135
156
|
height: var(--fui-colorpicker-pointer-size, #{$fui-colorpicker-pointer-size});
|
|
136
|
-
border:
|
|
157
|
+
border: var(--fui-stroke-default, 2px) solid var(--fui-text-inverse, $fui-text-inverse);
|
|
137
158
|
box-shadow: var(--fui-shadow-md, $fui-shadow-md);
|
|
138
159
|
}
|
|
139
160
|
}
|
|
140
161
|
|
|
141
|
-
// ============================================
|
|
142
|
-
// Accessibility: High Contrast Mode
|
|
143
|
-
// ============================================
|
|
144
|
-
|
|
145
|
-
@media (prefers-contrast: more) {
|
|
146
|
-
.swatch {
|
|
147
|
-
border-width: 2px;
|
|
148
|
-
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
162
|
// ============================================
|
|
153
163
|
// Accessibility: Reduced Motion
|
|
154
164
|
// ============================================
|
|
@@ -25,7 +25,7 @@ function loadColorfulDeps(): Promise<void> {
|
|
|
25
25
|
_HexColorPicker = rc.HexColorPicker;
|
|
26
26
|
} catch {
|
|
27
27
|
_colorfulFailed = true;
|
|
28
|
-
if (
|
|
28
|
+
if (isDevelopmentBuild()) {
|
|
29
29
|
console.warn(
|
|
30
30
|
"[@usefragments/ui] ColorPicker: react-colorful is not installed. " +
|
|
31
31
|
"Install it with: npm install react-colorful"
|
|
@@ -55,6 +55,7 @@ import { Field } from "@base-ui/react/field";
|
|
|
55
55
|
import { useResolvedControlSize } from "../ComponentDefaults";
|
|
56
56
|
import { Input } from "../Input";
|
|
57
57
|
import styles from "./ColorPicker.module.scss";
|
|
58
|
+
import { isDevelopmentBuild } from "../../utils/env";
|
|
58
59
|
|
|
59
60
|
export interface ColorPickerProps extends Omit<
|
|
60
61
|
React.HTMLAttributes<HTMLDivElement>,
|
|
@@ -166,6 +167,7 @@ const ColorPickerRoot = React.forwardRef<HTMLDivElement, ColorPickerProps>(funct
|
|
|
166
167
|
className={styles.swatch}
|
|
167
168
|
style={{ backgroundColor: displayValue }}
|
|
168
169
|
disabled={disabled}
|
|
170
|
+
aria-invalid={error || undefined}
|
|
169
171
|
aria-label={label ? `Edit ${label} color` : "Edit color"}
|
|
170
172
|
/>
|
|
171
173
|
<BasePopover.Portal>
|
|
@@ -192,6 +194,9 @@ const ColorPickerRoot = React.forwardRef<HTMLDivElement, ColorPickerProps>(funct
|
|
|
192
194
|
onChange={handleInputChange}
|
|
193
195
|
onBlur={handleInputBlur}
|
|
194
196
|
disabled={disabled}
|
|
197
|
+
// Without this the hex field keeps its neutral border while the
|
|
198
|
+
// helper text turns red, so the error reads as a stray message.
|
|
199
|
+
error={error}
|
|
195
200
|
size={size}
|
|
196
201
|
className={styles.hexInput}
|
|
197
202
|
inputClassName={styles.hexInputField}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Combobox",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
4
|
+
"description": "Filters a list of options as the user types.",
|
|
5
|
+
"category": "inputs",
|
|
6
6
|
"tags": ["combobox", "autocomplete", "search", "select", "typeahead", "form", "multiselect"],
|
|
7
7
|
"status": "stable",
|
|
8
8
|
"sourcePath": "src/components/Combobox/index.tsx",
|
|
@@ -133,86 +133,85 @@
|
|
|
133
133
|
},
|
|
134
134
|
"usage": {
|
|
135
135
|
"when": [
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"Multiple selections from a searchable list"
|
|
136
|
+
"Lists too long to scan by eye",
|
|
137
|
+
"The user roughly knows the value they want",
|
|
138
|
+
"Autocomplete or typeahead",
|
|
139
|
+
"Multi-select from a searchable list"
|
|
141
140
|
],
|
|
142
141
|
"whenNot": [
|
|
143
|
-
"
|
|
144
|
-
"Free-form text with no
|
|
145
|
-
"
|
|
146
|
-
"Actions
|
|
142
|
+
"Under five options (use Select or RadioGroup)",
|
|
143
|
+
"Free-form text with no known options (use Input)",
|
|
144
|
+
"Short list nobody needs to search (use Select)",
|
|
145
|
+
"Actions rather than values (use Menu)"
|
|
147
146
|
],
|
|
148
147
|
"guidelines": [
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"Group related options with Combobox.Group
|
|
154
|
-
"
|
|
155
|
-
"Keep option text
|
|
156
|
-
"
|
|
148
|
+
"Placeholder names what is searchable",
|
|
149
|
+
"Set label so the field is announced",
|
|
150
|
+
"helperText for guidance, error for the failure reason",
|
|
151
|
+
"Override the built-in \"No results found\" with Combobox.Empty when you have better wording",
|
|
152
|
+
"Group related options with Combobox.Group in long lists",
|
|
153
|
+
"Filtering keeps wrapper composition, so groups and fragments survive",
|
|
154
|
+
"Keep option text short and searchable",
|
|
155
|
+
"multiple turns selections into removable chips"
|
|
157
156
|
],
|
|
158
157
|
"accessibility": [
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"
|
|
158
|
+
"Arrow keys, Enter, and Escape all work",
|
|
159
|
+
"Typing filters the list in place",
|
|
160
|
+
"Correct ARIA combobox roles and attributes",
|
|
161
|
+
"Filtered result counts are announced",
|
|
162
|
+
"Chips can be removed from the keyboard"
|
|
164
163
|
]
|
|
165
164
|
},
|
|
166
165
|
"examples": [
|
|
167
166
|
{
|
|
168
167
|
"name": "Default",
|
|
169
|
-
"description": "
|
|
168
|
+
"description": "Type to narrow the list; unmatched queries show a no-results row.",
|
|
170
169
|
"code": "<StatefulCombobox placeholder=\"Select a fruit\">\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Item value=\"apple\">Apple</Combobox.Item>\n <Combobox.Item value=\"banana\">Banana</Combobox.Item>\n <Combobox.Item value=\"orange\">Orange</Combobox.Item>\n <Combobox.Item value=\"grape\">Grape</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
171
170
|
},
|
|
172
171
|
{
|
|
173
172
|
"name": "Multiple Selection",
|
|
174
|
-
"description": "
|
|
173
|
+
"description": "Each pick becomes a removable chip in the field.",
|
|
175
174
|
"code": "<StatefulCombobox multiple placeholder=\"Select fruits...\">\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Item value=\"apple\">Apple</Combobox.Item>\n <Combobox.Item value=\"banana\">Banana</Combobox.Item>\n <Combobox.Item value=\"orange\">Orange</Combobox.Item>\n <Combobox.Item value=\"grape\">Grape</Combobox.Item>\n <Combobox.Item value=\"mango\">Mango</Combobox.Item>\n <Combobox.Item value=\"kiwi\">Kiwi</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
176
175
|
},
|
|
177
176
|
{
|
|
178
177
|
"name": "With Label and Helper Text",
|
|
179
|
-
"description": "
|
|
178
|
+
"description": "Helper text tells the user the field is searchable.",
|
|
180
179
|
"code": "<StatefulCombobox\n label=\"Assignee\"\n placeholder=\"Search assignees...\"\n helperText=\"Type to filter the list of available assignees.\"\n>\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Empty>No matches</Combobox.Empty>\n <Combobox.Item value=\"alice\">Alice Johnson</Combobox.Item>\n <Combobox.Item value=\"bob\">Bob Chen</Combobox.Item>\n <Combobox.Item value=\"carol\">Carol Smith</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
181
180
|
},
|
|
182
181
|
{
|
|
183
182
|
"name": "Error State",
|
|
184
|
-
"description": "
|
|
185
|
-
"code": "<Combobox\n label=\"Reviewer\"\n placeholder=\"Search reviewers...\"\n error=\"Please select a reviewer\"\n
|
|
183
|
+
"description": "Red border, and the message replaces helper text.",
|
|
184
|
+
"code": "<Combobox\n label=\"Reviewer\"\n placeholder=\"Search reviewers...\"\n error=\"Please select a reviewer\"\n>\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Item value=\"alice\">Alice</Combobox.Item>\n </Combobox.Content>\n</Combobox>"
|
|
186
185
|
},
|
|
187
186
|
{
|
|
188
187
|
"name": "With Groups",
|
|
189
|
-
"description": "
|
|
188
|
+
"description": "Headed sections stay intact while filtering.",
|
|
190
189
|
"code": "<StatefulCombobox placeholder=\"Search countries...\">\n <Combobox.Input />\n <Combobox.Content>\n <>\n <Combobox.Group>\n <Combobox.GroupLabel>North America</Combobox.GroupLabel>\n <Combobox.Item value=\"us\">United States</Combobox.Item>\n <Combobox.Item value=\"ca\">Canada</Combobox.Item>\n <Combobox.Item value=\"mx\">Mexico</Combobox.Item>\n </Combobox.Group>\n <Combobox.Group>\n <Combobox.GroupLabel>Europe</Combobox.GroupLabel>\n <Combobox.Item value=\"uk\">United Kingdom</Combobox.Item>\n <Combobox.Item value=\"de\">Germany</Combobox.Item>\n <Combobox.Item value=\"fr\">France</Combobox.Item>\n </Combobox.Group>\n <Combobox.Empty>No matching country</Combobox.Empty>\n </>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
191
190
|
},
|
|
192
191
|
{
|
|
193
192
|
"name": "With Empty State",
|
|
194
|
-
"description": "
|
|
195
|
-
"code": "<StatefulCombobox placeholder=\"
|
|
193
|
+
"description": "Combobox.Empty replaces the default no-results wording.",
|
|
194
|
+
"code": "<StatefulCombobox placeholder=\"Filter languages...\">\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Empty>No language matches that search</Combobox.Empty>\n <Combobox.Item value=\"js\">JavaScript</Combobox.Item>\n <Combobox.Item value=\"ts\">TypeScript</Combobox.Item>\n <Combobox.Item value=\"py\">Python</Combobox.Item>\n <Combobox.Item value=\"rs\">Rust</Combobox.Item>\n <Combobox.Item value=\"go\">Go</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
196
195
|
},
|
|
197
196
|
{
|
|
198
197
|
"name": "Scrollable List",
|
|
199
|
-
"description": "
|
|
198
|
+
"description": "Caps at four rows and half-shows the fifth as a scroll hint.",
|
|
200
199
|
"code": "<StatefulCombobox placeholder=\"Search languages...\">\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Empty>No results found</Combobox.Empty>\n <Combobox.Item value=\"js\">JavaScript</Combobox.Item>\n <Combobox.Item value=\"ts\">TypeScript</Combobox.Item>\n <Combobox.Item value=\"py\">Python</Combobox.Item>\n <Combobox.Item value=\"rs\">Rust</Combobox.Item>\n <Combobox.Item value=\"go\">Go</Combobox.Item>\n <Combobox.Item value=\"rb\">Ruby</Combobox.Item>\n <Combobox.Item value=\"java\">Java</Combobox.Item>\n <Combobox.Item value=\"swift\">Swift</Combobox.Item>\n <Combobox.Item value=\"kt\">Kotlin</Combobox.Item>\n <Combobox.Item value=\"cpp\">C++</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
201
200
|
},
|
|
202
201
|
{
|
|
203
202
|
"name": "Custom Max Visible Items",
|
|
204
|
-
"description": "
|
|
203
|
+
"description": "maxVisibleItems raises the cap to six rows.",
|
|
205
204
|
"code": "<StatefulCombobox placeholder=\"Search cities...\">\n <Combobox.Input />\n <Combobox.Content maxVisibleItems={6}>\n <Combobox.Empty>No results found</Combobox.Empty>\n <Combobox.Item value=\"nyc\">New York</Combobox.Item>\n <Combobox.Item value=\"lon\">London</Combobox.Item>\n <Combobox.Item value=\"tok\">Tokyo</Combobox.Item>\n <Combobox.Item value=\"par\">Paris</Combobox.Item>\n <Combobox.Item value=\"syd\">Sydney</Combobox.Item>\n <Combobox.Item value=\"ber\">Berlin</Combobox.Item>\n <Combobox.Item value=\"tor\">Toronto</Combobox.Item>\n <Combobox.Item value=\"sin\">Singapore</Combobox.Item>\n <Combobox.Item value=\"dub\">Dubai</Combobox.Item>\n <Combobox.Item value=\"sao\">São Paulo</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
206
205
|
},
|
|
207
206
|
{
|
|
208
207
|
"name": "Disabled",
|
|
209
|
-
"description": "
|
|
208
|
+
"description": "Dimmed and unfocusable.",
|
|
210
209
|
"code": "<Combobox disabled placeholder=\"Search...\">\n <Combobox.Input />\n <Combobox.Content>\n <Combobox.Item value=\"1\">Option 1</Combobox.Item>\n </Combobox.Content>\n</Combobox>"
|
|
211
210
|
},
|
|
212
211
|
{
|
|
213
212
|
"name": "Explicit Trigger",
|
|
214
|
-
"description": "
|
|
215
|
-
"code": "<StatefulCombobox placeholder=\"Search assignees...\">\n <Combobox.Input showTrigger={false} />\n
|
|
213
|
+
"description": "showTrigger={false} hands the open control to your own Combobox.Trigger.",
|
|
214
|
+
"code": "<StatefulCombobox placeholder=\"Search assignees...\">\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Combobox.Input showTrigger={false} />\n <Combobox.Trigger aria-label=\"Open assignee list\" />\n </div>\n <Combobox.Content>\n <Combobox.Item value=\"alice\">Alice</Combobox.Item>\n <Combobox.Item value=\"bob\">Bob</Combobox.Item>\n <Combobox.Item value=\"carol\">Carol</Combobox.Item>\n </Combobox.Content>\n</StatefulCombobox>"
|
|
216
215
|
}
|
|
217
216
|
],
|
|
218
217
|
"relations": [
|
|
@@ -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/action";
|
|
4
5
|
@use "../../recipes/field";
|
|
5
6
|
@use "../../recipes/layout";
|
|
@@ -44,9 +45,20 @@
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
&:has([data-disabled]) {
|
|
47
|
-
|
|
48
|
-
color: var(--fui-text-tertiary, $fui-text-tertiary);
|
|
48
|
+
@include field.disabled-state;
|
|
49
49
|
}
|
|
50
|
+
|
|
51
|
+
.wrapper[data-invalid] & {
|
|
52
|
+
@include field.invalid-state;
|
|
53
|
+
|
|
54
|
+
// Focused while invalid keeps the danger edge and takes the danger ring,
|
|
55
|
+
// the same pairing Input and Textarea render.
|
|
56
|
+
&:focus-within {
|
|
57
|
+
@include field.invalid-focus-state;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@include high-contrast-outline;
|
|
50
62
|
}
|
|
51
63
|
|
|
52
64
|
// Size variants for input wrapper — override --_field-h.
|
|
@@ -67,7 +79,7 @@
|
|
|
67
79
|
flex: 1;
|
|
68
80
|
min-width: layout.measure("inline-floor");
|
|
69
81
|
min-block-size: 0;
|
|
70
|
-
padding: 0;
|
|
82
|
+
padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
|
|
71
83
|
background: transparent;
|
|
72
84
|
border: none;
|
|
73
85
|
border-radius: var(--fui-radius-sm, $fui-radius-sm);
|
|
@@ -183,7 +195,7 @@
|
|
|
183
195
|
|
|
184
196
|
// Positioner — z-index must exceed Dialog positioner (51)
|
|
185
197
|
.positioner {
|
|
186
|
-
z-index:
|
|
198
|
+
z-index: var(--fui-overlay-layer-anchored, #{$fui-overlay-layer-anchored});
|
|
187
199
|
outline: none;
|
|
188
200
|
}
|
|
189
201
|
|
|
@@ -279,21 +291,6 @@
|
|
|
279
291
|
@include popup.group-label;
|
|
280
292
|
}
|
|
281
293
|
|
|
282
|
-
// ============================================
|
|
283
|
-
// Accessibility: High Contrast Mode
|
|
284
|
-
// ============================================
|
|
285
|
-
|
|
286
|
-
@media (prefers-contrast: more) {
|
|
287
|
-
.inputWrapper {
|
|
288
|
-
border-width: 2px;
|
|
289
|
-
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
290
|
-
|
|
291
|
-
&:focus-within {
|
|
292
|
-
border-color: var(--fui-color-accent, $fui-color-accent);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
294
|
// ============================================
|
|
298
295
|
// Accessibility: Reduced Motion
|
|
299
296
|
// ============================================
|
|
@@ -4,10 +4,7 @@ import * as React from "react";
|
|
|
4
4
|
import { Combobox as BaseCombobox } from "@base-ui/react/combobox";
|
|
5
5
|
import { useResolvedControlSize } from "../ComponentDefaults";
|
|
6
6
|
import { mergeAriaIds, useFormFieldIds, type FormFieldProps } from "../../utils/aria";
|
|
7
|
-
import {
|
|
8
|
-
POPUP_OFFSET_PX,
|
|
9
|
-
resolvePopupViewportRows,
|
|
10
|
-
} from "../../recipes/popup";
|
|
7
|
+
import { POPUP_OFFSET_PX, resolvePopupViewportRows } from "../../recipes/popup";
|
|
11
8
|
import styles from "./Combobox.module.scss";
|
|
12
9
|
|
|
13
10
|
// ============================================
|
|
@@ -181,6 +178,9 @@ interface ComboboxContextValue {
|
|
|
181
178
|
size: "sm" | "md" | "lg";
|
|
182
179
|
// Id applied to Combobox.Input so a native <label htmlFor> can target it.
|
|
183
180
|
inputId?: string;
|
|
181
|
+
/** Mirrors the wrapper's `data-invalid` onto the input as `aria-invalid`, so
|
|
182
|
+
* assistive tech hears the state the danger edge is painting. */
|
|
183
|
+
invalid?: boolean;
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
const EMPTY_STATIC_LABELS = new Map<string, string>();
|
|
@@ -293,6 +293,27 @@ function filterStaticChildren(
|
|
|
293
293
|
};
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
+
/**
|
|
297
|
+
* True when the consumer already supplied a `Combobox.Empty` slot anywhere in
|
|
298
|
+
* the content. Used to decide whether the built-in "no results" fallback is
|
|
299
|
+
* needed — without it an unmatched query renders an empty, collapsed popup.
|
|
300
|
+
*/
|
|
301
|
+
function containsEmptySlot(node: React.ReactNode): boolean {
|
|
302
|
+
let found = false;
|
|
303
|
+
React.Children.forEach(node, (child) => {
|
|
304
|
+
if (found || !React.isValidElement(child)) return;
|
|
305
|
+
if (child.type === ComboboxEmpty) {
|
|
306
|
+
found = true;
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const props = child.props as { children?: React.ReactNode };
|
|
310
|
+
if (props.children !== undefined && containsEmptySlot(props.children)) {
|
|
311
|
+
found = true;
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
return found;
|
|
315
|
+
}
|
|
316
|
+
|
|
296
317
|
// ============================================
|
|
297
318
|
// Components
|
|
298
319
|
// ============================================
|
|
@@ -404,6 +425,7 @@ const ComboboxRoot = React.forwardRef<HTMLDivElement, ComboboxProps>(function Co
|
|
|
404
425
|
registerTrigger,
|
|
405
426
|
size,
|
|
406
427
|
inputId,
|
|
428
|
+
invalid: hasError,
|
|
407
429
|
}),
|
|
408
430
|
[
|
|
409
431
|
placeholder,
|
|
@@ -416,14 +438,17 @@ const ComboboxRoot = React.forwardRef<HTMLDivElement, ComboboxProps>(function Co
|
|
|
416
438
|
registerTrigger,
|
|
417
439
|
size,
|
|
418
440
|
inputId,
|
|
441
|
+
hasError,
|
|
419
442
|
]
|
|
420
443
|
);
|
|
421
444
|
|
|
422
445
|
const wrapperClasses = [styles.wrapper, className].filter(Boolean).join(" ");
|
|
423
446
|
const helperClasses = [styles.helper, hasError && styles.helperError].filter(Boolean).join(" ");
|
|
424
447
|
|
|
448
|
+
// data-invalid lets the shell pick up the error border, the same hook Select,
|
|
449
|
+
// DatePicker and RadioGroup use; without it `error` renders only the message.
|
|
425
450
|
const wrapperContent = (inner: React.ReactNode) => (
|
|
426
|
-
<div ref={ref} className={wrapperClasses}>
|
|
451
|
+
<div ref={ref} className={wrapperClasses} data-invalid={hasError || undefined}>
|
|
427
452
|
{inner}
|
|
428
453
|
{helperText && (
|
|
429
454
|
<span id={helperId} className={helperClasses}>
|
|
@@ -572,6 +597,7 @@ function ComboboxInput({
|
|
|
572
597
|
placeholder={context.selectedValues.length === 0 ? inputPlaceholder : undefined}
|
|
573
598
|
id={inputId}
|
|
574
599
|
className={classes}
|
|
600
|
+
aria-invalid={context.invalid || undefined}
|
|
575
601
|
/>
|
|
576
602
|
{renderTrigger && (
|
|
577
603
|
<BaseCombobox.Trigger className={styles.trigger}>
|
|
@@ -589,6 +615,7 @@ function ComboboxInput({
|
|
|
589
615
|
placeholder={inputPlaceholder}
|
|
590
616
|
id={inputId}
|
|
591
617
|
className={classes}
|
|
618
|
+
aria-invalid={context.invalid || undefined}
|
|
592
619
|
/>
|
|
593
620
|
{renderTrigger && (
|
|
594
621
|
<BaseCombobox.Trigger className={styles.trigger}>
|
|
@@ -631,6 +658,14 @@ function ComboboxContent({
|
|
|
631
658
|
() => filterStaticChildren(children, visibleValues),
|
|
632
659
|
[children, visibleValues]
|
|
633
660
|
);
|
|
661
|
+
// No matches and no author-supplied empty slot would leave a bare, collapsed
|
|
662
|
+
// popup, so fall back to a readable "no results" row.
|
|
663
|
+
const popupChildren =
|
|
664
|
+
filteredContent.visibleItemCount === 0 && !containsEmptySlot(children) ? (
|
|
665
|
+
<ComboboxEmpty>No results found</ComboboxEmpty>
|
|
666
|
+
) : (
|
|
667
|
+
filteredContent.children
|
|
668
|
+
);
|
|
634
669
|
|
|
635
670
|
const popupStyle =
|
|
636
671
|
maxVisibleItems != null
|
|
@@ -650,7 +685,7 @@ function ComboboxContent({
|
|
|
650
685
|
>
|
|
651
686
|
<BaseCombobox.Popup {...htmlProps} className={popupClasses} style={popupStyle}>
|
|
652
687
|
<ComboboxFilteredItemIndexContext.Provider value={filteredItemIndices}>
|
|
653
|
-
{
|
|
688
|
+
{popupChildren}
|
|
654
689
|
</ComboboxFilteredItemIndexContext.Provider>
|
|
655
690
|
</BaseCombobox.Popup>
|
|
656
691
|
</BaseCombobox.Positioner>
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Command",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Filters a list of actions as the user types.",
|
|
5
5
|
"category": "navigation",
|
|
6
|
-
"tags": [
|
|
7
|
-
"command",
|
|
8
|
-
"palette",
|
|
9
|
-
"search",
|
|
10
|
-
"spotlight",
|
|
11
|
-
"quick-actions",
|
|
12
|
-
"cmdk"
|
|
13
|
-
],
|
|
6
|
+
"tags": ["command", "palette", "search", "spotlight", "quick-actions", "cmdk"],
|
|
14
7
|
"status": "stable",
|
|
15
8
|
"sourcePath": "src/components/Command/index.tsx",
|
|
16
9
|
"exportName": "Command",
|
|
@@ -54,27 +47,32 @@
|
|
|
54
47
|
"description": "Whether to loop keyboard navigation",
|
|
55
48
|
"default": "true",
|
|
56
49
|
"required": false
|
|
50
|
+
},
|
|
51
|
+
"hosted": {
|
|
52
|
+
"type": "boolean",
|
|
53
|
+
"description": "The Command sits inside another surface (a Popover, a Dialog) that draws the frame, so it draws none of its own",
|
|
54
|
+
"default": "false",
|
|
55
|
+
"required": false
|
|
57
56
|
}
|
|
58
57
|
},
|
|
59
58
|
"usage": {
|
|
60
59
|
"when": [
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"Inline
|
|
64
|
-
"
|
|
60
|
+
"A keyboard shortcut that jumps anywhere",
|
|
61
|
+
"Action lists too long to scan",
|
|
62
|
+
"Inline lists that need filtering",
|
|
63
|
+
"Search across everything the app can do"
|
|
65
64
|
],
|
|
66
65
|
"whenNot": [
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"Search with complex result types (build custom)"
|
|
66
|
+
"A handful of actions (use Menu)",
|
|
67
|
+
"Picking a value for a form (use Select or Combobox)",
|
|
68
|
+
"Fixed navigation (use Sidebar or Tabs)"
|
|
71
69
|
],
|
|
72
70
|
"guidelines": [
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
71
|
+
"Wrap in Dialog for the summon-anywhere palette",
|
|
72
|
+
"Group by category once the list gets long",
|
|
73
|
+
"Always supply Command.Empty",
|
|
74
|
+
"Add keywords so aliases and synonyms match",
|
|
75
|
+
"Label rows with a verb"
|
|
78
76
|
],
|
|
79
77
|
"accessibility": [
|
|
80
78
|
"Uses combobox + listbox ARIA pattern",
|
|
@@ -86,22 +84,22 @@
|
|
|
86
84
|
"examples": [
|
|
87
85
|
{
|
|
88
86
|
"name": "Default",
|
|
89
|
-
"description": "
|
|
87
|
+
"description": "Search field over a flat list.",
|
|
90
88
|
"code": "<div style={{ maxWidth: '400px', width: '100%' }}>\n <Command>\n <Command.Input placeholder=\"Type a command...\" />\n <Command.List>\n <Command.Item onItemSelect={() => {}}>Open File</Command.Item>\n <Command.Item onItemSelect={() => {}}>Save Document</Command.Item>\n <Command.Item onItemSelect={() => {}}>Print</Command.Item>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n</div>"
|
|
91
89
|
},
|
|
92
90
|
{
|
|
93
91
|
"name": "Dialog Command Palette",
|
|
94
|
-
"description": "
|
|
95
|
-
"code": "<Dialog>\n <Dialog.Trigger asChild>\n <Button variant=\"
|
|
92
|
+
"description": "The same list summoned over the page.",
|
|
93
|
+
"code": "<Dialog>\n <Dialog.Trigger asChild>\n <Button variant=\"soft\">Open Command Palette</Button>\n </Dialog.Trigger>\n <Dialog.Content width=\"sm\">\n <Command>\n <Command.Input placeholder=\"Search commands...\" />\n <Command.List>\n <Command.Group heading=\"Actions\">\n <Command.Item onItemSelect={() => {}}>New File</Command.Item>\n <Command.Item onItemSelect={() => {}}>Open Recent</Command.Item>\n </Command.Group>\n <Command.Separator />\n <Command.Group heading=\"Settings\">\n <Command.Item onItemSelect={() => {}}>Preferences</Command.Item>\n <Command.Item onItemSelect={() => {}}>Keyboard Shortcuts</Command.Item>\n </Command.Group>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n </Dialog.Content>\n</Dialog>"
|
|
96
94
|
},
|
|
97
95
|
{
|
|
98
96
|
"name": "With Groups",
|
|
99
|
-
"description": "
|
|
97
|
+
"description": "Category labels survive filtering.",
|
|
100
98
|
"code": "<div style={{ maxWidth: '400px', width: '100%' }}>\n <Command>\n <Command.Input placeholder=\"Search...\" />\n <Command.List>\n <Command.Group heading=\"Suggestions\">\n <Command.Item onItemSelect={() => {}}>Calendar</Command.Item>\n <Command.Item onItemSelect={() => {}}>Calculator</Command.Item>\n </Command.Group>\n <Command.Separator />\n <Command.Group heading=\"Settings\">\n <Command.Item onItemSelect={() => {}}>Profile</Command.Item>\n <Command.Item onItemSelect={() => {}}>Billing</Command.Item>\n <Command.Item disabled onItemSelect={() => {}}>\n Team (coming soon)\n </Command.Item>\n </Command.Group>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n</div>"
|
|
101
99
|
},
|
|
102
100
|
{
|
|
103
101
|
"name": "With Icons",
|
|
104
|
-
"description": "
|
|
102
|
+
"description": "Leading glyphs speed up scanning.",
|
|
105
103
|
"code": "<div style={{ maxWidth: '400px', width: '100%' }}>\n <Command>\n <Command.Input placeholder=\"What do you need?\" />\n <Command.List>\n <Command.Item onItemSelect={() => {}}>\n <span style={{ marginRight: '0.5rem', fontSize: '1rem' }}>+</span> New Document\n </Command.Item>\n <Command.Item onItemSelect={() => {}}>\n <span style={{ marginRight: '0.5rem', fontSize: '1rem' }}>{'>'}</span> Open Folder\n </Command.Item>\n <Command.Item onItemSelect={() => {}}>\n <span style={{ marginRight: '0.5rem', fontSize: '1rem' }}>?</span> Search\n </Command.Item>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n</div>"
|
|
106
104
|
}
|
|
107
105
|
],
|
|
@@ -132,26 +130,12 @@
|
|
|
132
130
|
"Command.Item keywords: string[] - extra filter terms",
|
|
133
131
|
"Command.Item onItemSelect: (value, event) => void - selection handler"
|
|
134
132
|
],
|
|
135
|
-
"a11yRules": [
|
|
136
|
-
"A11Y_COMBOBOX_ROLE",
|
|
137
|
-
"A11Y_LISTBOX_ROLE",
|
|
138
|
-
"A11Y_ACTIVE_DESCENDANT"
|
|
139
|
-
]
|
|
133
|
+
"a11yRules": ["A11Y_COMBOBOX_ROLE", "A11Y_LISTBOX_ROLE", "A11Y_ACTIVE_DESCENDANT"]
|
|
140
134
|
},
|
|
141
135
|
"ai": {
|
|
142
136
|
"compositionPattern": "compound",
|
|
143
|
-
"subComponents": [
|
|
144
|
-
|
|
145
|
-
"List",
|
|
146
|
-
"Item",
|
|
147
|
-
"Group",
|
|
148
|
-
"Empty",
|
|
149
|
-
"Separator"
|
|
150
|
-
],
|
|
151
|
-
"requiredChildren": [
|
|
152
|
-
"Input",
|
|
153
|
-
"List"
|
|
154
|
-
],
|
|
137
|
+
"subComponents": ["Input", "List", "Item", "Group", "Empty", "Separator"],
|
|
138
|
+
"requiredChildren": ["Input", "List"],
|
|
155
139
|
"commonPatterns": [
|
|
156
140
|
"<Dialog><Dialog.Trigger><Button>Open Palette</Button></Dialog.Trigger><Dialog.Content size=\"sm\"><Command><Command.Input placeholder=\"Search...\" /><Command.List><Command.Group heading=\"Actions\"><Command.Item onItemSelect={() => {}}>Action 1</Command.Item></Command.Group><Command.Empty>No results.</Command.Empty></Command.List></Command></Dialog.Content></Dialog>"
|
|
157
141
|
]
|