@symbiote-native/cli 0.0.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 (384) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +492 -0
  3. package/bundle.js +2833 -0
  4. package/package.json +49 -0
  5. package/src/index.ts +70 -0
  6. package/templates/README.md +93 -0
  7. package/templates/js/angular/.prettierrc.js +5 -0
  8. package/templates/js/angular/.watchmanconfig +1 -0
  9. package/templates/js/angular/README.md +117 -0
  10. package/templates/js/angular/app.json +4 -0
  11. package/templates/js/angular/babel.config.js +34 -0
  12. package/templates/js/angular/index.js +12 -0
  13. package/templates/js/angular/metro.config.js +38 -0
  14. package/templates/js/angular/package.json.fragment.json +29 -0
  15. package/templates/js/angular/src/App.css +89 -0
  16. package/templates/js/angular/src/App.ts +40 -0
  17. package/templates/js/angular/src/assets/angular-logo.png +0 -0
  18. package/templates/js/angular/src/assets/angular-logo@2x.png +0 -0
  19. package/templates/js/angular/src/assets/angular-logo@3x.png +0 -0
  20. package/templates/js/angular/src/assets/plus-icon.png +0 -0
  21. package/templates/js/angular/src/assets/plus-icon@2x.png +0 -0
  22. package/templates/js/angular/src/assets/plus-icon@3x.png +0 -0
  23. package/templates/js/angular/src/assets/react-native-logo.png +0 -0
  24. package/templates/js/angular/src/assets/react-native-logo@2x.png +0 -0
  25. package/templates/js/angular/src/assets/react-native-logo@3x.png +0 -0
  26. package/templates/js/angular/src/css.d.ts +23 -0
  27. package/templates/js/angular/tsconfig.angular.json +42 -0
  28. package/templates/js/angular/tsconfig.json +17 -0
  29. package/templates/js/react/.prettierrc.js +5 -0
  30. package/templates/js/react/.watchmanconfig +1 -0
  31. package/templates/js/react/App.css +69 -0
  32. package/templates/js/react/App.jsx +27 -0
  33. package/templates/js/react/App.tsx +27 -0
  34. package/templates/js/react/README.md +116 -0
  35. package/templates/js/react/app.json +4 -0
  36. package/templates/js/react/assets/react-native-logo.png +0 -0
  37. package/templates/js/react/assets/react-native-logo@2x.png +0 -0
  38. package/templates/js/react/assets/react-native-logo@3x.png +0 -0
  39. package/templates/js/react/babel.config.js +24 -0
  40. package/templates/js/react/css.d.ts +24 -0
  41. package/templates/js/react/index.js +14 -0
  42. package/templates/js/react/metro.config.js +29 -0
  43. package/templates/js/react/package.json.fragment.json +22 -0
  44. package/templates/js/react/package.json.fragment.typescript.json +11 -0
  45. package/templates/js/react/tsconfig.json +18 -0
  46. package/templates/js/solid/.prettierrc.js +5 -0
  47. package/templates/js/solid/.watchmanconfig +1 -0
  48. package/templates/js/solid/App.css +89 -0
  49. package/templates/js/solid/App.jsx +35 -0
  50. package/templates/js/solid/App.tsx +35 -0
  51. package/templates/js/solid/README.md +18 -0
  52. package/templates/js/solid/app.json +4 -0
  53. package/templates/js/solid/assets/plus-icon.png +0 -0
  54. package/templates/js/solid/assets/plus-icon@2x.png +0 -0
  55. package/templates/js/solid/assets/plus-icon@3x.png +0 -0
  56. package/templates/js/solid/assets/react-native-logo.png +0 -0
  57. package/templates/js/solid/assets/react-native-logo@2x.png +0 -0
  58. package/templates/js/solid/assets/react-native-logo@3x.png +0 -0
  59. package/templates/js/solid/assets/solid-logo.png +0 -0
  60. package/templates/js/solid/assets/solid-logo@2x.png +0 -0
  61. package/templates/js/solid/assets/solid-logo@3x.png +0 -0
  62. package/templates/js/solid/babel.config.js +29 -0
  63. package/templates/js/solid/css.d.ts +20 -0
  64. package/templates/js/solid/eslint.config.js +3 -0
  65. package/templates/js/solid/index.js +13 -0
  66. package/templates/js/solid/metro.config.js +50 -0
  67. package/templates/js/solid/package.json.fragment.json +23 -0
  68. package/templates/js/solid/package.json.fragment.typescript.json +11 -0
  69. package/templates/js/solid/tsconfig.json +11 -0
  70. package/templates/js/svelte/.prettierrc.js +15 -0
  71. package/templates/js/svelte/.watchmanconfig +1 -0
  72. package/templates/js/svelte/App.svelte +123 -0
  73. package/templates/js/svelte/App.typescript.svelte +123 -0
  74. package/templates/js/svelte/README.md +18 -0
  75. package/templates/js/svelte/app.json +4 -0
  76. package/templates/js/svelte/babel.config.js +22 -0
  77. package/templates/js/svelte/css.d.ts +21 -0
  78. package/templates/js/svelte/eslint.config.js +37 -0
  79. package/templates/js/svelte/image-uris.js +8 -0
  80. package/templates/js/svelte/index.js +13 -0
  81. package/templates/js/svelte/metro.config.js +83 -0
  82. package/templates/js/svelte/package.json.fragment.json +26 -0
  83. package/templates/js/svelte/package.json.fragment.typescript.json +12 -0
  84. package/templates/js/svelte/svelte.config.js +47 -0
  85. package/templates/js/svelte/tsconfig.json +9 -0
  86. package/templates/js/svelte/tsconfig.typecheck.json +4 -0
  87. package/templates/js/vue-sfc/.prettierrc.js +5 -0
  88. package/templates/js/vue-sfc/.watchmanconfig +1 -0
  89. package/templates/js/vue-sfc/App.typescript.vue +128 -0
  90. package/templates/js/vue-sfc/App.vue +128 -0
  91. package/templates/js/vue-sfc/README.md +124 -0
  92. package/templates/js/vue-sfc/app.json +4 -0
  93. package/templates/js/vue-sfc/assets/plus-icon.png +0 -0
  94. package/templates/js/vue-sfc/assets/plus-icon@2x.png +0 -0
  95. package/templates/js/vue-sfc/assets/plus-icon@3x.png +0 -0
  96. package/templates/js/vue-sfc/assets/react-native-logo.png +0 -0
  97. package/templates/js/vue-sfc/assets/react-native-logo@2x.png +0 -0
  98. package/templates/js/vue-sfc/assets/react-native-logo@3x.png +0 -0
  99. package/templates/js/vue-sfc/assets/vue-logo.png +0 -0
  100. package/templates/js/vue-sfc/assets/vue-logo@2x.png +0 -0
  101. package/templates/js/vue-sfc/assets/vue-logo@3x.png +0 -0
  102. package/templates/js/vue-sfc/babel.config.js +24 -0
  103. package/templates/js/vue-sfc/css.d.ts +24 -0
  104. package/templates/js/vue-sfc/eslint.config.js +48 -0
  105. package/templates/js/vue-sfc/index.js +13 -0
  106. package/templates/js/vue-sfc/metro.config.js +30 -0
  107. package/templates/js/vue-sfc/package.json.fragment.json +26 -0
  108. package/templates/js/vue-sfc/package.json.fragment.typescript.json +11 -0
  109. package/templates/js/vue-sfc/tsconfig.json +18 -0
  110. package/templates/js/vue-sfc/tsconfig.typecheck.json +8 -0
  111. package/templates/js/vue-sfc/vue-runtime-core.d.ts +3 -0
  112. package/templates/js/vue-tsx/.prettierrc.js +5 -0
  113. package/templates/js/vue-tsx/.watchmanconfig +1 -0
  114. package/templates/js/vue-tsx/App.css +89 -0
  115. package/templates/js/vue-tsx/App.jsx +40 -0
  116. package/templates/js/vue-tsx/App.tsx +40 -0
  117. package/templates/js/vue-tsx/README.md +110 -0
  118. package/templates/js/vue-tsx/app.json +4 -0
  119. package/templates/js/vue-tsx/assets/plus-icon.png +0 -0
  120. package/templates/js/vue-tsx/assets/plus-icon@2x.png +0 -0
  121. package/templates/js/vue-tsx/assets/plus-icon@3x.png +0 -0
  122. package/templates/js/vue-tsx/assets/react-native-logo.png +0 -0
  123. package/templates/js/vue-tsx/assets/react-native-logo@2x.png +0 -0
  124. package/templates/js/vue-tsx/assets/react-native-logo@3x.png +0 -0
  125. package/templates/js/vue-tsx/assets/vue-logo.png +0 -0
  126. package/templates/js/vue-tsx/assets/vue-logo@2x.png +0 -0
  127. package/templates/js/vue-tsx/assets/vue-logo@3x.png +0 -0
  128. package/templates/js/vue-tsx/babel.config.js +67 -0
  129. package/templates/js/vue-tsx/css.d.ts +24 -0
  130. package/templates/js/vue-tsx/index.js +14 -0
  131. package/templates/js/vue-tsx/metro.config.js +42 -0
  132. package/templates/js/vue-tsx/package.json.fragment.json +26 -0
  133. package/templates/js/vue-tsx/package.json.fragment.typescript.json +11 -0
  134. package/templates/js/vue-tsx/tsconfig.json +15 -0
  135. package/templates/js/vue-tsx/tsconfig.typecheck.json +10 -0
  136. package/templates/js/vue-tsx/vue-jsx.d.ts +43 -0
  137. package/templates/js/vue-tsx/vue-runtime-core.d.ts +3 -0
  138. package/templates/layers/README.md +90 -0
  139. package/templates/layers/application/package.json.fragment.json +5 -0
  140. package/templates/layers/battery/package.json.fragment.json +5 -0
  141. package/templates/layers/brightness/package.json.fragment.json +5 -0
  142. package/templates/layers/cellular/package.json.fragment.json +5 -0
  143. package/templates/layers/clipboard/package.json.fragment.json +5 -0
  144. package/templates/layers/crypto/package.json.fragment.json +5 -0
  145. package/templates/layers/device/package.json.fragment.json +5 -0
  146. package/templates/layers/expo-modules/ios/Canary/Info.plist +66 -0
  147. package/templates/layers/expo-modules/package.json.fragment.json +9 -0
  148. package/templates/layers/haptics/package.json.fragment.json +5 -0
  149. package/templates/layers/keep-awake/package.json.fragment.json +5 -0
  150. package/templates/layers/local-auth/package.json.fragment.json +5 -0
  151. package/templates/layers/localization/package.json.fragment.json +5 -0
  152. package/templates/layers/navigation/app/angular/assets/angular-logo.png +0 -0
  153. package/templates/layers/navigation/app/angular/assets/angular-logo@2x.png +0 -0
  154. package/templates/layers/navigation/app/angular/assets/angular-logo@3x.png +0 -0
  155. package/templates/layers/navigation/app/angular/assets/plus-icon.png +0 -0
  156. package/templates/layers/navigation/app/angular/assets/plus-icon@2x.png +0 -0
  157. package/templates/layers/navigation/app/angular/assets/plus-icon@3x.png +0 -0
  158. package/templates/layers/navigation/app/angular/assets/react-native-logo.png +0 -0
  159. package/templates/layers/navigation/app/angular/assets/react-native-logo@2x.png +0 -0
  160. package/templates/layers/navigation/app/angular/assets/react-native-logo@3x.png +0 -0
  161. package/templates/layers/navigation/app/angular/src/App.css +129 -0
  162. package/templates/layers/navigation/app/angular/src/App.ts +31 -0
  163. package/templates/layers/navigation/app/angular/src/DetailsScreen.ts +24 -0
  164. package/templates/layers/navigation/app/angular/src/MenuScreen.ts +43 -0
  165. package/templates/layers/navigation/app/react/App.css +109 -0
  166. package/templates/layers/navigation/app/react/App.jsx +77 -0
  167. package/templates/layers/navigation/app/react/App.tsx +77 -0
  168. package/templates/layers/navigation/app/react/assets/react-native-logo.png +0 -0
  169. package/templates/layers/navigation/app/react/assets/react-native-logo@2x.png +0 -0
  170. package/templates/layers/navigation/app/react/assets/react-native-logo@3x.png +0 -0
  171. package/templates/layers/navigation/app/solid/App.css +129 -0
  172. package/templates/layers/navigation/app/solid/App.jsx +85 -0
  173. package/templates/layers/navigation/app/solid/App.tsx +85 -0
  174. package/templates/layers/navigation/app/solid/assets/plus-icon.png +0 -0
  175. package/templates/layers/navigation/app/solid/assets/plus-icon@2x.png +0 -0
  176. package/templates/layers/navigation/app/solid/assets/plus-icon@3x.png +0 -0
  177. package/templates/layers/navigation/app/solid/assets/react-native-logo.png +0 -0
  178. package/templates/layers/navigation/app/solid/assets/react-native-logo@2x.png +0 -0
  179. package/templates/layers/navigation/app/solid/assets/react-native-logo@3x.png +0 -0
  180. package/templates/layers/navigation/app/solid/assets/solid-logo.png +0 -0
  181. package/templates/layers/navigation/app/solid/assets/solid-logo@2x.png +0 -0
  182. package/templates/layers/navigation/app/solid/assets/solid-logo@3x.png +0 -0
  183. package/templates/layers/navigation/app/svelte/App.css +129 -0
  184. package/templates/layers/navigation/app/svelte/App.svelte +19 -0
  185. package/templates/layers/navigation/app/svelte/App.typescript.svelte +19 -0
  186. package/templates/layers/navigation/app/svelte/DetailsScreen.svelte +17 -0
  187. package/templates/layers/navigation/app/svelte/DetailsScreen.typescript.svelte +17 -0
  188. package/templates/layers/navigation/app/svelte/MenuScreen.svelte +40 -0
  189. package/templates/layers/navigation/app/svelte/MenuScreen.typescript.svelte +40 -0
  190. package/templates/layers/navigation/app/svelte/image-uris.js +8 -0
  191. package/templates/layers/navigation/app/vue-sfc/App.css +129 -0
  192. package/templates/layers/navigation/app/vue-sfc/App.typescript.vue +36 -0
  193. package/templates/layers/navigation/app/vue-sfc/App.vue +36 -0
  194. package/templates/layers/navigation/app/vue-sfc/DetailsScreen.typescript.vue +20 -0
  195. package/templates/layers/navigation/app/vue-sfc/DetailsScreen.vue +20 -0
  196. package/templates/layers/navigation/app/vue-sfc/MenuScreen.typescript.vue +52 -0
  197. package/templates/layers/navigation/app/vue-sfc/MenuScreen.vue +52 -0
  198. package/templates/layers/navigation/app/vue-sfc/assets/plus-icon.png +0 -0
  199. package/templates/layers/navigation/app/vue-sfc/assets/plus-icon@2x.png +0 -0
  200. package/templates/layers/navigation/app/vue-sfc/assets/plus-icon@3x.png +0 -0
  201. package/templates/layers/navigation/app/vue-sfc/assets/react-native-logo.png +0 -0
  202. package/templates/layers/navigation/app/vue-sfc/assets/react-native-logo@2x.png +0 -0
  203. package/templates/layers/navigation/app/vue-sfc/assets/react-native-logo@3x.png +0 -0
  204. package/templates/layers/navigation/app/vue-sfc/assets/vue-logo.png +0 -0
  205. package/templates/layers/navigation/app/vue-sfc/assets/vue-logo@2x.png +0 -0
  206. package/templates/layers/navigation/app/vue-sfc/assets/vue-logo@3x.png +0 -0
  207. package/templates/layers/navigation/app/vue-tsx/App.css +129 -0
  208. package/templates/layers/navigation/app/vue-tsx/App.jsx +91 -0
  209. package/templates/layers/navigation/app/vue-tsx/App.tsx +91 -0
  210. package/templates/layers/navigation/app/vue-tsx/assets/plus-icon.png +0 -0
  211. package/templates/layers/navigation/app/vue-tsx/assets/plus-icon@2x.png +0 -0
  212. package/templates/layers/navigation/app/vue-tsx/assets/plus-icon@3x.png +0 -0
  213. package/templates/layers/navigation/app/vue-tsx/assets/react-native-logo.png +0 -0
  214. package/templates/layers/navigation/app/vue-tsx/assets/react-native-logo@2x.png +0 -0
  215. package/templates/layers/navigation/app/vue-tsx/assets/react-native-logo@3x.png +0 -0
  216. package/templates/layers/navigation/app/vue-tsx/assets/vue-logo.png +0 -0
  217. package/templates/layers/navigation/app/vue-tsx/assets/vue-logo@2x.png +0 -0
  218. package/templates/layers/navigation/app/vue-tsx/assets/vue-logo@3x.png +0 -0
  219. package/templates/layers/navigation/package.json.fragment.json +5 -0
  220. package/templates/layers/network/package.json.fragment.json +5 -0
  221. package/templates/layers/screen-orientation/package.json.fragment.json +5 -0
  222. package/templates/layers/secure-store/package.json.fragment.json +5 -0
  223. package/templates/layers/sensors/package.json.fragment.json +5 -0
  224. package/templates/layers/sharing/package.json.fragment.json +5 -0
  225. package/templates/layers/slider/package.json.fragment.json +5 -0
  226. package/templates/layers/sms/package.json.fragment.json +5 -0
  227. package/templates/layers/splash-screen/native/android/app/src/main/AndroidManifest.xml +28 -0
  228. package/templates/layers/splash-screen/native/android/app/src/main/java/com/canary/MainActivity.kt +29 -0
  229. package/templates/layers/splash-screen/native/android/app/src/main/res/values/styles.xml +12 -0
  230. package/templates/layers/splash-screen/native/ios/Canary/AppDelegate.swift +54 -0
  231. package/templates/layers/splash-screen/package.json.fragment.json +5 -0
  232. package/templates/layers/standard-web-crypto/package.json.fragment.json +5 -0
  233. package/templates/layers/store-review/package.json.fragment.json +5 -0
  234. package/templates/layers/system-ui/package.json.fragment.json +5 -0
  235. package/templates/layers/testing/detox.config.js +42 -0
  236. package/templates/layers/testing/e2e/jest.config.js +21 -0
  237. package/templates/layers/testing/e2e/setup.ts +3 -0
  238. package/templates/layers/testing/e2e/smoke.test.ts +17 -0
  239. package/templates/layers/testing/e2e/tsconfig.json +7 -0
  240. package/templates/layers/testing/fragment/angular/package.json.fragment.json +18 -0
  241. package/templates/layers/testing/fragment/base/package.json.fragment.json +18 -0
  242. package/templates/layers/tracking-transparency/package.json.fragment.json +5 -0
  243. package/templates/layers/web-browser/package.json.fragment.json +5 -0
  244. package/templates/native/Gemfile +17 -0
  245. package/templates/native/README.md +48 -0
  246. package/templates/native/android/app/build.gradle +130 -0
  247. package/templates/native/android/app/debug.keystore +0 -0
  248. package/templates/native/android/app/proguard-rules.pro +10 -0
  249. package/templates/native/android/app/src/androidTest/java/com/canary/DetoxTest.java +29 -0
  250. package/templates/native/android/app/src/main/AndroidManifest.xml +28 -0
  251. package/templates/native/android/app/src/main/java/com/canary/MainActivity.kt +22 -0
  252. package/templates/native/android/app/src/main/java/com/canary/MainApplication.kt +27 -0
  253. package/templates/native/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
  254. package/templates/native/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  255. package/templates/native/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  256. package/templates/native/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  257. package/templates/native/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  258. package/templates/native/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  259. package/templates/native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  260. package/templates/native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  261. package/templates/native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  262. package/templates/native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  263. package/templates/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  264. package/templates/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  265. package/templates/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  266. package/templates/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  267. package/templates/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  268. package/templates/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  269. package/templates/native/android/app/src/main/res/values/colors.xml +3 -0
  270. package/templates/native/android/app/src/main/res/values/strings.xml +3 -0
  271. package/templates/native/android/app/src/main/res/values/styles.xml +6 -0
  272. package/templates/native/android/build.gradle +33 -0
  273. package/templates/native/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  274. package/templates/native/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  275. package/templates/native/android/gradle.properties +44 -0
  276. package/templates/native/android/gradlew +248 -0
  277. package/templates/native/android/gradlew.bat +98 -0
  278. package/templates/native/android/settings.gradle +10 -0
  279. package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  280. package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  281. package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  282. package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  283. package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  284. package/templates/native/bootsplash-logo/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  285. package/templates/native/bootsplash-logo/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  286. package/templates/native/bootsplash-logo/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  287. package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  288. package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  289. package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  290. package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  291. package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  292. package/templates/native/bootsplash-logo/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  293. package/templates/native/bootsplash-logo/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  294. package/templates/native/bootsplash-logo/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  295. package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  296. package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  297. package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  298. package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  299. package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  300. package/templates/native/bootsplash-logo/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  301. package/templates/native/bootsplash-logo/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  302. package/templates/native/bootsplash-logo/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  303. package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  304. package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  305. package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  306. package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  307. package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  308. package/templates/native/bootsplash-logo/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  309. package/templates/native/bootsplash-logo/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  310. package/templates/native/bootsplash-logo/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  311. package/templates/native/eslint.config.js +3 -0
  312. package/templates/native/ios/.xcode.env +11 -0
  313. package/templates/native/ios/Canary/AppDelegate.swift +48 -0
  314. package/templates/native/ios/Canary/BootSplash.storyboard +46 -0
  315. package/templates/native/ios/Canary/Colors.xcassets/BootSplashBackground-498e55.colorset/Contents.json +20 -0
  316. package/templates/native/ios/Canary/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
  317. package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/Contents.json +23 -0
  318. package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  319. package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  320. package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  321. package/templates/native/ios/Canary/Images.xcassets/Contents.json +6 -0
  322. package/templates/native/ios/Canary/Info.plist +60 -0
  323. package/templates/native/ios/Canary/LaunchScreen.storyboard +47 -0
  324. package/templates/native/ios/Canary/PrivacyInfo.xcprivacy +37 -0
  325. package/templates/native/ios/Canary.xcodeproj/project.pbxproj +504 -0
  326. package/templates/native/ios/Canary.xcodeproj/xcshareddata/xcschemes/Canary.xcscheme +88 -0
  327. package/templates/native/ios/Canary.xcworkspace/contents.xcworkspacedata +10 -0
  328. package/templates/native/ios/Podfile +34 -0
  329. package/templates/native/package.json.fragment.json +22 -0
  330. package/templates/native/package.json.fragment.typescript.json +8 -0
  331. package/templates/styling/js/angular/css-modules/src/App.ts +25 -0
  332. package/templates/styling/js/angular/stylesheet/src/App.ts +26 -0
  333. package/templates/styling/js/react/css-modules/App.jsx +15 -0
  334. package/templates/styling/js/react/css-modules/App.tsx +15 -0
  335. package/templates/styling/js/react/stylesheet/App.jsx +19 -0
  336. package/templates/styling/js/react/stylesheet/App.tsx +19 -0
  337. package/templates/styling/js/solid/css-modules/App.jsx +15 -0
  338. package/templates/styling/js/solid/css-modules/App.tsx +15 -0
  339. package/templates/styling/js/solid/stylesheet/App.jsx +19 -0
  340. package/templates/styling/js/solid/stylesheet/App.tsx +19 -0
  341. package/templates/styling/js/svelte/css-modules/App.svelte +12 -0
  342. package/templates/styling/js/svelte/css-modules/App.typescript.svelte +12 -0
  343. package/templates/styling/js/svelte/stylesheet/App.svelte +15 -0
  344. package/templates/styling/js/svelte/stylesheet/App.typescript.svelte +15 -0
  345. package/templates/styling/js/vue-sfc/css-modules/App.typescript.vue +15 -0
  346. package/templates/styling/js/vue-sfc/css-modules/App.vue +15 -0
  347. package/templates/styling/js/vue-sfc/stylesheet/App.typescript.vue +18 -0
  348. package/templates/styling/js/vue-sfc/stylesheet/App.vue +18 -0
  349. package/templates/styling/js/vue-tsx/css-modules/App.jsx +16 -0
  350. package/templates/styling/js/vue-tsx/css-modules/App.tsx +16 -0
  351. package/templates/styling/js/vue-tsx/stylesheet/App.jsx +20 -0
  352. package/templates/styling/js/vue-tsx/stylesheet/App.tsx +20 -0
  353. package/templates/styling/navigation/angular/css-modules/src/DetailsScreen.ts +17 -0
  354. package/templates/styling/navigation/angular/css-modules/src/MenuScreen.ts +22 -0
  355. package/templates/styling/navigation/angular/stylesheet/src/DetailsScreen.ts +18 -0
  356. package/templates/styling/navigation/angular/stylesheet/src/MenuScreen.ts +23 -0
  357. package/templates/styling/navigation/react/css-modules/App.jsx +32 -0
  358. package/templates/styling/navigation/react/css-modules/App.tsx +32 -0
  359. package/templates/styling/navigation/react/stylesheet/App.jsx +36 -0
  360. package/templates/styling/navigation/react/stylesheet/App.tsx +36 -0
  361. package/templates/styling/navigation/solid/css-modules/App.jsx +32 -0
  362. package/templates/styling/navigation/solid/css-modules/App.tsx +32 -0
  363. package/templates/styling/navigation/solid/stylesheet/App.jsx +36 -0
  364. package/templates/styling/navigation/solid/stylesheet/App.tsx +36 -0
  365. package/templates/styling/navigation/svelte/css-modules/DetailsScreen.svelte +7 -0
  366. package/templates/styling/navigation/svelte/css-modules/DetailsScreen.typescript.svelte +7 -0
  367. package/templates/styling/navigation/svelte/css-modules/MenuScreen.svelte +13 -0
  368. package/templates/styling/navigation/svelte/css-modules/MenuScreen.typescript.svelte +13 -0
  369. package/templates/styling/navigation/svelte/stylesheet/DetailsScreen.svelte +11 -0
  370. package/templates/styling/navigation/svelte/stylesheet/DetailsScreen.typescript.svelte +11 -0
  371. package/templates/styling/navigation/svelte/stylesheet/MenuScreen.svelte +16 -0
  372. package/templates/styling/navigation/svelte/stylesheet/MenuScreen.typescript.svelte +16 -0
  373. package/templates/styling/navigation/vue-sfc/css-modules/DetailsScreen.typescript.vue +9 -0
  374. package/templates/styling/navigation/vue-sfc/css-modules/DetailsScreen.vue +9 -0
  375. package/templates/styling/navigation/vue-sfc/css-modules/MenuScreen.typescript.vue +15 -0
  376. package/templates/styling/navigation/vue-sfc/css-modules/MenuScreen.vue +15 -0
  377. package/templates/styling/navigation/vue-sfc/stylesheet/DetailsScreen.typescript.vue +13 -0
  378. package/templates/styling/navigation/vue-sfc/stylesheet/DetailsScreen.vue +13 -0
  379. package/templates/styling/navigation/vue-sfc/stylesheet/MenuScreen.typescript.vue +18 -0
  380. package/templates/styling/navigation/vue-sfc/stylesheet/MenuScreen.vue +18 -0
  381. package/templates/styling/navigation/vue-tsx/css-modules/App.jsx +34 -0
  382. package/templates/styling/navigation/vue-tsx/css-modules/App.tsx +34 -0
  383. package/templates/styling/navigation/vue-tsx/stylesheet/App.jsx +38 -0
  384. package/templates/styling/navigation/vue-tsx/stylesheet/App.tsx +38 -0
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "@symbiote-native/haptics": "latest"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "@symbiote-native/keep-awake": "latest"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "@symbiote-native/local-auth": "latest"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "@symbiote-native/localization": "latest"
4
+ }
5
+ }
@@ -0,0 +1,129 @@
1
+ :root {
2
+ --ink: #0b1622;
3
+ --paper: #13243a;
4
+ --mist: #41506a;
5
+ --chalk: #cbd5e1;
6
+ --chalk-bright: #ffffff;
7
+ --brand: #dd0031;
8
+ }
9
+
10
+ .screen {
11
+ flex: 1;
12
+ background-color: var(--ink);
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: 24px;
16
+ padding: 24px 32px;
17
+ }
18
+
19
+ .brand-row {
20
+ flex-direction: row;
21
+ align-items: center;
22
+ gap: 28px;
23
+ }
24
+
25
+ .brand-logo {
26
+ height: 64px;
27
+ }
28
+
29
+ /* aspect-ratio matches each source PNG's real pixel proportions — a shared square box would
30
+ stretch them off their real shape. */
31
+ .brand-logo-react {
32
+ aspect-ratio: 1.0977;
33
+ }
34
+
35
+ .brand-logo-angular {
36
+ aspect-ratio: 0.9463;
37
+ }
38
+
39
+ .plus-icon {
40
+ width: 48px;
41
+ height: 48px;
42
+ }
43
+
44
+ .title {
45
+ color: var(--chalk-bright);
46
+ font-size: 22px;
47
+ font-weight: bold;
48
+ text-align: center;
49
+ }
50
+
51
+ .subtitle {
52
+ color: var(--chalk);
53
+ font-size: 14px;
54
+ text-align: center;
55
+ }
56
+
57
+ .counter-card {
58
+ align-items: center;
59
+ gap: 4px;
60
+ padding: 20px 28px;
61
+ border-radius: 16px;
62
+ background-color: var(--paper);
63
+ }
64
+
65
+ .counter-label {
66
+ color: var(--mist);
67
+ font-size: 12px;
68
+ letter-spacing: 1px;
69
+ }
70
+
71
+ .counter-value {
72
+ color: var(--brand);
73
+ font-size: 32px;
74
+ font-weight: bold;
75
+ }
76
+
77
+ .button-row {
78
+ flex-direction: row;
79
+ gap: 12px;
80
+ }
81
+
82
+ .button-primary {
83
+ align-items: center;
84
+ justify-content: center;
85
+ border-radius: 12px;
86
+ padding: 14px 22px;
87
+ background-color: var(--brand);
88
+ }
89
+
90
+ .button-secondary {
91
+ align-items: center;
92
+ justify-content: center;
93
+ border-radius: 12px;
94
+ padding: 14px 22px;
95
+ border-width: 1.5px;
96
+ border-color: var(--mist);
97
+ }
98
+
99
+ .button-primary-text {
100
+ color: var(--chalk-bright);
101
+ font-size: 15px;
102
+ font-weight: bold;
103
+ }
104
+
105
+ .button-secondary-text {
106
+ color: var(--chalk-bright);
107
+ font-size: 15px;
108
+ font-weight: bold;
109
+ }
110
+
111
+ .details-card {
112
+ align-items: center;
113
+ gap: 10px;
114
+ padding: 24px;
115
+ border-radius: 16px;
116
+ background-color: var(--paper);
117
+ }
118
+
119
+ .details-title {
120
+ color: var(--chalk-bright);
121
+ font-size: 18px;
122
+ font-weight: bold;
123
+ }
124
+
125
+ .details-body {
126
+ color: var(--chalk);
127
+ font-size: 14px;
128
+ text-align: center;
129
+ }
@@ -0,0 +1,31 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { Stack, ScreenDirective } from '@symbiote-native/navigation/angular';
3
+ import { MenuScreen } from './MenuScreen';
4
+ import { DetailsScreen } from './DetailsScreen';
5
+
6
+ const SCREEN_OPTIONS = {
7
+ headerTranslucent: true,
8
+ headerTintColor: '#ffffff',
9
+ headerTitleColor: '#ffffff',
10
+ headerStyle: { backgroundColor: '#0b1622' },
11
+ headerUserInterfaceStyle: 'dark' as const,
12
+ };
13
+
14
+ @Component({
15
+ selector: 'symbiote-angular-app',
16
+ standalone: true,
17
+ imports: [Stack, ScreenDirective],
18
+ template: `
19
+ <Stack #nav initialRouteName="Menu">
20
+ <ng-template symbioteScreen name="Menu" [component]="menuScreen" [options]="menuOptions"></ng-template>
21
+ <ng-template symbioteScreen name="Details" [component]="detailsScreen" [options]="detailsOptions"></ng-template>
22
+ </Stack>
23
+ `,
24
+ })
25
+ export class AppComponent {
26
+ @ViewChild('nav') private readonly nav!: Stack;
27
+ readonly menuScreen = MenuScreen;
28
+ readonly menuOptions = { title: 'Home', ...SCREEN_OPTIONS };
29
+ readonly detailsScreen = DetailsScreen;
30
+ readonly detailsOptions = { title: 'Details', ...SCREEN_OPTIONS };
31
+ }
@@ -0,0 +1,24 @@
1
+ import { Component } from '@angular/core';
2
+ import { SYMBIOTE_ELEMENTS } from '@symbiote-native/angular';
3
+ import { injectStackNavigation } from '@symbiote-native/navigation/angular';
4
+ import './App.css';
5
+
6
+ @Component({
7
+ selector: 'DetailsScreen',
8
+ standalone: true,
9
+ imports: [SYMBIOTE_ELEMENTS],
10
+ template: `
11
+ <safe-area-view class="screen">
12
+ <view class="details-card">
13
+ <text class="details-title">You made it!</text>
14
+ <text class="details-body">This screen was pushed by the Stack navigator — proof navigation actually works.</text>
15
+ </view>
16
+ <pressable class="button-secondary" (press)="navigation.pop()">
17
+ <text class="button-secondary-text">Go back</text>
18
+ </pressable>
19
+ </safe-area-view>
20
+ `,
21
+ })
22
+ export class DetailsScreen {
23
+ readonly navigation = injectStackNavigation();
24
+ }
@@ -0,0 +1,43 @@
1
+ import { Component, signal } from '@angular/core';
2
+ import { SYMBIOTE_ELEMENTS } from '@symbiote-native/angular';
3
+ import { injectStackNavigation } from '@symbiote-native/navigation/angular';
4
+ import './App.css';
5
+
6
+ @Component({
7
+ selector: 'MenuScreen',
8
+ standalone: true,
9
+ imports: [SYMBIOTE_ELEMENTS],
10
+ template: `
11
+ <safe-area-view class="screen">
12
+ <view class="brand-row">
13
+ <image class="brand-logo brand-logo-react" resizeMode="contain" [source]="reactNativeLogo"></image>
14
+ <image class="plus-icon" resizeMode="contain" [source]="plusIcon"></image>
15
+ <image class="brand-logo brand-logo-angular" resizeMode="contain" [source]="angularLogo"></image>
16
+ </view>
17
+
18
+ <text class="title">Welcome to SymbioteNative!</text>
19
+ <text class="subtitle">Framework-agnostic React Native, driven by Angular.</text>
20
+
21
+ <view class="counter-card">
22
+ <text class="counter-label">TAPS</text>
23
+ <text class="counter-value">{{ count() }}</text>
24
+ </view>
25
+
26
+ <view class="button-row">
27
+ <pressable class="button-primary" (press)="count.update(v => v + 1)">
28
+ <text class="button-primary-text">Tap me</text>
29
+ </pressable>
30
+ <pressable class="button-secondary" (press)="navigation.push('Details')">
31
+ <text class="button-secondary-text">Go to Details</text>
32
+ </pressable>
33
+ </view>
34
+ </safe-area-view>
35
+ `,
36
+ })
37
+ export class MenuScreen {
38
+ readonly navigation = injectStackNavigation();
39
+ readonly count = signal(0);
40
+ readonly reactNativeLogo = require('./assets/react-native-logo.png');
41
+ readonly plusIcon = require('./assets/plus-icon.png');
42
+ readonly angularLogo = require('./assets/angular-logo.png');
43
+ }
@@ -0,0 +1,109 @@
1
+ :root {
2
+ --ink: #0b1622;
3
+ --paper: #13243a;
4
+ --mist: #41506a;
5
+ --chalk: #cbd5e1;
6
+ --chalk-bright: #ffffff;
7
+ --brand: #61dafb;
8
+ }
9
+
10
+ .screen {
11
+ flex: 1;
12
+ background-color: var(--ink);
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: 24px;
16
+ padding: 24px 32px;
17
+ }
18
+
19
+ .brand-logo {
20
+ height: 64px;
21
+ aspect-ratio: 1.0977;
22
+ }
23
+
24
+ .title {
25
+ color: var(--chalk-bright);
26
+ font-size: 22px;
27
+ font-weight: bold;
28
+ text-align: center;
29
+ }
30
+
31
+ .subtitle {
32
+ color: var(--chalk);
33
+ font-size: 14px;
34
+ text-align: center;
35
+ }
36
+
37
+ .counter-card {
38
+ align-items: center;
39
+ gap: 4px;
40
+ padding: 20px 28px;
41
+ border-radius: 16px;
42
+ background-color: var(--paper);
43
+ }
44
+
45
+ .counter-label {
46
+ color: var(--mist);
47
+ font-size: 12px;
48
+ letter-spacing: 1px;
49
+ }
50
+
51
+ .counter-value {
52
+ color: var(--brand);
53
+ font-size: 32px;
54
+ font-weight: bold;
55
+ }
56
+
57
+ .button-row {
58
+ flex-direction: row;
59
+ gap: 12px;
60
+ }
61
+
62
+ .button-primary {
63
+ align-items: center;
64
+ justify-content: center;
65
+ border-radius: 12px;
66
+ padding: 14px 22px;
67
+ background-color: var(--brand);
68
+ }
69
+
70
+ .button-secondary {
71
+ align-items: center;
72
+ justify-content: center;
73
+ border-radius: 12px;
74
+ padding: 14px 22px;
75
+ border-width: 1.5px;
76
+ border-color: var(--mist);
77
+ }
78
+
79
+ .button-primary-text {
80
+ color: var(--ink);
81
+ font-size: 15px;
82
+ font-weight: bold;
83
+ }
84
+
85
+ .button-secondary-text {
86
+ color: var(--chalk-bright);
87
+ font-size: 15px;
88
+ font-weight: bold;
89
+ }
90
+
91
+ .details-card {
92
+ align-items: center;
93
+ gap: 10px;
94
+ padding: 24px;
95
+ border-radius: 16px;
96
+ background-color: var(--paper);
97
+ }
98
+
99
+ .details-title {
100
+ color: var(--chalk-bright);
101
+ font-size: 18px;
102
+ font-weight: bold;
103
+ }
104
+
105
+ .details-body {
106
+ color: var(--chalk);
107
+ font-size: 14px;
108
+ text-align: center;
109
+ }
@@ -0,0 +1,77 @@
1
+ import { Stack, useStackNavigation } from '@symbiote-native/navigation/react';
2
+ import { useState } from 'react';
3
+ import './App.css';
4
+
5
+ function MenuScreen() {
6
+ const navigation = useStackNavigation();
7
+ const [count, setCount] = useState(0);
8
+
9
+ return (
10
+ <safe-area-view className="screen">
11
+ <image
12
+ className="brand-logo"
13
+ resizeMode="contain"
14
+ source={require('./assets/react-native-logo.png')}
15
+ />
16
+ <text className="title">Welcome to SymbioteNative!</text>
17
+ <text className="subtitle">Framework-agnostic React Native, driven by React.</text>
18
+
19
+ <view className="counter-card">
20
+ <text className="counter-label">TAPS</text>
21
+ <text className="counter-value">{count}</text>
22
+ </view>
23
+
24
+ <view className="button-row">
25
+ <pressable className="button-primary" onPress={() => setCount(count + 1)}>
26
+ <text className="button-primary-text">Tap me</text>
27
+ </pressable>
28
+ <pressable className="button-secondary" onPress={() => navigation.push('Details')}>
29
+ <text className="button-secondary-text">Go to Details</text>
30
+ </pressable>
31
+ </view>
32
+ </safe-area-view>
33
+ );
34
+ }
35
+
36
+ function DetailsScreen() {
37
+ const navigation = useStackNavigation();
38
+
39
+ return (
40
+ <safe-area-view className="screen">
41
+ <view className="details-card">
42
+ <text className="details-title">You made it!</text>
43
+ <text className="details-body">
44
+ This screen was pushed by the Stack navigator — proof navigation actually works.
45
+ </text>
46
+ </view>
47
+ <pressable className="button-secondary" onPress={() => navigation.pop()}>
48
+ <text className="button-secondary-text">Go back</text>
49
+ </pressable>
50
+ </safe-area-view>
51
+ );
52
+ }
53
+
54
+ const SCREEN_OPTIONS = {
55
+ headerTranslucent: true,
56
+ headerTintColor: '#ffffff',
57
+ headerTitleColor: '#ffffff',
58
+ headerStyle: { backgroundColor: '#0b1622' },
59
+ headerUserInterfaceStyle: 'dark',
60
+ };
61
+
62
+ export default function App() {
63
+ return (
64
+ <Stack initialRouteName="Menu">
65
+ <Stack.Screen
66
+ name="Menu"
67
+ component={MenuScreen}
68
+ options={{ title: 'Home', ...SCREEN_OPTIONS }}
69
+ />
70
+ <Stack.Screen
71
+ name="Details"
72
+ component={DetailsScreen}
73
+ options={{ title: 'Details', ...SCREEN_OPTIONS }}
74
+ />
75
+ </Stack>
76
+ );
77
+ }
@@ -0,0 +1,77 @@
1
+ import { Stack, useStackNavigation } from '@symbiote-native/navigation/react';
2
+ import { useState } from 'react';
3
+ import './App.css';
4
+
5
+ function MenuScreen() {
6
+ const navigation = useStackNavigation();
7
+ const [count, setCount] = useState(0);
8
+
9
+ return (
10
+ <safe-area-view className="screen">
11
+ <image
12
+ className="brand-logo"
13
+ resizeMode="contain"
14
+ source={require('./assets/react-native-logo.png')}
15
+ />
16
+ <text className="title">Welcome to SymbioteNative!</text>
17
+ <text className="subtitle">Framework-agnostic React Native, driven by React.</text>
18
+
19
+ <view className="counter-card">
20
+ <text className="counter-label">TAPS</text>
21
+ <text className="counter-value">{count}</text>
22
+ </view>
23
+
24
+ <view className="button-row">
25
+ <pressable className="button-primary" onPress={() => setCount(count + 1)}>
26
+ <text className="button-primary-text">Tap me</text>
27
+ </pressable>
28
+ <pressable className="button-secondary" onPress={() => navigation.push('Details')}>
29
+ <text className="button-secondary-text">Go to Details</text>
30
+ </pressable>
31
+ </view>
32
+ </safe-area-view>
33
+ );
34
+ }
35
+
36
+ function DetailsScreen() {
37
+ const navigation = useStackNavigation();
38
+
39
+ return (
40
+ <safe-area-view className="screen">
41
+ <view className="details-card">
42
+ <text className="details-title">You made it!</text>
43
+ <text className="details-body">
44
+ This screen was pushed by the Stack navigator — proof navigation actually works.
45
+ </text>
46
+ </view>
47
+ <pressable className="button-secondary" onPress={() => navigation.pop()}>
48
+ <text className="button-secondary-text">Go back</text>
49
+ </pressable>
50
+ </safe-area-view>
51
+ );
52
+ }
53
+
54
+ const SCREEN_OPTIONS = {
55
+ headerTranslucent: true,
56
+ headerTintColor: '#ffffff',
57
+ headerTitleColor: '#ffffff',
58
+ headerStyle: { backgroundColor: '#0b1622' },
59
+ headerUserInterfaceStyle: 'dark' as const,
60
+ };
61
+
62
+ export default function App() {
63
+ return (
64
+ <Stack initialRouteName="Menu">
65
+ <Stack.Screen
66
+ name="Menu"
67
+ component={MenuScreen}
68
+ options={{ title: 'Home', ...SCREEN_OPTIONS }}
69
+ />
70
+ <Stack.Screen
71
+ name="Details"
72
+ component={DetailsScreen}
73
+ options={{ title: 'Details', ...SCREEN_OPTIONS }}
74
+ />
75
+ </Stack>
76
+ );
77
+ }
@@ -0,0 +1,129 @@
1
+ :root {
2
+ --ink: #0b1622;
3
+ --paper: #13243a;
4
+ --mist: #41506a;
5
+ --chalk: #cbd5e1;
6
+ --chalk-bright: #ffffff;
7
+ --brand: #2c4f7c;
8
+ }
9
+
10
+ .screen {
11
+ flex: 1;
12
+ background-color: var(--ink);
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: 24px;
16
+ padding: 24px 32px;
17
+ }
18
+
19
+ .brand-row {
20
+ flex-direction: row;
21
+ align-items: center;
22
+ gap: 28px;
23
+ }
24
+
25
+ .brand-logo {
26
+ height: 64px;
27
+ }
28
+
29
+ /* aspect-ratio matches each source PNG's real pixel proportions — a shared square box would
30
+ stretch them off their real shape. */
31
+ .brand-logo-react {
32
+ aspect-ratio: 1.0977;
33
+ }
34
+
35
+ .brand-logo-solid {
36
+ aspect-ratio: 1.03125;
37
+ }
38
+
39
+ .plus-icon {
40
+ width: 48px;
41
+ height: 48px;
42
+ }
43
+
44
+ .title {
45
+ color: var(--chalk-bright);
46
+ font-size: 22px;
47
+ font-weight: bold;
48
+ text-align: center;
49
+ }
50
+
51
+ .subtitle {
52
+ color: var(--chalk);
53
+ font-size: 14px;
54
+ text-align: center;
55
+ }
56
+
57
+ .counter-card {
58
+ align-items: center;
59
+ gap: 4px;
60
+ padding: 20px 28px;
61
+ border-radius: 16px;
62
+ background-color: var(--paper);
63
+ }
64
+
65
+ .counter-label {
66
+ color: var(--mist);
67
+ font-size: 12px;
68
+ letter-spacing: 1px;
69
+ }
70
+
71
+ .counter-value {
72
+ color: var(--brand);
73
+ font-size: 32px;
74
+ font-weight: bold;
75
+ }
76
+
77
+ .button-row {
78
+ flex-direction: row;
79
+ gap: 12px;
80
+ }
81
+
82
+ .button-primary {
83
+ align-items: center;
84
+ justify-content: center;
85
+ border-radius: 12px;
86
+ padding: 14px 22px;
87
+ background-color: var(--brand);
88
+ }
89
+
90
+ .button-secondary {
91
+ align-items: center;
92
+ justify-content: center;
93
+ border-radius: 12px;
94
+ padding: 14px 22px;
95
+ border-width: 1.5px;
96
+ border-color: var(--mist);
97
+ }
98
+
99
+ .button-primary-text {
100
+ color: var(--chalk-bright);
101
+ font-size: 15px;
102
+ font-weight: bold;
103
+ }
104
+
105
+ .button-secondary-text {
106
+ color: var(--chalk-bright);
107
+ font-size: 15px;
108
+ font-weight: bold;
109
+ }
110
+
111
+ .details-card {
112
+ align-items: center;
113
+ gap: 10px;
114
+ padding: 24px;
115
+ border-radius: 16px;
116
+ background-color: var(--paper);
117
+ }
118
+
119
+ .details-title {
120
+ color: var(--chalk-bright);
121
+ font-size: 18px;
122
+ font-weight: bold;
123
+ }
124
+
125
+ .details-body {
126
+ color: var(--chalk);
127
+ font-size: 14px;
128
+ text-align: center;
129
+ }