create-disposabl-app 0.0.4 → 0.1.1

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 (399) hide show
  1. package/dist/index.js +490 -105
  2. package/dist/templates/default/LICENSE +21 -0
  3. package/dist/templates/default/apps/blog/package.json +1 -0
  4. package/dist/templates/default/apps/changelog/package.json +1 -0
  5. package/dist/templates/default/apps/desktop/.oxfmtrc.json +5 -0
  6. package/dist/templates/default/apps/desktop/.oxlintrc.json +6 -0
  7. package/dist/templates/default/apps/desktop/README.md +58 -0
  8. package/dist/templates/default/apps/desktop/forge.config.mts +90 -0
  9. package/dist/templates/default/apps/desktop/index.html +12 -0
  10. package/dist/templates/default/apps/desktop/package.json +55 -0
  11. package/dist/templates/default/apps/desktop/src/declarations.d.ts +2 -0
  12. package/dist/templates/default/apps/desktop/src/index.css +8 -0
  13. package/dist/templates/default/apps/desktop/src/main.ts +58 -0
  14. package/dist/templates/default/apps/desktop/src/preload.ts +3 -0
  15. package/dist/templates/default/apps/desktop/src/renderer.ts +19 -0
  16. package/dist/templates/default/apps/desktop/tsconfig.json +14 -0
  17. package/dist/templates/default/apps/desktop/vite.main.config.mts +4 -0
  18. package/dist/templates/default/apps/desktop/vite.preload.config.mts +4 -0
  19. package/dist/templates/default/apps/desktop/vite.renderer.config.mts +4 -0
  20. package/dist/templates/default/apps/docs/package.json +1 -0
  21. package/dist/templates/default/apps/mobile/.agents/skills/agent-device/SKILL.md +22 -0
  22. package/dist/templates/default/apps/mobile/.agents/skills/android-emulator/SKILL.md +32 -0
  23. package/dist/templates/default/apps/mobile/.agents/skills/dogfood/SKILL.md +27 -0
  24. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/SKILL.md +176 -0
  25. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/agents/openai.yaml +4 -0
  26. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/app-store-metadata.md +497 -0
  27. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/ios-app-store.md +376 -0
  28. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/native-ios.md +167 -0
  29. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/play-store.md +244 -0
  30. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/testflight.md +62 -0
  31. package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/workflows.md +120 -0
  32. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/SKILL.md +431 -0
  33. package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/agents/openai.yaml +4 -0
  34. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/SKILL.md +46 -0
  35. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/agents/openai.yaml +4 -0
  36. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/metrics.md +98 -0
  37. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/queries.md +444 -0
  38. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/setup.md +529 -0
  39. package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/third-party.md +136 -0
  40. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/SKILL.md +237 -0
  41. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/agents/openai.yaml +4 -0
  42. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/controllers.md +139 -0
  43. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/logs-and-crashes.md +101 -0
  44. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/run-your-app.md +256 -0
  45. package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/troubleshooting.md +56 -0
  46. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/SKILL.md +146 -0
  47. package/dist/templates/default/apps/mobile/.agents/skills/eas-update/agents/openai.yaml +4 -0
  48. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/SKILL.md +238 -0
  49. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/agents/openai.yaml +4 -0
  50. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  51. package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  52. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/SKILL.md +99 -0
  53. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/agents/openai.yaml +4 -0
  54. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/fetch.js +109 -0
  55. package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/package.json +6 -0
  56. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/LICENSE +21 -0
  57. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/RECIPES.md +385 -0
  58. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/SKILL.md +274 -0
  59. package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/agents/openai.yaml +4 -0
  60. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/SKILL.md +290 -0
  61. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/agents/openai.yaml +4 -0
  62. package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/references/native-module.md +96 -0
  63. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/SKILL.md +69 -0
  64. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/agents/openai.yaml +4 -0
  65. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-integrated.md +551 -0
  66. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-isolated.md +449 -0
  67. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/comparison.md +63 -0
  68. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/feature-integration.md +163 -0
  69. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/troubleshooting.md +88 -0
  70. package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/version-compatibility.md +40 -0
  71. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/SKILL.md +478 -0
  72. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/agents/openai.yaml +4 -0
  73. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
  74. package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
  75. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/SKILL.md +376 -0
  76. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/agents/openai.yaml +4 -0
  77. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/audit.md +190 -0
  78. package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/native-slop.md +74 -0
  79. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/SKILL.md +184 -0
  80. package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/agents/openai.yaml +4 -0
  81. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/SKILL.md +425 -0
  82. package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/agents/openai.yaml +4 -0
  83. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/SKILL.md +106 -0
  84. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/agents/openai.yaml +4 -0
  85. package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/references/catalog.md +105 -0
  86. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/SKILL.md +124 -0
  87. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/agents/openai.yaml +4 -0
  88. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/compatibility.md +130 -0
  89. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/example.md +212 -0
  90. package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/migration-map.md +457 -0
  91. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/SKILL.md +151 -0
  92. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/agents/openai.yaml +4 -0
  93. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/config-plugin.md +90 -0
  94. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/create-expo-module.md +206 -0
  95. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/lifecycle.md +127 -0
  96. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/module-config.md +48 -0
  97. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-module.md +286 -0
  98. package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-view.md +171 -0
  99. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/SKILL.md +201 -0
  100. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/agents/openai.yaml +4 -0
  101. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/controls.md +231 -0
  102. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/gradients.md +106 -0
  103. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/icons.md +232 -0
  104. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/media.md +193 -0
  105. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/storage.md +121 -0
  106. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/visual-effects.md +198 -0
  107. package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/webgpu-three.md +605 -0
  108. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/SKILL.md +120 -0
  109. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/agents/openai.yaml +4 -0
  110. package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/references/launch-without-dev-menu.md +24 -0
  111. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/SKILL.md +114 -0
  112. package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/agents/openai.yaml +4 -0
  113. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/SKILL.md +240 -0
  114. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/agents/openai.yaml +4 -0
  115. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/form-sheet.md +253 -0
  116. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/route-structure.md +229 -0
  117. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/search.md +248 -0
  118. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/tabs.md +433 -0
  119. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/toolbar-and-headers.md +284 -0
  120. package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/zoom-transitions.md +158 -0
  121. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/SKILL.md +314 -0
  122. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/agents/visual-grader.md +52 -0
  123. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/design-rubric.md +45 -0
  124. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/runtime-matrix.md +34 -0
  125. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/check-static.sh +64 -0
  126. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
  127. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
  128. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
  129. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
  130. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
  131. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
  132. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
  133. package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
  134. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/SKILL.md +101 -0
  135. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/agents/openai.yaml +4 -0
  136. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/drop-in-replacements.md +27 -0
  137. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/jetpack-compose.md +73 -0
  138. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/swift-ui.md +73 -0
  139. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/universal.md +104 -0
  140. package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/scripts/list-components.js +193 -0
  141. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/SKILL.md +150 -0
  142. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/agents/openai.yaml +4 -0
  143. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
  144. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-video.md +160 -0
  145. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/native-tabs.md +124 -0
  146. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/new-architecture.md +79 -0
  147. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-19.md +79 -0
  148. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-compiler.md +59 -0
  149. package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
  150. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/SKILL.md +91 -0
  151. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/agents/openai.yaml +4 -0
  152. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/false-friends.md +119 -0
  153. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/native-patterns.md +39 -0
  154. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/run-as-goal.md +48 -0
  155. package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/verify-on-device.md +45 -0
  156. package/dist/templates/default/apps/mobile/.agents/skills/ios-simulator/SKILL.md +32 -0
  157. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/POWER.md +172 -0
  158. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/SKILL.md +238 -0
  159. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/agents/openai.yaml +4 -0
  160. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-app.md +208 -0
  161. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-js.md +264 -0
  162. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-barrel-exports.md +250 -0
  163. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-code-splitting.md +255 -0
  164. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-hermes-mmap.md +167 -0
  165. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-library-size.md +164 -0
  166. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-native-assets.md +208 -0
  167. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-r8-android.md +231 -0
  168. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-tree-shaking.md +215 -0
  169. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/bundle-treemap-source-map-explorer.png +0 -0
  170. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/controlled-textinput-pingpong.png +0 -0
  171. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/devtools-flamegraph.png +0 -0
  172. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/emerge-xray-ios.png +0 -0
  173. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/expo-atlas-treemap.png +0 -0
  174. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/flashlight-flatlist-vs-flashlist.png +0 -0
  175. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/fps-drop-graph.png +0 -0
  176. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/memory-heap-snapshot.png +0 -0
  177. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/tti-warm-start-diagram.png +0 -0
  178. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/view-hierarchy-flattening.png +0 -0
  179. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-instruments-templates.png +0 -0
  180. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-thread-view.png +0 -0
  181. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-animations-reanimated.md +273 -0
  182. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-atomic-state.md +190 -0
  183. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-bottomsheet.md +339 -0
  184. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-concurrent-react.md +238 -0
  185. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-lists-flatlist-flashlist.md +223 -0
  186. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-measure-fps.md +178 -0
  187. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-memory-leaks.md +168 -0
  188. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-profile-react.md +138 -0
  189. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-react-compiler.md +261 -0
  190. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-uncontrolled-components.md +219 -0
  191. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-android-16kb-alignment.md +114 -0
  192. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-measure-tti.md +221 -0
  193. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-leaks.md +206 -0
  194. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-patterns.md +240 -0
  195. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-platform-setup.md +112 -0
  196. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-profiling.md +140 -0
  197. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-sdks-over-polyfills.md +192 -0
  198. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-threading-model.md +230 -0
  199. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-turbo-modules.md +210 -0
  200. package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-view-flattening.md +180 -0
  201. package/dist/templates/default/apps/mobile/AGENTS.md +41 -0
  202. package/dist/templates/default/apps/mobile/app.json +38 -0
  203. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
  204. package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/grid.png +0 -0
  205. package/dist/templates/default/apps/mobile/assets/expo.icon/icon.json +40 -0
  206. package/dist/templates/default/apps/mobile/assets/images/android-icon-background.png +0 -0
  207. package/dist/templates/default/apps/mobile/assets/images/android-icon-foreground.png +0 -0
  208. package/dist/templates/default/apps/mobile/assets/images/android-icon-monochrome.png +0 -0
  209. package/dist/templates/default/apps/mobile/assets/images/icon.png +0 -0
  210. package/dist/templates/default/apps/mobile/assets/images/splash-icon.png +0 -0
  211. package/dist/templates/default/apps/mobile/eslint.config.js +10 -0
  212. package/dist/templates/default/apps/mobile/package.json +43 -0
  213. package/dist/templates/default/apps/mobile/skills-lock.json +185 -0
  214. package/dist/templates/default/apps/mobile/src/app/_layout.tsx +5 -0
  215. package/dist/templates/default/apps/mobile/src/app/index.tsx +17 -0
  216. package/dist/templates/default/apps/mobile/tsconfig.json +20 -0
  217. package/dist/templates/default/apps/web/.agents/skills/frontend-design/SKILL.md +71 -0
  218. package/dist/templates/default/apps/web/.agents/skills/web-design-guidelines/SKILL.md +39 -0
  219. package/dist/templates/default/apps/web/.env.example +3 -0
  220. package/dist/templates/default/apps/web/components.json +23 -0
  221. package/dist/templates/default/apps/web/eslint.config.ts +21 -0
  222. package/dist/templates/default/apps/web/package.json +39 -0
  223. package/dist/templates/default/apps/web/public/disposabl-logo.svg +8 -0
  224. package/dist/templates/default/apps/web/public/favicon.ico +0 -0
  225. package/dist/templates/default/apps/web/public/manifest.json +25 -0
  226. package/dist/templates/default/apps/web/skills-lock.json +17 -0
  227. package/dist/templates/default/apps/web/src/index.css +92 -0
  228. package/dist/templates/default/apps/web/src/routeTree.gen.ts +282 -0
  229. package/dist/templates/default/apps/web/src/router/__root.tsx +63 -0
  230. package/dist/templates/default/apps/web/src/router/_authenticated/dashboard.tsx +9 -0
  231. package/dist/templates/default/apps/web/src/router/_authenticated/todos/$id.tsx +27 -0
  232. package/dist/templates/default/apps/web/src/router/_authenticated/todos/index.tsx +33 -0
  233. package/dist/templates/default/apps/web/src/router/index.tsx +15 -0
  234. package/dist/templates/default/apps/web/src/router.tsx +20 -0
  235. package/dist/templates/default/apps/web/tsconfig.json +33 -0
  236. package/dist/templates/default/apps/web/tsr.config.json +6 -0
  237. package/dist/templates/default/apps/web/vite.config.ts +67 -0
  238. package/dist/templates/default/bun.lock +3932 -0
  239. package/dist/templates/default/bunfig.toml +5 -0
  240. package/dist/templates/default/disposabl.json +5 -0
  241. package/dist/templates/default/gitignore +10 -0
  242. package/dist/templates/default/package.json +31 -10
  243. package/dist/templates/default/packages/backend/.agents/skills/convex/SKILL.md +69 -0
  244. package/dist/templates/default/packages/backend/.agents/skills/convex-add/SKILL.md +26 -0
  245. package/dist/templates/default/packages/backend/.agents/skills/convex-advisor/SKILL.md +32 -0
  246. package/dist/templates/default/packages/backend/.agents/skills/convex-agent/SKILL.md +25 -0
  247. package/dist/templates/default/packages/backend/.agents/skills/convex-auth/SKILL.md +29 -0
  248. package/dist/templates/default/packages/backend/.agents/skills/convex-authz/SKILL.md +36 -0
  249. package/dist/templates/default/packages/backend/.agents/skills/convex-backup/SKILL.md +33 -0
  250. package/dist/templates/default/packages/backend/.agents/skills/convex-billing/SKILL.md +69 -0
  251. package/dist/templates/default/packages/backend/.agents/skills/convex-cost/SKILL.md +29 -0
  252. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/SKILL.md +325 -0
  253. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/agents/openai.yaml +14 -0
  254. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/assets/icon.svg +3 -0
  255. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/advanced-patterns.md +146 -0
  256. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/hybrid-components.md +38 -0
  257. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/local-components.md +39 -0
  258. package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/packaged-components.md +54 -0
  259. package/dist/templates/default/packages/backend/.agents/skills/convex-crons/SKILL.md +23 -0
  260. package/dist/templates/default/packages/backend/.agents/skills/convex-deploy-guard/SKILL.md +29 -0
  261. package/dist/templates/default/packages/backend/.agents/skills/convex-design/SKILL.md +30 -0
  262. package/dist/templates/default/packages/backend/.agents/skills/convex-docs/SKILL.md +31 -0
  263. package/dist/templates/default/packages/backend/.agents/skills/convex-domains/SKILL.md +26 -0
  264. package/dist/templates/default/packages/backend/.agents/skills/convex-env/SKILL.md +24 -0
  265. package/dist/templates/default/packages/backend/.agents/skills/convex-expert/SKILL.md +38 -0
  266. package/dist/templates/default/packages/backend/.agents/skills/convex-explain-app/SKILL.md +29 -0
  267. package/dist/templates/default/packages/backend/.agents/skills/convex-improve-convex-plugin/SKILL.md +24 -0
  268. package/dist/templates/default/packages/backend/.agents/skills/convex-insights/SKILL.md +32 -0
  269. package/dist/templates/default/packages/backend/.agents/skills/convex-launch-readiness/SKILL.md +35 -0
  270. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate/SKILL.md +23 -0
  271. package/dist/templates/default/packages/backend/.agents/skills/convex-migrate-rehearse/SKILL.md +31 -0
  272. package/dist/templates/default/packages/backend/.agents/skills/convex-monitor/SKILL.md +22 -0
  273. package/dist/templates/default/packages/backend/.agents/skills/convex-optimize/SKILL.md +26 -0
  274. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/SKILL.md +29 -0
  275. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/agents/openai.yaml +14 -0
  276. package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/assets/icon.svg +4 -0
  277. package/dist/templates/default/packages/backend/.agents/skills/convex-reviewer/SKILL.md +26 -0
  278. package/dist/templates/default/packages/backend/.agents/skills/convex-seed/SKILL.md +23 -0
  279. package/dist/templates/default/packages/backend/.agents/skills/convex-self-heal/SKILL.md +38 -0
  280. package/dist/templates/default/packages/backend/.agents/skills/convex-sentinel/SKILL.md +25 -0
  281. package/dist/templates/default/packages/backend/.agents/skills/convex-suggest/SKILL.md +27 -0
  282. package/dist/templates/default/packages/backend/.agents/skills/convex-test/SKILL.md +23 -0
  283. package/dist/templates/default/packages/backend/.agents/skills/convex-verify/SKILL.md +34 -0
  284. package/dist/templates/default/packages/backend/.prettierignore +4 -0
  285. package/dist/templates/default/packages/backend/AGENTS.md +18 -0
  286. package/dist/templates/default/packages/backend/CLAUDE.md +13 -0
  287. package/dist/templates/default/packages/backend/README.md +25 -0
  288. package/dist/templates/default/packages/backend/convex/_generated/ai/ai-files.state.json +6 -0
  289. package/dist/templates/default/packages/backend/convex/_generated/ai/guidelines.md +286 -0
  290. package/dist/templates/default/packages/backend/convex/_generated/api.d.ts +66 -0
  291. package/dist/templates/default/packages/backend/convex/_generated/api.js +23 -0
  292. package/dist/templates/default/packages/backend/convex/_generated/dataModel.d.ts +60 -0
  293. package/dist/templates/default/packages/backend/convex/_generated/server.d.ts +164 -0
  294. package/dist/templates/default/packages/backend/convex/_generated/server.js +101 -0
  295. package/dist/templates/default/packages/backend/convex/auth.config.ts +14 -0
  296. package/dist/templates/default/packages/backend/convex/auth.ts +15 -0
  297. package/dist/templates/default/packages/backend/convex/convex.config.ts +30 -0
  298. package/dist/templates/default/packages/backend/convex/http.ts +5 -0
  299. package/dist/templates/default/packages/backend/convex/mcp.ts +8 -0
  300. package/dist/templates/default/packages/backend/convex/schema.ts +10 -0
  301. package/dist/templates/default/packages/backend/convex/todos/index.ts +26 -0
  302. package/dist/templates/default/packages/backend/convex/todos/internal.ts +43 -0
  303. package/dist/templates/default/packages/backend/convex/tsconfig.json +27 -0
  304. package/dist/templates/default/packages/backend/convex/users.ts +20 -0
  305. package/dist/templates/default/packages/backend/eslint.config.mjs +62 -0
  306. package/dist/templates/default/packages/backend/package.json +36 -0
  307. package/dist/templates/default/packages/backend/skills-lock.json +203 -0
  308. package/dist/templates/default/packages/disposabl-kit/client/components/ui/accordion.tsx +77 -0
  309. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert-dialog.tsx +185 -0
  310. package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert.tsx +75 -0
  311. package/dist/templates/default/packages/disposabl-kit/client/components/ui/aspect-ratio.tsx +22 -0
  312. package/dist/templates/default/packages/disposabl-kit/client/components/ui/attachment.tsx +207 -0
  313. package/dist/templates/default/packages/disposabl-kit/client/components/ui/avatar.tsx +106 -0
  314. package/dist/templates/default/packages/disposabl-kit/client/components/ui/badge.tsx +51 -0
  315. package/dist/templates/default/packages/disposabl-kit/client/components/ui/breadcrumb.tsx +121 -0
  316. package/dist/templates/default/packages/disposabl-kit/client/components/ui/bubble.tsx +127 -0
  317. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button-group.tsx +87 -0
  318. package/dist/templates/default/packages/disposabl-kit/client/components/ui/button.tsx +57 -0
  319. package/dist/templates/default/packages/disposabl-kit/client/components/ui/calendar.tsx +241 -0
  320. package/dist/templates/default/packages/disposabl-kit/client/components/ui/card.tsx +102 -0
  321. package/dist/templates/default/packages/disposabl-kit/client/components/ui/carousel.tsx +239 -0
  322. package/dist/templates/default/packages/disposabl-kit/client/components/ui/chart.tsx +368 -0
  323. package/dist/templates/default/packages/disposabl-kit/client/components/ui/checkbox.tsx +27 -0
  324. package/dist/templates/default/packages/disposabl-kit/client/components/ui/code-block.tsx +243 -0
  325. package/dist/templates/default/packages/disposabl-kit/client/components/ui/collapsible.tsx +19 -0
  326. package/dist/templates/default/packages/disposabl-kit/client/components/ui/combobox.tsx +300 -0
  327. package/dist/templates/default/packages/disposabl-kit/client/components/ui/command.tsx +194 -0
  328. package/dist/templates/default/packages/disposabl-kit/client/components/ui/context-menu.tsx +271 -0
  329. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dialog.tsx +156 -0
  330. package/dist/templates/default/packages/disposabl-kit/client/components/ui/direction.tsx +4 -0
  331. package/dist/templates/default/packages/disposabl-kit/client/components/ui/drawer.tsx +224 -0
  332. package/dist/templates/default/packages/disposabl-kit/client/components/ui/dropdown-menu.tsx +269 -0
  333. package/dist/templates/default/packages/disposabl-kit/client/components/ui/empty.tsx +103 -0
  334. package/dist/templates/default/packages/disposabl-kit/client/components/ui/field.tsx +236 -0
  335. package/dist/templates/default/packages/disposabl-kit/client/components/ui/hover-card.tsx +50 -0
  336. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-group.tsx +158 -0
  337. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-otp.tsx +83 -0
  338. package/dist/templates/default/packages/disposabl-kit/client/components/ui/input.tsx +19 -0
  339. package/dist/templates/default/packages/disposabl-kit/client/components/ui/item.tsx +201 -0
  340. package/dist/templates/default/packages/disposabl-kit/client/components/ui/kbd.tsx +26 -0
  341. package/dist/templates/default/packages/disposabl-kit/client/components/ui/label.tsx +19 -0
  342. package/dist/templates/default/packages/disposabl-kit/client/components/ui/marker.tsx +70 -0
  343. package/dist/templates/default/packages/disposabl-kit/client/components/ui/menubar.tsx +284 -0
  344. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message-scroller.tsx +128 -0
  345. package/dist/templates/default/packages/disposabl-kit/client/components/ui/message.tsx +91 -0
  346. package/dist/templates/default/packages/disposabl-kit/client/components/ui/native-select.tsx +64 -0
  347. package/dist/templates/default/packages/disposabl-kit/client/components/ui/navigation-menu.tsx +170 -0
  348. package/dist/templates/default/packages/disposabl-kit/client/components/ui/pagination.tsx +133 -0
  349. package/dist/templates/default/packages/disposabl-kit/client/components/ui/popover.tsx +87 -0
  350. package/dist/templates/default/packages/disposabl-kit/client/components/ui/progress.tsx +82 -0
  351. package/dist/templates/default/packages/disposabl-kit/client/components/ui/questionnaire.tsx +330 -0
  352. package/dist/templates/default/packages/disposabl-kit/client/components/ui/radio-group.tsx +35 -0
  353. package/dist/templates/default/packages/disposabl-kit/client/components/ui/resizable.tsx +49 -0
  354. package/dist/templates/default/packages/disposabl-kit/client/components/ui/scroll-area.tsx +51 -0
  355. package/dist/templates/default/packages/disposabl-kit/client/components/ui/select.tsx +201 -0
  356. package/dist/templates/default/packages/disposabl-kit/client/components/ui/separator.tsx +22 -0
  357. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sheet.tsx +132 -0
  358. package/dist/templates/default/packages/disposabl-kit/client/components/ui/sidebar.tsx +723 -0
  359. package/dist/templates/default/packages/disposabl-kit/client/components/ui/skeleton.tsx +13 -0
  360. package/dist/templates/default/packages/disposabl-kit/client/components/ui/slider.tsx +51 -0
  361. package/dist/templates/default/packages/disposabl-kit/client/components/ui/spinner.tsx +16 -0
  362. package/dist/templates/default/packages/disposabl-kit/client/components/ui/switch.tsx +31 -0
  363. package/dist/templates/default/packages/disposabl-kit/client/components/ui/table.tsx +113 -0
  364. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tabs.tsx +81 -0
  365. package/dist/templates/default/packages/disposabl-kit/client/components/ui/textarea.tsx +17 -0
  366. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toast.tsx +229 -0
  367. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle-group.tsx +87 -0
  368. package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle.tsx +42 -0
  369. package/dist/templates/default/packages/disposabl-kit/client/components/ui/tooltip.tsx +65 -0
  370. package/dist/templates/default/packages/disposabl-kit/client/components/ui/trace.tsx +161 -0
  371. package/dist/templates/default/packages/disposabl-kit/client/hooks/use-mobile.ts +21 -0
  372. package/dist/templates/default/packages/disposabl-kit/client/lib/prerender.ts +89 -0
  373. package/dist/templates/default/packages/disposabl-kit/client/lib/return-to.ts +12 -0
  374. package/dist/templates/default/packages/disposabl-kit/client/lib/utils.ts +1 -0
  375. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/login.tsx +114 -0
  376. package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/signUp.tsx +120 -0
  377. package/dist/templates/default/packages/disposabl-kit/client/routes/_authenticated/route.tsx +38 -0
  378. package/dist/templates/default/packages/disposabl-kit/client/routes/consent.tsx +137 -0
  379. package/dist/templates/default/packages/disposabl-kit/client/routes/route.tsx +30 -0
  380. package/dist/templates/default/packages/disposabl-kit/client/styles/globals.css +60 -0
  381. package/dist/templates/default/packages/disposabl-kit/client/vite.config.ts +32 -0
  382. package/dist/templates/default/packages/disposabl-kit/components.json +23 -0
  383. package/dist/templates/default/packages/disposabl-kit/eslint.config.js +21 -0
  384. package/dist/templates/default/packages/disposabl-kit/package.json +60 -0
  385. package/dist/templates/default/packages/disposabl-kit/server/http.ts +86 -0
  386. package/dist/templates/default/packages/disposabl-kit/server/lib/functions.ts +40 -0
  387. package/dist/templates/default/packages/disposabl-kit/server/lib/platforms.ts +20 -0
  388. package/dist/templates/default/packages/disposabl-kit/server/lib/static-routes.ts +56 -0
  389. package/dist/templates/default/packages/disposabl-kit/tsconfig.json +17 -0
  390. package/dist/templates/default/patches/@convex-dev%2Fauth@2.0.0-beta.0.patch +310 -0
  391. package/dist/templates/default/patches/@convex-dev%2Fstatic-hosting@0.2.1.patch +187 -0
  392. package/dist/templates/default/tsconfig.json +9 -0
  393. package/dist/templates/default/turbo.json +51 -0
  394. package/package.json +21 -5
  395. package/README.md +0 -34
  396. package/dist/templates/default/README.md +0 -12
  397. package/dist/templates/default/docs/index.html +0 -8
  398. package/dist/templates/default/eslint.config.js +0 -18
  399. package/dist/templates/default/index.ts +0 -14
