create-switch-framework-app 0.1.0

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 (207) hide show
  1. package/README.md +25 -0
  2. package/bin/create-switch-framework-app.js +502 -0
  3. package/package.json +31 -0
  4. package/templates/electron/base/app/(tabs)/+not-found.js +158 -0
  5. package/templates/electron/base/app/(tabs)/_layout.js +125 -0
  6. package/templates/electron/base/app/(tabs)/explore.js +44 -0
  7. package/templates/electron/base/app/(tabs)/index.js +218 -0
  8. package/templates/electron/base/app/(tabs)/register.js +12 -0
  9. package/templates/electron/base/app/+not-found.js +158 -0
  10. package/templates/electron/base/app/_layout.js +50 -0
  11. package/templates/electron/base/app/index.js +265 -0
  12. package/templates/electron/base/app/register.js +12 -0
  13. package/templates/electron/base/assets/files/Profile.jpg +0 -0
  14. package/templates/electron/base/assets/files/fingerprint-icon.svg +4 -0
  15. package/templates/electron/base/assets/fonts/DMSans-Black.ttf +0 -0
  16. package/templates/electron/base/assets/fonts/DMSans-BlackItalic.ttf +0 -0
  17. package/templates/electron/base/assets/fonts/DMSans-Bold.ttf +0 -0
  18. package/templates/electron/base/assets/fonts/DMSans-BoldItalic.ttf +0 -0
  19. package/templates/electron/base/assets/fonts/DMSans-ExtraBold.ttf +0 -0
  20. package/templates/electron/base/assets/fonts/DMSans-ExtraBoldItalic.ttf +0 -0
  21. package/templates/electron/base/assets/fonts/DMSans-ExtraLight.ttf +0 -0
  22. package/templates/electron/base/assets/fonts/DMSans-ExtraLightItalic.ttf +0 -0
  23. package/templates/electron/base/assets/fonts/DMSans-Italic.ttf +0 -0
  24. package/templates/electron/base/assets/fonts/DMSans-Light.ttf +0 -0
  25. package/templates/electron/base/assets/fonts/DMSans-LightItalic.ttf +0 -0
  26. package/templates/electron/base/assets/fonts/DMSans-Medium.ttf +0 -0
  27. package/templates/electron/base/assets/fonts/DMSans-MediumItalic.ttf +0 -0
  28. package/templates/electron/base/assets/fonts/DMSans-Regular.ttf +0 -0
  29. package/templates/electron/base/assets/fonts/DMSans-SemiBold.ttf +0 -0
  30. package/templates/electron/base/assets/fonts/DMSans-SemiBoldItalic.ttf +0 -0
  31. package/templates/electron/base/assets/fonts/DMSans-Thin.ttf +0 -0
  32. package/templates/electron/base/assets/fonts/DMSans-ThinItalic.ttf +0 -0
  33. package/templates/electron/base/assets/fonts/DMSans_18pt-Black.ttf +0 -0
  34. package/templates/electron/base/assets/fonts/DMSans_18pt-BlackItalic.ttf +0 -0
  35. package/templates/electron/base/assets/fonts/DMSans_18pt-Bold.ttf +0 -0
  36. package/templates/electron/base/assets/fonts/DMSans_18pt-BoldItalic.ttf +0 -0
  37. package/templates/electron/base/assets/fonts/DMSans_18pt-ExtraBold.ttf +0 -0
  38. package/templates/electron/base/assets/fonts/DMSans_18pt-ExtraBoldItalic.ttf +0 -0
  39. package/templates/electron/base/assets/fonts/DMSans_18pt-ExtraLight.ttf +0 -0
  40. package/templates/electron/base/assets/fonts/DMSans_18pt-ExtraLightItalic.ttf +0 -0
  41. package/templates/electron/base/assets/fonts/DMSans_18pt-Italic.ttf +0 -0
  42. package/templates/electron/base/assets/fonts/DMSans_18pt-Light.ttf +0 -0
  43. package/templates/electron/base/assets/fonts/DMSans_18pt-LightItalic.ttf +0 -0
  44. package/templates/electron/base/assets/fonts/DMSans_18pt-Medium.ttf +0 -0
  45. package/templates/electron/base/assets/fonts/DMSans_18pt-MediumItalic.ttf +0 -0
  46. package/templates/electron/base/assets/fonts/DMSans_18pt-Regular.ttf +0 -0
  47. package/templates/electron/base/assets/fonts/DMSans_18pt-SemiBold.ttf +0 -0
  48. package/templates/electron/base/assets/fonts/DMSans_18pt-SemiBoldItalic.ttf +0 -0
  49. package/templates/electron/base/assets/fonts/DMSans_18pt-Thin.ttf +0 -0
  50. package/templates/electron/base/assets/fonts/DMSans_18pt-ThinItalic.ttf +0 -0
  51. package/templates/electron/base/assets/fonts/DMSans_24pt-Black.ttf +0 -0
  52. package/templates/electron/base/assets/fonts/DMSans_24pt-BlackItalic.ttf +0 -0
  53. package/templates/electron/base/assets/fonts/DMSans_24pt-Bold.ttf +0 -0
  54. package/templates/electron/base/assets/fonts/DMSans_24pt-BoldItalic.ttf +0 -0
  55. package/templates/electron/base/assets/fonts/DMSans_24pt-ExtraBold.ttf +0 -0
  56. package/templates/electron/base/assets/fonts/DMSans_24pt-ExtraBoldItalic.ttf +0 -0
  57. package/templates/electron/base/assets/fonts/DMSans_24pt-ExtraLight.ttf +0 -0
  58. package/templates/electron/base/assets/fonts/DMSans_24pt-ExtraLightItalic.ttf +0 -0
  59. package/templates/electron/base/assets/fonts/DMSans_24pt-Italic.ttf +0 -0
  60. package/templates/electron/base/assets/fonts/DMSans_24pt-Light.ttf +0 -0
  61. package/templates/electron/base/assets/fonts/DMSans_24pt-LightItalic.ttf +0 -0
  62. package/templates/electron/base/assets/fonts/DMSans_24pt-Medium.ttf +0 -0
  63. package/templates/electron/base/assets/fonts/DMSans_24pt-MediumItalic.ttf +0 -0
  64. package/templates/electron/base/assets/fonts/DMSans_24pt-Regular.ttf +0 -0
  65. package/templates/electron/base/assets/fonts/DMSans_24pt-SemiBold.ttf +0 -0
  66. package/templates/electron/base/assets/fonts/DMSans_24pt-SemiBoldItalic.ttf +0 -0
  67. package/templates/electron/base/assets/fonts/DMSans_24pt-Thin.ttf +0 -0
  68. package/templates/electron/base/assets/fonts/DMSans_24pt-ThinItalic.ttf +0 -0
  69. package/templates/electron/base/assets/fonts/DMSans_36pt-Black.ttf +0 -0
  70. package/templates/electron/base/assets/fonts/DMSans_36pt-BlackItalic.ttf +0 -0
  71. package/templates/electron/base/assets/fonts/DMSans_36pt-Bold.ttf +0 -0
  72. package/templates/electron/base/assets/fonts/DMSans_36pt-BoldItalic.ttf +0 -0
  73. package/templates/electron/base/assets/fonts/DMSans_36pt-ExtraBold.ttf +0 -0
  74. package/templates/electron/base/assets/fonts/DMSans_36pt-ExtraBoldItalic.ttf +0 -0
  75. package/templates/electron/base/assets/fonts/DMSans_36pt-ExtraLight.ttf +0 -0
  76. package/templates/electron/base/assets/fonts/DMSans_36pt-ExtraLightItalic.ttf +0 -0
  77. package/templates/electron/base/assets/fonts/DMSans_36pt-Italic.ttf +0 -0
  78. package/templates/electron/base/assets/fonts/DMSans_36pt-Light.ttf +0 -0
  79. package/templates/electron/base/assets/fonts/DMSans_36pt-LightItalic.ttf +0 -0
  80. package/templates/electron/base/assets/fonts/DMSans_36pt-Medium.ttf +0 -0
  81. package/templates/electron/base/assets/fonts/DMSans_36pt-MediumItalic.ttf +0 -0
  82. package/templates/electron/base/assets/fonts/DMSans_36pt-Regular.ttf +0 -0
  83. package/templates/electron/base/assets/fonts/DMSans_36pt-SemiBold.ttf +0 -0
  84. package/templates/electron/base/assets/fonts/DMSans_36pt-SemiBoldItalic.ttf +0 -0
  85. package/templates/electron/base/assets/fonts/DMSans_36pt-Thin.ttf +0 -0
  86. package/templates/electron/base/assets/fonts/DMSans_36pt-ThinItalic.ttf +0 -0
  87. package/templates/electron/base/assets/icons/fonts/switch-icons.eot +0 -0
  88. package/templates/electron/base/assets/icons/fonts/switch-icons.svg +2881 -0
  89. package/templates/electron/base/assets/icons/fonts/switch-icons.ttf +0 -0
  90. package/templates/electron/base/assets/icons/fonts/switch-icons.woff +0 -0
  91. package/templates/electron/base/assets/icons/style.css +8583 -0
  92. package/templates/electron/base/assets/logo.svg +5 -0
  93. package/templates/electron/base/assets/script/states.js +38 -0
  94. package/templates/electron/base/assets/script/themechanger.js +14 -0
  95. package/templates/electron/base/assets/styles/styles.css +131 -0
  96. package/templates/electron/base/components/SwSplashScreen.js +1 -0
  97. package/templates/electron/base/components/SwStarterSplashScreen.js +140 -0
  98. package/templates/electron/base/components/SwTabBar.js +153 -0
  99. package/templates/electron/base/electron/electron-builder.json +19 -0
  100. package/templates/electron/base/electron/main.js +30 -0
  101. package/templates/electron/base/electron/preload.js +5 -0
  102. package/templates/electron/base/hooks/checkIntro.js +14 -0
  103. package/templates/electron/base/index.html +14 -0
  104. package/templates/electron/base/index.js +5 -0
  105. package/templates/electron/base/main.js +1 -0
  106. package/templates/electron/base/preload.js +1 -0
  107. package/templates/electron/base/routes/api.js +1 -0
  108. package/templates/electron/base/server.js +42 -0
  109. package/templates/web/base/app/(tabs)/+not-found.js +158 -0
  110. package/templates/web/base/app/(tabs)/_layout.js +125 -0
  111. package/templates/web/base/app/(tabs)/explore.js +44 -0
  112. package/templates/web/base/app/(tabs)/index.js +218 -0
  113. package/templates/web/base/app/(tabs)/register.js +12 -0
  114. package/templates/web/base/app/+not-found.js +158 -0
  115. package/templates/web/base/app/_layout.js +50 -0
  116. package/templates/web/base/app/index.js +265 -0
  117. package/templates/web/base/app/register.js +12 -0
  118. package/templates/web/base/assets/files/Profile.jpg +0 -0
  119. package/templates/web/base/assets/files/fingerprint-icon.svg +4 -0
  120. package/templates/web/base/assets/fonts/DMSans-Black.ttf +0 -0
  121. package/templates/web/base/assets/fonts/DMSans-BlackItalic.ttf +0 -0
  122. package/templates/web/base/assets/fonts/DMSans-Bold.ttf +0 -0
  123. package/templates/web/base/assets/fonts/DMSans-BoldItalic.ttf +0 -0
  124. package/templates/web/base/assets/fonts/DMSans-ExtraBold.ttf +0 -0
  125. package/templates/web/base/assets/fonts/DMSans-ExtraBoldItalic.ttf +0 -0
  126. package/templates/web/base/assets/fonts/DMSans-ExtraLight.ttf +0 -0
  127. package/templates/web/base/assets/fonts/DMSans-ExtraLightItalic.ttf +0 -0
  128. package/templates/web/base/assets/fonts/DMSans-Italic.ttf +0 -0
  129. package/templates/web/base/assets/fonts/DMSans-Light.ttf +0 -0
  130. package/templates/web/base/assets/fonts/DMSans-LightItalic.ttf +0 -0
  131. package/templates/web/base/assets/fonts/DMSans-Medium.ttf +0 -0
  132. package/templates/web/base/assets/fonts/DMSans-MediumItalic.ttf +0 -0
  133. package/templates/web/base/assets/fonts/DMSans-Regular.ttf +0 -0
  134. package/templates/web/base/assets/fonts/DMSans-SemiBold.ttf +0 -0
  135. package/templates/web/base/assets/fonts/DMSans-SemiBoldItalic.ttf +0 -0
  136. package/templates/web/base/assets/fonts/DMSans-Thin.ttf +0 -0
  137. package/templates/web/base/assets/fonts/DMSans-ThinItalic.ttf +0 -0
  138. package/templates/web/base/assets/fonts/DMSans_18pt-Black.ttf +0 -0
  139. package/templates/web/base/assets/fonts/DMSans_18pt-BlackItalic.ttf +0 -0
  140. package/templates/web/base/assets/fonts/DMSans_18pt-Bold.ttf +0 -0
  141. package/templates/web/base/assets/fonts/DMSans_18pt-BoldItalic.ttf +0 -0
  142. package/templates/web/base/assets/fonts/DMSans_18pt-ExtraBold.ttf +0 -0
  143. package/templates/web/base/assets/fonts/DMSans_18pt-ExtraBoldItalic.ttf +0 -0
  144. package/templates/web/base/assets/fonts/DMSans_18pt-ExtraLight.ttf +0 -0
  145. package/templates/web/base/assets/fonts/DMSans_18pt-ExtraLightItalic.ttf +0 -0
  146. package/templates/web/base/assets/fonts/DMSans_18pt-Italic.ttf +0 -0
  147. package/templates/web/base/assets/fonts/DMSans_18pt-Light.ttf +0 -0
  148. package/templates/web/base/assets/fonts/DMSans_18pt-LightItalic.ttf +0 -0
  149. package/templates/web/base/assets/fonts/DMSans_18pt-Medium.ttf +0 -0
  150. package/templates/web/base/assets/fonts/DMSans_18pt-MediumItalic.ttf +0 -0
  151. package/templates/web/base/assets/fonts/DMSans_18pt-Regular.ttf +0 -0
  152. package/templates/web/base/assets/fonts/DMSans_18pt-SemiBold.ttf +0 -0
  153. package/templates/web/base/assets/fonts/DMSans_18pt-SemiBoldItalic.ttf +0 -0
  154. package/templates/web/base/assets/fonts/DMSans_18pt-Thin.ttf +0 -0
  155. package/templates/web/base/assets/fonts/DMSans_18pt-ThinItalic.ttf +0 -0
  156. package/templates/web/base/assets/fonts/DMSans_24pt-Black.ttf +0 -0
  157. package/templates/web/base/assets/fonts/DMSans_24pt-BlackItalic.ttf +0 -0
  158. package/templates/web/base/assets/fonts/DMSans_24pt-Bold.ttf +0 -0
  159. package/templates/web/base/assets/fonts/DMSans_24pt-BoldItalic.ttf +0 -0
  160. package/templates/web/base/assets/fonts/DMSans_24pt-ExtraBold.ttf +0 -0
  161. package/templates/web/base/assets/fonts/DMSans_24pt-ExtraBoldItalic.ttf +0 -0
  162. package/templates/web/base/assets/fonts/DMSans_24pt-ExtraLight.ttf +0 -0
  163. package/templates/web/base/assets/fonts/DMSans_24pt-ExtraLightItalic.ttf +0 -0
  164. package/templates/web/base/assets/fonts/DMSans_24pt-Italic.ttf +0 -0
  165. package/templates/web/base/assets/fonts/DMSans_24pt-Light.ttf +0 -0
  166. package/templates/web/base/assets/fonts/DMSans_24pt-LightItalic.ttf +0 -0
  167. package/templates/web/base/assets/fonts/DMSans_24pt-Medium.ttf +0 -0
  168. package/templates/web/base/assets/fonts/DMSans_24pt-MediumItalic.ttf +0 -0
  169. package/templates/web/base/assets/fonts/DMSans_24pt-Regular.ttf +0 -0
  170. package/templates/web/base/assets/fonts/DMSans_24pt-SemiBold.ttf +0 -0
  171. package/templates/web/base/assets/fonts/DMSans_24pt-SemiBoldItalic.ttf +0 -0
  172. package/templates/web/base/assets/fonts/DMSans_24pt-Thin.ttf +0 -0
  173. package/templates/web/base/assets/fonts/DMSans_24pt-ThinItalic.ttf +0 -0
  174. package/templates/web/base/assets/fonts/DMSans_36pt-Black.ttf +0 -0
  175. package/templates/web/base/assets/fonts/DMSans_36pt-BlackItalic.ttf +0 -0
  176. package/templates/web/base/assets/fonts/DMSans_36pt-Bold.ttf +0 -0
  177. package/templates/web/base/assets/fonts/DMSans_36pt-BoldItalic.ttf +0 -0
  178. package/templates/web/base/assets/fonts/DMSans_36pt-ExtraBold.ttf +0 -0
  179. package/templates/web/base/assets/fonts/DMSans_36pt-ExtraBoldItalic.ttf +0 -0
  180. package/templates/web/base/assets/fonts/DMSans_36pt-ExtraLight.ttf +0 -0
  181. package/templates/web/base/assets/fonts/DMSans_36pt-ExtraLightItalic.ttf +0 -0
  182. package/templates/web/base/assets/fonts/DMSans_36pt-Italic.ttf +0 -0
  183. package/templates/web/base/assets/fonts/DMSans_36pt-Light.ttf +0 -0
  184. package/templates/web/base/assets/fonts/DMSans_36pt-LightItalic.ttf +0 -0
  185. package/templates/web/base/assets/fonts/DMSans_36pt-Medium.ttf +0 -0
  186. package/templates/web/base/assets/fonts/DMSans_36pt-MediumItalic.ttf +0 -0
  187. package/templates/web/base/assets/fonts/DMSans_36pt-Regular.ttf +0 -0
  188. package/templates/web/base/assets/fonts/DMSans_36pt-SemiBold.ttf +0 -0
  189. package/templates/web/base/assets/fonts/DMSans_36pt-SemiBoldItalic.ttf +0 -0
  190. package/templates/web/base/assets/fonts/DMSans_36pt-Thin.ttf +0 -0
  191. package/templates/web/base/assets/fonts/DMSans_36pt-ThinItalic.ttf +0 -0
  192. package/templates/web/base/assets/icons/fonts/switch-icons.eot +0 -0
  193. package/templates/web/base/assets/icons/fonts/switch-icons.svg +2881 -0
  194. package/templates/web/base/assets/icons/fonts/switch-icons.ttf +0 -0
  195. package/templates/web/base/assets/icons/fonts/switch-icons.woff +0 -0
  196. package/templates/web/base/assets/icons/style.css +8583 -0
  197. package/templates/web/base/assets/logo.svg +5 -0
  198. package/templates/web/base/assets/script/states.js +38 -0
  199. package/templates/web/base/assets/script/themechanger.js +14 -0
  200. package/templates/web/base/assets/styles/styles.css +131 -0
  201. package/templates/web/base/components/SwSplashScreen.js +1 -0
  202. package/templates/web/base/components/SwStarterSplashScreen.js +140 -0
  203. package/templates/web/base/components/SwTabBar.js +153 -0
  204. package/templates/web/base/hooks/checkIntro.js +14 -0
  205. package/templates/web/base/index.html +14 -0
  206. package/templates/web/base/index.js +5 -0
  207. package/templates/web/base/routes/api.js +1 -0
