@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,15 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Image",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Renders a picture at a fixed shape with a built-in fallback when loading fails.",
|
|
5
5
|
"category": "display",
|
|
6
|
-
"tags": [
|
|
7
|
-
"image",
|
|
8
|
-
"media",
|
|
9
|
-
"photo",
|
|
10
|
-
"picture",
|
|
11
|
-
"visual"
|
|
12
|
-
],
|
|
6
|
+
"tags": ["image", "media", "photo", "picture", "visual"],
|
|
13
7
|
"status": "stable",
|
|
14
8
|
"sourcePath": "src/components/Image/index.tsx",
|
|
15
9
|
"exportName": "Image",
|
|
@@ -44,25 +38,14 @@
|
|
|
44
38
|
"description": "Aspect ratio of the image container",
|
|
45
39
|
"default": "auto",
|
|
46
40
|
"required": false,
|
|
47
|
-
"values": [
|
|
48
|
-
"1:1",
|
|
49
|
-
"4:3",
|
|
50
|
-
"16:9",
|
|
51
|
-
"21:9",
|
|
52
|
-
"auto"
|
|
53
|
-
]
|
|
41
|
+
"values": ["1:1", "4:3", "16:9", "21:9", "auto"]
|
|
54
42
|
},
|
|
55
43
|
"objectFit": {
|
|
56
44
|
"type": "enum",
|
|
57
45
|
"description": "How the image fits within its container",
|
|
58
46
|
"default": "cover",
|
|
59
47
|
"required": false,
|
|
60
|
-
"values": [
|
|
61
|
-
"cover",
|
|
62
|
-
"contain",
|
|
63
|
-
"fill",
|
|
64
|
-
"none"
|
|
65
|
-
]
|
|
48
|
+
"values": ["cover", "contain", "fill", "none"]
|
|
66
49
|
},
|
|
67
50
|
"width": {
|
|
68
51
|
"type": "union",
|
|
@@ -79,13 +62,7 @@
|
|
|
79
62
|
"description": "Border radius",
|
|
80
63
|
"default": "none",
|
|
81
64
|
"required": false,
|
|
82
|
-
"values": [
|
|
83
|
-
"none",
|
|
84
|
-
"sm",
|
|
85
|
-
"md",
|
|
86
|
-
"lg",
|
|
87
|
-
"full"
|
|
88
|
-
]
|
|
65
|
+
"values": ["none", "sm", "md", "lg", "full"]
|
|
89
66
|
},
|
|
90
67
|
"fallback": {
|
|
91
68
|
"type": "node",
|
|
@@ -120,50 +97,45 @@
|
|
|
120
97
|
},
|
|
121
98
|
"usage": {
|
|
122
99
|
"when": [
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"User-uploaded content that may fail to load",
|
|
126
|
-
"Thumbnails in lists or galleries"
|
|
100
|
+
"Product shots, thumbnails, and hero art",
|
|
101
|
+
"Uploads you do not control and cannot trust to load"
|
|
127
102
|
],
|
|
128
103
|
"whenNot": [
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"SVG illustrations (use inline SVG or Image component)"
|
|
104
|
+
"A person (use Avatar)",
|
|
105
|
+
"A symbol (use Icon)",
|
|
106
|
+
"Pure decoration behind content (use a CSS background)"
|
|
133
107
|
],
|
|
134
108
|
"guidelines": [
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"Use imgProps / onImageLoad / onImageError when you need lower-level img control"
|
|
109
|
+
"Set aspectRatio so a grid holds its shape before the file arrives",
|
|
110
|
+
"objectFit=\"contain\" for logos, \"cover\" for photography",
|
|
111
|
+
"Always give fallback something to say",
|
|
112
|
+
"imgProps, onImageLoad, and onImageError expose the raw img when you need it"
|
|
140
113
|
],
|
|
141
114
|
"accessibility": [
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"Ensure sufficient contrast between image and surrounding content"
|
|
115
|
+
"alt is required — describe what the picture shows",
|
|
116
|
+
"Decoration takes alt=\"\"",
|
|
117
|
+
"Words baked into an image must be repeated in alt"
|
|
146
118
|
]
|
|
147
119
|
},
|
|
148
120
|
"examples": [
|
|
149
121
|
{
|
|
150
122
|
"name": "Default",
|
|
151
|
-
"description": "
|
|
123
|
+
"description": "src plus alt — the shape follows the file.",
|
|
152
124
|
"code": "<Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=400&h=300&fit=crop\"\n alt=\"Code on a screen\"\n width={300}\n/>"
|
|
153
125
|
},
|
|
154
126
|
{
|
|
155
127
|
"name": "Aspect Ratios",
|
|
156
|
-
"description": "
|
|
128
|
+
"description": "Lock the frame so a grid stays even whatever the file is.",
|
|
157
129
|
"code": "<div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }}>\n <Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=200&h=200&fit=crop\"\n alt=\"Square image\"\n aspectRatio=\"1:1\"\n width={100}\n />\n <Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=200&h=150&fit=crop\"\n alt=\"4:3 image\"\n aspectRatio=\"4:3\"\n width={120}\n />\n <Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=320&h=180&fit=crop\"\n alt=\"16:9 image\"\n aspectRatio=\"16:9\"\n width={160}\n />\n</div>"
|
|
158
130
|
},
|
|
159
131
|
{
|
|
160
132
|
"name": "Rounded Corners",
|
|
161
|
-
"description": "
|
|
133
|
+
"description": "Rounding softens the frame; match it to the surface it sits on.",
|
|
162
134
|
"code": "<div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}>\n <Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=100&h=100&fit=crop\"\n alt=\"No rounding\"\n rounded=\"none\"\n width={80}\n height={80}\n />\n <Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=100&h=100&fit=crop\"\n alt=\"Medium rounding\"\n rounded=\"md\"\n width={80}\n height={80}\n />\n <Image\n src=\"https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=100&h=100&fit=crop\"\n alt=\"Full rounding\"\n rounded=\"full\"\n width={80}\n height={80}\n />\n</div>"
|
|
163
135
|
},
|
|
164
136
|
{
|
|
165
137
|
"name": "With Fallback",
|
|
166
|
-
"description": "
|
|
138
|
+
"description": "A dead URL shows this instead of a broken-image glyph.",
|
|
167
139
|
"code": "<Image\n src=\"https://invalid-url.example/image.jpg\"\n alt=\"Image that will fail\"\n width={200}\n height={150}\n rounded=\"md\"\n fallback={\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', background: 'var(--fui-color-surface-secondary)' }}>\n <span style={{ color: 'var(--fui-color-text-tertiary)' }}>No image</span>\n </div>\n }\n/>"
|
|
168
140
|
}
|
|
169
141
|
],
|
|
@@ -189,16 +161,11 @@
|
|
|
189
161
|
"fallback: ReactNode - loading/error content",
|
|
190
162
|
"imgProps/onImageLoad/onImageError - low-level img customization and events"
|
|
191
163
|
],
|
|
192
|
-
"a11yRules": [
|
|
193
|
-
"A11Y_IMG_ALT",
|
|
194
|
-
"A11Y_IMG_DECORATIVE"
|
|
195
|
-
]
|
|
164
|
+
"a11yRules": ["A11Y_IMG_ALT", "A11Y_IMG_DECORATIVE"]
|
|
196
165
|
},
|
|
197
166
|
"ai": {
|
|
198
167
|
"compositionPattern": "compound",
|
|
199
|
-
"subComponents": [
|
|
200
|
-
"Root"
|
|
201
|
-
]
|
|
168
|
+
"subComponents": ["Root"]
|
|
202
169
|
},
|
|
203
170
|
"provenance": {
|
|
204
171
|
"source": "migrated",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Input",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
4
|
+
"description": "Collects a single line of user-entered text.",
|
|
5
|
+
"category": "inputs",
|
|
6
6
|
"tags": ["form", "input", "text"],
|
|
7
7
|
"status": "stable",
|
|
8
8
|
"sourcePath": "src/components/Input/index.tsx",
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"size: sm|md|lg (default: md)",
|
|
16
16
|
"disabled: boolean (default: false)",
|
|
17
17
|
"error: boolean (default: false)",
|
|
18
|
-
"success: boolean (default: false)",
|
|
19
18
|
"label: string",
|
|
20
19
|
"required: boolean (default: false)",
|
|
21
20
|
"helperText: string",
|
|
@@ -78,12 +77,6 @@
|
|
|
78
77
|
"default": "false",
|
|
79
78
|
"required": false
|
|
80
79
|
},
|
|
81
|
-
"success": {
|
|
82
|
-
"type": "boolean",
|
|
83
|
-
"description": "Whether to show success/validated styling",
|
|
84
|
-
"default": "false",
|
|
85
|
-
"required": false
|
|
86
|
-
},
|
|
87
80
|
"label": {
|
|
88
81
|
"type": "string",
|
|
89
82
|
"description": "Label text displayed above input",
|
|
@@ -181,10 +174,9 @@
|
|
|
181
174
|
},
|
|
182
175
|
"usage": {
|
|
183
176
|
"when": [
|
|
184
|
-
"
|
|
185
|
-
"Email, password, phone number, or URL input",
|
|
177
|
+
"Single-line answers: name, email, password, phone, URL",
|
|
186
178
|
"Search fields",
|
|
187
|
-
"Short form
|
|
179
|
+
"Short free-form values a list cannot cover"
|
|
188
180
|
],
|
|
189
181
|
"whenNot": [
|
|
190
182
|
"Multi-line text (use Textarea)",
|
|
@@ -193,83 +185,73 @@
|
|
|
193
185
|
"Date/time input (use DatePicker)"
|
|
194
186
|
],
|
|
195
187
|
"guidelines": [
|
|
196
|
-
"
|
|
197
|
-
"
|
|
198
|
-
"
|
|
199
|
-
"
|
|
200
|
-
"Use the shortcut prop for
|
|
201
|
-
"
|
|
188
|
+
"Give every field a label",
|
|
189
|
+
"Match type to the data — it drives validation and mobile keyboards",
|
|
190
|
+
"Placeholder shows format; it never replaces the label",
|
|
191
|
+
"Pair error with helperText so the reason is announced",
|
|
192
|
+
"Use the shortcut prop for kbd hints instead of custom markup",
|
|
193
|
+
"shortcut is display-only; shortcutBehavior=\"focus-input\" adds the global hotkey"
|
|
202
194
|
],
|
|
203
195
|
"accessibility": [
|
|
204
|
-
"
|
|
205
|
-
"Error
|
|
206
|
-
"Required fields
|
|
196
|
+
"Label is programmatically tied to the input",
|
|
197
|
+
"Error text is announced to screen readers",
|
|
198
|
+
"Required fields are marked"
|
|
207
199
|
]
|
|
208
200
|
},
|
|
209
201
|
"examples": [
|
|
210
202
|
{
|
|
211
203
|
"name": "Default",
|
|
212
|
-
"description": "
|
|
204
|
+
"description": "Label plus a placeholder that hints the format.",
|
|
213
205
|
"code": "<Input label=\"Name\" placeholder=\"Enter your name\" />"
|
|
214
206
|
},
|
|
215
207
|
{
|
|
216
208
|
"name": "With Value",
|
|
217
|
-
"description": "
|
|
209
|
+
"description": "Starts with a value already in the field.",
|
|
218
210
|
"code": "<Input label=\"Email\" type=\"email\" value=\"user@example.com\" />"
|
|
219
211
|
},
|
|
220
212
|
{
|
|
221
213
|
"name": "With Helper",
|
|
222
|
-
"description": "
|
|
214
|
+
"description": "Supporting text sits under the field.",
|
|
223
215
|
"code": "<Input\n label=\"Password\"\n type=\"password\"\n placeholder=\"Create a password\"\n helperText=\"Must be at least 8 characters\"\n/>"
|
|
224
216
|
},
|
|
225
217
|
{
|
|
226
218
|
"name": "Error State",
|
|
227
|
-
"description": "
|
|
219
|
+
"description": "Red border, and helperText becomes the reason.",
|
|
228
220
|
"code": "<Input\n label=\"Email\"\n type=\"email\"\n value=\"invalid-email\"\n error\n helperText=\"Please enter a valid email address\"\n/>"
|
|
229
221
|
},
|
|
230
222
|
{
|
|
231
223
|
"name": "Disabled",
|
|
232
|
-
"description": "
|
|
233
|
-
"code": "<Input label=\"Username\" value=\"
|
|
224
|
+
"description": "Dimmed, unfocusable, still shows its value.",
|
|
225
|
+
"code": "<Input label=\"Username\" value=\"ada.lovelace\" disabled />"
|
|
234
226
|
},
|
|
235
227
|
{
|
|
236
228
|
"name": "Required",
|
|
237
|
-
"description": "
|
|
229
|
+
"description": "Asterisk marks the field as mandatory.",
|
|
238
230
|
"code": "<Input\n label=\"Email\"\n type=\"email\"\n placeholder=\"user@example.com\"\n required\n/>"
|
|
239
231
|
},
|
|
240
232
|
{
|
|
241
233
|
"name": "Sizes",
|
|
242
|
-
"description": "
|
|
234
|
+
"description": "Three heights: sm, md, lg.",
|
|
243
235
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px', maxWidth: '300px' }}>\n <Input label=\"Small\" size=\"sm\" placeholder=\"Small input\" />\n <Input label=\"Medium\" size=\"md\" placeholder=\"Medium input\" />\n <Input label=\"Large\" size=\"lg\" placeholder=\"Large input\" />\n</div>"
|
|
244
236
|
},
|
|
245
237
|
{
|
|
246
238
|
"name": "Bare Input (Field Composition)",
|
|
247
|
-
"description": "
|
|
239
|
+
"description": "Drops the built-in label wrapper so Field owns the layout.",
|
|
248
240
|
"code": "<Input\n withFieldWrapper={false}\n aria-label=\"Search\"\n placeholder=\"Search...\"\n rootProps={{ 'data-demo': 'bare-input-wrapper' }}\n/>"
|
|
249
241
|
},
|
|
250
|
-
{
|
|
251
|
-
"name": "Shortcut Focus Hotkey",
|
|
252
|
-
"description": "Display shortcut hint and opt into focus behavior",
|
|
253
|
-
"code": "<Input\n label=\"Command Palette\"\n placeholder=\"Search commands\"\n shortcut=\"⌘K\"\n shortcutBehavior=\"focus-input\"\n/>"
|
|
254
|
-
},
|
|
255
242
|
{
|
|
256
243
|
"name": "Search With Shortcut",
|
|
257
|
-
"description": "
|
|
244
|
+
"description": "Leading icon and a ⌘K hint that focuses the field.",
|
|
258
245
|
"code": "<Input\n aria-label=\"Search findings\"\n placeholder=\"Search findings...\"\n shortcut=\"⌘K\"\n shortcutBehavior=\"focus-input\"\n startAdornment={<MagnifyingGlass aria-hidden=\"true\" />}\n withFieldWrapper={false}\n/>"
|
|
259
246
|
},
|
|
260
|
-
{
|
|
261
|
-
"name": "Success State",
|
|
262
|
-
"description": "Input showing validated/success styling",
|
|
263
|
-
"code": "<Input\n label=\"Email\"\n type=\"email\"\n value=\"user@example.com\"\n success\n helperText=\"Email verified\"\n/>"
|
|
264
|
-
},
|
|
265
247
|
{
|
|
266
248
|
"name": "With Start Adornment",
|
|
267
|
-
"description": "
|
|
249
|
+
"description": "Prefix sits inside the field, before the text.",
|
|
268
250
|
"code": "<Input\n label=\"Price\"\n placeholder=\"0.00\"\n startAdornment={<span>$</span>}\n/>"
|
|
269
251
|
},
|
|
270
252
|
{
|
|
271
253
|
"name": "With End Adornment",
|
|
272
|
-
"description": "
|
|
254
|
+
"description": "Suffix sits inside the field, after the text.",
|
|
273
255
|
"code": "<Input\n label=\"Weight\"\n placeholder=\"0\"\n endAdornment={<span>kg</span>}\n/>"
|
|
274
256
|
}
|
|
275
257
|
],
|
|
@@ -299,7 +281,6 @@
|
|
|
299
281
|
"disabled: boolean - disables interaction",
|
|
300
282
|
"required: boolean - required field indicator",
|
|
301
283
|
"error: boolean - shows error styling",
|
|
302
|
-
"success: boolean - shows success/validated styling",
|
|
303
284
|
"startAdornment: ReactNode - content before the input (icon or prefix)",
|
|
304
285
|
"endAdornment: ReactNode - content after the input (icon or suffix)",
|
|
305
286
|
"shortcut: string - visual kbd hint inside the input; do not hand-roll extra kbd markup",
|
|
@@ -40,6 +40,8 @@
|
|
|
40
40
|
&:focus-visible {
|
|
41
41
|
@include field.focus-state;
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
@include high-contrast-outline;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
// Size variants — shared control-size + field-padding path
|
|
@@ -63,18 +65,7 @@
|
|
|
63
65
|
@include field.invalid-state;
|
|
64
66
|
|
|
65
67
|
&:focus-visible {
|
|
66
|
-
|
|
67
|
-
@include focus-ring-error;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Success state — green border for validated fields (DoorDash/Stocksy pattern)
|
|
72
|
-
.success {
|
|
73
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
74
|
-
|
|
75
|
-
&:focus-visible {
|
|
76
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
77
|
-
@include focus-ring-success;
|
|
68
|
+
@include field.invalid-focus-state;
|
|
78
69
|
}
|
|
79
70
|
}
|
|
80
71
|
|
|
@@ -83,12 +74,6 @@
|
|
|
83
74
|
color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
84
75
|
}
|
|
85
76
|
|
|
86
|
-
// Auto-detect success state via :has() — applies success color to helper
|
|
87
|
-
.wrapper[data-success] .helper,
|
|
88
|
-
.helperSuccess {
|
|
89
|
-
color: var(--fui-color-success-text, $fui-color-success-text);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
77
|
// ============================================
|
|
93
78
|
// Input with adornments or shortcut indicator
|
|
94
79
|
// ============================================
|
|
@@ -149,18 +134,7 @@
|
|
|
149
134
|
@include field.invalid-state;
|
|
150
135
|
|
|
151
136
|
&:focus-within {
|
|
152
|
-
|
|
153
|
-
@include focus-ring-error;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Success state on adornment container
|
|
158
|
-
&:has(.success) {
|
|
159
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
160
|
-
|
|
161
|
-
&:focus-within {
|
|
162
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
163
|
-
@include focus-ring-success;
|
|
137
|
+
@include field.invalid-focus-state;
|
|
164
138
|
}
|
|
165
139
|
}
|
|
166
140
|
}
|
|
@@ -200,7 +174,8 @@
|
|
|
200
174
|
font-variant-numeric: tabular-nums;
|
|
201
175
|
color: var(--fui-kbd-color, var(--fui-text-tertiary, #{$fui-text-tertiary}));
|
|
202
176
|
background: var(--fui-kbd-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
|
|
203
|
-
border: var(--fui-stroke-hairline, 1px) solid
|
|
177
|
+
border: var(--fui-stroke-hairline, 1px) solid
|
|
178
|
+
var(--fui-kbd-border, var(--fui-border, #{$fui-border}));
|
|
204
179
|
border-radius: var(--fui-kbd-radius, var(--fui-radius-sm, #{$fui-radius-sm}));
|
|
205
180
|
box-shadow: var(--fui-kbd-shadow, none);
|
|
206
181
|
pointer-events: none;
|
|
@@ -208,30 +183,6 @@
|
|
|
208
183
|
user-select: none;
|
|
209
184
|
}
|
|
210
185
|
|
|
211
|
-
// ============================================
|
|
212
|
-
// Accessibility: High Contrast Mode
|
|
213
|
-
// ============================================
|
|
214
|
-
|
|
215
|
-
@media (prefers-contrast: more) {
|
|
216
|
-
.input {
|
|
217
|
-
border-width: 2px;
|
|
218
|
-
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
219
|
-
|
|
220
|
-
&:focus-visible {
|
|
221
|
-
border-color: var(--fui-color-accent, $fui-color-accent);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.error,
|
|
226
|
-
.input[aria-invalid] {
|
|
227
|
-
border-color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
.success {
|
|
231
|
-
border-color: var(--fui-color-success-text, $fui-color-success-text);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
186
|
// ============================================
|
|
236
187
|
// Accessibility: Reduced Motion
|
|
237
188
|
// ============================================
|
|
@@ -30,8 +30,6 @@ export interface InputProps extends Omit<
|
|
|
30
30
|
disabled?: boolean;
|
|
31
31
|
/** Show error styling */
|
|
32
32
|
error?: boolean;
|
|
33
|
-
/** Show success styling */
|
|
34
|
-
success?: boolean;
|
|
35
33
|
/** Visible label text */
|
|
36
34
|
label?: string;
|
|
37
35
|
/** Whether the field is required */
|
|
@@ -105,7 +103,6 @@ const InputRoot = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
|
|
105
103
|
size: sizeProp,
|
|
106
104
|
disabled = false,
|
|
107
105
|
error = false,
|
|
108
|
-
success = false,
|
|
109
106
|
required = false,
|
|
110
107
|
label,
|
|
111
108
|
helperText,
|
|
@@ -174,23 +171,11 @@ const InputRoot = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
|
|
174
171
|
|
|
175
172
|
const hasAdornment = !!(startAdornment || endAdornment);
|
|
176
173
|
|
|
177
|
-
const inputClasses = [
|
|
178
|
-
styles.input,
|
|
179
|
-
styles[size],
|
|
180
|
-
error && styles.error,
|
|
181
|
-
success && styles.success,
|
|
182
|
-
inputClassName,
|
|
183
|
-
]
|
|
174
|
+
const inputClasses = [styles.input, styles[size], error && styles.error, inputClassName]
|
|
184
175
|
.filter(Boolean)
|
|
185
176
|
.join(" ");
|
|
186
177
|
|
|
187
|
-
const helperClasses = [
|
|
188
|
-
styles.helper,
|
|
189
|
-
error && styles.helperError,
|
|
190
|
-
success && styles.helperSuccess,
|
|
191
|
-
]
|
|
192
|
-
.filter(Boolean)
|
|
193
|
-
.join(" ");
|
|
178
|
+
const helperClasses = [styles.helper, error && styles.helperError].filter(Boolean).join(" ");
|
|
194
179
|
|
|
195
180
|
const wrapperClasses = [styles.wrapper, className].filter(Boolean).join(" ");
|
|
196
181
|
const labelClasses = styles.label;
|
|
@@ -275,7 +260,6 @@ const InputRoot = React.forwardRef<HTMLInputElement, InputProps>(function Input(
|
|
|
275
260
|
{...rootProps}
|
|
276
261
|
disabled={disabled}
|
|
277
262
|
invalid={error}
|
|
278
|
-
data-success={success || undefined}
|
|
279
263
|
className={[wrapperClasses, rootProps?.className].filter(Boolean).join(" ")}
|
|
280
264
|
style={{ ...(rootProps?.style ?? {}), ...(style ?? {}) }}
|
|
281
265
|
>
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Link",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Navigates somewhere else, inline or in chrome, with real link semantics.",
|
|
5
5
|
"category": "navigation",
|
|
6
|
-
"tags": [
|
|
7
|
-
"link",
|
|
8
|
-
"anchor",
|
|
9
|
-
"navigation",
|
|
10
|
-
"href",
|
|
11
|
-
"url"
|
|
12
|
-
],
|
|
6
|
+
"tags": ["link", "anchor", "navigation", "href", "url"],
|
|
13
7
|
"status": "stable",
|
|
14
8
|
"sourcePath": "src/components/Link/index.tsx",
|
|
15
9
|
"exportName": "Link",
|
|
16
10
|
"propsSummary": [
|
|
17
11
|
"children: node (required)",
|
|
18
|
-
"
|
|
19
|
-
"
|
|
12
|
+
"tone: accent|neutral (default: accent)",
|
|
13
|
+
"color: primary|secondary|tertiary",
|
|
14
|
+
"underline: always|hover|none|dotted (default: hover)",
|
|
20
15
|
"external: boolean (default: false)",
|
|
21
16
|
"asChild: boolean (default: false)",
|
|
22
17
|
"className: string",
|
|
@@ -30,27 +25,25 @@
|
|
|
30
25
|
"description": "Link text content",
|
|
31
26
|
"required": true
|
|
32
27
|
},
|
|
33
|
-
"
|
|
28
|
+
"tone": {
|
|
29
|
+
"type": "enum",
|
|
30
|
+
"description": "Colour. accent is the link ink; neutral reads as body text until hovered",
|
|
31
|
+
"default": "accent",
|
|
32
|
+
"required": false,
|
|
33
|
+
"values": ["accent", "neutral"]
|
|
34
|
+
},
|
|
35
|
+
"color": {
|
|
34
36
|
"type": "enum",
|
|
35
|
-
"description": "
|
|
36
|
-
"default": "default",
|
|
37
|
+
"description": "Text-hierarchy colour for a neutral link (Text color axis); tertiary is the quietest link",
|
|
37
38
|
"required": false,
|
|
38
|
-
"values": [
|
|
39
|
-
"default",
|
|
40
|
-
"subtle",
|
|
41
|
-
"muted"
|
|
42
|
-
]
|
|
39
|
+
"values": ["primary", "secondary", "tertiary"]
|
|
43
40
|
},
|
|
44
41
|
"underline": {
|
|
45
42
|
"type": "enum",
|
|
46
43
|
"description": "Underline behavior",
|
|
47
44
|
"default": "hover",
|
|
48
45
|
"required": false,
|
|
49
|
-
"values": [
|
|
50
|
-
"always",
|
|
51
|
-
"hover",
|
|
52
|
-
"none"
|
|
53
|
-
]
|
|
46
|
+
"values": ["always", "hover", "none", "dotted"]
|
|
54
47
|
},
|
|
55
48
|
"external": {
|
|
56
49
|
"type": "boolean",
|
|
@@ -87,56 +80,55 @@
|
|
|
87
80
|
},
|
|
88
81
|
"usage": {
|
|
89
82
|
"when": [
|
|
90
|
-
"Inline
|
|
91
|
-
"
|
|
92
|
-
"\"Forgot password?\"
|
|
93
|
-
"
|
|
83
|
+
"Inline links inside body text",
|
|
84
|
+
"Footer and sidebar navigation",
|
|
85
|
+
"\"Forgot password?\" and \"Sign up\" in forms",
|
|
86
|
+
"Pointing out to docs or external resources"
|
|
94
87
|
],
|
|
95
88
|
"whenNot": [
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"Cards that link to detail pages should still use real link semantics (Link or anchor inside Card)"
|
|
89
|
+
"A main call to action — use Button",
|
|
90
|
+
"Switching views in place — use Tabs",
|
|
91
|
+
"Dropdown items — use Menu"
|
|
100
92
|
],
|
|
101
93
|
"guidelines": [
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
94
|
+
"Name the destination; never \"click here\"",
|
|
95
|
+
"external sets target and rel — add your own \"opens in a new tab\" cue",
|
|
96
|
+
"tone=\"neutral\" for secondary links; add color=\"tertiary\" for metadata and footers",
|
|
97
|
+
"Links must stay distinguishable from surrounding text",
|
|
98
|
+
"asChild composes handlers with the child rather than replacing them"
|
|
107
99
|
],
|
|
108
100
|
"accessibility": [
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
101
|
+
"The link text alone should make sense out of context",
|
|
102
|
+
"Say when a link opens a new window",
|
|
103
|
+
"Focus ring must stay visible",
|
|
104
|
+
"A link that looks like a button still needs link semantics"
|
|
113
105
|
]
|
|
114
106
|
},
|
|
115
107
|
"examples": [
|
|
116
108
|
{
|
|
117
109
|
"name": "Default",
|
|
118
|
-
"description": "
|
|
110
|
+
"description": "Accent text that underlines on hover.",
|
|
119
111
|
"code": "<Link href=\"#\">Learn more about our services</Link>"
|
|
120
112
|
},
|
|
121
113
|
{
|
|
122
|
-
"name": "
|
|
123
|
-
"description": "
|
|
124
|
-
"code": "
|
|
114
|
+
"name": "Tones",
|
|
115
|
+
"description": "Accent, then neutral, then the quietest neutral.",
|
|
116
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"md\" align=\"center\" wrap>\n <Link href=\"#\" tone=\"accent\">Accent</Link>\n <Link href=\"#\" tone=\"neutral\">Neutral</Link>\n <Link href=\"#\" tone=\"neutral\" color=\"tertiary\">Tertiary</Link>\n</Stack>"
|
|
125
117
|
},
|
|
126
118
|
{
|
|
127
119
|
"name": "Underline Styles",
|
|
128
|
-
"description": "
|
|
129
|
-
"code": "
|
|
120
|
+
"description": "Four rules for when the line shows.",
|
|
121
|
+
"code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"md\" align=\"center\" wrap>\n <Link href=\"#\" underline=\"always\">Always underlined</Link>\n <Link href=\"#\" underline=\"hover\">Underline on hover</Link>\n <Link href=\"#\" underline=\"dotted\">Dotted underline</Link>\n <Link href=\"#\" underline=\"none\">No underline</Link>\n</Stack>"
|
|
130
122
|
},
|
|
131
123
|
{
|
|
132
124
|
"name": "External Link",
|
|
133
|
-
"description": "
|
|
125
|
+
"description": "Sets target and rel; you still supply the visible cue.",
|
|
134
126
|
"code": "<Link href=\"https://example.com\" external>\n View documentation ↗\n</Link>"
|
|
135
127
|
},
|
|
136
128
|
{
|
|
137
129
|
"name": "As Child (Polymorphic)",
|
|
138
|
-
"description": "
|
|
139
|
-
"code": "<Link asChild
|
|
130
|
+
"description": "Paints Link styling onto a router link and keeps both click handlers.",
|
|
131
|
+
"code": "<Link asChild tone=\"neutral\" onClick={() => {}}>\n <a href=\"#pricing\" onClick={() => {}}>\n Client-side navigation\n </a>\n</Link>"
|
|
140
132
|
}
|
|
141
133
|
],
|
|
142
134
|
"relations": [
|
|
@@ -155,21 +147,17 @@
|
|
|
155
147
|
"propsSummary": [
|
|
156
148
|
"children: ReactNode - link text (required)",
|
|
157
149
|
"href: string - destination URL",
|
|
158
|
-
"
|
|
159
|
-
"
|
|
150
|
+
"tone: accent|neutral - colour",
|
|
151
|
+
"color: primary|secondary|tertiary - hierarchy colour on a neutral link",
|
|
152
|
+
"underline: always|hover|none|dotted - underline behavior",
|
|
160
153
|
"external: boolean - opens in new tab",
|
|
161
154
|
"asChild: boolean - polymorphic child rendering with merged styles and composed event handlers"
|
|
162
155
|
],
|
|
163
|
-
"a11yRules": [
|
|
164
|
-
"A11Y_LINK_TEXT",
|
|
165
|
-
"A11Y_LINK_FOCUS"
|
|
166
|
-
]
|
|
156
|
+
"a11yRules": ["A11Y_LINK_TEXT", "A11Y_LINK_FOCUS"]
|
|
167
157
|
},
|
|
168
158
|
"ai": {
|
|
169
159
|
"compositionPattern": "compound",
|
|
170
|
-
"subComponents": [
|
|
171
|
-
"Root"
|
|
172
|
-
]
|
|
160
|
+
"subComponents": ["Root"]
|
|
173
161
|
},
|
|
174
162
|
"provenance": {
|
|
175
163
|
"source": "migrated",
|