@@ -0,0 +1,286 @@
1
+ # Native Module DSL Reference
2
+
3
+ Swift is shown as the primary language. Kotlin follows the same DSL structure (see SKILL.md for both). Kotlin-specific syntax is noted where it meaningfully differs.
4
+
5
+ ## Name
6
+
7
+ Sets the module identifier used in JavaScript.
8
+
9
+ ```swift
10
+ Name("MyModule")
11
+ ```
12
+
13
+ ## Constant
14
+
15
+ Computed once on first access, then cached.
16
+
17
+ ```swift
18
+ Constant("PI") { 3.14159 }
19
+ ```
20
+
21
+ ## Function (Synchronous)
22
+
23
+ Blocks the JS thread until completion. Supports up to 8 arguments.
24
+
25
+ ```swift
26
+ Function("add") { (a: Int, b: Int) -> Int in
27
+ return a + b
28
+ }
29
+ ```
30
+
31
+ ## AsyncFunction
32
+
33
+ Returns a Promise. Runs on a background thread by default.
34
+
35
+ ```swift
36
+ AsyncFunction("fetchData") { (url: URL) -> String in
37
+ let data = try Data(contentsOf: url)
38
+ return String(data: data, encoding: .utf8) ?? ""
39
+ }
40
+
41
+ // Force main queue execution
42
+ AsyncFunction("updateUI") { () -> Void in
43
+ // UI work
44
+ }.runOnQueue(.main)
45
+ ```
46
+
47
+ **Kotlin differences:**
48
+
49
+ ```kotlin
50
+ // Supports Kotlin coroutines
51
+ AsyncFunction("fetchData") Coroutine { url: java.net.URL ->
52
+ withContext(Dispatchers.IO) {
53
+ url.readText()
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Property
59
+
60
+ Getter/setter for JS object properties.
61
+
62
+ ```swift
63
+ // Read-only
64
+ Property("version") { "1.0.0" }
65
+
66
+ // Read-write
67
+ Property("volume")
68
+ .get { () -> Float in self.volume }
69
+ .set { (newValue: Float) in self.volume = newValue }
70
+ ```
71
+
72
+ ## Events
73
+
74
+ Declares events the module can send to JS. Must be declared before using `sendEvent`.
75
+
76
+ ```swift
77
+ // Declaration
78
+ Events("onChange", "onError")
79
+
80
+ // Sending from native (Swift)
81
+ sendEvent("onChange", ["value": newValue])
82
+ ```
83
+
84
+ **Kotlin difference** — uses `bundleOf`:
85
+
86
+ ```kotlin
87
+ sendEvent("onChange", bundleOf("value" to newValue))
88
+ ```
89
+
90
+ **JS subscription:**
91
+
92
+ ```typescript
93
+ import { useEvent } from "expo";
94
+ import MyModule from "./MyModule";
95
+
96
+ // Hook-based (recommended)
97
+ const event = useEvent(MyModule, "onChange");
98
+
99
+ // Manual subscription
100
+ const subscription = MyModule.addListener("onChange", (event) => {
101
+ console.log(event.value);
102
+ });
103
+ // Clean up: subscription.remove()
104
+ ```
105
+
106
+ ### OnStartObserving / OnStopObserving
107
+
108
+ Called when the first listener attaches / last listener detaches. Can be scoped to specific events.
109
+
110
+ ```swift
111
+ OnStartObserving("onChange") {
112
+ // Start producing events
113
+ }
114
+
115
+ OnStopObserving("onChange") {
116
+ // Stop producing events
117
+ }
118
+ ```
119
+
120
+ ---
121
+
122
+ ## Type System
123
+
124
+ ### Primitives
125
+
126
+ | Swift | Kotlin | JS |
127
+ |-------|--------|----|
128
+ | `Bool` | `Boolean` | `boolean` |
129
+ | `Int`, `Int32` | `Int` | `number` |
130
+ | `Int64` | `Long` | `number` |
131
+ | `Float`, `Float32` | `Float` | `number` |
132
+ | `Double` | `Double` | `number` |
133
+ | `String` | `String` | `string` |
134
+ | `URL` | `java.net.URL` / `android.net.Uri` | `string` |
135
+ | `CGPoint` | - | `{ x, y }` |
136
+ | `CGSize` | - | `{ width, height }` |
137
+ | `CGRect` | - | `{ x, y, width, height }` |
138
+ | `UIColor` / `CGColor` | `android.graphics.Color` | `string` (ProcessedColorValue) |
139
+ | `Data` | `kotlin.ByteArray` | `Uint8Array` |
140
+
141
+ ### Records (Struct-like types)
142
+
143
+ ```swift
144
+ struct UserRecord: Record {
145
+ @Field var name: String = ""
146
+ @Field var age: Int = 0
147
+ @Field var email: String?
148
+ }
149
+
150
+ Function("createUser") { (user: UserRecord) -> Bool in
151
+ return true
152
+ }
153
+ ```
154
+
155
+ **Kotlin difference** — uses `class` instead of `struct`, optional fields need explicit `= null`:
156
+
157
+ ```kotlin
158
+ class UserRecord : Record {
159
+ @Field var name: String = ""
160
+ @Field var age: Int = 0
161
+ @Field var email: String? = null
162
+ }
163
+ ```
164
+
165
+ ### Enums (Enumerable)
166
+
167
+ ```swift
168
+ enum Theme: String, Enumerable {
169
+ case light
170
+ case dark
171
+ case system
172
+ }
173
+
174
+ Function("setTheme") { (theme: Theme) in
175
+ // type-safe enum value
176
+ }
177
+ ```
178
+
179
+ **Kotlin difference** — uses `enum class` with explicit `value` property:
180
+
181
+ ```kotlin
182
+ enum class Theme(val value: String) : Enumerable {
183
+ LIGHT("light"),
184
+ DARK("dark"),
185
+ SYSTEM("system")
186
+ }
187
+ ```
188
+
189
+ ### Either Types (Union types)
190
+
191
+ ```swift
192
+ Function("process") { (input: Either<String, Int>) in
193
+ if let str = input.get(String.self) {
194
+ // handle string
195
+ } else if let num = input.get(Int.self) {
196
+ // handle number
197
+ }
198
+ }
199
+ ```
200
+
201
+ Also available: `EitherOfThree<A, B, C>`, `EitherOfFour<A, B, C, D>`.
202
+
203
+ ### JavaScript Values (Direct JS manipulation)
204
+
205
+ For advanced use in synchronous functions running on JS thread:
206
+
207
+ ```swift
208
+ Function("callback") { (fn: JavaScriptFunction<String>) in
209
+ let result = fn("arg1", "arg2")
210
+ }
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Shared Objects
216
+
217
+ Bridge native class instances to JS with automatic lifecycle management. Instances are deallocated when neither JS nor native code holds a reference.
218
+
219
+ ### Defining a Shared Object
220
+
221
+ ```swift
222
+ class ImageContext: SharedObject {
223
+ private var image: UIImage
224
+
225
+ init(image: UIImage) {
226
+ self.image = image
227
+ super.init()
228
+ }
229
+
230
+ func rotate(degrees: Double) {
231
+ image = image.rotated(degrees: degrees)
232
+ }
233
+ }
234
+ ```
235
+
236
+ **Kotlin difference** — takes `RuntimeContext` in constructor, override `sharedObjectDidRelease()` for cleanup:
237
+
238
+ ```kotlin
239
+ class ImageContext(
240
+ runtimeContext: RuntimeContext,
241
+ private var bitmap: Bitmap
242
+ ) : SharedObject(runtimeContext) {
243
+
244
+ fun rotate(degrees: Float) { /* ... */ }
245
+
246
+ override fun sharedObjectDidRelease() {
247
+ if (!bitmap.isRecycled) bitmap.recycle()
248
+ }
249
+ }
250
+ ```
251
+
252
+ ### Exposing via Class DSL
253
+
254
+ ```swift
255
+ Class("Context", ImageContext.self) {
256
+ Constructor { (path: String) -> ImageContext in
257
+ return ImageContext(image: UIImage(contentsOfFile: path)!)
258
+ }
259
+
260
+ Function("rotate") { (ctx: ImageContext, degrees: Double) -> ImageContext in
261
+ ctx.rotate(degrees: degrees)
262
+ return ctx
263
+ }
264
+
265
+ Property("width")
266
+ .get { (ctx: ImageContext) -> Int in ctx.width }
267
+ }
268
+ ```
269
+
270
+ Other Class DSL components: `StaticFunction`, `StaticAsyncFunction`, `AsyncFunction`.
271
+
272
+ ### SharedRef
273
+
274
+ Specialized shared reference for passing typed objects between modules:
275
+
276
+ ```swift
277
+ final class ImageRef: SharedRef<UIImage> {}
278
+ ```
279
+
280
+ ### JS Usage
281
+
282
+ ```typescript
283
+ const ctx = await ImageModule.create("/path/to/image.png");
284
+ ctx.rotate(90);
285
+ console.log(ctx.width);
286
+ ```
@@ -0,0 +1,171 @@
1
+ # Native View Reference
2
+
3
+ Native views let you render platform UI components (UIView on iOS, Android View on Android) as React components.
4
+
5
+ ## Defining a View
6
+
7
+ **Swift:**
8
+
9
+ ```swift
10
+ public class MyViewModule: Module {
11
+ public func definition() -> ModuleDefinition {
12
+ Name("MyView")
13
+
14
+ View(MyNativeView.self) {
15
+ Prop("title") { (view: MyNativeView, title: String) in
16
+ view.titleLabel.text = title
17
+ }
18
+
19
+ Events("onPress", "onLoad")
20
+
21
+ AsyncFunction("reset") { (view: MyNativeView) in
22
+ view.reset()
23
+ }
24
+ }
25
+ }
26
+ }
27
+
28
+ class MyNativeView: ExpoView {
29
+ let titleLabel = UILabel()
30
+
31
+ required init(appContext: AppContext) {
32
+ super.init(appContext: appContext)
33
+ clipsToBounds = true
34
+ addSubview(titleLabel)
35
+ }
36
+
37
+ override func layoutSubviews() {
38
+ super.layoutSubviews()
39
+ titleLabel.frame = bounds
40
+ }
41
+ }
42
+ ```
43
+
44
+ **Kotlin:**
45
+
46
+ ```kotlin
47
+ class MyViewModule : Module() {
48
+ override fun definition() = ModuleDefinition {
49
+ Name("MyView")
50
+
51
+ View(MyNativeView::class) {
52
+ Prop("title") { view: MyNativeView, title: String ->
53
+ view.titleView.text = title
54
+ }
55
+
56
+ Events("onPress", "onLoad")
57
+
58
+ AsyncFunction("reset") { view: MyNativeView ->
59
+ view.reset()
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+ class MyNativeView(context: Context, appContext: AppContext) : ExpoView(context, appContext) {
66
+ val titleView = TextView(context).also {
67
+ addView(it, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT))
68
+ }
69
+ }
70
+ ```
71
+
72
+ **TypeScript:**
73
+
74
+ ```typescript
75
+ import { requireNativeView } from "expo";
76
+
77
+ export type MyViewProps = {
78
+ title?: string;
79
+ onPress?: (event: { nativeEvent: { x: number; y: number } }) => void;
80
+ onLoad?: () => void;
81
+ } & ViewProps;
82
+
83
+ const NativeView = requireNativeView<MyViewProps>("MyView");
84
+
85
+ export function MyView(props: MyViewProps) {
86
+ return <NativeView {...props} />;
87
+ }
88
+ ```
89
+
90
+ ## View Event Dispatching
91
+
92
+ **Swift:**
93
+
94
+ ```swift
95
+ class MyNativeView: ExpoView {
96
+ let onPress = EventDispatcher()
97
+
98
+ func handleTap(at point: CGPoint) {
99
+ onPress(["x": point.x, "y": point.y])
100
+ }
101
+ }
102
+ ```
103
+
104
+ **Kotlin:**
105
+
106
+ ```kotlin
107
+ class MyNativeView(context: Context, appContext: AppContext) : ExpoView(context, appContext) {
108
+ private val onPress by EventDispatcher()
109
+
110
+ fun handleTap(x: Float, y: Float) {
111
+ onPress(mapOf("x" to x, "y" to y))
112
+ }
113
+ }
114
+ ```
115
+
116
+ ## View Lifecycle
117
+
118
+ ```swift
119
+ // Called after all props have been set
120
+ OnViewDidUpdateProps { (view: MyNativeView) in
121
+ view.applyChanges()
122
+ }
123
+ ```
124
+
125
+ ```kotlin
126
+ // Android only - called when view is no longer used
127
+ OnViewDestroys { view: MyNativeView ->
128
+ view.cleanup()
129
+ }
130
+ ```
131
+
132
+ ## AsyncFunction on Views
133
+
134
+ Functions defined inside `View` are accessible via React ref:
135
+
136
+ ```typescript
137
+ const ref = useRef<MyView>(null);
138
+ // Call native function
139
+ await ref.current?.reset();
140
+ ```
141
+
142
+ ## PropGroup (Android)
143
+
144
+ Batch-register multiple props with shared setter logic:
145
+
146
+ ```kotlin
147
+ View(MyNativeView::class) {
148
+ PropGroup("border", "width" to Float::class, "color" to Int::class) { view, index, value ->
149
+ when (index) {
150
+ 0 -> view.borderWidth = value as Float
151
+ 1 -> view.borderColor = value as Int
152
+ }
153
+ }
154
+ }
155
+ ```
156
+
157
+ ## GroupView (Android)
158
+
159
+ Enable view group functionality for managing child views:
160
+
161
+ ```kotlin
162
+ View(MyContainerView::class) {
163
+ GroupView {
164
+ AddChildView { parent, child, index -> parent.addView(child, index) }
165
+ GetChildCount { parent -> parent.childCount }
166
+ GetChildViewAt { parent, index -> parent.getChildAt(index) }
167
+ RemoveChildView { parent, child -> parent.removeView(child) }
168
+ RemoveChildViewAt { parent, index -> parent.removeViewAt(index) }
169
+ }
170
+ }
171
+ ```
@@ -0,0 +1,201 @@
1
+ ---
2
+ name: expo-native-ui
3
+ description: Build beautiful, native-feeling Expo screens. Covers Apple HIG styling, semantic colors, native controls, SF Symbols, media, visual effects, gradients, storage, and responsive layout. For routing and navigation, use the expo-router skill; for motion and animation, use the expo-animation skill.
4
+ version: 1.1.1
5
+ license: MIT
6
+ ---
7
+
8
+ # Expo Native UI Guidelines
9
+
10
+ For routes, links, stacks, tabs, modals, sheets, and headers, use the `expo-router` skill. For any motion — entering/exiting, gestures, springs, keyboard-driven UI — use the `expo-animation` skill.
11
+
12
+ > **Before picking any UI component, check `expo-ui` first.** `@expo/ui` provides native equivalents — BottomSheet, Button, Picker, Slider, Menu, Section, Switch, SegmentedControl, and more — rendered as real SwiftUI on iOS and Jetpack Compose on Android, available in Expo Go on SDK 56+ with no custom build. Load the **`expo-ui`** skill to find the right component before falling back to React Native built-ins or community libraries. This skill (`expo-native-ui`) covers the surrounding structure: Expo Router navigation, layout, styling, and visual effects.
13
+
14
+ ## References
15
+
16
+ Consult these resources as needed:
17
+
18
+ ```
19
+ references/
20
+ controls.md Native iOS: Switch, Slider, SegmentedControl, DateTimePicker, Picker
21
+ gradients.md CSS gradients via experimental_backgroundImage (New Arch only)
22
+ icons.md SF Symbols via expo-symbols SymbolView: names, weights, animations; Material icons on Android
23
+ media.md Camera, audio, video, and file saving
24
+ storage.md SQLite, AsyncStorage, SecureStore
25
+ visual-effects.md Blur (expo-blur) and liquid glass (expo-glass-effect)
26
+ webgpu-three.md 3D graphics, games, GPU visualizations with WebGPU and Three.js
27
+ ```
28
+
29
+ ## Running the App
30
+
31
+ **CRITICAL: Always try Expo Go first before creating custom builds.**
32
+
33
+ Most Expo apps work in Expo Go without any custom native code. Before running `npx expo run:ios` or `npx expo run:android`:
34
+
35
+ 1. **Start with Expo Go**: Run `npx expo start` and scan the QR code with Expo Go
36
+ 2. **Check if features work**: Test your app thoroughly in Expo Go
37
+ 3. **Only create custom builds when required** - see below
38
+
39
+ ### When Custom Builds Are Required
40
+
41
+ You need `npx expo run:ios/android` or `eas build` ONLY when using:
42
+
43
+ - **Local Expo modules** (custom native code in `modules/`)
44
+ - **Apple targets** (widgets, app clips, extensions via `@bacons/apple-targets`)
45
+ - **Third-party native modules** not included in Expo Go
46
+ - **Custom native configuration** that can't be expressed in `app.json`
47
+
48
+ ### When Expo Go Works
49
+
50
+ Expo Go supports a wide range of features out of the box:
51
+
52
+ - Most `expo-*` packages (camera, location, sensors, sqlite, etc.) — but not all: remote push notifications don't work in Expo Go on Android since SDK 53, and some packages need native capabilities Expo Go doesn't bundle (e.g. WebGPU — see `references/webgpu-three.md`)
53
+ - Expo Router navigation and deep links
54
+ - Most UI libraries (reanimated, gesture handler, etc.)
55
+
56
+ **If you're unsure, try Expo Go first.** Creating custom builds adds complexity, slower iteration, and requires Xcode/Android Studio setup.
57
+
58
+ ## Code Style
59
+
60
+ - Be cautious of unterminated strings. Ensure nested backticks are escaped; never forget to escape quotes correctly.
61
+ - Always use import statements at the top of the file.
62
+ - Always use kebab-case for file names, e.g. `comment-card.tsx`
63
+ - Never use special characters in file names
64
+ - Configure tsconfig.json with path aliases, and prefer aliases over relative imports for refactors.
65
+
66
+ ## Library Preferences
67
+
68
+ - **For any sheet, picker, slider, toggle, menu, or grouped-form section: use `@expo/ui` (see `expo-ui` skill) before reaching for a React Native built-in or community library** — it renders native SwiftUI/Compose and works in Expo Go on SDK 56+. For grouped/settings-style rows (short, fixed-length), use `@expo/ui`'s `List` + `ListItem`. For large or unknown-length scrolling lists (feeds, search results, catalogs), use `FlatList` or `FlashList` — `@expo/ui`'s `List` is not virtualized.
69
+ - Never use modules removed from React Native such as Picker, WebView, SafeAreaView, or AsyncStorage
70
+ - Never use legacy expo-permissions
71
+ - `expo-audio` not `expo-av`
72
+ - `expo-video` not `expo-av`
73
+ - `expo-symbols` (`SymbolView`) for SF Symbols on iOS, not `@expo/vector-icons` — see `references/icons.md`. SF Symbols are Apple-only: on Android every icon needs a Material source (`md` prop on NativeTabs triggers; in-screen options under "Android: Material Icons" in icons.md), never SF-only iconography
74
+ - `react-native-safe-area-context` not react-native SafeAreaView
75
+ - `process.env.EXPO_OS` not `Platform.OS`
76
+ - `React.use` not `React.useContext`
77
+ - `expo-image` Image component instead of intrinsic element `img`
78
+ - `expo-glass-effect` for liquid glass backdrops
79
+ - `Color` from `expo-router` for native semantic colors, not raw `PlatformColor` (type-safe, auto-adapts to light/dark)
80
+ - In SDK 56+, never import from `@react-navigation/*` directly — use `expo-router/react-navigation` instead (covers `@react-navigation/native`, `/core`, `/elements`, `/routers`)
81
+
82
+ ## Responsiveness
83
+
84
+ - Wrap screens with scrollable content in a ScrollView. Screens whose root is a FlatList/FlashList must not add an outer ScrollView (the list is the scroll container), and full-bleed screens (camera, map, canvas) need neither
85
+ - Use `<ScrollView contentInsetAdjustmentBehavior="automatic" />` instead of `<SafeAreaView>` for smarter safe area insets
86
+ - `contentInsetAdjustmentBehavior="automatic"` should be applied to FlatList and SectionList as well
87
+ - Use flexbox instead of Dimensions API
88
+ - ALWAYS prefer `useWindowDimensions` over `Dimensions.get()` to measure screen size
89
+
90
+ ## Behavior
91
+
92
+ - Use expo-haptics conditionally on iOS to make more delightful experiences
93
+ - Use views with built-in haptics like `<Switch />` from React Native and `@react-native-community/datetimepicker`
94
+ - When a Stack route has scrollable content, make the ScrollView (or FlatList) the first component inside the route, with `contentInsetAdjustmentBehavior="automatic"` set
95
+ - Use the `<Text selectable />` prop on text containing data that could be copied
96
+ - Consider formatting large numbers like 1.4M or 38k
97
+ - Never use intrinsic elements like 'img' or 'div' unless in a webview or Expo DOM component
98
+ - Every screen that loads data has four states (loading, error, empty, content) - never show the empty state while the first load is still resolving; the rules live in the `expo-data-fetching` skill
99
+ - On scrollable forms and search results, use `keyboardShouldPersistTaps="handled"` so controls receive the first tap and unhandled taps can dismiss the keyboard. Use `"always"` only when unhandled taps should also keep it open
100
+ - A form's primary action must never sit under the keyboard. For UI that tracks the keyboard's real frame, load the `expo-animation` skill's keyboard recipe (`react-native-keyboard-controller`) - never `Keyboard.addListener` plus a timing animation
101
+ - Every enabled control must perform its advertised action: search filters results, Save commits edits, and settings affect behavior. Empty handlers and success alerts are not implementations; local state is enough when the user requested a prototype
102
+ - For async saves, preserve drafts and handle pending/failure states per `expo-data-fetching`; do not dismiss a form before its save succeeds
103
+
104
+ Before calling a screen complete, walk through its primary task, including one failure and recovery when it loads or saves data. Check keyboard access and back/dismiss behavior. Try long titles, missing images, no search results, and large system text; required actions must remain reachable. Report what you exercised and what you could not run.
105
+
106
+ # Styling
107
+
108
+ Follow each platform's own design language: Apple Human Interface Guidelines on iOS, Material Design 3 on Android. Never dress one platform in the other's uniform - no FAB or ripple in iOS layouts; no hand-built iOS chrome (back-chevrons, large-title text, iOS-styled switches) on Android.
109
+
110
+ ## General Styling Rules
111
+
112
+ - Prefer flex gap over margin and padding styles
113
+ - Prefer padding over margin where possible
114
+ - Always account for safe area, either with stack headers, tabs, or ScrollView/FlatList `contentInsetAdjustmentBehavior="automatic"`
115
+ - Ensure both top and bottom safe area insets are accounted for
116
+ - Inline styles not StyleSheet.create unless reusing styles is faster
117
+ - For any motion or animation work, load the `expo-animation` skill — it owns the animate-or-not decision, timing values, and interruption rules
118
+ - Use `{ borderCurve: 'continuous' }` for rounded corners unless creating a capsule shape
119
+ - ALWAYS use a navigation stack title instead of a custom text element on the page
120
+ - When padding a ScrollView, use `contentContainerStyle` padding and gap instead of padding on the ScrollView itself (reduces clipping)
121
+ - CSS and Tailwind are not supported - use inline styles
122
+
123
+ ## Colors
124
+
125
+ Use the `Color` API from `expo-router` for native semantic colors. It is a type-safe wrapper over `PlatformColor` that exposes iOS UIKit colors through `Color.ios.*` and Android Material 3 colors through `Color.android.material.*` (static) or `Color.android.dynamic.*` (adapts to the user's wallpaper on Android 12+). These resolve on-device and automatically adapt to light/dark mode and accessibility settings, so you no longer maintain separate light/dark hex tables or a `colors.web.ts` file.
126
+
127
+ `Color` is platform-specific, so wrap each value in `Platform.select` with a `default` hex fallback for web. Centralize the palette in `theme/colors.ts` and import `colors` everywhere:
128
+
129
+ ```tsx
130
+ // theme/colors.ts
131
+ import { Platform } from "react-native";
132
+ import { Color } from "expo-router";
133
+
134
+ export const colors = {
135
+ label: Platform.select({
136
+ ios: Color.ios.label,
137
+ android: Color.android.dynamic.onSurface,
138
+ default: "#000000",
139
+ })!,
140
+ secondaryLabel: Platform.select({
141
+ ios: Color.ios.secondaryLabel,
142
+ android: Color.android.dynamic.onSurfaceVariant,
143
+ default: "#3c3c43",
144
+ })!,
145
+ separator: Platform.select({
146
+ ios: Color.ios.separator,
147
+ android: Color.android.dynamic.outlineVariant,
148
+ default: "#c6c6c8",
149
+ })!,
150
+ systemBackground: Platform.select({
151
+ ios: Color.ios.systemBackground,
152
+ android: Color.android.dynamic.surface,
153
+ default: "#ffffff",
154
+ })!,
155
+ secondarySystemBackground: Platform.select({
156
+ ios: Color.ios.secondarySystemBackground,
157
+ android: Color.android.dynamic.surfaceVariant,
158
+ default: "#f2f2f7",
159
+ })!,
160
+ systemBlue: Platform.select({
161
+ ios: Color.ios.systemBlue,
162
+ android: Color.android.dynamic.primary,
163
+ default: "#007aff",
164
+ })!,
165
+ };
166
+ ```
167
+
168
+ ```tsx
169
+ import { colors } from "@/theme/colors";
170
+
171
+ <View style={{ backgroundColor: colors.systemBackground }}>
172
+ <Text style={{ color: colors.label }}>Title</Text>
173
+ </View>;
174
+ ```
175
+
176
+ - iOS re-resolves these colors automatically when the system theme changes. On Android, call `useColorScheme()` inside any component that renders them so it re-renders when the theme flips (required when React Compiler memoizes the component).
177
+ - Don't pass `Color` / `PlatformColor` values into Reanimated styles — they are opaque native color objects, not strings; use static colors there.
178
+ - `Platform.select({...})!` returns `string | OpaqueColorValue`. Most React Native style props accept `ColorValue` (`string | OpaqueColorValue`) so this works fine. But some third-party props only accept `string` (e.g. `tintColor` on `expo-image`). Cast when needed: `colors.label as string`.
179
+
180
+ ## Text Styling
181
+
182
+ - Add the `selectable` prop to every `<Text/>` element displaying important data or error messages
183
+ - Counters should use `{ fontVariant: 'tabular-nums' }` for alignment
184
+
185
+ ## Shadows
186
+
187
+ Use CSS `boxShadow` style prop. NEVER use legacy React Native shadow or elevation styles.
188
+
189
+ ```tsx
190
+ <View style={{ boxShadow: "0 1px 2px rgba(0, 0, 0, 0.05)" }} />
191
+ ```
192
+
193
+ 'inset' shadows are supported.
194
+
195
+ ## Submitting Feedback
196
+ If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
197
+ ```bash
198
+ npx --yes @expo/agent-cli@latest feedback --category skills --subject "expo-native-ui" "<actionable feedback>"
199
+ ```
200
+ Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
201
+ If an agent repeatedly fails at an Expo task or the user has to step in, submit a brief report of the task, expected result, and what went wrong using `--category evals` and the relevant Expo package or command as `--subject`.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Expo Native UI"
3
+ short_description: "Build beautiful, native-feeling Expo screens: HIG styling, semantic colors, controls, SF Symbols, media, and visual effects"
4
+ default_prompt: "Use $expo-native-ui to style native-feeling Expo screens, choose semantic colors and native controls, add media and visual effects, and decide when Expo Go is enough before creating native builds."