@symbiote-native/cli 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +79 -447
  2. package/bundle.js +4 -33
  3. package/package.json +21 -5
  4. package/templates/js/angular/index.js +2 -0
  5. package/templates/js/angular/src/App.css +2 -4
  6. package/templates/js/react/App.css +1 -1
  7. package/templates/js/react/index.js +2 -0
  8. package/templates/js/solid/App.css +2 -4
  9. package/templates/js/solid/index.js +2 -0
  10. package/templates/js/svelte/App.svelte +2 -2
  11. package/templates/js/svelte/App.typescript.svelte +2 -2
  12. package/templates/js/svelte/index.js +2 -0
  13. package/templates/js/vue-sfc/App.typescript.vue +2 -2
  14. package/templates/js/vue-sfc/App.vue +2 -2
  15. package/templates/js/vue-sfc/index.js +2 -0
  16. package/templates/js/vue-tsx/App.css +2 -4
  17. package/templates/js/vue-tsx/index.js +2 -0
  18. package/templates/layers/navigation/app/angular/src/App.css +2 -4
  19. package/templates/layers/navigation/app/react/App.css +1 -1
  20. package/templates/layers/navigation/app/solid/App.css +2 -4
  21. package/templates/layers/navigation/app/svelte/App.css +2 -4
  22. package/templates/layers/navigation/app/vue-sfc/App.css +2 -4
  23. package/templates/layers/navigation/app/vue-tsx/App.css +2 -4
  24. package/templates/styling/js/angular/css-modules/src/App.module.css +78 -0
  25. package/templates/styling/js/angular/css-modules/src/App.ts +30 -6
  26. package/templates/styling/js/angular/stylesheet/src/App.ts +56 -6
  27. package/templates/styling/js/react/css-modules/App.jsx +17 -5
  28. package/templates/styling/js/react/css-modules/App.module.css +60 -0
  29. package/templates/styling/js/react/css-modules/App.tsx +17 -5
  30. package/templates/styling/js/react/stylesheet/App.jsx +48 -6
  31. package/templates/styling/js/react/stylesheet/App.tsx +48 -6
  32. package/templates/styling/js/solid/css-modules/App.jsx +29 -5
  33. package/templates/styling/js/solid/css-modules/App.module.css +78 -0
  34. package/templates/styling/js/solid/css-modules/App.tsx +29 -5
  35. package/templates/styling/js/solid/stylesheet/App.jsx +60 -6
  36. package/templates/styling/js/solid/stylesheet/App.tsx +60 -6
  37. package/templates/styling/js/svelte/css-modules/App.module.css +78 -0
  38. package/templates/styling/js/svelte/css-modules/App.svelte +27 -5
  39. package/templates/styling/js/svelte/css-modules/App.typescript.svelte +27 -5
  40. package/templates/styling/js/svelte/stylesheet/App.svelte +62 -6
  41. package/templates/styling/js/svelte/stylesheet/App.typescript.svelte +62 -6
  42. package/templates/styling/js/vue-sfc/css-modules/App.module.css +78 -0
  43. package/templates/styling/js/vue-sfc/css-modules/App.typescript.vue +29 -5
  44. package/templates/styling/js/vue-sfc/css-modules/App.vue +29 -5
  45. package/templates/styling/js/vue-sfc/stylesheet/App.typescript.vue +60 -6
  46. package/templates/styling/js/vue-sfc/stylesheet/App.vue +60 -6
  47. package/templates/styling/js/vue-tsx/css-modules/App.jsx +29 -5
  48. package/templates/styling/js/vue-tsx/css-modules/App.module.css +78 -0
  49. package/templates/styling/js/vue-tsx/css-modules/App.tsx +29 -5
  50. package/templates/styling/js/vue-tsx/stylesheet/App.jsx +60 -6
  51. package/templates/styling/js/vue-tsx/stylesheet/App.tsx +60 -6
  52. package/templates/styling/navigation/angular/css-modules/src/App.module.css +118 -0
  53. package/templates/styling/navigation/angular/css-modules/src/DetailsScreen.ts +12 -4
  54. package/templates/styling/navigation/angular/css-modules/src/MenuScreen.ts +38 -8
  55. package/templates/styling/navigation/angular/stylesheet/src/DetailsScreen.ts +39 -4
  56. package/templates/styling/navigation/angular/stylesheet/src/MenuScreen.ts +75 -8
  57. package/templates/styling/navigation/react/css-modules/App.jsx +56 -11
  58. package/templates/styling/navigation/react/css-modules/App.module.css +100 -0
  59. package/templates/styling/navigation/react/css-modules/App.tsx +56 -11
  60. package/templates/styling/navigation/react/stylesheet/App.jsx +107 -12
  61. package/templates/styling/navigation/react/stylesheet/App.tsx +107 -12
  62. package/templates/styling/navigation/solid/css-modules/App.jsx +68 -11
  63. package/templates/styling/navigation/solid/css-modules/App.module.css +118 -0
  64. package/templates/styling/navigation/solid/css-modules/App.tsx +68 -11
  65. package/templates/styling/navigation/solid/stylesheet/App.jsx +119 -12
  66. package/templates/styling/navigation/solid/stylesheet/App.tsx +119 -12
  67. package/templates/styling/navigation/svelte/css-modules/App.module.css +118 -0
  68. package/templates/styling/navigation/svelte/css-modules/DetailsScreen.svelte +14 -3
  69. package/templates/styling/navigation/svelte/css-modules/DetailsScreen.typescript.svelte +14 -3
  70. package/templates/styling/navigation/svelte/css-modules/MenuScreen.svelte +34 -6
  71. package/templates/styling/navigation/svelte/css-modules/MenuScreen.typescript.svelte +34 -6
  72. package/templates/styling/navigation/svelte/stylesheet/DetailsScreen.svelte +41 -4
  73. package/templates/styling/navigation/svelte/stylesheet/DetailsScreen.typescript.svelte +41 -4
  74. package/templates/styling/navigation/svelte/stylesheet/MenuScreen.svelte +80 -7
  75. package/templates/styling/navigation/svelte/stylesheet/MenuScreen.typescript.svelte +80 -7
  76. package/templates/styling/navigation/vue-sfc/css-modules/App.module.css +118 -0
  77. package/templates/styling/navigation/vue-sfc/css-modules/DetailsScreen.typescript.vue +12 -3
  78. package/templates/styling/navigation/vue-sfc/css-modules/DetailsScreen.vue +12 -3
  79. package/templates/styling/navigation/vue-sfc/css-modules/MenuScreen.typescript.vue +38 -6
  80. package/templates/styling/navigation/vue-sfc/css-modules/MenuScreen.vue +38 -6
  81. package/templates/styling/navigation/vue-sfc/stylesheet/DetailsScreen.typescript.vue +39 -4
  82. package/templates/styling/navigation/vue-sfc/stylesheet/DetailsScreen.vue +39 -4
  83. package/templates/styling/navigation/vue-sfc/stylesheet/MenuScreen.typescript.vue +80 -7
  84. package/templates/styling/navigation/vue-sfc/stylesheet/MenuScreen.vue +80 -7
  85. package/templates/styling/navigation/vue-tsx/css-modules/App.jsx +63 -18
  86. package/templates/styling/navigation/vue-tsx/css-modules/App.module.css +118 -0
  87. package/templates/styling/navigation/vue-tsx/css-modules/App.tsx +63 -18
  88. package/templates/styling/navigation/vue-tsx/stylesheet/App.jsx +116 -21
  89. package/templates/styling/navigation/vue-tsx/stylesheet/App.tsx +116 -21
  90. package/src/index.ts +0 -70
  91. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  92. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  93. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  94. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  95. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  96. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  97. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  98. /package/templates/{native/bootsplash-logo → bootsplash-logo}/angular/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  99. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  100. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  101. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  102. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  103. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  104. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  105. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  106. /package/templates/{native/bootsplash-logo → bootsplash-logo}/solid/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  107. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  108. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  109. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  110. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  111. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  112. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  113. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  114. /package/templates/{native/bootsplash-logo → bootsplash-logo}/svelte/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
  115. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png +0 -0
  116. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png +0 -0
  117. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png +0 -0
  118. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png +0 -0
  119. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png +0 -0
  120. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55.png +0 -0
  121. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@2x.png +0 -0
  122. /package/templates/{native/bootsplash-logo → bootsplash-logo}/vue/ios/Canary/Images.xcassets/BootSplashLogo-498e55.imageset/logo-498e55@3x.png +0 -0
