@fragments-sdk/ui 0.17.1 → 0.19.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/dist/assets/ui.css +2700 -3256
- package/dist/chart.cjs +0 -1
- package/dist/chart.js +0 -1
- package/dist/codeblock.cjs +0 -1
- package/dist/codeblock.js +0 -1
- package/dist/colorpicker.cjs +0 -1
- package/dist/colorpicker.js +0 -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 +12 -12
- package/dist/components/Alert/Alert.module.scss.js +12 -12
- package/dist/components/AppShell/AppShell.module.scss.cjs +12 -12
- package/dist/components/AppShell/AppShell.module.scss.js +12 -12
- package/dist/components/Avatar/Avatar.module.scss.cjs +13 -13
- package/dist/components/Avatar/Avatar.module.scss.js +13 -13
- package/dist/components/Badge/Badge.module.scss.cjs +13 -13
- package/dist/components/Badge/Badge.module.scss.js +13 -13
- 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/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 +12 -12
- package/dist/components/Button/Button.module.scss.js +12 -12
- package/dist/components/Card/Card.module.scss.cjs +14 -14
- package/dist/components/Card/Card.module.scss.js +14 -14
- 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 +0 -1
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +10 -10
- package/dist/components/Checkbox/Checkbox.module.scss.js +10 -10
- package/dist/components/Chip/Chip.module.scss.cjs +15 -15
- package/dist/components/Chip/Chip.module.scss.js +15 -15
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +21 -21
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +21 -21
- package/dist/components/CodeBlock/index.d.ts +0 -1
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +10 -10
- package/dist/components/Collapsible/Collapsible.module.scss.js +10 -10
- 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 +0 -1
- package/dist/components/ColorPicker/index.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.module.scss.cjs +23 -23
- package/dist/components/Combobox/Combobox.module.scss.js +23 -23
- package/dist/components/Combobox/index.cjs +13 -10
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +13 -10
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- 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.module.scss.cjs +26 -26
- package/dist/components/DataTable/DataTable.module.scss.js +26 -26
- package/dist/components/DataTable/index.cjs +0 -1
- package/dist/components/DataTable/index.d.ts +0 -1
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DataTable/index.js +0 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +31 -31
- package/dist/components/DatePicker/DatePicker.module.scss.js +31 -31
- package/dist/components/DatePicker/index.d.ts +0 -1
- 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/Drawer/Drawer.module.scss.cjs +33 -27
- package/dist/components/Drawer/Drawer.module.scss.js +34 -28
- package/dist/components/Drawer/index.cjs +36 -14
- package/dist/components/Drawer/index.d.ts +21 -3
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +36 -14
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
- package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
- package/dist/components/Field/Field.module.scss.cjs +4 -4
- package/dist/components/Field/Field.module.scss.js +4 -4
- package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
- package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
- package/dist/components/Header/Header.module.scss.cjs +28 -28
- package/dist/components/Header/Header.module.scss.js +28 -28
- package/dist/components/Icon/Icon.module.scss.cjs +8 -8
- package/dist/components/Icon/Icon.module.scss.js +8 -8
- 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 +19 -19
- package/dist/components/Input/Input.module.scss.js +19 -19
- package/dist/components/Link/Link.module.scss.cjs +10 -10
- package/dist/components/Link/Link.module.scss.js +10 -10
- 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 +30 -30
- package/dist/components/Loading/Loading.module.scss.js +30 -30
- 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 +0 -1
- package/dist/components/Markdown/index.d.ts.map +1 -1
- package/dist/components/Menu/Menu.module.scss.cjs +16 -13
- package/dist/components/Menu/Menu.module.scss.js +17 -14
- package/dist/components/Menu/index.cjs +1 -1
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/components/Menu/index.js +1 -1
- 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 +28 -28
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
- package/dist/components/Pagination/Pagination.module.scss.cjs +7 -7
- package/dist/components/Pagination/Pagination.module.scss.js +7 -7
- 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 +26 -14
- package/dist/components/Prompt/Prompt.module.scss.js +26 -14
- package/dist/components/Prompt/index.cjs +16 -0
- package/dist/components/Prompt/index.d.ts +17 -1
- package/dist/components/Prompt/index.d.ts.map +1 -1
- package/dist/components/Prompt/index.js +16 -0
- package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +16 -16
- package/dist/components/RadioGroup/RadioGroup.module.scss.js +16 -16
- package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +10 -10
- package/dist/components/ScrollArea/ScrollArea.module.scss.js +10 -10
- package/dist/components/Select/Select.module.scss.cjs +17 -17
- package/dist/components/Select/Select.module.scss.js +17 -17
- package/dist/components/Select/index.cjs +20 -20
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +20 -20
- package/dist/components/Separator/Separator.module.scss.cjs +10 -10
- package/dist/components/Separator/Separator.module.scss.js +10 -10
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
- package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
- package/dist/components/Slider/Slider.module.scss.cjs +12 -12
- package/dist/components/Slider/Slider.module.scss.js +12 -12
- package/dist/components/Slider/index.cjs +23 -21
- package/dist/components/Slider/index.js +23 -21
- package/dist/components/Stack/Stack.module.scss.cjs +35 -35
- package/dist/components/Stack/Stack.module.scss.js +35 -35
- package/dist/components/Table/Table.module.scss.cjs +16 -16
- package/dist/components/Table/Table.module.scss.js +16 -16
- package/dist/components/Table/index.d.ts +0 -1
- package/dist/components/Table/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +7 -7
- package/dist/components/TableOfContents/TableOfContents.module.scss.js +7 -7
- package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
- package/dist/components/Tabs/Tabs.module.scss.js +9 -9
- package/dist/components/Text/Text.module.scss.cjs +38 -38
- package/dist/components/Text/Text.module.scss.js +38 -38
- package/dist/components/Textarea/Textarea.module.scss.cjs +23 -23
- package/dist/components/Textarea/Textarea.module.scss.js +23 -23
- package/dist/components/Theme/ThemeToggle.module.scss.cjs +6 -6
- package/dist/components/Theme/ThemeToggle.module.scss.js +6 -6
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/Toggle/Toggle.module.scss.cjs +13 -13
- package/dist/components/Toggle/Toggle.module.scss.js +13 -13
- 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 +4 -3
- package/dist/components/Tooltip/index.d.ts +4 -1
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +4 -3
- package/dist/datepicker.cjs +0 -1
- package/dist/datepicker.js +0 -1
- package/dist/index.cjs +0 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/markdown.cjs +0 -1
- package/dist/markdown.js +0 -1
- package/dist/table.cjs +0 -1
- package/dist/table.js +0 -1
- package/dist/utils/seed-derivation.cjs +29 -0
- package/dist/utils/seed-derivation.d.ts +1 -1
- package/dist/utils/seed-derivation.d.ts.map +1 -1
- package/dist/utils/seed-derivation.js +29 -0
- package/fragments.json +1 -1
- package/package.json +18 -14
- package/src/components/Accordion/Accordion.contract.json +169 -0
- package/src/components/Alert/Alert.contract.json +157 -0
- package/src/components/AppShell/AppShell.contract.json +155 -0
- package/src/components/Avatar/Avatar.contract.json +189 -0
- package/src/components/Badge/Badge.contract.json +187 -0
- package/src/components/BentoGrid/BentoGrid.contract.json +135 -0
- package/src/components/Box/Box.contract.json +423 -0
- package/src/components/Breadcrumbs/Breadcrumbs.contract.json +143 -0
- package/src/components/Button/Button.contract.json +205 -0
- package/src/components/Button/Button.module.scss +24 -1
- package/src/components/ButtonGroup/ButtonGroup.contract.json +140 -0
- package/src/components/Card/Card.contract.json +185 -0
- package/src/components/Card/Card.module.scss +5 -1
- package/src/components/Chart/Chart.contract.json +129 -0
- package/src/components/Chart/index.tsx +0 -1
- package/src/components/Checkbox/Checkbox.contract.json +246 -0
- package/src/components/Chip/Chip.contract.json +212 -0
- package/src/components/Chip/Chip.module.scss +4 -4
- package/src/components/CodeBlock/CodeBlock.contract.json +388 -0
- package/src/components/CodeBlock/index.tsx +0 -1
- package/src/components/Collapsible/Collapsible.contract.json +154 -0
- package/src/components/ColorPicker/ColorPicker.contract.json +212 -0
- package/src/components/ColorPicker/index.tsx +0 -1
- package/src/components/Combobox/Combobox.contract.json +297 -0
- package/src/components/Combobox/index.tsx +7 -8
- package/src/components/Command/Command.contract.json +165 -0
- package/src/components/Command/Command.module.scss +22 -9
- package/src/components/ConversationList/ConversationList.contract.json +151 -0
- package/src/components/DataTable/DataTable.contract.json +302 -0
- package/src/components/DataTable/index.tsx +0 -2
- package/src/components/DatePicker/DatePicker.contract.json +288 -0
- package/src/components/DatePicker/index.tsx +0 -2
- package/src/components/Dialog/Dialog.contract.json +159 -0
- package/src/components/Drawer/Drawer.contract.json +161 -0
- package/src/components/Drawer/Drawer.module.scss +45 -5
- package/src/components/Drawer/index.tsx +66 -23
- package/src/components/Editor/Editor.contract.json +263 -0
- package/src/components/EmptyState/EmptyState.contract.json +133 -0
- package/src/components/Field/Field.contract.json +157 -0
- package/src/components/Fieldset/Fieldset.contract.json +117 -0
- package/src/components/Form/Form.contract.json +145 -0
- package/src/components/Grid/Grid.contract.json +195 -0
- package/src/components/Header/Header.contract.json +196 -0
- package/src/components/Icon/Icon.contract.json +194 -0
- package/src/components/Image/Image.contract.json +209 -0
- package/src/components/Input/Input.contract.json +344 -0
- package/src/components/Input/Input.module.scss +16 -6
- package/src/components/Link/Link.contract.json +180 -0
- package/src/components/List/List.contract.json +154 -0
- package/src/components/Listbox/Listbox.contract.json +158 -0
- package/src/components/Loading/Loading.contract.json +167 -0
- package/src/components/Markdown/Markdown.contract.json +127 -0
- package/src/components/Markdown/Markdown.module.scss +0 -3
- package/src/components/Markdown/index.tsx +0 -1
- package/src/components/Menu/Menu.contract.json +177 -0
- package/src/components/Menu/Menu.module.scss +6 -0
- package/src/components/Menu/index.tsx +3 -1
- package/src/components/Message/Message.contract.json +183 -0
- package/src/components/Message/Message.module.scss +2 -2
- package/src/components/NavigationMenu/NavigationMenu.contract.json +203 -0
- package/src/components/NavigationMenu/NavigationMenu.module.scss +18 -23
- package/src/components/Pagination/Pagination.contract.json +163 -0
- package/src/components/Pagination/Pagination.module.scss +1 -1
- package/src/components/Popover/Popover.contract.json +163 -0
- package/src/components/Progress/Progress.contract.json +176 -0
- package/src/components/Prompt/Prompt.contract.json +211 -0
- package/src/components/Prompt/Prompt.module.scss +117 -3
- package/src/components/Prompt/index.tsx +40 -0
- package/src/components/RadioGroup/RadioGroup.contract.json +226 -0
- package/src/components/ScrollArea/ScrollArea.contract.json +131 -0
- package/src/components/Select/Select.contract.json +269 -0
- package/src/components/Select/index.tsx +20 -25
- package/src/components/Separator/Separator.contract.json +143 -0
- package/src/components/Sidebar/Sidebar.contract.json +258 -0
- package/src/components/Sidebar/Sidebar.module.scss +1 -1
- package/src/components/Skeleton/Skeleton.contract.json +166 -0
- package/src/components/Slider/Slider.contract.json +248 -0
- package/src/components/Slider/index.tsx +10 -10
- package/src/components/Stack/Stack.contract.json +220 -0
- package/src/components/Table/Table.contract.json +171 -0
- package/src/components/Table/index.tsx +0 -2
- package/src/components/TableOfContents/TableOfContents.contract.json +145 -0
- package/src/components/TableOfContents/TableOfContents.module.scss +19 -15
- package/src/components/Tabs/Tabs.contract.json +159 -0
- package/src/components/Text/Text.contract.json +239 -0
- package/src/components/Textarea/Textarea.contract.json +308 -0
- package/src/components/Theme/Theme.contract.json +152 -0
- package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +165 -0
- package/src/components/Toast/Toast.contract.json +181 -0
- package/src/components/Toggle/Toggle.contract.json +231 -0
- package/src/components/Toggle/Toggle.module.scss +3 -3
- package/src/components/ToggleGroup/ToggleGroup.contract.json +206 -0
- package/src/components/Tooltip/Tooltip.contract.json +214 -0
- package/src/components/Tooltip/index.tsx +7 -3
- package/src/components/VisuallyHidden/VisuallyHidden.contract.json +116 -0
- package/src/index.ts +8 -3
- package/src/styles/globals.scss +6 -1
- package/src/tokens/_computed.scss +3 -1
- package/src/tokens/_density.scss +4 -4
- package/src/tokens/_derive.scss +52 -56
- package/src/tokens/_palettes.scss +20 -1
- package/src/tokens/_seeds.scss +2 -2
- package/src/tokens/_variables.scss +45 -29
- package/src/utils/seed-derivation.ts +23 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
|
+
"name": "RadioGroup",
|
|
4
|
+
"description": "Single selection from a list of mutually exclusive options",
|
|
5
|
+
"category": "forms",
|
|
6
|
+
"tags": [
|
|
7
|
+
"form",
|
|
8
|
+
"radio",
|
|
9
|
+
"selection",
|
|
10
|
+
"options"
|
|
11
|
+
],
|
|
12
|
+
"status": "stable",
|
|
13
|
+
"sourcePath": "src/components/RadioGroup/index.tsx",
|
|
14
|
+
"exportName": "RadioGroup",
|
|
15
|
+
"propsSummary": [
|
|
16
|
+
"value: string",
|
|
17
|
+
"defaultValue: string",
|
|
18
|
+
"onValueChange: function",
|
|
19
|
+
"onChange: function",
|
|
20
|
+
"orientation: horizontal|vertical (default: vertical)",
|
|
21
|
+
"disabled: boolean (default: false)",
|
|
22
|
+
"name: string",
|
|
23
|
+
"label: string",
|
|
24
|
+
"helperText: string",
|
|
25
|
+
"error: union",
|
|
26
|
+
"size: sm|md|lg (default: md)",
|
|
27
|
+
"wrapperClassName: string",
|
|
28
|
+
"groupClassName: string",
|
|
29
|
+
"children: node (required)"
|
|
30
|
+
],
|
|
31
|
+
"props": {
|
|
32
|
+
"value": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"description": "Controlled selected value",
|
|
35
|
+
"required": false
|
|
36
|
+
},
|
|
37
|
+
"defaultValue": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Default value (uncontrolled)",
|
|
40
|
+
"required": false
|
|
41
|
+
},
|
|
42
|
+
"onValueChange": {
|
|
43
|
+
"type": "function",
|
|
44
|
+
"description": "Callback when selection changes",
|
|
45
|
+
"required": false
|
|
46
|
+
},
|
|
47
|
+
"onChange": {
|
|
48
|
+
"type": "function",
|
|
49
|
+
"description": "Alias for onValueChange",
|
|
50
|
+
"required": false
|
|
51
|
+
},
|
|
52
|
+
"orientation": {
|
|
53
|
+
"type": "enum",
|
|
54
|
+
"description": "Layout orientation",
|
|
55
|
+
"default": "vertical",
|
|
56
|
+
"required": false,
|
|
57
|
+
"values": [
|
|
58
|
+
"horizontal",
|
|
59
|
+
"vertical"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"disabled": {
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"description": "Disable all options",
|
|
65
|
+
"default": "false",
|
|
66
|
+
"required": false
|
|
67
|
+
},
|
|
68
|
+
"name": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "Form field name",
|
|
71
|
+
"required": false
|
|
72
|
+
},
|
|
73
|
+
"label": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "Group label",
|
|
76
|
+
"required": false
|
|
77
|
+
},
|
|
78
|
+
"helperText": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "Helper text shown below the group",
|
|
81
|
+
"required": false
|
|
82
|
+
},
|
|
83
|
+
"error": {
|
|
84
|
+
"type": "union",
|
|
85
|
+
"description": "Show error styling. When a string is provided, it is displayed as an error message.",
|
|
86
|
+
"required": false
|
|
87
|
+
},
|
|
88
|
+
"size": {
|
|
89
|
+
"type": "enum",
|
|
90
|
+
"description": "Size variant",
|
|
91
|
+
"default": "md",
|
|
92
|
+
"required": false,
|
|
93
|
+
"values": [
|
|
94
|
+
"sm",
|
|
95
|
+
"md",
|
|
96
|
+
"lg"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
"wrapperClassName": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "Class name for the outer wrapper element",
|
|
102
|
+
"required": false
|
|
103
|
+
},
|
|
104
|
+
"groupClassName": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"description": "Class name for the inner radio group element",
|
|
107
|
+
"required": false
|
|
108
|
+
},
|
|
109
|
+
"children": {
|
|
110
|
+
"type": "node",
|
|
111
|
+
"description": "RadioGroup.Item elements",
|
|
112
|
+
"required": true
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"usage": {
|
|
116
|
+
"when": [
|
|
117
|
+
"User must select exactly one option from a small set",
|
|
118
|
+
"Options are mutually exclusive",
|
|
119
|
+
"All options should be visible at once",
|
|
120
|
+
"2-5 options available"
|
|
121
|
+
],
|
|
122
|
+
"whenNot": [
|
|
123
|
+
"Multiple selections allowed (use Checkbox group)",
|
|
124
|
+
"Many options (use Select)",
|
|
125
|
+
"Binary on/off choice (use Switch)",
|
|
126
|
+
"Options need to be searchable (use Combobox)"
|
|
127
|
+
],
|
|
128
|
+
"guidelines": [
|
|
129
|
+
"Always have one option pre-selected when possible",
|
|
130
|
+
"Order options logically (alphabetical, frequency, etc.)",
|
|
131
|
+
"Keep option labels concise",
|
|
132
|
+
"Use helperText on RadioGroup.Item for complex options"
|
|
133
|
+
],
|
|
134
|
+
"accessibility": [
|
|
135
|
+
"Group must have an accessible label",
|
|
136
|
+
"Use arrow keys to navigate between options",
|
|
137
|
+
"Selected option should be clearly indicated"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
"examples": [
|
|
141
|
+
{
|
|
142
|
+
"name": "Default",
|
|
143
|
+
"description": "Basic radio group with labels",
|
|
144
|
+
"code": "<RadioGroup defaultValue=\"option1\" label=\"Select an option\">\n <RadioGroup.Item value=\"option1\" label=\"Option 1\" />\n <RadioGroup.Item value=\"option2\" label=\"Option 2\" />\n <RadioGroup.Item value=\"option3\" label=\"Option 3\" />\n</RadioGroup>"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"name": "With Helper Text",
|
|
148
|
+
"description": "Radio items with additional context",
|
|
149
|
+
"code": "<RadioGroup defaultValue=\"standard\" label=\"Shipping Method\">\n <RadioGroup.Item\n value=\"standard\"\n label=\"Standard\"\n helperText=\"5-7 business days\"\n />\n <RadioGroup.Item\n value=\"express\"\n label=\"Express\"\n helperText=\"2-3 business days\"\n />\n <RadioGroup.Item\n value=\"overnight\"\n label=\"Overnight\"\n helperText=\"Next business day\"\n />\n</RadioGroup>"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "Horizontal",
|
|
153
|
+
"description": "Side-by-side layout",
|
|
154
|
+
"code": "<RadioGroup orientation=\"horizontal\" defaultValue=\"small\" label=\"Size\">\n <RadioGroup.Item value=\"small\" label=\"S\" />\n <RadioGroup.Item value=\"medium\" label=\"M\" />\n <RadioGroup.Item value=\"large\" label=\"L\" />\n <RadioGroup.Item value=\"xlarge\" label=\"XL\" />\n</RadioGroup>"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "With Group Helper Text",
|
|
158
|
+
"description": "Group-level helper text",
|
|
159
|
+
"code": "<RadioGroup defaultValue=\"standard\" label=\"Plan\" helperText=\"You can change your plan at any time\">\n <RadioGroup.Item value=\"free\" label=\"Free\" />\n <RadioGroup.Item value=\"standard\" label=\"Standard\" />\n <RadioGroup.Item value=\"pro\" label=\"Pro\" />\n</RadioGroup>"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"name": "With Error",
|
|
163
|
+
"description": "Validation error state (string shows error message)",
|
|
164
|
+
"code": "<RadioGroup label=\"Required selection\" error=\"Please select an option\">\n <RadioGroup.Item value=\"a\" label=\"Option A\" />\n <RadioGroup.Item value=\"b\" label=\"Option B\" />\n</RadioGroup>"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"name": "Disabled",
|
|
168
|
+
"description": "Non-interactive state",
|
|
169
|
+
"code": "<RadioGroup disabled defaultValue=\"locked\" label=\"Locked selection\">\n <RadioGroup.Item value=\"locked\" label=\"This is locked\" />\n <RadioGroup.Item value=\"other\" label=\"Cannot select\" />\n</RadioGroup>"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "Styling Targets",
|
|
173
|
+
"description": "Use explicit class names for wrapper/group/item styling hooks",
|
|
174
|
+
"code": "<RadioGroup\n defaultValue=\"a\"\n label=\"Display mode\"\n wrapperClassName=\"demo-radio-wrapper\"\n groupClassName=\"demo-radio-group\"\n>\n <RadioGroup.Item value=\"a\" label=\"Compact\" controlClassName=\"demo-radio-control\" contentClassName=\"demo-radio-content\" />\n <RadioGroup.Item value=\"b\" label=\"Comfortable\" />\n</RadioGroup>"
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
"relations": [
|
|
178
|
+
{
|
|
179
|
+
"component": "Checkbox",
|
|
180
|
+
"relationship": "alternative",
|
|
181
|
+
"note": "Use Checkbox for multiple selections"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"component": "Select",
|
|
185
|
+
"relationship": "alternative",
|
|
186
|
+
"note": "Use Select for many options or limited space"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"component": "Switch",
|
|
190
|
+
"relationship": "alternative",
|
|
191
|
+
"note": "Use Switch for binary on/off choices"
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"contract": {
|
|
195
|
+
"propsSummary": [
|
|
196
|
+
"value: string - selected value",
|
|
197
|
+
"onValueChange: (value: string) => void",
|
|
198
|
+
"onChange: (value: string) => void - alias for onValueChange",
|
|
199
|
+
"orientation: horizontal|vertical (default: vertical)",
|
|
200
|
+
"size: sm|md|lg (default: md)",
|
|
201
|
+
"label: string - group label",
|
|
202
|
+
"helperText: string - helper text below the group",
|
|
203
|
+
"error: boolean | string - error styling and message",
|
|
204
|
+
"disabled: boolean - disable all options",
|
|
205
|
+
"wrapperClassName/groupClassName - explicit styling targets for wrapper and group",
|
|
206
|
+
"RadioGroup.Item supports helperText (preferred) and description (legacy alias) plus controlClassName/contentClassName for item-level styling"
|
|
207
|
+
],
|
|
208
|
+
"a11yRules": [
|
|
209
|
+
"A11Y_RADIO_GROUP",
|
|
210
|
+
"A11Y_LABEL_REQUIRED",
|
|
211
|
+
"A11Y_TARGET_SIZE_MIN"
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
"ai": {
|
|
215
|
+
"compositionPattern": "compound",
|
|
216
|
+
"subComponents": [
|
|
217
|
+
"Item"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
"provenance": {
|
|
221
|
+
"source": "migrated",
|
|
222
|
+
"verified": false,
|
|
223
|
+
"frameworkSupport": "native",
|
|
224
|
+
"extractedAt": "2026-03-13T23:19:02.692Z"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
|
+
"name": "ScrollArea",
|
|
4
|
+
"description": "A styled scrollable container with thin scrollbars and optional fade indicators.",
|
|
5
|
+
"category": "layout",
|
|
6
|
+
"tags": [
|
|
7
|
+
"scroll",
|
|
8
|
+
"overflow",
|
|
9
|
+
"scrollbar",
|
|
10
|
+
"container",
|
|
11
|
+
"layout"
|
|
12
|
+
],
|
|
13
|
+
"status": "stable",
|
|
14
|
+
"sourcePath": "src/components/ScrollArea/index.tsx",
|
|
15
|
+
"exportName": "ScrollArea",
|
|
16
|
+
"propsSummary": [
|
|
17
|
+
"children: node (required)",
|
|
18
|
+
"orientation: horizontal|vertical|both (default: vertical)",
|
|
19
|
+
"scrollbarVisibility: auto|always|hover (default: auto)",
|
|
20
|
+
"showFades: boolean (default: false)",
|
|
21
|
+
"className: string"
|
|
22
|
+
],
|
|
23
|
+
"props": {
|
|
24
|
+
"children": {
|
|
25
|
+
"type": "node",
|
|
26
|
+
"description": "Scrollable content",
|
|
27
|
+
"required": true
|
|
28
|
+
},
|
|
29
|
+
"orientation": {
|
|
30
|
+
"type": "enum",
|
|
31
|
+
"description": "Scroll direction",
|
|
32
|
+
"default": "vertical",
|
|
33
|
+
"required": false,
|
|
34
|
+
"values": [
|
|
35
|
+
"horizontal",
|
|
36
|
+
"vertical",
|
|
37
|
+
"both"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"scrollbarVisibility": {
|
|
41
|
+
"type": "enum",
|
|
42
|
+
"description": "When to show the scrollbar",
|
|
43
|
+
"default": "auto",
|
|
44
|
+
"required": false,
|
|
45
|
+
"values": [
|
|
46
|
+
"auto",
|
|
47
|
+
"always",
|
|
48
|
+
"hover"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"showFades": {
|
|
52
|
+
"type": "boolean",
|
|
53
|
+
"description": "Show gradient fade indicators at scroll edges",
|
|
54
|
+
"default": "false",
|
|
55
|
+
"required": false
|
|
56
|
+
},
|
|
57
|
+
"className": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Additional class name",
|
|
60
|
+
"required": false
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"usage": {
|
|
64
|
+
"when": [
|
|
65
|
+
"Content overflows its container and needs scrolling",
|
|
66
|
+
"Horizontal tab bars or chip lists that may overflow",
|
|
67
|
+
"Scrollable panels, sidebars, or dropdown content",
|
|
68
|
+
"Any area where native scrollbars look too heavy"
|
|
69
|
+
],
|
|
70
|
+
"whenNot": [
|
|
71
|
+
"Page-level scrolling (use native body scroll)",
|
|
72
|
+
"Very short content that never overflows"
|
|
73
|
+
],
|
|
74
|
+
"guidelines": [
|
|
75
|
+
"Use `orientation` to constrain scroll direction",
|
|
76
|
+
"Use `showFades` to hint at hidden content beyond the viewport",
|
|
77
|
+
"The `hover` scrollbar visibility keeps the UI clean until the user interacts",
|
|
78
|
+
"Combine with `orientation=\"horizontal\"` for tab bars and chip rows"
|
|
79
|
+
],
|
|
80
|
+
"accessibility": [
|
|
81
|
+
"Preserves native scroll behavior and keyboard support",
|
|
82
|
+
"Scrollbar is visible on focus for keyboard users",
|
|
83
|
+
"Respects prefers-reduced-motion for fade transitions"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"examples": [
|
|
87
|
+
{
|
|
88
|
+
"name": "Vertical",
|
|
89
|
+
"description": "Vertical scrollable area with thin scrollbar.",
|
|
90
|
+
"code": "<ScrollArea style={{ height: '200px' }}>\n {/* Long content */}\n</ScrollArea>"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "Horizontal",
|
|
94
|
+
"description": "Horizontal scrollable area for overflowing inline content like tabs or chips.",
|
|
95
|
+
"code": "<ScrollArea orientation=\"horizontal\">\n <div style={{ display: 'flex', gap: '8px' }}>\n {tags.map(tag => <Chip key={tag}>{tag}</Chip>)}\n </div>\n</ScrollArea>"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "With Fades",
|
|
99
|
+
"description": "Fade indicators show when content is scrollable in either direction.",
|
|
100
|
+
"code": "<ScrollArea orientation=\"horizontal\" showFades>\n {/* Overflowing content */}\n</ScrollArea>"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "Hover Scrollbar",
|
|
104
|
+
"description": "Scrollbar is hidden until the user hovers over the scroll area.",
|
|
105
|
+
"code": "<ScrollArea scrollbarVisibility=\"hover\" style={{ height: '200px' }}>\n {/* Content */}\n</ScrollArea>"
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"contract": {
|
|
109
|
+
"propsSummary": [
|
|
110
|
+
"orientation: horizontal|vertical|both - scroll direction",
|
|
111
|
+
"scrollbarVisibility: auto|always|hover - scrollbar display mode",
|
|
112
|
+
"showFades: boolean - gradient edge indicators"
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"ai": {
|
|
116
|
+
"compositionPattern": "compound",
|
|
117
|
+
"subComponents": [
|
|
118
|
+
"Root"
|
|
119
|
+
],
|
|
120
|
+
"commonPatterns": [
|
|
121
|
+
"<ScrollArea orientation=\"horizontal\"><div style={{ display: \"flex\", gap: 8 }}>{items}</div></ScrollArea>",
|
|
122
|
+
"<ScrollArea style={{ height: 300 }}>{longContent}</ScrollArea>"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"provenance": {
|
|
126
|
+
"source": "migrated",
|
|
127
|
+
"verified": false,
|
|
128
|
+
"frameworkSupport": "native",
|
|
129
|
+
"extractedAt": "2026-03-13T23:19:02.867Z"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
|
+
"name": "Select",
|
|
4
|
+
"description": "Dropdown for choosing from a list of options. Use when there are more than 4-5 choices that would clutter the UI.",
|
|
5
|
+
"category": "forms",
|
|
6
|
+
"tags": [
|
|
7
|
+
"select",
|
|
8
|
+
"dropdown",
|
|
9
|
+
"form",
|
|
10
|
+
"options",
|
|
11
|
+
"picker"
|
|
12
|
+
],
|
|
13
|
+
"status": "stable",
|
|
14
|
+
"sourcePath": "src/components/Select/index.tsx",
|
|
15
|
+
"exportName": "Select",
|
|
16
|
+
"propsSummary": [
|
|
17
|
+
"children: node",
|
|
18
|
+
"value: string",
|
|
19
|
+
"defaultValue: string",
|
|
20
|
+
"onValueChange: function",
|
|
21
|
+
"onChange: function",
|
|
22
|
+
"open: boolean",
|
|
23
|
+
"defaultOpen: boolean",
|
|
24
|
+
"onOpenChange: function",
|
|
25
|
+
"required: boolean",
|
|
26
|
+
"name: string",
|
|
27
|
+
"placeholder: string",
|
|
28
|
+
"options: array",
|
|
29
|
+
"size: sm|md|lg (default: md)",
|
|
30
|
+
"className: string",
|
|
31
|
+
"label: string",
|
|
32
|
+
"helperText: string",
|
|
33
|
+
"error: union",
|
|
34
|
+
"disabled: boolean"
|
|
35
|
+
],
|
|
36
|
+
"props": {
|
|
37
|
+
"children": {
|
|
38
|
+
"type": "node",
|
|
39
|
+
"description": "Select trigger and content",
|
|
40
|
+
"required": false
|
|
41
|
+
},
|
|
42
|
+
"value": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "Controlled selected value",
|
|
45
|
+
"required": false
|
|
46
|
+
},
|
|
47
|
+
"defaultValue": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "Default selected value (uncontrolled)",
|
|
50
|
+
"required": false
|
|
51
|
+
},
|
|
52
|
+
"onValueChange": {
|
|
53
|
+
"type": "function",
|
|
54
|
+
"description": "Called when selection changes",
|
|
55
|
+
"required": false
|
|
56
|
+
},
|
|
57
|
+
"onChange": {
|
|
58
|
+
"type": "function",
|
|
59
|
+
"description": "Alias for onValueChange",
|
|
60
|
+
"required": false
|
|
61
|
+
},
|
|
62
|
+
"open": {
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"description": "Controlled open state of the dropdown",
|
|
65
|
+
"required": false
|
|
66
|
+
},
|
|
67
|
+
"defaultOpen": {
|
|
68
|
+
"type": "boolean",
|
|
69
|
+
"description": "Initial open state for uncontrolled usage",
|
|
70
|
+
"default": "false",
|
|
71
|
+
"required": false
|
|
72
|
+
},
|
|
73
|
+
"onOpenChange": {
|
|
74
|
+
"type": "function",
|
|
75
|
+
"description": "Called when dropdown open state changes",
|
|
76
|
+
"required": false
|
|
77
|
+
},
|
|
78
|
+
"required": {
|
|
79
|
+
"type": "boolean",
|
|
80
|
+
"description": "Whether a selection is required",
|
|
81
|
+
"required": false
|
|
82
|
+
},
|
|
83
|
+
"name": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"description": "Form field name",
|
|
86
|
+
"required": false
|
|
87
|
+
},
|
|
88
|
+
"placeholder": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Placeholder text when no value selected",
|
|
91
|
+
"required": false
|
|
92
|
+
},
|
|
93
|
+
"options": {
|
|
94
|
+
"type": "array",
|
|
95
|
+
"description": "Convenience options array for simple selects (alternative to compound Select.Item children)",
|
|
96
|
+
"required": false
|
|
97
|
+
},
|
|
98
|
+
"size": {
|
|
99
|
+
"type": "enum",
|
|
100
|
+
"description": "Size variant",
|
|
101
|
+
"default": "md",
|
|
102
|
+
"required": false,
|
|
103
|
+
"values": [
|
|
104
|
+
"sm",
|
|
105
|
+
"md",
|
|
106
|
+
"lg"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"className": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"description": "Wrapper class name",
|
|
112
|
+
"required": false
|
|
113
|
+
},
|
|
114
|
+
"label": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"description": "Visible label text above the select",
|
|
117
|
+
"required": false
|
|
118
|
+
},
|
|
119
|
+
"helperText": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"description": "Helper text shown below the select",
|
|
122
|
+
"required": false
|
|
123
|
+
},
|
|
124
|
+
"error": {
|
|
125
|
+
"type": "union",
|
|
126
|
+
"description": "Show error styling. When a string is provided, it is displayed as an error message.",
|
|
127
|
+
"required": false
|
|
128
|
+
},
|
|
129
|
+
"disabled": {
|
|
130
|
+
"type": "boolean",
|
|
131
|
+
"description": "Disable the select",
|
|
132
|
+
"default": "false",
|
|
133
|
+
"required": false
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"usage": {
|
|
137
|
+
"when": [
|
|
138
|
+
"Choosing from a predefined list of options",
|
|
139
|
+
"More than 4-5 options that would clutter UI as radio buttons",
|
|
140
|
+
"Space-constrained forms",
|
|
141
|
+
"When users need to see all options at once"
|
|
142
|
+
],
|
|
143
|
+
"whenNot": [
|
|
144
|
+
"Very few options (2-3) - use radio buttons",
|
|
145
|
+
"Users might type custom values - use Combobox",
|
|
146
|
+
"Multiple selections needed - use Checkbox group or MultiSelect",
|
|
147
|
+
"Actions, not selection - use Menu"
|
|
148
|
+
],
|
|
149
|
+
"guidelines": [
|
|
150
|
+
"Include a placeholder that explains what to select",
|
|
151
|
+
"Use label prop for accessible field labeling",
|
|
152
|
+
"Use helperText for guidance and error for validation messages",
|
|
153
|
+
"Group related options with SelectGroup",
|
|
154
|
+
"Keep option text concise",
|
|
155
|
+
"Order options logically (alphabetical, by frequency, or by category)"
|
|
156
|
+
],
|
|
157
|
+
"accessibility": [
|
|
158
|
+
"Full keyboard navigation support",
|
|
159
|
+
"Type-ahead search within options",
|
|
160
|
+
"Proper ARIA roles and attributes"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"examples": [
|
|
164
|
+
{
|
|
165
|
+
"name": "Default",
|
|
166
|
+
"description": "Basic select dropdown",
|
|
167
|
+
"code": "<StatefulSelect placeholder=\"Select a fruit\">\n <Select.Trigger />\n <Select.Content>\n <Select.Item value=\"apple\">Apple</Select.Item>\n <Select.Item value=\"banana\">Banana</Select.Item>\n <Select.Item value=\"orange\">Orange</Select.Item>\n <Select.Item value=\"grape\">Grape</Select.Item>\n </Select.Content>\n</StatefulSelect>"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "With Groups",
|
|
171
|
+
"description": "Options organized into groups",
|
|
172
|
+
"code": "<StatefulSelect placeholder=\"Select a country\">\n <Select.Trigger />\n <Select.Content>\n <Select.Group>\n <Select.GroupLabel>North America</Select.GroupLabel>\n <Select.Item value=\"us\">United States</Select.Item>\n <Select.Item value=\"ca\">Canada</Select.Item>\n <Select.Item value=\"mx\">Mexico</Select.Item>\n </Select.Group>\n <Select.Group>\n <Select.GroupLabel>Europe</Select.GroupLabel>\n <Select.Item value=\"uk\">United Kingdom</Select.Item>\n <Select.Item value=\"de\">Germany</Select.Item>\n <Select.Item value=\"fr\">France</Select.Item>\n </Select.Group>\n </Select.Content>\n</StatefulSelect>"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "With Label and Helper Text",
|
|
176
|
+
"description": "Select with built-in label and helper text",
|
|
177
|
+
"code": "<StatefulSelect\n label=\"Timezone\"\n placeholder=\"Select a timezone\"\n helperText=\"Used for reminders and calendar notifications.\"\n>\n <Select.Trigger />\n <Select.Content>\n <Select.Item value=\"pt\">Pacific Time</Select.Item>\n <Select.Item value=\"mt\">Mountain Time</Select.Item>\n <Select.Item value=\"ct\">Central Time</Select.Item>\n <Select.Item value=\"et\">Eastern Time</Select.Item>\n </Select.Content>\n</StatefulSelect>"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "Error State",
|
|
181
|
+
"description": "Validation error with message",
|
|
182
|
+
"code": "<Select\n label=\"Country\"\n placeholder=\"Select a country\"\n error=\"Please select a country\"\n>\n <Select.Trigger />\n <Select.Content>\n <Select.Item value=\"us\">United States</Select.Item>\n <Select.Item value=\"uk\">United Kingdom</Select.Item>\n </Select.Content>\n</Select>"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "With Disabled Options",
|
|
186
|
+
"description": "Some options are disabled",
|
|
187
|
+
"code": "<StatefulSelect placeholder=\"Select a plan\">\n <Select.Trigger />\n <Select.Content>\n <Select.Item value=\"free\">Free</Select.Item>\n <Select.Item value=\"pro\">Pro</Select.Item>\n <Select.Item value=\"enterprise\" disabled>Enterprise (Contact Sales)</Select.Item>\n </Select.Content>\n</StatefulSelect>"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"name": "Scrollable List",
|
|
191
|
+
"description": "Long list with scroll hint — shows 4 items with half-peek of the 5th to indicate more",
|
|
192
|
+
"code": "<StatefulSelect placeholder=\"Select a timezone\">\n <Select.Trigger />\n <Select.Content>\n <Select.Item value=\"utc-8\">Pacific Time (UTC-8)</Select.Item>\n <Select.Item value=\"utc-7\">Mountain Time (UTC-7)</Select.Item>\n <Select.Item value=\"utc-6\">Central Time (UTC-6)</Select.Item>\n <Select.Item value=\"utc-5\">Eastern Time (UTC-5)</Select.Item>\n <Select.Item value=\"utc-4\">Atlantic Time (UTC-4)</Select.Item>\n <Select.Item value=\"utc+0\">GMT (UTC+0)</Select.Item>\n <Select.Item value=\"utc+1\">Central European (UTC+1)</Select.Item>\n <Select.Item value=\"utc+5.5\">India Standard (UTC+5:30)</Select.Item>\n <Select.Item value=\"utc+8\">China Standard (UTC+8)</Select.Item>\n <Select.Item value=\"utc+9\">Japan Standard (UTC+9)</Select.Item>\n </Select.Content>\n</StatefulSelect>"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"name": "Custom Max Visible Items",
|
|
196
|
+
"description": "Show 6 items before scrolling with half-peek scroll hint",
|
|
197
|
+
"code": "<StatefulSelect placeholder=\"Select a color\">\n <Select.Trigger />\n <Select.Content maxVisibleItems={6}>\n <Select.Item value=\"red\">Red</Select.Item>\n <Select.Item value=\"orange\">Orange</Select.Item>\n <Select.Item value=\"yellow\">Yellow</Select.Item>\n <Select.Item value=\"green\">Green</Select.Item>\n <Select.Item value=\"blue\">Blue</Select.Item>\n <Select.Item value=\"indigo\">Indigo</Select.Item>\n <Select.Item value=\"violet\">Violet</Select.Item>\n <Select.Item value=\"pink\">Pink</Select.Item>\n <Select.Item value=\"teal\">Teal</Select.Item>\n <Select.Item value=\"cyan\">Cyan</Select.Item>\n </Select.Content>\n</StatefulSelect>"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "Disabled",
|
|
201
|
+
"description": "Disabled select",
|
|
202
|
+
"code": "<Select disabled placeholder=\"Select an option\">\n <Select.Trigger />\n <Select.Content>\n <Select.Item value=\"1\">Option 1</Select.Item>\n </Select.Content>\n</Select>"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "Options Prop",
|
|
206
|
+
"description": "Convenience API for simple lists without manual Select.Item composition",
|
|
207
|
+
"code": "<StatefulSelect\n placeholder=\"Select a team\"\n options={[\n { value: 'eng', label: 'Engineering' },\n { value: 'design', label: 'Design' },\n { value: 'pm', label: 'Product' },\n ]}\n>\n <Select.Trigger />\n <Select.Content />\n</StatefulSelect>"
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"relations": [
|
|
211
|
+
{
|
|
212
|
+
"component": "Menu",
|
|
213
|
+
"relationship": "alternative",
|
|
214
|
+
"note": "Use Menu for action-based dropdowns"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"component": "Input",
|
|
218
|
+
"relationship": "sibling",
|
|
219
|
+
"note": "Use Input for free-form text entry"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"component": "Checkbox",
|
|
223
|
+
"relationship": "alternative",
|
|
224
|
+
"note": "Use Checkbox group for multiple selections"
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
"contract": {
|
|
228
|
+
"propsSummary": [
|
|
229
|
+
"value: string | null - controlled selected value",
|
|
230
|
+
"onValueChange: (value: string | null) => void - selection handler",
|
|
231
|
+
"onChange: (value: string | null) => void - alias for onValueChange",
|
|
232
|
+
"label: string - visible label text",
|
|
233
|
+
"helperText: string - helper text below field",
|
|
234
|
+
"error: boolean | string - error styling and message",
|
|
235
|
+
"placeholder: string - placeholder text",
|
|
236
|
+
"disabled: boolean - disable select",
|
|
237
|
+
"size: sm|md|lg (default: md)",
|
|
238
|
+
"options: SelectOption[] - convenience API for simple option lists",
|
|
239
|
+
"maxVisibleItems: number - max visible options before scrolling (default 4)"
|
|
240
|
+
],
|
|
241
|
+
"a11yRules": [
|
|
242
|
+
"A11Y_SELECT_KEYBOARD",
|
|
243
|
+
"A11Y_SELECT_LABEL"
|
|
244
|
+
]
|
|
245
|
+
},
|
|
246
|
+
"ai": {
|
|
247
|
+
"compositionPattern": "compound",
|
|
248
|
+
"subComponents": [
|
|
249
|
+
"Trigger",
|
|
250
|
+
"Content",
|
|
251
|
+
"Item",
|
|
252
|
+
"Group",
|
|
253
|
+
"GroupLabel"
|
|
254
|
+
],
|
|
255
|
+
"requiredChildren": [
|
|
256
|
+
"Trigger",
|
|
257
|
+
"Content"
|
|
258
|
+
],
|
|
259
|
+
"commonPatterns": [
|
|
260
|
+
"<Select placeholder=\"Select option\"><Select.Trigger /><Select.Content><Select.Item value=\"opt1\">{label1}</Select.Item><Select.Item value=\"opt2\">{label2}</Select.Item></Select.Content></Select>"
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
"provenance": {
|
|
264
|
+
"source": "migrated",
|
|
265
|
+
"verified": false,
|
|
266
|
+
"frameworkSupport": "native",
|
|
267
|
+
"extractedAt": "2026-03-13T23:19:03.116Z"
|
|
268
|
+
}
|
|
269
|
+
}
|