banhaten 0.1.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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +361 -0
  3. package/banhaten.config.example.json +13 -0
  4. package/package.json +59 -0
  5. package/registry/assets/activity-feed-avatar.png +0 -0
  6. package/registry/assets/avatars/avatar-01.jpg +0 -0
  7. package/registry/assets/avatars/avatar-02.jpg +0 -0
  8. package/registry/assets/avatars/avatar-03.jpg +0 -0
  9. package/registry/assets/avatars/avatar-04.jpg +0 -0
  10. package/registry/assets/avatars/avatar-05.jpg +0 -0
  11. package/registry/assets/avatars/avatar-06.jpg +0 -0
  12. package/registry/assets/avatars/avatar-07.jpg +0 -0
  13. package/registry/assets/avatars/avatar-08.jpg +0 -0
  14. package/registry/assets/avatars/avatar-09.jpg +0 -0
  15. package/registry/assets/avatars/avatar-10.jpg +0 -0
  16. package/registry/assets/avatars/avatar-11.jpg +0 -0
  17. package/registry/assets/avatars/avatar-12.jpg +0 -0
  18. package/registry/assets/avatars/avatar-13.jpg +0 -0
  19. package/registry/assets/avatars/avatar-14.jpg +0 -0
  20. package/registry/assets/avatars/avatar-15.jpg +0 -0
  21. package/registry/assets/avatars/avatar-16.jpg +0 -0
  22. package/registry/assets/avatars/avatar-17.jpg +0 -0
  23. package/registry/assets/avatars/avatar-18.jpg +0 -0
  24. package/registry/assets/avatars/avatar-19.jpg +0 -0
  25. package/registry/assets/avatars/avatar-20.jpg +0 -0
  26. package/registry/assets/avatars/avatar-21.jpg +0 -0
  27. package/registry/assets/avatars/avatar-22.jpg +0 -0
  28. package/registry/assets/avatars/avatar-23.jpg +0 -0
  29. package/registry/assets/avatars/avatar-24.jpg +0 -0
  30. package/registry/assets/avatars/avatar-25.jpg +0 -0
  31. package/registry/assets/avatars/avatar-26.jpg +0 -0
  32. package/registry/assets/avatars/avatar-27.jpg +0 -0
  33. package/registry/assets/avatars/avatar-28.jpg +0 -0
  34. package/registry/assets/avatars/avatar-29.jpg +0 -0
  35. package/registry/assets/avatars/avatar-30.jpg +0 -0
  36. package/registry/assets/avatars/avatar-31.jpg +0 -0
  37. package/registry/assets/avatars/avatar-32.jpg +0 -0
  38. package/registry/assets/avatars/avatar-33.jpg +0 -0
  39. package/registry/assets/avatars/avatar-34.jpg +0 -0
  40. package/registry/assets/avatars/avatar-35.jpg +0 -0
  41. package/registry/assets/image-assets.json +744 -0
  42. package/registry/assets/images/art-01.jpg +0 -0
  43. package/registry/assets/images/art-02.jpg +0 -0
  44. package/registry/assets/images/art-03.jpg +0 -0
  45. package/registry/assets/images/art-04.jpg +0 -0
  46. package/registry/assets/images/art-05.jpg +0 -0
  47. package/registry/assets/images/art-06.jpg +0 -0
  48. package/registry/assets/images/art-07.jpg +0 -0
  49. package/registry/assets/images/art-08.jpg +0 -0
  50. package/registry/assets/images/art-09.jpg +0 -0
  51. package/registry/assets/images/art-10.jpg +0 -0
  52. package/registry/assets/images/art-11.jpg +0 -0
  53. package/registry/assets/images/art-12.jpg +0 -0
  54. package/registry/assets/images/art-13.jpg +0 -0
  55. package/registry/assets/images/art-14.jpg +0 -0
  56. package/registry/assets/images/art-15.jpg +0 -0
  57. package/registry/assets/images/art-16.jpg +0 -0
  58. package/registry/assets/images/art-17.jpg +0 -0
  59. package/registry/assets/images/art-18.jpg +0 -0
  60. package/registry/assets/images/art-19.jpg +0 -0
  61. package/registry/assets/images/art-20.jpg +0 -0
  62. package/registry/assets/images/art-21.jpg +0 -0
  63. package/registry/assets/images/art-22.jpg +0 -0
  64. package/registry/assets/images/art-23.jpg +0 -0
  65. package/registry/assets/images/art-24.jpg +0 -0
  66. package/registry/assets/images/art-25.jpg +0 -0
  67. package/registry/assets/images/art-26.jpg +0 -0
  68. package/registry/assets/images/art-27.jpg +0 -0
  69. package/registry/assets/images/nature-01.jpg +0 -0
  70. package/registry/assets/images/nature-02.jpg +0 -0
  71. package/registry/assets/images/nature-03.jpg +0 -0
  72. package/registry/assets/images/nature-04.jpg +0 -0
  73. package/registry/assets/images/nature-05.jpg +0 -0
  74. package/registry/assets/images/nature-06.jpg +0 -0
  75. package/registry/assets/images/nature-07.jpg +0 -0
  76. package/registry/assets/images/nature-08.jpg +0 -0
  77. package/registry/assets/images/nature-09.jpg +0 -0
  78. package/registry/assets/images/nature-10.jpg +0 -0
  79. package/registry/assets/images/nature-11.jpg +0 -0
  80. package/registry/assets/images/nature-12.jpg +0 -0
  81. package/registry/assets/images/nature-13.jpg +0 -0
  82. package/registry/assets/images/nature-14.jpg +0 -0
  83. package/registry/assets/images/nature-15.jpg +0 -0
  84. package/registry/assets/images/nature-16.jpg +0 -0
  85. package/registry/assets/images/nature-17.jpg +0 -0
  86. package/registry/assets/images/nature-18.jpg +0 -0
  87. package/registry/assets/images/nature-19.jpg +0 -0
  88. package/registry/assets/images/nature-20.jpg +0 -0
  89. package/registry/components/accordion.tsx +119 -0
  90. package/registry/components/alert.tsx +282 -0
  91. package/registry/components/attribute.tsx +452 -0
  92. package/registry/components/avatar.tsx +142 -0
  93. package/registry/components/badge.tsx +567 -0
  94. package/registry/components/button-group.tsx +246 -0
  95. package/registry/components/button.tsx +102 -0
  96. package/registry/components/card.tsx +613 -0
  97. package/registry/components/checkbox.tsx +244 -0
  98. package/registry/components/date-picker.tsx +1143 -0
  99. package/registry/components/divider.tsx +82 -0
  100. package/registry/components/expanded/ActivityFeed.tsx +226 -0
  101. package/registry/components/expanded/Banner.tsx +145 -0
  102. package/registry/components/expanded/BannerBoard.tsx +225 -0
  103. package/registry/components/expanded/Breadcrumbs.tsx +156 -0
  104. package/registry/components/expanded/CatalogComponentsShowcase.tsx +211 -0
  105. package/registry/components/expanded/CatalogDivider.tsx +48 -0
  106. package/registry/components/expanded/CatalogTag.tsx +92 -0
  107. package/registry/components/expanded/CommandBar.tsx +406 -0
  108. package/registry/components/expanded/FileUpload.tsx +231 -0
  109. package/registry/components/expanded/IconExplorer.tsx +612 -0
  110. package/registry/components/expanded/OnboardingStepListItem.tsx +67 -0
  111. package/registry/components/expanded/PageHeader.tsx +184 -0
  112. package/registry/components/expanded/Slideout.tsx +514 -0
  113. package/registry/components/expanded/Steps.tsx +266 -0
  114. package/registry/components/expanded/Table.tsx +1014 -0
  115. package/registry/components/expanded/Tabs.tsx +86 -0
  116. package/registry/components/expanded/Timeline.tsx +235 -0
  117. package/registry/components/expanded/TimelineShowcase.tsx +158 -0
  118. package/registry/components/expanded/activityFeed.css +292 -0
  119. package/registry/components/expanded/banner.css +312 -0
  120. package/registry/components/expanded/breadcrumbs.css +140 -0
  121. package/registry/components/expanded/catalogComponentsShowcase.css +87 -0
  122. package/registry/components/expanded/commandBar.css +473 -0
  123. package/registry/components/expanded/divider.css +75 -0
  124. package/registry/components/expanded/fileUpload.css +228 -0
  125. package/registry/components/expanded/iconExplorer.css +764 -0
  126. package/registry/components/expanded/iconPacks.ts +866 -0
  127. package/registry/components/expanded/onboardingStepListItem.css +126 -0
  128. package/registry/components/expanded/pageHeader.css +287 -0
  129. package/registry/components/expanded/slideout.css +955 -0
  130. package/registry/components/expanded/steps.css +329 -0
  131. package/registry/components/expanded/table.css +607 -0
  132. package/registry/components/expanded/tabs.css +197 -0
  133. package/registry/components/expanded/tag.css +148 -0
  134. package/registry/components/expanded/timeline.css +282 -0
  135. package/registry/components/input-content.ts +106 -0
  136. package/registry/components/input.tsx +866 -0
  137. package/registry/components/menu.tsx +758 -0
  138. package/registry/components/modal.tsx +799 -0
  139. package/registry/components/pagination.tsx +543 -0
  140. package/registry/components/progress-slider.tsx +216 -0
  141. package/registry/components/progress.tsx +367 -0
  142. package/registry/components/radio-card.tsx +654 -0
  143. package/registry/components/radio-group.tsx +570 -0
  144. package/registry/components/select-content.tsx +313 -0
  145. package/registry/components/select.tsx +871 -0
  146. package/registry/components/slider.tsx +380 -0
  147. package/registry/components/social-button.tsx +360 -0
  148. package/registry/components/spinner.tsx +31 -0
  149. package/registry/components/tag.tsx +423 -0
  150. package/registry/components/textarea.tsx +625 -0
  151. package/registry/components/toggle.tsx +272 -0
  152. package/registry/components/toolbar.tsx +467 -0
  153. package/registry/components/tooltip.tsx +427 -0
  154. package/registry/examples/accordion-demo.tsx +34 -0
  155. package/registry/examples/alert-demo.tsx +14 -0
  156. package/registry/examples/attribute-demo.tsx +65 -0
  157. package/registry/examples/avatar-demo.tsx +74 -0
  158. package/registry/examples/badge-demo.tsx +53 -0
  159. package/registry/examples/button-demo.tsx +83 -0
  160. package/registry/examples/button-group-demo.tsx +42 -0
  161. package/registry/examples/card-demo.tsx +48 -0
  162. package/registry/examples/checkbox-demo.tsx +67 -0
  163. package/registry/examples/date-picker-demo.tsx +74 -0
  164. package/registry/examples/divider-demo.tsx +17 -0
  165. package/registry/examples/expanded/activity-feed-demo.tsx +22 -0
  166. package/registry/examples/expanded/banner-demo.tsx +23 -0
  167. package/registry/examples/expanded/catalog-components-demo.tsx +5 -0
  168. package/registry/examples/expanded/command-bar-demo.tsx +10 -0
  169. package/registry/examples/expanded/icons-demo.tsx +5 -0
  170. package/registry/examples/expanded/onboarding-step-demo.tsx +11 -0
  171. package/registry/examples/expanded/page-header-demo.tsx +19 -0
  172. package/registry/examples/expanded/slideout-demo.tsx +15 -0
  173. package/registry/examples/expanded/steps-demo.tsx +18 -0
  174. package/registry/examples/expanded/tabs-demo.tsx +13 -0
  175. package/registry/examples/expanded/timeline-demo.tsx +18 -0
  176. package/registry/examples/input-demo.tsx +87 -0
  177. package/registry/examples/menu-demo.tsx +109 -0
  178. package/registry/examples/modal-demo.tsx +16 -0
  179. package/registry/examples/pagination-demo.tsx +17 -0
  180. package/registry/examples/progress-demo.tsx +37 -0
  181. package/registry/examples/progress-slider-demo.tsx +29 -0
  182. package/registry/examples/radio-card-demo.tsx +51 -0
  183. package/registry/examples/radio-group-demo.tsx +62 -0
  184. package/registry/examples/select-demo.tsx +73 -0
  185. package/registry/examples/slider-demo.tsx +31 -0
  186. package/registry/examples/social-button-demo.tsx +51 -0
  187. package/registry/examples/tag-demo.tsx +29 -0
  188. package/registry/examples/textarea-demo.tsx +79 -0
  189. package/registry/examples/toggle-demo.tsx +59 -0
  190. package/registry/examples/toolbar-demo.tsx +80 -0
  191. package/registry/examples/tooltip-demo.tsx +115 -0
  192. package/registry/hooks/use-direction.ts +27 -0
  193. package/registry/index.json +1213 -0
  194. package/registry/styles/globals.css +4600 -0
  195. package/registry/utils/cn.ts +6 -0
  196. package/src/cli/index.js +826 -0
  197. package/tokens/Color mode.zip +0 -0
  198. package/tokens/Numbers.zip +0 -0
  199. package/tokens/Radius.zip +0 -0
  200. package/tokens/Theme.zip +0 -0
  201. package/tokens/banhaten.tokens.json +5525 -0