@@ -1,11 +1,48 @@
1
1
  <script>
2
+ import { useStackNavigation } from '@symbiote-native/navigation/svelte';
2
3
  import { StyleSheet } from '@symbiote-native/svelte';
3
4
 
5
+ const navigation = useStackNavigation();
4
6
  const styles = StyleSheet.create({
5
- container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
7
+ screen: {
8
+ flex: 1,
9
+ backgroundColor: '#0b1622',
10
+ alignItems: 'center',
11
+ justifyContent: 'center',
12
+ gap: 24,
13
+ paddingVertical: 24,
14
+ paddingHorizontal: 32,
15
+ },
16
+ detailsCard: {
17
+ alignItems: 'center',
18
+ gap: 10,
19
+ padding: 24,
20
+ borderRadius: 16,
21
+ backgroundColor: '#13243a',
22
+ },
23
+ detailsTitle: { color: '#ffffff', fontSize: 18, fontWeight: 'bold' },
24
+ detailsBody: { color: '#cbd5e1', fontSize: 14, textAlign: 'center' },
25
+ buttonSecondary: {
26
+ alignItems: 'center',
27
+ justifyContent: 'center',
28
+ borderRadius: 12,
29
+ paddingVertical: 14,
30
+ paddingHorizontal: 22,
31
+ borderWidth: 1.5,
32
+ borderColor: '#41506a',
33
+ },
34
+ buttonSecondaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
6
35
  });
