@expokit/cli 0.0.0-stage → 0.3.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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -2
  3. package/bin/expo-kit.js +1266 -0
  4. package/bin/lib.mjs +343 -0
  5. package/bin/mcp.mjs +345 -0
  6. package/package.json +49 -4
  7. package/registry/_docs/accordion.json +115 -0
  8. package/registry/_docs/action-sheet.json +138 -0
  9. package/registry/_docs/alert.json +155 -0
  10. package/registry/_docs/avatar.json +227 -0
  11. package/registry/_docs/badge.json +148 -0
  12. package/registry/_docs/bottom-nav.json +143 -0
  13. package/registry/_docs/bottom-sheet.json +186 -0
  14. package/registry/_docs/bullet.json +27 -0
  15. package/registry/_docs/button-3d.json +138 -0
  16. package/registry/_docs/button.json +131 -0
  17. package/registry/_docs/calendar.json +198 -0
  18. package/registry/_docs/card-stack.json +124 -0
  19. package/registry/_docs/card.json +131 -0
  20. package/registry/_docs/carousel.json +122 -0
  21. package/registry/_docs/chat.json +184 -0
  22. package/registry/_docs/checkbox.json +109 -0
  23. package/registry/_docs/checkout.json +105 -0
  24. package/registry/_docs/chip-group.json +132 -0
  25. package/registry/_docs/color-swatch.json +82 -0
  26. package/registry/_docs/confetti.json +102 -0
  27. package/registry/_docs/coupon.json +192 -0
  28. package/registry/_docs/cube-pager.json +100 -0
  29. package/registry/_docs/dashboard.json +123 -0
  30. package/registry/_docs/date-picker.json +269 -0
  31. package/registry/_docs/dialog.json +186 -0
  32. package/registry/_docs/drawer.json +199 -0
  33. package/registry/_docs/fab.json +144 -0
  34. package/registry/_docs/flip-card.json +127 -0
  35. package/registry/_docs/floating-input.json +211 -0
  36. package/registry/_docs/gift-card.json +124 -0
  37. package/registry/_docs/glass-button.json +142 -0
  38. package/registry/_docs/glass-nav-bar.json +102 -0
  39. package/registry/_docs/glass-search-bar.json +114 -0
  40. package/registry/_docs/glass-segmented.json +94 -0
  41. package/registry/_docs/glass-sheet.json +136 -0
  42. package/registry/_docs/glass-tab-bar.json +100 -0
  43. package/registry/_docs/glass.json +94 -0
  44. package/registry/_docs/inbox.json +75 -0
  45. package/registry/_docs/isometric-bar.json +75 -0
  46. package/registry/_docs/kit.json +14 -0
  47. package/registry/_docs/kpi-card.json +14 -0
  48. package/registry/_docs/like-button.json +92 -0
  49. package/registry/_docs/liquidglass-tab.json +30 -0
  50. package/registry/_docs/list-item.json +216 -0
  51. package/registry/_docs/loyalty-card.json +124 -0
  52. package/registry/_docs/morph-button.json +128 -0
  53. package/registry/_docs/number-ticker.json +112 -0
  54. package/registry/_docs/offers.json +81 -0
  55. package/registry/_docs/onboarding.json +69 -0
  56. package/registry/_docs/otp-input.json +158 -0
  57. package/registry/_docs/pagination-dots.json +108 -0
  58. package/registry/_docs/parallax-layers.json +104 -0
  59. package/registry/_docs/parallax-scroll.json +210 -0
  60. package/registry/_docs/password-input.json +112 -0
  61. package/registry/_docs/payment-card.json +169 -0
  62. package/registry/_docs/pixel-bar.json +69 -0
  63. package/registry/_docs/polar-area.json +81 -0
  64. package/registry/_docs/profile.json +87 -0
  65. package/registry/_docs/progress-steps.json +116 -0
  66. package/registry/_docs/progress.json +152 -0
  67. package/registry/_docs/radio-group.json +112 -0
  68. package/registry/_docs/rating.json +114 -0
  69. package/registry/_docs/ring-carousel.json +122 -0
  70. package/registry/_docs/scratch-card.json +110 -0
  71. package/registry/_docs/search-bar.json +160 -0
  72. package/registry/_docs/search-results.json +123 -0
  73. package/registry/_docs/segmented-control.json +123 -0
  74. package/registry/_docs/select.json +277 -0
  75. package/registry/_docs/settings.json +75 -0
  76. package/registry/_docs/shimmer-button.json +98 -0
  77. package/registry/_docs/sign-in.json +201 -0
  78. package/registry/_docs/skeleton.json +162 -0
  79. package/registry/_docs/slide-to-confirm.json +108 -0
  80. package/registry/_docs/slider.json +177 -0
  81. package/registry/_docs/spin-wheel.json +138 -0
  82. package/registry/_docs/spinner.json +121 -0
  83. package/registry/_docs/stateful-button.json +184 -0
  84. package/registry/_docs/stepper.json +184 -0
  85. package/registry/_docs/swipe-deck.json +118 -0
  86. package/registry/_docs/swipeable-row.json +95 -0
  87. package/registry/_docs/switch.json +124 -0
  88. package/registry/_docs/tabs.json +129 -0
  89. package/registry/_docs/tag-input.json +148 -0
  90. package/registry/_docs/text-animation.json +141 -0
  91. package/registry/_docs/textarea.json +191 -0
  92. package/registry/_docs/ticket-card.json +194 -0
  93. package/registry/_docs/ticket-shape.json +14 -0
  94. package/registry/_docs/tilt-card.json +157 -0
  95. package/registry/_docs/time-picker.json +269 -0
  96. package/registry/_docs/timeline-chart.json +33 -0
  97. package/registry/_docs/timeline.json +172 -0
  98. package/registry/_docs/toast.json +185 -0
  99. package/registry/_docs/treemap.json +33 -0
  100. package/registry/_docs/waterfall.json +39 -0
  101. package/registry/_docs/wheel-list.json +122 -0
  102. package/registry/accordion/files/src/components/ui/accordion.tsx +233 -0
  103. package/registry/accordion/files/src/lib/kit.tsx +219 -0
  104. package/registry/accordion.json +17 -0
  105. package/registry/action-sheet/files/src/components/ui/action-sheet.tsx +580 -0
  106. package/registry/action-sheet/files/src/lib/kit.tsx +219 -0
  107. package/registry/action-sheet.json +18 -0
  108. package/registry/alert/files/src/components/ui/alert.tsx +654 -0
  109. package/registry/alert/files/src/components/ui/button.tsx +274 -0
  110. package/registry/alert/files/src/lib/kit.tsx +219 -0
  111. package/registry/alert.json +20 -0
  112. package/registry/avatar/files/src/components/ui/avatar.tsx +790 -0
  113. package/registry/avatar/files/src/lib/kit.tsx +219 -0
  114. package/registry/avatar.json +18 -0
  115. package/registry/badge/files/src/components/ui/badge.tsx +626 -0
  116. package/registry/badge/files/src/lib/kit.tsx +219 -0
  117. package/registry/badge.json +17 -0
  118. package/registry/bottom-nav/files/src/components/ui/bottom-nav.tsx +1050 -0
  119. package/registry/bottom-nav/files/src/lib/kit.tsx +219 -0
  120. package/registry/bottom-nav.json +18 -0
  121. package/registry/bottom-sheet/files/src/components/ui/bottom-sheet.tsx +585 -0
  122. package/registry/bottom-sheet/files/src/lib/kit.tsx +219 -0
  123. package/registry/bottom-sheet.json +17 -0
  124. package/registry/bullet.json +14 -0
  125. package/registry/button/files/src/components/ui/button.tsx +274 -0
  126. package/registry/button/files/src/lib/kit.tsx +219 -0
  127. package/registry/button-3d/files/src/components/ui/button-3d.tsx +212 -0
  128. package/registry/button-3d/files/src/lib/kit.tsx +219 -0
  129. package/registry/button-3d.json +18 -0
  130. package/registry/button.json +18 -0
  131. package/registry/calendar/files/src/components/ui/calendar.tsx +822 -0
  132. package/registry/calendar/files/src/lib/kit.tsx +219 -0
  133. package/registry/calendar.json +17 -0
  134. package/registry/card/files/src/components/ui/card.tsx +300 -0
  135. package/registry/card/files/src/lib/kit.tsx +219 -0
  136. package/registry/card-stack.json +15 -0
  137. package/registry/card.json +17 -0
  138. package/registry/carousel.json +15 -0
  139. package/registry/chat.json +18 -0
  140. package/registry/checkbox/files/src/components/ui/checkbox.tsx +150 -0
  141. package/registry/checkbox/files/src/lib/kit.tsx +219 -0
  142. package/registry/checkbox.json +17 -0
  143. package/registry/checkout.json +26 -0
  144. package/registry/chip-group/files/src/components/ui/chip-group.tsx +269 -0
  145. package/registry/chip-group/files/src/lib/kit.tsx +219 -0
  146. package/registry/chip-group.json +17 -0
  147. package/registry/color-swatch.json +17 -0
  148. package/registry/confetti/files/src/components/ui/confetti.tsx +222 -0
  149. package/registry/confetti/files/src/lib/kit.tsx +219 -0
  150. package/registry/confetti.json +15 -0
  151. package/registry/coupon/files/src/components/ui/coupon.tsx +698 -0
  152. package/registry/coupon/files/src/components/ui/flip-card.tsx +205 -0
  153. package/registry/coupon/files/src/components/ui/tilt-card.tsx +635 -0
  154. package/registry/coupon/files/src/lib/kit.tsx +219 -0
  155. package/registry/coupon/files/src/lib/ticket-shape.tsx +543 -0
  156. package/registry/coupon.json +23 -0
  157. package/registry/cube-pager.json +15 -0
  158. package/registry/dashboard.json +32 -0
  159. package/registry/date-picker/files/src/components/ui/calendar.tsx +822 -0
  160. package/registry/date-picker/files/src/components/ui/date-picker.tsx +796 -0
  161. package/registry/date-picker/files/src/lib/kit.tsx +219 -0
  162. package/registry/date-picker.json +19 -0
  163. package/registry/dialog/files/src/components/ui/dialog.tsx +759 -0
  164. package/registry/dialog/files/src/lib/kit.tsx +219 -0
  165. package/registry/dialog.json +18 -0
  166. package/registry/drawer/files/src/components/ui/drawer.tsx +1135 -0
  167. package/registry/drawer/files/src/lib/kit.tsx +219 -0
  168. package/registry/drawer.json +18 -0
  169. package/registry/fab.json +18 -0
  170. package/registry/flip-card/files/src/components/ui/flip-card.tsx +205 -0
  171. package/registry/flip-card/files/src/lib/kit.tsx +219 -0
  172. package/registry/flip-card.json +15 -0
  173. package/registry/floating-input/files/src/components/ui/floating-input.tsx +528 -0
  174. package/registry/floating-input/files/src/lib/kit.tsx +219 -0
  175. package/registry/floating-input.json +17 -0
  176. package/registry/gift-card.json +21 -0
  177. package/registry/glass-button.json +22 -0
  178. package/registry/glass-nav-bar.json +21 -0
  179. package/registry/glass-search-bar.json +21 -0
  180. package/registry/glass-segmented.json +22 -0
  181. package/registry/glass-sheet.json +22 -0
  182. package/registry/glass-tab-bar.json +22 -0
  183. package/registry/glass.json +19 -0
  184. package/registry/inbox.json +30 -0
  185. package/registry/isometric-bar.json +14 -0
  186. package/registry/kit/files/src/lib/kit.tsx +219 -0
  187. package/registry/kit.json +11 -0
  188. package/registry/kpi-card/files/src/components/charts/kpi-card.tsx +45 -0
  189. package/registry/kpi-card.json +14 -0
  190. package/registry/like-button.json +18 -0
  191. package/registry/liquidglass-tab/files/src/app/(tabs)/_layout.tsx +97 -0
  192. package/registry/liquidglass-tab/files/src/app/(tabs)/alerts.tsx +5 -0
  193. package/registry/liquidglass-tab/files/src/app/(tabs)/explore.tsx +5 -0
  194. package/registry/liquidglass-tab/files/src/app/(tabs)/index.tsx +5 -0
  195. package/registry/liquidglass-tab/files/src/app/(tabs)/profile.tsx +5 -0
  196. package/registry/liquidglass-tab/files/src/app/_layout.tsx +33 -0
  197. package/registry/liquidglass-tab/files/src/components/GlassTabBar.tsx +259 -0
  198. package/registry/liquidglass-tab/files/src/components/TabScreen.tsx +122 -0
  199. package/registry/liquidglass-tab/files/src/lib/tab-bar.ts +61 -0
  200. package/registry/liquidglass-tab/files/src/lib/tab-icons.ts +130 -0
  201. package/registry/liquidglass-tab/files/src/lib/tabs.ts +108 -0
  202. package/registry/liquidglass-tab.json +23 -0
  203. package/registry/list-item/files/src/components/ui/list-item.tsx +508 -0
  204. package/registry/list-item/files/src/lib/kit.tsx +219 -0
  205. package/registry/list-item.json +17 -0
  206. package/registry/loyalty-card.json +23 -0
  207. package/registry/morph-button.json +18 -0
  208. package/registry/number-ticker.json +15 -0
  209. package/registry/offers.json +24 -0
  210. package/registry/onboarding.json +17 -0
  211. package/registry/otp-input/files/src/components/ui/otp-input.tsx +380 -0
  212. package/registry/otp-input/files/src/lib/kit.tsx +219 -0
  213. package/registry/otp-input.json +17 -0
  214. package/registry/pagination-dots/files/src/components/ui/pagination-dots.tsx +262 -0
  215. package/registry/pagination-dots/files/src/lib/kit.tsx +219 -0
  216. package/registry/pagination-dots.json +15 -0
  217. package/registry/parallax-layers.json +15 -0
  218. package/registry/parallax-scroll.json +17 -0
  219. package/registry/password-input/files/src/components/ui/floating-input.tsx +528 -0
  220. package/registry/password-input/files/src/components/ui/password-input.tsx +271 -0
  221. package/registry/password-input/files/src/lib/kit.tsx +219 -0
  222. package/registry/password-input.json +19 -0
  223. package/registry/payment-card/files/src/components/ui/flip-card.tsx +205 -0
  224. package/registry/payment-card/files/src/components/ui/payment-card.tsx +385 -0
  225. package/registry/payment-card/files/src/components/ui/tilt-card.tsx +635 -0
  226. package/registry/payment-card/files/src/lib/kit.tsx +219 -0
  227. package/registry/payment-card.json +21 -0
  228. package/registry/pixel-bar.json +14 -0
  229. package/registry/polar-area.json +14 -0
  230. package/registry/profile.json +17 -0
  231. package/registry/progress/files/src/components/ui/progress.tsx +883 -0
  232. package/registry/progress/files/src/lib/kit.tsx +219 -0
  233. package/registry/progress-steps/files/src/components/ui/progress-steps.tsx +559 -0
  234. package/registry/progress-steps/files/src/lib/kit.tsx +219 -0
  235. package/registry/progress-steps.json +18 -0
  236. package/registry/progress.json +17 -0
  237. package/registry/radio-group/files/src/components/ui/radio-group.tsx +327 -0
  238. package/registry/radio-group/files/src/lib/kit.tsx +219 -0
  239. package/registry/radio-group.json +18 -0
  240. package/registry/rating.json +18 -0
  241. package/registry/ring-carousel.json +15 -0
  242. package/registry/scratch-card.json +18 -0
  243. package/registry/search-bar/files/src/components/ui/search-bar.tsx +530 -0
  244. package/registry/search-bar/files/src/lib/kit.tsx +219 -0
  245. package/registry/search-bar.json +17 -0
  246. package/registry/search-results.json +30 -0
  247. package/registry/segmented-control/files/src/components/ui/segmented-control.tsx +341 -0
  248. package/registry/segmented-control/files/src/lib/kit.tsx +219 -0
  249. package/registry/segmented-control.json +18 -0
  250. package/registry/select/files/src/components/ui/select.tsx +1398 -0
  251. package/registry/select/files/src/lib/kit.tsx +219 -0
  252. package/registry/select.json +17 -0
  253. package/registry/settings.json +26 -0
  254. package/registry/shimmer-button.json +17 -0
  255. package/registry/sign-in.json +26 -0
  256. package/registry/skeleton/files/src/components/ui/skeleton.tsx +799 -0
  257. package/registry/skeleton/files/src/lib/kit.tsx +219 -0
  258. package/registry/skeleton.json +17 -0
  259. package/registry/slide-to-confirm.json +18 -0
  260. package/registry/slider/files/src/components/ui/slider.tsx +716 -0
  261. package/registry/slider/files/src/lib/kit.tsx +219 -0
  262. package/registry/slider.json +17 -0
  263. package/registry/spin-wheel.json +18 -0
  264. package/registry/spinner/files/src/components/ui/spinner.tsx +748 -0
  265. package/registry/spinner/files/src/lib/kit.tsx +219 -0
  266. package/registry/spinner.json +17 -0
  267. package/registry/stateful-button/files/src/components/ui/stateful-button.tsx +532 -0
  268. package/registry/stateful-button/files/src/lib/kit.tsx +219 -0
  269. package/registry/stateful-button.json +18 -0
  270. package/registry/stepper/files/src/components/ui/stepper.tsx +646 -0
  271. package/registry/stepper/files/src/lib/kit.tsx +219 -0
  272. package/registry/stepper.json +17 -0
  273. package/registry/swipe-deck.json +15 -0
  274. package/registry/swipeable-row.json +15 -0
  275. package/registry/switch/files/src/components/ui/switch.tsx +344 -0
  276. package/registry/switch/files/src/lib/kit.tsx +219 -0
  277. package/registry/switch.json +18 -0
  278. package/registry/tabs/files/src/components/ui/tabs.tsx +539 -0
  279. package/registry/tabs/files/src/lib/kit.tsx +219 -0
  280. package/registry/tabs.json +17 -0
  281. package/registry/tag-input/files/src/components/ui/tag-input.tsx +720 -0
  282. package/registry/tag-input/files/src/lib/kit.tsx +219 -0
  283. package/registry/tag-input.json +17 -0
  284. package/registry/text-animation/files/src/components/ui/text-animation.tsx +650 -0
  285. package/registry/text-animation/files/src/lib/kit.tsx +219 -0
  286. package/registry/text-animation.json +15 -0
  287. package/registry/textarea/files/src/components/ui/textarea.tsx +553 -0
  288. package/registry/textarea/files/src/lib/kit.tsx +219 -0
  289. package/registry/textarea.json +17 -0
  290. package/registry/ticket-card.json +24 -0
  291. package/registry/ticket-shape/files/src/lib/kit.tsx +219 -0
  292. package/registry/ticket-shape/files/src/lib/ticket-shape.tsx +543 -0
  293. package/registry/ticket-shape.json +17 -0
  294. package/registry/tilt-card/files/src/components/ui/tilt-card.tsx +635 -0
  295. package/registry/tilt-card/files/src/lib/kit.tsx +219 -0
  296. package/registry/tilt-card.json +17 -0
  297. package/registry/time-picker/files/src/components/ui/time-picker.tsx +1159 -0
  298. package/registry/time-picker/files/src/lib/kit.tsx +219 -0
  299. package/registry/time-picker.json +17 -0
  300. package/registry/timeline/files/src/components/ui/avatar.tsx +790 -0
  301. package/registry/timeline/files/src/components/ui/timeline.tsx +1059 -0
  302. package/registry/timeline/files/src/lib/kit.tsx +219 -0
  303. package/registry/timeline-chart.json +14 -0
  304. package/registry/timeline.json +20 -0
  305. package/registry/toast/files/src/components/ui/button.tsx +274 -0
  306. package/registry/toast/files/src/components/ui/toast.tsx +1284 -0
  307. package/registry/toast/files/src/lib/kit.tsx +219 -0
  308. package/registry/toast.json +20 -0
  309. package/registry/treemap.json +14 -0
  310. package/registry/waterfall.json +14 -0
  311. package/registry/wheel-list.json +17 -0
  312. package/schema/components.schema.json +13 -0
