@usefragments/ui 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/assets/fragments-wordmark.cjs +2 -2
- package/dist/assets/fragments-wordmark.d.ts.map +1 -1
- package/dist/assets/fragments-wordmark.js +2 -2
- package/dist/assets/ui.css +4720 -4159
- package/dist/chart.cjs +24 -6
- package/dist/chart.js +24 -6
- package/dist/codeblock.cjs +55 -29
- package/dist/codeblock.js +55 -29
- package/dist/colorpicker.cjs +3 -1
- package/dist/colorpicker.js +3 -1
- package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
- package/dist/components/Accordion/Accordion.module.scss.js +8 -8
- package/dist/components/Alert/Alert.module.scss.cjs +15 -12
- package/dist/components/Alert/Alert.module.scss.js +15 -12
- package/dist/components/Alert/index.cjs +7 -1
- package/dist/components/Alert/index.d.ts +12 -6
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +7 -1
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
- package/dist/components/Avatar/Avatar.module.scss.js +14 -14
- package/dist/components/Badge/Badge.module.scss.cjs +19 -19
- package/dist/components/Badge/Badge.module.scss.js +19 -19
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
- package/dist/components/Box/Box.module.scss.cjs +152 -152
- package/dist/components/Box/Box.module.scss.js +152 -152
- package/dist/components/Box/index.cjs +64 -75
- package/dist/components/Box/index.d.ts +16 -16
- package/dist/components/Box/index.d.ts.map +1 -1
- package/dist/components/Box/index.js +64 -75
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
- package/dist/components/Button/Button.module.scss.cjs +14 -14
- package/dist/components/Button/Button.module.scss.js +14 -14
- package/dist/components/Card/Card.module.scss.cjs +29 -17
- package/dist/components/Card/Card.module.scss.js +30 -18
- package/dist/components/Card/index.cjs +8 -0
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +8 -0
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -9
- package/dist/components/Checkbox/Checkbox.module.scss.js +9 -9
- package/dist/components/Checkbox/index.cjs +2 -2
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/Chip/Chip.module.scss.cjs +15 -15
- package/dist/components/Chip/Chip.module.scss.js +15 -15
- package/dist/components/Chip/index.cjs +2 -1
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +2 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +26 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +26 -23
- package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
- package/dist/components/CodeBlock/css-variables-theme.js +98 -0
- package/dist/components/CodeBlock/index.d.ts +17 -3
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
- package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
- package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
- package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
- package/dist/components/ColorPicker/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
- package/dist/components/Combobox/Combobox.module.scss.js +21 -21
- package/dist/components/Combobox/index.cjs +17 -1
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +17 -1
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- package/dist/components/Command/index.cjs +26 -15
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +26 -15
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- package/dist/components/DataTable/DataTable.icons.cjs +6 -33
- package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.icons.js +6 -33
- package/dist/components/DataTable/DataTable.module.scss.cjs +27 -27
- package/dist/components/DataTable/DataTable.module.scss.js +27 -27
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
- package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
- package/dist/components/Dialog/Dialog.module.scss.js +14 -14
- package/dist/components/Dialog/index.cjs +11 -14
- package/dist/components/Dialog/index.d.ts +7 -7
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +11 -14
- package/dist/components/Drawer/Drawer.module.scss.cjs +29 -29
- package/dist/components/Drawer/Drawer.module.scss.js +29 -29
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- package/dist/components/Editor/index.d.ts +10 -10
- package/dist/components/Editor/index.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -8
- package/dist/components/EmptyState/EmptyState.module.scss.js +11 -8
- package/dist/components/EmptyState/index.cjs +8 -6
- package/dist/components/EmptyState/index.d.ts +9 -4
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +8 -6
- package/dist/components/Field/Field.module.scss.cjs +5 -5
- package/dist/components/Field/Field.module.scss.js +5 -5
- package/dist/components/Field/index.cjs +9 -1
- package/dist/components/Field/index.d.ts.map +1 -1
- package/dist/components/Field/index.js +9 -1
- package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
- package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
- package/dist/components/Grid/index.cjs +1 -1
- package/dist/components/Grid/index.js +1 -1
- package/dist/components/Header/Header.module.scss.cjs +33 -33
- package/dist/components/Header/Header.module.scss.js +33 -33
- package/dist/components/Header/index.cjs +17 -38
- package/dist/components/Header/index.d.ts +15 -11
- package/dist/components/Header/index.d.ts.map +1 -1
- package/dist/components/Header/index.js +17 -38
- package/dist/components/Icon/Icon.module.scss.cjs +15 -15
- package/dist/components/Icon/Icon.module.scss.js +15 -15
- package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
- package/dist/components/IconButton/IconButton.module.scss.js +8 -8
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.js +2 -1
- package/dist/components/Image/Image.module.scss.cjs +27 -27
- package/dist/components/Image/Image.module.scss.js +27 -27
- package/dist/components/Input/Input.module.scss.cjs +17 -17
- package/dist/components/Input/Input.module.scss.js +17 -17
- package/dist/components/Link/Link.module.scss.cjs +14 -10
- package/dist/components/Link/Link.module.scss.js +14 -10
- package/dist/components/Link/index.d.ts +1 -1
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/List/List.module.scss.cjs +19 -19
- package/dist/components/List/List.module.scss.js +19 -19
- package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
- package/dist/components/Listbox/Listbox.module.scss.js +8 -8
- package/dist/components/Loading/Loading.module.scss.cjs +34 -34
- package/dist/components/Loading/Loading.module.scss.js +34 -34
- package/dist/components/Loading/index.cjs +1 -1
- package/dist/components/Loading/index.js +1 -1
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Markdown/index.d.ts +2 -2
- package/dist/components/Markdown/index.d.ts.map +1 -1
- package/dist/components/Menu/Menu.module.scss.cjs +14 -14
- package/dist/components/Menu/Menu.module.scss.js +14 -14
- package/dist/components/Message/Message.module.scss.cjs +18 -18
- package/dist/components/Message/Message.module.scss.js +18 -18
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
- package/dist/components/NavigationMenu/index.cjs +32 -15
- package/dist/components/NavigationMenu/index.d.ts +12 -6
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +32 -15
- package/dist/components/Pagination/Pagination.module.scss.cjs +10 -10
- package/dist/components/Pagination/Pagination.module.scss.js +10 -10
- package/dist/components/Popover/Popover.module.scss.cjs +10 -10
- package/dist/components/Popover/Popover.module.scss.js +10 -10
- package/dist/components/Progress/Progress.module.scss.cjs +25 -25
- package/dist/components/Progress/Progress.module.scss.js +25 -25
- package/dist/components/Prompt/Prompt.module.scss.cjs +28 -28
- package/dist/components/Prompt/Prompt.module.scss.js +28 -28
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -15
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -15
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
- package/dist/components/ScrollArea/index.d.ts +4 -4
- package/dist/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/components/ScrollArea/scroll-state.d.ts +5 -5
- package/dist/components/Select/Select.module.scss.cjs +21 -21
- package/dist/components/Select/Select.module.scss.js +21 -21
- package/dist/components/Separator/Separator.module.scss.cjs +11 -11
- package/dist/components/Separator/Separator.module.scss.js +11 -11
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
- package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
- package/dist/components/Sidebar/index.cjs +12 -35
- package/dist/components/Sidebar/index.d.ts +19 -19
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +12 -35
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
- package/dist/components/Slider/Slider.module.scss.cjs +12 -12
- package/dist/components/Slider/Slider.module.scss.js +12 -12
- package/dist/components/Stack/Stack.module.scss.cjs +25 -25
- package/dist/components/Stack/Stack.module.scss.js +25 -25
- package/dist/components/Stack/index.cjs +1 -1
- package/dist/components/Stack/index.js +1 -1
- package/dist/components/Switch/Switch.module.scss.cjs +9 -9
- package/dist/components/Switch/Switch.module.scss.js +9 -9
- package/dist/components/Table/Table.module.scss.cjs +19 -19
- package/dist/components/Table/Table.module.scss.js +19 -19
- package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
- package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
- package/dist/components/TableOfContents/index.cjs +13 -9
- package/dist/components/TableOfContents/index.d.ts +5 -3
- package/dist/components/TableOfContents/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.js +13 -9
- package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
- package/dist/components/Tabs/Tabs.module.scss.js +12 -12
- package/dist/components/Tabs/index.cjs +26 -6
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +26 -6
- package/dist/components/Text/Text.module.scss.cjs +87 -75
- package/dist/components/Text/Text.module.scss.js +87 -75
- package/dist/components/Text/index.cjs +49 -41
- package/dist/components/Text/index.d.ts +12 -11
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +49 -41
- package/dist/components/Textarea/Textarea.module.scss.cjs +24 -24
- package/dist/components/Textarea/Textarea.module.scss.js +24 -24
- package/dist/components/Theme/index.cjs +2 -1
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +2 -1
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +9 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +9 -6
- package/dist/components/ThemeToggle/index.cjs +31 -6
- package/dist/components/ThemeToggle/index.d.ts +7 -2
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +32 -7
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
- package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
- package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
- package/dist/components/Tooltip/index.cjs +24 -40
- package/dist/components/Tooltip/index.d.ts +4 -4
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +24 -40
- package/dist/components/VisuallyHidden/index.d.ts +2 -2
- package/dist/data-table.cjs +2 -1
- package/dist/data-table.js +2 -1
- package/dist/datepicker.cjs +3 -2
- package/dist/datepicker.js +3 -2
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +21 -29
- package/dist/measurements/generated.cjs +9 -1
- package/dist/measurements/generated.d.ts +7 -0
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +9 -1
- package/dist/utils/a11y.cjs +5 -2
- package/dist/utils/a11y.d.ts +5 -5
- package/dist/utils/a11y.d.ts.map +1 -1
- package/dist/utils/a11y.js +5 -2
- package/dist/utils/canonical-stamp.cjs +2 -8
- package/dist/utils/canonical-stamp.d.ts.map +1 -1
- package/dist/utils/canonical-stamp.js +1 -7
- package/dist/utils/css-warning.cjs +1 -1
- package/dist/utils/css-warning.js +1 -1
- package/dist/utils/env.cjs +17 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +17 -0
- package/dist/utils/keyboard-shortcuts.cjs +3 -10
- package/dist/utils/keyboard-shortcuts.d.ts +4 -4
- package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
- package/dist/utils/keyboard-shortcuts.js +3 -10
- package/dist/utils/seed-derivation.cjs +10 -6
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +10 -6
- package/fragments.json +1 -1
- package/package.json +6 -4
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Alert/Alert.contract.json +37 -53
- package/src/components/Alert/Alert.module.scss +24 -0
- package/src/components/Alert/index.tsx +55 -29
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +53 -40
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +4 -1
- package/src/components/Badge/Badge.contract.json +37 -42
- package/src/components/Badge/Badge.module.scss +9 -2
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +12 -7
- package/src/components/Button/Button.module.scss +8 -7
- package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
- package/src/components/Card/Card.module.scss +82 -1
- package/src/components/Card/index.tsx +21 -2
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/index.tsx +36 -6
- package/src/components/Checkbox/Checkbox.contract.json +24 -24
- package/src/components/Checkbox/Checkbox.module.scss +32 -23
- package/src/components/Checkbox/index.tsx +4 -2
- package/src/components/Chip/Chip.contract.json +33 -40
- package/src/components/Chip/Chip.module.scss +2 -2
- package/src/components/Chip/index.tsx +2 -1
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +40 -15
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +91 -35
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +15 -12
- package/src/components/ColorPicker/index.tsx +5 -1
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +1 -1
- package/src/components/Combobox/index.tsx +31 -5
- package/src/components/Command/Command.contract.json +21 -43
- package/src/components/Command/index.tsx +58 -47
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +12 -8
- package/src/components/DataTable/index.tsx +8 -7
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +12 -5
- package/src/components/DatePicker/index.tsx +5 -2
- package/src/components/Dialog/Dialog.module.scss +3 -3
- package/src/components/Dialog/index.tsx +47 -37
- package/src/components/Drawer/Drawer.contract.json +22 -36
- package/src/components/Editor/Editor.contract.json +31 -48
- package/src/components/Editor/Editor.module.scss +36 -14
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +31 -43
- package/src/components/EmptyState/EmptyState.module.scss +8 -0
- package/src/components/EmptyState/index.tsx +48 -23
- package/src/components/Field/Field.contract.json +28 -46
- package/src/components/Field/index.tsx +5 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +10 -3
- package/src/components/Form/Form.contract.json +20 -20
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/index.tsx +10 -10
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +36 -21
- package/src/components/Header/index.tsx +134 -122
- package/src/components/Icon/Icon.contract.json +22 -62
- package/src/components/IconButton/IconButton.contract.json +34 -18
- package/src/components/IconButton/IconButton.module.scss +6 -7
- package/src/components/IconButton/index.tsx +2 -1
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +26 -32
- package/src/components/Input/Input.module.scss +3 -2
- package/src/components/Link/Link.contract.json +32 -52
- package/src/components/Link/Link.module.scss +23 -6
- package/src/components/Link/index.tsx +1 -1
- package/src/components/List/List.contract.json +23 -52
- package/src/components/List/List.module.scss +1 -1
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Loading/Loading.contract.json +37 -61
- package/src/components/Loading/Loading.module.scss +10 -7
- package/src/components/Loading/index.tsx +2 -2
- package/src/components/Main/Main.contract.json +17 -9
- package/src/components/Markdown/Markdown.contract.json +22 -43
- package/src/components/Markdown/Markdown.module.scss +43 -5
- package/src/components/Markdown/index.tsx +48 -49
- package/src/components/Menu/Menu.contract.json +25 -41
- package/src/components/Menu/Menu.module.scss +23 -8
- package/src/components/Message/Message.contract.json +29 -52
- package/src/components/Message/Message.module.scss +12 -5
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +64 -19
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +2 -2
- package/src/components/Popover/Popover.contract.json +24 -46
- package/src/components/Popover/Popover.module.scss +6 -5
- package/src/components/Progress/Progress.contract.json +32 -28
- package/src/components/Progress/Progress.module.scss +3 -2
- package/src/components/Prompt/Prompt.contract.json +31 -47
- package/src/components/Prompt/Prompt.module.scss +13 -5
- package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
- package/src/components/RadioGroup/RadioGroup.module.scss +13 -14
- package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
- package/src/components/ScrollArea/ScrollArea.module.scss +15 -15
- package/src/components/ScrollArea/index.tsx +16 -16
- package/src/components/ScrollArea/scroll-state.ts +24 -24
- package/src/components/Select/Select.module.scss +2 -2
- package/src/components/Separator/Separator.contract.json +24 -48
- package/src/components/Sidebar/Sidebar.contract.json +35 -67
- package/src/components/Sidebar/Sidebar.module.scss +22 -13
- package/src/components/Sidebar/index.tsx +164 -164
- package/src/components/Skeleton/Skeleton.contract.json +28 -54
- package/src/components/Skeleton/Skeleton.module.scss +27 -10
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +3 -3
- package/src/components/Stack/Stack.contract.json +29 -56
- package/src/components/Stack/Stack.module.scss +13 -12
- package/src/components/Stack/index.tsx +3 -3
- package/src/components/Switch/Switch.contract.json +33 -46
- package/src/components/Switch/Switch.module.scss +64 -26
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +15 -3
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +15 -5
- package/src/components/TableOfContents/index.tsx +26 -9
- package/src/components/Tabs/Tabs.contract.json +24 -45
- package/src/components/Tabs/Tabs.module.scss +1 -1
- package/src/components/Tabs/index.tsx +15 -3
- package/src/components/Text/Text.contract.json +30 -72
- package/src/components/Text/Text.module.scss +21 -4
- package/src/components/Text/index.tsx +113 -75
- package/src/components/Textarea/Textarea.contract.json +25 -43
- package/src/components/Textarea/Textarea.module.scss +2 -4
- package/src/components/Theme/Theme.contract.json +32 -51
- package/src/components/Theme/index.tsx +2 -1
- package/src/components/ThemeToggle/ThemeToggle.module.scss +23 -7
- package/src/components/ThemeToggle/index.tsx +43 -7
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
- package/src/components/Toast/Toast.contract.json +30 -40
- package/src/components/Toast/Toast.module.scss +1 -1
- package/src/components/ToggleGroup/ToggleGroup.contract.json +29 -30
- package/src/components/ToggleGroup/ToggleGroup.module.scss +38 -5
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +2 -2
- package/src/measurements/generated.ts +9 -2
- package/src/measurements/measurements.json +7 -0
- package/src/recipes/_boolean-range.scss +3 -11
- package/src/recipes/_field.scss +5 -1
- package/src/recipes/_layout.scss +14 -7
- package/src/recipes/_popup.scss +12 -2
- package/src/recipes/_prose.scss +13 -5
- package/src/recipes/_table-chrome.scss +16 -2
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +20 -19
- package/src/tokens/_computed.scss +5 -16
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +6 -1
- package/src/tokens/_measurements.generated.scss +14 -1
- package/src/tokens/_mixins.scss +7 -8
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_seeds.scss +20 -20
- package/src/tokens/_variables.scss +183 -38
- package/src/utils/a11y.tsx +69 -69
- package/src/utils/aria.ts +3 -3
- package/src/utils/canonical-stamp.ts +2 -12
- package/src/utils/css-warning.ts +7 -7
- package/src/utils/env.ts +25 -0
- package/src/utils/keyboard-shortcuts.ts +131 -126
- package/src/utils/seed-derivation.ts +10 -6
- package/src/components/Button/Button.contract.json +0 -218
- package/src/components/Card/Card.contract.json +0 -175
- package/src/components/DataTable/DataTable.contract.json +0 -302
- package/src/components/Dialog/Dialog.contract.json +0 -159
- package/src/components/Select/Select.contract.json +0 -259
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Menu",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
6
|
-
"tags": [
|
|
7
|
-
"menu",
|
|
8
|
-
"dropdown",
|
|
9
|
-
"actions",
|
|
10
|
-
"context-menu",
|
|
11
|
-
"commands",
|
|
12
|
-
"submenu"
|
|
13
|
-
],
|
|
4
|
+
"description": "Drops a list of actions below a trigger, driveable entirely by keyboard.",
|
|
5
|
+
"category": "overlays",
|
|
6
|
+
"tags": ["menu", "dropdown", "actions", "context-menu", "commands", "submenu"],
|
|
14
7
|
"status": "stable",
|
|
15
8
|
"sourcePath": "src/components/Menu/index.tsx",
|
|
16
9
|
"exportName": "Menu",
|
|
@@ -52,26 +45,23 @@
|
|
|
52
45
|
},
|
|
53
46
|
"usage": {
|
|
54
47
|
"when": [
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"Nested menus with submenus"
|
|
48
|
+
"Actions that do not fit in the toolbar",
|
|
49
|
+
"Right-click context actions",
|
|
50
|
+
"Account and profile actions",
|
|
51
|
+
"Related actions that read better grouped"
|
|
60
52
|
],
|
|
61
53
|
"whenNot": [
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
54
|
+
"Picking a value for a form (use Select)",
|
|
55
|
+
"Moving between pages or views (use Tabs or NavigationMenu)",
|
|
56
|
+
"One of a few visible choices (use RadioGroup)"
|
|
65
57
|
],
|
|
66
58
|
"guidelines": [
|
|
67
|
-
"Group related actions
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"Use Menu.Submenu for nested secondary options",
|
|
74
|
-
"Menu.Trigger supports asChild for links/router-link components (single valid element child required)"
|
|
59
|
+
"Group related actions and separate the rest",
|
|
60
|
+
"Show the keyboard shortcut where one exists",
|
|
61
|
+
"Mark destructive actions with the danger variant",
|
|
62
|
+
"Past a dozen rows, reach for Command instead",
|
|
63
|
+
"Nest at most one level of submenu",
|
|
64
|
+
"asChild on Trigger needs a single element child"
|
|
75
65
|
],
|
|
76
66
|
"accessibility": [
|
|
77
67
|
"Full keyboard navigation with arrow keys",
|
|
@@ -84,37 +74,37 @@
|
|
|
84
74
|
"examples": [
|
|
85
75
|
{
|
|
86
76
|
"name": "Default",
|
|
87
|
-
"description": "
|
|
77
|
+
"description": "Plain actions, one per row.",
|
|
88
78
|
"code": "<Menu>\n <Menu.Trigger asChild>\n <Button variant=\"secondary\">Actions</Button>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.Item onSelect={() => {}}>Edit</Menu.Item>\n <Menu.Item onSelect={() => {}}>Duplicate</Menu.Item>\n <Menu.Separator />\n <Menu.Item danger onSelect={() => {}}>Delete</Menu.Item>\n </Menu.Content>\n</Menu>"
|
|
89
79
|
},
|
|
90
80
|
{
|
|
91
81
|
"name": "With Shortcuts",
|
|
92
|
-
"description": "
|
|
82
|
+
"description": "Trailing keys teach the faster path.",
|
|
93
83
|
"code": "<Menu>\n <Menu.Trigger asChild>\n <Button variant=\"secondary\">Edit</Button>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.Item shortcut=\"Ctrl+Z\" onSelect={() => {}}>Undo</Menu.Item>\n <Menu.Item shortcut=\"Ctrl+Y\" onSelect={() => {}}>Redo</Menu.Item>\n <Menu.Separator />\n <Menu.Item shortcut=\"Ctrl+C\" onSelect={() => {}}>Copy</Menu.Item>\n <Menu.Item shortcut=\"Ctrl+V\" onSelect={() => {}}>Paste</Menu.Item>\n </Menu.Content>\n</Menu>"
|
|
94
84
|
},
|
|
95
85
|
{
|
|
96
86
|
"name": "With Groups",
|
|
97
|
-
"description": "
|
|
87
|
+
"description": "Labels separate unrelated actions.",
|
|
98
88
|
"code": "<Menu>\n <Menu.Trigger asChild>\n <Button variant=\"secondary\">Options</Button>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.Group>\n <Menu.GroupLabel>View</Menu.GroupLabel>\n <Menu.Item onSelect={() => {}}>Zoom In</Menu.Item>\n <Menu.Item onSelect={() => {}}>Zoom Out</Menu.Item>\n </Menu.Group>\n <Menu.Separator />\n <Menu.Group>\n <Menu.GroupLabel>Layout</Menu.GroupLabel>\n <Menu.Item onSelect={() => {}}>Grid View</Menu.Item>\n <Menu.Item onSelect={() => {}}>List View</Menu.Item>\n </Menu.Group>\n </Menu.Content>\n</Menu>"
|
|
99
89
|
},
|
|
100
90
|
{
|
|
101
91
|
"name": "With Checkboxes",
|
|
102
|
-
"description": "
|
|
92
|
+
"description": "Rows that stay open while you toggle them.",
|
|
103
93
|
"code": "<Menu>\n <Menu.Trigger asChild>\n <Button variant=\"secondary\">Display</Button>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.CheckboxItem defaultChecked>Show Grid</Menu.CheckboxItem>\n <Menu.CheckboxItem defaultChecked>Show Rulers</Menu.CheckboxItem>\n <Menu.CheckboxItem>Show Guides</Menu.CheckboxItem>\n </Menu.Content>\n</Menu>"
|
|
104
94
|
},
|
|
105
95
|
{
|
|
106
96
|
"name": "With Checked Items",
|
|
107
|
-
"description": "
|
|
97
|
+
"description": "Ticks mark which filters are on.",
|
|
108
98
|
"code": "<CheckedItemsMenuDemo />"
|
|
109
99
|
},
|
|
110
100
|
{
|
|
111
101
|
"name": "With Submenu",
|
|
112
|
-
"description": "
|
|
102
|
+
"description": "Secondary options nest one level deep.",
|
|
113
103
|
"code": "<Menu>\n <Menu.Trigger asChild>\n <Button variant=\"secondary\">File</Button>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.Item onSelect={() => {}}>New File</Menu.Item>\n <Menu.Item onSelect={() => {}}>Open</Menu.Item>\n <Menu.Separator />\n <Menu.Submenu>\n <Menu.SubmenuTrigger>Export As</Menu.SubmenuTrigger>\n <Menu.Content side=\"right\" align=\"start\">\n <Menu.Item onSelect={() => {}}>PNG</Menu.Item>\n <Menu.Item onSelect={() => {}}>SVG</Menu.Item>\n <Menu.Item onSelect={() => {}}>PDF</Menu.Item>\n </Menu.Content>\n </Menu.Submenu>\n <Menu.Separator />\n <Menu.Item danger onSelect={() => {}}>Delete</Menu.Item>\n </Menu.Content>\n</Menu>"
|
|
114
104
|
},
|
|
115
105
|
{
|
|
116
106
|
"name": "Link Trigger",
|
|
117
|
-
"description": "
|
|
107
|
+
"description": "asChild lets a link open it.",
|
|
118
108
|
"code": "<Menu>\n <Menu.Trigger asChild>\n <a href=\"#menu-actions\">Open menu</a>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.Item onSelect={() => {}}>Inspect</Menu.Item>\n <Menu.Item onSelect={() => {}}>Rename</Menu.Item>\n </Menu.Content>\n</Menu>"
|
|
119
109
|
}
|
|
120
110
|
],
|
|
@@ -140,10 +130,7 @@
|
|
|
140
130
|
"Menu.Item shortcut: string - keyboard shortcut text",
|
|
141
131
|
"Menu.Item checked: boolean - check indicator for selection state"
|
|
142
132
|
],
|
|
143
|
-
"a11yRules": [
|
|
144
|
-
"A11Y_MENU_KEYBOARD",
|
|
145
|
-
"A11Y_MENU_ROLE"
|
|
146
|
-
]
|
|
133
|
+
"a11yRules": ["A11Y_MENU_KEYBOARD", "A11Y_MENU_ROLE"]
|
|
147
134
|
},
|
|
148
135
|
"ai": {
|
|
149
136
|
"compositionPattern": "compound",
|
|
@@ -160,10 +147,7 @@
|
|
|
160
147
|
"Submenu",
|
|
161
148
|
"SubmenuTrigger"
|
|
162
149
|
],
|
|
163
|
-
"requiredChildren": [
|
|
164
|
-
"Trigger",
|
|
165
|
-
"Content"
|
|
166
|
-
],
|
|
150
|
+
"requiredChildren": ["Trigger", "Content"],
|
|
167
151
|
"commonPatterns": [
|
|
168
152
|
"<Menu><Menu.Trigger asChild><Button>Actions</Button></Menu.Trigger><Menu.Content><Menu.Item>{action1}</Menu.Item><Menu.Separator /><Menu.Item danger>{delete}</Menu.Item></Menu.Content></Menu>"
|
|
169
153
|
]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@use "../../tokens/variables" as *;
|
|
2
|
+
@use "../../recipes/layout" as layout;
|
|
2
3
|
@use "../../recipes/popup" as popup;
|
|
3
4
|
@use "../../recipes/typography" as typography;
|
|
4
5
|
|
|
@@ -6,23 +7,37 @@
|
|
|
6
7
|
z-index: var(--fui-overlay-layer-anchored, 52);
|
|
7
8
|
outline: none;
|
|
8
9
|
pointer-events: auto;
|
|
10
|
+
|
|
11
|
+
// The popup is absolutely positioned inside the positioner whenever a
|
|
12
|
+
// Menu.Viewport is present (Base UI anchors it with top/bottom: 0). Without an
|
|
13
|
+
// explicit box the positioner collapses to zero height and any flipped
|
|
14
|
+
// (side="top") menu renders a full popup-height away from its trigger.
|
|
15
|
+
inline-size: var(--positioner-width);
|
|
16
|
+
block-size: var(--positioner-height);
|
|
9
17
|
}
|
|
10
18
|
|
|
11
19
|
.popup {
|
|
12
20
|
@include popup.container;
|
|
13
21
|
|
|
14
|
-
min-inline-size:
|
|
22
|
+
min-inline-size: layout.measure("menu-min");
|
|
15
23
|
margin: 0;
|
|
16
24
|
list-style: none;
|
|
17
|
-
opacity:
|
|
18
|
-
transform:
|
|
25
|
+
opacity: 0;
|
|
26
|
+
transform: scale(0.95);
|
|
19
27
|
transform-origin: var(--transform-origin);
|
|
28
|
+
transition:
|
|
29
|
+
opacity var(--fui-transition-fast, $fui-transition-fast),
|
|
30
|
+
transform var(--fui-transition-fast, $fui-transition-fast);
|
|
31
|
+
|
|
32
|
+
&[data-open] {
|
|
33
|
+
opacity: 1;
|
|
34
|
+
transform: scale(1);
|
|
35
|
+
}
|
|
20
36
|
|
|
21
|
-
&[data-open],
|
|
22
37
|
&[data-starting-style],
|
|
23
38
|
&[data-ending-style] {
|
|
24
|
-
opacity:
|
|
25
|
-
transform:
|
|
39
|
+
opacity: 0;
|
|
40
|
+
transform: scale(0.95);
|
|
26
41
|
}
|
|
27
42
|
}
|
|
28
43
|
|
|
@@ -126,8 +141,8 @@
|
|
|
126
141
|
block-size: 0;
|
|
127
142
|
margin-inline-start: auto;
|
|
128
143
|
border-style: solid;
|
|
129
|
-
border-width: var(--fui-
|
|
130
|
-
var(--fui-
|
|
144
|
+
border-width: var(--fui-raw-space-4, 4px) 0 var(--fui-raw-space-4, 4px)
|
|
145
|
+
var(--fui-raw-space-6, 6px);
|
|
131
146
|
border-color: transparent transparent transparent var(--fui-text-secondary, $fui-text-secondary);
|
|
132
147
|
}
|
|
133
148
|
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Message",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Shows one chat message, styled by who sent it.",
|
|
5
5
|
"category": "ai",
|
|
6
|
-
"tags": [
|
|
7
|
-
"message",
|
|
8
|
-
"chat",
|
|
9
|
-
"ai",
|
|
10
|
-
"conversation",
|
|
11
|
-
"bubble"
|
|
12
|
-
],
|
|
6
|
+
"tags": ["message", "chat", "ai", "conversation", "bubble"],
|
|
13
7
|
"status": "stable",
|
|
14
8
|
"sourcePath": "src/components/Message/index.tsx",
|
|
15
9
|
"exportName": "Message",
|
|
@@ -26,11 +20,7 @@
|
|
|
26
20
|
"type": "enum",
|
|
27
21
|
"description": "Message role determines styling and alignment",
|
|
28
22
|
"required": true,
|
|
29
|
-
"values": [
|
|
30
|
-
"user",
|
|
31
|
-
"assistant",
|
|
32
|
-
"system"
|
|
33
|
-
]
|
|
23
|
+
"values": ["user", "assistant", "system"]
|
|
34
24
|
},
|
|
35
25
|
"children": {
|
|
36
26
|
"type": "node",
|
|
@@ -42,12 +32,7 @@
|
|
|
42
32
|
"description": "Message state",
|
|
43
33
|
"default": "complete",
|
|
44
34
|
"required": false,
|
|
45
|
-
"values": [
|
|
46
|
-
"sending",
|
|
47
|
-
"streaming",
|
|
48
|
-
"complete",
|
|
49
|
-
"error"
|
|
50
|
-
]
|
|
35
|
+
"values": ["sending", "streaming", "complete", "error"]
|
|
51
36
|
},
|
|
52
37
|
"timestamp": {
|
|
53
38
|
"type": "object",
|
|
@@ -67,24 +52,24 @@
|
|
|
67
52
|
},
|
|
68
53
|
"usage": {
|
|
69
54
|
"when": [
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
55
|
+
"Individual turns in a chat transcript",
|
|
56
|
+
"AI assistant and chatbot interfaces",
|
|
57
|
+
"User and assistant turns that must read differently",
|
|
58
|
+
"Turns carrying copy, regenerate, or feedback actions"
|
|
74
59
|
],
|
|
75
60
|
"whenNot": [
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
61
|
+
"Plain text with no chat context (use Text)",
|
|
62
|
+
"Notifications (use Alert or Toast)",
|
|
63
|
+
"Threads with nested replies (use Card with a custom layout)"
|
|
79
64
|
],
|
|
80
65
|
"guidelines": [
|
|
81
|
-
"Always
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"User
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
66
|
+
"Always set role — it drives alignment, avatar, and chrome",
|
|
67
|
+
"status covers sending, streaming, and error",
|
|
68
|
+
"Hide avatars with avatar={null}, or showAvatars={false} on ConversationList",
|
|
69
|
+
"User bubbles cap at 80% of the inline measure so the two sides stay distinct",
|
|
70
|
+
"Chrome stays on neutral surfaces; reserve accent for actions and semantic state",
|
|
71
|
+
"Add timestamps once a conversation runs long",
|
|
72
|
+
"Give assistant turns hover actions such as copy and regenerate"
|
|
88
73
|
],
|
|
89
74
|
"accessibility": [
|
|
90
75
|
"Uses semantic HTML for message structure",
|
|
@@ -96,43 +81,43 @@
|
|
|
96
81
|
"examples": [
|
|
97
82
|
{
|
|
98
83
|
"name": "User Message",
|
|
99
|
-
"description": "
|
|
84
|
+
"description": "Right-aligned and capped at 80% of the available width.",
|
|
100
85
|
"code": "<Message role=\"user\">\n <Message.Content>\n Hello! Can you help me with a coding question?\n </Message.Content>\n</Message>"
|
|
101
86
|
},
|
|
102
87
|
{
|
|
103
88
|
"name": "Assistant Message",
|
|
104
|
-
"description": "
|
|
89
|
+
"description": "Left-aligned with an avatar and a wider measure.",
|
|
105
90
|
"code": "<Message role=\"assistant\">\n <Message.Content>\n Of course! I'd be happy to help. What would you like to know?\n </Message.Content>\n</Message>"
|
|
106
91
|
},
|
|
107
92
|
{
|
|
108
93
|
"name": "System Message",
|
|
109
|
-
"description": "
|
|
94
|
+
"description": "Centred and quiet, for context rather than conversation.",
|
|
110
95
|
"code": "<Message role=\"system\">\n <Message.Content>\n Conversation started. Model: GPT-4\n </Message.Content>\n</Message>"
|
|
111
96
|
},
|
|
112
97
|
{
|
|
113
98
|
"name": "Streaming",
|
|
114
|
-
"description": "
|
|
99
|
+
"description": "A blinking caret trails the text as it arrives.",
|
|
115
100
|
"code": "<Message role=\"assistant\" status=\"streaming\">\n <Message.Content>\n I'm currently generating a response for you\n </Message.Content>\n</Message>"
|
|
116
101
|
},
|
|
117
102
|
{
|
|
118
103
|
"name": "With Timestamp",
|
|
119
|
-
"description": "
|
|
104
|
+
"description": "A relative send time sits beneath the bubble.",
|
|
120
105
|
"code": "<Message role=\"assistant\" timestamp={new Date(Date.now() - 300000)}>\n <Message.Content>\n This message was sent 5 minutes ago.\n </Message.Content>\n <Message.Timestamp />\n</Message>"
|
|
121
106
|
},
|
|
122
107
|
{
|
|
123
108
|
"name": "Error State",
|
|
124
|
-
"description": "
|
|
109
|
+
"description": "A failed send turns the bubble and its border red.",
|
|
125
110
|
"code": "<Message role=\"user\" status=\"error\">\n <Message.Content>\n This message failed to send.\n </Message.Content>\n</Message>"
|
|
126
111
|
},
|
|
127
112
|
{
|
|
128
113
|
"name": "Custom Avatars",
|
|
129
|
-
"description": "
|
|
114
|
+
"description": "Photos replace the default glyphs on both sides.",
|
|
130
115
|
"code": "<>\n <Message\n role=\"user\"\n avatar={<Message.Avatar src=\"https://i.pravatar.cc/64?u=user\" alt=\"Jane\" />}\n >\n <Message.Content>\n Can you help me understand this error?\n </Message.Content>\n </Message>\n <Message\n role=\"assistant\"\n avatar={<Message.Avatar src=\"https://i.pravatar.cc/64?u=bot\" alt=\"AI Assistant\" />}\n >\n <Message.Content>\n Sure! Let me take a look at that for you.\n </Message.Content>\n </Message>\n</>"
|
|
131
116
|
},
|
|
132
117
|
{
|
|
133
118
|
"name": "With Actions",
|
|
134
|
-
"description": "
|
|
135
|
-
"code": "<Message\n role=\"assistant\"\n actions={\n <>\n <
|
|
119
|
+
"description": "Controls stay hidden until the pointer enters the row.",
|
|
120
|
+
"code": "<Message\n role=\"assistant\"\n actions={\n <>\n <Button variant=\"ghost\" size=\"xs\">\n Copy\n </Button>\n <Button variant=\"ghost\" size=\"xs\">\n Regenerate\n </Button>\n </>\n }\n>\n <Message.Content>\n Hover over this message to see the actions.\n </Message.Content>\n</Message>"
|
|
136
121
|
}
|
|
137
122
|
],
|
|
138
123
|
"relations": [
|
|
@@ -163,19 +148,11 @@
|
|
|
163
148
|
"Avatar.src: string - image URL for avatar",
|
|
164
149
|
"Avatar.alt: string - alt text for image avatar"
|
|
165
150
|
],
|
|
166
|
-
"a11yRules": [
|
|
167
|
-
"A11Y_COLOR_CONTRAST",
|
|
168
|
-
"A11Y_MOTION_PREFERENCE"
|
|
169
|
-
]
|
|
151
|
+
"a11yRules": ["A11Y_COLOR_CONTRAST", "A11Y_MOTION_PREFERENCE"]
|
|
170
152
|
},
|
|
171
153
|
"ai": {
|
|
172
154
|
"compositionPattern": "compound",
|
|
173
|
-
"subComponents": [
|
|
174
|
-
"Content",
|
|
175
|
-
"Actions",
|
|
176
|
-
"Timestamp",
|
|
177
|
-
"Avatar"
|
|
178
|
-
]
|
|
155
|
+
"subComponents": ["Content", "Actions", "Timestamp", "Avatar"]
|
|
179
156
|
},
|
|
180
157
|
"provenance": {
|
|
181
158
|
"source": "migrated",
|
|
@@ -26,12 +26,16 @@
|
|
|
26
26
|
flex-direction: row-reverse;
|
|
27
27
|
margin-inline-start: auto;
|
|
28
28
|
|
|
29
|
+
// Cap against the conversation width, not the bubble's own shrink-wrapped
|
|
30
|
+
// width. On .content the percentage resolves against an already-collapsed
|
|
31
|
+
// parent and squeezes short messages until they break mid-word.
|
|
32
|
+
max-inline-size: 80%;
|
|
33
|
+
|
|
29
34
|
.body {
|
|
30
35
|
align-items: flex-end;
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
.content {
|
|
34
|
-
max-inline-size: 80%;
|
|
35
39
|
background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
|
|
36
40
|
color: var(--fui-text-primary, $fui-text-primary);
|
|
37
41
|
}
|
|
@@ -58,7 +62,8 @@
|
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
.error .content {
|
|
61
|
-
border: var(--fui-stroke-hairline) solid
|
|
65
|
+
border: var(--fui-stroke-hairline, 1px) solid
|
|
66
|
+
var(--fui-color-danger-border, $fui-color-danger-border);
|
|
62
67
|
background: var(--fui-color-danger-bg, $fui-color-danger-bg);
|
|
63
68
|
color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
64
69
|
}
|
|
@@ -102,7 +107,9 @@
|
|
|
102
107
|
padding-block: layout.gap("sm");
|
|
103
108
|
padding-inline: layout.gap("md");
|
|
104
109
|
border-radius: var(--fui-radius-lg, $fui-radius-lg);
|
|
105
|
-
|
|
110
|
+
// break-word, not anywhere: `anywhere` drops min-content to a single
|
|
111
|
+
// character, collapsing every shrink-to-fit ancestor around the bubble.
|
|
112
|
+
overflow-wrap: break-word;
|
|
106
113
|
|
|
107
114
|
p {
|
|
108
115
|
@include prose.paragraph;
|
|
@@ -140,9 +147,9 @@
|
|
|
140
147
|
display: inline-block;
|
|
141
148
|
inline-size: 0.5em;
|
|
142
149
|
block-size: 1em;
|
|
143
|
-
margin-inline-start: var(--fui-raw-space-2);
|
|
150
|
+
margin-inline-start: var(--fui-raw-space-2, 2px);
|
|
144
151
|
background-color: currentColor;
|
|
145
|
-
animation: blink
|
|
152
|
+
animation: blink var(--fui-duration-pulse, $fui-duration-pulse) step-end infinite;
|
|
146
153
|
}
|
|
147
154
|
|
|
148
155
|
@keyframes blink {
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "NavigationMenu",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Site navigation whose dropdowns become a drawer on small screens.",
|
|
5
5
|
"category": "navigation",
|
|
6
|
-
"tags": [
|
|
7
|
-
"navigation",
|
|
8
|
-
"menu",
|
|
9
|
-
"header",
|
|
10
|
-
"dropdown",
|
|
11
|
-
"navbar",
|
|
12
|
-
"mobile",
|
|
13
|
-
"responsive",
|
|
14
|
-
"drawer"
|
|
15
|
-
],
|
|
6
|
+
"tags": ["navigation", "menu", "header", "dropdown", "navbar", "mobile", "responsive", "drawer"],
|
|
16
7
|
"status": "stable",
|
|
17
8
|
"sourcePath": "src/components/NavigationMenu/index.tsx",
|
|
18
9
|
"exportName": "NavigationMenu",
|
|
@@ -24,7 +15,8 @@
|
|
|
24
15
|
"orientation: horizontal|vertical (default: horizontal)",
|
|
25
16
|
"delayDuration: number (default: 200)",
|
|
26
17
|
"skipDelayDuration: number (default: 300)",
|
|
27
|
-
"icons: object"
|
|
18
|
+
"icons: object",
|
|
19
|
+
"mobileBreakpoint: md|lg (default: md)"
|
|
28
20
|
],
|
|
29
21
|
"props": {
|
|
30
22
|
"children": {
|
|
@@ -53,10 +45,7 @@
|
|
|
53
45
|
"description": "'horizontal' | 'vertical'",
|
|
54
46
|
"default": "horizontal",
|
|
55
47
|
"required": false,
|
|
56
|
-
"values": [
|
|
57
|
-
"horizontal",
|
|
58
|
-
"vertical"
|
|
59
|
-
]
|
|
48
|
+
"values": ["horizontal", "vertical"]
|
|
60
49
|
},
|
|
61
50
|
"delayDuration": {
|
|
62
51
|
"type": "number",
|
|
@@ -74,30 +63,37 @@
|
|
|
74
63
|
"type": "object",
|
|
75
64
|
"description": "Optional icon overrides for triggerChevron, mobileMenu, mobileClose, and drawerClose controls",
|
|
76
65
|
"required": false
|
|
66
|
+
},
|
|
67
|
+
"mobileBreakpoint": {
|
|
68
|
+
"type": "enum",
|
|
69
|
+
"description": "Viewport breakpoint below which the mobile drawer replaces desktop navigation",
|
|
70
|
+
"default": "md",
|
|
71
|
+
"required": false,
|
|
72
|
+
"values": ["md", "lg"]
|
|
77
73
|
}
|
|
78
74
|
},
|
|
79
75
|
"usage": {
|
|
80
76
|
"when": [
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
77
|
+
"Header navigation with more than links",
|
|
78
|
+
"Dropdowns carrying titles, descriptions, or icons",
|
|
79
|
+
"Navigation that must survive a phone screen",
|
|
80
|
+
"Several sections that animate between each other"
|
|
85
81
|
],
|
|
86
82
|
"whenNot": [
|
|
87
|
-
"
|
|
88
|
-
"Application
|
|
89
|
-
"
|
|
90
|
-
"
|
|
83
|
+
"Flat links with no dropdowns (use Header.Nav)",
|
|
84
|
+
"Application actions like cut and paste (use Menu)",
|
|
85
|
+
"Persistent side navigation (use Sidebar)",
|
|
86
|
+
"Showing where the user already is (use Breadcrumbs)"
|
|
91
87
|
],
|
|
92
88
|
"guidelines": [
|
|
93
|
-
"Place inside Header
|
|
94
|
-
"
|
|
95
|
-
"Use
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
89
|
+
"Place it inside Header for site-level navigation",
|
|
90
|
+
"Add Viewport to animate between panels",
|
|
91
|
+
"Use MobileContent for sections that only make sense in the drawer",
|
|
92
|
+
"Title plus description for rich panels, plain Link for the rest",
|
|
93
|
+
"asChild on Link composes your handler and honours preventDefault()",
|
|
94
|
+
"Desktop triggers open on hover after a configurable delay",
|
|
95
|
+
"Point icons at your own icon package to replace the chevrons",
|
|
96
|
+
"Set mobileBreakpoint=\"lg\" when the shell drops its sidebar below 1024px"
|
|
101
97
|
],
|
|
102
98
|
"accessibility": [
|
|
103
99
|
"Uses disclosure pattern (not menu role) per W3C guidance",
|
|
@@ -110,27 +106,27 @@
|
|
|
110
106
|
"examples": [
|
|
111
107
|
{
|
|
112
108
|
"name": "Default",
|
|
113
|
-
"description": "Two
|
|
109
|
+
"description": "Two dropdowns beside one plain link.",
|
|
114
110
|
"code": "<NavigationMenu>\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"products\">\n <NavigationMenu.Trigger>Products</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <NavigationMenu.Link href=\"/analytics\" title=\"Analytics\" description=\"Track your metrics and KPIs.\" />\n <NavigationMenu.Link href=\"/automation\" title=\"Automation\" description=\"Automate your workflows.\" />\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n <NavigationMenu.Item value=\"resources\">\n <NavigationMenu.Trigger>Resources</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <NavigationMenu.Link href=\"/docs\" title=\"Documentation\" description=\"Comprehensive API reference.\" />\n <NavigationMenu.Link href=\"/blog\" title=\"Blog\" description=\"Latest news and updates.\" />\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n <NavigationMenu.Item>\n <NavigationMenu.Link href=\"/pricing\">Pricing</NavigationMenu.Link>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n</NavigationMenu>"
|
|
115
111
|
},
|
|
116
112
|
{
|
|
117
113
|
"name": "With Rich Content",
|
|
118
|
-
"description": "
|
|
114
|
+
"description": "A grid of icons, titles, and descriptions.",
|
|
119
115
|
"code": "<NavigationMenu>\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"platform\">\n <NavigationMenu.Trigger>Platform</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '4px', padding: '8px', minWidth: '400px' }}>\n <NavigationMenu.Link\n href=\"/dashboard\"\n title=\"Dashboard\"\n description=\"Overview of your project metrics.\"\n />\n <NavigationMenu.Link\n href=\"/analytics\"\n title=\"Analytics\"\n description=\"Deep dive into your data.\"\n />\n <NavigationMenu.Link\n href=\"/reports\"\n title=\"Reports\"\n description=\"Generate custom reports.\"\n />\n <NavigationMenu.Link\n href=\"/settings\"\n title=\"Settings\"\n description=\"Configure your workspace.\"\n />\n </div>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n</NavigationMenu>"
|
|
120
116
|
},
|
|
121
117
|
{
|
|
122
118
|
"name": "With Simple Links",
|
|
123
|
-
"description": "
|
|
119
|
+
"description": "Link lists where descriptions would be noise.",
|
|
124
120
|
"code": "<NavigationMenu>\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"company\">\n <NavigationMenu.Trigger>Company</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <div style={{ display: 'flex', flexDirection: 'column', padding: '4px', minWidth: '160px' }}>\n <NavigationMenu.Link href=\"/about\">About</NavigationMenu.Link>\n <NavigationMenu.Link href=\"/careers\">Careers</NavigationMenu.Link>\n <NavigationMenu.Link href=\"/contact\">Contact</NavigationMenu.Link>\n </div>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n <NavigationMenu.Item>\n <NavigationMenu.Link href=\"/blog\">Blog</NavigationMenu.Link>\n </NavigationMenu.Item>\n <NavigationMenu.Item>\n <NavigationMenu.Link href=\"/docs\">Docs</NavigationMenu.Link>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n</NavigationMenu>"
|
|
125
121
|
},
|
|
126
122
|
{
|
|
127
123
|
"name": "With Featured Card",
|
|
128
|
-
"description": "
|
|
124
|
+
"description": "One promoted item leads the panel.",
|
|
129
125
|
"code": "<NavigationMenu>\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"learn\">\n <NavigationMenu.Trigger>Learn</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '8px', padding: '8px', minWidth: '420px' }}>\n <NavigationMenu.Link\n href=\"/quickstart\"\n title=\"Quick Start\"\n description=\"Get up and running in 5 minutes with our getting started guide.\"\n featured\n />\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <NavigationMenu.Link href=\"/docs\" title=\"Documentation\" description=\"API reference and guides.\" />\n <NavigationMenu.Link href=\"/examples\" title=\"Examples\" description=\"Browse example projects.\" />\n </div>\n </div>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n</NavigationMenu>"
|
|
130
126
|
},
|
|
131
127
|
{
|
|
132
128
|
"name": "Vertical",
|
|
133
|
-
"description": "
|
|
129
|
+
"description": "Panels open to the side instead of below.",
|
|
134
130
|
"code": "<div style={{ display: 'flex' }}>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"overview\">\n <NavigationMenu.Trigger>Overview</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <div style={{ padding: '8px', minWidth: '200px' }}>\n <NavigationMenu.Link href=\"/intro\" title=\"Introduction\" description=\"Learn the basics.\" />\n </div>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n <NavigationMenu.Item value=\"guides\">\n <NavigationMenu.Trigger>Guides</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <div style={{ padding: '8px', minWidth: '200px' }}>\n <NavigationMenu.Link href=\"/install\" title=\"Installation\" description=\"Get started quickly.\" />\n <NavigationMenu.Link href=\"/config\" title=\"Configuration\" description=\"Customize your setup.\" />\n </div>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n </NavigationMenu>\n</div>"
|
|
135
131
|
}
|
|
136
132
|
],
|
|
@@ -163,15 +159,12 @@
|
|
|
163
159
|
"orientation: horizontal | vertical — layout direction",
|
|
164
160
|
"delayDuration: number — hover open delay (default: 200ms)",
|
|
165
161
|
"icons: { triggerChevron?, mobileMenu?, mobileClose?, drawerClose? } — custom internal control icons",
|
|
162
|
+
"mobileBreakpoint: md | lg — mobile drawer breakpoint (default: md)",
|
|
166
163
|
"NavigationMenu.Link: title + description + icon for structured links, or children for simple links",
|
|
167
164
|
"NavigationMenu.Link asChild: composes child and menu click handlers (preventDefault keeps menu open)",
|
|
168
165
|
"NavigationMenu.MobileContent: slot for extra mobile-only sections"
|
|
169
166
|
],
|
|
170
|
-
"a11yRules": [
|
|
171
|
-
"A11Y_DISCLOSURE_PATTERN",
|
|
172
|
-
"A11Y_KEYBOARD_NAV",
|
|
173
|
-
"A11Y_FOCUS_TRAP"
|
|
174
|
-
]
|
|
167
|
+
"a11yRules": ["A11Y_DISCLOSURE_PATTERN", "A11Y_KEYBOARD_NAV", "A11Y_FOCUS_TRAP"]
|
|
175
168
|
},
|
|
176
169
|
"ai": {
|
|
177
170
|
"compositionPattern": "compound",
|
|
@@ -187,9 +180,7 @@
|
|
|
187
180
|
"MobileContent",
|
|
188
181
|
"MobileSection"
|
|
189
182
|
],
|
|
190
|
-
"requiredChildren": [
|
|
191
|
-
"List"
|
|
192
|
-
],
|
|
183
|
+
"requiredChildren": ["List"],
|
|
193
184
|
"commonPatterns": [
|
|
194
185
|
"<NavigationMenu><NavigationMenu.List><NavigationMenu.Item value=\"docs\"><NavigationMenu.Trigger>Docs</NavigationMenu.Trigger><NavigationMenu.Content><NavigationMenu.Link href=\"/guides\" title=\"Guides\" description=\"Learn the basics\" /></NavigationMenu.Content></NavigationMenu.Item></NavigationMenu.List><NavigationMenu.Viewport /></NavigationMenu>"
|
|
195
186
|
]
|