7
36
  </script>
8
37
 
9
- <view style={styles.container}>
10
- <text>Details screen</text>
11
- </view>
38
+ <safe-area-view style={styles.screen}>
39
+ <view style={styles.detailsCard}>
40
+ <text style={styles.detailsTitle}>You made it!</text>
41
+ <text style={styles.detailsBody}>
42
+ This screen was pushed by the Stack navigator — proof navigation actually works.
43
+ </text>
44
+ </view>
45
+ <pressable style={styles.buttonSecondary} onPress={() => navigation.current.pop()}>
46
+ <text style={styles.buttonSecondaryText}>Go back</text>
47
+ </pressable>
48
+ </safe-area-view>
@@ -1,11 +1,48 @@
1
1
  <script lang="ts">
2
+ import { useStackNavigation } from '@symbiote-native/navigation/svelte';
2
3
  import { StyleSheet } from '@symbiote-native/svelte';
3
4
 
5
+ const navigation = useStackNavigation();
4
6
  const styles = StyleSheet.create({
5
- container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
7
+ screen: {
8
+ flex: 1,
9
+ backgroundColor: '#0b1622',
10
+ alignItems: 'center',
11
+ justifyContent: 'center',
12
+ gap: 24,
13
+ paddingVertical: 24,
14
+ paddingHorizontal: 32,
15
+ },
16
+ detailsCard: {
17
+ alignItems: 'center',
18
+ gap: 10,
19
+ padding: 24,
20
+ borderRadius: 16,
21
+ backgroundColor: '#13243a',
22
+ },
23
+ detailsTitle: { color: '#ffffff', fontSize: 18, fontWeight: 'bold' },
24
+ detailsBody: { color: '#cbd5e1', fontSize: 14, textAlign: 'center' },
25
+ buttonSecondary: {
26
+ alignItems: 'center',
27
+ justifyContent: 'center',
28
+ borderRadius: 12,
29
+ paddingVertical: 14,
30
+ paddingHorizontal: 22,
31
+ borderWidth: 1.5,
32
+ borderColor: '#41506a',
33
+ },
34
+ buttonSecondaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
6
35
  });
7
36
  </script>
8
37
 
9
- <view style={styles.container}>
10
- <text>Details screen</text>
11
- </view>
38
+ <safe-area-view style={styles.screen}>
39
+ <view style={styles.detailsCard}>
40
+ <text style={styles.detailsTitle}>You made it!</text>
41
+ <text style={styles.detailsBody}>
42
+ This screen was pushed by the Stack navigator — proof navigation actually works.
43
+ </text>
44
+ </view>
45
+ <pressable style={styles.buttonSecondary} onPress={() => navigation.current.pop()}>
46
+ <text style={styles.buttonSecondaryText}>Go back</text>
47
+ </pressable>
48
+ </safe-area-view>
@@ -1,16 +1,89 @@
1
1
  <script>
2
2
  import { useStackNavigation } from '@symbiote-native/navigation/svelte';
3
+ import { PLUS_ICON_URI, REACT_NATIVE_LOGO_URI, SVELTE_LOGO_URI } from './image-uris';
3
4
  import { StyleSheet } from '@symbiote-native/svelte';
4
5
 
