@teardown/cli 1.2.39 → 2.0.41

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 (260) hide show
  1. package/bin/teardown.js +11 -1
  2. package/package.json +77 -57
  3. package/src/cli/commands/init.ts +254 -0
  4. package/src/cli/commands/plugins.ts +93 -0
  5. package/src/cli/commands/prebuild.ts +168 -0
  6. package/src/cli/commands/run.ts +727 -0
  7. package/src/cli/commands/start.ts +87 -0
  8. package/src/cli/commands/validate.ts +62 -0
  9. package/src/cli/index.ts +59 -0
  10. package/src/config/index.ts +45 -0
  11. package/src/config/loader.ts +366 -0
  12. package/src/config/schema.ts +235 -0
  13. package/src/config/types.ts +322 -0
  14. package/src/index.ts +177 -0
  15. package/src/pipeline/cache.ts +179 -0
  16. package/src/pipeline/index.ts +10 -0
  17. package/src/pipeline/stages.ts +692 -0
  18. package/src/plugins/base.ts +370 -0
  19. package/src/plugins/capabilities/biometrics.ts +64 -0
  20. package/src/plugins/capabilities/bluetooth.ts +86 -0
  21. package/src/plugins/capabilities/calendar.ts +57 -0
  22. package/src/plugins/capabilities/camera.ts +77 -0
  23. package/src/plugins/capabilities/contacts.ts +57 -0
  24. package/src/plugins/capabilities/deep-linking.ts +124 -0
  25. package/src/plugins/capabilities/firebase.ts +138 -0
  26. package/src/plugins/capabilities/index.ts +96 -0
  27. package/src/plugins/capabilities/location.ts +87 -0
  28. package/src/plugins/capabilities/photo-library.ts +80 -0
  29. package/src/plugins/capabilities/push-notifications.ts +98 -0
  30. package/src/plugins/capabilities/sign-in-with-apple.ts +53 -0
  31. package/src/plugins/context.ts +220 -0
  32. package/src/plugins/index.ts +26 -0
  33. package/src/plugins/resolver.ts +321 -0
  34. package/src/templates/generator.ts +507 -0
  35. package/src/templates/index.ts +9 -0
  36. package/src/templates/paths.ts +25 -0
  37. package/src/transformers/android/gradle.ts +400 -0
  38. package/src/transformers/android/index.ts +19 -0
  39. package/src/transformers/android/manifest.ts +506 -0
  40. package/src/transformers/index.ts +39 -0
  41. package/src/transformers/ios/entitlements.ts +283 -0
  42. package/src/transformers/ios/index.ts +10 -0
  43. package/src/transformers/ios/pbxproj.ts +267 -0
  44. package/src/transformers/ios/plist.ts +198 -0
  45. package/src/utils/fs.ts +429 -0
  46. package/src/utils/index.ts +21 -0
  47. package/src/utils/logger.ts +203 -0
  48. package/templates/.gitignore +63 -0
  49. package/templates/Gemfile +3 -0
  50. package/templates/android/app/build.gradle.kts +97 -0
  51. package/templates/android/app/proguard-rules.pro +10 -0
  52. package/templates/android/app/src/main/AndroidManifest.xml +26 -0
  53. package/templates/android/app/src/main/java/com/appname/MainActivity.kt +22 -0
  54. package/templates/android/app/src/main/java/com/appname/MainApplication.kt +44 -0
  55. package/templates/android/app/src/main/res/values/strings.xml +3 -0
  56. package/templates/android/app/src/main/res/values/styles.xml +7 -0
  57. package/templates/android/build.gradle.kts +44 -0
  58. package/templates/android/gradle.properties +39 -0
  59. package/templates/android/settings.gradle.kts +12 -0
  60. package/templates/babel.config.js +15 -0
  61. package/templates/index.js +7 -0
  62. package/templates/ios/.xcode.env +11 -0
  63. package/templates/ios/AppName/AppDelegate.swift +25 -0
  64. package/templates/ios/AppName/AppName-Bridging-Header.h +4 -0
  65. package/templates/ios/AppName/AppName.entitlements +6 -0
  66. package/templates/ios/AppName/Images.xcassets/AppIcon.appiconset/Contents.json +35 -0
  67. package/templates/ios/AppName/Images.xcassets/Contents.json +6 -0
  68. package/templates/ios/AppName/Info.plist +49 -0
  69. package/templates/ios/AppName/LaunchScreen.storyboard +38 -0
  70. package/templates/ios/AppName.xcodeproj/project.pbxproj +402 -0
  71. package/templates/ios/AppName.xcodeproj/xcshareddata/xcschemes/AppName.xcscheme +78 -0
  72. package/templates/ios/Podfile +35 -0
  73. package/templates/metro.config.js +41 -0
  74. package/templates/package.json +57 -0
  75. package/templates/react-native.config.js +8 -0
  76. package/templates/src/app/index.tsx +34 -0
  77. package/templates/src/assets/fonts/.gitkeep +1 -0
  78. package/templates/src/assets/images/.gitkeep +1 -0
  79. package/templates/src/components/ui/accordion.tsx +114 -0
  80. package/templates/src/components/ui/avatar.tsx +75 -0
  81. package/templates/src/components/ui/button.tsx +93 -0
  82. package/templates/src/components/ui/card.tsx +120 -0
  83. package/templates/src/components/ui/checkbox.tsx +133 -0
  84. package/templates/src/components/ui/chip.tsx +95 -0
  85. package/templates/src/components/ui/dialog.tsx +134 -0
  86. package/templates/src/components/ui/divider.tsx +67 -0
  87. package/templates/src/components/ui/error-view.tsx +82 -0
  88. package/templates/src/components/ui/form-field.tsx +101 -0
  89. package/templates/src/components/ui/index.ts +100 -0
  90. package/templates/src/components/ui/popover.tsx +92 -0
  91. package/templates/src/components/ui/pressable-feedback.tsx +88 -0
  92. package/templates/src/components/ui/radio-group.tsx +153 -0
  93. package/templates/src/components/ui/scroll-shadow.tsx +108 -0
  94. package/templates/src/components/ui/select.tsx +165 -0
  95. package/templates/src/components/ui/skeleton-group.tsx +97 -0
  96. package/templates/src/components/ui/skeleton.tsx +87 -0
  97. package/templates/src/components/ui/spinner.tsx +87 -0
  98. package/templates/src/components/ui/surface.tsx +95 -0
  99. package/templates/src/components/ui/switch.tsx +124 -0
  100. package/templates/src/components/ui/tabs.tsx +154 -0
  101. package/templates/src/components/ui/text-field.tsx +106 -0
  102. package/templates/src/components/ui/toast.tsx +129 -0
  103. package/templates/src/contexts/.gitkeep +2 -0
  104. package/templates/src/core/clients/api/api.client.ts +113 -0
  105. package/templates/src/core/clients/api/index.ts +1 -0
  106. package/templates/src/core/clients/storage/index.ts +1 -0
  107. package/templates/src/core/clients/storage/storage.client.ts +121 -0
  108. package/templates/src/core/constants/index.ts +19 -0
  109. package/templates/src/core/core.ts +40 -0
  110. package/templates/src/core/index.ts +10 -0
  111. package/templates/src/global.css +87 -0
  112. package/templates/src/hooks/index.ts +6 -0
  113. package/templates/src/hooks/use-debounce.ts +23 -0
  114. package/templates/src/hooks/use-mounted.ts +21 -0
  115. package/templates/src/index.ts +28 -0
  116. package/templates/src/lib/index.ts +5 -0
  117. package/templates/src/lib/utils.ts +115 -0
  118. package/templates/src/modules/.gitkeep +6 -0
  119. package/templates/src/navigation/index.ts +8 -0
  120. package/templates/src/navigation/navigation-provider.tsx +36 -0
  121. package/templates/src/navigation/router.tsx +137 -0
  122. package/templates/src/providers/app.provider.tsx +29 -0
  123. package/templates/src/providers/index.ts +5 -0
  124. package/templates/src/routes/(tabs)/_layout.tsx +42 -0
  125. package/templates/src/routes/(tabs)/explore.tsx +161 -0
  126. package/templates/src/routes/(tabs)/home.tsx +138 -0
  127. package/templates/src/routes/(tabs)/profile.tsx +151 -0
  128. package/templates/src/routes/_layout.tsx +18 -0
  129. package/templates/src/routes/settings.tsx +194 -0
  130. package/templates/src/screens/auth/index.ts +6 -0
  131. package/templates/src/screens/auth/login.tsx +165 -0
  132. package/templates/src/screens/auth/register.tsx +203 -0
  133. package/templates/src/screens/home.tsx +204 -0
  134. package/templates/src/screens/index.ts +17 -0
  135. package/templates/src/screens/profile.tsx +210 -0
  136. package/templates/src/screens/settings.tsx +216 -0
  137. package/templates/src/screens/welcome.tsx +101 -0
  138. package/templates/src/styles/index.ts +103 -0
  139. package/templates/src/types/common.ts +71 -0
  140. package/templates/src/types/index.ts +5 -0
  141. package/templates/tsconfig.json +14 -0
  142. package/README.md +0 -15
  143. package/assets/favicon.ico +0 -0
  144. package/dist/commands/dev/dev.d.ts +0 -22
  145. package/dist/commands/dev/dev.js +0 -56
  146. package/dist/commands/dev/dev.js.map +0 -1
  147. package/dist/commands/init/init-teardown.d.ts +0 -9
  148. package/dist/commands/init/init-teardown.js +0 -27
  149. package/dist/commands/init/init-teardown.js.map +0 -1
  150. package/dist/index.d.ts +0 -1
  151. package/dist/index.js +0 -21
  152. package/dist/index.js.map +0 -1
  153. package/dist/modules/dev/dev-menu/keyboard-handler.d.ts +0 -21
  154. package/dist/modules/dev/dev-menu/keyboard-handler.js +0 -139
  155. package/dist/modules/dev/dev-menu/keyboard-handler.js.map +0 -1
  156. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.d.ts +0 -18
  157. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.js +0 -106
  158. package/dist/modules/dev/dev-menu/open-debugger-keyboard-handler.js.map +0 -1
  159. package/dist/modules/dev/dev-server/cdp/cdp.adapter.d.ts +0 -6
  160. package/dist/modules/dev/dev-server/cdp/cdp.adapter.js +0 -13
  161. package/dist/modules/dev/dev-server/cdp/cdp.adapter.js.map +0 -1
  162. package/dist/modules/dev/dev-server/cdp/index.d.ts +0 -2
  163. package/dist/modules/dev/dev-server/cdp/index.js +0 -19
  164. package/dist/modules/dev/dev-server/cdp/index.js.map +0 -1
  165. package/dist/modules/dev/dev-server/cdp/types.d.ts +0 -107
  166. package/dist/modules/dev/dev-server/cdp/types.js +0 -3
  167. package/dist/modules/dev/dev-server/cdp/types.js.map +0 -1
  168. package/dist/modules/dev/dev-server/dev-server-checker.d.ts +0 -22
  169. package/dist/modules/dev/dev-server/dev-server-checker.js +0 -73
  170. package/dist/modules/dev/dev-server/dev-server-checker.js.map +0 -1
  171. package/dist/modules/dev/dev-server/dev-server.d.ts +0 -74
  172. package/dist/modules/dev/dev-server/dev-server.js +0 -272
  173. package/dist/modules/dev/dev-server/dev-server.js.map +0 -1
  174. package/dist/modules/dev/dev-server/inspector/device.d.ts +0 -46
  175. package/dist/modules/dev/dev-server/inspector/device.event-reporter.d.ts +0 -37
  176. package/dist/modules/dev/dev-server/inspector/device.event-reporter.js +0 -166
  177. package/dist/modules/dev/dev-server/inspector/device.event-reporter.js.map +0 -1
  178. package/dist/modules/dev/dev-server/inspector/device.js +0 -578
  179. package/dist/modules/dev/dev-server/inspector/device.js.map +0 -1
  180. package/dist/modules/dev/dev-server/inspector/inspector.d.ts +0 -27
  181. package/dist/modules/dev/dev-server/inspector/inspector.js +0 -225
  182. package/dist/modules/dev/dev-server/inspector/inspector.js.map +0 -1
  183. package/dist/modules/dev/dev-server/inspector/types.d.ts +0 -156
  184. package/dist/modules/dev/dev-server/inspector/types.js +0 -3
  185. package/dist/modules/dev/dev-server/inspector/types.js.map +0 -1
  186. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.d.ts +0 -14
  187. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.js +0 -63
  188. package/dist/modules/dev/dev-server/inspector/wss/servers/debugger-connection.server.js.map +0 -1
  189. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.d.ts +0 -19
  190. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.js +0 -66
  191. package/dist/modules/dev/dev-server/inspector/wss/servers/device-connection.server.js.map +0 -1
  192. package/dist/modules/dev/dev-server/plugins/devtools.plugin.d.ts +0 -1
  193. package/dist/modules/dev/dev-server/plugins/devtools.plugin.js +0 -51
  194. package/dist/modules/dev/dev-server/plugins/devtools.plugin.js.map +0 -1
  195. package/dist/modules/dev/dev-server/plugins/favicon.plugin.d.ts +0 -1
  196. package/dist/modules/dev/dev-server/plugins/favicon.plugin.js +0 -19
  197. package/dist/modules/dev/dev-server/plugins/favicon.plugin.js.map +0 -1
  198. package/dist/modules/dev/dev-server/plugins/multipart.plugin.d.ts +0 -1
  199. package/dist/modules/dev/dev-server/plugins/multipart.plugin.js +0 -63
  200. package/dist/modules/dev/dev-server/plugins/multipart.plugin.js.map +0 -1
  201. package/dist/modules/dev/dev-server/plugins/systrace.plugin.d.ts +0 -1
  202. package/dist/modules/dev/dev-server/plugins/systrace.plugin.js +0 -29
  203. package/dist/modules/dev/dev-server/plugins/systrace.plugin.js.map +0 -1
  204. package/dist/modules/dev/dev-server/plugins/types.d.ts +0 -11
  205. package/dist/modules/dev/dev-server/plugins/types.js +0 -3
  206. package/dist/modules/dev/dev-server/plugins/types.js.map +0 -1
  207. package/dist/modules/dev/dev-server/plugins/wss/index.d.ts +0 -3
  208. package/dist/modules/dev/dev-server/plugins/wss/index.js +0 -20
  209. package/dist/modules/dev/dev-server/plugins/wss/index.js.map +0 -1
  210. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.d.ts +0 -37
  211. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.js +0 -67
  212. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-api.server.js.map +0 -1
  213. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.d.ts +0 -63
  214. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.js +0 -129
  215. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-debugger.server.js.map +0 -1
  216. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.d.ts +0 -32
  217. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.js +0 -76
  218. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-dev-client.server.js.map +0 -1
  219. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.d.ts +0 -75
  220. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.js +0 -199
  221. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-events.server.js.map +0 -1
  222. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.d.ts +0 -44
  223. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.js +0 -121
  224. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-hmr.server.js.map +0 -1
  225. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.d.ts +0 -135
  226. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.js +0 -364
  227. package/dist/modules/dev/dev-server/plugins/wss/servers/web-socket-message.server.js.map +0 -1
  228. package/dist/modules/dev/dev-server/plugins/wss/types.d.ts +0 -6
  229. package/dist/modules/dev/dev-server/plugins/wss/types.js +0 -3
  230. package/dist/modules/dev/dev-server/plugins/wss/types.js.map +0 -1
  231. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.d.ts +0 -32
  232. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.js +0 -58
  233. package/dist/modules/dev/dev-server/plugins/wss/web-socket-router.js.map +0 -1
  234. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.d.ts +0 -13
  235. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.js +0 -27
  236. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server-adapter.js.map +0 -1
  237. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.d.ts +0 -39
  238. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.js +0 -47
  239. package/dist/modules/dev/dev-server/plugins/wss/web-socket-server.js.map +0 -1
  240. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.d.ts +0 -24
  241. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.js +0 -56
  242. package/dist/modules/dev/dev-server/plugins/wss/wss.plugin.js.map +0 -1
  243. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.d.ts +0 -7
  244. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.js +0 -41
  245. package/dist/modules/dev/dev-server/sybmolicate/sybmolicate.plugin.js.map +0 -1
  246. package/dist/modules/dev/dev-server/sybmolicate/types.d.ts +0 -64
  247. package/dist/modules/dev/dev-server/sybmolicate/types.js +0 -3
  248. package/dist/modules/dev/dev-server/sybmolicate/types.js.map +0 -1
  249. package/dist/modules/dev/terminal/base.terminal.reporter.d.ts +0 -25
  250. package/dist/modules/dev/terminal/base.terminal.reporter.js +0 -79
  251. package/dist/modules/dev/terminal/base.terminal.reporter.js.map +0 -1
  252. package/dist/modules/dev/terminal/terminal.reporter.d.ts +0 -13
  253. package/dist/modules/dev/terminal/terminal.reporter.js +0 -83
  254. package/dist/modules/dev/terminal/terminal.reporter.js.map +0 -1
  255. package/dist/modules/dev/types.d.ts +0 -20
  256. package/dist/modules/dev/types.js +0 -3
  257. package/dist/modules/dev/types.js.map +0 -1
  258. package/dist/modules/dev/utils/log.d.ts +0 -23
  259. package/dist/modules/dev/utils/log.js +0 -74
  260. package/dist/modules/dev/utils/log.js.map +0 -1
