@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,189 @@
1
+ {
2
+ "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
+ "name": "Avatar",
4
+ "description": "Visual representation of a user or entity",
5
+ "category": "display",
6
+ "tags": [
7
+ "user",
8
+ "profile",
9
+ "image",
10
+ "identity"
11
+ ],
12
+ "status": "stable",
13
+ "sourcePath": "src/components/Avatar/index.tsx",
14
+ "exportName": "Avatar",
15
+ "propsSummary": [
16
+ "src: string",
17
+ "alt: string (default: )",
18
+ "initials: string",
19
+ "name: string",
20
+ "size: xs|sm|md|lg|xl (default: md)",
21
+ "customSize: union",
22
+ "shape: circle|square (default: circle)",
23
+ "color: string",
24
+ "imageStyle: object",
25
+ "imageProps: object",
26
+ "style: object"
27
+ ],
28
+ "props": {
29
+ "src": {
30
+ "type": "string",
31
+ "description": "Image source URL",
32
+ "required": false
33
+ },
34
+ "alt": {
35
+ "type": "string",
36
+ "description": "Alt text for the image",
37
+ "default": "",
38
+ "required": false
39
+ },
40
+ "initials": {
41
+ "type": "string",
42
+ "description": "Fallback initials (1-2 characters)",
43
+ "required": false
44
+ },
45
+ "name": {
46
+ "type": "string",
47
+ "description": "Full name - used to generate initials",
48
+ "required": false
49
+ },
50
+ "size": {
51
+ "type": "enum",
52
+ "description": "Size variant",
53
+ "default": "md",
54
+ "required": false,
55
+ "values": [
56
+ "xs",
57
+ "sm",
58
+ "md",
59
+ "lg",
60
+ "xl"
61
+ ]
62
+ },
63
+ "customSize": {
64
+ "type": "union",
65
+ "description": "Custom avatar size (number in px or CSS size string like \"2.25rem\"), overrides size width/height",
66
+ "required": false
67
+ },
68
+ "shape": {
69
+ "type": "enum",
70
+ "description": "Shape variant",
71
+ "default": "circle",
72
+ "required": false,
73
+ "values": [
74
+ "circle",
75
+ "square"
76
+ ]
77
+ },
78
+ "color": {
79
+ "type": "string",
80
+ "description": "Custom background color for fallback avatar",
81
+ "required": false
82
+ },
83
+ "imageStyle": {
84
+ "type": "object",
85
+ "description": "Inline style object applied to the underlying image element",
86
+ "required": false
87
+ },
88
+ "imageProps": {
89
+ "type": "object",
90
+ "description": "Additional props for the underlying img element (except src/alt/className/style)",
91
+ "required": false
92
+ },
93
+ "style": {
94
+ "type": "object",
95
+ "description": "",
96
+ "required": false
97
+ }
98
+ },
99
+ "usage": {
100
+ "when": [
101
+ "Displaying user profile pictures",
102
+ "Showing team member lists",
103
+ "Representing entities in lists or cards",
104
+ "User identification in comments or messages"
105
+ ],
106
+ "whenNot": [
107
+ "Decorative images (use Image)",
108
+ "Logo display (use Logo component)",
109
+ "Large profile headers (use custom layout)"
110
+ ],
111
+ "guidelines": [
112
+ "Always provide alt text or name for accessibility",
113
+ "Use consistent sizes within the same context",
114
+ "Provide fallback initials when image may not load",
115
+ "Use Avatar.Group for multiple avatars in a row",
116
+ "Use imageProps for advanced img attributes (loading, decoding, referrerPolicy, etc.)"
117
+ ],
118
+ "accessibility": [
119
+ "Include meaningful alt text describing the user",
120
+ "Initials should be derived from name for screen readers",
121
+ "Decorative avatars should have empty alt"
122
+ ]
123
+ },
124
+ "examples": [
125
+ {
126
+ "name": "Default",
127
+ "description": "Avatar with image",
128
+ "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar\n src=\"https://i.pravatar.cc/150?u=jane\"\n alt=\"Jane Doe\"\n name=\"Jane Doe\"\n/>"
129
+ },
130
+ {
131
+ "name": "With Initials",
132
+ "description": "Fallback when no image is provided",
133
+ "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar name=\"John Smith\" />"
134
+ },
135
+ {
136
+ "name": "Sizes",
137
+ "description": "Available size options",
138
+ "code": "import { Avatar } from '@/components/Avatar';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Avatar name=\"XS\" size=\"xs\" />\n <Avatar name=\"SM\" size=\"sm\" />\n <Avatar name=\"MD\" size=\"md\" />\n <Avatar name=\"LG\" size=\"lg\" />\n <Avatar name=\"XL\" size=\"xl\" />\n</Stack>"
139
+ },
140
+ {
141
+ "name": "Custom Size",
142
+ "description": "Set an exact avatar size",
143
+ "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar name=\"Conan McNicholl\" customSize={36} />"
144
+ },
145
+ {
146
+ "name": "Square Shape",
147
+ "description": "Square variant for app icons or brands",
148
+ "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar name=\"App\" shape=\"square\" />"
149
+ },
150
+ {
151
+ "name": "Group",
152
+ "description": "Multiple avatars stacked together",
153
+ "code": "import { Avatar } from '@/components/Avatar';\n\n<Avatar.Group max={3} size=\"md\">\n <Avatar name=\"Alice Johnson\" />\n <Avatar name=\"Bob Smith\" />\n <Avatar name=\"Carol Williams\" />\n <Avatar name=\"David Brown\" />\n <Avatar name=\"Eve Davis\" />\n</Avatar.Group>"
154
+ }
155
+ ],
156
+ "relations": [
157
+ {
158
+ "component": "Avatar",
159
+ "relationship": "parent",
160
+ "note": "Use Avatar.Group for stacked avatar displays"
161
+ }
162
+ ],
163
+ "contract": {
164
+ "propsSummary": [
165
+ "src: string - image URL",
166
+ "name: string - used for initials fallback",
167
+ "size: xs|sm|md|lg|xl (default: md)",
168
+ "customSize: number|string - custom size override",
169
+ "imageStyle: CSSProperties - inline image styling",
170
+ "imageProps: ImgHTMLAttributes - advanced img attributes",
171
+ "shape: circle|square (default: circle)"
172
+ ],
173
+ "a11yRules": [
174
+ "A11Y_IMG_ALT"
175
+ ]
176
+ },
177
+ "ai": {
178
+ "compositionPattern": "compound",
179
+ "subComponents": [
180
+ "Group"
181
+ ]
182
+ },
183
+ "provenance": {
184
+ "source": "migrated",
185
+ "verified": false,
186
+ "frameworkSupport": "native",
187
+ "extractedAt": "2026-03-13T23:18:50.743Z"
188
+ }
189
+ }
@@ -0,0 +1,187 @@
1
+ {
2
+ "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
+ "name": "Badge",
4
+ "description": "Compact label for status, counts, or categorization. Draws attention to metadata without dominating the layout.",
5
+ "category": "display",
6
+ "tags": [
7
+ "status",
8
+ "label",
9
+ "tag",
10
+ "count",
11
+ "chip"
12
+ ],
13
+ "status": "stable",
14
+ "sourcePath": "src/components/Badge/index.tsx",
15
+ "exportName": "Badge",
16
+ "propsSummary": [
17
+ "children: node (required)",
18
+ "variant: default|success|warning|error|info|outline (default: default)",
19
+ "size: sm|md|lg (default: md)",
20
+ "dot: boolean (default: false)",
21
+ "icon: node",
22
+ "onRemove: function",
23
+ "announce: boolean (default: false)",
24
+ "role: union"
25
+ ],
26
+ "props": {
27
+ "children": {
28
+ "type": "node",
29
+ "description": "Badge label text",
30
+ "required": true
31
+ },
32
+ "variant": {
33
+ "type": "enum",
34
+ "description": "Visual style indicating severity or category",
35
+ "default": "default",
36
+ "required": false,
37
+ "values": [
38
+ "default",
39
+ "success",
40
+ "warning",
41
+ "error",
42
+ "info",
43
+ "outline"
44
+ ]
45
+ },
46
+ "size": {
47
+ "type": "enum",
48
+ "description": "Badge size",
49
+ "default": "md",
50
+ "required": false,
51
+ "values": [
52
+ "sm",
53
+ "md",
54
+ "lg"
55
+ ]
56
+ },
57
+ "dot": {
58
+ "type": "boolean",
59
+ "description": "Show a colored dot indicator before the label",
60
+ "default": "false",
61
+ "required": false
62
+ },
63
+ "icon": {
64
+ "type": "node",
65
+ "description": "Optional icon element before the text",
66
+ "required": false
67
+ },
68
+ "onRemove": {
69
+ "type": "function",
70
+ "description": "Makes the badge removable. Called when X is clicked.",
71
+ "required": false
72
+ },
73
+ "announce": {
74
+ "type": "boolean",
75
+ "description": "Opt into role=\"status\" live announcement semantics",
76
+ "default": "false",
77
+ "required": false
78
+ },
79
+ "role": {
80
+ "type": "union",
81
+ "description": "",
82
+ "required": false
83
+ }
84
+ },
85
+ "usage": {
86
+ "when": [
87
+ "Showing item status (active, pending, archived)",
88
+ "Displaying counts or quantities inline",
89
+ "Categorizing or tagging content",
90
+ "Highlighting new or updated items"
91
+ ],
92
+ "whenNot": [
93
+ "Conveying critical errors (use Alert instead)",
94
+ "Long-form status messages (use Alert)",
95
+ "Interactive filtering (use Chip/ToggleGroup)",
96
+ "Navigation labels (use Tabs or links)"
97
+ ],
98
+ "guidelines": [
99
+ "Keep badge text under 20 characters",
100
+ "Use dot variant for live status indicators",
101
+ "Pair success/error variants with meaningful labels, not just colors",
102
+ "Use onRemove for user-created tags only, not system-generated badges",
103
+ "Badges are not announced as live status updates by default; use announce for screen-reader status announcements when appropriate"
104
+ ],
105
+ "accessibility": [
106
+ "Badge text must be meaningful without relying on color alone",
107
+ "Removable badges must have accessible dismiss button labels",
108
+ "Avoid using badges as the sole indicator of important state changes"
109
+ ]
110
+ },
111
+ "examples": [
112
+ {
113
+ "name": "Default",
114
+ "description": "Neutral badge for general labels",
115
+ "code": "import { Badge } from '@/components/Badge';\n\n<Badge>Default</Badge>"
116
+ },
117
+ {
118
+ "name": "Status Variants",
119
+ "description": "All severity variants for different contexts",
120
+ "code": "import { Badge } from '@/components/Badge';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"default\">Default</Badge>\n <Badge variant=\"success\">Active</Badge>\n <Badge variant=\"warning\">Pending</Badge>\n <Badge variant=\"error\">Failed</Badge>\n <Badge variant=\"info\">New</Badge>\n</Stack>"
121
+ },
122
+ {
123
+ "name": "With Dot",
124
+ "description": "Live status indicators using dot prefix",
125
+ "code": "import { Badge } from '@/components/Badge';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"success\" dot>Online</Badge>\n <Badge variant=\"warning\" dot>Away</Badge>\n <Badge variant=\"error\" dot>Offline</Badge>\n</Stack>"
126
+ },
127
+ {
128
+ "name": "Announced Status",
129
+ "description": "Opt into screen-reader status announcement behavior",
130
+ "code": "import { Badge } from '@/components/Badge';\n\n<Badge variant=\"success\" announce>Saved</Badge>"
131
+ },
132
+ {
133
+ "name": "Outline",
134
+ "description": "Minimal bordered badge for neutral emphasis",
135
+ "code": "import { Badge } from '@/components/Badge';\n\n<Badge variant=\"outline\">Outline</Badge>"
136
+ },
137
+ {
138
+ "name": "Small Size",
139
+ "description": "Compact badges for dense UIs",
140
+ "code": "import { Badge } from '@/components/Badge';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" align=\"center\" wrap>\n <Badge size=\"sm\" variant=\"info\">v2.1</Badge>\n <Badge size=\"sm\" variant=\"success\">Stable</Badge>\n <Badge size=\"md\" variant=\"info\">Standard</Badge>\n</Stack>"
141
+ },
142
+ {
143
+ "name": "Removable",
144
+ "description": "User-created tags that can be dismissed",
145
+ "code": "import { Badge } from '@/components/Badge';\nimport { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"sm\" wrap>\n <Badge variant=\"info\" onRemove={() => {}}>React</Badge>\n <Badge variant=\"info\" onRemove={() => {}}>TypeScript</Badge>\n <Badge variant=\"info\" onRemove={() => {}}>CSS</Badge>\n</Stack>"
146
+ }
147
+ ],
148
+ "relations": [
149
+ {
150
+ "component": "Alert",
151
+ "relationship": "alternative",
152
+ "note": "Use Alert for prominent, longer messages with actions"
153
+ },
154
+ {
155
+ "component": "Chip",
156
+ "relationship": "sibling",
157
+ "note": "Chip is interactive (clickable/filterable); Badge is display-only"
158
+ }
159
+ ],
160
+ "contract": {
161
+ "propsSummary": [
162
+ "children: ReactNode - badge label (required)",
163
+ "variant: default|success|warning|error|info|outline - visual style",
164
+ "size: sm|md - badge size",
165
+ "dot: boolean - show status dot indicator",
166
+ "onRemove: () => void - makes badge removable",
167
+ "announce: boolean - opt into role=\"status\" + auto status aria-label"
168
+ ],
169
+ "a11yRules": [
170
+ "A11Y_BADGE_CONTRAST",
171
+ "A11Y_BADGE_DISMISS",
172
+ "A11Y_TARGET_SIZE_MIN"
173
+ ]
174
+ },
175
+ "ai": {
176
+ "compositionPattern": "compound",
177
+ "subComponents": [
178
+ "Root"
179
+ ]
180
+ },
181
+ "provenance": {
182
+ "source": "migrated",
183
+ "verified": false,
184
+ "frameworkSupport": "native",
185
+ "extractedAt": "2026-03-13T23:18:50.941Z"
186
+ }
187
+ }
@@ -0,0 +1,135 @@
1
+ {
2
+ "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
+ "name": "BentoGrid",
4
+ "description": "Asymmetric grid layout with responsive spans and built-in surface styling for bento-style feature sections",
5
+ "category": "layout",
6
+ "tags": [
7
+ "bento",
8
+ "grid",
9
+ "layout",
10
+ "responsive",
11
+ "feature-grid",
12
+ "asymmetric"
13
+ ],
14
+ "status": "stable",
15
+ "sourcePath": "src/components/BentoGrid/index.tsx",
16
+ "exportName": "BentoGrid",
17
+ "propsSummary": [
18
+ "children: node",
19
+ "columns: union (default: 3)",
20
+ "gap: none|xs|sm|md|lg|xl (default: md)",
21
+ "style: object"
22
+ ],
23
+ "props": {
24
+ "children": {
25
+ "type": "node",
26
+ "description": "BentoGrid.Item children",
27
+ "required": false
28
+ },
29
+ "columns": {
30
+ "type": "union",
31
+ "description": "Number of columns — auto-collapses responsively (3→2→1)",
32
+ "default": "3",
33
+ "required": false,
34
+ "values": [
35
+ "2",
36
+ "3",
37
+ "4"
38
+ ]
39
+ },
40
+ "gap": {
41
+ "type": "enum",
42
+ "description": "Gap between grid items, mapped to spacing tokens",
43
+ "default": "md",
44
+ "required": false,
45
+ "values": [
46
+ "none",
47
+ "xs",
48
+ "sm",
49
+ "md",
50
+ "lg",
51
+ "xl"
52
+ ]
53
+ },
54
+ "style": {
55
+ "type": "object",
56
+ "description": "",
57
+ "required": false
58
+ }
59
+ },
60
+ "usage": {
61
+ "when": [
62
+ "Asymmetric feature grids with hero + supporting items",
63
+ "Dashboard overviews where cards have different visual weight",
64
+ "Marketing pages with mixed-size content blocks",
65
+ "Any layout where items need per-breakpoint column/row spans"
66
+ ],
67
+ "whenNot": [
68
+ "Uniform grids where all items are the same size (use Grid)",
69
+ "Form layouts with labeled fields (use Grid)",
70
+ "Simple stacked content (use Stack)"
71
+ ],
72
+ "guidelines": [
73
+ "Use colSpan/rowSpan with responsive objects for layouts that adapt across breakpoints",
74
+ "The hero item typically uses colSpan={2} rowSpan={2} at lg and above",
75
+ "Items include built-in surface styling — no need to wrap children in Card",
76
+ "Grid auto-collapses: 3→2 columns below lg, all→1 column below sm",
77
+ "Root and Item forward DOM props (aria-*, data-*, handlers), and Item style merges with span CSS vars"
78
+ ],
79
+ "accessibility": [
80
+ "Grid is purely visual — it does not affect reading order or semantics",
81
+ "Ensure logical source order matches visual order for screen readers",
82
+ "Hover effects are disabled when prefers-reduced-motion is set",
83
+ "Border thickness increases in prefers-contrast: more mode"
84
+ ]
85
+ },
86
+ "examples": [
87
+ {
88
+ "name": "Default",
89
+ "description": "Basic 3-column uniform bento grid",
90
+ "code": "<BentoGrid columns={3} gap=\"md\">\n <BentoGrid.Item>Item 1</BentoGrid.Item>\n <BentoGrid.Item>Item 2</BentoGrid.Item>\n <BentoGrid.Item>Item 3</BentoGrid.Item>\n <BentoGrid.Item>Item 4</BentoGrid.Item>\n <BentoGrid.Item>Item 5</BentoGrid.Item>\n <BentoGrid.Item>Item 6</BentoGrid.Item>\n</BentoGrid>"
91
+ },
92
+ {
93
+ "name": "Hero Layout",
94
+ "description": "2×2 hero item with 4 supporting items in a 3-column grid",
95
+ "code": "<BentoGrid columns={3} gap=\"md\">\n <BentoGrid.Item colSpan={{ base: 1, lg: 2 }} rowSpan={{ base: 1, lg: 2 }}>\n Hero content\n </BentoGrid.Item>\n <BentoGrid.Item>Item 2</BentoGrid.Item>\n <BentoGrid.Item>Item 3</BentoGrid.Item>\n <BentoGrid.Item>Item 4</BentoGrid.Item>\n <BentoGrid.Item>Item 5</BentoGrid.Item>\n</BentoGrid>"
96
+ },
97
+ {
98
+ "name": "Two Column",
99
+ "description": "2-column bento with a wide item",
100
+ "code": "<BentoGrid columns={2} gap=\"md\">\n <BentoGrid.Item>Item 1</BentoGrid.Item>\n <BentoGrid.Item>Item 2</BentoGrid.Item>\n <BentoGrid.Item colSpan={2}>Wide item</BentoGrid.Item>\n <BentoGrid.Item>Item 4</BentoGrid.Item>\n <BentoGrid.Item>Item 5</BentoGrid.Item>\n</BentoGrid>"
101
+ },
102
+ {
103
+ "name": "Full-Width Banner",
104
+ "description": "3-column grid with a full-width item spanning all columns",
105
+ "code": "<BentoGrid columns={3} gap=\"md\">\n <BentoGrid.Item>Item 1</BentoGrid.Item>\n <BentoGrid.Item>Item 2</BentoGrid.Item>\n <BentoGrid.Item>Item 3</BentoGrid.Item>\n <BentoGrid.Item colSpan={3}>Full-width banner</BentoGrid.Item>\n</BentoGrid>"
106
+ }
107
+ ],
108
+ "relations": [
109
+ {
110
+ "component": "Grid",
111
+ "relationship": "alternative",
112
+ "note": "Use Grid for uniform layouts; BentoGrid for asymmetric spans with built-in surfaces"
113
+ },
114
+ {
115
+ "component": "Card",
116
+ "relationship": "sibling",
117
+ "note": "BentoGrid.Item has built-in surface styling similar to Card"
118
+ }
119
+ ],
120
+ "contract": {
121
+ "propsSummary": [
122
+ "columns: 2|3|4 (default: 3) — auto-collapses responsively",
123
+ "gap: none|xs|sm|md|lg|xl (default: md)",
124
+ "BentoGrid.Item colSpan: 1|2|3 | { base, sm, md, lg, xl }",
125
+ "BentoGrid.Item rowSpan: 1|2|3 | { base, sm, md, lg, xl }",
126
+ "BentoGrid and BentoGrid.Item forward div DOM props; Item style is merged with generated span vars"
127
+ ]
128
+ },
129
+ "provenance": {
130
+ "source": "migrated",
131
+ "verified": false,
132
+ "frameworkSupport": "native",
133
+ "extractedAt": "2026-03-13T23:18:52.407Z"
134
+ }
135
+ }