@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,239 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
|
+
"name": "Text",
|
|
4
|
+
"description": "Typography component for rendering text with consistent styling. Supports various sizes, weights, colors, and semantic elements.",
|
|
5
|
+
"category": "display",
|
|
6
|
+
"tags": [
|
|
7
|
+
"text",
|
|
8
|
+
"typography",
|
|
9
|
+
"heading",
|
|
10
|
+
"paragraph",
|
|
11
|
+
"font"
|
|
12
|
+
],
|
|
13
|
+
"status": "stable",
|
|
14
|
+
"sourcePath": "src/components/Text/index.tsx",
|
|
15
|
+
"exportName": "Text",
|
|
16
|
+
"propsSummary": [
|
|
17
|
+
"children: node (required)",
|
|
18
|
+
"as: h1|h2|h3|h4|h5|h6|p|span|label|div|strong|em|small|mark|del|ins|sub|sup|time|address|blockquote|cite|code|abbr (default: span)",
|
|
19
|
+
"variant: section-label",
|
|
20
|
+
"size: 2xs|xs|sm|base|md|lg|xl|2xl",
|
|
21
|
+
"weight: normal|medium|semibold|bold (default: \"normal\")",
|
|
22
|
+
"color: primary|secondary|tertiary|muted (default: \"primary\")",
|
|
23
|
+
"font: sans|mono (default: sans)",
|
|
24
|
+
"truncate: boolean",
|
|
25
|
+
"lineClamp: number",
|
|
26
|
+
"style: object"
|
|
27
|
+
],
|
|
28
|
+
"props": {
|
|
29
|
+
"children": {
|
|
30
|
+
"type": "node",
|
|
31
|
+
"description": "Text content",
|
|
32
|
+
"required": true
|
|
33
|
+
},
|
|
34
|
+
"as": {
|
|
35
|
+
"type": "enum",
|
|
36
|
+
"description": "HTML element to render",
|
|
37
|
+
"default": "span",
|
|
38
|
+
"required": false,
|
|
39
|
+
"values": [
|
|
40
|
+
"h1",
|
|
41
|
+
"h2",
|
|
42
|
+
"h3",
|
|
43
|
+
"h4",
|
|
44
|
+
"h5",
|
|
45
|
+
"h6",
|
|
46
|
+
"p",
|
|
47
|
+
"span",
|
|
48
|
+
"label",
|
|
49
|
+
"div",
|
|
50
|
+
"strong",
|
|
51
|
+
"em",
|
|
52
|
+
"small",
|
|
53
|
+
"mark",
|
|
54
|
+
"del",
|
|
55
|
+
"ins",
|
|
56
|
+
"sub",
|
|
57
|
+
"sup",
|
|
58
|
+
"time",
|
|
59
|
+
"address",
|
|
60
|
+
"blockquote",
|
|
61
|
+
"cite",
|
|
62
|
+
"code",
|
|
63
|
+
"abbr"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"variant": {
|
|
67
|
+
"type": "enum",
|
|
68
|
+
"description": "Preset text variant",
|
|
69
|
+
"required": false,
|
|
70
|
+
"values": [
|
|
71
|
+
"section-label"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"size": {
|
|
75
|
+
"type": "enum",
|
|
76
|
+
"description": "Font size (md is an alias for base)",
|
|
77
|
+
"required": false,
|
|
78
|
+
"values": [
|
|
79
|
+
"2xs",
|
|
80
|
+
"xs",
|
|
81
|
+
"sm",
|
|
82
|
+
"base",
|
|
83
|
+
"md",
|
|
84
|
+
"lg",
|
|
85
|
+
"xl",
|
|
86
|
+
"2xl"
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"weight": {
|
|
90
|
+
"type": "enum",
|
|
91
|
+
"description": "Font weight",
|
|
92
|
+
"default": "\"normal\"",
|
|
93
|
+
"required": false,
|
|
94
|
+
"values": [
|
|
95
|
+
"normal",
|
|
96
|
+
"medium",
|
|
97
|
+
"semibold",
|
|
98
|
+
"bold"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
"color": {
|
|
102
|
+
"type": "enum",
|
|
103
|
+
"description": "Text color (muted is an alias for tertiary)",
|
|
104
|
+
"default": "\"primary\"",
|
|
105
|
+
"required": false,
|
|
106
|
+
"values": [
|
|
107
|
+
"primary",
|
|
108
|
+
"secondary",
|
|
109
|
+
"tertiary",
|
|
110
|
+
"muted"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"font": {
|
|
114
|
+
"type": "enum",
|
|
115
|
+
"description": "Font family",
|
|
116
|
+
"default": "sans",
|
|
117
|
+
"required": false,
|
|
118
|
+
"values": [
|
|
119
|
+
"sans",
|
|
120
|
+
"mono"
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"truncate": {
|
|
124
|
+
"type": "boolean",
|
|
125
|
+
"description": "Truncate with ellipsis on overflow",
|
|
126
|
+
"required": false
|
|
127
|
+
},
|
|
128
|
+
"lineClamp": {
|
|
129
|
+
"type": "number",
|
|
130
|
+
"description": "Number of lines before truncating (requires truncate)",
|
|
131
|
+
"required": false
|
|
132
|
+
},
|
|
133
|
+
"style": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"description": "",
|
|
136
|
+
"required": false
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"usage": {
|
|
140
|
+
"when": [
|
|
141
|
+
"Displaying text with specific typography styles",
|
|
142
|
+
"Creating headings, paragraphs, or labels",
|
|
143
|
+
"Text that needs truncation or line clamping",
|
|
144
|
+
"Consistent typography across the application"
|
|
145
|
+
],
|
|
146
|
+
"whenNot": [
|
|
147
|
+
"Complex rich text (use a rich text editor)",
|
|
148
|
+
"Code display (use CodeBlock)",
|
|
149
|
+
"Interactive text (use Link or Button)"
|
|
150
|
+
],
|
|
151
|
+
"guidelines": [
|
|
152
|
+
"Use semantic elements (h1-h6, p) via the \"as\" prop",
|
|
153
|
+
"Maintain heading hierarchy for accessibility",
|
|
154
|
+
"Use color variants sparingly for visual hierarchy",
|
|
155
|
+
"Consider truncation for user-generated content"
|
|
156
|
+
],
|
|
157
|
+
"accessibility": [
|
|
158
|
+
"Use proper heading levels (h1-h6) for document structure",
|
|
159
|
+
"Semantic elements convey meaning to screen readers",
|
|
160
|
+
"Truncated text should have full content in title/tooltip"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"examples": [
|
|
164
|
+
{
|
|
165
|
+
"name": "Sizes",
|
|
166
|
+
"description": "Different text sizes",
|
|
167
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text size=\"2xs\">Extra extra small (2xs)</Text>\n <Text size=\"xs\">Extra small (xs)</Text>\n <Text size=\"sm\">Small (sm)</Text>\n <Text size=\"base\">Base size</Text>\n <Text size=\"lg\">Large (lg)</Text>\n <Text size=\"xl\">Extra large (xl)</Text>\n <Text size=\"2xl\">Extra extra large (2xl)</Text>\n</div>"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "Weights",
|
|
171
|
+
"description": "Different font weights",
|
|
172
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text weight=\"normal\">Normal weight</Text>\n <Text weight=\"medium\">Medium weight</Text>\n <Text weight=\"semibold\">Semibold weight</Text>\n <Text weight=\"bold\">Bold weight</Text>\n</div>"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "Colors",
|
|
176
|
+
"description": "Different text colors",
|
|
177
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text color=\"primary\">Primary color (default)</Text>\n <Text color=\"secondary\">Secondary color</Text>\n <Text color=\"tertiary\">Tertiary color</Text>\n <Text color=\"muted\">Muted color (alias for tertiary)</Text>\n</div>"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "Semantic Elements",
|
|
181
|
+
"description": "Using appropriate HTML elements",
|
|
182
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text as=\"h1\" size=\"2xl\" weight=\"semibold\">Heading 1</Text>\n <Text as=\"h2\" size=\"xl\" weight=\"semibold\">Heading 2</Text>\n <Text as=\"h3\" size=\"lg\" weight=\"medium\">Heading 3</Text>\n <Text as=\"p\" color=\"secondary\">\n This is a paragraph of text that demonstrates the Text component\n with semantic paragraph element.\n </Text>\n</div>"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "Monospace",
|
|
186
|
+
"description": "Monospace font for code-like text",
|
|
187
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Text font=\"mono\" size=\"sm\">const greeting = \"Hello, World!\";</Text>\n <Text font=\"mono\" size=\"sm\" color=\"secondary\">npm install @fragments-sdk/ui</Text>\n</div>"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"name": "Truncation",
|
|
191
|
+
"description": "Text truncation with ellipsis",
|
|
192
|
+
"code": "<div style={{ width: '200px', display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text truncate>\n This is a very long text that will be truncated with an ellipsis when it overflows.\n </Text>\n <Text truncate lineClamp={2}>\n This text will be clamped to two lines. Any content beyond two lines\n will be hidden and replaced with an ellipsis at the end.\n </Text>\n</div>"
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
"relations": [
|
|
196
|
+
{
|
|
197
|
+
"component": "Link",
|
|
198
|
+
"relationship": "sibling",
|
|
199
|
+
"note": "Use Link for clickable text"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"component": "CodeBlock",
|
|
203
|
+
"relationship": "alternative",
|
|
204
|
+
"note": "Use CodeBlock for code display"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"component": "Badge",
|
|
208
|
+
"relationship": "sibling",
|
|
209
|
+
"note": "Use Badge for labels/tags"
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
"contract": {
|
|
213
|
+
"propsSummary": [
|
|
214
|
+
"as: string - HTML element",
|
|
215
|
+
"size: 2xs|xs|sm|base|md|lg|xl|2xl - font size (md = base)",
|
|
216
|
+
"weight: normal|medium|semibold|bold - font weight",
|
|
217
|
+
"color: primary|secondary|tertiary|muted - text color (muted = tertiary)",
|
|
218
|
+
"font: sans|mono - font family",
|
|
219
|
+
"truncate: boolean - enable truncation",
|
|
220
|
+
"lineClamp: number - max lines"
|
|
221
|
+
],
|
|
222
|
+
"a11yRules": [
|
|
223
|
+
"A11Y_HEADING_HIERARCHY",
|
|
224
|
+
"A11Y_SEMANTIC_ELEMENTS"
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
"ai": {
|
|
228
|
+
"compositionPattern": "compound",
|
|
229
|
+
"subComponents": [
|
|
230
|
+
"Root"
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
"provenance": {
|
|
234
|
+
"source": "migrated",
|
|
235
|
+
"verified": false,
|
|
236
|
+
"frameworkSupport": "native",
|
|
237
|
+
"extractedAt": "2026-03-13T23:19:05.045Z"
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://usefragments.com/schemas/contract.v1.json",
|
|
3
|
+
"name": "Textarea",
|
|
4
|
+
"description": "Multi-line text input for longer form content",
|
|
5
|
+
"category": "forms",
|
|
6
|
+
"tags": [
|
|
7
|
+
"input",
|
|
8
|
+
"text",
|
|
9
|
+
"form",
|
|
10
|
+
"multiline"
|
|
11
|
+
],
|
|
12
|
+
"status": "stable",
|
|
13
|
+
"sourcePath": "src/components/Textarea/index.tsx",
|
|
14
|
+
"exportName": "Textarea",
|
|
15
|
+
"propsSummary": [
|
|
16
|
+
"value: string",
|
|
17
|
+
"defaultValue: string",
|
|
18
|
+
"placeholder: string",
|
|
19
|
+
"rows: number (default: 3)",
|
|
20
|
+
"minRows: number",
|
|
21
|
+
"maxRows: number",
|
|
22
|
+
"resize: none|vertical|horizontal|both (default: vertical)",
|
|
23
|
+
"size: sm|md|lg (default: md)",
|
|
24
|
+
"disabled: boolean (default: false)",
|
|
25
|
+
"error: boolean (default: false)",
|
|
26
|
+
"success: boolean (default: false)",
|
|
27
|
+
"showCharCount: boolean (default: false)",
|
|
28
|
+
"label: string",
|
|
29
|
+
"helperText: string",
|
|
30
|
+
"onChange: function",
|
|
31
|
+
"onValueChange: function",
|
|
32
|
+
"onBlur: function",
|
|
33
|
+
"onFocus: function",
|
|
34
|
+
"name: string",
|
|
35
|
+
"maxLength: number",
|
|
36
|
+
"required: boolean",
|
|
37
|
+
"aria-label: string",
|
|
38
|
+
"aria-labelledby: string",
|
|
39
|
+
"aria-describedby: string",
|
|
40
|
+
"rootProps: object",
|
|
41
|
+
"className: string",
|
|
42
|
+
"style: object"
|
|
43
|
+
],
|
|
44
|
+
"props": {
|
|
45
|
+
"value": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Controlled value",
|
|
48
|
+
"required": false
|
|
49
|
+
},
|
|
50
|
+
"defaultValue": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "Default value for uncontrolled usage",
|
|
53
|
+
"required": false
|
|
54
|
+
},
|
|
55
|
+
"placeholder": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "Placeholder text",
|
|
58
|
+
"required": false
|
|
59
|
+
},
|
|
60
|
+
"rows": {
|
|
61
|
+
"type": "number",
|
|
62
|
+
"description": "Number of visible text rows",
|
|
63
|
+
"default": "3",
|
|
64
|
+
"required": false
|
|
65
|
+
},
|
|
66
|
+
"minRows": {
|
|
67
|
+
"type": "number",
|
|
68
|
+
"description": "Minimum number of rows when auto-resizing",
|
|
69
|
+
"required": false
|
|
70
|
+
},
|
|
71
|
+
"maxRows": {
|
|
72
|
+
"type": "number",
|
|
73
|
+
"description": "Maximum number of rows when auto-resizing",
|
|
74
|
+
"required": false
|
|
75
|
+
},
|
|
76
|
+
"resize": {
|
|
77
|
+
"type": "enum",
|
|
78
|
+
"description": "Resize behavior",
|
|
79
|
+
"default": "vertical",
|
|
80
|
+
"required": false,
|
|
81
|
+
"values": [
|
|
82
|
+
"none",
|
|
83
|
+
"vertical",
|
|
84
|
+
"horizontal",
|
|
85
|
+
"both"
|
|
86
|
+
]
|
|
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
|
+
"disabled": {
|
|
100
|
+
"type": "boolean",
|
|
101
|
+
"description": "Disabled state",
|
|
102
|
+
"default": "false",
|
|
103
|
+
"required": false
|
|
104
|
+
},
|
|
105
|
+
"error": {
|
|
106
|
+
"type": "boolean",
|
|
107
|
+
"description": "Error state",
|
|
108
|
+
"default": "false",
|
|
109
|
+
"required": false
|
|
110
|
+
},
|
|
111
|
+
"success": {
|
|
112
|
+
"type": "boolean",
|
|
113
|
+
"description": "Whether to show success/validated styling",
|
|
114
|
+
"default": "false",
|
|
115
|
+
"required": false
|
|
116
|
+
},
|
|
117
|
+
"showCharCount": {
|
|
118
|
+
"type": "boolean",
|
|
119
|
+
"description": "Show character counter when maxLength is set",
|
|
120
|
+
"default": "false",
|
|
121
|
+
"required": false
|
|
122
|
+
},
|
|
123
|
+
"label": {
|
|
124
|
+
"type": "string",
|
|
125
|
+
"description": "Label text above the textarea",
|
|
126
|
+
"required": false
|
|
127
|
+
},
|
|
128
|
+
"helperText": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"description": "Helper text below the textarea",
|
|
131
|
+
"required": false
|
|
132
|
+
},
|
|
133
|
+
"onChange": {
|
|
134
|
+
"type": "function",
|
|
135
|
+
"description": "Called when the textarea value changes",
|
|
136
|
+
"required": false
|
|
137
|
+
},
|
|
138
|
+
"onValueChange": {
|
|
139
|
+
"type": "function",
|
|
140
|
+
"description": "Value-first change callback alias: (value: string) => void",
|
|
141
|
+
"required": false
|
|
142
|
+
},
|
|
143
|
+
"onBlur": {
|
|
144
|
+
"type": "function",
|
|
145
|
+
"description": "Called when textarea loses focus",
|
|
146
|
+
"required": false
|
|
147
|
+
},
|
|
148
|
+
"onFocus": {
|
|
149
|
+
"type": "function",
|
|
150
|
+
"description": "Called when textarea receives focus",
|
|
151
|
+
"required": false
|
|
152
|
+
},
|
|
153
|
+
"name": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"description": "Form field name",
|
|
156
|
+
"required": false
|
|
157
|
+
},
|
|
158
|
+
"maxLength": {
|
|
159
|
+
"type": "number",
|
|
160
|
+
"description": "Maximum character length",
|
|
161
|
+
"required": false
|
|
162
|
+
},
|
|
163
|
+
"required": {
|
|
164
|
+
"type": "boolean",
|
|
165
|
+
"description": "Required field",
|
|
166
|
+
"required": false
|
|
167
|
+
},
|
|
168
|
+
"aria-label": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"description": "Accessible label for no-visible-label usage",
|
|
171
|
+
"required": false
|
|
172
|
+
},
|
|
173
|
+
"aria-labelledby": {
|
|
174
|
+
"type": "string",
|
|
175
|
+
"description": "Accessible labelled-by relationship",
|
|
176
|
+
"required": false
|
|
177
|
+
},
|
|
178
|
+
"aria-describedby": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"description": "Accessible described-by relationship",
|
|
181
|
+
"required": false
|
|
182
|
+
},
|
|
183
|
+
"rootProps": {
|
|
184
|
+
"type": "object",
|
|
185
|
+
"description": "HTML attributes applied to the wrapper element",
|
|
186
|
+
"required": false
|
|
187
|
+
},
|
|
188
|
+
"className": {
|
|
189
|
+
"type": "string",
|
|
190
|
+
"description": "Wrapper class name",
|
|
191
|
+
"required": false
|
|
192
|
+
},
|
|
193
|
+
"style": {
|
|
194
|
+
"type": "object",
|
|
195
|
+
"description": "Wrapper styles",
|
|
196
|
+
"required": false
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"usage": {
|
|
200
|
+
"when": [
|
|
201
|
+
"Collecting multi-line text (comments, descriptions)",
|
|
202
|
+
"Free-form text input that may span multiple lines",
|
|
203
|
+
"Message composition fields",
|
|
204
|
+
"Code or content editing"
|
|
205
|
+
],
|
|
206
|
+
"whenNot": [
|
|
207
|
+
"Single-line input (use Input)",
|
|
208
|
+
"Rich text editing (use rich text editor)",
|
|
209
|
+
"Selecting from predefined options (use Select)"
|
|
210
|
+
],
|
|
211
|
+
"guidelines": [
|
|
212
|
+
"Set appropriate rows for expected content length",
|
|
213
|
+
"Use placeholder to show example format",
|
|
214
|
+
"Show character count when maxLength is set",
|
|
215
|
+
"Consider auto-resize for better UX"
|
|
216
|
+
],
|
|
217
|
+
"accessibility": [
|
|
218
|
+
"Always provide a visible label",
|
|
219
|
+
"Use helperText for format hints",
|
|
220
|
+
"Error messages should be descriptive"
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
"examples": [
|
|
224
|
+
{
|
|
225
|
+
"name": "Default",
|
|
226
|
+
"description": "Basic textarea with label",
|
|
227
|
+
"code": "<Textarea\n label=\"Description\"\n placeholder=\"Enter a description...\"\n/>"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"name": "With Helper Text",
|
|
231
|
+
"description": "Textarea with additional guidance",
|
|
232
|
+
"code": "<Textarea\n label=\"Bio\"\n placeholder=\"Tell us about yourself...\"\n helperText=\"Max 500 characters\"\n maxLength={500}\n/>"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "Error State",
|
|
236
|
+
"description": "Textarea showing validation error",
|
|
237
|
+
"code": "<Textarea\n label=\"Comments\"\n placeholder=\"Add your comments...\"\n error\n helperText=\"This field is required\"\n/>"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"name": "Disabled",
|
|
241
|
+
"description": "Non-interactive textarea",
|
|
242
|
+
"code": "<Textarea\n label=\"Notes\"\n placeholder=\"Cannot edit...\"\n disabled\n/>"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"name": "Custom Rows",
|
|
246
|
+
"description": "Textarea with more visible rows",
|
|
247
|
+
"code": "<Textarea\n label=\"Long Description\"\n placeholder=\"Enter detailed information...\"\n rows={6}\n/>"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"name": "Sizes",
|
|
251
|
+
"description": "Available size variants",
|
|
252
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px', maxWidth: '400px' }}>\n <Textarea label=\"Small\" size=\"sm\" placeholder=\"Small textarea\" />\n <Textarea label=\"Medium\" size=\"md\" placeholder=\"Medium textarea\" />\n <Textarea label=\"Large\" size=\"lg\" placeholder=\"Large textarea\" />\n</div>"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"name": "With Root Props",
|
|
256
|
+
"description": "Pass wrapper attributes/styling via rootProps",
|
|
257
|
+
"code": "<Textarea\n label=\"Notes\"\n placeholder=\"Add notes...\"\n rootProps={{ 'data-demo': 'textarea-wrapper' }}\n/>"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"name": "Success State",
|
|
261
|
+
"description": "Textarea showing validated/success styling",
|
|
262
|
+
"code": "<Textarea\n label=\"Bio\"\n value=\"A short bio about myself.\"\n success\n helperText=\"Looks great!\"\n/>"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "With Character Counter",
|
|
266
|
+
"description": "Textarea with character count and maxLength",
|
|
267
|
+
"code": "<Textarea\n label=\"Bio\"\n placeholder=\"Tell us about yourself...\"\n maxLength={200}\n showCharCount\n/>"
|
|
268
|
+
}
|
|
269
|
+
],
|
|
270
|
+
"relations": [
|
|
271
|
+
{
|
|
272
|
+
"component": "Input",
|
|
273
|
+
"relationship": "alternative",
|
|
274
|
+
"note": "Use Input for single-line text"
|
|
275
|
+
}
|
|
276
|
+
],
|
|
277
|
+
"contract": {
|
|
278
|
+
"propsSummary": [
|
|
279
|
+
"value: string - controlled value",
|
|
280
|
+
"rows: number - visible rows (default: 3)",
|
|
281
|
+
"label: string - label text",
|
|
282
|
+
"size: sm|md|lg (default: md)",
|
|
283
|
+
"error: boolean - error state",
|
|
284
|
+
"success: boolean - shows success/validated styling",
|
|
285
|
+
"showCharCount: boolean - show character counter (requires maxLength)",
|
|
286
|
+
"disabled: boolean - disabled state",
|
|
287
|
+
"resize: none|vertical|horizontal|both",
|
|
288
|
+
"onValueChange: (value: string) => void - value-first change callback alias",
|
|
289
|
+
"rootProps: HTMLAttributes<HTMLDivElement> - wrapper element props",
|
|
290
|
+
"...native textarea attributes are supported (readOnly, autoComplete, maxLength, onKeyDown, etc.)"
|
|
291
|
+
],
|
|
292
|
+
"a11yRules": [
|
|
293
|
+
"A11Y_LABEL_REQUIRED"
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
"ai": {
|
|
297
|
+
"compositionPattern": "compound",
|
|
298
|
+
"subComponents": [
|
|
299
|
+
"Root"
|
|
300
|
+
]
|
|
301
|
+
},
|
|
302
|
+
"provenance": {
|
|
303
|
+
"source": "migrated",
|
|
304
|
+
"verified": false,
|
|
305
|
+
"frameworkSupport": "native",
|
|
306
|
+
"extractedAt": "2026-03-13T23:19:05.217Z"
|
|
307
|
+
}
|
|
308
|
+
}
|