@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,8 @@
1
+ // require('./assets/x.png') never landed a resolved asset for a Svelte-compiled screen on
2
+ // device (real bug, 2026-09-18) — the numeric-asset-id path through Metro + this adapter's
3
+ // dom shim has no working precedent anywhere in this project (every other Svelte image use,
4
+ // examples/svelte included, is a plain {uri} object). Inlining as a data URI sidesteps the
5
+ // untested path entirely and reuses the ONE proven-working shape.
6
+ export const REACT_NATIVE_LOGO_URI = 'data:image/png;base64,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';
7
+ export const PLUS_ICON_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfqCRIHLh3hRRxRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI2LTA5LTE4VDA3OjM0OjM4KzAwOjAwBIF8BAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNi0wOS0xOFQwNzoyNToyMCswMDowMKTVPr8AAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjYtMDktMThUMDc6NDY6MjkrMDA6MDBl2ivzAAACEElEQVRo3u2ZvUscQRTAf6PrV0RJFREDlin0CAn4B6RIHTR90CKBbCeCYJp0V9gFQUifdLFLI/4FSSWpbIQgSBovekZz597tTppDcruzMzfDRYu81yy8Nzv7m7e772MGRET+d1G+N8QO+/YNAESMlBivaPsiRL4AwCteAApdsHymSuY3WQjAHBV2aHR5TzPMIr/YJPn3AHBAzEVON04lZKqBIABt+HbCZgr0AND9sbn+jX57oI8iAAIgAAIgAF25oMeIri2WrJdZ/s4i+WQ0wgrzlkeA5gmNEtsc76wFieKQ9/wu9QBwjw2m+elYwi6tgu6Kfe7z3HrfJDV2OLIBKCI+8cZSKyqgRrOgT1ijiu0FpbxkOa801QN1vhMideqOESdFlQlAgW9t28vo2FiD3/pvKAACUFqW+wXU8CBuAhhi3OGZBm2DVl33ixGjAGQ0OpoxBml1tA4AzRIPHSvZ422hB4xY5xEZoJlgClAkHJMCimnukDFT7KnyADU+8tjhxgpPqRYAxljiAV/RgOa0o73buTZpAmccXFtKAC7ZcLRrGVsslNi+8IzEuueQkloAtokhczbYaaklIzHkSavkVuuO6THWTKl8s8itxwEBEAABEAABCN2obBeqoJa1o+wrgGaWVS5zm9WjzHB2MwA/SHhtBPtmLNX6DrDFB6O7Fae+pwVhAOeclxt9j2xERET+AAlre1gB8o8WAAAAAElFTkSuQmCC';
8
+ export const SVELTE_LOGO_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAACACAYAAAAMPJdNAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfqCRIHLh3hRRxRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI2LTA5LTE4VDA3OjE5OjEwKzAwOjAw2NkHbwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNi0wOS0xOFQwNzoxNzozNCswMDowMAEnrA4AAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjYtMDktMThUMDc6NDY6MjkrMDA6MDBl2ivzAAAZHUlEQVR42t2dd3xUVd7Gv3cyCSGEAKEIgoo0KSooIFhAVERFFHHFta66a118WcvaXcX33ZV17e66KqsuthUUC9hQUZpgRUBARGkBQgklhRDSZub945mbXCYTyJx77yTZ5/OZzydGcst55nfOc37tWPyXITI07q9TgfZAT+Ao4EigC9ARaAlkAGmABYSBUqAY2AFsAFYDy4EVwBpgOxCJvYk1z993s5I8lr4hMjT6NtVDmA4cAQyJfo4GDgYygYDBLSqBQkTeEmA+8CWwFijf518GwJrj/Ts2erLiWFInYARwPnAc0NavWwNbgK+A6cBnQG7sv7Dme3fDRktWHJK6A5cAF6LpzsR6TBECVgFvAVMJsIJw9f/0anpsdGRFTiKWhoOBq6KfrvX9fMBGYCrwPCKwCm5Ja1RkxVhTE2A0cDvQv76fLQ7WAs8BLyKhIuwBa5HZBRsFWZEhNZ60NyLpQqBpfT/f/h4dCZE/E2EWVrX8MbGyBk9WjDVlApcDt9Iwpry6YhfwZPRTaKvWRAlrsGTFERDHAXcDZwPB+n4+k1cC3gXuBH62f5kIYQ2OrDhTXmvgWuB/gA71/XweYDFwE1BFU10Ja1BkRYai75+eKgCcCtwDnNzQntUlcoDxwAz7F3UhrEEMQC0b2/HA1UCr+n4+n7AVuBHtzYADE1bvZMUQlQqcC9xFw5TjXmMrcB11tLB6IysyDJy7fKAHcBtwMdAsOQ9R4xlqwsJvX0gOcAUwlxQgVDth9UJWjDVlIIJuQ45XH2+MyLGA9HRo1Q7aHAzZHaB5K0jP0L8rL4Pdu2DXVtieC/l5sLdEfx/wZdSWAhcBPwFQCdbCmv8oqWRFTiY2sHAskrKjUYjCpxsjkjIzofsx0P806HM8dOoGLdpCk6aQErMbCIegbC8U7oTNa+Cnb2HxbPjpOyjYqX/jrcW9D/wGyIf41pU0smKsqRXwOyQiDvH1xmGgVRs48Rw4/TLoOQAyssyuVbYX1q+AeW/DnGmw8Rf93ptRjAB/weJ+IpqcYwnznawYkixgKJLjp+HnahAGmjSBE0bBhbdA70EQSPHu+pvXwscvw/vPQ16uV29SAFwKfAjAqWBN2HfwfEHkFBQ4qEYHYBxSP238ui+R6KdLb7j4djhlLDTJ8O12/Pw9vPIX+GI6hEJejOjXwBgUK9vHunwhK8aagsBI5Coa5NOQCWEgs7mmu1/fCh2T5D7cuxve+Se89lcoKvDCyh6gkgkEAQusufqlp2TF2dx2BW5Bztfmvg2W7fXoPQguuxsGj6wpGHxHBGa/CU/fCts2uSUsFxiF0geqrMszsmKISgfGAncAfXwdoxCQ3QZGXw/n/R5a17P78OuP4NHrYcsGt4Q9izwcIdu6XJMVx5qORiT9CgUI/UEYCAZgwOmypr41PcD1hi+mw8PXQP52N4+Uh5aPRSDrcjVXxBCVBVwJ3Ax09m0gbAHR4VC44CYYeRVktvTtdkY4aTTs2Az/uFkbbDPC2qGckqq4stFl4oQxTkBy/AzAQ30cA1uODxkDl94B3fr5divXqCiDp8bD9ElurGs1cDqwHgwGNiaM0RJZ0mPAMfi1b3LK8ev+CpffDe383Uu7RkoQuh4NS+bAjq2mhLVCyaWLIUGyqqY93bg38A/gBvxUerYcH/U7GP93OPYUCKb6djtPkdkSMprDVx/IfZU47Azhd4BQncmKWZ9OB15Ama7+rOq29fYZBDc+Dr8aDy3820v7hoO7wKrvYMNq03mnOQqh7KwTWVVENQFC/BrJyi6+vWAIyG4LY2+GcY/BEf0hkMycTQ+RmgZp6bBwuql1ZQLfAD8ckKwqoiqBCJcDTyGl4j3CQEoAjhsBN/0dRl6paSQZiESgpAh250N5KaSkQopHWim7PSyaJR9i4vOQBWwhwof7le77TH1BLgQeRwksHg9U9NP+ULjgD3D2b5Mnx8MhWDofZr0Gq5dCcYGsof3hMOhMGHq++412VjYMOgtWfGN6haOxyKqV55g05VOAl1FuhMeDRVSOnweX3And+3l+i1qxdT28+QTMfAkKC/Q7e0QiSH71GiQFeswwd/daOhfuGAUlxSbWtQE4o3ayqq2qO/AG0M/TgarhHb9QQcBkoLwM5r0F/3kIVv+g39U2EiGgY2e49xU46iTze+Zvg5tOhbU/mgiNYmBs3EnZQVQmyiI9zdPBCgPNMiXH/5BkOb5uOTx3hzzkdhxqf9/0ALK6LWvghHOqQ/+JIrUJfP8ZrF9lQlYK8GWNNStGov8O+fi8gS3Hj6wH73hJEcx8Gd54DHLXJZYIkwIsWwBffgBnXmF2/2AqdOxm+vQpQMf9jVRfFN7wRhLZ3vFzr4Mx45LrHV++EF59EL6ZCRUhs/1ORUiK7ozLwTLcRrTu4GZX2m4fshxWlYaS/w91PVARIGDB4NPh8nuS6x3Pz4Ppz8C7z8CObfraudmu5W2SrDeNPGe2dHP/rNos6zQUWnaHMNAyG8beBGNuVLpXMhAOwTcfy5qWLahWdl7ATR5HMJXYwucEkF5FlsOqmgLXI3HhYsCAQ7vBuMeVtJIsbM2BNx+HjybD7kLv8vwsYOcW+H429DpOe6dEEZJnwfQJ4lnWEFQQYI4w0KMf/PE5vVgyUF6qFDGnHPfSQxUANq6C+y6Aw3oq6Hn8KOhxbN23HMWFGhuz5yqPJSsFBbzMrSoMHN4LbpsEPQd6OFr7wdpl8J+/wdxpUFrqb7rz3j2wcpE+7z4DR50Iwy+RtyPrAM6dnZtdGBa7g1BjAzzc+HIRoHU7GP9kcojaUwQfvwRvPJ64HDeFRfW0WlwICz6Ebz/R+466WoHReGtzZQVs+sXNnbfLsgLYCfrDUdcVMwSDcOldmiL8xvKF8EpUjlcaynG3sNBcFKqEZV8qxfqTV5RUetyZ+270C7ZDzkrT9TMM5AarflQA5AzjBw8DQ0bBqGv8HSCv5bhXCCDSvpujfPjhl8iNZucurl8BeRtNn7UUWBd0FAschkLziSMCtGqtxMqmPlXr+CnHvUQKctZOnwQrvoTfPqCpcek82LvXlKwCYH3QseD1Q82oEkcYOOk8VWb4ga3r5Saa+RLsLvKr7MY72Ova6mUw8SpN2Ys+d3PFTVRNg8KxmHxXI0DzLBhxmbeJ/yA5PjfqHV+zTL9rCFNeXRFAImTKI2BZbp59OZBvk5WG2roljjAKux8xwNsXXbtMJM19y3857ieq4mPmmh11X4vYZLVAa5bZwwwYDk3dOTyqsKcIZk6WFyJ3fXLkeMNGHqosqcrIbY1pGU7TDOg92JvHWr4gKsc/9leO16WWGBrK2vg9SvasIisbE69FGNXlHuwy0amyHN55WgHBHXn+yPEwIik9DVodpCTRth31c0ZzJchUVsCeQijIg20bYfsm/VxWUZ8W/h6wl1A1Wa0wKSKIAG06HNjNciB88CJMugtKy7yX4yGgSRp07gX9h0O/Yfq5ZTtFfeOJonBIbqX8rbBuhWT34jmQ8yOUlifT4tYCMwEIVpOViekwtTrIXe7E5jUw9VER5eU3NwykN4FjToGzrhJJreqYQRdIgWZZ+nTqoX1SwXb4YT58+hp89yns3p2Mfd67VLCWVJX8ONWg2XelWQt3ofnvZ0OucbZqTdiiq9cA+PUtcMK53mzUW7ZVWtrgs5WpNO1J+QQrKv2aHrcAr+DwWNmj7HRPJoagy44I61doqvLiWxoCslvDOdcq2NnmYA8uGoO0JjBwhBwAn76qddZ94Vw8TMViqaMIpIqsCkwjLaEKd49UUe7u76G6sG7g8Ghh3VBtQv1ERnMYfYP2l8/crjXNu1uqC2hE84RdU2yTs4e6idmaKNltmsMttO1o/pK2BO9wGNzwMEyYCv1O9p8oJ3oOhD+9CsMv9uqKlShFXd1mHCuM/WMB6k2e+OKTnye3ULrhunDkicohTDRT1c7kHXq+Cuu69vVqsBJHm45w0z+UGzhzsturFQEL7P+wHC5F27J2IutKDBaKfu7ON3+0XgO1BtTVrm1r6nok3PYvuOOF+iXKRlY2jHsETv6V6RxlIxu4IN41nGTtTPiyFrBrG2xZZ/5oTTLgij/B4UfENjmpiTCQmQVj/wcmzlAOX7JSruuCrNbw+0egz3FuCRtLQD2AnUm3NlkFqB95YrDQ9PXTd+5esls/WUmfgbKcENW58PZ/Wxb0PRHue13FdR0O92B0fUD7znDtX5XeYO677YL6Lu6jklMmyH1biZoxJu7kCwNpqTJ/N/utgw6DwWdBq7ZQXiLREkxVPkPXo5R7eM2DItY0IzZZ6HC4XFeLZ7u5SlPgbSKUTciBBwDLYWaXA5NJVL5HkGfgkY+9K9fZU6Ref2Ulcgm1ai9vQmNCwXa4e7RyM8y+W7tRl5l5oD4YzssswdnZv66wgF15KqHxCs2y4JAesqJOPRofUSCPx/k3Qpqx06A5dv5mVCUHHF231qLzoczw2RTIXVPfQ9SwMOgs7cPMxcYQIMNe+5yWtQcdK5Q4AsCm1fD+v+p7eBJHOKRQyKrvlOCyYZU87l6geSu10DNfYnviaJ4ZqwhmoiYkZjGPD1+E48+Go4d487J+Y+U3MONZhUAKd0A4rM19595w2kWqxmzWwt09BpyuUp8dW0w8NW2BXsCqyNCoMHwgB6KqcBc6RqJnwpe1gJIS2LZe5u9XSpoXKNiuLN6nb4HFX0BRvkpXK8phb7Gye7/+UFbWe7C7YvSM5uoyY9YHIwUly8wn4lDxUbJCaIYdjYkf3EJpY5UV0P9U77Od3CIcVljjiRvlFioprg4kOj8BlOCydiVsW6dWD6ab75Sg0qaXGPeg20iY6dSSHDWLaIKGESJoann7abcZPd4ibwM880d44CJYEj3b70CDlwJ8MQM+/Le7e3c5GlKN96CdCJC+D1kOVZgPTDN+MAsoK4PJEyQ46puwinKY/Yb2PFMfh90FiU1H4QjM+o/WNFMcdKjWQrOhaIN63xOvmC4DcNFDABFWXAT/vE3Kasw4NQJJNnJWwusPw+dT1UTfRJVZaBrb+It576isbK1dxYUmf92c6IFu8WzzPGy/lBtYyBMx6S7YlqOgYF1zINxib7FyJaY8AhtXu8tMslA/94I88+dJawpN0p2t/xJBevQjshzFCW3ROVXetEu1kMqa9iSsXgJX3h8NDvro2/vpW3h1Inz5PpRXeBNuD6SoWZbx3wfciK0AUbEnyyrBPjlxDJLu3sH+Jn0/F9ZeACN+A+dco72Ml9iRq5S2Gc/Cts3e5R5GkOvITW5kOKSe7y4RdPRoykY9bv352geAwl3wxhMw/2156YeNhW59zVsVRMKQuxYWTNfpBWt+8L4UKIw2tm5CMqV75ZQ2k+6VKEeGYEwzLX/PrLL3MVs3wJRoRf0R/ZV82XuwOrBkZde+pwlVKudj+yZ1MFs0SxvOrTnV6T5epl+EUFD0wpvdhX+KdmodNUNp9FMlMILABfh50o4TNmlF+fD1LPhmFmQ0U3bvQYdB205SXk2baa4vL5WS2rlZac15GzQAFeFqgrycD2yJ3bs/jHsUuhzl7npb10kVm32RioC9UE1WN3SgS3Jh1+SCXmbDashZfeC/sWL+1kuEgBYtYeRvFfD0onHyL0vUTsjseXcgVVFF1hDq+6RS8zRTbxBBqQP9h2qb0X+4N61e9+6BleYOISAHizIiIisFGFbPQ1W/CAHtOmjzfu513jZOzvlRwsec91VEgHKR1R51QDODZckl0xipDiOf3YkjZU29fTiEaOF7ULDLlKwy4EcAUkVWD0zbqUaAEZdqhz/v7cZDmp01dUg39awYcZk/jZPzNugEO3NsBVYBWPNFVh9MCukiSMGNuhp69JdieuspyN/VMFse2AgDTZsqsHjx7d5vzp345FX5J82nwGXoeCZAZPXCtEq/Yzfo3Ef1xFfcB0eeoFPals6DUKRh1QLbcrxHP7j0TjVQTvXvECLW/AAzJrlprAUwByhzVpGYHd8WQRtau+rRsrTT736M+lVMf1Z5GfZxsfWJMJDVUnL8gj8oZOEnSorgpf+FLTlu3n0noMTD6BctCJgVMaUAPQbUrNho0UadZk48Vx6Kz16HzevqhzS7i+gxQ9RF1Cs5vt97htV+fP47bt/3K6Liwo41BjE9uz4tXef81oZO3eGav8BZV8KcN7XQrluevGJqP+X4/vDevxRDC4XdiK0QCgCXOgOWQaJRyIQQQf67ugxAp+6SxaOu1skEC6ar99K2DdHOlh7DluMnnCVr8kOOxx2TsML/k+4ybbTvxHLswm/HdYKYnk6Xlp5YTVbLdvK0DxkjR+ycafDCvZL9ngxW9NOpq2qJR1yevHNMSvfAtKfUBMw9UaDTKbYSkWS3Ye5KDqSYHawSCGiBH3AavPx/Ch+4fblkyvFY5KyEyQ+obVFlpRdELQGmAjWuFUQVjwYD5DKgFg67LydNthx3orRE4un1v0HOz16FZyrRAXK5sVYFImsPJq2Ayktl/qZo0QaaZ0NhvtlLVnnHr9JBnX7LcSdWLYLXJsKC96C83Eux9BE69yXumASRCz6xJlsWinwWbDd/rNYd1J5gY4LFDLZ3/NghEi4DTk/eQWhFu+CDF+SpsQ+O9u7WucCfUanPPse02wgCmzGJEJeVqTuMKVKCOjjm64+gcGfdrKu+5HgkosK4Vx9Uk5VQ2OutRzkwEZ1AVyuCRDtuJYwwcqm4Qd+TtdY8f6/Ir20A9vGO3+VdF7a6YEcuvPV3Jazafk/vDXkyOkMTiG9VILJ+RAtbYsrQQnN3cYF54r5l6eDNYKoW6m2bq68N1Xl2fnvH46GyQuGN1ybCymjNtD8O6o+B+4nmWdRGFIigFUAhiZb5WMCGn9Rx002JT2qa/HV9T4bPp8CyL9RbA3RWYt+hqso/5AhfRiouNv2iBNFPX4OSPX56W74GxqNQyAHTq+1pcD0mZBXv1plSXtRjde+nz95iOUKxICMruaVDpXskx6c8okPJ/HWLfQtcA/xs+033Z1UAASx2ED1h2ggLZqhfuVdomgmtD5ZaTCZRqxbBg1fAY7+vPj3Ov0DqPJSjucye6u3+TPtDINrMaS4mla8BtIOf/YZvb+U7inZpvbxnNMx+S2uVf9YUAd4ErsAO11sHtigb9mN9hXqHJ44w8N4k9QxsTIhE4PvP4f4L4bk7YVuu35GAIuBB4Fq07AB1JwqqH28dML/ufxZzhZyfVfbphxfdD2zPlXf8/rHw7Wcizl+iFiNrug9184FIYkRBdYcZ22d9HqbO3ZwflbzvNnvVT1RWwPx3VaY6+015/P0lqRB4DrgJKT/pvWDd1qhYOImZAywCTkj4KhaSuC/eB4f21AFgDQ0bf4YpD8Os1/2W4za+QNPeJzhaiCVqTU5YAJFu2MH964B/YvoqYaDvSXDPyw2nEVbpHhE05RHIWZWMzN9taAyfRQ30q+CGKOzHdhTTHQS8D5ifVREGBp8Jtz4L7c0OYfAMq75TD9sFM7wrrKsdlSi6O5EwC533cktS1XXsHyLVJ9JeBUzCTWAyDPQ/Rad7H97H1xGKi6Jd8MHz8o5vzU1GHuM64DEU4S2yf+kVSVXXs39wFIBnAa8DI11dOQx0Owquf0intCWjb63tHX/lQVj8eTJyF0vRvulvKG+iCl4TBTGzt4OwISi7xl3Fdhhoka3uYOfdIF+fX9ieC2/HeMf9xQ/AQ8BbKCcd8IckG/u80gR7icliA2WkompIc5OwK92XztVpA2lNFdF1U0wdi5LdSr55ajzMnpZsOT4fW+kFzOR4IqhBhMO6WqA52H2bBaju+NnneJ2HOHCEqhxNo7w7t8gDMfMlpWuXeXw8RnzsK8fXAF39tSYn4lqNg7Aj0ZyceOOt2hACgpak/ZEnqtVCt36qMGzWQiGT2PWtslxFaTu3aPO9eE60edUqKK9MxpQXX45XgrXQ93tX4UBkAZwD/BvTtna1wT4iKcWC5i3lZW/bSY1NMlvqiKRwSCGT/DzVE+/IVQpAeWWyjkgKoSSWiURY6BytZFmTE7WuRzGEXQc8CvgTs3B2mt7fkya3lHUt8Dg+y/FEsN9XdxCWAvwRmEC0Nc1/MUqREn6IJMjxRHDA76mDsFTgduBe/nsJS7ocTwR1mlRiCBuPEjySlLmSFBSiDKMncMSaCIA1p74frRp1XgEchAWAy1Cemw8HVCUd+8rxFkBhw7EmJxJarmNExzDkZhlY3y9hCN+8434hYW0VQ1hn4E/AJTSedawS5eo96Jd33C8YCeEYwpoAFyHxkcRaGyMkxTvuF4x3LTGEgU6mGYfWsyS17KwzipEn5jEamBxPBK63mJGhONuJWqi55HXIp+it1yNxlKGK96eRgKiqRWtMJFU9sxcXiQwjNuswiCpTLkHuqs5e3auOKESJlJOBT4mW0VS9dCMkCjwewBpTYwoQogswApE2AP+myDLgZ9SX/m2U/LNPwXJjJanq+f24aBxLA6nF7sAg1Ir8aHQoSgtwHp1cZ5Sixh6/oDSveYigbTVespGTVPUeft8gjhABbazbIFHSC6nILqjhV1vUS8ouDg4jYoqA7cjDsBoJhZ+AHGKmOfvN/A4GJhv/Dx6cn3w0k+h7AAAAAElFTkSuQmCC';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @format
3
+ *
4
+ * Symbiote Svelte canary entry. createApp(App).mount(appName) wires the
5
+ * native-host seams and RN's own AppRegistry, then mounts via @symbiote-native/engine — RN's own
6
+ * renderer is never in the path.
7
+ */
8
+
9
+ import { createApp } from '@symbiote-native/svelte/bootstrap';
10
+ import App from './App.svelte';
11
+ import { name as appName } from './app.json';
12
+
13
+ createApp(App).mount(appName);
@@ -0,0 +1,83 @@
1
+ const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
2
+ const path = require('node:path');
3
+
4
+ const projectRoot = __dirname;
5
+ // esm-env's package.json "exports" only publishes "./development" (a conditional export), not a
6
+ // literal "./false.js" subpath — Node's exports-map resolution rejects that path directly.
7
+ // Resolving the package root via its manifest and joining the filename ourselves bypasses the
8
+ // exports map, landing on the exact same physical file the "production" condition of
9
+ // "./development" already points to.
10
+ const esmEnvFalseFile = path.join(
11
+ path.dirname(require.resolve('esm-env')),
12
+ 'false.js',
13
+ );
14
+
15
+ const defaultConfig = getDefaultConfig(projectRoot);
16
+
17
+ /**
18
+ * @symbiote-native/* and svelte resolve as ordinary npm packages from this app's own
19
+ * node_modules. @react-native/babel-preset strips the types.
20
+ *
21
+ * @type {import('@react-native/metro-config').MetroConfig}
22
+ */
23
+ const config = {
24
+ // Compile .svelte SFCs on the way into the bundle — @symbiote-native/svelte ships the
25
+ // transformer itself, so no local wiring file is needed.
26
+ transformer: {
27
+ babelTransformerPath:
28
+ require.resolve('@symbiote-native/svelte/metro-svelte-transformer'),
29
+ // @react-native/metro-config defaults inlineRequires to true — every top-level import gets
30
+ // rewritten to a lazy, per-call-site require(). Svelte's internal client runtime is a graph
31
+ // of small files wired via module-scope singleton reactivity state (the "current effect"/
32
+ // signal graph) — under inlineRequires this graph re-enters itself during mount and blows the
33
+ // JS stack (`Maximum call stack size exceeded` inside metroRequire, on a real device/
34
+ // simulator). Disabled here.
35
+ getTransformOptions: async () => ({
36
+ transform: { experimentalImportSupport: false, inlineRequires: false },
37
+ }),
38
+ },
39
+ resolver: {
40
+ // Teach Metro that .svelte and every style extension are source files (the transformer
41
+ // turns each into a module) — css/scss/sass/less/styl is the framework-agnostic standalone
42
+ // stylesheet/CSS-Modules path, shared with the React/Vue/Angular apps; scss/sass/less/styl
43
+ // are optional preprocessor sources (see core/css-parser/src/preprocessors.ts).
44
+ sourceExts: [
45
+ ...defaultConfig.resolver.sourceExts,
46
+ 'svelte',
47
+ 'css',
48
+ 'scss',
49
+ 'sass',
50
+ 'less',
51
+ 'styl',
52
+ ],
53
+ // `svelte`'s package.json "." export splits `browser` (the real client runtime — mount()/
54
+ // unmount()) from `default`/`worker` (the SSR build, whose mount() throws
55
+ // `lifecycle_function_unavailable`). Metro's own `unstable_conditionsByPlatform` only maps
56
+ // `web: ['browser']` by default, so iOS/Android get NO browser condition and Metro resolves
57
+ // Svelte's SSR build into the native bundle, crashing on the very first mount() call.
58
+ unstable_conditionNames: ['browser'],
59
+ // svelte/internal/client/dom/operations.js's init_operations() gates a block on esm-env's DEV
60
+ // export: when true it calls init_array_prototype_warnings(), which monkey-patches the REAL
61
+ // global Array.prototype.indexOf/lastIndexOf/includes for the app's lifetime. DEV falls back
62
+ // to process.env.NODE_ENV ('development' in every --dev build), so this patch is ALWAYS
63
+ // active in dev today — real-DOM-debugging tooling with zero relevance under our DOM shim,
64
+ // and the prime suspect for a repeatable native SIGSEGV deep in Hermes's JIT/inline-caching
65
+ // for built-in Array methods. Force esm-env's DEV to resolve false by redirecting its one
66
+ // physical import site, without touching global condition resolution.
67
+ resolveRequest: (context, moduleName, platform) => {
68
+ if (moduleName === 'esm-env/development') {
69
+ return { type: 'sourceFile', filePath: esmEnvFalseFile };
70
+ }
71
+ return context.resolveRequest(context, moduleName, platform);
72
+ },
73
+ // Metro's dev-server HMR runtime decides per updated module whether to hot-patch in place or
74
+ // fall back to a full reload, via react-refresh's own heuristic (isLikelyComponentType):
75
+ // typeof export === 'function' and its name starts with an uppercase letter. Svelte 5 compiles
76
+ // every .svelte file to exactly that shape, so it's misread as a hot-patchable React
77
+ // component; this adapter never registers one, so the update is silently swallowed — no
78
+ // error, no visible change. Force every `.svelte` update straight to a full reload.
79
+ unstable_forceFullRefreshPatterns: [/\.svelte$/],
80
+ },
81
+ };
82
+
83
+ module.exports = mergeConfig(defaultConfig, config);
@@ -0,0 +1,26 @@
1
+ {
2
+ "scripts": {
3
+ "android": "react-native run-android",
4
+ "android:release": "react-native run-android --mode Release",
5
+ "ios": "react-native run-ios",
6
+ "ios:release": "react-native run-ios --mode Release",
7
+ "lint": "eslint .",
8
+ "start": "react-native start",
9
+ "dev": "react-native start --reset-cache"
10
+ },
11
+ "dependencies": {
12
+ "@symbiote-native/android": "latest",
13
+ "@symbiote-native/svelte": "latest",
14
+ "@symbiote-native/engine": "latest",
15
+ "react": "19.2.3",
16
+ "react-native": "0.86.0",
17
+ "svelte": "^5.56.0"
18
+ },
19
+ "devDependencies": {
20
+ "@react-native/babel-preset": "0.86.0",
21
+ "@react-native/metro-config": "0.86.0",
22
+ "eslint-plugin-svelte": "^3.23.0",
23
+ "@typescript-eslint/parser": "^8.70.0",
24
+ "prettier-plugin-svelte": "^4.1.1"
25
+ }
26
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "scripts": {
3
+ "pretypecheck": "css-dts .",
4
+ "typecheck": "svelte-check --tsconfig ./tsconfig.typecheck.json --threshold error"
5
+ },
6
+ "devDependencies": {
7
+ "@react-native/typescript-config": "0.86.0",
8
+ "@types/react": "^19.2.0",
9
+ "typescript": "~6.0.0",
10
+ "svelte-check": "^4.0.0"
11
+ }
12
+ }
@@ -0,0 +1,47 @@
1
+ // App-level Svelte compiler config — read by svelte-check, the language server, and (once wired)
2
+ // Metro's own transformer, same as adapters/svelte/svelte.config.js. `fragments: 'tree'` is
3
+ // mandatory, not a preference (svelte-adapter-dom-shim skill §2): it makes the compiler emit
4
+ // `from_tree()` (element-by-element via document.createElement), never `from_html()` (innerHTML on
5
+ // a <template>), so the DOM shim needs no HTML parser. `css: 'external'` keeps Svelte from
6
+ // injecting <style> into a document.head that does not meaningfully exist — styling goes through
7
+ // @symbiote-native/css-parser + the class registry instead (see App.css).
8
+ //
9
+ // `forbidWebOnlyConstructs()` rejects <svelte:head|window|body|document> and {@html …} — all dead
10
+ // under RN, and {@html} is the dangerous one: it compiles cleanly and then paints nothing. The
11
+ // Metro transformer runs this same guard itself, so the bundle is protected either way; registering
12
+ // it here is what surfaces the diagnosis in `svelte-check` and in the editor's language server,
13
+ // which run the preprocessor pipeline but never Metro.
14
+ //
15
+ // `scopedStyles()` compiles a component's own <style> block into registerRules() output and
16
+ // scopes every class in that component's markup. Metro's transformer runs it itself, so the
17
+ // bundle is correct either way; registering it HERE is what stops svelte-check and the editor
18
+ // from reporting `css_unused_selector` on every rule in a scoped block (Svelte's own scoping
19
+ // deliberately refuses to reach into a child component, and in this project a component renders
20
+ // only other components — see the preprocessor's own header). Order matters: the guard throws on
21
+ // a construct that cannot work at all, so it runs before anything rewrites the source it reports
22
+ // offsets against.
23
+ //
24
+ // `collapseTextWhitespace()` collapses whitespace inside a Text node the way a browser or Vue's
25
+ // compiler would — Svelte doesn't, so a sentence wrapped across source lines for readability
26
+ // otherwise ships a literal newline into the native text content (svelte-adapter-dom-shim skill
27
+ // §16/§29/§30). Metro runs it too, so the bundle is correct either way; registering it here is
28
+ // what surfaces the fix in svelte-check and the editor.
29
+ import { forbidWebOnlyConstructs } from '@symbiote-native/svelte/preprocessor';
30
+ import { scopedStyles } from '@symbiote-native/svelte/scoped-styles';
31
+ import { collapseTextWhitespace } from '@symbiote-native/svelte/collapse-text-whitespace';
32
+
33
+ export default {
34
+ preprocess: [
35
+ forbidWebOnlyConstructs(),
36
+ scopedStyles(),
37
+ collapseTextWhitespace(),
38
+ ],
39
+ compilerOptions: {
40
+ fragments: 'tree',
41
+ css: 'external',
42
+ // `<pressable class="x" />` is how an app writes a primitive, and Svelte warns on it. Full
43
+ // reasoning in adapters/svelte/svelte.config.js, which this file mirrors.
44
+ warningFilter: warning =>
45
+ warning.code !== 'element_invalid_self_closing_tag',
46
+ },
47
+ };
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@react-native/typescript-config",
3
+ "compilerOptions": {
4
+ "types": ["node"],
5
+ "plugins": [{ "name": "@symbiote-native/css-parser/typescript-plugin" }]
6
+ },
7
+ "include": ["**/*.ts", "**/*.tsx", "**/*.svelte"],
8
+ "exclude": ["**/node_modules", "**/Pods", "e2e"]
9
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["**/node_modules", "**/Pods", "e2e"]
4
+ }
@@ -0,0 +1,5 @@
1
+ module.exports = {
2
+ arrowParens: 'avoid',
3
+ singleQuote: true,
4
+ trailingComma: 'all',
5
+ };
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,128 @@
1
+ <script setup lang="ts">
2
+ import { ref } from 'vue';
3
+
4
+ const count = ref<number>(0);
5
+ </script>
6
+
7
+ <template>
8
+ <safe-area-view class="screen">
9
+ <view class="brand-row">
10
+ <image
11
+ class="brand-logo brand-logo-react"
12
+ resize-mode="contain"
13
+ :source="require('./assets/react-native-logo.png')"
14
+ />
15
+ <image
16
+ class="plus-icon"
17
+ resize-mode="contain"
18
+ :source="require('./assets/plus-icon.png')"
19
+ />
20
+ <image
21
+ class="brand-logo brand-logo-vue"
22
+ resize-mode="contain"
23
+ :source="require('./assets/vue-logo.png')"
24
+ />
25
+ </view>
26
+ <text class="title">Welcome to SymbioteNative!</text>
27
+ <text class="subtitle">Framework-agnostic React Native, driven by Vue.</text>
28
+
29
+ <view class="counter-card">
30
+ <text class="counter-label">TAPS</text>
31
+ <text class="counter-value">{{ count }}</text>
32
+ </view>
33
+
34
+ <pressable class="button-primary" @press="count++">
35
+ <text class="button-primary-text">Tap me</text>
36
+ </pressable>
37
+ </safe-area-view>
38
+ </template>
39
+
40
+ <style scoped>
41
+ :root {
42
+ --ink: #0b1622;
43
+ --paper: #13243a;
44
+ --mist: #41506a;
45
+ --chalk: #cbd5e1;
46
+ --chalk-bright: #ffffff;
47
+ --brand: #42b883;
48
+ }
49
+
50
+ .screen {
51
+ flex: 1;
52
+ background-color: var(--ink);
53
+ align-items: center;
54
+ justify-content: center;
55
+ gap: 24px;
56
+ padding: 24px 32px;
57
+ }
58
+
59
+ .brand-row {
60
+ flex-direction: row;
61
+ align-items: center;
62
+ gap: 28px;
63
+ }
64
+
65
+ .brand-logo {
66
+ height: 64px;
67
+ }
68
+
69
+ .brand-logo-react {
70
+ aspect-ratio: 1.0977;
71
+ }
72
+
73
+ .brand-logo-vue {
74
+ aspect-ratio: 1.1542;
75
+ }
76
+
77
+ .plus-icon {
78
+ width: 48px;
79
+ height: 48px;
80
+ }
81
+
82
+ .title {
83
+ color: var(--chalk-bright);
84
+ font-size: 22px;
85
+ font-weight: bold;
86
+ text-align: center;
87
+ }
88
+
89
+ .subtitle {
90
+ color: var(--chalk);
91
+ font-size: 14px;
92
+ text-align: center;
93
+ }
94
+
95
+ .counter-card {
96
+ align-items: center;
97
+ gap: 4px;
98
+ padding: 20px 28px;
99
+ border-radius: 16px;
100
+ background-color: var(--paper);
101
+ }
102
+
103
+ .counter-label {
104
+ color: var(--mist);
105
+ font-size: 12px;
106
+ letter-spacing: 1px;
107
+ }
108
+
109
+ .counter-value {
110
+ color: var(--brand);
111
+ font-size: 32px;
112
+ font-weight: bold;
113
+ }
114
+
115
+ .button-primary {
116
+ align-items: center;
117
+ justify-content: center;
118
+ border-radius: 12px;
119
+ padding: 14px 22px;
120
+ background-color: var(--brand);
121
+ }
122
+
123
+ .button-primary-text {
124
+ color: var(--ink);
125
+ font-size: 15px;
126
+ font-weight: bold;
127
+ }
128
+ </style>
@@ -0,0 +1,128 @@
1
+ <script setup>
2
+ import { ref } from 'vue';
3
+
4
+ const count = ref(0);
5
+ </script>
6
+
7
+ <template>
8
+ <safe-area-view class="screen">
9
+ <view class="brand-row">
10
+ <image
11
+ class="brand-logo brand-logo-react"
12
+ resize-mode="contain"
13
+ :source="require('./assets/react-native-logo.png')"
14
+ />
15
+ <image
16
+ class="plus-icon"
17
+ resize-mode="contain"
18
+ :source="require('./assets/plus-icon.png')"
19
+ />
20
+ <image
21
+ class="brand-logo brand-logo-vue"
22
+ resize-mode="contain"
23
+ :source="require('./assets/vue-logo.png')"
24
+ />
25
+ </view>
26
+ <text class="title">Welcome to SymbioteNative!</text>
27
+ <text class="subtitle">Framework-agnostic React Native, driven by Vue.</text>
28
+
29
+ <view class="counter-card">
30
+ <text class="counter-label">TAPS</text>
31
+ <text class="counter-value">{{ count }}</text>
32
+ </view>
33
+
34
+ <pressable class="button-primary" @press="count++">
35
+ <text class="button-primary-text">Tap me</text>
36
+ </pressable>
37
+ </safe-area-view>
38
+ </template>
39
+
40
+ <style scoped>
41
+ :root {
42
+ --ink: #0b1622;
43
+ --paper: #13243a;
44
+ --mist: #41506a;
45
+ --chalk: #cbd5e1;
46
+ --chalk-bright: #ffffff;
47
+ --brand: #42b883;
48
+ }
49
+
50
+ .screen {
51
+ flex: 1;
52
+ background-color: var(--ink);
53
+ align-items: center;
54
+ justify-content: center;
55
+ gap: 24px;
56
+ padding: 24px 32px;
57
+ }
58
+
59
+ .brand-row {
60
+ flex-direction: row;
61
+ align-items: center;
62
+ gap: 28px;
63
+ }
64
+
65
+ .brand-logo {
66
+ height: 64px;
67
+ }
68
+
69
+ .brand-logo-react {
70
+ aspect-ratio: 1.0977;
71
+ }
72
+
73
+ .brand-logo-vue {
74
+ aspect-ratio: 1.1542;
75
+ }
76
+
77
+ .plus-icon {
78
+ width: 48px;
79
+ height: 48px;
80
+ }
81
+
82
+ .title {
83
+ color: var(--chalk-bright);
84
+ font-size: 22px;
85
+ font-weight: bold;
86
+ text-align: center;
87
+ }
88
+
89
+ .subtitle {
90
+ color: var(--chalk);
91
+ font-size: 14px;
92
+ text-align: center;
93
+ }
94
+
95
+ .counter-card {
96
+ align-items: center;
97
+ gap: 4px;
98
+ padding: 20px 28px;
99
+ border-radius: 16px;
100
+ background-color: var(--paper);
101
+ }
102
+
103
+ .counter-label {
104
+ color: var(--mist);
105
+ font-size: 12px;
106
+ letter-spacing: 1px;
107
+ }
108
+
109
+ .counter-value {
110
+ color: var(--brand);
111
+ font-size: 32px;
112
+ font-weight: bold;
113
+ }
114
+
115
+ .button-primary {
116
+ align-items: center;
117
+ justify-content: center;
118
+ border-radius: 12px;
119
+ padding: 14px 22px;
120
+ background-color: var(--brand);
121
+ }
122
+
123
+ .button-primary-text {
124
+ color: var(--ink);
125
+ font-size: 15px;
126
+ font-weight: bold;
127
+ }
128
+ </style>