5
6
  const navigation = useStackNavigation();
7
+ let count = $state(0);
6
8
  const styles = StyleSheet.create({
7
- container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
9
+ screen: {
10
+ flex: 1,
11
+ backgroundColor: '#0b1622',
12
+ alignItems: 'center',
13
+ justifyContent: 'center',
14
+ gap: 24,
15
+ paddingVertical: 24,
16
+ paddingHorizontal: 32,
17
+ },
18
+ brandRow: { flexDirection: 'row', alignItems: 'center', gap: 28 },
19
+ brandLogo: { height: 64 },
20
+ brandLogoReact: { width: 70 },
21
+ brandLogoSvelte: { width: 54 },
22
+ plusIcon: { width: 48, height: 48 },
23
+ title: { color: '#ffffff', fontSize: 22, fontWeight: 'bold', textAlign: 'center' },
24
+ subtitle: { color: '#cbd5e1', fontSize: 14, textAlign: 'center' },
25
+ counterCard: {
26
+ alignItems: 'center',
27
+ gap: 4,
28
+ paddingVertical: 20,
29
+ paddingHorizontal: 28,
30
+ borderRadius: 16,
31
+ backgroundColor: '#13243a',
32
+ },
33
+ counterLabel: { color: '#41506a', fontSize: 12, letterSpacing: 1 },
34
+ counterValue: { color: '#ff3e00', fontSize: 32, fontWeight: 'bold' },
35
+ buttonRow: { flexDirection: 'row', gap: 12 },
36
+ buttonPrimary: {
37
+ alignItems: 'center',
38
+ justifyContent: 'center',
39
+ borderRadius: 12,
40
+ paddingVertical: 14,
41
+ paddingHorizontal: 22,
42
+ backgroundColor: '#ff3e00',
43
+ },
44
+ buttonSecondary: {
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ borderRadius: 12,
48
+ paddingVertical: 14,
49
+ paddingHorizontal: 22,
50
+ borderWidth: 1.5,
51
+ borderColor: '#41506a',
52
+ },
53
+ buttonPrimaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
54
+ buttonSecondaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
8
55
  });
9
56
  </script>
10
57
 
11
- <view style={styles.container}>
12
- <text>Welcome to SymbioteNative!</text>
13
- <pressable onPress={() => navigation.current.push('Details')}>
14
- <text>Go to Details</text>
15
- </pressable>
16
- </view>
58
+ <safe-area-view style={styles.screen}>
59
+ <view style={styles.brandRow}>
60
+ <image
61
+ style={[styles.brandLogo, styles.brandLogoReact]}
62
+ resizeMode="contain"
63
+ source={{ uri: REACT_NATIVE_LOGO_URI }}
64
+ />
65
+ <image style={styles.plusIcon} resizeMode="contain" source={{ uri: PLUS_ICON_URI }} />
66
+ <image
67
+ style={[styles.brandLogo, styles.brandLogoSvelte]}
68
+ resizeMode="contain"
69
+ source={{ uri: SVELTE_LOGO_URI }}
70
+ />
71
+ </view>
72
+
73
+ <text style={styles.title}>Welcome to SymbioteNative!</text>
74
+ <text style={styles.subtitle}>Framework-agnostic React Native, driven by Svelte.</text>
75
+
76
+ <view style={styles.counterCard}>
77
+ <text style={styles.counterLabel}>TAPS</text>
78
+ <text style={styles.counterValue}>{count}</text>
79
+ </view>
80
+
81
+ <view style={styles.buttonRow}>
82
+ <pressable style={styles.buttonPrimary} onPress={() => (count += 1)}>
83
+ <text style={styles.buttonPrimaryText}>Tap me</text>
84
+ </pressable>
85
+ <pressable style={styles.buttonSecondary} onPress={() => navigation.current.push('Details')}>
86
+ <text style={styles.buttonSecondaryText}>Go to Details</text>
87
+ </pressable>
88
+ </view>
89
+ </safe-area-view>
@@ -1,16 +1,89 @@
1
1
  <script lang="ts">
2
2
  import { useStackNavigation } from '@symbiote-native/navigation/svelte';
3
+ import { PLUS_ICON_URI, REACT_NATIVE_LOGO_URI, SVELTE_LOGO_URI } from './image-uris';
3
4
  import { StyleSheet } from '@symbiote-native/svelte';
4
5
 
5
6
  const navigation = useStackNavigation();