@@ -0,0 +1,122 @@
1
+ {
2
+ "name": "ring-carousel",
3
+ "category": "3D",
4
+ "aliases": [],
5
+ "exportName": "RingCarousel",
6
+ "files": [
7
+ "src/components/ui/ring-carousel.tsx"
8
+ ],
9
+ "summary": "Cards on a 3D ring you spin with a swipe; it snaps and loops forever.",
10
+ "props": [
11
+ [
12
+ "data",
13
+ "T[]",
14
+ "—",
15
+ "Items, one card each."
16
+ ],
17
+ [
18
+ "renderItem",
19
+ "({ item, index, active }) => ReactNode",
20
+ "—",
21
+ "Render a card. `active` is true for the card facing you."
22
+ ],
23
+ [
24
+ "keyExtractor",
25
+ "(item: T, index: number) => string",
26
+ "index",
27
+ "React key for each card."
28
+ ],
29
+ [
30
+ "itemWidth",
31
+ "number",
32
+ "170",
33
+ "Card width."
34
+ ],
35
+ [
36
+ "itemHeight",
37
+ "number",
38
+ "230",
39
+ "Card height."
40
+ ],
41
+ [
42
+ "spacing",
43
+ "number",
44
+ "360 / count (≤ 45)",
45
+ "Degrees between neighbours."
46
+ ],
47
+ [
48
+ "autoplay",
49
+ "boolean | number",
50
+ "false",
51
+ "Turn every 3s (or N ms); pauses while touched."
52
+ ],
53
+ [
54
+ "index",
55
+ "number",
56
+ "—",
57
+ "Controlled front card."
58
+ ],
59
+ [
60
+ "defaultIndex",
61
+ "number",
62
+ "0",
63
+ "Uncontrolled initial front card."
64
+ ],
65
+ [
66
+ "onIndexChange",
67
+ "(index: number) => void",
68
+ "—",
69
+ "Fires when the front card changes."
70
+ ],
71
+ [
72
+ "onPress",
73
+ "(item: T, index: number) => void",
74
+ "—",
75
+ "Tap on the front card."
76
+ ],
77
+ [
78
+ "pagination",
79
+ "boolean",
80
+ "true",
81
+ "Dots under the ring."
82
+ ],
83
+ [
84
+ "accent",
85
+ "string",
86
+ "theme foreground",
87
+ "Active dot colour."
88
+ ],
89
+ [
90
+ "radius",
91
+ "number",
92
+ "18",
93
+ "Corner radius of each card."
94
+ ],
95
+ [
96
+ "style",
97
+ "StyleProp<ViewStyle>",
98
+ "—",
99
+ "Style for the root view."
100
+ ]
101
+ ],
102
+ "behavior": [
103
+ [
104
+ "Touch",
105
+ "Horizontal drags spin the ring and a flick carries it a little further before snapping. Tapping a side card turns to it; tapping the front card calls onPress."
106
+ ],
107
+ [
108
+ "Motion",
109
+ "Neighbours turn, shrink and fall into shadow as they go round the back. With autoplay it advances every 3s by default and pauses while touched."
110
+ ],
111
+ [
112
+ "Screen readers",
113
+ "The ring is one adjustable element ('2 / 7'): swipe up or down to turn it, double-tap to press the front card. Side cards are hidden."
114
+ ],
115
+ [
116
+ "Platforms",
117
+ "The loop runs on the native driver via Animated.modulo. Each card turns in its own flat layer so iOS never slices a side card into the front one."
118
+ ]
119
+ ],
120
+ "usage": null,
121
+ "examples": []
122
+ }
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "scratch-card",
3
+ "category": "Coupons",
4
+ "aliases": [],
5
+ "exportName": "ScratchCard",
6
+ "files": [
7
+ "src/components/ui/scratch-card.tsx"
8
+ ],
9
+ "summary": "Rub a shimmering foil away; past a threshold the rest clears with a haptic tap.",
10
+ "props": [
11
+ [
12
+ "children",
13
+ "ReactNode",
14
+ "—",
15
+ "The reward underneath; it sets the card's size."
16
+ ],
17
+ [
18
+ "foil",
19
+ "\"silver\" | \"gold\" | \"holo\" | \"rose\" | \"midnight\" | { colors, ink }",
20
+ "\"silver\"",
21
+ "Foil look."
22
+ ],
23
+ [
24
+ "label / sublabel",
25
+ "string",
26
+ "\"Scratch to reveal\" / —",
27
+ "Printed on the foil."
28
+ ],
29
+ [
30
+ "threshold",
31
+ "number",
32
+ "0.55",
33
+ "Share of the foil to scratch before the rest clears."
34
+ ],
35
+ [
36
+ "brushSize",
37
+ "number",
38
+ "22",
39
+ "Brush radius in points."
40
+ ],
41
+ [
42
+ "radius",
43
+ "number",
44
+ "20",
45
+ "Corner radius of the foil."
46
+ ],
47
+ [
48
+ "revealed",
49
+ "boolean",
50
+ "—",
51
+ "Controlled: true shows the reward, false puts the foil back."
52
+ ],
53
+ [
54
+ "disabled",
55
+ "boolean",
56
+ "false",
57
+ "Turn scratching off."
58
+ ],
59
+ [
60
+ "onScratchStart / onScratchEnd",
61
+ "() => void",
62
+ "—",
63
+ "Finger down / up — e.g. pause a parent ScrollView."
64
+ ],
65
+ [
66
+ "onProgress",
67
+ "(fraction) => void",
68
+ "—",
69
+ "0 … 1 while scratching."
70
+ ],
71
+ [
72
+ "onReveal",
73
+ "() => void",
74
+ "—",
75
+ "Once, when the foil clears."
76
+ ],
77
+ [
78
+ "ref",
79
+ "{ reveal(), reset() }",
80
+ "—",
81
+ "Clear the foil, or put a fresh one on."
82
+ ],
83
+ [
84
+ "style",
85
+ "StyleProp<ViewStyle>",
86
+ "—",
87
+ "Width, margins."
88
+ ]
89
+ ],
90
+ "behavior": [
91
+ [
92
+ "Touch",
93
+ "Your finger scratches the foil away with a round brush, and once threshold of it is gone the rest clears by itself. The card keeps the touch, so a parent ScrollView cannot steal it mid-rub."
94
+ ],
95
+ [
96
+ "Motion",
97
+ "A light band sweeps across the foil until the first touch. On reveal the foil fades out while scaling up slightly."
98
+ ],
99
+ [
100
+ "Haptics",
101
+ "A success notification plays when the foil clears."
102
+ ],
103
+ [
104
+ "Screen readers",
105
+ "The foil is a button labelled with label and sublabel, with the hint 'Double-tap to reveal'."
106
+ ]
107
+ ],
108
+ "usage": null,
109
+ "examples": []
110
+ }
@@ -0,0 +1,160 @@
1
+ {
2
+ "name": "search-bar",
3
+ "category": "Inputs",
4
+ "aliases": [],
5
+ "exportName": "SearchBar",
6
+ "files": [
7
+ "src/components/ui/search-bar.tsx"
8
+ ],
9
+ "summary": "Focus pops the magnifier and springs in Cancel; suggestions drop down below.",
10
+ "props": [
11
+ [
12
+ "variant",
13
+ "\"default\" | \"filled\" | \"minimal\"",
14
+ "\"default\"",
15
+ "Outlined pill, iOS grey field, or a round icon that expands into a field."
16
+ ],
17
+ [
18
+ "size",
19
+ "\"sm\" | \"md\" | \"lg\"",
20
+ "\"md\"",
21
+ "34 / 44 / 56pt tall; font, icons, padding and radius scale too."
22
+ ],
23
+ [
24
+ "value / defaultValue / onChangeText",
25
+ "string",
26
+ "—",
27
+ "Controlled or uncontrolled query."
28
+ ],
29
+ [
30
+ "loading",
31
+ "boolean",
32
+ "false",
33
+ "Crossfades the magnifier into a spinning arc."
34
+ ],
35
+ [
36
+ "showCancel",
37
+ "boolean",
38
+ "true (false for minimal)",
39
+ "Slide a Cancel button in while searching."
40
+ ],
41
+ [
42
+ "cancelLabel",
43
+ "string",
44
+ "\"Cancel\"",
45
+ "Cancel button text."
46
+ ],
47
+ [
48
+ "onCancel",
49
+ "() => void",
50
+ "—",
51
+ "After Cancel clears the query and blurs."
52
+ ],
53
+ [
54
+ "onClear",
55
+ "() => void",
56
+ "—",
57
+ "After the clear button empties the query."
58
+ ],
59
+ [
60
+ "align",
61
+ "\"left\" | \"right\"",
62
+ "\"left\"",
63
+ "Minimal only: where the collapsed icon rests."
64
+ ],
65
+ [
66
+ "suggestions",
67
+ "{ key, label, hint?, icon?: 'recent' | 'trending' | 'search' }[]",
68
+ "—",
69
+ "Shown in a dropdown panel while focused; the matching text is bolded."
70
+ ],
71
+ [
72
+ "onSelectSuggestion",
73
+ "(item) => void",
74
+ "—",
75
+ "Called after a suggestion is picked (the query is set to its label)."
76
+ ],
77
+ [
78
+ "filterSuggestions",
79
+ "boolean",
80
+ "true",
81
+ "Filter suggestions by the query. Turn off to filter them yourself."
82
+ ],
83
+ [
84
+ "maxSuggestions",
85
+ "number",
86
+ "6",
87
+ "Most rows shown in the panel."
88
+ ],
89
+ [
90
+ "trailing",
91
+ "ReactNode",
92
+ "—",
93
+ "Rendered inside the field on the right, e.g. a filter or mic button."
94
+ ],
95
+ [
96
+ "accent",
97
+ "string",
98
+ "theme accent",
99
+ "Focus ring, caret and Cancel colour."
100
+ ],
101
+ [
102
+ "style",
103
+ "StyleProp<ViewStyle>",
104
+ "—",
105
+ "Style for the root view around the field, cancel button and suggestions."
106
+ ],
107
+ [
108
+ "…TextInputProps",
109
+ "",
110
+ "",
111
+ "placeholder, onSubmitEditing, autoFocus, …"
112
+ ]
113
+ ],
114
+ "behavior": [
115
+ [
116
+ "Motion",
117
+ "On focus a halo glows and the magnifier pops; Cancel slides in as the field springs narrower and the clear button scales in. loading swaps the magnifier for a spinning arc."
118
+ ],
119
+ [
120
+ "Touch",
121
+ "The 'minimal' variant rests as a round icon and expands into a full field when tapped. Picking a suggestion fills the query and dismisses the keyboard."
122
+ ],
123
+ [
124
+ "Screen readers",
125
+ "The input has the search role, labelled by its placeholder. 'Clear search', Cancel and each suggestion are labelled buttons."
126
+ ],
127
+ [
128
+ "Web",
129
+ "The browser outline is replaced by the border and halo, and the suggestion panel stays open a beat after blur so clicks land."
130
+ ]
131
+ ],
132
+ "usage": "import { useState } from 'react';\nimport { SearchBar } from '@/components/ui/search-bar';\n\nconst [query, setQuery] = useState('');\n<SearchBar value={query} onChangeText={setQuery} placeholder=\"Search products\" />",
133
+ "examples": [
134
+ {
135
+ "name": "WithSuggestions",
136
+ "title": "With Suggestions",
137
+ "code": "import React, { useEffect, useState } from 'react';\nimport { Pressable, StyleSheet, Text, View, type ViewProps } from 'react-native';\nimport { SearchBar, type SearchSuggestion } from '@/components/ui/search-bar';\nimport { alpha, useKit } from '@/lib/kit';\n\nconst SUGGESTIONS: SearchSuggestion[] = [\n { key: 'r1', label: 'Noise cancelling headphones', icon: 'recent' },\n { key: 'r2', label: 'Running shoes', icon: 'recent' },\n { key: 't1', label: 'Mechanical keyboard', icon: 'trending', hint: 'Trending' },\n { key: 't2', label: 'Standing desk', icon: 'trending', hint: '2.1k searches' },\n { key: 's1', label: 'Wireless charger', hint: 'Electronics' },\n { key: 's2', label: 'Coffee grinder', hint: 'Kitchen' },\n];\n\nexport default function WithSuggestions() {\n const { colors } = useKit();\n const [query, setQuery] = useState('');\n const [picked, setPicked] = useState<string | null>(null);\n return (\n // Reserve room for the open list, so the bar stays put when suggestions drop down below it.\n <View style={{ gap: 10, minHeight: 400 }}>\n <SearchBar\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search products\"\n suggestions={SUGGESTIONS}\n maxSuggestions={5}\n onSelectSuggestion={(item) => setPicked(item.label)}\n />\n <Text style={{ fontSize: 13, color: colors.mutedForeground }}>{picked ? `Showing results for “${picked}”` : 'Tap the field to see recent and trending searches'}</Text>\n </View>\n );\n}\n"
138
+ },
139
+ {
140
+ "name": "LiveResults",
141
+ "title": "Live Results",
142
+ "code": "import React, { useEffect, useState } from 'react';\nimport { Pressable, StyleSheet, Text, View, type ViewProps } from 'react-native';\nimport { SearchBar, type SearchSuggestion } from '@/components/ui/search-bar';\nimport { alpha, useKit } from '@/lib/kit';\n\n/** Demo card that follows the kit theme, so the docs radius / accent picker reshapes it too. */\nfunction Card({ style, ...rest }: ViewProps) {\n const { colors, radius } = useKit();\n return (\n <View\n style={[\n { padding: 16, gap: 12, borderRadius: radius.xl, borderWidth: StyleSheet.hairlineWidth, borderColor: colors.border, backgroundColor: colors.card },\n style,\n ]}\n {...rest}\n />\n );\n}\n\nconst CONTACTS = [\n { name: 'Aarav Mehta', role: 'Design lead' },\n { name: 'Priya Nair', role: 'Product manager' },\n { name: 'Rohan Kapoor', role: 'iOS engineer' },\n { name: 'Sara Ali', role: 'Marketing' },\n { name: 'Vikram Rao', role: 'Backend engineer' },\n];\n\nexport default function LiveResults() {\n const { colors } = useKit();\n const [query, setQuery] = useState('');\n const [loading, setLoading] = useState(false);\n useEffect(() => {\n if (!query) return setLoading(false);\n setLoading(true);\n const id = setTimeout(() => setLoading(false), 600);\n return () => clearTimeout(id);\n }, [query]);\n const q = query.trim().toLowerCase();\n const results = CONTACTS.filter((c) => c.name.toLowerCase().includes(q) || c.role.toLowerCase().includes(q));\n return (\n <Card>\n <SearchBar variant=\"filled\" value={query} onChangeText={setQuery} loading={loading} placeholder=\"Search people\" />\n {loading ? (\n <Text style={{ fontSize: 13, color: colors.mutedForeground }}>Searching your team…</Text>\n ) : results.length ? (\n results.slice(0, 4).map((c) => (\n <View key={c.name} style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <View style={{ width: 34, height: 34, borderRadius: 17, backgroundColor: alpha(colors.accent, 0.16), alignItems: 'center', justifyContent: 'center' }}>\n <Text style={{ fontSize: 13, fontWeight: '400', color: colors.accent }}>{c.name.split(' ').map((p) => p[0]).join('')}</Text>\n </View>\n <View>\n <Text style={{ fontSize: 15, fontWeight: '400', color: colors.foreground }}>{c.name}</Text>\n <Text style={{ fontSize: 12.5, color: colors.mutedForeground }}>{c.role}</Text>\n </View>\n </View>\n ))\n ) : (\n <Text style={{ fontSize: 13, color: colors.mutedForeground }}>No one matches “{query}”</Text>\n )}\n </Card>\n );\n}\n"
143
+ },
144
+ {
145
+ "name": "Minimal",
146
+ "title": "Minimal",
147
+ "code": "import { Pressable, StyleSheet, Text, View, type ViewProps } from 'react-native';\nimport { SearchBar, type SearchSuggestion } from '@/components/ui/search-bar';\nimport { alpha, useKit } from '@/lib/kit';\n\n/** Demo card that follows the kit theme, so the docs radius / accent picker reshapes it too. */\nfunction Card({ style, ...rest }: ViewProps) {\n const { colors, radius } = useKit();\n return (\n <View\n style={[\n { padding: 16, gap: 12, borderRadius: radius.xl, borderWidth: StyleSheet.hairlineWidth, borderColor: colors.border, backgroundColor: colors.card },\n style,\n ]}\n {...rest}\n />\n );\n}\n\nexport default function Minimal() {\n const { colors } = useKit();\n return (\n <Card style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <Text style={{ fontSize: 22, fontWeight: '400', letterSpacing: -0.4, color: colors.foreground }}>Inbox</Text>\n <SearchBar variant=\"minimal\" align=\"right\" placeholder=\"Search mail\" style={{ flex: 1 }} />\n </Card>\n );\n}\n"
148
+ },
149
+ {
150
+ "name": "WithFilter",
151
+ "title": "With Filter",
152
+ "code": "import React, { useEffect, useState } from 'react';\nimport { Pressable, StyleSheet, Text, View, type ViewProps } from 'react-native';\nimport { SearchBar, type SearchSuggestion } from '@/components/ui/search-bar';\nimport { alpha, useKit } from '@/lib/kit';\n\nfunction FilterButton({ count, onPress }: { count: number; onPress: () => void }) {\n const { colors, radius } = useKit();\n return (\n <Pressable\n onPress={onPress}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`Filters, ${count} active`}\n style={{ height: 32, paddingHorizontal: 10, borderRadius: radius.capsule(32), backgroundColor: count ? colors.accent : colors.muted, flexDirection: 'row', alignItems: 'center', gap: 6 }}\n >\n <View style={{ gap: 3, alignItems: 'center' }}>\n {[14, 10, 6].map((w) => (\n <View key={w} style={{ width: w, height: 2, borderRadius: 1, backgroundColor: count ? colors.accentForeground : colors.mutedForeground }} />\n ))}\n </View>\n {count ? <Text style={{ fontSize: 12.5, fontWeight: '400', color: colors.accentForeground }}>{count}</Text> : null}\n </Pressable>\n );\n}\n\nexport default function WithFilter() {\n const { colors } = useKit();\n const [count, setCount] = useState(2);\n return (\n <View style={{ gap: 10 }}>\n <SearchBar\n placeholder=\"Stays in Goa\"\n showCancel={false}\n trailing={<FilterButton count={count} onPress={() => setCount((c) => (c + 1) % 4)} />}\n />\n <Text style={{ fontSize: 13, color: colors.mutedForeground }}>{count ? `${count} filters · Pool, Under ₹8,000` : 'No filters applied'}</Text>\n </View>\n );\n}\n"
153
+ },
154
+ {
155
+ "name": "Sizes",
156
+ "title": "Sizes",
157
+ "code": "import { Pressable, StyleSheet, Text, View, type ViewProps } from 'react-native';\nimport { SearchBar, type SearchSuggestion } from '@/components/ui/search-bar';\nimport { alpha, useKit } from '@/lib/kit';\n\nexport default function Sizes() {\n const { colors } = useKit();\n return (\n <View style={{ gap: 14 }}>\n {(['sm', 'md', 'lg'] as const).map((size, i) => (\n <View key={size} style={{ gap: 6 }}>\n <Text style={{ fontSize: 12, fontWeight: '400', color: colors.mutedForeground }}>{['Small', 'Medium', 'Large'][i]}</Text>\n <SearchBar size={size} variant={i === 1 ? 'default' : 'filled'} defaultValue=\"Coffee near me\" showCancel={false} />\n </View>\n ))}\n </View>\n );\n}\n"
158
+ }
159
+ ]
160
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "name": "search-results",
3
+ "category": "Blocks",
4
+ "aliases": [],
5
+ "exportName": "SearchResults",
6
+ "files": [
7
+ "src/components/blocks/search-results.tsx"
8
+ ],
9
+ "summary": null,
10
+ "props": [
11
+ [
12
+ "results",
13
+ "{ id, title, subtitle?, rating, reviews?, price, distance?, freeDelivery?, open?, color?, icon? }[]",
14
+ "6 coffee results (₹)",
15
+ "Results for the current query. Filtered and sorted locally."
16
+ ],
17
+ [
18
+ "defaultQuery",
19
+ "string",
20
+ "'coffee'",
21
+ "Initial query in the field and the result count. Empty shows Recent and Trending."
22
+ ],
23
+ [
24
+ "totalCount",
25
+ "number",
26
+ "128",
27
+ "Backend total shown while no filter is active."
28
+ ],
29
+ [
30
+ "loading",
31
+ "boolean",
32
+ "false",
33
+ "Skeleton rows and a spinning search icon."
34
+ ],
35
+ [
36
+ "filters",
37
+ "('price' | 'rating' | 'free-delivery' | 'open')[]",
38
+ "—",
39
+ "Controlled quick filters."
40
+ ],
41
+ [
42
+ "defaultFilters",
43
+ "SearchFilter[]",
44
+ "[]",
45
+ "Initial filters when uncontrolled."
46
+ ],
47
+ [
48
+ "onFiltersChange",
49
+ "(filters) => void",
50
+ "—",
51
+ "Chips or the sheet changed the filters."
52
+ ],
53
+ [
54
+ "recentSearches / trendingSearches",
55
+ "string[]",
56
+ "3 / 4 samples",
57
+ "Shown while the field is empty (recent as rows with Clear, trending as chips). Submitted searches join Recent."
58
+ ],
59
+ [
60
+ "onSearch",
61
+ "(query: string) => void",
62
+ "—",
63
+ "Submitted from the keyboard, a recent / trending search or a no-results chip."
64
+ ],
65
+ [
66
+ "onSelect",
67
+ "(result) => void",
68
+ "—",
69
+ "A result row was tapped."
70
+ ],
71
+ [
72
+ "onClearRecent",
73
+ "() => void",
74
+ "—",
75
+ "Clear next to Recent was tapped."
76
+ ],
77
+ [
78
+ "autoFocus",
79
+ "boolean",
80
+ "false",
81
+ "Focus the field on mount."
82
+ ],
83
+ [
84
+ "currency",
85
+ "string",
86
+ "'₹'",
87
+ "Symbol placed before prices by the default formatter (Indian digit grouping, decimals only when non-zero)."
88
+ ],
89
+ [
90
+ "formatPrice",
91
+ "(amount) => string",
92
+ "'₹1,23,456'",
93
+ "Money formatter for rows, chips and the slider. Overrides currency — use for Intl, other grouping or suffix symbols like '12,50 €'."
94
+ ],
95
+ [
96
+ "maxPrice",
97
+ "number",
98
+ "2000",
99
+ "Top of the price-range slider; the top value reads as \"and up\"."
100
+ ],
101
+ [
102
+ "tintedThumbnails",
103
+ "boolean",
104
+ "false",
105
+ "Tint thumbnails with each result's color instead of the neutral default."
106
+ ],
107
+ [
108
+ "accent",
109
+ "string",
110
+ "theme accent",
111
+ "Active chip, slider and button colour (black in light, white in dark by default)."
112
+ ],
113
+ [
114
+ "style",
115
+ "StyleProp<ViewStyle>",
116
+ "—",
117
+ "Root style."
118
+ ]
119
+ ],
120
+ "behavior": [],
121
+ "usage": null,
122
+ "examples": []
123
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "name": "segmented-control",
3
+ "category": "Selection",
4
+ "aliases": [],
5
+ "exportName": "SegmentedControl",
6
+ "files": [
7
+ "src/components/ui/segmented-control.tsx"
8
+ ],
9
+ "summary": "A liquid indicator that stretches as it slides; drag it to scrub.",
10
+ "props": [
11
+ [
12
+ "options",
13
+ "(string | { value, label?, icon?, disabled? })[]",
14
+ "—",
15
+ "Segments. `icon` can be a node or ({ active, color }) => node."
16
+ ],
17
+ [
18
+ "value / onValueChange",
19
+ "string",
20
+ "—",
21
+ "Controlled selection (or use defaultValue; defaults to the first segment)."
22
+ ],
23
+ [
24
+ "defaultValue",
25
+ "string",
26
+ "first segment",
27
+ "Initial selection when uncontrolled."
28
+ ],
29
+ [
30
+ "variant",
31
+ "\"pill\" | \"underline\" | \"outline\"",
32
+ "\"pill\"",
33
+ "Raised pill on a track, tab underline, or tinted outline."
34
+ ],
35
+ [
36
+ "size",
37
+ "\"sm\" | \"md\" | \"lg\"",
38
+ "\"md\"",
39
+ "32 / 40 / 48pt tall."
40
+ ],
41
+ [
42
+ "fullWidth",
43
+ "boolean",
44
+ "true",
45
+ "Equal-width segments filling the row, or segments sized to their labels."
46
+ ],
47
+ [
48
+ "accent",
49
+ "string",
50
+ "theme accent",
51
+ "Indicator colour (pill becomes a filled accent pill)."
52
+ ],
53
+ [
54
+ "haptics",
55
+ "boolean",
56
+ "true",
57
+ "Selection tick on change."
58
+ ],
59
+ [
60
+ "disabled",
61
+ "boolean",
62
+ "false",
63
+ "Dims and blocks presses."
64
+ ],
65
+ [
66
+ "style",
67
+ "StyleProp<ViewStyle>",
68
+ "—",
69
+ "Style for the track holding the segments."
70
+ ]
71
+ ],
72
+ "behavior": [
73
+ [
74
+ "Motion",
75
+ "The leading edge of the indicator springs ahead and the trailing edge catches up, so it stretches as it travels. Labels squish on press and bounce when selected."
76
+ ],
77
+ [
78
+ "Touch",
79
+ "A sideways drag that starts on the selected segment scrubs across the others; drags that start elsewhere are left to a parent ScrollView. Short segments get hitSlop up to 44pt."
80
+ ],
81
+ [
82
+ "Haptics",
83
+ "A selection tick plays on each change (haptics, on by default)."
84
+ ],
85
+ [
86
+ "Screen readers",
87
+ "A tablist of tabs with selected and disabled state, labelled by each option's label or accessibilityLabel."
88
+ ]
89
+ ],
90
+ "usage": "import { useState } from 'react';\nimport { SegmentedControl } from '@/components/ui/segmented-control';\n\nconst [range, setRange] = useState('Week');\n<SegmentedControl options={['Day', 'Week', 'Month', 'Year']} value={range} onValueChange={setRange} />",
91
+ "examples": [
92
+ {
93
+ "name": "Pill",
94
+ "title": "Pill",
95
+ "code": "import { SegmentedControl } from '@/components/ui/segmented-control';\n\nexport default function Pill() {\n return <SegmentedControl options={['Day', 'Week', 'Month', 'Year']} defaultValue=\"Week\" />;\n}\n"
96
+ },
97
+ {
98
+ "name": "Underline",
99
+ "title": "Underline",
100
+ "code": "import React, { useState } from 'react';\nimport { SegmentedControl } from '@/components/ui/segmented-control';\n\nexport default function Underline() {\n const [tab, setTab] = useState('overview');\n return (\n <SegmentedControl\n variant=\"underline\"\n fullWidth={false}\n value={tab}\n onValueChange={setTab}\n options={[\n { value: 'overview', label: 'Overview' },\n { value: 'activity', label: 'Activity' },\n { value: 'reviews', label: 'Reviews (128)' },\n ]}\n />\n );\n}\n"
101
+ },
102
+ {
103
+ "name": "Outline",
104
+ "title": "Outline",
105
+ "code": "import { SegmentedControl } from '@/components/ui/segmented-control';\n\nexport default function Outline() {\n return <SegmentedControl variant=\"outline\" options={['Monthly', 'Yearly · save 20%']} defaultValue=\"Yearly · save 20%\" />;\n}\n"
106
+ },
107
+ {
108
+ "name": "WithIcons",
109
+ "title": "With Icons",
110
+ "code": "import { Text, View } from 'react-native';\nimport { SegmentedControl } from '@/components/ui/segmented-control';\n\nexport default function WithIcons() {\n const glyph = (g: string) => ({ color }: { color: string }) => <Text style={{ fontSize: 15, color }}>{g}</Text>;\n return (\n <SegmentedControl\n defaultValue=\"grid\"\n options={[\n { value: 'list', label: 'List', icon: glyph('☰') },\n { value: 'grid', label: 'Grid', icon: glyph('▦') },\n { value: 'map', label: 'Map', icon: glyph('◎') },\n ]}\n />\n );\n}\n"
111
+ },
112
+ {
113
+ "name": "Accent",
114
+ "title": "Accent",
115
+ "code": "import { SegmentedControl } from '@/components/ui/segmented-control';\nimport { useKit } from '@/lib/kit';\n\nexport default function Accent() {\n const { colors } = useKit();\n return (\n <SegmentedControl\n accent={colors.accent}\n options={[\n { value: 'buy', label: 'Buy' },\n { value: 'rent', label: 'Rent' },\n { value: 'sold', label: 'Sold' },\n ]}\n />\n );\n}\n"
116
+ },
117
+ {
118
+ "name": "Sizes",
119
+ "title": "Sizes",
120
+ "code": "import { Text, View } from 'react-native';\nimport { SegmentedControl } from '@/components/ui/segmented-control';\n\nexport default function Sizes() {\n return (\n <View style={{ gap: 12 }}>\n <SegmentedControl size=\"sm\" options={['XS', 'S', 'M', 'L', 'XL']} defaultValue=\"M\" />\n <SegmentedControl size=\"md\" options={['Small', 'Medium', 'Large']} defaultValue=\"Medium\" />\n <SegmentedControl size=\"lg\" options={['Pickup', 'Delivery']} />\n </View>\n );\n}\n"
121
+ }
122
+ ]
123
+ }