create-octane-xplat 0.1.0 → 0.4.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 (84) hide show
  1. package/README.md +25 -0
  2. package/index.mjs +20 -17
  3. package/package.json +2 -2
  4. package/template/.gitattributes +1 -0
  5. package/template/.oxlintrc.json +25 -0
  6. package/template/App_Resources/Android/app.gradle +25 -0
  7. package/template/App_Resources/Android/before-plugins.gradle +15 -0
  8. package/template/App_Resources/Android/src/main/AndroidManifest.xml +43 -0
  9. package/template/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml +15 -0
  10. package/template/App_Resources/Android/src/main/res/drawable-hdpi/background.png +0 -0
  11. package/template/App_Resources/Android/src/main/res/drawable-hdpi/logo.png +0 -0
  12. package/template/App_Resources/Android/src/main/res/drawable-ldpi/background.png +0 -0
  13. package/template/App_Resources/Android/src/main/res/drawable-ldpi/logo.png +0 -0
  14. package/template/App_Resources/Android/src/main/res/drawable-mdpi/background.png +0 -0
  15. package/template/App_Resources/Android/src/main/res/drawable-mdpi/logo.png +0 -0
  16. package/template/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml +8 -0
  17. package/template/App_Resources/Android/src/main/res/drawable-xhdpi/background.png +0 -0
  18. package/template/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png +0 -0
  19. package/template/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png +0 -0
  20. package/template/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png +0 -0
  21. package/template/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png +0 -0
  22. package/template/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png +0 -0
  23. package/template/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  24. package/template/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  25. package/template/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  26. package/template/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  27. package/template/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  28. package/template/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  29. package/template/App_Resources/Android/src/main/res/values/colors.xml +14 -0
  30. package/template/App_Resources/Android/src/main/res/values/ic_launcher_background.xml +4 -0
  31. package/template/App_Resources/Android/src/main/res/values/styles.xml +42 -0
  32. package/template/App_Resources/Android/src/main/res/values-v21/colors.xml +5 -0
  33. package/template/App_Resources/Android/src/main/res/values-v21/styles.xml +34 -0
  34. package/template/App_Resources/Android/src/main/res/values-v29/styles.xml +18 -0
  35. package/template/App_Resources/Android/src/main/res/xml/network_security_config.xml +14 -0
  36. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json +122 -0
  37. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png +0 -0
  38. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png +0 -0
  39. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png +0 -0
  40. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png +0 -0
  41. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png +0 -0
  42. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png +0 -0
  43. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png +0 -0
  44. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
  45. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
  46. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
  47. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
  48. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
  49. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
  50. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
  51. package/template/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
  52. package/template/App_Resources/iOS/Assets.xcassets/Contents.json +6 -0
  53. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json +23 -0
  54. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png +0 -0
  55. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png +0 -0
  56. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png +0 -0
  57. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json +23 -0
  58. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png +0 -0
  59. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png +0 -0
  60. package/template/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png +0 -0
  61. package/template/App_Resources/iOS/Assets.xcassets/octane.imageset/Contents.json +8 -0
  62. package/template/App_Resources/iOS/Assets.xcassets/octane.imageset/octane.png +0 -0
  63. package/template/App_Resources/iOS/Assets.xcassets/octane.imageset/octane@2x.png +0 -0
  64. package/template/App_Resources/iOS/Assets.xcassets/octane.imageset/octane@3x.png +0 -0
  65. package/template/App_Resources/iOS/Info.plist +52 -0
  66. package/template/App_Resources/iOS/LaunchScreen.storyboard +53 -0
  67. package/template/App_Resources/iOS/build.xcconfig +7 -0
  68. package/template/App_Resources/iOS/src/OctaneShaders.metal +128 -0
  69. package/template/gitignore +2 -0
  70. package/template/index.html +9 -9
  71. package/template/nativescript.config.ts +13 -0
  72. package/template/package.json +40 -18
  73. package/template/patches/@nativescript-community__vite-octane@0.2.1.patch +41 -0
  74. package/template/patches/@nativescript__vite@8.0.11.patch +294 -0
  75. package/template/pnpm-workspace.yaml +25 -3
  76. package/template/references.d.ts +1 -0
  77. package/template/src/App.tsrx +5 -3
  78. package/template/src/index.native.ts +33 -0
  79. package/template/src/style.css +21 -0
  80. package/template/tsconfig.json +4 -2
  81. package/template/tsconfig.native.json +18 -0
  82. package/template/vite.config.native.mts +8 -0
  83. package/template/vite.config.ts +14 -7
  84. /package/template/src/{main.tsrx → main.web.tsrx} +0 -0