7
+ let count = $state<number>(0);
6
8
  const styles = StyleSheet.create({
7
- container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
9
+ screen: {
10
+ flex: 1,
11
+ backgroundColor: '#0b1622',
12
+ alignItems: 'center',
13
+ justifyContent: 'center',
14
+ gap: 24,
15
+ paddingVertical: 24,
16
+ paddingHorizontal: 32,
17
+ },
18
+ brandRow: { flexDirection: 'row', alignItems: 'center', gap: 28 },
19
+ brandLogo: { height: 64 },
20
+ brandLogoReact: { width: 70 },
21
+ brandLogoSvelte: { width: 54 },
22
+ plusIcon: { width: 48, height: 48 },
23
+ title: { color: '#ffffff', fontSize: 22, fontWeight: 'bold', textAlign: 'center' },
24
+ subtitle: { color: '#cbd5e1', fontSize: 14, textAlign: 'center' },
25
+ counterCard: {
26
+ alignItems: 'center',
27
+ gap: 4,
28
+ paddingVertical: 20,
29
+ paddingHorizontal: 28,
30
+ borderRadius: 16,
31
+ backgroundColor: '#13243a',
32
+ },
33
+ counterLabel: { color: '#41506a', fontSize: 12, letterSpacing: 1 },
34
+ counterValue: { color: '#ff3e00', fontSize: 32, fontWeight: 'bold' },
35
+ buttonRow: { flexDirection: 'row', gap: 12 },
36
+ buttonPrimary: {
37
+ alignItems: 'center',
38
+ justifyContent: 'center',
39
+ borderRadius: 12,
40
+ paddingVertical: 14,
41
+ paddingHorizontal: 22,
42
+ backgroundColor: '#ff3e00',
43
+ },
44
+ buttonSecondary: {
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ borderRadius: 12,
48
+ paddingVertical: 14,
49
+ paddingHorizontal: 22,
50
+ borderWidth: 1.5,
51
+ borderColor: '#41506a',
52
+ },
53
+ buttonPrimaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
54
+ buttonSecondaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
8
55
  });
9
56
  </script>
10
57
 
