@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,201 @@
1
+ {
2
+ "name": "sign-in",
3
+ "category": "Blocks",
4
+ "aliases": [],
5
+ "exportName": "SignIn",
6
+ "files": [
7
+ "src/components/blocks/sign-in.tsx"
8
+ ],
9
+ "summary": null,
10
+ "props": [
11
+ [
12
+ "methods",
13
+ "('apple' | 'google' | 'microsoft' | 'github' | 'phone' | 'email')[]",
14
+ "['apple', 'google', 'phone', 'email']",
15
+ "Options in display order. OAuth ones render as 'Continue with X'; phone / email open their step. Exactly one of phone / email and no OAuth skips the welcome step."
16
+ ],
17
+ [
18
+ "emailMode",
19
+ "'password' | 'code' | 'magic-link'",
20
+ "'password'",
21
+ "What follows the email step: a password, a one-time email code, or a magic link + 'Check your inbox'."
22
+ ],
23
+ [
24
+ "mode / defaultMode",
25
+ "'sign-in' | 'sign-up'",
26
+ "'sign-in'",
27
+ "Controlled / initial mode. Sign-up shows 'Create account' and a password strength meter."
28
+ ],
29
+ [
30
+ "onModeChange",
31
+ "(mode) => void",
32
+ "—",
33
+ "The footer 'Sign up' / 'Sign in' link toggled the mode."
34
+ ],
35
+ [
36
+ "initialStep",
37
+ "'welcome' | 'phone' | 'otp' | 'email' | 'password' | 'email-code' | 'check-email' | 'forgot'",
38
+ "'welcome'",
39
+ "Step to open on mount (demos, deep links). Back still walks a sensible stack."
40
+ ],
41
+ [
42
+ "defaultPhone",
43
+ "string",
44
+ "''",
45
+ "Prefill the number (digits; a leading dial code is stripped)."
46
+ ],
47
+ [
48
+ "defaultEmail",
49
+ "string",
50
+ "''",
51
+ "Prefill the email field."
52
+ ],
53
+ [
54
+ "countryCode",
55
+ "string",
56
+ "'+91'",
57
+ "Selected dial code. +91 formats as '98765 43210' and needs 10 digits; others accept 7–15."
58
+ ],
59
+ [
60
+ "countries",
61
+ "{ code, dial, flag? }[]",
62
+ "IN, US, GB, AE, SG, AU",
63
+ "Dial-code picker list (tap the chip). One entry hides the picker."
64
+ ],
65
+ [
66
+ "otpLength",
67
+ "number",
68
+ "6",
69
+ "Digits in the one-time code."
70
+ ],
71
+ [
72
+ "resendSeconds",
73
+ "number",
74
+ "30",
75
+ "Countdown before 'Resend code' / 'Resend' is available."
76
+ ],
77
+ [
78
+ "onOAuth",
79
+ "(provider) => void | Promise",
80
+ "—",
81
+ "OAuth button pressed. Spinner while pending; resolve → onSuccess, throw → message shown inline."
82
+ ],
83
+ [
84
+ "onSendPhoneCode",
85
+ "(fullPhone: string) => void | Promise",
86
+ "—",
87
+ "Send an SMS code to the E.164 number ('+919876543210'). Resolve to open the code step; also used by Resend."
88
+ ],
89
+ [
90
+ "onVerifyPhoneCode",
91
+ "(fullPhone, code) => void | Promise",
92
+ "—",
93
+ "Called when the cells fill. Resolve → success state then onSuccess; throw → error on the cells."
94
+ ],
95
+ [
96
+ "onEmailPassword",
97
+ "({ email, password, mode }) => void | Promise",
98
+ "—",
99
+ "Password step submitted. Resolve → onSuccess; throw → message under the field."
100
+ ],
101
+ [
102
+ "onSendEmailCode",
103
+ "(email) => void | Promise",
104
+ "—",
105
+ "emailMode 'code': send the code. Resolve to open the code step."
106
+ ],
107
+ [
108
+ "onVerifyEmailCode",
109
+ "(email, code) => void | Promise",
110
+ "—",
111
+ "emailMode 'code': check the code. Resolve → onSuccess."
112
+ ],
113
+ [
114
+ "onSendMagicLink",
115
+ "(email) => void | Promise",
116
+ "—",
117
+ "emailMode 'magic-link': send the link. Resolve to show 'Check your inbox'."
118
+ ],
119
+ [
120
+ "onForgotPassword",
121
+ "(email) => void | Promise",
122
+ "—",
123
+ "'Send reset link' pressed on the forgot step. Resolve to show 'Check your inbox'."
124
+ ],
125
+ [
126
+ "onSuccess",
127
+ "() => void",
128
+ "—",
129
+ "Called after any successful final step (OAuth, code verified, email + password)."
130
+ ],
131
+ [
132
+ "onBack",
133
+ "() => void",
134
+ "—",
135
+ "Shows a back button on the first step."
136
+ ],
137
+ [
138
+ "onTerms / onPrivacy",
139
+ "() => void",
140
+ "—",
141
+ "Make 'Terms' / 'Privacy Policy' in the legal line tappable."
142
+ ],
143
+ [
144
+ "appName",
145
+ "string",
146
+ "'Northwind'",
147
+ "Used in the default title and the logo initial."
148
+ ],
149
+ [
150
+ "logo",
151
+ "ReactNode",
152
+ "monochrome initial mark",
153
+ "Replace the welcome logo."
154
+ ],
155
+ [
156
+ "title",
157
+ "string",
158
+ "`Welcome to ${appName}`",
159
+ "Welcome heading."
160
+ ],
161
+ [
162
+ "subtitle",
163
+ "string",
164
+ "'Sign in to continue.'",
165
+ "Line under the welcome heading."
166
+ ],
167
+ [
168
+ "accent",
169
+ "string",
170
+ "theme accent",
171
+ "Primary buttons, links and focus rings (black in light, white in dark by default)."
172
+ ],
173
+ [
174
+ "style",
175
+ "StyleProp<ViewStyle>",
176
+ "—",
177
+ "Root style."
178
+ ],
179
+ [
180
+ "error / onDismissError",
181
+ "string / () => void",
182
+ "—",
183
+ "Controlled error shown on the current step; onDismissError fires when the user edits or navigates."
184
+ ],
185
+ [
186
+ "onSignUp",
187
+ "() => void",
188
+ "—",
189
+ "Pressed 'Sign up' — called instead of toggling the mode."
190
+ ],
191
+ [
192
+ "onSubmit / onSocial / providers",
193
+ "deprecated",
194
+ "—",
195
+ "Aliases of onEmailPassword / onOAuth; providers (apple / google) sets the OAuth part of methods when methods isn't given."
196
+ ]
197
+ ],
198
+ "behavior": [],
199
+ "usage": null,
200
+ "examples": []
201
+ }
@@ -0,0 +1,162 @@
1
+ {
2
+ "name": "skeleton",
3
+ "category": "Feedback",
4
+ "aliases": [],
5
+ "exportName": "SkeletonGroup",
6
+ "files": [
7
+ "src/components/ui/skeleton.tsx"
8
+ ],
9
+ "summary": "Loading placeholders swept by one angled light band across the whole screen.",
10
+ "props": [
11
+ [
12
+ "width / height",
13
+ "DimensionValue",
14
+ "\"100%\" / 14",
15
+ "Block width and height, in points or percent."
16
+ ],
17
+ [
18
+ "radius",
19
+ "\"sm\" | \"md\" | \"lg\" | \"xl\" | \"capsule\" | \"full\" | number",
20
+ "\"sm\"",
21
+ "Corner radius. 'capsule' follows the kit radius for bars; 'full' is always a pill / circle."
22
+ ],
23
+ [
24
+ "variant",
25
+ "\"shimmer\" | \"wave\" | \"pulse\" | \"static\"",
26
+ "\"shimmer\"",
27
+ "Angled light band sweeping all blocks as one wave, a staggered top-to-bottom brighten, an opacity pulse, or no motion. Every variant is static when reduce motion is on."
28
+ ],
29
+ [
30
+ "color",
31
+ "string",
32
+ "faint foreground",
33
+ "Block colour."
34
+ ],
35
+ [
36
+ "children",
37
+ "ReactNode",
38
+ "—",
39
+ "Centred overlay inside the block (e.g. a faint glyph)."
40
+ ],
41
+ [
42
+ "Skeleton.Text",
43
+ "{ lines, lineHeight, gap, lastLineWidth }",
44
+ "3 lines",
45
+ "Paragraph placeholder with a slightly ragged edge."
46
+ ],
47
+ [
48
+ "Skeleton.Avatar",
49
+ "{ size, shape: \"circle\" | \"rounded\" }",
50
+ "40, circle",
51
+ "Avatar placeholder."
52
+ ],
53
+ [
54
+ "Skeleton.Media",
55
+ "{ aspectRatio, height, width, glyph, glyphSize, radius }",
56
+ "16 / 9, glyph off",
57
+ "Image block with a faint picture glyph in the centre."
58
+ ],
59
+ [
60
+ "Skeleton.List",
61
+ "{ rows, avatarSize, avatarShape, trailing, dividers }",
62
+ "4 rows, 44, circle, trailing on",
63
+ "Rows with an avatar, two lines and a trailing pill."
64
+ ],
65
+ [
66
+ "Skeleton.Card",
67
+ "{ media, mediaHeight, header, lines, actions }",
68
+ "all on, 168",
69
+ "Feed post: author row with menu, caption, media and an action bar."
70
+ ],
71
+ [
72
+ "Skeleton.Nav",
73
+ "{ header, back, actions, tabs, tabCount, rows, children }",
74
+ "header + 4 tabs + 4 rows",
75
+ "Screen chrome while content loads — app bar, list body, bottom tabs."
76
+ ],
77
+ [
78
+ "Skeleton.Group",
79
+ "{ style, children }",
80
+ "window",
81
+ "Frame the shimmer / wave travels across, so blocks inside line up as one wave (Nav and Reveal add one)."
82
+ ],
83
+ [
84
+ "Skeleton.Reveal",
85
+ "{ loading, skeleton, children, stagger, animateHeight, loadingLabel }",
86
+ "—, 3 lines, —, 70, true, \"Loading\"",
87
+ "Shows `skeleton` while loading; then it dissolves, top-level children rise in with a stagger and the height glides between the two."
88
+ ],
89
+ [
90
+ "style",
91
+ "StyleProp<ViewStyle>",
92
+ "—",
93
+ "Style for the block (composites apply it to their wrapper)."
94
+ ]
95
+ ],
96
+ "behavior": [
97
+ [
98
+ "Motion",
99
+ "Every block reads one shared native-driver clock, so the shimmer band, wave or pulse moves across a Skeleton.Group (or the window) as a single sweep."
100
+ ],
101
+ [
102
+ "Reduced motion",
103
+ "Every variant renders static, and Skeleton.Reveal swaps the skeleton for content instantly."
104
+ ],
105
+ [
106
+ "Screen readers",
107
+ "Placeholder blocks are hidden from screen readers. Skeleton.Reveal is marked busy and exposes a progressbar named by loadingLabel; the content arrives in a polite live region."
108
+ ],
109
+ [
110
+ "Platforms",
111
+ "Plain Animated views plus a react-native-svg gradient, so it runs the same on iOS, Android and web."
112
+ ]
113
+ ],
114
+ "usage": "import { Skeleton } from '@/components/ui/skeleton';\n\n<Skeleton.Group style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <Skeleton.Avatar size={44} />\n <Skeleton.Text lines={2} style={{ flex: 1 }} />\n</Skeleton.Group>",
115
+ "examples": [
116
+ {
117
+ "name": "Shimmer",
118
+ "title": "Shimmer",
119
+ "code": "import { Text, View, type DimensionValue } from 'react-native';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport default function Shimmer() {\n return (\n <Skeleton.Group style={{ flexDirection: 'row', alignItems: 'center', gap: 14 }}>\n <Skeleton.Avatar size={52} />\n <View style={{ flex: 1, gap: 10 }}>\n <Skeleton width=\"70%\" height={14} radius=\"capsule\" />\n <Skeleton width=\"45%\" height={12} radius=\"capsule\" />\n </View>\n </Skeleton.Group>\n );\n}\n"
120
+ },
121
+ {
122
+ "name": "Card",
123
+ "title": "Card",
124
+ "code": "import { Skeleton } from '@/components/ui/skeleton';\n\nexport default function Card() {\n return (\n <Skeleton.Group style={{ gap: 14 }}>\n <Skeleton.Card />\n <Skeleton.Card media={false} lines={3} />\n </Skeleton.Group>\n );\n}\n"
125
+ },
126
+ {
127
+ "name": "List",
128
+ "title": "List",
129
+ "code": "import { Skeleton } from '@/components/ui/skeleton';\nimport { useKit } from '@/lib/kit';\n\nexport default function List() {\n const { radius } = useKit();\n return (\n <Skeleton.Group style={{ gap: 8 }}>\n <Skeleton height={40} radius={radius.capsule(40)} />\n <Skeleton.List rows={5} dividers />\n </Skeleton.Group>\n );\n}\n"
130
+ },
131
+ {
132
+ "name": "ProductGrid",
133
+ "title": "Product Grid",
134
+ "code": "import { Text, View, type DimensionValue } from 'react-native';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport default function ProductGrid() {\n return (\n <Skeleton.Group style={{ flexDirection: 'row', flexWrap: 'wrap', gap: 12 }}>\n {[0, 1, 2, 3].map((i) => (\n <View key={i} style={{ flexBasis: '45%', flexGrow: 1, gap: 8 }}>\n <Skeleton.Media aspectRatio={1} radius=\"lg\" />\n <Skeleton width={i % 2 ? '70%' : '86%'} height={12} radius=\"capsule\" />\n <Skeleton width={56} height={14} radius=\"capsule\" />\n </View>\n ))}\n </Skeleton.Group>\n );\n}\n"
135
+ },
136
+ {
137
+ "name": "ProfileHeader",
138
+ "title": "Profile Header",
139
+ "code": "import { Text, View, type DimensionValue } from 'react-native';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { useKit } from '@/lib/kit';\n\nconst ROW_W: DimensionValue[] = ['34%', '46%', '28%'];\n\nexport default function ProfileHeader() {\n const { colors, radius, dark } = useKit();\n const surface = { backgroundColor: dark ? colors.card : colors.muted, borderRadius: radius.xl, paddingHorizontal: 14 };\n return (\n <Skeleton.Group style={{ gap: 20 }}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 16 }}>\n <Skeleton.Avatar size={72} />\n <View style={{ flex: 1, gap: 9 }}>\n <Skeleton width=\"58%\" height={16} radius=\"capsule\" />\n <Skeleton width=\"74%\" height={11} radius=\"capsule\" />\n <Skeleton width={96} height={28} radius=\"full\" style={{ marginTop: 4 }} />\n </View>\n </View>\n {[3, 2].map((rows, g) => (\n <View key={g} style={{ gap: 8 }}>\n <Skeleton width={g ? 84 : 120} height={10} radius=\"capsule\" />\n <View style={surface}>\n {Array.from({ length: rows }, (_, i) => (\n <View key={i} style={{ flexDirection: 'row', alignItems: 'center', gap: 12, height: 52 }}>\n <Skeleton width={30} height={30} radius=\"md\" />\n <Skeleton width={ROW_W[i % 3]} height={12} radius=\"capsule\" />\n <View style={{ flex: 1 }} />\n <Skeleton width={[64, 40, 52][i % 3]} height={11} radius=\"capsule\" />\n </View>\n ))}\n </View>\n </View>\n ))}\n </Skeleton.Group>\n );\n}\n"
140
+ },
141
+ {
142
+ "name": "LoadingSwap",
143
+ "title": "Loading Swap",
144
+ "code": "import React, { useEffect, useRef, useState } from 'react';\nimport { Text, View, type DimensionValue } from 'react-native';\nimport { Button } from '@/components/ui/button';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { useKit } from '@/lib/kit';\n\nexport default function LoadingSwap() {\n const { colors, radius, text } = useKit();\n const [loading, setLoading] = useState(true);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const reload = () => {\n setLoading(true);\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => setLoading(false), 1600);\n };\n useEffect(() => {\n timer.current = setTimeout(() => setLoading(false), 1600);\n return () => {\n if (timer.current) clearTimeout(timer.current);\n };\n }, []);\n return (\n <View style={{ gap: 16 }}>\n <Skeleton.Reveal\n loading={loading}\n skeleton={\n <View style={{ gap: 12 }}>\n <Skeleton.List rows={1} trailing={false} />\n <Skeleton.Text lines={2} />\n </View>\n }\n >\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12, paddingVertical: 10 }}>\n <View style={{ width: 44, height: 44, borderRadius: radius.full, backgroundColor: colors.accent, alignItems: 'center', justifyContent: 'center' }}>\n <Text style={{ color: colors.accentForeground, fontSize: 16, fontWeight: '400' }}>MC</Text>\n </View>\n <View style={{ flex: 1 }}>\n <Text style={[text.md, { color: colors.foreground, fontWeight: '400' }]}>Maya Chen</Text>\n <Text style={[text.sm, { color: colors.mutedForeground, fontWeight: '400' }]}>Product designer · Lisbon</Text>\n </View>\n </View>\n <Text style={[text.sm, { color: colors.foreground, fontWeight: '400', marginTop: 4 }]}>\n Shipped the new onboarding flow today. Activation is up 18% in the first week — thanks to everyone who tested the beta.\n </Text>\n <Text style={[text.xs, { color: colors.mutedForeground, fontWeight: '400', marginTop: 10 }]}>\n 124 likes · 18 comments\n </Text>\n </Skeleton.Reveal>\n <Button size=\"sm\" variant=\"outline\" style={{ alignSelf: 'flex-start' }} disabled={loading} onPress={reload}>\n {loading ? 'Loading…' : 'Reload'}\n </Button>\n </View>\n );\n}\n"
145
+ },
146
+ {
147
+ "name": "Wave",
148
+ "title": "Wave",
149
+ "code": "import { Text, View, type DimensionValue } from 'react-native';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport default function Wave() {\n return (\n <Skeleton.Group style={{ gap: 16 }}>\n <Skeleton.Media variant=\"wave\" radius=\"lg\" />\n <Skeleton.Text variant=\"wave\" lines={3} />\n <Skeleton.List variant=\"wave\" rows={2} />\n </Skeleton.Group>\n );\n}\n"
150
+ },
151
+ {
152
+ "name": "Pulse",
153
+ "title": "Pulse",
154
+ "code": "import { Text, View, type DimensionValue } from 'react-native';\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport default function Pulse() {\n return (\n <View style={{ gap: 16 }}>\n <Skeleton variant=\"pulse\" height={140} radius=\"lg\" />\n <Skeleton.Text variant=\"pulse\" lines={3} />\n </View>\n );\n}\n"
155
+ },
156
+ {
157
+ "name": "Nav",
158
+ "title": "Nav",
159
+ "code": "import { Skeleton } from '@/components/ui/skeleton';\n\nexport default function Nav() {\n return <Skeleton.Nav rows={6} tabCount={5} style={{ minHeight: 600 }} />;\n}\n"
160
+ }
161
+ ]
162
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "name": "slide-to-confirm",
3
+ "category": "Buttons",
4
+ "aliases": [],
5
+ "exportName": "SlideToConfirm",
6
+ "files": [
7
+ "src/components/ui/slide-to-confirm.tsx"
8
+ ],
9
+ "summary": "A slide-to-pay track whose thumb drags a glowing trail and ticks with haptics.",
10
+ "props": [
11
+ [
12
+ "label",
13
+ "string",
14
+ "\"Slide to confirm\"",
15
+ "Shimmering text in the track."
16
+ ],
17
+ [
18
+ "confirmedLabel",
19
+ "string",
20
+ "\"Confirmed\"",
21
+ "Text once completed."
22
+ ],
23
+ [
24
+ "onConfirm",
25
+ "() => void | Promise<unknown>",
26
+ "—",
27
+ "Fires at the end. Return a promise to show a spinner in the thumb; a rejection shakes the track, flashes the danger colour and slides back."
28
+ ],
29
+ [
30
+ "variant",
31
+ "\"default\" | \"gradient\" | \"outline\" | \"compact\"",
32
+ "\"default\"",
33
+ "Tinted track with a solid thumb, opt-in two-tone gradient track with a white thumb, transparent track with a tinted hairline, or a 48pt slim track."
34
+ ],
35
+ [
36
+ "accent",
37
+ "string",
38
+ "theme accent",
39
+ "Thumb, trail and track colour; only the gradient variant derives a second tone from it."
40
+ ],
41
+ [
42
+ "icon",
43
+ "ReactNode",
44
+ "animated chevrons",
45
+ "Custom thumb icon."
46
+ ],
47
+ [
48
+ "resetAfter",
49
+ "number",
50
+ "—",
51
+ "Auto-reset after this many ms. Otherwise call ref.reset()."
52
+ ],
53
+ [
54
+ "threshold",
55
+ "number",
56
+ "0.82",
57
+ "Fraction of the track that confirms on release."
58
+ ],
59
+ [
60
+ "haptics",
61
+ "boolean",
62
+ "true",
63
+ "Ticks at 25 / 50 / 75 %, success on confirm, error on failure."
64
+ ],
65
+ [
66
+ "disabled",
67
+ "boolean",
68
+ "false",
69
+ "Locks the thumb."
70
+ ],
71
+ [
72
+ "ref",
73
+ "{ reset(): void }",
74
+ "—",
75
+ "Imperative reset."
76
+ ],
77
+ [
78
+ "style",
79
+ "StyleProp<ViewStyle>",
80
+ "—",
81
+ "Style for the track (merged over its height, radius and colour)."
82
+ ]
83
+ ],
84
+ "behavior": [
85
+ [
86
+ "Touch",
87
+ "Drag past the threshold, or flick fast past the halfway point, to confirm; anything less springs back. If onConfirm returns a promise the thumb spins until it settles."
88
+ ],
89
+ [
90
+ "Motion",
91
+ "The thumb swells while held and a check draws on success; a rejected promise shakes the track and slides it back."
92
+ ],
93
+ [
94
+ "Reduced motion",
95
+ "The idle nudge and the chevron shimmer on the thumb are turned off."
96
+ ],
97
+ [
98
+ "Haptics",
99
+ "Selection ticks at 25, 50 and 75 percent of the drag, a medium impact on release, then a success or error notification."
100
+ ],
101
+ [
102
+ "Screen readers",
103
+ "A button whose label switches to confirmedLabel when done, with busy and disabled state. The 'activate' action (double tap) confirms without dragging."
104
+ ]
105
+ ],
106
+ "usage": null,
107
+ "examples": []
108
+ }