@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.
Files changed (286) hide show
  1. package/dist/assets/ui.css +2700 -3256
  2. package/dist/chart.cjs +0 -1
  3. package/dist/chart.js +0 -1
  4. package/dist/codeblock.cjs +0 -1
  5. package/dist/codeblock.js +0 -1
  6. package/dist/colorpicker.cjs +0 -1
  7. package/dist/colorpicker.js +0 -1
  8. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  9. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  10. package/dist/components/Alert/Alert.module.scss.cjs +12 -12
  11. package/dist/components/Alert/Alert.module.scss.js +12 -12
  12. package/dist/components/AppShell/AppShell.module.scss.cjs +12 -12
  13. package/dist/components/AppShell/AppShell.module.scss.js +12 -12
  14. package/dist/components/Avatar/Avatar.module.scss.cjs +13 -13
  15. package/dist/components/Avatar/Avatar.module.scss.js +13 -13
  16. package/dist/components/Badge/Badge.module.scss.cjs +13 -13
  17. package/dist/components/Badge/Badge.module.scss.js +13 -13
  18. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  19. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  20. package/dist/components/Box/Box.module.scss.cjs +152 -152
  21. package/dist/components/Box/Box.module.scss.js +152 -152
  22. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  23. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  24. package/dist/components/Button/Button.module.scss.cjs +12 -12
  25. package/dist/components/Button/Button.module.scss.js +12 -12
  26. package/dist/components/Card/Card.module.scss.cjs +14 -14
  27. package/dist/components/Card/Card.module.scss.js +14 -14
  28. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  29. package/dist/components/Chart/Chart.module.scss.js +15 -15
  30. package/dist/components/Chart/index.d.ts +0 -1
  31. package/dist/components/Chart/index.d.ts.map +1 -1
  32. package/dist/components/Checkbox/Checkbox.module.scss.cjs +10 -10
  33. package/dist/components/Checkbox/Checkbox.module.scss.js +10 -10
  34. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  35. package/dist/components/Chip/Chip.module.scss.js +15 -15
  36. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +21 -21
  37. package/dist/components/CodeBlock/CodeBlock.module.scss.js +21 -21
  38. package/dist/components/CodeBlock/index.d.ts +0 -1
  39. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  40. package/dist/components/Collapsible/Collapsible.module.scss.cjs +10 -10
  41. package/dist/components/Collapsible/Collapsible.module.scss.js +10 -10
  42. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
  43. package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
  44. package/dist/components/ColorPicker/index.d.ts +0 -1
  45. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  46. package/dist/components/Combobox/Combobox.module.scss.cjs +23 -23
  47. package/dist/components/Combobox/Combobox.module.scss.js +23 -23
  48. package/dist/components/Combobox/index.cjs +13 -10
  49. package/dist/components/Combobox/index.d.ts.map +1 -1
  50. package/dist/components/Combobox/index.js +13 -10
  51. package/dist/components/Command/Command.module.scss.cjs +11 -11
  52. package/dist/components/Command/Command.module.scss.js +11 -11
  53. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  54. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  55. package/dist/components/DataTable/DataTable.module.scss.cjs +26 -26
  56. package/dist/components/DataTable/DataTable.module.scss.js +26 -26
  57. package/dist/components/DataTable/index.cjs +0 -1
  58. package/dist/components/DataTable/index.d.ts +0 -1
  59. package/dist/components/DataTable/index.d.ts.map +1 -1
  60. package/dist/components/DataTable/index.js +0 -1
  61. package/dist/components/DatePicker/DatePicker.module.scss.cjs +31 -31
  62. package/dist/components/DatePicker/DatePicker.module.scss.js +31 -31
  63. package/dist/components/DatePicker/index.d.ts +0 -1
  64. package/dist/components/DatePicker/index.d.ts.map +1 -1
  65. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  66. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  67. package/dist/components/Drawer/Drawer.module.scss.cjs +33 -27
  68. package/dist/components/Drawer/Drawer.module.scss.js +34 -28
  69. package/dist/components/Drawer/index.cjs +36 -14
  70. package/dist/components/Drawer/index.d.ts +21 -3
  71. package/dist/components/Drawer/index.d.ts.map +1 -1
  72. package/dist/components/Drawer/index.js +36 -14
  73. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  74. package/dist/components/Editor/Editor.module.scss.js +17 -17
  75. package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
  76. package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
  77. package/dist/components/Field/Field.module.scss.cjs +4 -4
  78. package/dist/components/Field/Field.module.scss.js +4 -4
  79. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  80. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  81. package/dist/components/Header/Header.module.scss.cjs +28 -28
  82. package/dist/components/Header/Header.module.scss.js +28 -28
  83. package/dist/components/Icon/Icon.module.scss.cjs +8 -8
  84. package/dist/components/Icon/Icon.module.scss.js +8 -8
  85. package/dist/components/Image/Image.module.scss.cjs +27 -27
  86. package/dist/components/Image/Image.module.scss.js +27 -27
  87. package/dist/components/Input/Input.module.scss.cjs +19 -19
  88. package/dist/components/Input/Input.module.scss.js +19 -19
  89. package/dist/components/Link/Link.module.scss.cjs +10 -10
  90. package/dist/components/Link/Link.module.scss.js +10 -10
  91. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  92. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  93. package/dist/components/Loading/Loading.module.scss.cjs +30 -30
  94. package/dist/components/Loading/Loading.module.scss.js +30 -30
  95. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  96. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  97. package/dist/components/Markdown/index.d.ts +0 -1
  98. package/dist/components/Markdown/index.d.ts.map +1 -1
  99. package/dist/components/Menu/Menu.module.scss.cjs +16 -13
  100. package/dist/components/Menu/Menu.module.scss.js +17 -14
  101. package/dist/components/Menu/index.cjs +1 -1
  102. package/dist/components/Menu/index.d.ts.map +1 -1
  103. package/dist/components/Menu/index.js +1 -1
  104. package/dist/components/Message/Message.module.scss.cjs +18 -18
  105. package/dist/components/Message/Message.module.scss.js +18 -18
  106. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  107. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  108. package/dist/components/Pagination/Pagination.module.scss.cjs +7 -7
  109. package/dist/components/Pagination/Pagination.module.scss.js +7 -7
  110. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  111. package/dist/components/Popover/Popover.module.scss.js +10 -10
  112. package/dist/components/Progress/Progress.module.scss.cjs +25 -25
  113. package/dist/components/Progress/Progress.module.scss.js +25 -25
  114. package/dist/components/Prompt/Prompt.module.scss.cjs +26 -14
  115. package/dist/components/Prompt/Prompt.module.scss.js +26 -14
  116. package/dist/components/Prompt/index.cjs +16 -0
  117. package/dist/components/Prompt/index.d.ts +17 -1
  118. package/dist/components/Prompt/index.d.ts.map +1 -1
  119. package/dist/components/Prompt/index.js +16 -0
  120. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +16 -16
  121. package/dist/components/RadioGroup/RadioGroup.module.scss.js +16 -16
  122. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +10 -10
  123. package/dist/components/ScrollArea/ScrollArea.module.scss.js +10 -10
  124. package/dist/components/Select/Select.module.scss.cjs +17 -17
  125. package/dist/components/Select/Select.module.scss.js +17 -17
  126. package/dist/components/Select/index.cjs +20 -20
  127. package/dist/components/Select/index.d.ts.map +1 -1
  128. package/dist/components/Select/index.js +20 -20
  129. package/dist/components/Separator/Separator.module.scss.cjs +10 -10
  130. package/dist/components/Separator/Separator.module.scss.js +10 -10
  131. package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
  132. package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
  133. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  134. package/dist/components/Slider/Slider.module.scss.js +12 -12
  135. package/dist/components/Slider/index.cjs +23 -21
  136. package/dist/components/Slider/index.js +23 -21
  137. package/dist/components/Stack/Stack.module.scss.cjs +35 -35
  138. package/dist/components/Stack/Stack.module.scss.js +35 -35
  139. package/dist/components/Table/Table.module.scss.cjs +16 -16
  140. package/dist/components/Table/Table.module.scss.js +16 -16
  141. package/dist/components/Table/index.d.ts +0 -1
  142. package/dist/components/Table/index.d.ts.map +1 -1
  143. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +7 -7
  144. package/dist/components/TableOfContents/TableOfContents.module.scss.js +7 -7
  145. package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
  146. package/dist/components/Tabs/Tabs.module.scss.js +9 -9
  147. package/dist/components/Text/Text.module.scss.cjs +38 -38
  148. package/dist/components/Text/Text.module.scss.js +38 -38
  149. package/dist/components/Textarea/Textarea.module.scss.cjs +23 -23
  150. package/dist/components/Textarea/Textarea.module.scss.js +23 -23
  151. package/dist/components/Theme/ThemeToggle.module.scss.cjs +6 -6
  152. package/dist/components/Theme/ThemeToggle.module.scss.js +6 -6
  153. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
  154. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
  155. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  156. package/dist/components/Toast/Toast.module.scss.js +20 -20
  157. package/dist/components/Toggle/Toggle.module.scss.cjs +13 -13
  158. package/dist/components/Toggle/Toggle.module.scss.js +13 -13
  159. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
  160. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
  161. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  162. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  163. package/dist/components/Tooltip/index.cjs +4 -3
  164. package/dist/components/Tooltip/index.d.ts +4 -1
  165. package/dist/components/Tooltip/index.d.ts.map +1 -1
  166. package/dist/components/Tooltip/index.js +4 -3
  167. package/dist/datepicker.cjs +0 -1
  168. package/dist/datepicker.js +0 -1
  169. package/dist/index.cjs +0 -1
  170. package/dist/index.d.ts +2 -3
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +0 -1
  173. package/dist/markdown.cjs +0 -1
  174. package/dist/markdown.js +0 -1
  175. package/dist/table.cjs +0 -1
  176. package/dist/table.js +0 -1
  177. package/dist/utils/seed-derivation.cjs +29 -0
  178. package/dist/utils/seed-derivation.d.ts +1 -1
  179. package/dist/utils/seed-derivation.d.ts.map +1 -1
  180. package/dist/utils/seed-derivation.js +29 -0
  181. package/fragments.json +1 -1
  182. package/package.json +18 -14
  183. package/src/components/Accordion/Accordion.contract.json +169 -0
  184. package/src/components/Alert/Alert.contract.json +157 -0
  185. package/src/components/AppShell/AppShell.contract.json +155 -0
  186. package/src/components/Avatar/Avatar.contract.json +189 -0
  187. package/src/components/Badge/Badge.contract.json +187 -0
  188. package/src/components/BentoGrid/BentoGrid.contract.json +135 -0
  189. package/src/components/Box/Box.contract.json +423 -0
  190. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +143 -0
  191. package/src/components/Button/Button.contract.json +205 -0
  192. package/src/components/Button/Button.module.scss +24 -1
  193. package/src/components/ButtonGroup/ButtonGroup.contract.json +140 -0
  194. package/src/components/Card/Card.contract.json +185 -0
  195. package/src/components/Card/Card.module.scss +5 -1
  196. package/src/components/Chart/Chart.contract.json +129 -0
  197. package/src/components/Chart/index.tsx +0 -1
  198. package/src/components/Checkbox/Checkbox.contract.json +246 -0
  199. package/src/components/Chip/Chip.contract.json +212 -0
  200. package/src/components/Chip/Chip.module.scss +4 -4
  201. package/src/components/CodeBlock/CodeBlock.contract.json +388 -0
  202. package/src/components/CodeBlock/index.tsx +0 -1
  203. package/src/components/Collapsible/Collapsible.contract.json +154 -0
  204. package/src/components/ColorPicker/ColorPicker.contract.json +212 -0
  205. package/src/components/ColorPicker/index.tsx +0 -1
  206. package/src/components/Combobox/Combobox.contract.json +297 -0
  207. package/src/components/Combobox/index.tsx +7 -8
  208. package/src/components/Command/Command.contract.json +165 -0
  209. package/src/components/Command/Command.module.scss +22 -9
  210. package/src/components/ConversationList/ConversationList.contract.json +151 -0
  211. package/src/components/DataTable/DataTable.contract.json +302 -0
  212. package/src/components/DataTable/index.tsx +0 -2
  213. package/src/components/DatePicker/DatePicker.contract.json +288 -0
  214. package/src/components/DatePicker/index.tsx +0 -2
  215. package/src/components/Dialog/Dialog.contract.json +159 -0
  216. package/src/components/Drawer/Drawer.contract.json +161 -0
  217. package/src/components/Drawer/Drawer.module.scss +45 -5
  218. package/src/components/Drawer/index.tsx +66 -23
  219. package/src/components/Editor/Editor.contract.json +263 -0
  220. package/src/components/EmptyState/EmptyState.contract.json +133 -0
  221. package/src/components/Field/Field.contract.json +157 -0
  222. package/src/components/Fieldset/Fieldset.contract.json +117 -0
  223. package/src/components/Form/Form.contract.json +145 -0
  224. package/src/components/Grid/Grid.contract.json +195 -0
  225. package/src/components/Header/Header.contract.json +196 -0
  226. package/src/components/Icon/Icon.contract.json +194 -0
  227. package/src/components/Image/Image.contract.json +209 -0
  228. package/src/components/Input/Input.contract.json +344 -0
  229. package/src/components/Input/Input.module.scss +16 -6
  230. package/src/components/Link/Link.contract.json +180 -0
  231. package/src/components/List/List.contract.json +154 -0
  232. package/src/components/Listbox/Listbox.contract.json +158 -0
  233. package/src/components/Loading/Loading.contract.json +167 -0
  234. package/src/components/Markdown/Markdown.contract.json +127 -0
  235. package/src/components/Markdown/Markdown.module.scss +0 -3
  236. package/src/components/Markdown/index.tsx +0 -1
  237. package/src/components/Menu/Menu.contract.json +177 -0
  238. package/src/components/Menu/Menu.module.scss +6 -0
  239. package/src/components/Menu/index.tsx +3 -1
  240. package/src/components/Message/Message.contract.json +183 -0
  241. package/src/components/Message/Message.module.scss +2 -2
  242. package/src/components/NavigationMenu/NavigationMenu.contract.json +203 -0
  243. package/src/components/NavigationMenu/NavigationMenu.module.scss +18 -23
  244. package/src/components/Pagination/Pagination.contract.json +163 -0
  245. package/src/components/Pagination/Pagination.module.scss +1 -1
  246. package/src/components/Popover/Popover.contract.json +163 -0
  247. package/src/components/Progress/Progress.contract.json +176 -0
  248. package/src/components/Prompt/Prompt.contract.json +211 -0
  249. package/src/components/Prompt/Prompt.module.scss +117 -3
  250. package/src/components/Prompt/index.tsx +40 -0
  251. package/src/components/RadioGroup/RadioGroup.contract.json +226 -0
  252. package/src/components/ScrollArea/ScrollArea.contract.json +131 -0
  253. package/src/components/Select/Select.contract.json +269 -0
  254. package/src/components/Select/index.tsx +20 -25
  255. package/src/components/Separator/Separator.contract.json +143 -0
  256. package/src/components/Sidebar/Sidebar.contract.json +258 -0
  257. package/src/components/Sidebar/Sidebar.module.scss +1 -1
  258. package/src/components/Skeleton/Skeleton.contract.json +166 -0
  259. package/src/components/Slider/Slider.contract.json +248 -0
  260. package/src/components/Slider/index.tsx +10 -10
  261. package/src/components/Stack/Stack.contract.json +220 -0
  262. package/src/components/Table/Table.contract.json +171 -0
  263. package/src/components/Table/index.tsx +0 -2
  264. package/src/components/TableOfContents/TableOfContents.contract.json +145 -0
  265. package/src/components/TableOfContents/TableOfContents.module.scss +19 -15
  266. package/src/components/Tabs/Tabs.contract.json +159 -0
  267. package/src/components/Text/Text.contract.json +239 -0
  268. package/src/components/Textarea/Textarea.contract.json +308 -0
  269. package/src/components/Theme/Theme.contract.json +152 -0
  270. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +165 -0
  271. package/src/components/Toast/Toast.contract.json +181 -0
  272. package/src/components/Toggle/Toggle.contract.json +231 -0
  273. package/src/components/Toggle/Toggle.module.scss +3 -3
  274. package/src/components/ToggleGroup/ToggleGroup.contract.json +206 -0
  275. package/src/components/Tooltip/Tooltip.contract.json +214 -0
  276. package/src/components/Tooltip/index.tsx +7 -3
  277. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +116 -0
  278. package/src/index.ts +8 -3
  279. package/src/styles/globals.scss +6 -1
  280. package/src/tokens/_computed.scss +3 -1
  281. package/src/tokens/_density.scss +4 -4
  282. package/src/tokens/_derive.scss +52 -56
  283. package/src/tokens/_palettes.scss +20 -1
  284. package/src/tokens/_seeds.scss +2 -2
  285. package/src/tokens/_variables.scss +45 -29
  286. 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
+ }