11
- <view style={styles.container}>
12
- <text>Welcome to SymbioteNative!</text>
13
- <pressable onPress={() => navigation.current.push('Details')}>
14
- <text>Go to Details</text>
15
- </pressable>
16
- </view>
58
+ <safe-area-view style={styles.screen}>
59
+ <view style={styles.brandRow}>
60
+ <image
61
+ style={[styles.brandLogo, styles.brandLogoReact]}
62
+ resizeMode="contain"
63
+ source={{ uri: REACT_NATIVE_LOGO_URI }}
64
+ />
65
+ <image style={styles.plusIcon} resizeMode="contain" source={{ uri: PLUS_ICON_URI }} />
66
+ <image
67
+ style={[styles.brandLogo, styles.brandLogoSvelte]}
68
+ resizeMode="contain"
69
+ source={{ uri: SVELTE_LOGO_URI }}
70
+ />
71
+ </view>
72
+
73
+ <text style={styles.title}>Welcome to SymbioteNative!</text>
74
+ <text style={styles.subtitle}>Framework-agnostic React Native, driven by Svelte.</text>
75
+
76
+ <view style={styles.counterCard}>
77
+ <text style={styles.counterLabel}>TAPS</text>
78
+ <text style={styles.counterValue}>{count}</text>
79
+ </view>
80
+
81
+ <view style={styles.buttonRow}>
82
+ <pressable style={styles.buttonPrimary} onPress={() => (count += 1)}>
83
+ <text style={styles.buttonPrimaryText}>Tap me</text>
84
+ </pressable>
85
+ <pressable style={styles.buttonSecondary} onPress={() => navigation.current.push('Details')}>
86
+ <text style={styles.buttonSecondaryText}>Go to Details</text>
87
+ </pressable>
88
+ </view>
89
+ </safe-area-view>
@@ -0,0 +1,118 @@
1
+ .screen {
2
+ flex: 1;
3
+ background-color: #0b1622;
4
+ align-items: center;
5
+ justify-content: center;
6
+ gap: 24px;
7
+ padding: 24px 32px;
8
+ }
9
+
10
+ .brand-row {
11
+ flex-direction: row;
12
+ align-items: center;
13
+ gap: 28px;
14
+ }
15
+
16
+ .brand-logo {
17
+ height: 64px;
18
+ }
19
+
20
+ .brand-logo-react {
21
+ width: 70px;
22
+ }
23
+
24
+ .brand-logo-vue {
25
+ width: 74px;
26
+ }
27
+
28
+ .plus-icon {
29
+ width: 48px;
30
+ height: 48px;
31
+ }
32
+
33
+ .title {
34
+ color: #ffffff;
35
+ font-size: 22px;
36
+ font-weight: bold;
37
+ text-align: center;
38
+ }
39
+
40
+ .subtitle {
41
+ color: #cbd5e1;
42
+ font-size: 14px;
43
+ text-align: center;
44
+ }
45
+
46
+ .counter-card {
47
+ align-items: center;
48
+ gap: 4px;
49
+ padding: 20px 28px;
50
+ border-radius: 16px;
51
+ background-color: #13243a;
52
+ }
53
+
54
+ .counter-label {
55
+ color: #41506a;
56
+ font-size: 12px;
57
+ letter-spacing: 1px;
58
+ }
59
+
60
+ .counter-value {
61
+ color: #42b883;
62
+ font-size: 32px;
63
+ font-weight: bold;
64
+ }
65
+
66
+ .button-row {
67
+ flex-direction: row;
68
+ gap: 12px;
69
+ }
70
+
71
+ .button-primary {
72
+ align-items: center;
73
+ justify-content: center;
74
+ border-radius: 12px;
75
+ padding: 14px 22px;
76
+ background-color: #42b883;
77
+ }
78
+
79
+ .button-secondary {
80
+ align-items: center;
81
+ justify-content: center;
82
+ border-radius: 12px;
83
+ padding: 14px 22px;
84
+ border-width: 1.5px;
85
+ border-color: #41506a;
86
+ }
87
+
88
+ .button-primary-text {
89
+ color: #0b1622;
90
+ font-size: 15px;
91
+ font-weight: bold;
92
+ }
93
+
94
+ .button-secondary-text {
95
+ color: #ffffff;
96
+ font-size: 15px;
97
+ font-weight: bold;
98
+ }
99
+
100
+ .details-card {
101
+ align-items: center;
102
+ gap: 10px;
103
+ padding: 24px;
104
+ border-radius: 16px;
105
+ background-color: #13243a;
106
+ }
107
+
108
+ .details-title {
109
+ color: #ffffff;
110
+ font-size: 18px;
111
+ font-weight: bold;
112
+ }
113
+
114
+ .details-body {
115
+ color: #cbd5e1;
116
+ font-size: 14px;
117
+ text-align: center;
118
+ }
@@ -1,9 +1,18 @@
1
1
  <script setup lang="ts">
2
+ import { useStackNavigation } from '@symbiote-native/navigation/vue';
2
3
  import styles from './App.module.css';
4
+
5
+ const navigation = useStackNavigation();
3
6
  </script>
4
7
 
5
8
  <template>
6
- <view :class="styles.container">
7
- <text>Details screen</text>
8
- </view>
9
+ <safe-area-view :class="styles['screen']">
10
+ <view :class="styles['details-card']">
11
+ <text :class="styles['details-title']">You made it!</text>
12
+ <text :class="styles['details-body']">This screen was pushed by the Stack navigator — proof navigation actually works.</text>
13
+ </view>
14
+ <pressable :class="styles['button-secondary']" @press="() => navigation.pop()">
15
+ <text :class="styles['button-secondary-text']">Go back</text>
16
+ </pressable>
17
+ </safe-area-view>
9
18
  </template>
@@ -1,9 +1,18 @@
1
1
  <script setup>
2
+ import { useStackNavigation } from '@symbiote-native/navigation/vue';
2
3
  import styles from './App.module.css';
4
+
5
+ const navigation = useStackNavigation();
3
6
  </script>
4
7
 
5
8
  <template>
6
- <view :class="styles.container">
7
- <text>Details screen</text>
8
- </view>
9
+ <safe-area-view :class="styles['screen']">
10
+ <view :class="styles['details-card']">
11
+ <text :class="styles['details-title']">You made it!</text>
12
+ <text :class="styles['details-body']">This screen was pushed by the Stack navigator — proof navigation actually works.</text>
13
+ </view>
14
+ <pressable :class="styles['button-secondary']" @press="() => navigation.pop()">
15
+ <text :class="styles['button-secondary-text']">Go back</text>
16
+ </pressable>
17
+ </safe-area-view>
9
18
  </template>
