@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
|
@@ -6,8 +6,10 @@ import { useState, useCallback, useEffect, useMemo } from "react";
|
|
|
6
6
|
// Lazy-loaded dependency (shiki)
|
|
7
7
|
// ============================================
|
|
8
8
|
|
|
9
|
+
type ShikiThemeInput = string | typeof import("./css-variables-theme").FUI_CSS_VARIABLES_THEME;
|
|
10
|
+
|
|
9
11
|
let _codeToHtml:
|
|
10
|
-
| ((code: string, options: { lang: string; theme:
|
|
12
|
+
| ((code: string, options: { lang: string; theme: ShikiThemeInput }) => Promise<string>)
|
|
11
13
|
| null = null;
|
|
12
14
|
let _shikiLoadPromise: Promise<void> | null = null;
|
|
13
15
|
let _shikiFailed = false;
|
|
@@ -27,8 +29,12 @@ async function loadShikiDeps() {
|
|
|
27
29
|
}
|
|
28
30
|
await _shikiLoadPromise;
|
|
29
31
|
}
|
|
30
|
-
import {
|
|
32
|
+
import { Button } from "../Button";
|
|
33
|
+
import { IconButton } from "../IconButton";
|
|
34
|
+
import { TabsRoot, TabsList, Tab, TabsPanel, type TabsVariant } from "../Tabs";
|
|
35
|
+
import { FUI_CSS_VARIABLES_THEME } from "./css-variables-theme";
|
|
31
36
|
import styles from "./CodeBlock.module.scss";
|
|
37
|
+
import { isDevelopmentBuild, isProductionBuild } from "../../utils/env";
|
|
32
38
|
|
|
33
39
|
export type CodeBlockLanguage =
|
|
34
40
|
| "tsx"
|
|
@@ -76,6 +82,7 @@ const LANGUAGE_ALIASES: Partial<Record<CodeBlockLanguage, string>> = {
|
|
|
76
82
|
|
|
77
83
|
/** Available syntax highlighting themes */
|
|
78
84
|
export type CodeBlockTheme =
|
|
85
|
+
| "css-variables"
|
|
79
86
|
| "synthwave-84"
|
|
80
87
|
| "github-dark"
|
|
81
88
|
| "github-light"
|
|
@@ -95,7 +102,7 @@ export interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
95
102
|
code: string;
|
|
96
103
|
/** Programming language for syntax highlighting */
|
|
97
104
|
language?: CodeBlockLanguage;
|
|
98
|
-
/** Syntax highlighting theme */
|
|
105
|
+
/** Syntax highlighting theme. Default follows `--fui-code-token-*` via shiki css-variables. */
|
|
99
106
|
theme?: CodeBlockTheme;
|
|
100
107
|
/** Show copy button */
|
|
101
108
|
showCopy?: boolean;
|
|
@@ -125,6 +132,12 @@ export interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
125
132
|
defaultCollapsed?: boolean;
|
|
126
133
|
/** Number of lines to show when collapsed */
|
|
127
134
|
collapsedLines?: number;
|
|
135
|
+
/**
|
|
136
|
+
* Collapse control copy. `lines` keeps “Show N more lines” / “Show less”
|
|
137
|
+
* (docs prose). `expand` is one right-aligned Expand / Collapse control
|
|
138
|
+
* for preview+code capsules.
|
|
139
|
+
*/
|
|
140
|
+
collapseAction?: "lines" | "expand";
|
|
128
141
|
/** Compact mode with reduced padding */
|
|
129
142
|
compact?: boolean;
|
|
130
143
|
/** Show a persistent copy button (always visible, uses Button component) */
|
|
@@ -547,14 +560,22 @@ function processShikiHtml(html: string, options: ProcessOptions): string {
|
|
|
547
560
|
const lineClass = lineClasses.join(" ");
|
|
548
561
|
const diffMarker = isAdded ? "+" : isRemoved ? "-" : " ";
|
|
549
562
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
? `<span class="line-number">${displayLineNum}</span>`
|
|
563
|
+
const lineNumHtml =
|
|
564
|
+
showLineNumbers || hasDiff
|
|
565
|
+
? `${showLineNumbers ? `<span class="line-number">${displayLineNum}</span>` : ""}${
|
|
566
|
+
hasDiff ? `<span class="diff-marker">${diffMarker}</span>` : ""
|
|
567
|
+
}`
|
|
553
568
|
: "";
|
|
554
|
-
|
|
555
|
-
|
|
569
|
+
|
|
570
|
+
// Shiki already wraps each row in <span class="line">; merge into that span
|
|
571
|
+
// instead of nesting a second .line (which breaks the inline-block row layout).
|
|
572
|
+
if (/^<span class="line([^"]*)">/.test(line)) {
|
|
573
|
+
return line.replace(
|
|
574
|
+
/^<span class="line([^"]*)">/,
|
|
575
|
+
`<span class="${lineClass}$1">${lineNumHtml}`
|
|
576
|
+
);
|
|
556
577
|
}
|
|
557
|
-
return `<span class="${lineClass}">${line}</span>`;
|
|
578
|
+
return `<span class="${lineClass}">${lineNumHtml}${line}</span>`;
|
|
558
579
|
});
|
|
559
580
|
|
|
560
581
|
// Reconstruct the HTML
|
|
@@ -565,7 +586,7 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
565
586
|
{
|
|
566
587
|
code,
|
|
567
588
|
language = "tsx",
|
|
568
|
-
theme = "
|
|
589
|
+
theme = "css-variables",
|
|
569
590
|
showCopy = true,
|
|
570
591
|
title,
|
|
571
592
|
filename,
|
|
@@ -580,6 +601,7 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
580
601
|
collapsible = false,
|
|
581
602
|
defaultCollapsed = false,
|
|
582
603
|
collapsedLines = 5,
|
|
604
|
+
collapseAction = "lines",
|
|
583
605
|
compact = false,
|
|
584
606
|
persistentCopy = false,
|
|
585
607
|
copyPlacement = "auto",
|
|
@@ -591,7 +613,10 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
591
613
|
ref
|
|
592
614
|
) {
|
|
593
615
|
const [copied, setCopied] = useState(false);
|
|
594
|
-
const [highlight, setHighlight] = useState<{ html: string; loading: boolean }>({
|
|
616
|
+
const [highlight, setHighlight] = useState<{ html: string; loading: boolean }>({
|
|
617
|
+
html: "",
|
|
618
|
+
loading: true,
|
|
619
|
+
});
|
|
595
620
|
const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);
|
|
596
621
|
|
|
597
622
|
const trimmedCode = useMemo(() => normalizeCode(code, language), [code, language]);
|
|
@@ -624,7 +649,7 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
624
649
|
const fallbackHtml = `<pre class="shiki"><code>${escapeHtml(visibleCode)}</code></pre>`;
|
|
625
650
|
|
|
626
651
|
if (_shikiFailed || !_codeToHtml) {
|
|
627
|
-
if (_shikiFailed &&
|
|
652
|
+
if (_shikiFailed && isDevelopmentBuild()) {
|
|
628
653
|
console.warn(
|
|
629
654
|
"[@usefragments/ui] CodeBlock: shiki is not installed. " +
|
|
630
655
|
"Install it with: npm install shiki"
|
|
@@ -635,7 +660,9 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
635
660
|
|
|
636
661
|
try {
|
|
637
662
|
const resolvedLang = LANGUAGE_ALIASES[language] || language;
|
|
638
|
-
const
|
|
663
|
+
const shikiTheme: ShikiThemeInput =
|
|
664
|
+
theme === "css-variables" ? FUI_CSS_VARIABLES_THEME : theme;
|
|
665
|
+
const html = await _codeToHtml(visibleCode, { lang: resolvedLang, theme: shikiTheme });
|
|
639
666
|
return processShikiHtml(html, {
|
|
640
667
|
showLineNumbers,
|
|
641
668
|
startLineNumber,
|
|
@@ -644,7 +671,7 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
644
671
|
removedLines: removedSet,
|
|
645
672
|
});
|
|
646
673
|
} catch (err) {
|
|
647
|
-
if (
|
|
674
|
+
if (!isProductionBuild()) {
|
|
648
675
|
console.error("Syntax highlighting failed:", err);
|
|
649
676
|
}
|
|
650
677
|
return fallbackHtml;
|
|
@@ -679,7 +706,7 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
679
706
|
setTimeout(() => setCopied(false), 2000);
|
|
680
707
|
onCopy?.();
|
|
681
708
|
} catch (err) {
|
|
682
|
-
if (
|
|
709
|
+
if (!isProductionBuild()) {
|
|
683
710
|
console.error("Failed to copy:", err);
|
|
684
711
|
}
|
|
685
712
|
}
|
|
@@ -714,15 +741,20 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
714
741
|
: undefined;
|
|
715
742
|
|
|
716
743
|
return (
|
|
717
|
-
<div ref={ref} {...htmlProps} className={classNames} data-
|
|
718
|
-
{title &&
|
|
719
|
-
|
|
744
|
+
<div ref={ref} {...htmlProps} className={classNames} data-slot="code-block">
|
|
745
|
+
{title && (
|
|
746
|
+
<div className={styles.title} data-slot="code-block-title">
|
|
747
|
+
{title}
|
|
748
|
+
</div>
|
|
749
|
+
)}
|
|
750
|
+
<div className={wrapperClasses} style={wrapperStyle} data-slot="code-block-frame">
|
|
720
751
|
{shouldRenderHeader && (
|
|
721
752
|
<div className={styles.header}>
|
|
722
753
|
<span className={styles.filename}>{filename ?? ""}</span>
|
|
723
754
|
{shouldShowHeaderCopy && (
|
|
724
|
-
<
|
|
725
|
-
|
|
755
|
+
<IconButton
|
|
756
|
+
variant="ghost"
|
|
757
|
+
size="sm"
|
|
726
758
|
onClick={handleCopy}
|
|
727
759
|
className={`${styles.copyButton} ${copied ? styles.copied : ""}`}
|
|
728
760
|
aria-label={copied ? "Copied!" : "Copy code"}
|
|
@@ -732,19 +764,20 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
732
764
|
) : (
|
|
733
765
|
<CopyIcon className={styles.icon} />
|
|
734
766
|
)}
|
|
735
|
-
</
|
|
767
|
+
</IconButton>
|
|
736
768
|
)}
|
|
737
769
|
</div>
|
|
738
770
|
)}
|
|
739
771
|
{shouldShowOverlayCopy && (
|
|
740
|
-
<
|
|
741
|
-
|
|
772
|
+
<IconButton
|
|
773
|
+
variant="ghost"
|
|
774
|
+
size="sm"
|
|
742
775
|
onClick={handleCopy}
|
|
743
776
|
className={`${styles.copyButton} ${styles.copyOverlay} ${copied ? styles.copied : ""}`}
|
|
744
777
|
aria-label={copied ? "Copied!" : "Copy code"}
|
|
745
778
|
>
|
|
746
779
|
{copied ? <CheckIcon className={styles.icon} /> : <CopyIcon className={styles.icon} />}
|
|
747
|
-
</
|
|
780
|
+
</IconButton>
|
|
748
781
|
)}
|
|
749
782
|
{highlight.loading ? (
|
|
750
783
|
<div className={styles.loading} style={codeContainerStyle}>
|
|
@@ -760,24 +793,33 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
760
793
|
/>
|
|
761
794
|
)}
|
|
762
795
|
{persistentCopy && (
|
|
763
|
-
<
|
|
764
|
-
|
|
796
|
+
<IconButton
|
|
797
|
+
variant="ghost"
|
|
798
|
+
size="sm"
|
|
765
799
|
onClick={handleCopy}
|
|
766
800
|
className={`${styles.persistentCopy} ${styles.copyButton} ${styles.copyOverlay} ${copied ? styles.copied : ""}`}
|
|
767
801
|
aria-label={copied ? "Copied!" : "Copy code"}
|
|
768
802
|
>
|
|
769
803
|
{copied ? <CheckIcon className={styles.icon} /> : <CopyIcon className={styles.icon} />}
|
|
770
|
-
</
|
|
804
|
+
</IconButton>
|
|
771
805
|
)}
|
|
772
806
|
{shouldShowCollapse && (
|
|
773
|
-
<
|
|
774
|
-
|
|
807
|
+
<Button
|
|
808
|
+
variant="ghost"
|
|
809
|
+
size="sm"
|
|
810
|
+
fullWidth
|
|
775
811
|
onClick={toggleCollapsed}
|
|
776
|
-
className={
|
|
812
|
+
className={
|
|
813
|
+
collapseAction === "expand"
|
|
814
|
+
? `${styles.collapseButton} ${styles.collapseExpand}`
|
|
815
|
+
: styles.collapseButton
|
|
816
|
+
}
|
|
777
817
|
aria-expanded={!isCollapsed}
|
|
778
818
|
aria-label={isCollapsed ? "Expand code" : "Collapse code"}
|
|
779
819
|
>
|
|
780
|
-
{
|
|
820
|
+
{collapseAction === "expand" ? (
|
|
821
|
+
<span>{isCollapsed ? "Expand" : "Collapse"}</span>
|
|
822
|
+
) : isCollapsed ? (
|
|
781
823
|
<>
|
|
782
824
|
<ChevronDownIcon className={styles.icon} />
|
|
783
825
|
<span>Show {totalLines - collapsedLines} more lines</span>
|
|
@@ -788,7 +830,7 @@ const CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function
|
|
|
788
830
|
<span>Show less</span>
|
|
789
831
|
</>
|
|
790
832
|
)}
|
|
791
|
-
</
|
|
833
|
+
</Button>
|
|
792
834
|
)}
|
|
793
835
|
</div>
|
|
794
836
|
{caption && <div className={styles.caption}>{caption}</div>}
|
|
@@ -828,12 +870,20 @@ export interface TabbedCodeBlockProps {
|
|
|
828
870
|
showLineNumbers?: boolean;
|
|
829
871
|
/** Syntax highlighting theme (applies to all tabs) */
|
|
830
872
|
theme?: CodeBlockTheme;
|
|
831
|
-
/** Tab list
|
|
832
|
-
tabsVariant?:
|
|
873
|
+
/** Tab list chrome: `soft` (default) is the filled rail, `ghost` the underline strip. */
|
|
874
|
+
tabsVariant?: TabsVariant;
|
|
833
875
|
/** Enable word wrapping for long lines */
|
|
834
876
|
wordWrap?: boolean;
|
|
835
877
|
/** Maximum height in pixels (enables scrolling) */
|
|
836
878
|
maxHeight?: number;
|
|
879
|
+
/** Allow collapsing/expanding each tab's code (forwarded to every panel) */
|
|
880
|
+
collapsible?: boolean;
|
|
881
|
+
/** Initial collapsed state (only applies when collapsible is true) */
|
|
882
|
+
defaultCollapsed?: boolean;
|
|
883
|
+
/** Number of lines to show when collapsed */
|
|
884
|
+
collapsedLines?: number;
|
|
885
|
+
/** Forwarded to every panel (see CodeBlock `collapseAction`) */
|
|
886
|
+
collapseAction?: "lines" | "expand";
|
|
837
887
|
/** Additional class name */
|
|
838
888
|
className?: string;
|
|
839
889
|
/** Callback fired when a tab's copy button is clicked. Receives the tab label. */
|
|
@@ -849,9 +899,13 @@ function TabbedCodeBlock({
|
|
|
849
899
|
copyPlacement = "auto",
|
|
850
900
|
showLineNumbers = false,
|
|
851
901
|
theme,
|
|
852
|
-
tabsVariant = "
|
|
902
|
+
tabsVariant = "soft",
|
|
853
903
|
wordWrap,
|
|
854
904
|
maxHeight,
|
|
905
|
+
collapsible,
|
|
906
|
+
defaultCollapsed,
|
|
907
|
+
collapsedLines,
|
|
908
|
+
collapseAction,
|
|
855
909
|
className,
|
|
856
910
|
onCopy,
|
|
857
911
|
}: TabbedCodeBlockProps) {
|
|
@@ -864,28 +918,37 @@ function TabbedCodeBlock({
|
|
|
864
918
|
{tabs.map((tab, index) => {
|
|
865
919
|
const tabValue = tab.value ?? tab.label;
|
|
866
920
|
return (
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
921
|
+
<Tab key={`${tabValue}-${index}`} value={tabValue}>
|
|
922
|
+
{tab.label}
|
|
923
|
+
</Tab>
|
|
870
924
|
);
|
|
871
925
|
})}
|
|
872
926
|
</TabsList>
|
|
873
927
|
{tabs.map((tab, index) => {
|
|
874
928
|
const tabValue = tab.value ?? tab.label;
|
|
875
929
|
return (
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
930
|
+
<TabsPanel
|
|
931
|
+
key={`${tabValue}-panel-${index}`}
|
|
932
|
+
value={tabValue}
|
|
933
|
+
flush
|
|
934
|
+
className={styles.tabbedPanel}
|
|
935
|
+
>
|
|
936
|
+
<CodeBlockBase
|
|
937
|
+
code={tab.code}
|
|
938
|
+
language={tab.language}
|
|
939
|
+
theme={theme}
|
|
940
|
+
showCopy={showCopy}
|
|
941
|
+
copyPlacement={copyPlacement}
|
|
942
|
+
showLineNumbers={showLineNumbers}
|
|
943
|
+
wordWrap={wordWrap}
|
|
944
|
+
maxHeight={maxHeight}
|
|
945
|
+
collapsible={collapsible}
|
|
946
|
+
defaultCollapsed={defaultCollapsed}
|
|
947
|
+
collapsedLines={collapsedLines}
|
|
948
|
+
collapseAction={collapseAction}
|
|
949
|
+
onCopy={onCopy ? () => onCopy(tab.label) : undefined}
|
|
950
|
+
/>
|
|
951
|
+
</TabsPanel>
|
|
889
952
|
);
|
|
890
953
|
})}
|
|
891
954
|
</TabsRoot>
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "Collapsible",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Shows or hides one region of content behind a trigger.",
|
|
5
5
|
"category": "layout",
|
|
6
|
-
"tags": [
|
|
7
|
-
"collapsible",
|
|
8
|
-
"expandable",
|
|
9
|
-
"accordion",
|
|
10
|
-
"disclosure",
|
|
11
|
-
"toggle"
|
|
12
|
-
],
|
|
6
|
+
"tags": ["collapsible", "expandable", "accordion", "disclosure", "toggle"],
|
|
13
7
|
"status": "stable",
|
|
14
8
|
"sourcePath": "src/components/Collapsible/index.tsx",
|
|
15
9
|
"exportName": "Collapsible",
|
|
@@ -51,22 +45,21 @@
|
|
|
51
45
|
},
|
|
52
46
|
"usage": {
|
|
53
47
|
"when": [
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"Settings panels with grouped options"
|
|
48
|
+
"Detail most readers do not need",
|
|
49
|
+
"Optional or advanced settings",
|
|
50
|
+
"Navigation sections that fold away",
|
|
51
|
+
"Building a disclosure the other components do not cover"
|
|
59
52
|
],
|
|
60
53
|
"whenNot": [
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
54
|
+
"Several sections that should coordinate (use Accordion)",
|
|
55
|
+
"Content that must overlay the page (use Dialog or Popover)",
|
|
56
|
+
"Action lists (use Menu)"
|
|
64
57
|
],
|
|
65
58
|
"guidelines": [
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"Keep trigger
|
|
69
|
-
"
|
|
59
|
+
"The trigger should say what opens, not 'click here'",
|
|
60
|
+
"defaultOpen for content most users want on arrival",
|
|
61
|
+
"Keep the trigger to a short phrase",
|
|
62
|
+
"Keep the chevron direction consistent across the page"
|
|
70
63
|
],
|
|
71
64
|
"accessibility": [
|
|
72
65
|
"Trigger must have aria-expanded to indicate state",
|
|
@@ -78,32 +71,32 @@
|
|
|
78
71
|
"examples": [
|
|
79
72
|
{
|
|
80
73
|
"name": "Default",
|
|
81
|
-
"description": "
|
|
74
|
+
"description": "Starts closed and opens on click.",
|
|
82
75
|
"code": "<Collapsible>\n <Collapsible.Trigger>Click to expand</Collapsible.Trigger>\n <Collapsible.Content>\n <p>This content is hidden by default and revealed when the trigger is clicked.</p>\n </Collapsible.Content>\n</Collapsible>"
|
|
83
76
|
},
|
|
84
77
|
{
|
|
85
78
|
"name": "Default Open",
|
|
86
|
-
"description": "
|
|
79
|
+
"description": "Starts open for content most users want.",
|
|
87
80
|
"code": "<Collapsible defaultOpen>\n <Collapsible.Trigger>Section Title</Collapsible.Trigger>\n <Collapsible.Content>\n <p>This content is visible by default. Click the trigger to collapse.</p>\n </Collapsible.Content>\n</Collapsible>"
|
|
88
81
|
},
|
|
89
82
|
{
|
|
90
83
|
"name": "Chevron Start",
|
|
91
|
-
"description": "
|
|
84
|
+
"description": "Marker leads the label instead of trailing it.",
|
|
92
85
|
"code": "<Collapsible>\n <Collapsible.Trigger chevronPosition=\"start\">Navigation</Collapsible.Trigger>\n <Collapsible.Content>\n <ul style={{ margin: 0, paddingLeft: '1.5rem' }}>\n <li>Dashboard</li>\n <li>Settings</li>\n <li>Profile</li>\n </ul>\n </Collapsible.Content>\n</Collapsible>"
|
|
93
86
|
},
|
|
94
87
|
{
|
|
95
88
|
"name": "No Chevron",
|
|
96
|
-
"description": "
|
|
89
|
+
"description": "Bare trigger when the surrounding layout signals enough.",
|
|
97
90
|
"code": "<Collapsible>\n <Collapsible.Trigger showChevron={false}>Show more details</Collapsible.Trigger>\n <Collapsible.Content>\n <p>Hidden details that appear when triggered.</p>\n </Collapsible.Content>\n</Collapsible>"
|
|
98
91
|
},
|
|
99
92
|
{
|
|
100
93
|
"name": "Disabled",
|
|
101
|
-
"description": "
|
|
94
|
+
"description": "Locked shut and skipped by the keyboard.",
|
|
102
95
|
"code": "<Collapsible disabled>\n <Collapsible.Trigger>Cannot toggle (disabled)</Collapsible.Trigger>\n <Collapsible.Content>\n <p>This content cannot be shown because the collapsible is disabled.</p>\n </Collapsible.Content>\n</Collapsible>"
|
|
103
96
|
},
|
|
104
97
|
{
|
|
105
98
|
"name": "Multiple Sections",
|
|
106
|
-
"description": "
|
|
99
|
+
"description": "Independent regions that ignore each other.",
|
|
107
100
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <Collapsible defaultOpen>\n <Collapsible.Trigger>Getting Started</Collapsible.Trigger>\n <Collapsible.Content>\n <p>Introduction and setup instructions.</p>\n </Collapsible.Content>\n </Collapsible>\n <Collapsible>\n <Collapsible.Trigger>Advanced Usage</Collapsible.Trigger>\n <Collapsible.Content>\n <p>Advanced configuration options.</p>\n </Collapsible.Content>\n </Collapsible>\n <Collapsible>\n <Collapsible.Trigger>API Reference</Collapsible.Trigger>\n <Collapsible.Content>\n <p>Complete API documentation.</p>\n </Collapsible.Content>\n </Collapsible>\n</div>"
|
|
108
101
|
}
|
|
109
102
|
],
|
|
@@ -131,19 +124,11 @@
|
|
|
131
124
|
"onOpenChange: (open: boolean) => void - state change callback",
|
|
132
125
|
"disabled: boolean - prevents interaction"
|
|
133
126
|
],
|
|
134
|
-
"a11yRules": [
|
|
135
|
-
"A11Y_EXPANDED_STATE",
|
|
136
|
-
"A11Y_REGION_LABEL",
|
|
137
|
-
"A11Y_KEYBOARD_NAV"
|
|
138
|
-
]
|
|
127
|
+
"a11yRules": ["A11Y_EXPANDED_STATE", "A11Y_REGION_LABEL", "A11Y_KEYBOARD_NAV"]
|
|
139
128
|
},
|
|
140
129
|
"ai": {
|
|
141
130
|
"compositionPattern": "compound",
|
|
142
|
-
"subComponents": [
|
|
143
|
-
"Root",
|
|
144
|
-
"Trigger",
|
|
145
|
-
"Content"
|
|
146
|
-
]
|
|
131
|
+
"subComponents": ["Root", "Trigger", "Content"]
|
|
147
132
|
},
|
|
148
133
|
"provenance": {
|
|
149
134
|
"source": "migrated",
|
|
@@ -25,11 +25,6 @@
|
|
|
25
25
|
&:focus-visible {
|
|
26
26
|
@include focus-ring;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
&:disabled {
|
|
30
|
-
opacity: 0.5;
|
|
31
|
-
cursor: not-allowed;
|
|
32
|
-
}
|
|
33
28
|
}
|
|
34
29
|
|
|
35
30
|
.triggerContent {
|
|
@@ -72,8 +67,7 @@
|
|
|
72
67
|
}
|
|
73
68
|
|
|
74
69
|
.disabled .trigger {
|
|
75
|
-
|
|
76
|
-
cursor: not-allowed;
|
|
70
|
+
@include disabled-state;
|
|
77
71
|
}
|
|
78
72
|
|
|
79
73
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "ColorPicker",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
6
|
-
"tags": [
|
|
7
|
-
"color",
|
|
8
|
-
"picker",
|
|
9
|
-
"input",
|
|
10
|
-
"hex",
|
|
11
|
-
"swatch",
|
|
12
|
-
"theme"
|
|
13
|
-
],
|
|
4
|
+
"description": "Selects a color through a visual picker and hexadecimal input.",
|
|
5
|
+
"category": "inputs",
|
|
6
|
+
"tags": ["color", "picker", "input", "hex", "swatch", "theme"],
|
|
14
7
|
"status": "stable",
|
|
15
8
|
"dependencies": [
|
|
16
9
|
{
|
|
@@ -88,11 +81,7 @@
|
|
|
88
81
|
"description": "Size variant",
|
|
89
82
|
"default": "md",
|
|
90
83
|
"required": false,
|
|
91
|
-
"values": [
|
|
92
|
-
"sm",
|
|
93
|
-
"md",
|
|
94
|
-
"lg"
|
|
95
|
-
]
|
|
84
|
+
"values": ["sm", "md", "lg"]
|
|
96
85
|
},
|
|
97
86
|
"showInput": {
|
|
98
87
|
"type": "boolean",
|
|
@@ -103,68 +92,67 @@
|
|
|
103
92
|
},
|
|
104
93
|
"usage": {
|
|
105
94
|
"when": [
|
|
106
|
-
"Theme
|
|
107
|
-
"
|
|
108
|
-
"Design tool
|
|
109
|
-
"User preference settings for colors"
|
|
95
|
+
"Theme and brand customisation",
|
|
96
|
+
"Any colour the user must pick freely",
|
|
97
|
+
"Design tool inputs"
|
|
110
98
|
],
|
|
111
99
|
"whenNot": [
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
100
|
+
"A fixed palette (use RadioGroup with swatches)",
|
|
101
|
+
"Showing a colour without editing it (use a tinted Badge)",
|
|
102
|
+
"Status colour that should come from a token"
|
|
115
103
|
],
|
|
116
104
|
"guidelines": [
|
|
117
|
-
"
|
|
118
|
-
"Use helperText
|
|
119
|
-
"
|
|
120
|
-
"Validate hex
|
|
105
|
+
"Label says what the colour is for",
|
|
106
|
+
"Use helperText for constraints, such as contrast rules",
|
|
107
|
+
"Offer presets next to the picker for the common choices",
|
|
108
|
+
"Validate the hex as #RRGGBB before accepting it"
|
|
121
109
|
],
|
|
122
110
|
"accessibility": [
|
|
123
|
-
"Label is
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
111
|
+
"Label is tied to the hex input",
|
|
112
|
+
"The swatch button carries its own aria-label",
|
|
113
|
+
"The picker popup is reachable from the keyboard",
|
|
114
|
+
"Users can type a hex instead of dragging"
|
|
127
115
|
]
|
|
128
116
|
},
|
|
129
117
|
"examples": [
|
|
130
118
|
{
|
|
131
119
|
"name": "Default",
|
|
132
|
-
"description": "
|
|
120
|
+
"description": "Swatch opens the picker; the hex field accepts typing.",
|
|
133
121
|
"code": "<ColorPicker\n label=\"Brand Color\"\n defaultValue=\"#3b82f6\"\n/>"
|
|
134
122
|
},
|
|
135
123
|
{
|
|
136
124
|
"name": "With Helper Text",
|
|
137
|
-
"description": "
|
|
125
|
+
"description": "Supporting line says where the colour will be used.",
|
|
138
126
|
"code": "<ColorPicker\n label=\"Primary Color\"\n defaultValue=\"#10b981\"\n helperText=\"This color will be used for buttons and links\"\n/>"
|
|
139
127
|
},
|
|
140
128
|
{
|
|
141
129
|
"name": "Controlled",
|
|
142
|
-
"description": "
|
|
130
|
+
"description": "The parent owns the value and sees every change.",
|
|
143
131
|
"code": "<ControlledColorPickerDemo />"
|
|
144
132
|
},
|
|
145
133
|
{
|
|
146
134
|
"name": "Multiple Pickers",
|
|
147
|
-
"description": "
|
|
135
|
+
"description": "A stacked set reads as one palette.",
|
|
148
136
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '16px', maxWidth: '240px' }}>\n <ColorPicker label=\"Primary\" defaultValue=\"#3b82f6\" />\n <ColorPicker label=\"Success\" defaultValue=\"#22c55e\" />\n <ColorPicker label=\"Warning\" defaultValue=\"#f59e0b\" />\n <ColorPicker label=\"Danger\" defaultValue=\"#ef4444\" />\n</div>"
|
|
149
137
|
},
|
|
150
138
|
{
|
|
151
139
|
"name": "Compact",
|
|
152
|
-
"description": "
|
|
140
|
+
"description": "showInput={false} drops the hex field, leaving a swatch row.",
|
|
153
141
|
"code": "<div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n <ColorPicker defaultValue=\"#ef4444\" size=\"sm\" showInput={false} />\n <ColorPicker defaultValue=\"#f59e0b\" size=\"sm\" showInput={false} />\n <ColorPicker defaultValue=\"#22c55e\" size=\"sm\" showInput={false} />\n <ColorPicker defaultValue=\"#3b82f6\" size=\"sm\" showInput={false} />\n</div>"
|
|
154
142
|
},
|
|
155
143
|
{
|
|
156
144
|
"name": "Sizes",
|
|
157
|
-
"description": "
|
|
145
|
+
"description": "Three swatch sizes: sm, md, lg.",
|
|
158
146
|
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '16px', maxWidth: '240px' }}>\n <ColorPicker label=\"Small\" defaultValue=\"#3b82f6\" size=\"sm\" />\n <ColorPicker label=\"Medium (default)\" defaultValue=\"#3b82f6\" size=\"md\" />\n <ColorPicker label=\"Large\" defaultValue=\"#3b82f6\" size=\"lg\" />\n</div>"
|
|
159
147
|
},
|
|
160
148
|
{
|
|
161
149
|
"name": "Error State",
|
|
162
|
-
"description": "
|
|
163
|
-
"code": "<ColorPicker\n label=\"Brand Color\"\n defaultValue=\"#
|
|
150
|
+
"description": "Red border on the hex field, and the reason below it.",
|
|
151
|
+
"code": "<ColorPicker\n label=\"Brand Color\"\n defaultValue=\"#7c3aed\"\n error\n helperText=\"This color fails contrast against the page background\"\n/>"
|
|
164
152
|
},
|
|
165
153
|
{
|
|
166
154
|
"name": "Disabled",
|
|
167
|
-
"description": "
|
|
155
|
+
"description": "Swatch will not open and the hex field will not accept typing.",
|
|
168
156
|
"code": "<ColorPicker\n label=\"Locked Color\"\n defaultValue=\"#64748b\"\n helperText=\"This color cannot be changed\"\n disabled\n/>"
|
|
169
157
|
}
|
|
170
158
|
],
|
|
@@ -198,18 +186,11 @@
|
|
|
198
186
|
"size: sm|md|lg - size variant",
|
|
199
187
|
"showInput: boolean - show hex input field"
|
|
200
188
|
],
|
|
201
|
-
"a11yRules": [
|
|
202
|
-
"A11Y_LABEL_REQUIRED",
|
|
203
|
-
"A11Y_FOCUS_VISIBLE",
|
|
204
|
-
"A11Y_TARGET_SIZE_MIN"
|
|
205
|
-
]
|
|
189
|
+
"a11yRules": ["A11Y_LABEL_REQUIRED", "A11Y_FOCUS_VISIBLE", "A11Y_TARGET_SIZE_MIN"]
|
|
206
190
|
},
|
|
207
191
|
"ai": {
|
|
208
192
|
"compositionPattern": "compound",
|
|
209
|
-
"subComponents": [
|
|
210
|
-
"Root",
|
|
211
|
-
"preload"
|
|
212
|
-
]
|
|
193
|
+
"subComponents": ["Root", "preload"]
|
|
213
194
|
},
|
|
214
195
|
"provenance": {
|
|
215
196
|
"source": "migrated",
|