package/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # create-octane-xplat
2
+
3
+ > Scaffolds an Octane xplat app — one codebase targeting web, iOS, and
4
+ > Android via NativeScript.
5
+ >
6
+ > Status: `0.x` — the API surface is still moving. iOS/Android targets need
7
+ > the NativeScript toolchain (Xcode/JDK + `ns`).
8
+
9
+ ```sh
10
+ pnpm create octane-xplat my-app
11
+ # or: npm create octane-xplat my-app
12
+ ```
13
+
14
+ Copies the starter template (vite + nativescript configs, shared `src/`,
15
+ `App_Resources`, pinned workspace deps), installs dependencies with pnpm,
16
+ and starts the web dev server. From there:
17
+
18
+ ```sh
19
+ pnpm dev # web
20
+ pnpm dev:ios # iOS simulator — needs the NativeScript toolchain
21
+ pnpm dev:android # Android — needs the NativeScript toolchain
22
+ pnpm typecheck # web + native tsconfigs
23
+ ```
24
+
25
+ Docs: [Running and checking an app](https://octane-xplat.goddardai.org/toolchain)
package/index.mjs CHANGED
@@ -1,28 +1,31 @@
1
1
  #!/usr/bin/env node
2
- import { existsSync, readdirSync, cpSync, renameSync } from 'node:fs';
3
- import { dirname, join, resolve } from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import { spawnSync } from 'node:child_process';
2
+ import { existsSync, readdirSync, cpSync, renameSync } from 'node:fs'
3
+ import { dirname, join, resolve } from 'node:path'
4
+ import { fileURLToPath } from 'node:url'
5
+ import { spawnSync } from 'node:child_process'
6
6
 
7
- const dir = resolve(process.argv[2] ?? 'octane-xplat-app');
7
+ const dir = resolve(process.argv[2] ?? 'octane-xplat-app')
8
8
 
9
9
  if (existsSync(dir) && readdirSync(dir).length > 0) {
10
- console.error(`✗ ${dir} exists and is not empty`);
11
- process.exit(1);
10
+ console.error(`✗ ${dir} exists and is not empty`)
11
+ process.exit(1)
12
12
  }
13
13
 
14
- const template = join(dirname(fileURLToPath(import.meta.url)), 'template');
15
- cpSync(template, dir, { recursive: true });
14
+ const template = join(dirname(fileURLToPath(import.meta.url)), 'template')
15
+ cpSync(template, dir, { recursive: true })
16
16
  // npm packs .gitignore as a renamed file or drops it — ship it undotted.
17
- try { renameSync(join(dir, 'gitignore'), join(dir, '.gitignore')); } catch {}
18
- console.log(`\n✓ scaffolded ${dir}`);
17
+ try {
18
+ renameSync(join(dir, 'gitignore'), join(dir, '.gitignore'))
19
+ } catch {}
19
20
 
20
- const install = spawnSync('pnpm', ['install'], { cwd: dir, stdio: 'inherit' });
21
+ console.log(`\n✓ scaffolded ${dir}`)
22
+
23
+ const install = spawnSync('pnpm', ['install'], { cwd: dir, stdio: 'inherit' })
21
24
  if (install.status !== 0) {
22
- console.log(`\nInstall didn't finish (pnpm missing?). To run manually:`);
23
- console.log(` cd ${dir}\n pnpm install\n pnpm dev`);
24
- process.exit(install.status ?? 1);
25
+ console.log(`\nInstall didn't finish (pnpm missing?). To run manually:`)
26
+ console.log(` cd ${dir}\n pnpm install\n pnpm dev`)
27
+ process.exit(install.status ?? 1)
25
28
  }
26
29
 
27
- console.log('\n✓ installed — starting dev server (Ctrl+C to stop)\n');
28
- spawnSync('pnpm', ['dev'], { cwd: dir, stdio: 'inherit' });
30
+ console.log('\n✓ installed — starting dev server (Ctrl+C to stop)\n')
31
+ spawnSync('pnpm', ['dev'], { cwd: dir, stdio: 'inherit' })
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "create-octane-xplat",
3
- "version": "0.1.0",
4
- "type": "module",
3
+ "version": "0.4.0",
5
4
  "description": "Scaffold a minimal @octane-xplat/ui app — one Octane codebase for web + iOS + Android",
6
5
  "bin": {
7
6
  "create-octane-xplat": "./index.mjs"
@@ -10,6 +9,7 @@
10
9
  "index.mjs",
11
10
  "template"
12
11
  ],
12
+ "type": "module",
13
13
  "publishConfig": {
14
14
  "access": "public"
15
15
  }
@@ -0,0 +1 @@
1
+ *.tsrx linguist-language=TypeScript
@@ -0,0 +1,25 @@
1
+ {
2
+ "jsPlugins": ["@octane-xplat/lint/oxlint-plugin"],
3
+ "rules": {
4
+ "curly": "error",
5
+ "xplat/spacing": "error",
6
+ "xplat/no-dom-globals": "error",
7
+ "xplat/no-web-only-api": "error",
8
+ "xplat/element-vocabulary": "error",
9
+ "xplat/no-nativescript-import": "error",
10
+ "xplat/no-ns-deep-import": "error",
11
+ "xplat/no-native-dead-style": "error",
12
+ "xplat/no-line-height-unitless": "error",
13
+ "xplat/no-style-string": "error",
14
+ "xplat/no-unknown-class": "warn",
15
+ "xplat/no-ts-imports-tsrx": "error",
16
+ "xplat/signal-dollar-suffix": "error",
17
+ "xplat/require-signals-runtime": "warn",
18
+ "xplat/no-view-onpress": "error",
19
+ "xplat/no-console-debug": "error",
20
+ "xplat/hooks-in-plain-ts": "warn",
21
+ "xplat/native-pragma-first-line": "error",
22
+ "xplat/no-jsx-text-breakers": "error",
23
+ "xplat/no-root-logical-render": "error"
24
+ }
25
+ }
@@ -0,0 +1,25 @@
1
+ // You can add your native dependencies here
2
+ dependencies {
3
+ // implementation 'androidx.multidex:multidex:2.0.1'
4
+ }
5
+
6
+ android {
7
+ compileSdkVersion 35
8
+ buildToolsVersion "35"
9
+ // ndkVersion ""
10
+
11
+ defaultConfig {
12
+ minSdkVersion 24
13
+ targetSdkVersion 35
14
+
15
+ // Version Information
16
+ versionCode 1
17
+ versionName "1.0.0"
18
+
19
+ generatedDensities = []
20
+ }
21
+
22
+ aaptOptions {
23
+ additionalParameters "--no-version-vectors"
24
+ }
25
+ }
@@ -0,0 +1,15 @@
1
+ // this configurations is loaded before building plugins, as well as before building
2
+ // the app - this is where you can apply global settings and overrides
3
+
4
+ project.ext {
5
+ // androidXAppCompat = "1.4.1"
6
+ // androidXExifInterface = "1.3.3"
7
+ // androidXFragment = "1.4.1"
8
+ // androidXMaterial = "1.5.0"
9
+ // androidXMultidex = "2.0.1"
10
+ // androidXTransition = "1.4.1"
11
+ // androidXViewPager = "1.0.0"
12
+
13
+ // useKotlin = true
14
+ // kotlinVersion = "1.6.0"
15
+ }
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="__PACKAGE__">
4
+
5
+ <supports-screens
6
+ android:smallScreens="true"
7
+ android:normalScreens="true"
8
+ android:largeScreens="true"
9
+ android:xlargeScreens="true"/>
10
+
11
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
12
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
13
+ <uses-permission android:name="android.permission.INTERNET"/>
14
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
15
+
16
+ <application
17
+ android:networkSecurityConfig="@xml/network_security_config"
18
+ android:name="com.tns.NativeScriptApplication"
19
+ android:allowBackup="true"
20
+ android:icon="@mipmap/ic_launcher"
21
+ android:label="@string/app_name"
22
+ android:theme="@style/AppTheme"
23
+ android:hardwareAccelerated="true">
24
+
25
+ <activity
26
+ android:name="com.tns.NativeScriptActivity"
27
+ android:label="@string/title_activity_kimera"
28
+ android:configChanges="keyboard|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|locale|uiMode"
29
+ android:theme="@style/LaunchScreenTheme"
30
+ android:hardwareAccelerated="true"
31
+ android:launchMode="singleTask"
32
+ android:exported="true">
33
+
34
+ <meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
35
+
36
+ <intent-filter>
37
+ <action android:name="android.intent.action.MAIN" />
38
+ <category android:name="android.intent.category.LAUNCHER" />
39
+ </intent-filter>
40
+ </activity>
41
+ <activity android:name="com.tns.ErrorReportActivity"/>
42
+ </application>
43
+ </manifest>
@@ -0,0 +1,15 @@
1
+ <vector xmlns:android="http://schemas.android.com/apk/res/android"
2
+ android:width="108dp"
3
+ android:height="108dp"
4
+ android:viewportWidth="108"
5
+ android:viewportHeight="108">
6
+ <group android:scaleX="0.07382812"
7
+ android:scaleY="0.07382812"
8
+ android:translateX="16.2"
9
+ android:translateY="16.2">
10
+ <path
11
+ android:pathData="M843,511.86L843,512.96C843,513.22 842.8,513.43 842.55,513.46C809.18,516.58 783.07,543.69 783.07,577.86L783.07,714.8C783.07,724.37 781.06,733.6 777.43,742.03C767.08,766.1 743.59,783.6 716.27,783.6L647.07,783.6L646.59,783L377.41,445.68L377.41,783.6L307.73,783.6C270.84,783.6 240.93,753.7 240.93,716.8L240.93,577.86C240.93,543.69 214.82,516.58 181.45,513.46C181.2,513.43 181,513.22 181,512.96L181,511.86C181,511.61 181.19,511.4 181.45,511.37C214.69,508.14 240.67,480.35 240.67,446.26L240.67,307.2C240.67,297.91 242.57,289.05 246,281.01C256.18,257.14 279.87,240.39 307.47,240.39L377.13,240.39L377.41,240.74L646.59,578.07L646.59,240.39L716.53,240.39C753.42,240.39 783.33,270.3 783.33,307.2L783.33,446.26C783.33,480.35 809.31,508.14 842.55,511.37C842.81,511.4 843,511.61 843,511.86"
12
+ android:fillColor="#65ADF1"
13
+ android:fillType="nonZero"/>
14
+ </group>
15
+ </vector>
@@ -0,0 +1,8 @@
1
+ <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="fill">
2
+ <item>
3
+ <bitmap android:gravity="fill" android:src="@drawable/background" />
4
+ </item>
5
+ <item>
6
+ <bitmap android:gravity="center" android:src="@drawable/logo" />
7
+ </item>
8
+ </layer-list>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <background android:drawable="@color/ic_launcher_background"/>
4
+ <foreground android:drawable="@drawable/ic_launcher_foreground"/>
5
+ </adaptive-icon>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <resources>
3
+ <!-- The default color of the ActionBar -->
4
+ <color name="ns_primary">#F5F5F5</color>
5
+
6
+ <!-- (API21+) The color of the status bar and contextual app bars; this is normally a dark version of colorPrimary. -->
7
+ <color name="ns_primaryDark">#757575</color>
8
+
9
+ <!-- The color of UI controls such as check boxes, radio buttons, and edit text boxes. -->
10
+ <color name="ns_accent">#65ADF1</color>
11
+
12
+ <!-- this is unused in the default themes, so we might want to remove it? -->
13
+ <!-- <color name="ns_blue">#272734</color> -->
14
+ </resources>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources>
3
+ <color name="ic_launcher_background">#FFFFFF</color>
4
+ </resources>
@@ -0,0 +1,42 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <!-- theme to use FOR launch screen-->
5
+ <style name="LaunchScreenThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
6
+ <item name="toolbarStyle">@style/NativeScriptToolbarStyle</item>
7
+
8
+ <item name="colorPrimary">@color/ns_primary</item>
9
+ <item name="colorPrimaryDark">@color/ns_primaryDark</item>
10
+ <item name="colorAccent">@color/ns_accent</item>
11
+
12
+ <item name="android:windowBackground">@drawable/splash_screen</item>
13
+
14
+ <item name="android:windowActionBarOverlay">true</item>
15
+ <item name="android:windowTranslucentStatus">true</item>
16
+ </style>
17
+
18
+ <style name="LaunchScreenTheme" parent="LaunchScreenThemeBase">
19
+ </style>
20
+
21
+ <!-- theme to use AFTER launch screen is loaded-->
22
+ <style name="AppThemeBase" parent="Theme.AppCompat.Light.NoActionBar">
23
+ <item name="toolbarStyle">@style/NativeScriptToolbarStyle</item>
24
+
25
+ <item name="colorPrimary">@color/ns_primary</item>
26
+ <item name="colorPrimaryDark">@color/ns_primaryDark</item>
27
+ <item name="colorAccent">@color/ns_accent</item>
28
+ </style>
29
+
30
+ <style name="AppTheme" parent="AppThemeBase">
31
+ </style>
32
+
33
+ <!-- theme for action-bar -->
34
+ <style name="NativeScriptToolbarStyleBase" parent="Widget.AppCompat.Toolbar">
35
+ <item name="android:background">@color/ns_primary</item>
36
+ <item name="theme">@style/ThemeOverlay.AppCompat.ActionBar</item>
37
+ <item name="popupTheme">@style/ThemeOverlay.AppCompat</item>
38
+ </style>
39
+
40
+ <style name="NativeScriptToolbarStyle" parent="NativeScriptToolbarStyleBase">
41
+ </style>
42
+ </resources>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <resources>
3
+ <!-- You can override base colors from values/colors.xml here, for example: -->
4
+ <!-- <color name="ns_accent">#65ADF1</color> -->
5
+ </resources>
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <resources xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <!-- Application theme -->
5
+ <style name="AppThemeBase21" parent="AppThemeBase">
6
+ <!-- Uncomment this to make the app show underneat the status bar -->
7
+ <!-- <item name="android:windowTranslucentStatus">true</item> -->
8
+
9
+ <item name="android:datePickerStyle">@style/SpinnerDatePicker</item>
10
+ <item name="android:timePickerStyle">@style/SpinnerTimePicker</item>
11
+ </style>
12
+
13
+ <style name="AppTheme" parent="AppThemeBase21">
14
+ </style>
15
+
16
+ <!-- Default style for DatePicker - in spinner mode -->
17
+ <style name="SpinnerDatePicker" parent="android:Widget.Material.Light.DatePicker">
18
+ <!-- set the default mode for the date picker (supported values: spinner, calendar) -->
19
+ <item name="android:datePickerMode">spinner</item>
20
+ </style>
21
+
22
+ <!-- Default style for TimePicker - in spinner mode -->
23
+ <style name="SpinnerTimePicker" parent="android:Widget.Material.Light.TimePicker">
24
+ <!-- set the default mode for the time picker (supported values: spinner, clock) -->
25
+ <item name="android:timePickerMode">spinner</item>
26
+ </style>
27
+
28
+ <style name="NativeScriptToolbarStyle" parent="NativeScriptToolbarStyleBase">
29
+ <item name="android:elevation">4dp</item>
30
+
31
+ <!-- Add padding to the ActionBar - useful when android:windowTranslucentStatus is set to true -->
32
+ <!-- <item name="android:paddingTop">24dp</item> -->
33
+ </style>
34
+ </resources>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <!-- Application theme -->
5
+ <style name="AppThemeBase29" parent="AppThemeBase21">
6
+
7
+ <!--
8
+ Disable forced dark mode on newer devices.
9
+ Enabling this will make your app appear in dark-mode,
10
+ but the way the app is converted may lead to visual issues
11
+ -->
12
+ <item name="android:forceDarkAllowed">false</item>
13
+ </style>
14
+
15
+ <style name="AppTheme" parent="AppThemeBase29">
16
+ </style>
17
+
18
+ </resources>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!--
3
+ Dev only: the Vite HMR dev server is reached over cleartext HTTP on the
4
+ loopback host (127.0.0.1 via `adb reverse`) or the emulator NAT alias
5
+ (10.0.2.2). Android blocks cleartext by default on targetSdk >= 28, which
6
+ fails the module graph fetch at boot; permit it for those hosts only.
7
+ -->
8
+ <network-security-config>
9
+ <domain-config cleartextTrafficPermitted="true">
10
+ <domain includeSubdomains="false">127.0.0.1</domain>
11
+ <domain includeSubdomains="false">10.0.2.2</domain>
12
+ <domain includeSubdomains="false">localhost</domain>
13
+ </domain-config>
14
+ </network-security-config>
@@ -0,0 +1,122 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "size": "20x20",
5
+ "idiom": "iphone",
6
+ "filename": "icon-20@2x.png",
7
+ "scale": "2x"
8
+ },
9
+ {
10
+ "size": "20x20",
11
+ "idiom": "iphone",
12
+ "filename": "icon-20@3x.png",
13
+ "scale": "3x"
14
+ },
15
+ {
16
+ "size": "29x29",
17
+ "idiom": "iphone",
18
+ "filename": "icon-29.png",
19
+ "scale": "1x"
20
+ },
21
+ {
22
+ "size": "29x29",
23
+ "idiom": "iphone",
24
+ "filename": "icon-29@2x.png",
25
+ "scale": "2x"
26
+ },
27
+ {
28
+ "size": "29x29",
29
+ "idiom": "iphone",
30
+ "filename": "icon-29@3x.png",
31
+ "scale": "3x"
32
+ },
33
+ {
34
+ "size": "40x40",
35
+ "idiom": "iphone",
36
+ "filename": "icon-40@2x.png",
37
+ "scale": "2x"
38
+ },
39
+ {
40
+ "size": "40x40",
41
+ "idiom": "iphone",
42
+ "filename": "icon-40@3x.png",
43
+ "scale": "3x"
44
+ },
45
+ {
46
+ "size": "60x60",
47
+ "idiom": "iphone",
48
+ "filename": "icon-60@2x.png",
49
+ "scale": "2x"
50
+ },
51
+ {
52
+ "size": "60x60",
53
+ "idiom": "iphone",
54
+ "filename": "icon-60@3x.png",
55
+ "scale": "3x"
56
+ },
57
+ {
58
+ "size": "20x20",
59
+ "idiom": "ipad",
60
+ "filename": "icon-20.png",
61
+ "scale": "1x"
62
+ },
63
+ {
64
+ "size": "20x20",
65
+ "idiom": "ipad",
66
+ "filename": "icon-20@2x.png",
67
+ "scale": "2x"
68
+ },
69
+ {
70
+ "size": "29x29",
71
+ "idiom": "ipad",
72
+ "filename": "icon-29.png",
73
+ "scale": "1x"
74
+ },
75
+ {
76
+ "size": "29x29",
77
+ "idiom": "ipad",
78
+ "filename": "icon-29@2x.png",
79
+ "scale": "2x"
80
+ },
81
+ {
82
+ "size": "40x40",
83
+ "idiom": "ipad",
84
+ "filename": "icon-40.png",
85
+ "scale": "1x"
86
+ },
87
+ {
88
+ "size": "40x40",
89
+ "idiom": "ipad",
90
+ "filename": "icon-40@2x.png",
91
+ "scale": "2x"
92
+ },
93
+ {
94
+ "size": "76x76",
95
+ "idiom": "ipad",
96
+ "filename": "icon-76.png",
97
+ "scale": "1x"
98
+ },
99
+ {
100
+ "size": "76x76",
101
+ "idiom": "ipad",
102
+ "filename": "icon-76@2x.png",
103
+ "scale": "2x"
104
+ },
105
+ {
106
+ "size": "83.5x83.5",
107
+ "idiom": "ipad",
108
+ "filename": "icon-83.5@2x.png",
109
+ "scale": "2x"
110
+ },
111
+ {
112
+ "size": "1024x1024",
113
+ "idiom": "ios-marketing",
114
+ "filename": "icon-1024.png",
115
+ "scale": "1x"
116
+ }
117
+ ],
118
+ "info": {
119
+ "version": 1,
120
+ "author": "xcode"
121
+ }
122
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "info": {
3
+ "version": 1,
4
+ "author": "xcode"
5
+ }
6
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "idiom": "universal",
5
+ "filename": "LaunchScreen-AspectFill.png",
6
+ "scale": "1x"
7
+ },
8
+ {
9
+ "idiom": "universal",
10
+ "filename": "LaunchScreen-AspectFill@2x.png",
11
+ "scale": "2x"
12
+ },
13
+ {
14
+ "idiom": "universal",
15
+ "filename": "LaunchScreen-AspectFill@3x.png",
16
+ "scale": "3x"
17
+ }
18
+ ],
19
+ "info": {
20
+ "version": 1,
21
+ "author": "xcode"
22
+ }
23
+ }