@@ -1,15 +1,47 @@
1
1
  <script setup lang="ts">
2
+ import { ref } from 'vue';
2
3
  import { useStackNavigation } from '@symbiote-native/navigation/vue';
3
4
  import styles from './App.module.css';
4
5
 
6
+ const count = ref<number>(0);
5
7
  const navigation = useStackNavigation();
6
8
  </script>
7
9
 
8
10
  <template>
9
- <view :class="styles.container">
10
- <text>Welcome to SymbioteNative!</text>
11
- <pressable @press="() => navigation.push('Details')">
12
- <text>Go to Details</text>
13
- </pressable>
14
- </view>
11
+ <safe-area-view :class="styles['screen']">
12
+ <view :class="styles['brand-row']">
13
+ <image
14
+ :class="[styles['brand-logo'], styles['brand-logo-react']]"
15
+ resize-mode="contain"
16
+ :source="require('./assets/react-native-logo.png')"
17
+ />
18
+ <image
19
+ :class="styles['plus-icon']"
20
+ resize-mode="contain"
21
+ :source="require('./assets/plus-icon.png')"
22
+ />
23
+ <image
24
+ :class="[styles['brand-logo'], styles['brand-logo-vue']]"
25
+ resize-mode="contain"
26
+ :source="require('./assets/vue-logo.png')"
27
+ />
28
+ </view>
29
+
30
+ <text :class="styles['title']">Welcome to SymbioteNative!</text>
31
+ <text :class="styles['subtitle']">Framework-agnostic React Native, driven by Vue.</text>
32
+
33
+ <view :class="styles['counter-card']">
34
+ <text :class="styles['counter-label']">TAPS</text>
35
+ <text :class="styles['counter-value']">{{ count }}</text>
36
+ </view>
37
+
38
+ <view :class="styles['button-row']">
39
+ <pressable :class="styles['button-primary']" @press="count++">
40
+ <text :class="styles['button-primary-text']">Tap me</text>
41
+ </pressable>
42
+ <pressable :class="styles['button-secondary']" @press="() => navigation.push('Details')">
43
+ <text :class="styles['button-secondary-text']">Go to Details</text>
44
+ </pressable>
45
+ </view>
46
+ </safe-area-view>
15
47
  </template>
@@ -1,15 +1,47 @@
1
1
  <script setup>
2
+ import { ref } from 'vue';
2
3
  import { useStackNavigation } from '@symbiote-native/navigation/vue';
3
4
  import styles from './App.module.css';
4
5
 
6
+ const count = ref(0);
5
7
  const navigation = useStackNavigation();
6
8
  </script>
7
9
 
8
10
  <template>
9
- <view :class="styles.container">
10
- <text>Welcome to SymbioteNative!</text>
11
- <pressable @press="() => navigation.push('Details')">
12
- <text>Go to Details</text>
13
- </pressable>
14
- </view>
11
+ <safe-area-view :class="styles['screen']">
12
+ <view :class="styles['brand-row']">
13
+ <image
14
+ :class="[styles['brand-logo'], styles['brand-logo-react']]"
15
+ resize-mode="contain"
16
+ :source="require('./assets/react-native-logo.png')"
17
+ />
18
+ <image
19
+ :class="styles['plus-icon']"
20
+ resize-mode="contain"
21
+ :source="require('./assets/plus-icon.png')"
22
+ />
23
+ <image
24
+ :class="[styles['brand-logo'], styles['brand-logo-vue']]"
25
+ resize-mode="contain"
26
+ :source="require('./assets/vue-logo.png')"
27
+ />
28
+ </view>
29
+
30
+ <text :class="styles['title']">Welcome to SymbioteNative!</text>
31
+ <text :class="styles['subtitle']">Framework-agnostic React Native, driven by Vue.</text>
32
+
33
+ <view :class="styles['counter-card']">
34
+ <text :class="styles['counter-label']">TAPS</text>
35
+ <text :class="styles['counter-value']">{{ count }}</text>
36
+ </view>
37
+
38
+ <view :class="styles['button-row']">
39
+ <pressable :class="styles['button-primary']" @press="count++">
40
+ <text :class="styles['button-primary-text']">Tap me</text>
41
+ </pressable>
42
+ <pressable :class="styles['button-secondary']" @press="() => navigation.push('Details')">
43
+ <text :class="styles['button-secondary-text']">Go to Details</text>
44
+ </pressable>
45
+ </view>
46
+ </safe-area-view>
15
47
  </template>