@@ -0,0 +1,1213 @@
1
+ {
2
+ "$schema": "https://banhaten.dev/registry.schema.json",
3
+ "name": "banhaten",
4
+ "base": {
5
+ "dependencies": {
6
+ "@fontsource/inter": "^5.2.8",
7
+ "class-variance-authority": "^0.7.1",
8
+ "clsx": "^2.1.1",
9
+ "tailwind-merge": "^3.3.1"
10
+ },
11
+ "files": [
12
+ {
13
+ "source": "utils/cn.ts",
14
+ "target": "{{utils}}.ts"
15
+ },
16
+ {
17
+ "source": "hooks/use-direction.ts",
18
+ "target": "{{hooks}}/use-direction.ts"
19
+ }
20
+ ]
21
+ },
22
+ "components": {
23
+ "accordion": {
24
+ "description": "Accessible disclosure primitive with single or multiple expansion, Banhaten variants, size scale, animation, and RTL-safe text alignment.",
25
+ "dependencies": {
26
+ "@radix-ui/react-accordion": "^1.2.12",
27
+ "class-variance-authority": "^0.7.1",
28
+ "lucide-react": "^1.17.0"
29
+ },
30
+ "parts": [
31
+ "Accordion",
32
+ "AccordionItem",
33
+ "AccordionTrigger",
34
+ "AccordionContent"
35
+ ],
36
+ "variants": ["default", "bordered", "cards", "soft"],
37
+ "sizes": ["sm", "default", "lg"],
38
+ "rtl": {
39
+ "inheritsDirection": true,
40
+ "textAlignment": "Uses text-start and dir=\"auto\" so Arabic and English copy align and punctuate naturally.",
41
+ "spacing": "Uses gap and logical inherited direction rather than physical left/right spacing."
42
+ },
43
+ "files": [
44
+ {
45
+ "source": "components/accordion.tsx",
46
+ "target": "{{ui}}/accordion.tsx"
47
+ }
48
+ ],
49
+ "examples": ["examples/accordion-demo.tsx"]
50
+ },
51
+ "avatar": {
52
+ "description": "User avatar primitive with image, fallback, badge, group, group count, size scale, and RTL-safe overlap.",
53
+ "dependencies": {
54
+ "@radix-ui/react-avatar": "^1.1.10",
55
+ "class-variance-authority": "^0.7.1"
56
+ },
57
+ "parts": [
58
+ "Avatar",
59
+ "AvatarImage",
60
+ "AvatarFallback",
61
+ "AvatarBadge",
62
+ "AvatarGroup",
63
+ "AvatarGroupCount"
64
+ ],
65
+ "sizes": ["sm", "default", "lg", "xl"],
66
+ "rtl": {
67
+ "inheritsDirection": true,
68
+ "groupOverlap": "Uses logical -ms spacing so overlap reverses naturally in RTL.",
69
+ "badgePlacement": "Uses logical end/bottom positioning."
70
+ },
71
+ "files": [
72
+ {
73
+ "source": "components/avatar.tsx",
74
+ "target": "{{ui}}/avatar.tsx"
75
+ },
76
+ {
77
+ "source": "assets/avatars/avatar-01.jpg",
78
+ "target": "{{ui}}/assets/avatars/avatar-01.jpg"
79
+ }
80
+ ],
81
+ "examples": ["examples/avatar-demo.tsx"]
82
+ },
83
+ "badge": {
84
+ "description": "Figma Badge primitive with light, outline, and solid styles, semantic accent colors, dot, flag, icon, numeric, and RTL-safe composition.",
85
+ "dependencies": {
86
+ "@radix-ui/react-slot": "^1.2.3",
87
+ "class-variance-authority": "^0.7.1"
88
+ },
89
+ "parts": ["Badge"],
90
+ "styles": ["light", "outline", "solid"],
91
+ "colors": [
92
+ "neutral",
93
+ "blue",
94
+ "green",
95
+ "amber",
96
+ "danger",
97
+ "purple",
98
+ "fuchsia",
99
+ "rose",
100
+ "sky",
101
+ "golden"
102
+ ],
103
+ "types": ["default", "leading-icon", "trailing-icon", "dot", "flag"],
104
+ "sizes": ["sm", "lg"],
105
+ "rtl": {
106
+ "inheritsDirection": true,
107
+ "iconPlacement": "Set type=\"leading-icon\" or type=\"trailing-icon\" and use data-icon=\"inline-start\" or data-icon=\"inline-end\".",
108
+ "directionalIconFlip": "Use data-rtl-flip=\"true\" on arrows that should mirror.",
109
+ "textDirection": "Uses dir=\"auto\" by default for short Arabic and English labels.",
110
+ "legacyVariants": "The previous variant prop is still accepted as a compatibility shim."
111
+ },
112
+ "files": [
113
+ {
114
+ "source": "components/badge.tsx",
115
+ "target": "{{ui}}/badge.tsx"
116
+ }
117
+ ],
118
+ "examples": ["examples/badge-demo.tsx"]
119
+ },
120
+ "tag": {
121
+ "description": "Figma Tag primitive with simple, dot, flag, avatar, and icon types, default/active/disabled states plus native hover and focus-visible styling, xs/md/lg sizes, optional close button, and RTL-safe composition.",
122
+ "dependencies": {
123
+ "@radix-ui/react-slot": "^1.2.3",
124
+ "class-variance-authority": "^0.7.1",
125
+ "lucide-react": "^1.17.0"
126
+ },
127
+ "parts": [
128
+ "Tag",
129
+ "TagDot",
130
+ "TagFlag",
131
+ "TagAvatar",
132
+ "TagIcon",
133
+ "TagCloseButton"
134
+ ],
135
+ "types": ["simple", "dot", "flag", "avatar", "icon"],
136
+ "states": ["default", "active", "disabled"],
137
+ "sizes": ["xs", "md", "lg"],
138
+ "rtl": {
139
+ "inheritsDirection": true,
140
+ "spacing": "Uses logical inline padding and inherited flex direction so the leading media, label, and close button mirror naturally.",
141
+ "textDirection": "Text labels use dir=\"auto\" for short Arabic and English tag labels.",
142
+ "closeButton": "The close affordance is a 16px token-sized icon button using currentColor and the tag disabled state."
143
+ },
144
+ "files": [
145
+ {
146
+ "source": "components/tag.tsx",
147
+ "target": "{{ui}}/tag.tsx"
148
+ }
149
+ ],
150
+ "examples": ["examples/tag-demo.tsx"]
151
+ },
152
+ "attribute": {
153
+ "description": "Figma Attribute Card primitive for semantic description lists, key-value rows, detail cards, status values, copyable values, loading rows, two-column summaries, and RTL-safe layouts.",
154
+ "dependencies": {
155
+ "class-variance-authority": "^0.7.1"
156
+ },
157
+ "parts": [
158
+ "AttributeCard",
159
+ "AttributeHeader",
160
+ "AttributeList",
161
+ "AttributeItem",
162
+ "AttributeLabel",
163
+ "AttributeValue"
164
+ ],
165
+ "layouts": ["inline", "end", "stacked", "two-column"],
166
+ "densities": ["compact", "default", "comfortable"],
167
+ "rtl": {
168
+ "inheritsDirection": true,
169
+ "layout": "Uses logical text alignment and inherited direction so label and value columns mirror naturally.",
170
+ "textDirection": "String labels and values use dir=\"auto\" wrappers while custom slots can control their own direction.",
171
+ "composition": "Rows accept ReactNode values, so badges, buttons, links, progress bars, skeletons, files, and custom content can be composed from existing Banhaten primitives."
172
+ },
173
+ "files": [
174
+ {
175
+ "source": "components/attribute.tsx",
176
+ "target": "{{ui}}/attribute.tsx"
177
+ }
178
+ ],
179
+ "examples": ["examples/attribute-demo.tsx"]
180
+ },
181
+ "button": {
182
+ "description": "Accessible button primitive with semantic variants, size scale, loading composition, and RTL-safe icon behavior.",
183
+ "dependencies": {
184
+ "@radix-ui/react-slot": "^1.2.3",
185
+ "class-variance-authority": "^0.7.1"
186
+ },
187
+ "variants": [
188
+ "default",
189
+ "secondary",
190
+ "soft",
191
+ "outline",
192
+ "ghost",
193
+ "ghost-primary",
194
+ "danger",
195
+ "soft-danger",
196
+ "white"
197
+ ],
198
+ "sizes": [
199
+ "xs",
200
+ "sm",
201
+ "default",
202
+ "lg",
203
+ "icon-xs",
204
+ "icon-sm",
205
+ "icon",
206
+ "icon-lg"
207
+ ],
208
+ "rtl": {
209
+ "inheritsDirection": true,
210
+ "iconPlacement": "Use data-icon=\"inline-start\" or data-icon=\"inline-end\".",
211
+ "directionalIconFlip": "Use data-rtl-flip=\"true\" on arrows and chevrons that should mirror in RTL."
212
+ },
213
+ "files": [
214
+ {
215
+ "source": "components/button.tsx",
216
+ "target": "{{ui}}/button.tsx"
217
+ },
218
+ {
219
+ "source": "components/spinner.tsx",
220
+ "target": "{{ui}}/spinner.tsx"
221
+ }
222
+ ],
223
+ "examples": ["examples/button-demo.tsx"]
224
+ },
225
+ "card": {
226
+ "description": "Token-built card primitive with vertical and horizontal image layouts, full-image treatment, desktop/mobile spacing, Button-composed footer actions, and RTL-safe copy.",
227
+ "dependencies": {
228
+ "class-variance-authority": "^0.7.1",
229
+ "lucide-react": "^1.17.0"
230
+ },
231
+ "registryDependencies": ["button"],
232
+ "parts": ["Card", "CardMedia", "CardFooter", "CardActions"],
233
+ "orientations": ["vertical", "horizontal"],
234
+ "types": ["leading-image", "trailing-image", "full-image"],
235
+ "breakpoints": ["desktop", "mobile"],
236
+ "rtl": {
237
+ "inheritsDirection": true,
238
+ "spacing": "Uses logical direction, text-start behavior, and dir=\"auto\" copy so title, subtitle, description, footer actions, and menu affordance mirror naturally.",
239
+ "actions": "The default footer composes the existing Button primitive and keeps action order logical in LTR and RTL."
240
+ },
241
+ "files": [
242
+ {
243
+ "source": "components/card.tsx",
244
+ "target": "{{ui}}/card.tsx"
245
+ },
246
+ {
247
+ "source": "assets/images/art-01.jpg",
248
+ "target": "{{ui}}/assets/images/art-01.jpg"
249
+ }
250
+ ],
251
+ "examples": ["examples/card-demo.tsx"]
252
+ },
253
+ "button-group": {
254
+ "description": "Connected Button Group primitive with seven-item default and icon-only layouts, md/sm/xs size scale, reusable surface shadow, dividers, RTL-safe content spacing, native hover/focus/pressed styling, and active/disabled states.",
255
+ "dependencies": {
256
+ "@radix-ui/react-slot": "^1.2.3",
257
+ "class-variance-authority": "^0.7.1"
258
+ },
259
+ "parts": ["ButtonGroup", "ButtonGroupItem"],
260
+ "modes": ["default", "iconOnly"],
261
+ "sizes": ["md", "sm", "xs"],
262
+ "rtl": {
263
+ "inheritsDirection": true,
264
+ "itemSizing": "LTR and RTL default items keep their fixed Figma matrix widths. Icon-only groups keep the same square dimensions.",
265
+ "spacing": "Uses logical dividers and inherited flex direction so item order, icon order, padding, and separators follow LTR or RTL."
266
+ },
267
+ "files": [
268
+ {
269
+ "source": "components/button-group.tsx",
270
+ "target": "{{ui}}/button-group.tsx"
271
+ }
272
+ ],
273
+ "examples": ["examples/button-group-demo.tsx"]
274
+ },
275
+ "toggle": {
276
+ "description": "Radix Switch-backed toggle primitive and labeled field composition with sm/md geometry, active and disabled states, optional handle icons, tokenized focus ring, and RTL-safe label placement.",
277
+ "dependencies": {
278
+ "@radix-ui/react-switch": "^1.3.0",
279
+ "class-variance-authority": "^0.7.1"
280
+ },
281
+ "parts": ["Toggle", "ToggleField"],
282
+ "sizes": ["sm", "md"],
283
+ "states": ["unchecked", "checked", "hover", "focused", "disabled"],
284
+ "features": ["optional handle icons", "leading label", "trailing label", "supporting text"],
285
+ "rtl": {
286
+ "inheritsDirection": true,
287
+ "controlPlacement": "ToggleField uses start/end control placement so the switch and text order mirror in RTL.",
288
+ "handleMotion": "The thumb translates with logical direction, so checked state moves to the visual end edge in LTR and RTL.",
289
+ "textDirection": "Labels and descriptions use dir=\"auto\" with tokenized body-md/body-xs typography."
290
+ },
291
+ "files": [
292
+ {
293
+ "source": "components/toggle.tsx",
294
+ "target": "{{ui}}/toggle.tsx"
295
+ }
296
+ ],
297
+ "examples": ["examples/toggle-demo.tsx"]
298
+ },
299
+ "menu": {
300
+ "description": "Radix DropdownMenu-backed, Figma-matched menu surface and composable menu item slots for default, multiline, call-to-action, progress, divider, button, label, caption, badge, switch, avatar, meta text, and RTL layouts.",
301
+ "dependencies": {
302
+ "@radix-ui/react-dropdown-menu": "^2.1.17",
303
+ "@radix-ui/react-slot": "^1.2.3",
304
+ "class-variance-authority": "^0.7.1"
305
+ },
306
+ "parts": [
307
+ "Menu",
308
+ "MenuRoot",
309
+ "MenuTrigger",
310
+ "MenuContent",
311
+ "MenuPortal",
312
+ "MenuItem",
313
+ "MenuItemContent",
314
+ "MenuItemIcon",
315
+ "MenuItemAvatar",
316
+ "MenuItemText",
317
+ "MenuItemTitle",
318
+ "MenuItemDescription",
319
+ "MenuItemMeta",
320
+ "MenuItemBadge",
321
+ "MenuItemSwitch",
322
+ "MenuItemAction",
323
+ "MenuProgress",
324
+ "MenuSeparator",
325
+ "MenuLabel",
326
+ "MenuCaption"
327
+ ],
328
+ "widths": ["menu", "default", "multiline", "action", "auto"],
329
+ "itemKinds": ["default", "multiline", "action", "progress", "button"],
330
+ "states": ["default", "disabled"],
331
+ "rtl": {
332
+ "inheritsDirection": true,
333
+ "spacing": "Uses logical padding and flex direction so leading, trailing, badge, switch, right text, and action slots mirror naturally.",
334
+ "directionalIconFlip": "Use data-rtl-flip=\"true\" on chevrons and arrows that should mirror.",
335
+ "textDirection": "Text slots use dir=\"auto\" by default for Arabic and English labels."
336
+ },
337
+ "files": [
338
+ {
339
+ "source": "components/menu.tsx",
340
+ "target": "{{ui}}/menu.tsx"
341
+ }
342
+ ],
343
+ "examples": ["examples/menu-demo.tsx"]
344
+ },
345
+ "tooltip": {
346
+ "description": "Radix Tooltip-backed primitive with Figma-matched dark and default surfaces, small and large sizes, shortcut and close slots, logical pointer positions, tokenized shadows, and RTL-safe layout.",
347
+ "dependencies": {
348
+ "@radix-ui/react-tooltip": "^1.2.9",
349
+ "class-variance-authority": "^0.7.1",
350
+ "lucide-react": "^1.17.0"
351
+ },
352
+ "parts": [
353
+ "Tooltip",
354
+ "TooltipRoot",
355
+ "TooltipTrigger",
356
+ "TooltipContent",
357
+ "TooltipProvider",
358
+ "TooltipPortal",
359
+ "TooltipShortcut",
360
+ "TooltipCloseButton"
361
+ ],
362
+ "variants": ["dark", "default"],
363
+ "sizes": ["sm", "lg"],
364
+ "pointerPositions": [
365
+ "top-left",
366
+ "top-center",
367
+ "top-right",
368
+ "bottom-left",
369
+ "bottom-center",
370
+ "bottom-right",
371
+ "center-right",
372
+ "center-left",
373
+ "none"
374
+ ],
375
+ "rtl": {
376
+ "inheritsDirection": true,
377
+ "spacing": "Uses inherited direction with flex layout so label/shortcut and text/close order mirror naturally.",
378
+ "pointerPlacement": "Top and bottom left/right positions map to logical start/end in RTL. Center-left and center-right remain physical sides to match the Figma matrix.",
379
+ "textDirection": "Labels and support text use dir=\"auto\" for Arabic and English copy."
380
+ },
381
+ "files": [
382
+ {
383
+ "source": "components/tooltip.tsx",
384
+ "target": "{{ui}}/tooltip.tsx"
385
+ }
386
+ ],
387
+ "examples": ["examples/tooltip-demo.tsx"]
388
+ },
389
+ "modal": {
390
+ "description": "Radix Dialog-backed modal primitive with Figma Small, Default, and Large sizes, tokenized raised surface, header/body/footer slots, ConfirmModal guardrails, Button actions, Checkbox opt-out, and RTL-safe layout.",
391
+ "dependencies": {
392
+ "@radix-ui/react-dialog": "^1.1.16",
393
+ "class-variance-authority": "^0.7.1",
394
+ "lucide-react": "^1.17.0"
395
+ },
396
+ "registryDependencies": ["button", "checkbox", "spinner"],
397
+ "parts": [
398
+ "Modal",
399
+ "ConfirmModal",
400
+ "ModalRoot",
401
+ "ModalTrigger",
402
+ "ModalContent",
403
+ "ModalPortal",
404
+ "ModalOverlay",
405
+ "ModalHeader",
406
+ "ModalHeaderIcon",
407
+ "ModalTitle",
408
+ "ModalDescription",
409
+ "ModalBody",
410
+ "ModalDivider",
411
+ "ModalFooter",
412
+ "ModalFooterCheckbox",
413
+ "ModalActions",
414
+ "ModalActionButton",
415
+ "ModalClose",
416
+ "ModalCloseButton",
417
+ "ModalSurface"
418
+ ],
419
+ "intents": ["default", "warning", "danger"],
420
+ "sizes": ["sm", "default", "lg"],
421
+ "rtl": {
422
+ "inheritsDirection": true,
423
+ "closePlacement": "Close uses logical inline-end placement so it moves to the left side in RTL.",
424
+ "footerOrder": "The checkbox and action cluster use inherited direction and logical gaps so their order mirrors naturally.",
425
+ "textDirection": "Title, description, checkbox label, confirm labels, and actions use dir=\"auto\" for Arabic and English copy."
426
+ },
427
+ "files": [
428
+ {
429
+ "source": "components/modal.tsx",
430
+ "target": "{{ui}}/modal.tsx"
431
+ }
432
+ ],
433
+ "examples": ["examples/modal-demo.tsx"]
434
+ },
435
+ "checkbox": {
436
+ "description": "Figma-matched checkbox primitive and checkbox card composition with 20px root, 16px control, selected and disabled states, native hover styling, component shadow, body text styles, and RTL-safe layout.",
437
+ "dependencies": {
438
+ "@radix-ui/react-checkbox": "^1.3.3",
439
+ "class-variance-authority": "^0.7.1"
440
+ },
441
+ "parts": ["Checkbox", "CheckboxCard"],
442
+ "states": ["unchecked", "checked", "indeterminate", "selected", "disabled"],
443
+ "cardPositions": ["start", "end"],
444
+ "rtl": {
445
+ "inheritsDirection": true,
446
+ "controlPlacement": "The card uses start/end control placement so the checkbox mirrors correctly in RTL.",
447
+ "textDirection": "Labels and descriptions use dir=\"auto\" and tokenized body-md/body-sm typography."
448
+ },
449
+ "files": [
450
+ {
451
+ "source": "components/checkbox.tsx",
452
+ "target": "{{ui}}/checkbox.tsx"
453
+ }
454
+ ],
455
+ "examples": ["examples/checkbox-demo.tsx"]
456
+ },
457
+ "radio-group": {
458
+ "description": "Native-input radio primitive and group composition with field rows, group label, description, error and disabled states, horizontal and vertical layouts, controlled or uncontrolled value, and RTL-safe tokenized copy.",
459
+ "dependencies": {
460
+ "class-variance-authority": "^0.7.1"
461
+ },
462
+ "parts": ["Radio", "RadioField", "RadioGroup", "RadioGroupItem"],
463
+ "orientations": ["vertical", "horizontal"],
464
+ "states": ["default", "error", "disabled"],
465
+ "controlPositions": ["start", "end"],
466
+ "rtl": {
467
+ "inheritsDirection": true,
468
+ "controlPlacement": "RadioField and RadioGroupItem use start/end control placement so the radio mirrors correctly in RTL.",
469
+ "textDirection": "Group labels, item labels, descriptions, and error text use dir=\"auto\" with tokenized body typography.",
470
+ "semantics": "Uses native radio inputs with a shared group name, fieldset grouping, and label wrapping for platform keyboard and form behavior."
471
+ },
472
+ "files": [
473
+ {
474
+ "source": "components/radio-group.tsx",
475
+ "target": "{{ui}}/radio-group.tsx"
476
+ }
477
+ ],
478
+ "examples": ["examples/radio-group-demo.tsx"]
479
+ },
480
+ "radio-card": {
481
+ "description": "Figma Radio Card component with seven content types, default/active/disabled states, native hover styling, RTL variants, system radio indicator, and token-bound spacing, typography, border, and shadow.",
482
+ "dependencies": {
483
+ "class-variance-authority": "^0.7.1"
484
+ },
485
+ "parts": ["RadioCard"],
486
+ "types": [
487
+ "with-icon",
488
+ "icon-radio-right",
489
+ "payment",
490
+ "with-avatar",
491
+ "company-icon",
492
+ "icon-radio-left",
493
+ "radio-label"
494
+ ],
495
+ "states": ["default", "active", "disabled"],
496
+ "rtl": {
497
+ "inheritsDirection": false,
498
+ "layout": "Uses the explicit Figma RTL physical order while text nodes use RTL direction and right alignment.",
499
+ "spacing": "Company icon and icon-radio-left RTL variants use the Figma 12px card gap; other variants use the 10px card gap."
500
+ },
501
+ "files": [
502
+ {
503
+ "source": "components/radio-card.tsx",
504
+ "target": "{{ui}}/radio-card.tsx"
505
+ }
506
+ ],
507
+ "examples": ["examples/radio-card-demo.tsx"]
508
+ },
509
+ "divider": {
510
+ "description": "Figma-matched divider primitive with horizontal and vertical directions plus solid and dotted types.",
511
+ "dependencies": {
512
+ "class-variance-authority": "^0.7.1"
513
+ },
514
+ "parts": ["Divider"],
515
+ "directions": ["horizontal", "vertical"],
516
+ "types": ["solid", "dotted"],
517
+ "rtl": {
518
+ "inheritsDirection": false,
519
+ "geometry": "Direction maps to component orientation, not document text direction."
520
+ },
521
+ "files": [
522
+ {
523
+ "source": "components/divider.tsx",
524
+ "target": "{{ui}}/divider.tsx"
525
+ }
526
+ ],
527
+ "examples": ["examples/divider-demo.tsx"]
528
+ },
529
+ "pagination": {
530
+ "description": "Figma-matched pagination primitive with numeric, simple, and summary layouts, soft and ghost styles, exact 32px controls, caption variants, and RTL labels.",
531
+ "dependencies": {
532
+ "class-variance-authority": "^0.7.1"
533
+ },
534
+ "parts": ["Pagination"],
535
+ "types": ["numeric", "simple", "summary"],
536
+ "variants": ["soft", "ghost"],
537
+ "rtl": {
538
+ "inheritsDirection": true,
539
+ "labels": "Defaults to Arabic labels when dir=\"rtl\" is provided or the document direction is RTL.",
540
+ "directionalIconFlip": "Inline Figma arrow vectors use data-rtl-flip=\"true\" so previous and next controls mirror in RTL.",
541
+ "spacing": "Uses logical flex direction, gap, and text direction so English and Arabic captions align naturally."
542
+ },
543
+ "files": [
544
+ {
545
+ "source": "components/pagination.tsx",
546
+ "target": "{{ui}}/pagination.tsx"
547
+ }
548
+ ],
549
+ "examples": ["examples/pagination-demo.tsx"]
550
+ },
551
+ "toolbar": {
552
+ "description": "Figma Filter Toolbar primitive with eight filter/action styles, search fields, select triggers, icon actions, chips, selected-count badges, desktop/mobile wrapping, and RTL-safe composition.",
553
+ "dependencies": {
554
+ "@radix-ui/react-slot": "^1.2.3",
555
+ "class-variance-authority": "^0.7.1",
556
+ "lucide-react": "^1.17.0"
557
+ },
558
+ "parts": [
559
+ "Toolbar",
560
+ "ToolbarSection",
561
+ "ToolbarSearch",
562
+ "ToolbarSelect",
563
+ "ToolbarButton",
564
+ "ToolbarIconButton",
565
+ "ToolbarFilterButton",
566
+ "ToolbarMoreButton",
567
+ "ToolbarBadge",
568
+ "ToolbarText",
569
+ "ToolbarSpacer"
570
+ ],
571
+ "styles": [
572
+ "filter-fields",
573
+ "filter-actions",
574
+ "selection-actions",
575
+ "grouped-fields",
576
+ "field-grid",
577
+ "inline-search",
578
+ "filter-chips",
579
+ "saved-segment"
580
+ ],
581
+ "layouts": ["inline", "split", "stack", "wrap"],
582
+ "breakpoints": ["desktop", "mobile"],
583
+ "rtl": {
584
+ "inheritsDirection": true,
585
+ "textAlignment": "Uses logical section layout and dir=\"auto\" labels so mixed English and Arabic filter text aligns naturally.",
586
+ "spacing": "Uses tokenized flex gaps and logical icon attributes so search, fields, chips, summaries, and actions mirror without alternate APIs."
587
+ },
588
+ "files": [
589
+ {
590
+ "source": "components/toolbar.tsx",
591
+ "target": "{{ui}}/toolbar.tsx"
592
+ }
593
+ ],
594
+ "examples": ["examples/toolbar-demo.tsx"]
595
+ },
596
+ "social-button": {
597
+ "description": "Social sign-in button primitive with Figma-matched platform styles, solid and outlined variants, icon-only mode, native focus-visible styling, and RTL labels.",
598
+ "dependencies": {
599
+ "@radix-ui/react-slot": "^1.2.3",
600
+ "class-variance-authority": "^0.7.1"
601
+ },
602
+ "parts": ["SocialButton"],
603
+ "platforms": [
604
+ "apple",
605
+ "facebook",
606
+ "google",
607
+ "linkedin",
608
+ "twitter",
609
+ "whatsapp"
610
+ ],
611
+ "variants": ["solid", "outline"],
612
+ "sizes": ["default", "icon"],
613
+ "rtl": {
614
+ "inheritsDirection": true,
615
+ "labels": "Defaults to the Arabic platform label when the document direction is RTL, and accepts an explicit label for nested RTL surfaces.",
616
+ "spacing": "Uses logical label padding and flex gap so the icon/label order follows inherited direction."
617
+ },
618
+ "files": [
619
+ {
620
+ "source": "components/social-button.tsx",
621
+ "target": "{{ui}}/social-button.tsx"
622
+ }
623
+ ],
624
+ "examples": ["examples/social-button-demo.tsx"]
625
+ },
626
+ "input": {
627
+ "description": "Figma-matched input field with labels, helper and error text, add-ons, shortcuts, tags, dropdown/button/quantity adornments, default and soft styles, md/lg sizes, and RTL states.",
628
+ "dependencies": {
629
+ "class-variance-authority": "^0.7.1"
630
+ },
631
+ "parts": ["Input"],
632
+ "kinds": [
633
+ "default",
634
+ "shortcut",
635
+ "add-on",
636
+ "inline-add-on",
637
+ "tags",
638
+ "inline-tags",
639
+ "trailing-dropdown",
640
+ "leading-dropdown",
641
+ "quantity",
642
+ "quantity-2",
643
+ "trailing-button",
644
+ "leading-button"
645
+ ],
646
+ "variants": ["default", "soft"],
647
+ "sizes": ["md", "lg"],
648
+ "states": ["default", "filled", "error", "disabled"],
649
+ "rtl": {
650
+ "inheritsDirection": true,
651
+ "textAlignment": "Uses text-start and dir=\"auto\" so Arabic and English labels, values, add-ons, tags, and helper text align naturally.",
652
+ "spacing": "Uses logical start/end borders and inherited direction so leading and trailing segments mirror in RTL."
653
+ },
654
+ "files": [
655
+ {
656
+ "source": "components/input-content.ts",
657
+ "target": "{{ui}}/input-content.ts"
658
+ },
659
+ {
660
+ "source": "components/input.tsx",
661
+ "target": "{{ui}}/input.tsx"
662
+ }
663
+ ],
664
+ "examples": ["examples/input-demo.tsx"]
665
+ },
666
+ "select": {
667
+ "description": "Radix Select-backed, Figma-matched select field and menu item primitives with default and soft trigger styles, lg/md sizes, error/filled/disabled states, menu surface, checkbox and check selection, and item media for text, icons, avatars, flags, company, payment, and status dots.",
668
+ "dependencies": {
669
+ "@radix-ui/react-select": "^2.3.0",
670
+ "class-variance-authority": "^0.7.1"
671
+ },
672
+ "parts": [
673
+ "Select",
674
+ "SelectRoot",
675
+ "SelectLabel",
676
+ "SelectTrigger",
677
+ "SelectHelperText",
678
+ "SelectMenu",
679
+ "SelectMenuItem",
680
+ "SelectCheckboxIndicator",
681
+ "SelectItemAvatar",
682
+ "SelectItemFlag",
683
+ "SelectItemCompanyLogo",
684
+ "SelectItemPaymentIcon",
685
+ "SelectItemStatusDot"
686
+ ],
687
+ "variants": ["default", "soft"],
688
+ "sizes": ["lg", "md"],
689
+ "states": ["default", "filled", "error", "disabled"],
690
+ "itemTypes": [
691
+ "default",
692
+ "icon",
693
+ "avatar",
694
+ "flag",
695
+ "company",
696
+ "payment",
697
+ "dot"
698
+ ],
699
+ "selectionTypes": ["default", "checkbox"],
700
+ "rtl": {
701
+ "inheritsDirection": true,
702
+ "textAlignment": "Uses text-start and dir=\"auto\" for values, labels, helper text, and menu item text.",
703
+ "spacing": "Uses logical padding, start/end positioning, and inherited flex direction so trigger icons and selected checks mirror in RTL."
704
+ },
705
+ "files": [
706
+ {
707
+ "source": "components/select-content.tsx",
708
+ "target": "{{ui}}/select-content.tsx"
709
+ },
710
+ {
711
+ "source": "components/select.tsx",
712
+ "target": "{{ui}}/select.tsx"
713
+ }
714
+ ],
715
+ "examples": ["examples/select-demo.tsx"]
716
+ },
717
+ "date-picker": {
718
+ "description": "Figma-matched Calendar, Range Calendar, Date Picker, and Date Range Picker suite with single, month/year, double calendar, preset list, open/closed, time row, range selection, and RTL use cases.",
719
+ "dependencies": {
720
+ "class-variance-authority": "^0.7.1",
721
+ "lucide-react": "^1.17.0"
722
+ },
723
+ "parts": [
724
+ "Calendar",
725
+ "RangeCalendar",
726
+ "DatePicker",
727
+ "DateRangePicker",
728
+ "DatePickerTrigger"
729
+ ],
730
+ "modes": [
731
+ "single-calendar",
732
+ "single-month-year",
733
+ "double-calendar",
734
+ "double-calendar-with-presets",
735
+ "single-range-calendar",
736
+ "date-picker",
737
+ "date-range-picker"
738
+ ],
739
+ "states": ["open", "closed"],
740
+ "rtl": {
741
+ "inheritsDirection": true,
742
+ "triggerLayout": "The trigger uses inherited direction so the calendar icon and value mirror naturally.",
743
+ "calendarLayout": "Calendar headers, range presets, date cells, and time rows use logical borders, spacing, and text alignment for LTR and RTL surfaces.",
744
+ "rangeSelection": "Range fill uses logical start/end rounding for week edges and keeps selected endpoints tokenized with brand colors."
745
+ },
746
+ "files": [
747
+ {
748
+ "source": "components/date-picker.tsx",
749
+ "target": "{{ui}}/date-picker.tsx"
750
+ }
751
+ ],
752
+ "examples": ["examples/date-picker-demo.tsx"]
753
+ },
754
+ "slider": {
755
+ "description": "Figma-matched accessible range control built on Radix Slider with single and double-node values, text and tooltip indicators, RTL, vertical, disabled, ticked, tone, size, pill, and keyboard-ready states.",
756
+ "dependencies": {
757
+ "@radix-ui/react-slider": "^1.4.0",
758
+ "class-variance-authority": "^0.7.1"
759
+ },
760
+ "parts": ["Slider"],
761
+ "sizes": ["sm", "default", "lg"],
762
+ "tones": ["brand", "neutral", "success", "warning", "danger"],
763
+ "states": ["default", "disabled"],
764
+ "valueModes": ["single", "range", "multi-thumb"],
765
+ "indicators": [
766
+ "none",
767
+ "lower-text",
768
+ "upper-text",
769
+ "lower-tooltip",
770
+ "upper-tooltip"
771
+ ],
772
+ "features": [
773
+ "ticks",
774
+ "text indicators",
775
+ "tooltip indicators",
776
+ "thumb grip",
777
+ "pill variant",
778
+ "vertical orientation"
779
+ ],
780
+ "rtl": {
781
+ "inheritsDirection": true,
782
+ "valueDirection": "Radix Slider handles direction and keyboard behavior through the inherited dir attribute.",
783
+ "spacing": "Uses logical thumb content spacing and tokenized track/thumb geometry."
784
+ },
785
+ "files": [
786
+ {
787
+ "source": "components/slider.tsx",
788
+ "target": "{{ui}}/slider.tsx"
789
+ }
790
+ ],
791
+ "examples": ["examples/slider-demo.tsx"]
792
+ },
793
+ "progress": {
794
+ "description": "Read-only progress meter with Figma-matched value fill, sm/lg track sizes, top/bottom/helper/inline label compositions, tokenized indicator colors, helper text, info icon, spinner, and RTL-safe start anchoring.",
795
+ "dependencies": {
796
+ "class-variance-authority": "^0.7.1",
797
+ "lucide-react": "^1.17.0"
798
+ },
799
+ "parts": ["Progress"],
800
+ "sizes": ["sm", "lg"],
801
+ "labelPositions": ["top", "bottom", "none", "inline"],
802
+ "features": [
803
+ "progressbar semantics",
804
+ "helper text",
805
+ "optional label text",
806
+ "info icon",
807
+ "spinner indicator",
808
+ "logical start fill"
809
+ ],
810
+ "rtl": {
811
+ "inheritsDirection": true,
812
+ "valueDirection": "The fill is anchored with logical start positioning, so LTR fills from left and RTL fills from right.",
813
+ "spacing": "Label, optional text, indicator, and helper copy use inherited direction, logical text alignment, and tokenized gaps."
814
+ },
815
+ "files": [
816
+ {
817
+ "source": "components/progress.tsx",
818
+ "target": "{{ui}}/progress.tsx"
819
+ }
820
+ ],
821
+ "examples": ["examples/progress-demo.tsx"]
822
+ },
823
+ "progress-slider": {
824
+ "description": "Start-anchored progress slider built on Radix Slider where the filled surface grows from the start edge and the grip handle stays on the trailing edge.",
825
+ "dependencies": {
826
+ "@radix-ui/react-slider": "^1.4.0",
827
+ "class-variance-authority": "^0.7.1"
828
+ },
829
+ "parts": ["ProgressSlider"],
830
+ "sizes": ["default", "lg"],
831
+ "tones": ["brand", "neutral", "success", "warning", "danger"],
832
+ "states": ["default", "disabled"],
833
+ "features": ["start-anchored fill", "grip handle", "ticks"],
834
+ "rtl": {
835
+ "inheritsDirection": true,
836
+ "valueDirection": "Radix Slider handles direction and keyboard behavior through the inherited dir attribute; the fill stays anchored to the logical start edge.",
837
+ "spacing": "Uses tokenized pill geometry and logical direction through Radix."
838
+ },
839
+ "files": [
840
+ {
841
+ "source": "components/progress-slider.tsx",
842
+ "target": "{{ui}}/progress-slider.tsx"
843
+ }
844
+ ],
845
+ "examples": ["examples/progress-slider-demo.tsx"]
846
+ },
847
+ "textarea": {
848
+ "description": "Figma-matched textarea field with label, helper and error text, default and tags modes, placeholder, filled, disabled, and RTL states.",
849
+ "dependencies": {
850
+ "class-variance-authority": "^0.7.1"
851
+ },
852
+ "parts": ["Textarea"],
853
+ "modes": ["default", "tags"],
854
+ "states": ["placeholder", "filled", "disabled"],
855
+ "rtl": {
856
+ "inheritsDirection": true,
857
+ "textAlignment": "Uses text-start and dir=\"auto\" so Arabic and English content align naturally.",
858
+ "spacing": "Uses inherited direction and flex order so labels, helper icons, and tag chips mirror without physical left/right rules."
859
+ },
860
+ "files": [
861
+ {
862
+ "source": "components/textarea.tsx",
863
+ "target": "{{ui}}/textarea.tsx"
864
+ }
865
+ ],
866
+ "examples": ["examples/textarea-demo.tsx"]
867
+ },
868
+ "spinner": {
869
+ "description": "Small composable loading spinner for buttons and inline feedback.",
870
+ "dependencies": {},
871
+ "files": [
872
+ {
873
+ "source": "components/spinner.tsx",
874
+ "target": "{{ui}}/spinner.tsx"
875
+ }
876
+ ]
877
+ },
878
+ "activity-feed": {
879
+ "description": "Expanded activity feed composition with avatar indicators, status dots, captions, action buttons, slot rows, timestamps, links, and RTL copy.",
880
+ "status": "expanded",
881
+ "dependencies": {},
882
+ "parts": ["ActivityFeed", "ActivityFeedItem"],
883
+ "files": [
884
+ {
885
+ "source": "components/expanded/activityFeed.css",
886
+ "target": "{{ui}}/expanded/activityFeed.css"
887
+ },
888
+ {
889
+ "source": "components/expanded/ActivityFeed.tsx",
890
+ "target": "{{ui}}/expanded/ActivityFeed.tsx"
891
+ },
892
+ {
893
+ "source": "assets/activity-feed-avatar.png",
894
+ "target": "{{ui}}/assets/activity-feed-avatar.png"
895
+ }
896
+ ],
897
+ "examples": ["examples/expanded/activity-feed-demo.tsx"]
898
+ },
899
+ "alert": {
900
+ "description": "Contextual feedback primitive with danger, success, warning, info, neutral, compact, expandable, action, close, and RTL variants.",
901
+ "dependencies": {
902
+ "class-variance-authority": "^0.7.1"
903
+ },
904
+ "parts": ["Alert"],
905
+ "variants": ["danger", "success", "warning", "info", "neutral"],
906
+ "rtl": {
907
+ "inheritsDirection": false,
908
+ "textAlignment": "Uses dir=\"auto\" on title and description while the root dir prop mirrors icon, action, and close placement.",
909
+ "spacing": "Uses flexbox, gap, and logical direction so compact and expandable RTL layouts match the Figma matrix."
910
+ },
911
+ "files": [
912
+ {
913
+ "source": "components/alert.tsx",
914
+ "target": "{{ui}}/alert.tsx"
915
+ }
916
+ ],
917
+ "examples": ["examples/alert-demo.tsx"]
918
+ },
919
+ "banner": {
920
+ "description": "Expanded banner system with slim, inline action, single action, input, floating, full-width, brand, grey, brand-light, and RTL variants.",
921
+ "status": "expanded",
922
+ "dependencies": {},
923
+ "parts": ["Banner", "BannerBoard"],
924
+ "files": [
925
+ {
926
+ "source": "components/expanded/banner.css",
927
+ "target": "{{ui}}/expanded/banner.css"
928
+ },
929
+ {
930
+ "source": "components/expanded/Banner.tsx",
931
+ "target": "{{ui}}/expanded/Banner.tsx"
932
+ },
933
+ {
934
+ "source": "components/expanded/BannerBoard.tsx",
935
+ "target": "{{ui}}/expanded/BannerBoard.tsx"
936
+ }
937
+ ],
938
+ "examples": ["examples/expanded/banner-demo.tsx"]
939
+ },
940
+ "catalog-components": {
941
+ "description": "Expanded catalog showcase with breadcrumbs, catalog-only content dividers, catalog tag previews, file upload states, and table previews.",
942
+ "status": "expanded",
943
+ "dependencies": {},
944
+ "parts": [
945
+ "Breadcrumbs",
946
+ "CatalogContentDivider",
947
+ "CatalogDivider",
948
+ "CatalogComponentsShowcase",
949
+ "CatalogTag",
950
+ "FileUpload",
951
+ "Table"
952
+ ],
953
+ "files": [
954
+ {
955
+ "source": "components/expanded/breadcrumbs.css",
956
+ "target": "{{ui}}/expanded/breadcrumbs.css"
957
+ },
958
+ {
959
+ "source": "components/expanded/Breadcrumbs.tsx",
960
+ "target": "{{ui}}/expanded/Breadcrumbs.tsx"
961
+ },
962
+ {
963
+ "source": "components/expanded/catalogComponentsShowcase.css",
964
+ "target": "{{ui}}/expanded/catalogComponentsShowcase.css"
965
+ },
966
+ {
967
+ "source": "components/expanded/CatalogComponentsShowcase.tsx",
968
+ "target": "{{ui}}/expanded/CatalogComponentsShowcase.tsx"
969
+ },
970
+ {
971
+ "source": "components/expanded/divider.css",
972
+ "target": "{{ui}}/expanded/divider.css"
973
+ },
974
+ {
975
+ "source": "components/expanded/CatalogDivider.tsx",
976
+ "target": "{{ui}}/expanded/CatalogDivider.tsx"
977
+ },
978
+ {
979
+ "source": "components/expanded/fileUpload.css",
980
+ "target": "{{ui}}/expanded/fileUpload.css"
981
+ },
982
+ {
983
+ "source": "components/expanded/FileUpload.tsx",
984
+ "target": "{{ui}}/expanded/FileUpload.tsx"
985
+ },
986
+ {
987
+ "source": "components/expanded/table.css",
988
+ "target": "{{ui}}/expanded/table.css"
989
+ },
990
+ {
991
+ "source": "components/expanded/Table.tsx",
992
+ "target": "{{ui}}/expanded/Table.tsx"
993
+ },
994
+ {
995
+ "source": "components/expanded/tag.css",
996
+ "target": "{{ui}}/expanded/tag.css"
997
+ },
998
+ {
999
+ "source": "components/expanded/CatalogTag.tsx",
1000
+ "target": "{{ui}}/expanded/CatalogTag.tsx"
1001
+ }
1002
+ ],
1003
+ "examples": ["examples/expanded/catalog-components-demo.tsx"]
1004
+ },
1005
+ "breadcrumbs": {
1006
+ "description": "Expanded breadcrumbs navigation with default, raised, icon, overflow, separator, and RTL variants.",
1007
+ "status": "expanded",
1008
+ "dependencies": {},
1009
+ "parts": ["Breadcrumbs"],
1010
+ "files": [
1011
+ {
1012
+ "source": "components/expanded/breadcrumbs.css",
1013
+ "target": "{{ui}}/expanded/breadcrumbs.css"
1014
+ },
1015
+ {
1016
+ "source": "components/expanded/Breadcrumbs.tsx",
1017
+ "target": "{{ui}}/expanded/Breadcrumbs.tsx"
1018
+ }
1019
+ ],
1020
+ "examples": ["examples/expanded/catalog-components-demo.tsx"]
1021
+ },
1022
+ "file-upload": {
1023
+ "description": "Expanded file upload composition with drag-and-drop zones, file rows, upload states, disabled behavior, and RTL direction.",
1024
+ "status": "expanded",
1025
+ "dependencies": {},
1026
+ "parts": ["FileUpload"],
1027
+ "files": [
1028
+ {
1029
+ "source": "components/expanded/fileUpload.css",
1030
+ "target": "{{ui}}/expanded/fileUpload.css"
1031
+ },
1032
+ {
1033
+ "source": "components/expanded/FileUpload.tsx",
1034
+ "target": "{{ui}}/expanded/FileUpload.tsx"
1035
+ }
1036
+ ],
1037
+ "examples": ["examples/expanded/catalog-components-demo.tsx"]
1038
+ },
1039
+ "table": {
1040
+ "description": "Expanded table and data table composition with selection, stateful sortable headers, search, filters, bulk actions, pagination, empty/loading/error states, status badges, progress cells, actions, row states, and RTL mirroring.",
1041
+ "status": "expanded",
1042
+ "dependencies": {},
1043
+ "registryDependencies": ["toolbar", "pagination", "spinner"],
1044
+ "parts": ["Table", "DataTable"],
1045
+ "files": [
1046
+ {
1047
+ "source": "components/expanded/table.css",
1048
+ "target": "{{ui}}/expanded/table.css"
1049
+ },
1050
+ {
1051
+ "source": "components/expanded/Table.tsx",
1052
+ "target": "{{ui}}/expanded/Table.tsx"
1053
+ }
1054
+ ],
1055
+ "examples": ["examples/expanded/catalog-components-demo.tsx"]
1056
+ },
1057
+ "command-bar": {
1058
+ "description": "Expanded command bar composition for default, recent, results, and empty command-palette states across desktop, mobile, LTR, and RTL.",
1059
+ "status": "expanded",
1060
+ "dependencies": {},
1061
+ "parts": ["CommandBar"],
1062
+ "files": [
1063
+ {
1064
+ "source": "components/expanded/commandBar.css",
1065
+ "target": "{{ui}}/expanded/commandBar.css"
1066
+ },
1067
+ {
1068
+ "source": "components/expanded/CommandBar.tsx",
1069
+ "target": "{{ui}}/expanded/CommandBar.tsx"
1070
+ }
1071
+ ],
1072
+ "examples": ["examples/expanded/command-bar-demo.tsx"]
1073
+ },
1074
+ "icons": {
1075
+ "description": "Expanded icon explorer for open-source icon pack review, semantic mapping, shortlist comparison, and Iconify catalog inspection.",
1076
+ "status": "expanded",
1077
+ "dependencies": {},
1078
+ "parts": ["IconExplorer"],
1079
+ "runtime": {
1080
+ "externalScripts": ["https://code.iconify.design/iconify-icon/3.0.0/iconify-icon.min.js"],
1081
+ "externalApis": ["https://api.iconify.design"]
1082
+ },
1083
+ "files": [
1084
+ {
1085
+ "source": "components/expanded/iconExplorer.css",
1086
+ "target": "{{ui}}/expanded/iconExplorer.css"
1087
+ },
1088
+ {
1089
+ "source": "components/expanded/iconPacks.ts",
1090
+ "target": "{{ui}}/expanded/iconPacks.ts"
1091
+ },
1092
+ {
1093
+ "source": "components/expanded/IconExplorer.tsx",
1094
+ "target": "{{ui}}/expanded/IconExplorer.tsx"
1095
+ }
1096
+ ],
1097
+ "examples": ["examples/expanded/icons-demo.tsx"]
1098
+ },
1099
+ "onboarding-step": {
1100
+ "description": "Expanded onboarding step list item with finished, active, and inactive progress states for compact setup flows in LTR and RTL.",
1101
+ "status": "expanded",
1102
+ "dependencies": {},
1103
+ "parts": ["OnboardingStepListItem"],
1104
+ "files": [
1105
+ {
1106
+ "source": "components/expanded/onboardingStepListItem.css",
1107
+ "target": "{{ui}}/expanded/onboardingStepListItem.css"
1108
+ },
1109
+ {
1110
+ "source": "components/expanded/OnboardingStepListItem.tsx",
1111
+ "target": "{{ui}}/expanded/OnboardingStepListItem.tsx"
1112
+ }
1113
+ ],
1114
+ "examples": ["examples/expanded/onboarding-step-demo.tsx"]
1115
+ },
1116
+ "page-header": {
1117
+ "description": "Expanded page header composition with breadcrumbs, metadata, description copy, action groups, responsive layout, and optional local tabs.",
1118
+ "status": "expanded",
1119
+ "dependencies": {},
1120
+ "registryDependencies": ["tabs"],
1121
+ "parts": ["PageHeader"],
1122
+ "files": [
1123
+ {
1124
+ "source": "components/expanded/pageHeader.css",
1125
+ "target": "{{ui}}/expanded/pageHeader.css"
1126
+ },
1127
+ {
1128
+ "source": "components/expanded/PageHeader.tsx",
1129
+ "target": "{{ui}}/expanded/PageHeader.tsx"
1130
+ }
1131
+ ],
1132
+ "examples": ["examples/expanded/page-header-demo.tsx"]
1133
+ },
1134
+ "slideout": {
1135
+ "description": "Expanded slideout panel with desktop and mobile breakpoints, header and footer actions, slotted content, and RTL coverage.",
1136
+ "status": "expanded",
1137
+ "dependencies": {},
1138
+ "parts": [
1139
+ "Slideout",
1140
+ "SlideoutFiltersExample",
1141
+ "SlideoutPaymentDetailExample",
1142
+ "SlideoutPaymentFormExample",
1143
+ "SlideoutUserProfileExample"
1144
+ ],
1145
+ "files": [
1146
+ {
1147
+ "source": "components/expanded/slideout.css",
1148
+ "target": "{{ui}}/expanded/slideout.css"
1149
+ },
1150
+ {
1151
+ "source": "components/expanded/Slideout.tsx",
1152
+ "target": "{{ui}}/expanded/Slideout.tsx"
1153
+ }
1154
+ ],
1155
+ "examples": ["examples/expanded/slideout-demo.tsx"]
1156
+ },
1157
+ "steps": {
1158
+ "description": "Expanded steps composition with horizontal and vertical progress indicators, icon markers, number markers, item alignment, and RTL layouts.",
1159
+ "status": "expanded",
1160
+ "dependencies": {},
1161
+ "parts": ["HorizontalStepItem", "Steps", "VerticalStepItem"],
1162
+ "files": [
1163
+ {
1164
+ "source": "components/expanded/steps.css",
1165
+ "target": "{{ui}}/expanded/steps.css"
1166
+ },
1167
+ {
1168
+ "source": "components/expanded/Steps.tsx",
1169
+ "target": "{{ui}}/expanded/Steps.tsx"
1170
+ }
1171
+ ],
1172
+ "examples": ["examples/expanded/steps-demo.tsx"]
1173
+ },
1174
+ "tabs": {
1175
+ "description": "Expanded tabs composition with underline, segmented, and rounded treatments across size, width behavior, controlled state, LTR, and RTL.",
1176
+ "status": "expanded",
1177
+ "dependencies": {},
1178
+ "parts": ["Tabs"],
1179
+ "files": [
1180
+ {
1181
+ "source": "components/expanded/tabs.css",
1182
+ "target": "{{ui}}/expanded/tabs.css"
1183
+ },
1184
+ {
1185
+ "source": "components/expanded/Tabs.tsx",
1186
+ "target": "{{ui}}/expanded/Tabs.tsx"
1187
+ }
1188
+ ],
1189
+ "examples": ["examples/expanded/tabs-demo.tsx"]
1190
+ },
1191
+ "timeline": {
1192
+ "description": "Expanded timeline composition with vertical and horizontal orientations, dates, captions, active states, finished states, item variants, and RTL layouts.",
1193
+ "status": "expanded",
1194
+ "dependencies": {},
1195
+ "parts": ["Timeline", "TimelineItem", "TimelineShowcase"],
1196
+ "files": [
1197
+ {
1198
+ "source": "components/expanded/timeline.css",
1199
+ "target": "{{ui}}/expanded/timeline.css"
1200
+ },
1201
+ {
1202
+ "source": "components/expanded/Timeline.tsx",
1203
+ "target": "{{ui}}/expanded/Timeline.tsx"
1204
+ },
1205
+ {
1206
+ "source": "components/expanded/TimelineShowcase.tsx",
1207
+ "target": "{{ui}}/expanded/TimelineShowcase.tsx"
1208
+ }
1209
+ ],
1210
+ "examples": ["examples/expanded/timeline-demo.tsx"]
1211
+ }
1212
+ }
1213
+ }