@@ -0,0 +1,88 @@
1
+ /**
2
+ * PressableFeedback Component
3
+ *
4
+ * A pressable component with visual feedback animations.
5
+ *
6
+ * @example Basic Usage
7
+ * ```tsx
8
+ * <PressableFeedback onPress={() => console.log('Pressed!')}>
9
+ * <Text>Press Me</Text>
10
+ * </PressableFeedback>
11
+ * ```
12
+ *
13
+ * @example Custom Feedback
14
+ * ```tsx
15
+ * <PressableFeedback
16
+ * onPress={handlePress}
17
+ * pressedOpacity={0.7}
18
+ * >
19
+ * <Card>
20
+ * <CardBody>
21
+ * <Text>Pressable Card</Text>
22
+ * </CardBody>
23
+ * </Card>
24
+ * </PressableFeedback>
25
+ * ```
26
+ *
27
+ * @example Scale Effect
28
+ * ```tsx
29
+ * <PressableFeedback
30
+ * onPress={handlePress}
31
+ * pressedScale={0.95}
32
+ * >
33
+ * <View style={styles.item}>
34
+ * <Text>Scale on press</Text>
35
+ * </View>
36
+ * </PressableFeedback>
37
+ * ```
38
+ *
39
+ * @example List Item
40
+ * ```tsx
41
+ * {items.map(item => (
42
+ * <PressableFeedback
43
+ * key={item.id}
44
+ * onPress={() => handleItemPress(item)}
45
+ * >
46
+ * <View style={styles.listItem}>
47
+ * <Text>{item.title}</Text>
48
+ * <Icon name="chevron-right" />
49
+ * </View>
50
+ * </PressableFeedback>
51
+ * ))}
52
+ * ```
53
+ *
54
+ * @example Disabled State
55
+ * ```tsx
56
+ * <PressableFeedback
57
+ * onPress={handlePress}
58
+ * isDisabled
59
+ * >
60
+ * <Text>Disabled</Text>
61
+ * </PressableFeedback>
62
+ * ```
63
+ *
64
+ * @example With Long Press
65
+ * ```tsx
66
+ * <PressableFeedback
67
+ * onPress={handlePress}
68
+ * onLongPress={handleLongPress}
69
+ * >
70
+ * <Text>Press or long press</Text>
71
+ * </PressableFeedback>
72
+ * ```
73
+ */
74
+
75
+ import type { PressableFeedbackProps as HeroPressableFeedbackProps } from "heroui-native";
76
+ import { PressableFeedback as HeroPressableFeedback } from "heroui-native";
77
+ import { forwardRef } from "react";
78
+ import type { View as ViewRef } from "react-native";
79
+
80
+ const PressableFeedbackRoot = forwardRef<ViewRef, HeroPressableFeedbackProps>((props, ref) => {
81
+ return <HeroPressableFeedback ref={ref} {...props} />;
82
+ });
83
+ PressableFeedbackRoot.displayName = "PressableFeedback";
84
+
85
+ export const PressableFeedback = PressableFeedbackRoot;
86
+
87
+ // Re-export types for convenience
88
+ export type { HeroPressableFeedbackProps as PressableFeedbackProps };
@@ -0,0 +1,153 @@
1
+ /**
2
+ * RadioGroup Component
3
+ *
4
+ * A group of radio buttons for single selection from multiple options.
5
+ *
6
+ * @example Basic Usage
7
+ * ```tsx
8
+ * <RadioGroup label="Select an option">
9
+ * <Radio value="option1">Option 1</Radio>
10
+ * <Radio value="option2">Option 2</Radio>
11
+ * <Radio value="option3">Option 3</Radio>
12
+ * </RadioGroup>
13
+ * ```
14
+ *
15
+ * @example Controlled
16
+ * ```tsx
17
+ * const [selected, setSelected] = useState('option1');
18
+ *
19
+ * <RadioGroup
20
+ * label="Choose one"
21
+ * value={selected}
22
+ * onValueChange={setSelected}
23
+ * >
24
+ * <Radio value="option1">Option 1</Radio>
25
+ * <Radio value="option2">Option 2</Radio>
26
+ * </RadioGroup>
27
+ * ```
28
+ *
29
+ * @example Default Value
30
+ * ```tsx
31
+ * <RadioGroup
32
+ * label="Shipping Method"
33
+ * defaultValue="standard"
34
+ * >
35
+ * <Radio value="standard">Standard Shipping</Radio>
36
+ * <Radio value="express">Express Shipping</Radio>
37
+ * <Radio value="overnight">Overnight Shipping</Radio>
38
+ * </RadioGroup>
39
+ * ```
40
+ *
41
+ * @example Colors
42
+ * ```tsx
43
+ * <RadioGroup color="primary">
44
+ * <Radio value="a">Primary</Radio>
45
+ * </RadioGroup>
46
+ * <RadioGroup color="secondary">
47
+ * <Radio value="a">Secondary</Radio>
48
+ * </RadioGroup>
49
+ * <RadioGroup color="success">
50
+ * <Radio value="a">Success</Radio>
51
+ * </RadioGroup>
52
+ * ```
53
+ *
54
+ * @example Sizes
55
+ * ```tsx
56
+ * <RadioGroup size="sm">
57
+ * <Radio value="a">Small</Radio>
58
+ * </RadioGroup>
59
+ * <RadioGroup size="md">
60
+ * <Radio value="a">Medium</Radio>
61
+ * </RadioGroup>
62
+ * <RadioGroup size="lg">
63
+ * <Radio value="a">Large</Radio>
64
+ * </RadioGroup>
65
+ * ```
66
+ *
67
+ * @example Horizontal Orientation
68
+ * ```tsx
69
+ * <RadioGroup
70
+ * label="Select Size"
71
+ * orientation="horizontal"
72
+ * >
73
+ * <Radio value="s">S</Radio>
74
+ * <Radio value="m">M</Radio>
75
+ * <Radio value="l">L</Radio>
76
+ * <Radio value="xl">XL</Radio>
77
+ * </RadioGroup>
78
+ * ```
79
+ *
80
+ * @example With Description
81
+ * ```tsx
82
+ * <RadioGroup
83
+ * label="Plan"
84
+ * description="Choose your subscription plan"
85
+ * >
86
+ * <Radio value="free" description="Limited features">
87
+ * Free
88
+ * </Radio>
89
+ * <Radio value="pro" description="All features included">
90
+ * Pro
91
+ * </Radio>
92
+ * </RadioGroup>
93
+ * ```
94
+ *
95
+ * @example Disabled
96
+ * ```tsx
97
+ * <RadioGroup label="Options" isDisabled>
98
+ * <Radio value="a">Option A</Radio>
99
+ * <Radio value="b">Option B</Radio>
100
+ * </RadioGroup>
101
+ * ```
102
+ *
103
+ * @example Individual Disabled Radio
104
+ * ```tsx
105
+ * <RadioGroup label="Options">
106
+ * <Radio value="a">Option A</Radio>
107
+ * <Radio value="b" isDisabled>Option B (Unavailable)</Radio>
108
+ * <Radio value="c">Option C</Radio>
109
+ * </RadioGroup>
110
+ * ```
111
+ *
112
+ * @example Invalid State
113
+ * ```tsx
114
+ * <RadioGroup
115
+ * label="Required Selection"
116
+ * isRequired
117
+ * isInvalid={!hasSelection}
118
+ * errorMessage="Please select an option"
119
+ * >
120
+ * <Radio value="a">Option A</Radio>
121
+ * <Radio value="b">Option B</Radio>
122
+ * </RadioGroup>
123
+ * ```
124
+ */
125
+
126
+ import type {
127
+ RadioGroupProps as HeroRadioGroupProps,
128
+ RadioProps as HeroRadioProps,
129
+ } from "heroui-native";
130
+ import { Radio as HeroRadio, RadioGroup as HeroRadioGroup } from "heroui-native";
131
+ import { forwardRef } from "react";
132
+ import type { View as ViewRef } from "react-native";
133
+
134
+ // Radio component
135
+ const RadioRoot = forwardRef<ViewRef, HeroRadioProps>((props, ref) => {
136
+ return <HeroRadio ref={ref} {...props} />;
137
+ });
138
+ RadioRoot.displayName = "Radio";
139
+
140
+ // Radio Group component
141
+ const RadioGroupComponent = forwardRef<ViewRef, HeroRadioGroupProps>((props, ref) => {
142
+ return <HeroRadioGroup ref={ref} {...props} />;
143
+ });
144
+ RadioGroupComponent.displayName = "RadioGroup";
145
+
146
+ export const Radio = RadioRoot;
147
+ export const RadioGroup = RadioGroupComponent;
148
+
149
+ // Re-export types for convenience
150
+ export type {
151
+ HeroRadioProps as RadioProps,
152
+ HeroRadioGroupProps as RadioGroupProps,
153
+ };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * ScrollShadow Component
3
+ *
4
+ * A scroll container that displays shadow indicators when content is scrollable.
5
+ *
6
+ * @example Basic Usage
7
+ * ```tsx
8
+ * <ScrollShadow style={{ height: 200 }}>
9
+ * <Text>Scrollable content...</Text>
10
+ * <Text>More content...</Text>
11
+ * <Text>Even more content...</Text>
12
+ * </ScrollShadow>
13
+ * ```
14
+ *
15
+ * @example Horizontal Scroll
16
+ * ```tsx
17
+ * <ScrollShadow
18
+ * orientation="horizontal"
19
+ * style={{ width: '100%' }}
20
+ * >
21
+ * <View style={{ flexDirection: 'row', gap: 8 }}>
22
+ * {items.map(item => (
23
+ * <Card key={item.id} style={{ width: 200 }}>
24
+ * <Text>{item.title}</Text>
25
+ * </Card>
26
+ * ))}
27
+ * </View>
28
+ * </ScrollShadow>
29
+ * ```
30
+ *
31
+ * @example Custom Shadow Size
32
+ * ```tsx
33
+ * <ScrollShadow
34
+ * size={40}
35
+ * style={{ height: 300 }}
36
+ * >
37
+ * <Text>Content with larger shadows</Text>
38
+ * </ScrollShadow>
39
+ * ```
40
+ *
41
+ * @example Hide Scroll Indicator
42
+ * ```tsx
43
+ * <ScrollShadow
44
+ * hideScrollBar
45
+ * style={{ height: 200 }}
46
+ * >
47
+ * <Text>No visible scrollbar</Text>
48
+ * </ScrollShadow>
49
+ * ```
50
+ *
51
+ * @example In a Card
52
+ * ```tsx
53
+ * <Card>
54
+ * <CardHeader>
55
+ * <Text>Long List</Text>
56
+ * </CardHeader>
57
+ * <ScrollShadow style={{ maxHeight: 300 }}>
58
+ * <CardBody>
59
+ * {items.map(item => (
60
+ * <Text key={item.id}>{item.title}</Text>
61
+ * ))}
62
+ * </CardBody>
63
+ * </ScrollShadow>
64
+ * </Card>
65
+ * ```
66
+ *
67
+ * @example With Offset
68
+ * ```tsx
69
+ * <ScrollShadow
70
+ * offset={20}
71
+ * style={{ height: 200 }}
72
+ * >
73
+ * <Text>Content with offset shadow</Text>
74
+ * </ScrollShadow>
75
+ * ```
76
+ *
77
+ * @example Visibility Control
78
+ * ```tsx
79
+ * <ScrollShadow
80
+ * visibility="top"
81
+ * style={{ height: 200 }}
82
+ * >
83
+ * <Text>Only top shadow visible</Text>
84
+ * </ScrollShadow>
85
+ *
86
+ * <ScrollShadow
87
+ * visibility="bottom"
88
+ * style={{ height: 200 }}
89
+ * >
90
+ * <Text>Only bottom shadow visible</Text>
91
+ * </ScrollShadow>
92
+ * ```
93
+ */
94
+
95
+ import type { ScrollShadowProps as HeroScrollShadowProps } from "heroui-native";
96
+ import { ScrollShadow as HeroScrollShadow } from "heroui-native";
97
+ import { forwardRef } from "react";
98
+ import type { View as ViewRef } from "react-native";
99
+
100
+ const ScrollShadowRoot = forwardRef<ViewRef, HeroScrollShadowProps>((props, ref) => {
101
+ return <HeroScrollShadow ref={ref} {...props} />;
102
+ });
103
+ ScrollShadowRoot.displayName = "ScrollShadow";
104
+
105
+ export const ScrollShadow = ScrollShadowRoot;
106
+
107
+ // Re-export types for convenience
108
+ export type { HeroScrollShadowProps as ScrollShadowProps };
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Select Component
3
+ *
4
+ * A dropdown select component for choosing from a list of options.
5
+ *
6
+ * @example Basic Usage
7
+ * ```tsx
8
+ * <Select label="Country">
9
+ * <SelectItem key="us">United States</SelectItem>
10
+ * <SelectItem key="uk">United Kingdom</SelectItem>
11
+ * <SelectItem key="ca">Canada</SelectItem>
12
+ * </Select>
13
+ * ```
14
+ *
15
+ * @example Controlled
16
+ * ```tsx
17
+ * const [value, setValue] = useState(new Set(['us']));
18
+ *
19
+ * <Select
20
+ * label="Country"
21
+ * selectedKeys={value}
22
+ * onSelectionChange={setValue}
23
+ * >
24
+ * <SelectItem key="us">United States</SelectItem>
25
+ * <SelectItem key="uk">United Kingdom</SelectItem>
26
+ * </Select>
27
+ * ```
28
+ *
29
+ * @example With Placeholder
30
+ * ```tsx
31
+ * <Select
32
+ * label="Status"
33
+ * placeholder="Select a status"
34
+ * >
35
+ * <SelectItem key="active">Active</SelectItem>
36
+ * <SelectItem key="inactive">Inactive</SelectItem>
37
+ * <SelectItem key="pending">Pending</SelectItem>
38
+ * </Select>
39
+ * ```
40
+ *
41
+ * @example With Description
42
+ * ```tsx
43
+ * <Select
44
+ * label="Plan"
45
+ * description="Choose your subscription plan"
46
+ * >
47
+ * <SelectItem key="free" description="Basic features">
48
+ * Free
49
+ * </SelectItem>
50
+ * <SelectItem key="pro" description="All features">
51
+ * Pro
52
+ * </SelectItem>
53
+ * </Select>
54
+ * ```
55
+ *
56
+ * @example Required
57
+ * ```tsx
58
+ * <Select
59
+ * label="Category"
60
+ * isRequired
61
+ * >
62
+ * <SelectItem key="tech">Technology</SelectItem>
63
+ * <SelectItem key="health">Health</SelectItem>
64
+ * </Select>
65
+ * ```
66
+ *
67
+ * @example Disabled
68
+ * ```tsx
69
+ * <Select
70
+ * label="Disabled Select"
71
+ * isDisabled
72
+ * >
73
+ * <SelectItem key="a">Option A</SelectItem>
74
+ * </Select>
75
+ * ```
76
+ *
77
+ * @example Disabled Items
78
+ * ```tsx
79
+ * <Select label="Options">
80
+ * <SelectItem key="a">Available</SelectItem>
81
+ * <SelectItem key="b" isDisabled>Unavailable</SelectItem>
82
+ * <SelectItem key="c">Available</SelectItem>
83
+ * </Select>
84
+ * ```
85
+ *
86
+ * @example Invalid State
87
+ * ```tsx
88
+ * <Select
89
+ * label="Required Field"
90
+ * isInvalid
91
+ * errorMessage="Please select an option"
92
+ * >
93
+ * <SelectItem key="a">Option A</SelectItem>
94
+ * <SelectItem key="b">Option B</SelectItem>
95
+ * </Select>
96
+ * ```
97
+ *
98
+ * @example Variants
99
+ * ```tsx
100
+ * <Select variant="flat" label="Flat">...</Select>
101
+ * <Select variant="bordered" label="Bordered">...</Select>
102
+ * <Select variant="faded" label="Faded">...</Select>
103
+ * <Select variant="underlined" label="Underlined">...</Select>
104
+ * ```
105
+ *
106
+ * @example Sizes
107
+ * ```tsx
108
+ * <Select size="sm" label="Small">...</Select>
109
+ * <Select size="md" label="Medium">...</Select>
110
+ * <Select size="lg" label="Large">...</Select>
111
+ * ```
112
+ *
113
+ * @example With Start Content
114
+ * ```tsx
115
+ * <Select
116
+ * label="Select Country"
117
+ * startContent={<GlobeIcon />}
118
+ * >
119
+ * <SelectItem key="us" startContent={<UsFlag />}>
120
+ * United States
121
+ * </SelectItem>
122
+ * </Select>
123
+ * ```
124
+ *
125
+ * @example Multiple Selection
126
+ * ```tsx
127
+ * <Select
128
+ * label="Tags"
129
+ * selectionMode="multiple"
130
+ * >
131
+ * <SelectItem key="react">React</SelectItem>
132
+ * <SelectItem key="vue">Vue</SelectItem>
133
+ * <SelectItem key="angular">Angular</SelectItem>
134
+ * </Select>
135
+ * ```
136
+ */
137
+
138
+ import type {
139
+ SelectItemProps as HeroSelectItemProps,
140
+ SelectProps as HeroSelectProps,
141
+ } from "heroui-native";
142
+ import { Select as HeroSelect, SelectItem as HeroSelectItem } from "heroui-native";
143
+ import { forwardRef } from "react";
144
+ import type { View as ViewRef } from "react-native";
145
+
146
+ // Select component
147
+ const SelectRoot = forwardRef<ViewRef, HeroSelectProps>((props, ref) => {
148
+ return <HeroSelect ref={ref} {...props} />;
149
+ });
150
+ SelectRoot.displayName = "Select";
151
+
152
+ // Select Item component
153
+ const SelectItemComponent = forwardRef<ViewRef, HeroSelectItemProps>((props, ref) => {
154
+ return <HeroSelectItem ref={ref} {...props} />;
155
+ });
156
+ SelectItemComponent.displayName = "SelectItem";
157
+
158
+ export const Select = SelectRoot;
159
+ export const SelectItem = SelectItemComponent;
160
+
161
+ // Re-export types for convenience
162
+ export type {
163
+ HeroSelectProps as SelectProps,
164
+ HeroSelectItemProps as SelectItemProps,
165
+ };
@@ -0,0 +1,97 @@
1
+ /**
2
+ * SkeletonGroup Component
3
+ *
4
+ * A container for grouping multiple skeletons with coordinated loading states.
5
+ *
6
+ * @example Basic Usage
7
+ * ```tsx
8
+ * <SkeletonGroup isLoaded={!isLoading}>
9
+ * <Skeleton style={{ width: 200, height: 20 }} />
10
+ * <Skeleton style={{ width: 150, height: 20 }} />
11
+ * <Skeleton style={{ width: 180, height: 20 }} />
12
+ * </SkeletonGroup>
13
+ * ```
14
+ *
15
+ * @example User Profile
16
+ * ```tsx
17
+ * <SkeletonGroup isLoaded={!isLoading}>
18
+ * <View style={{ alignItems: 'center', gap: 12 }}>
19
+ * <Skeleton style={{ width: 80, height: 80, borderRadius: 40 }} />
20
+ * <Skeleton style={{ width: 120, height: 24 }} />
21
+ * <Skeleton style={{ width: 200, height: 16 }} />
22
+ * </View>
23
+ * </SkeletonGroup>
24
+ * ```
25
+ *
26
+ * @example Card Loading State
27
+ * ```tsx
28
+ * <Card>
29
+ * <CardBody>
30
+ * <SkeletonGroup isLoaded={!isLoading}>
31
+ * <View style={{ flexDirection: 'row', gap: 12 }}>
32
+ * <Skeleton style={{ width: 48, height: 48, borderRadius: 24 }} />
33
+ * <View style={{ flex: 1, gap: 8 }}>
34
+ * <Skeleton style={{ width: '80%', height: 16 }} />
35
+ * <Skeleton style={{ width: '60%', height: 14 }} />
36
+ * </View>
37
+ * </View>
38
+ * </SkeletonGroup>
39
+ * </CardBody>
40
+ * </Card>
41
+ * ```
42
+ *
43
+ * @example List Loading State
44
+ * ```tsx
45
+ * <SkeletonGroup isLoaded={!isLoading}>
46
+ * {[1, 2, 3, 4, 5].map(i => (
47
+ * <View key={i} style={{ padding: 12 }}>
48
+ * <Skeleton style={{ width: '100%', height: 60 }} />
49
+ * </View>
50
+ * ))}
51
+ * </SkeletonGroup>
52
+ * ```
53
+ *
54
+ * @example Staggered Animation
55
+ * ```tsx
56
+ * <SkeletonGroup
57
+ * isLoaded={!isLoading}
58
+ * disableAnimation={false}
59
+ * >
60
+ * <Skeleton style={{ width: '90%', height: 16 }} />
61
+ * <Skeleton style={{ width: '75%', height: 16, marginTop: 8 }} />
62
+ * <Skeleton style={{ width: '85%', height: 16, marginTop: 8 }} />
63
+ * </SkeletonGroup>
64
+ * ```
65
+ *
66
+ * @example With Real Content
67
+ * ```tsx
68
+ * <SkeletonGroup isLoaded={data !== undefined}>
69
+ * {data ? (
70
+ * <View>
71
+ * <Text>{data.title}</Text>
72
+ * <Text>{data.description}</Text>
73
+ * </View>
74
+ * ) : (
75
+ * <View>
76
+ * <Skeleton style={{ width: 200, height: 24 }} />
77
+ * <Skeleton style={{ width: 300, height: 16, marginTop: 8 }} />
78
+ * </View>
79
+ * )}
80
+ * </SkeletonGroup>
81
+ * ```
82
+ */
83
+
84
+ import type { SkeletonGroupProps as HeroSkeletonGroupProps } from "heroui-native";
85
+ import { SkeletonGroup as HeroSkeletonGroup } from "heroui-native";
86
+ import { forwardRef } from "react";
87
+ import type { View as ViewRef } from "react-native";
88
+
89
+ const SkeletonGroupRoot = forwardRef<ViewRef, HeroSkeletonGroupProps>((props, ref) => {
90
+ return <HeroSkeletonGroup ref={ref} {...props} />;
91
+ });
92
+ SkeletonGroupRoot.displayName = "SkeletonGroup";
93
+
94
+ export const SkeletonGroup = SkeletonGroupRoot;
95
+
96
+ // Re-export types for convenience
97
+ export type { HeroSkeletonGroupProps as SkeletonGroupProps };
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Skeleton Component
3
+ *
4
+ * A placeholder loading component that mimics content shapes.
5
+ *
6
+ * @example Basic Usage
7
+ * ```tsx
8
+ * <Skeleton style={{ width: 200, height: 20 }} />
9
+ * ```
10
+ *
11
+ * @example Content Placeholder
12
+ * ```tsx
13
+ * {isLoading ? (
14
+ * <Skeleton style={{ width: '100%', height: 40 }} />
15
+ * ) : (
16
+ * <Text>{data.title}</Text>
17
+ * )}
18
+ * ```
19
+ *
20
+ * @example Card Skeleton
21
+ * ```tsx
22
+ * <Card>
23
+ * <CardBody>
24
+ * <Skeleton style={{ width: 50, height: 50, borderRadius: 25 }} />
25
+ * <View style={{ marginTop: 8 }}>
26
+ * <Skeleton style={{ width: '80%', height: 16 }} />
27
+ * <Skeleton style={{ width: '60%', height: 16, marginTop: 4 }} />
28
+ * </View>
29
+ * </CardBody>
30
+ * </Card>
31
+ * ```
32
+ *
33
+ * @example List Skeleton
34
+ * ```tsx
35
+ * {[1, 2, 3].map(i => (
36
+ * <View key={i} style={{ flexDirection: 'row', gap: 12, padding: 8 }}>
37
+ * <Skeleton style={{ width: 48, height: 48, borderRadius: 24 }} />
38
+ * <View style={{ flex: 1 }}>
39
+ * <Skeleton style={{ width: '70%', height: 16 }} />
40
+ * <Skeleton style={{ width: '50%', height: 14, marginTop: 4 }} />
41
+ * </View>
42
+ * </View>
43
+ * ))}
44
+ * ```
45
+ *
46
+ * @example Profile Skeleton
47
+ * ```tsx
48
+ * <View style={{ alignItems: 'center', gap: 12 }}>
49
+ * <Skeleton style={{ width: 80, height: 80, borderRadius: 40 }} />
50
+ * <Skeleton style={{ width: 120, height: 20 }} />
51
+ * <Skeleton style={{ width: 200, height: 14 }} />
52
+ * </View>
53
+ * ```
54
+ *
55
+ * @example Without Animation
56
+ * ```tsx
57
+ * <Skeleton
58
+ * isLoaded={!isLoading}
59
+ * style={{ width: 200, height: 20 }}
60
+ * >
61
+ * <Text>Content when loaded</Text>
62
+ * </Skeleton>
63
+ * ```
64
+ *
65
+ * @example Custom Animation
66
+ * ```tsx
67
+ * <Skeleton
68
+ * disableAnimation={false}
69
+ * style={{ width: 200, height: 20 }}
70
+ * />
71
+ * ```
72
+ */
73
+
74
+ import type { SkeletonProps as HeroSkeletonProps } from "heroui-native";
75
+ import { Skeleton as HeroSkeleton } from "heroui-native";
76
+ import { forwardRef } from "react";
77
+ import type { View as ViewRef } from "react-native";
78
+
79
+ const SkeletonRoot = forwardRef<ViewRef, HeroSkeletonProps>((props, ref) => {
80
+ return <HeroSkeleton ref={ref} {...props} />;
81
+ });
82
+ SkeletonRoot.displayName = "Skeleton";
83
+
84
+ export const Skeleton = SkeletonRoot;
85
+
86
+ // Re-export types for convenience
87
+ export type { HeroSkeletonProps as SkeletonProps };