@@ -1,13 +1,48 @@
1
1
  <script setup lang="ts">
2
+ import { useStackNavigation } from '@symbiote-native/navigation/vue';
2
3
  import { StyleSheet } from '@symbiote-native/vue';
3
4
 
5
+ const navigation = useStackNavigation();
4
6
  const styles = StyleSheet.create({
5
- container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
7
+ screen: {
8
+ flex: 1,
9
+ backgroundColor: '#0b1622',
10
+ alignItems: 'center',
11
+ justifyContent: 'center',
12
+ gap: 24,
13
+ paddingVertical: 24,
14
+ paddingHorizontal: 32,
15
+ },
16
+ detailsCard: {
17
+ alignItems: 'center',
18
+ gap: 10,
19
+ padding: 24,
20
+ borderRadius: 16,
21
+ backgroundColor: '#13243a',
22
+ },
23
+ detailsTitle: { color: '#ffffff', fontSize: 18, fontWeight: 'bold' },
24
+ detailsBody: { color: '#cbd5e1', fontSize: 14, textAlign: 'center' },
25
+ buttonSecondary: {
26
+ alignItems: 'center',
27
+ justifyContent: 'center',
28
+ borderRadius: 12,
29
+ paddingVertical: 14,
30
+ paddingHorizontal: 22,
31
+ borderWidth: 1.5,
32
+ borderColor: '#41506a',
33
+ },
34
+ buttonSecondaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
6
35
  });
7
36
  </script>
8
37
 
9
38
  <template>
10
- <view :style="styles.container">
11
- <text>Details screen</text>
12
- </view>
39
+ <safe-area-view :style="styles.screen">
40
+ <view :style="styles.detailsCard">
41
+ <text :style="styles.detailsTitle">You made it!</text>
42
+ <text :style="styles.detailsBody">This screen was pushed by the Stack navigator — proof navigation actually works.</text>
43
+ </view>
44
+ <pressable :style="styles.buttonSecondary" @press="() => navigation.pop()">
45
+ <text :style="styles.buttonSecondaryText">Go back</text>
46
+ </pressable>
47
+ </safe-area-view>
13
48
  </template>
@@ -1,13 +1,48 @@
1
1
  <script setup>
2
+ import { useStackNavigation } from '@symbiote-native/navigation/vue';
2
3
  import { StyleSheet } from '@symbiote-native/vue';
3
4
 
5
+ const navigation = useStackNavigation();
4
6
  const styles = StyleSheet.create({
5
- container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
7
+ screen: {
8
+ flex: 1,
9
+ backgroundColor: '#0b1622',
10
+ alignItems: 'center',
11
+ justifyContent: 'center',
12
+ gap: 24,
13
+ paddingVertical: 24,
14
+ paddingHorizontal: 32,
15
+ },
16
+ detailsCard: {
17
+ alignItems: 'center',
18
+ gap: 10,
19
+ padding: 24,
20
+ borderRadius: 16,
21
+ backgroundColor: '#13243a',
22
+ },
23
+ detailsTitle: { color: '#ffffff', fontSize: 18, fontWeight: 'bold' },
24
+ detailsBody: { color: '#cbd5e1', fontSize: 14, textAlign: 'center' },
25
+ buttonSecondary: {
26
+ alignItems: 'center',
27
+ justifyContent: 'center',
28
+ borderRadius: 12,
29
+ paddingVertical: 14,
30
+ paddingHorizontal: 22,
31
+ borderWidth: 1.5,
32
+ borderColor: '#41506a',
33
+ },
34
+ buttonSecondaryText: { color: '#ffffff', fontSize: 15, fontWeight: 'bold' },
6
35
  });
7
36
  </script>
8
37
 
9
38
  <template>
10
- <view :style="styles.container">
11
- <text>Details screen</text>
12
- </view>
39
+ <safe-area-view :style="styles.screen">
40
+ <view :style="styles.detailsCard">
41
+ <text :style="styles.detailsTitle">You made it!</text>
42
+ <text :style="styles.detailsBody">This screen was pushed by the Stack navigator — proof navigation actually works.</text>
43
+ </view>
44
+ <pressable :style="styles.buttonSecondary" @press="() => navigation.pop()">
45
+ <text :style="styles.buttonSecondaryText">Go back</text>
46
+ </pressable>
47
+ </safe-area-view>
13
48
  </template>