@usefragments/ui 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/assets/fragments-wordmark.cjs +2 -2
- package/dist/assets/fragments-wordmark.d.ts.map +1 -1
- package/dist/assets/fragments-wordmark.js +2 -2
- package/dist/assets/ui.css +4720 -4159
- package/dist/chart.cjs +24 -6
- package/dist/chart.js +24 -6
- package/dist/codeblock.cjs +55 -29
- package/dist/codeblock.js +55 -29
- package/dist/colorpicker.cjs +3 -1
- package/dist/colorpicker.js +3 -1
- package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
- package/dist/components/Accordion/Accordion.module.scss.js +8 -8
- package/dist/components/Alert/Alert.module.scss.cjs +15 -12
- package/dist/components/Alert/Alert.module.scss.js +15 -12
- package/dist/components/Alert/index.cjs +7 -1
- package/dist/components/Alert/index.d.ts +12 -6
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +7 -1
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
- package/dist/components/Avatar/Avatar.module.scss.js +14 -14
- package/dist/components/Badge/Badge.module.scss.cjs +19 -19
- package/dist/components/Badge/Badge.module.scss.js +19 -19
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
- package/dist/components/Box/Box.module.scss.cjs +152 -152
- package/dist/components/Box/Box.module.scss.js +152 -152
- package/dist/components/Box/index.cjs +64 -75
- package/dist/components/Box/index.d.ts +16 -16
- package/dist/components/Box/index.d.ts.map +1 -1
- package/dist/components/Box/index.js +64 -75
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
- package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
- package/dist/components/Button/Button.module.scss.cjs +14 -14
- package/dist/components/Button/Button.module.scss.js +14 -14
- package/dist/components/Card/Card.module.scss.cjs +29 -17
- package/dist/components/Card/Card.module.scss.js +30 -18
- package/dist/components/Card/index.cjs +8 -0
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +8 -0
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -9
- package/dist/components/Checkbox/Checkbox.module.scss.js +9 -9
- package/dist/components/Checkbox/index.cjs +2 -2
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/Chip/Chip.module.scss.cjs +15 -15
- package/dist/components/Chip/Chip.module.scss.js +15 -15
- package/dist/components/Chip/index.cjs +2 -1
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +2 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +26 -23
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +26 -23
- package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
- package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
- package/dist/components/CodeBlock/css-variables-theme.js +98 -0
- package/dist/components/CodeBlock/index.d.ts +17 -3
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
- package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
- package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
- package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
- package/dist/components/ColorPicker/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
- package/dist/components/Combobox/Combobox.module.scss.js +21 -21
- package/dist/components/Combobox/index.cjs +17 -1
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +17 -1
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- package/dist/components/Command/index.cjs +26 -15
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +26 -15
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- package/dist/components/DataTable/DataTable.icons.cjs +6 -33
- package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.icons.js +6 -33
- package/dist/components/DataTable/DataTable.module.scss.cjs +27 -27
- package/dist/components/DataTable/DataTable.module.scss.js +27 -27
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
- package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
- package/dist/components/Dialog/Dialog.module.scss.js +14 -14
- package/dist/components/Dialog/index.cjs +11 -14
- package/dist/components/Dialog/index.d.ts +7 -7
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +11 -14
- package/dist/components/Drawer/Drawer.module.scss.cjs +29 -29
- package/dist/components/Drawer/Drawer.module.scss.js +29 -29
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- package/dist/components/Editor/index.d.ts +10 -10
- package/dist/components/Editor/index.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -8
- package/dist/components/EmptyState/EmptyState.module.scss.js +11 -8
- package/dist/components/EmptyState/index.cjs +8 -6
- package/dist/components/EmptyState/index.d.ts +9 -4
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +8 -6
- package/dist/components/Field/Field.module.scss.cjs +5 -5
- package/dist/components/Field/Field.module.scss.js +5 -5
- package/dist/components/Field/index.cjs +9 -1
- package/dist/components/Field/index.d.ts.map +1 -1
- package/dist/components/Field/index.js +9 -1
- package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
- package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
- package/dist/components/Grid/index.cjs +1 -1
- package/dist/components/Grid/index.js +1 -1
- package/dist/components/Header/Header.module.scss.cjs +33 -33
- package/dist/components/Header/Header.module.scss.js +33 -33
- package/dist/components/Header/index.cjs +17 -38
- package/dist/components/Header/index.d.ts +15 -11
- package/dist/components/Header/index.d.ts.map +1 -1
- package/dist/components/Header/index.js +17 -38
- package/dist/components/Icon/Icon.module.scss.cjs +15 -15
- package/dist/components/Icon/Icon.module.scss.js +15 -15
- package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
- package/dist/components/IconButton/IconButton.module.scss.js +8 -8
- package/dist/components/IconButton/index.cjs +2 -1
- package/dist/components/IconButton/index.d.ts.map +1 -1
- package/dist/components/IconButton/index.js +2 -1
- package/dist/components/Image/Image.module.scss.cjs +27 -27
- package/dist/components/Image/Image.module.scss.js +27 -27
- package/dist/components/Input/Input.module.scss.cjs +17 -17
- package/dist/components/Input/Input.module.scss.js +17 -17
- package/dist/components/Link/Link.module.scss.cjs +14 -10
- package/dist/components/Link/Link.module.scss.js +14 -10
- package/dist/components/Link/index.d.ts +1 -1
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/List/List.module.scss.cjs +19 -19
- package/dist/components/List/List.module.scss.js +19 -19
- package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
- package/dist/components/Listbox/Listbox.module.scss.js +8 -8
- package/dist/components/Loading/Loading.module.scss.cjs +34 -34
- package/dist/components/Loading/Loading.module.scss.js +34 -34
- package/dist/components/Loading/index.cjs +1 -1
- package/dist/components/Loading/index.js +1 -1
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Markdown/index.d.ts +2 -2
- package/dist/components/Markdown/index.d.ts.map +1 -1
- package/dist/components/Menu/Menu.module.scss.cjs +14 -14
- package/dist/components/Menu/Menu.module.scss.js +14 -14
- package/dist/components/Message/Message.module.scss.cjs +18 -18
- package/dist/components/Message/Message.module.scss.js +18 -18
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
- package/dist/components/NavigationMenu/index.cjs +32 -15
- package/dist/components/NavigationMenu/index.d.ts +12 -6
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +32 -15
- package/dist/components/Pagination/Pagination.module.scss.cjs +10 -10
- package/dist/components/Pagination/Pagination.module.scss.js +10 -10
- package/dist/components/Popover/Popover.module.scss.cjs +10 -10
- package/dist/components/Popover/Popover.module.scss.js +10 -10
- package/dist/components/Progress/Progress.module.scss.cjs +25 -25
- package/dist/components/Progress/Progress.module.scss.js +25 -25
- package/dist/components/Prompt/Prompt.module.scss.cjs +28 -28
- package/dist/components/Prompt/Prompt.module.scss.js +28 -28
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -15
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -15
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
- package/dist/components/ScrollArea/index.d.ts +4 -4
- package/dist/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/components/ScrollArea/scroll-state.d.ts +5 -5
- package/dist/components/Select/Select.module.scss.cjs +21 -21
- package/dist/components/Select/Select.module.scss.js +21 -21
- package/dist/components/Separator/Separator.module.scss.cjs +11 -11
- package/dist/components/Separator/Separator.module.scss.js +11 -11
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
- package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
- package/dist/components/Sidebar/index.cjs +12 -35
- package/dist/components/Sidebar/index.d.ts +19 -19
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +12 -35
- package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
- package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
- package/dist/components/Slider/Slider.module.scss.cjs +12 -12
- package/dist/components/Slider/Slider.module.scss.js +12 -12
- package/dist/components/Stack/Stack.module.scss.cjs +25 -25
- package/dist/components/Stack/Stack.module.scss.js +25 -25
- package/dist/components/Stack/index.cjs +1 -1
- package/dist/components/Stack/index.js +1 -1
- package/dist/components/Switch/Switch.module.scss.cjs +9 -9
- package/dist/components/Switch/Switch.module.scss.js +9 -9
- package/dist/components/Table/Table.module.scss.cjs +19 -19
- package/dist/components/Table/Table.module.scss.js +19 -19
- package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
- package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
- package/dist/components/TableOfContents/index.cjs +13 -9
- package/dist/components/TableOfContents/index.d.ts +5 -3
- package/dist/components/TableOfContents/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.js +13 -9
- package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
- package/dist/components/Tabs/Tabs.module.scss.js +12 -12
- package/dist/components/Tabs/index.cjs +26 -6
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +26 -6
- package/dist/components/Text/Text.module.scss.cjs +87 -75
- package/dist/components/Text/Text.module.scss.js +87 -75
- package/dist/components/Text/index.cjs +49 -41
- package/dist/components/Text/index.d.ts +12 -11
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js +49 -41
- package/dist/components/Textarea/Textarea.module.scss.cjs +24 -24
- package/dist/components/Textarea/Textarea.module.scss.js +24 -24
- package/dist/components/Theme/index.cjs +2 -1
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +2 -1
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +9 -6
- package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +9 -6
- package/dist/components/ThemeToggle/index.cjs +31 -6
- package/dist/components/ThemeToggle/index.d.ts +7 -2
- package/dist/components/ThemeToggle/index.d.ts.map +1 -1
- package/dist/components/ThemeToggle/index.js +32 -7
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
- package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
- package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
- package/dist/components/Tooltip/index.cjs +24 -40
- package/dist/components/Tooltip/index.d.ts +4 -4
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +24 -40
- package/dist/components/VisuallyHidden/index.d.ts +2 -2
- package/dist/data-table.cjs +2 -1
- package/dist/data-table.js +2 -1
- package/dist/datepicker.cjs +3 -2
- package/dist/datepicker.js +3 -2
- package/dist/editor.cjs +68 -28
- package/dist/editor.js +68 -28
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/markdown.cjs +21 -29
- package/dist/markdown.js +21 -29
- package/dist/measurements/generated.cjs +9 -1
- package/dist/measurements/generated.d.ts +7 -0
- package/dist/measurements/generated.d.ts.map +1 -1
- package/dist/measurements/generated.js +9 -1
- package/dist/utils/a11y.cjs +5 -2
- package/dist/utils/a11y.d.ts +5 -5
- package/dist/utils/a11y.d.ts.map +1 -1
- package/dist/utils/a11y.js +5 -2
- package/dist/utils/canonical-stamp.cjs +2 -8
- package/dist/utils/canonical-stamp.d.ts.map +1 -1
- package/dist/utils/canonical-stamp.js +1 -7
- package/dist/utils/css-warning.cjs +1 -1
- package/dist/utils/css-warning.js +1 -1
- package/dist/utils/env.cjs +17 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +17 -0
- package/dist/utils/keyboard-shortcuts.cjs +3 -10
- package/dist/utils/keyboard-shortcuts.d.ts +4 -4
- package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
- package/dist/utils/keyboard-shortcuts.js +3 -10
- package/dist/utils/seed-derivation.cjs +10 -6
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +10 -6
- package/fragments.json +1 -1
- package/package.json +6 -4
- package/src/assets/fragments-logo.tsx +2 -2
- package/src/assets/fragments-wordmark.tsx +4 -2
- package/src/components/Accordion/Accordion.contract.json +24 -48
- package/src/components/Alert/Alert.contract.json +37 -53
- package/src/components/Alert/Alert.module.scss +24 -0
- package/src/components/Alert/index.tsx +55 -29
- package/src/components/AppShell/AppShell.contract.json +34 -51
- package/src/components/AppShell/AppShell.module.scss +53 -40
- package/src/components/Avatar/Avatar.contract.json +31 -48
- package/src/components/Avatar/Avatar.module.scss +4 -1
- package/src/components/Badge/Badge.contract.json +37 -42
- package/src/components/Badge/Badge.module.scss +9 -2
- package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
- package/src/components/Box/Box.contract.json +40 -148
- package/src/components/Box/index.tsx +92 -99
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
- package/src/components/Breadcrumbs/Breadcrumbs.module.scss +12 -7
- package/src/components/Button/Button.module.scss +8 -7
- package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
- package/src/components/Card/Card.module.scss +82 -1
- package/src/components/Card/index.tsx +21 -2
- package/src/components/Chart/Chart.contract.json +21 -29
- package/src/components/Chart/index.tsx +36 -6
- package/src/components/Checkbox/Checkbox.contract.json +24 -24
- package/src/components/Checkbox/Checkbox.module.scss +32 -23
- package/src/components/Checkbox/index.tsx +4 -2
- package/src/components/Chip/Chip.contract.json +33 -40
- package/src/components/Chip/Chip.module.scss +2 -2
- package/src/components/Chip/index.tsx +2 -1
- package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
- package/src/components/CodeBlock/CodeBlock.module.scss +40 -15
- package/src/components/CodeBlock/css-variables-theme.ts +102 -0
- package/src/components/CodeBlock/index.tsx +91 -35
- package/src/components/Collapsible/Collapsible.contract.json +21 -36
- package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
- package/src/components/ColorPicker/ColorPicker.module.scss +15 -12
- package/src/components/ColorPicker/index.tsx +5 -1
- package/src/components/Combobox/Combobox.contract.json +36 -37
- package/src/components/Combobox/Combobox.module.scss +1 -1
- package/src/components/Combobox/index.tsx +31 -5
- package/src/components/Command/Command.contract.json +21 -43
- package/src/components/Command/index.tsx +58 -47
- package/src/components/ConversationList/ConversationList.contract.json +27 -32
- package/src/components/DataTable/DataTable.icons.tsx +4 -21
- package/src/components/DataTable/DataTable.module.scss +12 -8
- package/src/components/DataTable/index.tsx +8 -7
- package/src/components/DatePicker/DatePicker.contract.json +27 -28
- package/src/components/DatePicker/DatePicker.module.scss +12 -5
- package/src/components/DatePicker/index.tsx +5 -2
- package/src/components/Dialog/Dialog.module.scss +3 -3
- package/src/components/Dialog/index.tsx +47 -37
- package/src/components/Drawer/Drawer.contract.json +22 -36
- package/src/components/Editor/Editor.contract.json +31 -48
- package/src/components/Editor/Editor.module.scss +36 -14
- package/src/components/Editor/index.tsx +240 -179
- package/src/components/EmptyState/EmptyState.contract.json +31 -43
- package/src/components/EmptyState/EmptyState.module.scss +8 -0
- package/src/components/EmptyState/index.tsx +48 -23
- package/src/components/Field/Field.contract.json +28 -46
- package/src/components/Field/index.tsx +5 -1
- package/src/components/Fieldset/Fieldset.contract.json +21 -38
- package/src/components/Fieldset/Fieldset.module.scss +10 -3
- package/src/components/Form/Form.contract.json +20 -20
- package/src/components/Grid/Grid.contract.json +28 -64
- package/src/components/Grid/index.tsx +10 -10
- package/src/components/Header/Header.contract.json +31 -67
- package/src/components/Header/Header.module.scss +36 -21
- package/src/components/Header/index.tsx +134 -122
- package/src/components/Icon/Icon.contract.json +22 -62
- package/src/components/IconButton/IconButton.contract.json +34 -18
- package/src/components/IconButton/IconButton.module.scss +6 -7
- package/src/components/IconButton/index.tsx +2 -1
- package/src/components/Image/Image.contract.json +23 -56
- package/src/components/Input/Input.contract.json +26 -32
- package/src/components/Input/Input.module.scss +3 -2
- package/src/components/Link/Link.contract.json +32 -52
- package/src/components/Link/Link.module.scss +23 -6
- package/src/components/Link/index.tsx +1 -1
- package/src/components/List/List.contract.json +23 -52
- package/src/components/List/List.module.scss +1 -1
- package/src/components/Listbox/Listbox.contract.json +21 -37
- package/src/components/Loading/Loading.contract.json +37 -61
- package/src/components/Loading/Loading.module.scss +10 -7
- package/src/components/Loading/index.tsx +2 -2
- package/src/components/Main/Main.contract.json +17 -9
- package/src/components/Markdown/Markdown.contract.json +22 -43
- package/src/components/Markdown/Markdown.module.scss +43 -5
- package/src/components/Markdown/index.tsx +48 -49
- package/src/components/Menu/Menu.contract.json +25 -41
- package/src/components/Menu/Menu.module.scss +23 -8
- package/src/components/Message/Message.contract.json +29 -52
- package/src/components/Message/Message.module.scss +12 -5
- package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
- package/src/components/NavigationMenu/NavigationMenu.module.scss +64 -19
- package/src/components/NavigationMenu/index.tsx +105 -81
- package/src/components/Pagination/Pagination.contract.json +22 -40
- package/src/components/Pagination/Pagination.module.scss +2 -2
- package/src/components/Popover/Popover.contract.json +24 -46
- package/src/components/Popover/Popover.module.scss +6 -5
- package/src/components/Progress/Progress.contract.json +32 -28
- package/src/components/Progress/Progress.module.scss +3 -2
- package/src/components/Prompt/Prompt.contract.json +31 -47
- package/src/components/Prompt/Prompt.module.scss +13 -5
- package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
- package/src/components/RadioGroup/RadioGroup.module.scss +13 -14
- package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
- package/src/components/ScrollArea/ScrollArea.module.scss +15 -15
- package/src/components/ScrollArea/index.tsx +16 -16
- package/src/components/ScrollArea/scroll-state.ts +24 -24
- package/src/components/Select/Select.module.scss +2 -2
- package/src/components/Separator/Separator.contract.json +24 -48
- package/src/components/Sidebar/Sidebar.contract.json +35 -67
- package/src/components/Sidebar/Sidebar.module.scss +22 -13
- package/src/components/Sidebar/index.tsx +164 -164
- package/src/components/Skeleton/Skeleton.contract.json +28 -54
- package/src/components/Skeleton/Skeleton.module.scss +27 -10
- package/src/components/Slider/Slider.contract.json +27 -39
- package/src/components/Slider/Slider.module.scss +3 -3
- package/src/components/Stack/Stack.contract.json +29 -56
- package/src/components/Stack/Stack.module.scss +13 -12
- package/src/components/Stack/index.tsx +3 -3
- package/src/components/Switch/Switch.contract.json +33 -46
- package/src/components/Switch/Switch.module.scss +64 -26
- package/src/components/Table/Table.contract.json +28 -46
- package/src/components/Table/Table.module.scss +15 -3
- package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
- package/src/components/TableOfContents/TableOfContents.module.scss +15 -5
- package/src/components/TableOfContents/index.tsx +26 -9
- package/src/components/Tabs/Tabs.contract.json +24 -45
- package/src/components/Tabs/Tabs.module.scss +1 -1
- package/src/components/Tabs/index.tsx +15 -3
- package/src/components/Text/Text.contract.json +30 -72
- package/src/components/Text/Text.module.scss +21 -4
- package/src/components/Text/index.tsx +113 -75
- package/src/components/Textarea/Textarea.contract.json +25 -43
- package/src/components/Textarea/Textarea.module.scss +2 -4
- package/src/components/Theme/Theme.contract.json +32 -51
- package/src/components/Theme/index.tsx +2 -1
- package/src/components/ThemeToggle/ThemeToggle.module.scss +23 -7
- package/src/components/ThemeToggle/index.tsx +43 -7
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
- package/src/components/Toast/Toast.contract.json +30 -40
- package/src/components/Toast/Toast.module.scss +1 -1
- package/src/components/ToggleGroup/ToggleGroup.contract.json +29 -30
- package/src/components/ToggleGroup/ToggleGroup.module.scss +38 -5
- package/src/components/Tooltip/Tooltip.contract.json +31 -52
- package/src/components/Tooltip/index.tsx +19 -24
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
- package/src/components/VisuallyHidden/index.tsx +5 -5
- package/src/index.ts +2 -2
- package/src/measurements/generated.ts +9 -2
- package/src/measurements/measurements.json +7 -0
- package/src/recipes/_boolean-range.scss +3 -11
- package/src/recipes/_field.scss +5 -1
- package/src/recipes/_layout.scss +14 -7
- package/src/recipes/_popup.scss +12 -2
- package/src/recipes/_prose.scss +13 -5
- package/src/recipes/_table-chrome.scss +16 -2
- package/src/scss.d.ts +1 -1
- package/src/styles/globals.scss +20 -19
- package/src/tokens/_computed.scss +5 -16
- package/src/tokens/_derive.scss +112 -210
- package/src/tokens/_measurements.catalog.generated.css +6 -1
- package/src/tokens/_measurements.generated.scss +14 -1
- package/src/tokens/_mixins.scss +7 -8
- package/src/tokens/_palettes.scss +39 -167
- package/src/tokens/_seeds.scss +20 -20
- package/src/tokens/_variables.scss +183 -38
- package/src/utils/a11y.tsx +69 -69
- package/src/utils/aria.ts +3 -3
- package/src/utils/canonical-stamp.ts +2 -12
- package/src/utils/css-warning.ts +7 -7
- package/src/utils/env.ts +25 -0
- package/src/utils/keyboard-shortcuts.ts +131 -126
- package/src/utils/seed-derivation.ts +10 -6
- package/src/components/Button/Button.contract.json +0 -218
- package/src/components/Card/Card.contract.json +0 -175
- package/src/components/DataTable/DataTable.contract.json +0 -302
- package/src/components/Dialog/Dialog.contract.json +0 -159
- package/src/components/Select/Select.contract.json +0 -259
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "ConversationList",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Stacks chat messages in a scroller that follows new arrivals.",
|
|
5
5
|
"category": "ai",
|
|
6
|
-
"tags": [
|
|
7
|
-
"conversation",
|
|
8
|
-
"chat",
|
|
9
|
-
"messages",
|
|
10
|
-
"scroll",
|
|
11
|
-
"ai",
|
|
12
|
-
"list"
|
|
13
|
-
],
|
|
6
|
+
"tags": ["conversation", "chat", "messages", "scroll", "ai", "list"],
|
|
14
7
|
"status": "stable",
|
|
15
8
|
"sourcePath": "src/components/ConversationList/index.tsx",
|
|
16
9
|
"exportName": "ConversationList",
|
|
@@ -73,24 +66,24 @@
|
|
|
73
66
|
},
|
|
74
67
|
"usage": {
|
|
75
68
|
"when": [
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
69
|
+
"Chat interfaces holding many messages",
|
|
70
|
+
"Transcripts that should follow new arrivals",
|
|
71
|
+
"Paging back through older message history",
|
|
72
|
+
"Runs of messages grouped day by day"
|
|
80
73
|
],
|
|
81
74
|
"whenNot": [
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
75
|
+
"Plain item lists with no chat context (use List)",
|
|
76
|
+
"A single message (use Message directly)",
|
|
77
|
+
"Layouts that never scroll"
|
|
85
78
|
],
|
|
86
79
|
"guidelines": [
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"Implement onScrollTop
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
80
|
+
"autoScroll=\"smart\" follows only when the reader is already near the bottom",
|
|
81
|
+
"showAvatars={false} drops the avatar gutter and the inset that goes with it",
|
|
82
|
+
"Chrome stays on neutral surfaces; reserve accent for actions and semantic state",
|
|
83
|
+
"Implement onScrollTop to page in older messages",
|
|
84
|
+
"Your onScroll handler composes with the internal auto-scroll and history logic",
|
|
85
|
+
"Give new conversations an emptyState",
|
|
86
|
+
"Put a DateSeparator between messages from different days"
|
|
94
87
|
],
|
|
95
88
|
"accessibility": [
|
|
96
89
|
"Uses proper ARIA roles for separators",
|
|
@@ -102,28 +95,33 @@
|
|
|
102
95
|
"examples": [
|
|
103
96
|
{
|
|
104
97
|
"name": "Basic",
|
|
105
|
-
"description": "
|
|
98
|
+
"description": "Three turns stacked in reading order.",
|
|
106
99
|
"code": "<ConversationList>\n <Message role=\"user\">\n <Message.Content>Hello!</Message.Content>\n </Message>\n <Message role=\"assistant\">\n <Message.Content>Hi there! How can I help you today?</Message.Content>\n </Message>\n <Message role=\"user\">\n <Message.Content>Can you explain React hooks?</Message.Content>\n </Message>\n</ConversationList>"
|
|
107
100
|
},
|
|
108
101
|
{
|
|
109
102
|
"name": "With Date Separators",
|
|
110
|
-
"description": "
|
|
103
|
+
"description": "A labelled rule marks where one day ends.",
|
|
111
104
|
"code": "<ConversationList>\n <ConversationList.DateSeparator date={new Date(Date.now() - 86400000)} />\n <Message role=\"user\">\n <Message.Content>A message from yesterday</Message.Content>\n </Message>\n <ConversationList.DateSeparator date={new Date()} />\n <Message role=\"assistant\">\n <Message.Content>And a message from today!</Message.Content>\n </Message>\n</ConversationList>"
|
|
112
105
|
},
|
|
113
106
|
{
|
|
114
107
|
"name": "Without Avatars",
|
|
115
|
-
"description": "
|
|
108
|
+
"description": "Turns sit flush when nothing needs an avatar gutter.",
|
|
116
109
|
"code": "<ConversationList showAvatars={false}>\n <Message role=\"user\">\n <Message.Content>Hello!</Message.Content>\n </Message>\n <Message role=\"assistant\">\n <Message.Content>How can I help?</Message.Content>\n </Message>\n</ConversationList>"
|
|
117
110
|
},
|
|
118
111
|
{
|
|
119
112
|
"name": "With Typing Indicator",
|
|
120
|
-
"description": "
|
|
113
|
+
"description": "Animated dots hold the reply's place before it lands.",
|
|
121
114
|
"code": "<ConversationList>\n <Message role=\"user\">\n <Message.Content>What is TypeScript?</Message.Content>\n </Message>\n <ConversationList.TypingIndicator name=\"Assistant\" />\n</ConversationList>"
|
|
122
115
|
},
|
|
123
116
|
{
|
|
124
117
|
"name": "Loading History",
|
|
125
|
-
"description": "
|
|
118
|
+
"description": "A spinner pins to the top while older turns load.",
|
|
126
119
|
"code": "<ConversationList loadingHistory>\n <Message role=\"user\">\n <Message.Content>This is the latest message</Message.Content>\n </Message>\n</ConversationList>"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"name": "Empty",
|
|
123
|
+
"description": "A fresh conversation shows its placeholder instead of blank space.",
|
|
124
|
+
"code": "<ConversationList\n emptyState={\n <EmptyState>\n <EmptyState.Title>No messages yet</EmptyState.Title>\n <EmptyState.Description>\n Ask a question to get started.\n </EmptyState.Description>\n </EmptyState>\n }\n/>"
|
|
127
125
|
}
|
|
128
126
|
],
|
|
129
127
|
"relations": [
|
|
@@ -152,10 +150,7 @@
|
|
|
152
150
|
"loadingHistory: boolean - show history loading spinner",
|
|
153
151
|
"emptyState: ReactNode - empty conversation content"
|
|
154
152
|
],
|
|
155
|
-
"a11yRules": [
|
|
156
|
-
"A11Y_ARIA_ROLES",
|
|
157
|
-
"A11Y_MOTION_PREFERENCE"
|
|
158
|
-
]
|
|
153
|
+
"a11yRules": ["A11Y_ARIA_ROLES", "A11Y_MOTION_PREFERENCE"]
|
|
159
154
|
},
|
|
160
155
|
"provenance": {
|
|
161
156
|
"source": "migrated",
|
|
@@ -5,9 +5,7 @@ import styles from "./DataTable.module.scss";
|
|
|
5
5
|
export function ExpandIcon({ expanded }: { expanded: boolean }) {
|
|
6
6
|
return (
|
|
7
7
|
<svg
|
|
8
|
-
className={[styles.expandIcon, expanded && styles.expandIconOpen]
|
|
9
|
-
.filter(Boolean)
|
|
10
|
-
.join(" ")}
|
|
8
|
+
className={[styles.expandIcon, expanded && styles.expandIconOpen].filter(Boolean).join(" ")}
|
|
11
9
|
viewBox="0 0 12 12"
|
|
12
10
|
fill="none"
|
|
13
11
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -28,12 +26,7 @@ export function ExpandIcon({ expanded }: { expanded: boolean }) {
|
|
|
28
26
|
// (--fui-icon-xs) in CSS so all sort glyphs share the icon ladder.
|
|
29
27
|
export function SortIcon() {
|
|
30
28
|
return (
|
|
31
|
-
<svg
|
|
32
|
-
viewBox="0 0 12 12"
|
|
33
|
-
fill="none"
|
|
34
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
35
|
-
aria-hidden="true"
|
|
36
|
-
>
|
|
29
|
+
<svg viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
37
30
|
<path d="M6 2L8.5 5H3.5L6 2Z" fill="currentColor" opacity="0.3" />
|
|
38
31
|
<path d="M6 10L3.5 7H8.5L6 10Z" fill="currentColor" opacity="0.3" />
|
|
39
32
|
</svg>
|
|
@@ -42,12 +35,7 @@ export function SortIcon() {
|
|
|
42
35
|
|
|
43
36
|
export function SortAscIcon() {
|
|
44
37
|
return (
|
|
45
|
-
<svg
|
|
46
|
-
viewBox="0 0 12 12"
|
|
47
|
-
fill="none"
|
|
48
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
49
|
-
aria-hidden="true"
|
|
50
|
-
>
|
|
38
|
+
<svg viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
51
39
|
<path d="M6 2L8.5 5H3.5L6 2Z" fill="currentColor" />
|
|
52
40
|
</svg>
|
|
53
41
|
);
|
|
@@ -55,12 +43,7 @@ export function SortAscIcon() {
|
|
|
55
43
|
|
|
56
44
|
export function SortDescIcon() {
|
|
57
45
|
return (
|
|
58
|
-
<svg
|
|
59
|
-
viewBox="0 0 12 12"
|
|
60
|
-
fill="none"
|
|
61
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
62
|
-
aria-hidden="true"
|
|
63
|
-
>
|
|
46
|
+
<svg viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
64
47
|
<path d="M6 10L3.5 7H8.5L6 10Z" fill="currentColor" />
|
|
65
48
|
</svg>
|
|
66
49
|
);
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
.sortButton {
|
|
67
67
|
display: flex;
|
|
68
68
|
align-items: center;
|
|
69
|
-
gap: var(--fui-raw-space-4);
|
|
69
|
+
gap: var(--fui-raw-space-4, 4px);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
.sortButton {
|
|
@@ -176,8 +176,11 @@
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
.bordered {
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
/* Keep the rounded corners clipping the table, but never trap the
|
|
180
|
+
horizontal scroll the wrapper needs for wide tables. */
|
|
181
|
+
overflow-x: auto;
|
|
182
|
+
overflow-y: hidden;
|
|
183
|
+
border: var(--fui-table-divider-size, var(--fui-stroke-hairline, $fui-stroke-hairline)) solid
|
|
181
184
|
var(--fui-table-border, var(--fui-border, #{$fui-border}));
|
|
182
185
|
border-radius: var(--fui-radius-md, $fui-radius-md);
|
|
183
186
|
background: var(--fui-data-table-bg, var(--fui-bg-primary, #{$fui-bg-primary}));
|
|
@@ -215,7 +218,7 @@
|
|
|
215
218
|
|
|
216
219
|
.skeletonBar {
|
|
217
220
|
display: block;
|
|
218
|
-
block-size: var(--fui-raw-space-10);
|
|
221
|
+
block-size: var(--fui-raw-space-10, 10px);
|
|
219
222
|
border-radius: var(--fui-radius-sm, $fui-radius-sm);
|
|
220
223
|
background: linear-gradient(
|
|
221
224
|
90deg,
|
|
@@ -224,7 +227,8 @@
|
|
|
224
227
|
color-mix(in srgb, currentColor 8%, transparent) 75%
|
|
225
228
|
);
|
|
226
229
|
background-size: 200% 100%;
|
|
227
|
-
animation: dataTableShimmer
|
|
230
|
+
animation: dataTableShimmer var(--fui-duration-shimmer, $fui-duration-shimmer) ease-in-out
|
|
231
|
+
infinite;
|
|
228
232
|
}
|
|
229
233
|
|
|
230
234
|
@keyframes dataTableShimmer {
|
|
@@ -246,7 +250,7 @@
|
|
|
246
250
|
.expandCell {
|
|
247
251
|
display: inline-flex;
|
|
248
252
|
align-items: center;
|
|
249
|
-
gap: var(--fui-raw-space-4);
|
|
253
|
+
gap: var(--fui-raw-space-4, 4px);
|
|
250
254
|
}
|
|
251
255
|
|
|
252
256
|
.expandButton {
|
|
@@ -286,8 +290,8 @@
|
|
|
286
290
|
display: flex;
|
|
287
291
|
align-items: center;
|
|
288
292
|
justify-content: center;
|
|
289
|
-
padding-block: var(--fui-raw-space-48);
|
|
290
|
-
padding-inline: var(--fui-raw-space-24);
|
|
293
|
+
padding-block: var(--fui-raw-space-48, 48px);
|
|
294
|
+
padding-inline: var(--fui-raw-space-24, 24px);
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
.emptyMessage {
|
|
@@ -6,6 +6,7 @@ import styles from "./DataTable.module.scss";
|
|
|
6
6
|
import { Checkbox } from "../Checkbox";
|
|
7
7
|
import { ExpandIcon, SortAscIcon, SortDescIcon, SortIcon } from "./DataTable.icons";
|
|
8
8
|
import { DataTableSkeletonRows, useArrowKeyRowNav } from "./DataTable.support";
|
|
9
|
+
import { isDevelopmentBuild } from "../../utils/env";
|
|
9
10
|
|
|
10
11
|
// ============================================
|
|
11
12
|
// Dependency (@tanstack/react-table) — lazy import()
|
|
@@ -36,7 +37,7 @@ function loadReactTable(): Promise<void> {
|
|
|
36
37
|
_reactTable = (await import("@tanstack/react-table")) as unknown as ReactTableModule;
|
|
37
38
|
} catch {
|
|
38
39
|
_reactTableFailed = true;
|
|
39
|
-
if (
|
|
40
|
+
if (isDevelopmentBuild()) {
|
|
40
41
|
console.warn(
|
|
41
42
|
"[@usefragments/ui] DataTable: @tanstack/react-table is not installed. " +
|
|
42
43
|
"Rendering a static table without sorting, selection, or expansion. " +
|
|
@@ -469,9 +470,9 @@ function DataTableLive<T>({
|
|
|
469
470
|
<DataTableSkeletonRows
|
|
470
471
|
rowCount={skeletonRows}
|
|
471
472
|
columnCount={columns.length}
|
|
472
|
-
rowClassName={styles.row}
|
|
473
|
-
cellClassName={styles.td}
|
|
474
|
-
barClassName={styles.skeletonBar}
|
|
473
|
+
rowClassName={styles.row ?? ""}
|
|
474
|
+
cellClassName={styles.td ?? ""}
|
|
475
|
+
barClassName={styles.skeletonBar ?? ""}
|
|
475
476
|
/>
|
|
476
477
|
) : (
|
|
477
478
|
table.getRowModel().rows.map((row: any) => {
|
|
@@ -711,9 +712,9 @@ function DataTableStatic<T>({
|
|
|
711
712
|
<DataTableSkeletonRows
|
|
712
713
|
rowCount={skeletonRows}
|
|
713
714
|
columnCount={columnCount}
|
|
714
|
-
rowClassName={styles.row}
|
|
715
|
-
cellClassName={styles.td}
|
|
716
|
-
barClassName={styles.skeletonBar}
|
|
715
|
+
rowClassName={styles.row ?? ""}
|
|
716
|
+
cellClassName={styles.td ?? ""}
|
|
717
|
+
barClassName={styles.skeletonBar ?? ""}
|
|
717
718
|
/>
|
|
718
719
|
) : isEmpty ? (
|
|
719
720
|
<tr className={styles.row}>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
3
|
"name": "DatePicker",
|
|
4
|
-
"description": "
|
|
5
|
-
"category": "
|
|
4
|
+
"description": "Selects a date or date range from a calendar.",
|
|
5
|
+
"category": "inputs",
|
|
6
6
|
"tags": ["date", "picker", "calendar", "range", "form", "input"],
|
|
7
7
|
"status": "stable",
|
|
8
8
|
"dependencies": [
|
|
@@ -165,75 +165,74 @@
|
|
|
165
165
|
},
|
|
166
166
|
"usage": {
|
|
167
167
|
"when": [
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
"Filtering by date or date range"
|
|
168
|
+
"A date the user picks off a calendar",
|
|
169
|
+
"A start and end date together",
|
|
170
|
+
"Filtering by date"
|
|
172
171
|
],
|
|
173
172
|
"whenNot": [
|
|
174
|
-
"Time
|
|
175
|
-
"
|
|
176
|
-
"
|
|
173
|
+
"Time on its own (use a dedicated TimePicker)",
|
|
174
|
+
"A handful of known dates (use Select)",
|
|
175
|
+
"Typed date entry (use Input with a date mask)"
|
|
177
176
|
],
|
|
178
177
|
"guidelines": [
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
"
|
|
183
|
-
"
|
|
184
|
-
"DatePicker.Trigger
|
|
178
|
+
"Pair range mode with numberOfMonths={2} so both ends are visible",
|
|
179
|
+
"size=\"sm\" lines the trigger up with other dense toolbar controls",
|
|
180
|
+
"Offer presets for the common ranges: Today, Last 7 days, Last 30 days",
|
|
181
|
+
"disabledDates blocks past or unavailable days before the user tries",
|
|
182
|
+
"Placeholder names the date, not the action",
|
|
183
|
+
"DatePicker.Trigger defaults to type=\"button\", so it is safe inside a form"
|
|
185
184
|
],
|
|
186
185
|
"accessibility": [
|
|
187
|
-
"
|
|
188
|
-
"Arrow keys
|
|
186
|
+
"The calendar grid is fully keyboard navigable",
|
|
187
|
+
"Arrow keys move between days",
|
|
189
188
|
"Escape closes the calendar",
|
|
190
|
-
"Focus returns to trigger on close"
|
|
189
|
+
"Focus returns to the trigger on close"
|
|
191
190
|
]
|
|
192
191
|
},
|
|
193
192
|
"examples": [
|
|
194
193
|
{
|
|
195
194
|
"name": "Default",
|
|
196
|
-
"description": "
|
|
195
|
+
"description": "Trigger opens one month; today is outlined.",
|
|
197
196
|
"code": "<StatefulDatePicker placeholder=\"Pick a date\">\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
198
197
|
},
|
|
199
198
|
{
|
|
200
199
|
"name": "Small Trigger",
|
|
201
|
-
"description": "
|
|
200
|
+
"description": "Matches the height of other sm toolbar controls.",
|
|
202
201
|
"code": "<StatefulDatePicker size=\"sm\" placeholder=\"Last scanned\">\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
203
202
|
},
|
|
204
203
|
{
|
|
205
204
|
"name": "Date Range",
|
|
206
|
-
"description": "
|
|
205
|
+
"description": "Two months side by side so both ends of the range are visible.",
|
|
207
206
|
"code": "<StatefulRangePicker placeholder=\"Select date range\" numberOfMonths={2}>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulRangePicker>"
|
|
208
207
|
},
|
|
209
208
|
{
|
|
210
209
|
"name": "Multi-Month",
|
|
211
|
-
"description": "
|
|
210
|
+
"description": "Three months at once, for dates far from today.",
|
|
212
211
|
"code": "<StatefulDatePicker placeholder=\"Pick a date\" numberOfMonths={3}>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
213
212
|
},
|
|
214
213
|
{
|
|
215
214
|
"name": "Disabled Dates",
|
|
216
|
-
"description": "
|
|
215
|
+
"description": "Everything before today is greyed out and unclickable.",
|
|
217
216
|
"code": "<StatefulDatePicker\n placeholder=\"Select a future date\"\n disabledDates={{ before: new Date() }}\n>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
218
217
|
},
|
|
219
218
|
{
|
|
220
219
|
"name": "With Presets",
|
|
221
|
-
"description": "
|
|
220
|
+
"description": "Shortcut buttons beside the calendar skip the common ranges.",
|
|
222
221
|
"code": "<StatefulRangePicker placeholder=\"Select date range\" numberOfMonths={2}>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem', minWidth: '8rem' }}>\n <DatePicker.Preset range={{ from: today, to: today }}>Today</DatePicker.Preset>\n <DatePicker.Preset range={{ from: subDays(today, 7), to: today }}>Last 7 days</DatePicker.Preset>\n <DatePicker.Preset range={{ from: subDays(today, 30), to: today }}>Last 30 days</DatePicker.Preset>\n <DatePicker.Preset range={{ from: subDays(today, 90), to: today }}>Last 90 days</DatePicker.Preset>\n </div>\n <DatePicker.Calendar />\n </div>\n </DatePicker.Content>\n</StatefulRangePicker>"
|
|
223
222
|
},
|
|
224
223
|
{
|
|
225
224
|
"name": "With Label and Helper Text",
|
|
226
|
-
"description": "
|
|
227
|
-
"code": "<StatefulDatePicker placeholder=\"Pick a date\">\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
225
|
+
"description": "Label above the trigger, supporting text below it.",
|
|
226
|
+
"code": "<StatefulDatePicker\n label=\"Renewal date\"\n placeholder=\"Pick a date\"\n helperText=\"Billing restarts on this day each month.\"\n>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
228
227
|
},
|
|
229
228
|
{
|
|
230
229
|
"name": "Error State",
|
|
231
|
-
"description": "
|
|
230
|
+
"description": "Red border on the trigger, and the reason below it.",
|
|
232
231
|
"code": "<DatePicker\n label=\"Start Date\"\n placeholder=\"Pick a date\"\n error=\"Please select a start date\"\n>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</DatePicker>"
|
|
233
232
|
},
|
|
234
233
|
{
|
|
235
234
|
"name": "Disabled",
|
|
236
|
-
"description": "
|
|
235
|
+
"description": "Dimmed; the calendar will not open.",
|
|
237
236
|
"code": "<StatefulDatePicker placeholder=\"Pick a date\" disabled>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
|
|
238
237
|
}
|
|
239
238
|
],
|
|
@@ -43,6 +43,12 @@
|
|
|
43
43
|
&[data-popup-open] {
|
|
44
44
|
border-color: var(--fui-field-border-focus, $fui-color-accent);
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
// Error border, matching Input. Set from the wrapper's data-invalid so the
|
|
48
|
+
// control reads as failed, not just the message beneath it.
|
|
49
|
+
.wrapper[data-invalid] & {
|
|
50
|
+
border-color: var(--fui-color-danger-text, $fui-color-danger-text);
|
|
51
|
+
}
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
.triggerSm {
|
|
@@ -276,7 +282,8 @@
|
|
|
276
282
|
// ============================================
|
|
277
283
|
|
|
278
284
|
.today > .dayButton {
|
|
279
|
-
box-shadow: inset 0 0 0
|
|
285
|
+
box-shadow: inset 0 0 0 var(--fui-stroke-hairline, 1px)
|
|
286
|
+
var(--fui-field-border, $fui-border-strong);
|
|
280
287
|
background-color: color-mix(in srgb, var(--fui-bg-hover, $fui-bg-hover) 55%, transparent);
|
|
281
288
|
}
|
|
282
289
|
|
|
@@ -318,7 +325,7 @@
|
|
|
318
325
|
&::before {
|
|
319
326
|
content: "";
|
|
320
327
|
position: absolute;
|
|
321
|
-
inset: 2px 0;
|
|
328
|
+
inset: var(--fui-raw-space-2, 2px) 0;
|
|
322
329
|
background-color: color-mix(
|
|
323
330
|
in srgb,
|
|
324
331
|
var(--fui-color-accent, $fui-color-accent) 10%,
|
|
@@ -339,7 +346,7 @@
|
|
|
339
346
|
&::before {
|
|
340
347
|
content: "";
|
|
341
348
|
position: absolute;
|
|
342
|
-
inset: 2px 0 2px 50%;
|
|
349
|
+
inset: var(--fui-raw-space-2, 2px) 0 var(--fui-raw-space-2, 2px) 50%;
|
|
343
350
|
background-color: color-mix(
|
|
344
351
|
in srgb,
|
|
345
352
|
var(--fui-color-accent, $fui-color-accent) 10%,
|
|
@@ -369,7 +376,7 @@
|
|
|
369
376
|
&::before {
|
|
370
377
|
content: "";
|
|
371
378
|
position: absolute;
|
|
372
|
-
inset: 2px 50% 2px 0;
|
|
379
|
+
inset: var(--fui-raw-space-2, 2px) 50% var(--fui-raw-space-2, 2px) 0;
|
|
373
380
|
background-color: color-mix(
|
|
374
381
|
in srgb,
|
|
375
382
|
var(--fui-color-accent, $fui-color-accent) 10%,
|
|
@@ -419,7 +426,7 @@
|
|
|
419
426
|
|
|
420
427
|
@media (prefers-contrast: more) {
|
|
421
428
|
.trigger {
|
|
422
|
-
border-width: 2px;
|
|
429
|
+
border-width: var(--fui-stroke-default, 2px);
|
|
423
430
|
border-color: var(--fui-text-primary, $fui-text-primary);
|
|
424
431
|
|
|
425
432
|
&[data-popup-open] {
|
|
@@ -6,6 +6,7 @@ import { useFormFieldIds, type FormFieldProps } from "../../utils/aria";
|
|
|
6
6
|
import { POPUP_OFFSET_PX } from "../../recipes/popup";
|
|
7
7
|
import { useResolvedControlSize } from "../ComponentDefaults";
|
|
8
8
|
import styles from "./DatePicker.module.scss";
|
|
9
|
+
import { isDevelopmentBuild } from "../../utils/env";
|
|
9
10
|
|
|
10
11
|
// ============================================
|
|
11
12
|
// Types (self-owned — no external dependency for types)
|
|
@@ -249,7 +250,7 @@ function loadDayPickerDeps(): Promise<void> {
|
|
|
249
250
|
_DayFlag = rdp.DayFlag as unknown as RdpEnum;
|
|
250
251
|
} catch {
|
|
251
252
|
_rdpFailed = true;
|
|
252
|
-
if (
|
|
253
|
+
if (isDevelopmentBuild()) {
|
|
253
254
|
console.warn(
|
|
254
255
|
"[@usefragments/ui] DatePicker: react-day-picker is not installed. " +
|
|
255
256
|
"Install it with: npm install react-day-picker"
|
|
@@ -476,7 +477,9 @@ const DatePickerRoot = React.forwardRef<HTMLDivElement, DatePickerProps>(functio
|
|
|
476
477
|
|
|
477
478
|
return (
|
|
478
479
|
<DatePickerContext.Provider value={contextValue}>
|
|
479
|
-
|
|
480
|
+
{/* data-invalid lets the trigger pick up the error border; without it only
|
|
481
|
+
the message turns red and the control still looks valid. */}
|
|
482
|
+
<div ref={ref} className={wrapperClasses} data-invalid={hasError || undefined}>
|
|
480
483
|
{label && (
|
|
481
484
|
<span id={labelId} className={styles.label}>
|
|
482
485
|
{label}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
inline-size: 100%;
|
|
43
43
|
max-inline-size: overlay.dialog-max("md");
|
|
44
44
|
opacity: 0;
|
|
45
|
-
transform: scale(0.95) translateY(
|
|
45
|
+
transform: scale(0.95) translateY(calc(-1 * var(--fui-anim-offset-md, #{$fui-anim-offset-md})));
|
|
46
46
|
transition:
|
|
47
47
|
opacity var(--fui-transition-normal, $fui-transition-normal),
|
|
48
48
|
transform var(--fui-transition-normal, $fui-transition-normal);
|
|
@@ -54,12 +54,12 @@
|
|
|
54
54
|
|
|
55
55
|
&[data-starting-style] {
|
|
56
56
|
opacity: 0;
|
|
57
|
-
transform: scale(0.95) translateY(
|
|
57
|
+
transform: scale(0.95) translateY(calc(-1 * var(--fui-anim-offset-md, #{$fui-anim-offset-md})));
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
&[data-ending-style] {
|
|
61
61
|
opacity: 0;
|
|
62
|
-
transform: scale(0.95) translateY($fui-anim-offset-md);
|
|
62
|
+
transform: scale(0.95) translateY(var(--fui-anim-offset-md, #{$fui-anim-offset-md}));
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|