@@ -0,0 +1,5 @@
1
+ <svg width="160" height="160" viewBox="0 0 160 160" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="8" y="8" width="144" height="144" rx="36" fill="#E60023"/>
3
+ <path d="M53 59C53 49.6112 60.6112 42 70 42H90C99.3888 42 107 49.6112 107 59V63C107 72.3888 99.3888 80 90 80H78C72.4772 80 68 84.4772 68 90V94C68 103.389 60.3888 111 51 111H50" stroke="white" stroke-width="12" stroke-linecap="round"/>
4
+ <path d="M110 111H94" stroke="white" stroke-width="12" stroke-linecap="round"/>
5
+ </svg>
@@ -0,0 +1,38 @@
1
+ class States {
2
+ constructor() {
3
+ this.state = {"current_batch":{
4
+ "id":1,
5
+ "closed":"true"
6
+ }};
7
+ }
8
+
9
+ // Merge new state directly into the existing state
10
+ setState(newState = {}) {
11
+ this.state = Object.assign(this.state, newState);
12
+ }
13
+
14
+ // Retrieve the value of a specific state key
15
+ getState(stateKey = "") {
16
+ return stateKey ? this.state[stateKey] : this.state;
17
+ }
18
+
19
+ removeState(stateKey = "") {
20
+ if (!stateKey) {
21
+ // If no key provided, clear all state
22
+ this.state = {};
23
+ return true;
24
+ }
25
+
26
+ if (Object.prototype.hasOwnProperty.call(this.state, stateKey)) {
27
+ delete this.state[stateKey];
28
+ return true;
29
+ }
30
+
31
+ // Key not found; consider it a successful no-op or false based on preference
32
+ // Here we return false to indicate nothing was removed
33
+ return false;
34
+ }
35
+ }
36
+ const globalStates=new States();
37
+
38
+
@@ -0,0 +1,14 @@
1
+ const checkMode=()=>{
2
+ let theme = localStorage.getItem('theme');
3
+ if (!theme) {
4
+ if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
5
+ theme = 'dark_mode';
6
+ } else {
7
+ theme = 'light_mode';
8
+ }
9
+ localStorage.setItem('theme', theme);
10
+ }
11
+ return theme;
12
+ }
13
+
14
+ document.body.classList.add(checkMode()||'light_mode');
@@ -0,0 +1,131 @@
1
+ /* Regular */
2
+ @font-face {
3
+ font-family: 'DM Sans';
4
+ src: url('/assets/fonts/DMSans-Regular.ttf') format('truetype');
5
+ font-weight: normal;
6
+ font-style: normal;
7
+ }
8
+ /* italic */
9
+ @font-face {
10
+ font-family: 'DM Sans';
11
+ src: url('/assets/fonts/DMSans-Italic.ttf') format('truetype');
12
+ font-weight: normal;
13
+ font-style: italic;
14
+ }
15
+ /* bold */
16
+ @font-face {
17
+ font-family: 'DM Sans';
18
+ src: url('/assets/fonts/DMSans-Black.ttf') format('truetype');
19
+ font-weight: 900;
20
+ font-style: normal;
21
+ }
22
+ /* bold italic */
23
+ @font-face {
24
+ font-family: 'DM Sans';
25
+ src: url('/assets/fonts/DMSans-BoldItalic.ttf') format('truetype');
26
+ font-weight: 900;
27
+ font-style: italic;
28
+ }
29
+ /* medium */
30
+ @font-face {
31
+ font-family: 'DM Sans';
32
+ src: url('/assets/fonts/DMSans-Medium.ttf') format('truetype');
33
+ font-weight: 500;
34
+ font-style: normal;
35
+ }
36
+ /* medium italic */
37
+ @font-face {
38
+ font-family: 'DM Sans';
39
+ src: url('/assets/fonts/DMSans-MediumItalic.ttf') format('truetype');
40
+ font-weight: 500;
41
+ font-style: italic;
42
+ }
43
+
44
+
45
+
46
+ :root {
47
+ /* Brand */
48
+ --main_color: #e60023;
49
+ --main_color_hover: #ad081b;
50
+ --main_color_light: #fff0f1;
51
+ --main_color_op1: rgba(230, 0, 35, 0.08);
52
+ --main_color_op2: rgba(230, 0, 35, 0.18);
53
+
54
+ /* Surfaces */
55
+ --white_background: #ffffff;
56
+ --page_background: #ffffff;
57
+ --surface_2: #f0f0f0;
58
+ --surface_3: #e9e9e9;
59
+ --surface_hover: #f8f8f8;
60
+
61
+ /* Text */
62
+ --main_text: #111111;
63
+ --sub_text: #767676;
64
+ --placeholder_text: #b0b0b0;
65
+
66
+ /* Borders */
67
+ --border_color: #e0e0e0;
68
+ --border_light: #f0f0f0;
69
+
70
+ /* Shadows */
71
+ --shadow_xs: 0 1px 4px rgba(0,0,0,0.08);
72
+ --shadow_sm: 0 2px 8px rgba(0,0,0,0.10);
73
+ --shadow_md: 0 4px 16px rgba(0,0,0,0.12);
74
+ --shadow_lg: 0 8px 28px rgba(0,0,0,0.16);
75
+
76
+ /* Radius */
77
+ --radius_xs: 8px;
78
+ --radius_sm: 12px;
79
+ --radius_md: 16px;
80
+ --radius_lg: 24px;
81
+ --radius_pill: 999px;
82
+
83
+ /* Typography */
84
+ --font: 'Poppins', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
85
+ --font_size_xs: 11px;
86
+ --font_size_sm: 13px;
87
+ --font_size_md: 15px;
88
+ --font_size_lg: 18px;
89
+ --font_size_xl: 24px;
90
+
91
+ /* Layout */
92
+ --sidebar_width: 72px;
93
+ --topbar_height: 64px;
94
+ --bottombar_height: 64px;
95
+
96
+ /* Transitions */
97
+ --transition_fast: 0.12s ease;
98
+ --transition_base: 0.2s ease;
99
+ --transition_slow: 0.35s ease;
100
+ --font: 'DM Sans', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
101
+ }
102
+
103
+ html, body {
104
+ width: 100%;
105
+ overflow-x: hidden;
106
+ }
107
+
108
+ body {
109
+ margin: 0;
110
+ background: var(--page_background);
111
+ color: var(--main_text);
112
+ font-family: var(--font);
113
+ }
114
+
115
+ :root[data-theme="dark"] {
116
+ color-scheme: dark;
117
+ --white_background: #0b0f14;
118
+ --page_background: #0b0f14;
119
+ --surface_2: #111827;
120
+ --surface_3: #1f2937;
121
+ --surface_hover: #1f2937;
122
+ --main_text: #f3f4f6;
123
+ --sub_text: #9ca3af;
124
+ --placeholder_text: #6b7280;
125
+ --border_color: #293241;
126
+ --border_light: #1b2433;
127
+ --shadow_xs: 0 1px 4px rgba(0,0,0,0.55);
128
+ --shadow_sm: 0 2px 8px rgba(0,0,0,0.55);
129
+ --shadow_md: 0 4px 16px rgba(0,0,0,0.55);
130
+ --shadow_lg: 0 8px 28px rgba(0,0,0,0.6);
131
+ }
@@ -0,0 +1 @@
1
+ export { SwStarterSplashScreen as SwSplashScreen } from './SwStarterSplashScreen.js';
@@ -0,0 +1,140 @@
1
+ export class SwStarterSplashScreen extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+ this.attachShadow({ mode: 'open' });
5
+ }
6
+
7
+ connectedCallback() {
8
+ this.render();
9
+ }
10
+
11
+ render() {
12
+ this.shadowRoot.innerHTML = `
13
+ ${this.styleSheet()}
14
+ <div class="wrap">
15
+ <div class="card">
16
+ <div class="logo-container">
17
+ <img class="logo" src="/assets/logo.svg" alt="Expo" />
18
+ </div>
19
+ <div class="title">Switch Framework</div>
20
+ <div class="sub">Launching...</div>
21
+
22
+ <div class="loader-container">
23
+ <div class="loader"></div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ `;
28
+ }
29
+
30
+ styleSheet() {
31
+ return `
32
+ <style>
33
+ :host {
34
+ position: fixed;
35
+ inset: 0;
36
+ display: block;
37
+ background: var(--page_background, #fff);
38
+ z-index: 9999;
39
+ }
40
+
41
+ * {
42
+ box-sizing: border-box;
43
+ font-family: var(--font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
44
+ }
45
+
46
+ .wrap {
47
+ height: 100%;
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ padding: 18px;
52
+ }
53
+
54
+ .card {
55
+ width: min(520px, 100%);
56
+ display: flex;
57
+ flex-direction: column;
58
+ align-items: center;
59
+ gap: 16px;
60
+ }
61
+
62
+ .logo-container {
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ width: 100px;
67
+ height: 100px;
68
+ background: linear-gradient(135deg, #0091ff 0%, #0073e6 100%);
69
+ border-radius: 28px;
70
+ box-shadow: 0 20px 40px rgba(0, 145, 255, 0.25);
71
+ animation: fadeInScale 0.6s ease-out;
72
+ }
73
+
74
+ .logo {
75
+ width: 56px;
76
+ height: 56px;
77
+ filter: brightness(0) invert(1);
78
+ }
79
+
80
+ .title {
81
+ font-weight: 700;
82
+ font-size: 24px;
83
+ color: var(--main_text, #000);
84
+ animation: fadeIn 0.8s ease-out 0.2s both;
85
+ }
86
+
87
+ .sub {
88
+ font-weight: 600;
89
+ font-size: 13px;
90
+ color: var(--sub_text, #666);
91
+ animation: fadeIn 0.8s ease-out 0.3s both;
92
+ }
93
+
94
+ .loader-container {
95
+ margin-top: 12px;
96
+ animation: fadeIn 0.8s ease-out 0.4s both;
97
+ }
98
+
99
+ .loader {
100
+ width: 48px;
101
+ height: 48px;
102
+ border: 3px solid rgba(0, 145, 255, 0.15);
103
+ border-top: 3px solid #0091ff;
104
+ border-radius: 50%;
105
+ animation: spin 1s linear infinite;
106
+ }
107
+
108
+ @keyframes spin {
109
+ to {
110
+ transform: rotate(360deg);
111
+ }
112
+ }
113
+
114
+ @keyframes fadeIn {
115
+ from {
116
+ opacity: 0;
117
+ }
118
+ to {
119
+ opacity: 1;
120
+ }
121
+ }
122
+
123
+ @keyframes fadeInScale {
124
+ from {
125
+ opacity: 0;
126
+ transform: scale(0.8);
127
+ }
128
+ to {
129
+ opacity: 1;
130
+ transform: scale(1);
131
+ }
132
+ }
133
+ </style>
134
+ `;
135
+ }
136
+ }
137
+
138
+ if (!customElements.get('sw-starter-splash')) {
139
+ customElements.define('sw-starter-splash', SwStarterSplashScreen);
140
+ }
@@ -0,0 +1,153 @@
1
+ export class SwTabBar extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+ this.attachShadow({ mode: 'open' });
5
+ this._unsub = null;
6
+ }
7
+
8
+ connectedCallback() {
9
+ this.render();
10
+ this.updateActive();
11
+
12
+ if (globalStates?.subscribe) {
13
+ this._unsub = globalStates.subscribe(() => this.updateActive());
14
+ }
15
+
16
+ this.shadowRoot.addEventListener('click', (e) => {
17
+ const btn = e.target?.closest?.('button[data-route]');
18
+ if (!btn) return;
19
+ const route = btn.getAttribute('data-route');
20
+ const navigate = globalStates?.getState ? globalStates.getState('navigate') : null;
21
+ if (typeof navigate === 'function') navigate(route);
22
+ });
23
+ }
24
+
25
+ disconnectedCallback() {
26
+ if (this._unsub) this._unsub();
27
+ }
28
+
29
+ getTabs() {
30
+ const layout = globalStates?.getState ? globalStates.getState('tabsLayout') : null;
31
+ const tabs = Array.isArray(layout?.tabs) ? layout.tabs : [];
32
+ return tabs;
33
+ }
34
+
35
+ updateActive() {
36
+ const activeRoute = globalStates?.getState ? globalStates.getState('activeRoute') : '';
37
+ const tabs = this.getTabs();
38
+
39
+ tabs.forEach((t) => {
40
+ const el = this.shadowRoot.getElementById(`tab-${t.name}`);
41
+ if (!el) return;
42
+ const isActive = String(activeRoute || '').startsWith(String(t.name));
43
+ el.classList.toggle('active', isActive);
44
+ });
45
+ }
46
+
47
+ render() {
48
+ const tabs = this.getTabs();
49
+
50
+ this.shadowRoot.innerHTML = `
51
+ ${this.styleSheet()}
52
+ <nav class="bar" aria-label="Bottom tabs">
53
+ ${tabs.map((t) => `
54
+ <button class="tab" id="tab-${t.name}" data-route="${t.name}" type="button">
55
+ <span class="icon">${this.getIcon(t.icon)}</span>
56
+ <span class="label">${t.title || t.name}</span>
57
+ </button>
58
+ `).join('')}
59
+ </nav>
60
+ `;
61
+ }
62
+
63
+ getIcon(name) {
64
+ const map = {
65
+ home: `<span class='switch_icon_house'></span>`,
66
+ compass: `<span class='switch_icon_compass'></span>`,
67
+ settings: `<span class='switch_icon_gear'></span>`
68
+ };
69
+ return map[name] || map.home;
70
+ }
71
+
72
+ styleSheet() {
73
+ return `
74
+ <style>
75
+ @import '/assets/icons/style.css';
76
+
77
+ :host {
78
+ display: block;
79
+ width: 100%;
80
+ background: transparent;
81
+ }
82
+
83
+ * {
84
+ box-sizing: border-box;
85
+ font-family: var(--font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
86
+ }
87
+
88
+ .bar {
89
+ display: grid;
90
+ grid-template-columns: repeat(2, 1fr);
91
+ gap: 12px;
92
+ padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px));
93
+ border-top: 1px solid var(--border_color, #e5e5e5);
94
+ background: rgba(255, 255, 255, 0.95);
95
+ backdrop-filter: saturate(180%) blur(10px);
96
+ }
97
+
98
+ :root[data-theme="dark"] .bar {
99
+ background: rgba(11, 15, 20, 0.95);
100
+ border-top-color: rgba(255, 255, 255, 0.1);
101
+ }
102
+
103
+ .tab {
104
+ appearance: none;
105
+ border: none;
106
+ background: transparent;
107
+ border-radius: 20px;
108
+ padding: 12px 14px;
109
+ cursor: pointer;
110
+ display: flex;
111
+ flex-direction: column;
112
+ align-items: center;
113
+ gap: 8px;
114
+ color: var(--sub_text, #666);
115
+ font-weight: 600;
116
+ transition: all 0.2s ease;
117
+ }
118
+
119
+ .tab:active {
120
+ transform: scale(0.95);
121
+ }
122
+
123
+ .tab.active {
124
+ background: rgba(0, 0, 0, 0.06);
125
+ color: var(--main_text, #000);
126
+ }
127
+
128
+ :root[data-theme="dark"] .tab.active {
129
+ background: rgba(255, 255, 255, 0.1);
130
+ }
131
+
132
+ .icon {
133
+ display: flex;
134
+ align-items: center;
135
+ justify-content: center;
136
+ font-size: 24px;
137
+ line-height: 1;
138
+ }
139
+
140
+ .label {
141
+ display: block;
142
+ text-align: center;
143
+ font-size: 11px;
144
+ font-weight: 600;
145
+ }
146
+ </style>
147
+ `;
148
+ }
149
+ }
150
+
151
+ if (!customElements.get('sw-tab-bar')) {
152
+ customElements.define('sw-tab-bar', SwTabBar);
153
+ }
@@ -0,0 +1,14 @@
1
+ export async function checkIntro() {
2
+ try {
3
+ const introDone = localStorage.getItem('intro') === 'true';
4
+ return {
5
+ introDone,
6
+ shouldShowIntro: !introDone
7
+ };
8
+ } catch (e) {
9
+ return {
10
+ introDone: false,
11
+ shouldShowIntro: false
12
+ };
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Switch Framework App</title>
7
+ <link rel="stylesheet" href="/assets/styles/styles.css">
8
+ <link rel="stylesheet" href="/assets/icons/style.css">
9
+ </head>
10
+ <body>
11
+ <sw-app-initial></sw-app-initial>
12
+ <script type="module" src="/index.js"></script>
13
+ </body>
14
+ </html>
@@ -0,0 +1,5 @@
1
+ import { startApp } from '/switch-framework/index.js';
2
+ import layout from './app/_layout.js';
3
+ import { appRegisters } from './app/register.js';
4
+
5
+ startApp(layout, appRegisters);
@@ -0,0 +1 @@
1
+ //your backend api routes here