@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.
- package/LICENSE +21 -0
- package/README.md +492 -0
- package/bundle.js +2833 -0
- package/package.json +49 -0
- package/src/index.ts +70 -0
- package/templates/README.md +93 -0
- package/templates/js/angular/.prettierrc.js +5 -0
- package/templates/js/angular/.watchmanconfig +1 -0
- package/templates/js/angular/README.md +117 -0
- package/templates/js/angular/app.json +4 -0
- package/templates/js/angular/babel.config.js +34 -0
- package/templates/js/angular/index.js +12 -0
- package/templates/js/angular/metro.config.js +38 -0
- package/templates/js/angular/package.json.fragment.json +29 -0
- package/templates/js/angular/src/App.css +89 -0
- package/templates/js/angular/src/App.ts +40 -0
- package/templates/js/angular/src/assets/angular-logo.png +0 -0
- package/templates/js/angular/src/assets/angular-logo@2x.png +0 -0
- package/templates/js/angular/src/assets/angular-logo@3x.png +0 -0
- package/templates/js/angular/src/assets/plus-icon.png +0 -0
- package/templates/js/angular/src/assets/plus-icon@2x.png +0 -0
- package/templates/js/angular/src/assets/plus-icon@3x.png +0 -0
- package/templates/js/angular/src/assets/react-native-logo.png +0 -0
- package/templates/js/angular/src/assets/react-native-logo@2x.png +0 -0
- package/templates/js/angular/src/assets/react-native-logo@3x.png +0 -0
- package/templates/js/angular/src/css.d.ts +23 -0
- package/templates/js/angular/tsconfig.angular.json +42 -0
- package/templates/js/angular/tsconfig.json +17 -0
- package/templates/js/react/.prettierrc.js +5 -0
- package/templates/js/react/.watchmanconfig +1 -0
- package/templates/js/react/App.css +69 -0
- package/templates/js/react/App.jsx +27 -0
- package/templates/js/react/App.tsx +27 -0
- package/templates/js/react/README.md +116 -0
- package/templates/js/react/app.json +4 -0
- package/templates/js/react/assets/react-native-logo.png +0 -0
- package/templates/js/react/assets/react-native-logo@2x.png +0 -0
- package/templates/js/react/assets/react-native-logo@3x.png +0 -0
- package/templates/js/react/babel.config.js +24 -0
- package/templates/js/react/css.d.ts +24 -0
- package/templates/js/react/index.js +14 -0
- package/templates/js/react/metro.config.js +29 -0
- package/templates/js/react/package.json.fragment.json +22 -0
- package/templates/js/react/package.json.fragment.typescript.json +11 -0
- package/templates/js/react/tsconfig.json +18 -0
- package/templates/js/solid/.prettierrc.js +5 -0
- package/templates/js/solid/.watchmanconfig +1 -0
- package/templates/js/solid/App.css +89 -0
- package/templates/js/solid/App.jsx +35 -0
- package/templates/js/solid/App.tsx +35 -0
- package/templates/js/solid/README.md +18 -0
- package/templates/js/solid/app.json +4 -0
- package/templates/js/solid/assets/plus-icon.png +0 -0
- package/templates/js/solid/assets/plus-icon@2x.png +0 -0
- package/templates/js/solid/assets/plus-icon@3x.png +0 -0
- package/templates/js/solid/assets/react-native-logo.png +0 -0
- package/templates/js/solid/assets/react-native-logo@2x.png +0 -0
- package/templates/js/solid/assets/react-native-logo@3x.png +0 -0
- package/templates/js/solid/assets/solid-logo.png +0 -0
- package/templates/js/solid/assets/solid-logo@2x.png +0 -0
- package/templates/js/solid/assets/solid-logo@3x.png +0 -0
- package/templates/js/solid/babel.config.js +29 -0
- package/templates/js/solid/css.d.ts +20 -0
- package/templates/js/solid/eslint.config.js +3 -0
- package/templates/js/solid/index.js +13 -0
- package/templates/js/solid/metro.config.js +50 -0
- package/templates/js/solid/package.json.fragment.json +23 -0
- package/templates/js/solid/package.json.fragment.typescript.json +11 -0
- package/templates/js/solid/tsconfig.json +11 -0
- package/templates/js/svelte/.prettierrc.js +15 -0
- package/templates/js/svelte/.watchmanconfig +1 -0
- package/templates/js/svelte/App.svelte +123 -0
- package/templates/js/svelte/App.typescript.svelte +123 -0
- package/templates/js/svelte/README.md +18 -0
- package/templates/js/svelte/app.json +4 -0
- package/templates/js/svelte/babel.config.js +22 -0
- package/templates/js/svelte/css.d.ts +21 -0
- package/templates/js/svelte/eslint.config.js +37 -0
- package/templates/js/svelte/image-uris.js +8 -0
- package/templates/js/svelte/index.js +13 -0
- package/templates/js/svelte/metro.config.js +83 -0
- package/templates/js/svelte/package.json.fragment.json +26 -0
- package/templates/js/svelte/package.json.fragment.typescript.json +12 -0
- package/templates/js/svelte/svelte.config.js +47 -0
- package/templates/js/svelte/tsconfig.json +9 -0
- package/templates/js/svelte/tsconfig.typecheck.json +4 -0
- package/templates/js/vue-sfc/.prettierrc.js +5 -0
- package/templates/js/vue-sfc/.watchmanconfig +1 -0
- package/templates/js/vue-sfc/App.typescript.vue +128 -0
- package/templates/js/vue-sfc/App.vue +128 -0
- package/templates/js/vue-sfc/README.md +124 -0
- package/templates/js/vue-sfc/app.json +4 -0
- package/templates/js/vue-sfc/assets/plus-icon.png +0 -0
- package/templates/js/vue-sfc/assets/plus-icon@2x.png +0 -0
- package/templates/js/vue-sfc/assets/plus-icon@3x.png +0 -0
- package/templates/js/vue-sfc/assets/react-native-logo.png +0 -0
- package/templates/js/vue-sfc/assets/react-native-logo@2x.png +0 -0
- package/templates/js/vue-sfc/assets/react-native-logo@3x.png +0 -0
- package/templates/js/vue-sfc/assets/vue-logo.png +0 -0
- package/templates/js/vue-sfc/assets/vue-logo@2x.png +0 -0
- package/templates/js/vue-sfc/assets/vue-logo@3x.png +0 -0
- package/templates/js/vue-sfc/babel.config.js +24 -0
- package/templates/js/vue-sfc/css.d.ts +24 -0
- package/templates/js/vue-sfc/eslint.config.js +48 -0
- package/templates/js/vue-sfc/index.js +13 -0
- package/templates/js/vue-sfc/metro.config.js +30 -0
- package/templates/js/vue-sfc/package.json.fragment.json +26 -0
- package/templates/js/vue-sfc/package.json.fragment.typescript.json +11 -0
- package/templates/js/vue-sfc/tsconfig.json +18 -0
- package/templates/js/vue-sfc/tsconfig.typecheck.json +8 -0
- package/templates/js/vue-sfc/vue-runtime-core.d.ts +3 -0
- package/templates/js/vue-tsx/.prettierrc.js +5 -0
- package/templates/js/vue-tsx/.watchmanconfig +1 -0
- package/templates/js/vue-tsx/App.css +89 -0
- package/templates/js/vue-tsx/App.jsx +40 -0
- package/templates/js/vue-tsx/App.tsx +40 -0
- package/templates/js/vue-tsx/README.md +110 -0
- package/templates/js/vue-tsx/app.json +4 -0
- package/templates/js/vue-tsx/assets/plus-icon.png +0 -0
- package/templates/js/vue-tsx/assets/plus-icon@2x.png +0 -0
- package/templates/js/vue-tsx/assets/plus-icon@3x.png +0 -0
- package/templates/js/vue-tsx/assets/react-native-logo.png +0 -0
- package/templates/js/vue-tsx/assets/react-native-logo@2x.png +0 -0
- package/templates/js/vue-tsx/assets/react-native-logo@3x.png +0 -0
- package/templates/js/vue-tsx/assets/vue-logo.png +0 -0
- package/templates/js/vue-tsx/assets/vue-logo@2x.png +0 -0
- package/templates/js/vue-tsx/assets/vue-logo@3x.png +0 -0
- package/templates/js/vue-tsx/babel.config.js +67 -0
- package/templates/js/vue-tsx/css.d.ts +24 -0
- package/templates/js/vue-tsx/index.js +14 -0
- package/templates/js/vue-tsx/metro.config.js +42 -0
- package/templates/js/vue-tsx/package.json.fragment.json +26 -0
- package/templates/js/vue-tsx/package.json.fragment.typescript.json +11 -0
- package/templates/js/vue-tsx/tsconfig.json +15 -0
- package/templates/js/vue-tsx/tsconfig.typecheck.json +10 -0
- package/templates/js/vue-tsx/vue-jsx.d.ts +43 -0
- package/templates/js/vue-tsx/vue-runtime-core.d.ts +3 -0
- package/templates/layers/README.md +90 -0
- package/templates/layers/application/package.json.fragment.json +5 -0
- package/templates/layers/battery/package.json.fragment.json +5 -0
- package/templates/layers/brightness/package.json.fragment.json +5 -0
- package/templates/layers/cellular/package.json.fragment.json +5 -0
- package/templates/layers/clipboard/package.json.fragment.json +5 -0
- package/templates/layers/crypto/package.json.fragment.json +5 -0
- package/templates/layers/device/package.json.fragment.json +5 -0
- package/templates/layers/expo-modules/ios/Canary/Info.plist +66 -0
- package/templates/layers/expo-modules/package.json.fragment.json +9 -0
- package/templates/layers/haptics/package.json.fragment.json +5 -0
- package/templates/layers/keep-awake/package.json.fragment.json +5 -0
- package/templates/layers/local-auth/package.json.fragment.json +5 -0
- package/templates/layers/localization/package.json.fragment.json +5 -0
- package/templates/layers/navigation/app/angular/assets/angular-logo.png +0 -0
- package/templates/layers/navigation/app/angular/assets/angular-logo@2x.png +0 -0
- package/templates/layers/navigation/app/angular/assets/angular-logo@3x.png +0 -0
- package/templates/layers/navigation/app/angular/assets/plus-icon.png +0 -0
- package/templates/layers/navigation/app/angular/assets/plus-icon@2x.png +0 -0
- package/templates/layers/navigation/app/angular/assets/plus-icon@3x.png +0 -0
- package/templates/layers/navigation/app/angular/assets/react-native-logo.png +0 -0
- package/templates/layers/navigation/app/angular/assets/react-native-logo@2x.png +0 -0
- package/templates/layers/navigation/app/angular/assets/react-native-logo@3x.png +0 -0
- package/templates/layers/navigation/app/angular/src/App.css +129 -0
- package/templates/layers/navigation/app/angular/src/App.ts +31 -0
- package/templates/layers/navigation/app/angular/src/DetailsScreen.ts +24 -0
- package/templates/layers/navigation/app/angular/src/MenuScreen.ts +43 -0
- package/templates/layers/navigation/app/react/App.css +109 -0
- package/templates/layers/navigation/app/react/App.jsx +77 -0
- package/templates/layers/navigation/app/react/App.tsx +77 -0
- package/templates/layers/navigation/app/react/assets/react-native-logo.png +0 -0
- package/templates/layers/navigation/app/react/assets/react-native-logo@2x.png +0 -0
- package/templates/layers/navigation/app/react/assets/react-native-logo@3x.png +0 -0
- package/templates/layers/navigation/app/solid/App.css +129 -0
- package/templates/layers/navigation/app/solid/App.jsx +85 -0
- package/templates/layers/navigation/app/solid/App.tsx +85 -0
- package/templates/layers/navigation/app/solid/assets/plus-icon.png +0 -0
- package/templates/layers/navigation/app/solid/assets/plus-icon@2x.png +0 -0
- package/templates/layers/navigation/app/solid/assets/plus-icon@3x.png +0 -0
- package/templates/layers/navigation/app/solid/assets/react-native-logo.png +0 -0
- package/templates/layers/navigation/app/solid/assets/react-native-logo@2x.png +0 -0
- package/templates/layers/navigation/app/solid/assets/react-native-logo@3x.png +0 -0
- package/templates/layers/navigation/app/solid/assets/solid-logo.png +0 -0
- package/templates/layers/navigation/app/solid/assets/solid-logo@2x.png +0 -0
- package/templates/layers/navigation/app/solid/assets/solid-logo@3x.png +0 -0
- package/templates/layers/navigation/app/svelte/App.css +129 -0
- package/templates/layers/navigation/app/svelte/App.svelte +19 -0
- package/templates/layers/navigation/app/svelte/App.typescript.svelte +19 -0
- package/templates/layers/navigation/app/svelte/DetailsScreen.svelte +17 -0
- package/templates/layers/navigation/app/svelte/DetailsScreen.typescript.svelte +17 -0
- package/templates/layers/navigation/app/svelte/MenuScreen.svelte +40 -0
- package/templates/layers/navigation/app/svelte/MenuScreen.typescript.svelte +40 -0
- package/templates/layers/navigation/app/svelte/image-uris.js +8 -0
- package/templates/layers/navigation/app/vue-sfc/App.css +129 -0
- package/templates/layers/navigation/app/vue-sfc/App.typescript.vue +36 -0
- package/templates/layers/navigation/app/vue-sfc/App.vue +36 -0
- package/templates/layers/navigation/app/vue-sfc/DetailsScreen.typescript.vue +20 -0
- package/templates/layers/navigation/app/vue-sfc/DetailsScreen.vue +20 -0
- package/templates/layers/navigation/app/vue-sfc/MenuScreen.typescript.vue +52 -0
- package/templates/layers/navigation/app/vue-sfc/MenuScreen.vue +52 -0
- package/templates/layers/navigation/app/vue-sfc/assets/plus-icon.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/plus-icon@2x.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/plus-icon@3x.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/react-native-logo.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/react-native-logo@2x.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/react-native-logo@3x.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/vue-logo.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/vue-logo@2x.png +0 -0
- package/templates/layers/navigation/app/vue-sfc/assets/vue-logo@3x.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/App.css +129 -0
- package/templates/layers/navigation/app/vue-tsx/App.jsx +91 -0
- package/templates/layers/navigation/app/vue-tsx/App.tsx +91 -0
- package/templates/layers/navigation/app/vue-tsx/assets/plus-icon.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/plus-icon@2x.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/plus-icon@3x.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/react-native-logo.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/react-native-logo@2x.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/react-native-logo@3x.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/vue-logo.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/vue-logo@2x.png +0 -0
- package/templates/layers/navigation/app/vue-tsx/assets/vue-logo@3x.png +0 -0
- package/templates/layers/navigation/package.json.fragment.json +5 -0
- package/templates/layers/network/package.json.fragment.json +5 -0
- package/templates/layers/screen-orientation/package.json.fragment.json +5 -0
- package/templates/layers/secure-store/package.json.fragment.json +5 -0
- package/templates/layers/sensors/package.json.fragment.json +5 -0
- package/templates/layers/sharing/package.json.fragment.json +5 -0
- package/templates/layers/slider/package.json.fragment.json +5 -0
- package/templates/layers/sms/package.json.fragment.json +5 -0
- package/templates/layers/splash-screen/native/android/app/src/main/AndroidManifest.xml +28 -0
- package/templates/layers/splash-screen/native/android/app/src/main/java/com/canary/MainActivity.kt +29 -0
- package/templates/layers/splash-screen/native/android/app/src/main/res/values/styles.xml +12 -0
- package/templates/layers/splash-screen/native/ios/Canary/AppDelegate.swift +54 -0
- package/templates/layers/splash-screen/package.json.fragment.json +5 -0
- package/templates/layers/standard-web-crypto/package.json.fragment.json +5 -0
- package/templates/layers/store-review/package.json.fragment.json +5 -0
- package/templates/layers/system-ui/package.json.fragment.json +5 -0
- package/templates/layers/testing/detox.config.js +42 -0
- package/templates/layers/testing/e2e/jest.config.js +21 -0
- package/templates/layers/testing/e2e/setup.ts +3 -0
- package/templates/layers/testing/e2e/smoke.test.ts +17 -0
- package/templates/layers/testing/e2e/tsconfig.json +7 -0
- package/templates/layers/testing/fragment/angular/package.json.fragment.json +18 -0
- package/templates/layers/testing/fragment/base/package.json.fragment.json +18 -0
- package/templates/layers/tracking-transparency/package.json.fragment.json +5 -0
- package/templates/layers/web-browser/package.json.fragment.json +5 -0
- package/templates/native/Gemfile +17 -0
- package/templates/native/README.md +48 -0
- package/templates/native/android/app/build.gradle +130 -0
- package/templates/native/android/app/debug.keystore +0 -0
- package/templates/native/android/app/proguard-rules.pro +10 -0
- package/templates/native/android/app/src/androidTest/java/com/canary/DetoxTest.java +29 -0
- package/templates/native/android/app/src/main/AndroidManifest.xml +28 -0
- package/templates/native/android/app/src/main/java/com/canary/MainActivity.kt +22 -0
- package/templates/native/android/app/src/main/java/com/canary/MainApplication.kt +27 -0
- package/templates/native/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
- package/templates/native/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
- package/templates/native/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
- package/templates/native/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
- package/templates/native/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/templates/native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/templates/native/android/app/src/main/res/values/colors.xml +3 -0
- package/templates/native/android/app/src/main/res/values/strings.xml +3 -0
- package/templates/native/android/app/src/main/res/values/styles.xml +6 -0
- package/templates/native/android/build.gradle +33 -0
- package/templates/native/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/templates/native/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/templates/native/android/gradle.properties +44 -0
- package/templates/native/android/gradlew +248 -0
- package/templates/native/android/gradlew.bat +98 -0
- package/templates/native/android/settings.gradle +10 -0
- package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/angular/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
- package/templates/native/bootsplash-logo/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
- package/templates/native/bootsplash-logo/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
- package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/solid/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
- package/templates/native/bootsplash-logo/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
- package/templates/native/bootsplash-logo/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
- package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/svelte/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
- package/templates/native/bootsplash-logo/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
- package/templates/native/bootsplash-logo/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
- package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/vue/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
- package/templates/native/bootsplash-logo/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
- package/templates/native/bootsplash-logo/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
- package/templates/native/bootsplash-logo/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
- package/templates/native/eslint.config.js +3 -0
- package/templates/native/ios/.xcode.env +11 -0
- package/templates/native/ios/Canary/AppDelegate.swift +48 -0
- package/templates/native/ios/Canary/BootSplash.storyboard +46 -0
- package/templates/native/ios/Canary/Colors.xcassets/BootSplashBackground-498e55.colorset/Contents.json +20 -0
- package/templates/native/ios/Canary/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
- package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/Contents.json +23 -0
- package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
- package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
- package/templates/native/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
- package/templates/native/ios/Canary/Images.xcassets/Contents.json +6 -0
- package/templates/native/ios/Canary/Info.plist +60 -0
- package/templates/native/ios/Canary/LaunchScreen.storyboard +47 -0
- package/templates/native/ios/Canary/PrivacyInfo.xcprivacy +37 -0
- package/templates/native/ios/Canary.xcodeproj/project.pbxproj +504 -0
- package/templates/native/ios/Canary.xcodeproj/xcshareddata/xcschemes/Canary.xcscheme +88 -0
- package/templates/native/ios/Canary.xcworkspace/contents.xcworkspacedata +10 -0
- package/templates/native/ios/Podfile +34 -0
- package/templates/native/package.json.fragment.json +22 -0
- package/templates/native/package.json.fragment.typescript.json +8 -0
- package/templates/styling/js/angular/css-modules/src/App.ts +25 -0
- package/templates/styling/js/angular/stylesheet/src/App.ts +26 -0
- package/templates/styling/js/react/css-modules/App.jsx +15 -0
- package/templates/styling/js/react/css-modules/App.tsx +15 -0
- package/templates/styling/js/react/stylesheet/App.jsx +19 -0
- package/templates/styling/js/react/stylesheet/App.tsx +19 -0
- package/templates/styling/js/solid/css-modules/App.jsx +15 -0
- package/templates/styling/js/solid/css-modules/App.tsx +15 -0
- package/templates/styling/js/solid/stylesheet/App.jsx +19 -0
- package/templates/styling/js/solid/stylesheet/App.tsx +19 -0
- package/templates/styling/js/svelte/css-modules/App.svelte +12 -0
- package/templates/styling/js/svelte/css-modules/App.typescript.svelte +12 -0
- package/templates/styling/js/svelte/stylesheet/App.svelte +15 -0
- package/templates/styling/js/svelte/stylesheet/App.typescript.svelte +15 -0
- package/templates/styling/js/vue-sfc/css-modules/App.typescript.vue +15 -0
- package/templates/styling/js/vue-sfc/css-modules/App.vue +15 -0
- package/templates/styling/js/vue-sfc/stylesheet/App.typescript.vue +18 -0
- package/templates/styling/js/vue-sfc/stylesheet/App.vue +18 -0
- package/templates/styling/js/vue-tsx/css-modules/App.jsx +16 -0
- package/templates/styling/js/vue-tsx/css-modules/App.tsx +16 -0
- package/templates/styling/js/vue-tsx/stylesheet/App.jsx +20 -0
- package/templates/styling/js/vue-tsx/stylesheet/App.tsx +20 -0
- package/templates/styling/navigation/angular/css-modules/src/DetailsScreen.ts +17 -0
- package/templates/styling/navigation/angular/css-modules/src/MenuScreen.ts +22 -0
- package/templates/styling/navigation/angular/stylesheet/src/DetailsScreen.ts +18 -0
- package/templates/styling/navigation/angular/stylesheet/src/MenuScreen.ts +23 -0
- package/templates/styling/navigation/react/css-modules/App.jsx +32 -0
- package/templates/styling/navigation/react/css-modules/App.tsx +32 -0
- package/templates/styling/navigation/react/stylesheet/App.jsx +36 -0
- package/templates/styling/navigation/react/stylesheet/App.tsx +36 -0
- package/templates/styling/navigation/solid/css-modules/App.jsx +32 -0
- package/templates/styling/navigation/solid/css-modules/App.tsx +32 -0
- package/templates/styling/navigation/solid/stylesheet/App.jsx +36 -0
- package/templates/styling/navigation/solid/stylesheet/App.tsx +36 -0
- package/templates/styling/navigation/svelte/css-modules/DetailsScreen.svelte +7 -0
- package/templates/styling/navigation/svelte/css-modules/DetailsScreen.typescript.svelte +7 -0
- package/templates/styling/navigation/svelte/css-modules/MenuScreen.svelte +13 -0
- package/templates/styling/navigation/svelte/css-modules/MenuScreen.typescript.svelte +13 -0
- package/templates/styling/navigation/svelte/stylesheet/DetailsScreen.svelte +11 -0
- package/templates/styling/navigation/svelte/stylesheet/DetailsScreen.typescript.svelte +11 -0
- package/templates/styling/navigation/svelte/stylesheet/MenuScreen.svelte +16 -0
- package/templates/styling/navigation/svelte/stylesheet/MenuScreen.typescript.svelte +16 -0
- package/templates/styling/navigation/vue-sfc/css-modules/DetailsScreen.typescript.vue +9 -0
- package/templates/styling/navigation/vue-sfc/css-modules/DetailsScreen.vue +9 -0
- package/templates/styling/navigation/vue-sfc/css-modules/MenuScreen.typescript.vue +15 -0
- package/templates/styling/navigation/vue-sfc/css-modules/MenuScreen.vue +15 -0
- package/templates/styling/navigation/vue-sfc/stylesheet/DetailsScreen.typescript.vue +13 -0
- package/templates/styling/navigation/vue-sfc/stylesheet/DetailsScreen.vue +13 -0
- package/templates/styling/navigation/vue-sfc/stylesheet/MenuScreen.typescript.vue +18 -0
- package/templates/styling/navigation/vue-sfc/stylesheet/MenuScreen.vue +18 -0
- package/templates/styling/navigation/vue-tsx/css-modules/App.jsx +34 -0
- package/templates/styling/navigation/vue-tsx/css-modules/App.tsx +34 -0
- package/templates/styling/navigation/vue-tsx/stylesheet/App.jsx +38 -0
- package/templates/styling/navigation/vue-tsx/stylesheet/App.tsx +38 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
+
}
|