diff --git a/README.md b/README.md
index 2d3ef2e..e543c9a 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,7 @@
effortless webrtc screensharing
+# ai usage transparency
+
+i maintain full control of the website, while the android and electron apps are "controlled" by the ai.
+i, of course, review code, but would like to implement stuff on
\ No newline at end of file
diff --git a/mobile-wrapper/README.md b/mobile-wrapper/README.md
deleted file mode 100644
index b4e07b7..0000000
--- a/mobile-wrapper/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Helium Mobile Wrapper (Android)
-
-This is a TypeScript mobile wrapper built with React + Capacitor for opening
-the Helium web app on Android.
-
-## Why this approach
-
-- Capacitor keeps the project in TypeScript.
-- The app first tries to open Helium directly in Google Chrome on Android.
-- A fallback button opens Helium with the default browser.
-
-## Setup
-
-```bash
-pnpm -C mobile-wrapper install
-pnpm -C mobile-wrapper build
-pnpm -C mobile-wrapper cap:android:add
-pnpm -C mobile-wrapper cap:sync
-pnpm -C mobile-wrapper cap:android:open
-```
-
-Then build/run from Android Studio.
-
-## Notes on screen sharing with audio
-
-- Android support for screen-capture audio depends on OS version, Chrome
- version, OEM restrictions, and user permissions.
-- If audio is unavailable, update Android + Chrome and confirm audio capture is
- enabled in the system screen-share dialog.
-- A pure in-app WebView wrapper is less reliable for audio capture than Chrome
- Custom Tabs on Android.
diff --git a/mobile-wrapper/android/.gitignore b/mobile-wrapper/android/.gitignore
deleted file mode 100644
index 48354a3..0000000
--- a/mobile-wrapper/android/.gitignore
+++ /dev/null
@@ -1,101 +0,0 @@
-# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
-
-# Built application files
-*.apk
-*.aar
-*.ap_
-*.aab
-
-# Files for the ART/Dalvik VM
-*.dex
-
-# Java class files
-*.class
-
-# Generated files
-bin/
-gen/
-out/
-# Uncomment the following line in case you need and you don't have the release build type files in your app
-# release/
-
-# Gradle files
-.gradle/
-build/
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-# Proguard folder generated by Eclipse
-proguard/
-
-# Log Files
-*.log
-
-# Android Studio Navigation editor temp files
-.navigation/
-
-# Android Studio captures folder
-captures/
-
-# IntelliJ
-*.iml
-.idea/workspace.xml
-.idea/tasks.xml
-.idea/gradle.xml
-.idea/assetWizardSettings.xml
-.idea/dictionaries
-.idea/libraries
-# Android Studio 3 in .gitignore file.
-.idea/caches
-.idea/modules.xml
-# Comment next line if keeping position of elements in Navigation Editor is relevant for you
-.idea/navEditor.xml
-
-# Keystore files
-# Uncomment the following lines if you do not want to check your keystore files in.
-#*.jks
-#*.keystore
-
-# External native build folder generated in Android Studio 2.2 and later
-.externalNativeBuild
-.cxx/
-
-# Google Services (e.g. APIs or Firebase)
-# google-services.json
-
-# Freeline
-freeline.py
-freeline/
-freeline_project_description.json
-
-# fastlane
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
-fastlane/test_output
-fastlane/readme.md
-
-# Version control
-vcs.xml
-
-# lint
-lint/intermediates/
-lint/generated/
-lint/outputs/
-lint/tmp/
-# lint/reports/
-
-# Android Profiling
-*.hprof
-
-# Cordova plugins for Capacitor
-capacitor-cordova-android-plugins
-
-# Copied web assets
-app/src/main/assets/public
-
-# Generated Config files
-app/src/main/assets/capacitor.config.json
-app/src/main/assets/capacitor.plugins.json
-app/src/main/res/xml/config.xml
diff --git a/mobile-wrapper/android/app/.gitignore b/mobile-wrapper/android/app/.gitignore
deleted file mode 100644
index 043df80..0000000
--- a/mobile-wrapper/android/app/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build/*
-!/build/.npmkeep
diff --git a/mobile-wrapper/android/app/build.gradle b/mobile-wrapper/android/app/build.gradle
deleted file mode 100644
index 6fea0a8..0000000
--- a/mobile-wrapper/android/app/build.gradle
+++ /dev/null
@@ -1,54 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- namespace "dev.srizan.helium.mobile"
- compileSdk rootProject.ext.compileSdkVersion
- defaultConfig {
- applicationId "dev.srizan.helium.mobile"
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- aaptOptions {
- // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
- // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
- ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
- }
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-repositories {
- flatDir{
- dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
- }
-}
-
-dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
- implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
- implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
- implementation project(':capacitor-android')
- testImplementation "junit:junit:$junitVersion"
- androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
- androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
- implementation project(':capacitor-cordova-android-plugins')
-}
-
-apply from: 'capacitor.build.gradle'
-
-try {
- def servicesJSON = file('google-services.json')
- if (servicesJSON.text) {
- apply plugin: 'com.google.gms.google-services'
- }
-} catch(Exception e) {
- logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
-}
diff --git a/mobile-wrapper/android/app/capacitor.build.gradle b/mobile-wrapper/android/app/capacitor.build.gradle
deleted file mode 100644
index 70f93fc..0000000
--- a/mobile-wrapper/android/app/capacitor.build.gradle
+++ /dev/null
@@ -1,20 +0,0 @@
-// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
-
-android {
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_21
- targetCompatibility JavaVersion.VERSION_21
- }
-}
-
-apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
-dependencies {
- implementation project(':capacitor-app')
- implementation project(':capacitor-browser')
-
-}
-
-
-if (hasProperty('postBuildExtras')) {
- postBuildExtras()
-}
diff --git a/mobile-wrapper/android/app/proguard-rules.pro b/mobile-wrapper/android/app/proguard-rules.pro
deleted file mode 100644
index f1b4245..0000000
--- a/mobile-wrapper/android/app/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/mobile-wrapper/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/mobile-wrapper/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
deleted file mode 100644
index f2c2217..0000000
--- a/mobile-wrapper/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.getcapacitor.myapp;
-
-import static org.junit.Assert.*;
-
-import android.content.Context;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.platform.app.InstrumentationRegistry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
-
- assertEquals("com.getcapacitor.app", appContext.getPackageName());
- }
-}
diff --git a/mobile-wrapper/android/app/src/main/AndroidManifest.xml b/mobile-wrapper/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 340e7df..0000000
--- a/mobile-wrapper/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mobile-wrapper/android/app/src/main/java/dev/srizan/helium/mobile/MainActivity.java b/mobile-wrapper/android/app/src/main/java/dev/srizan/helium/mobile/MainActivity.java
deleted file mode 100644
index f2dcff8..0000000
--- a/mobile-wrapper/android/app/src/main/java/dev/srizan/helium/mobile/MainActivity.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package dev.srizan.helium.mobile;
-
-import com.getcapacitor.BridgeActivity;
-
-public class MainActivity extends BridgeActivity {}
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-land-hdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-land-hdpi/splash.png
deleted file mode 100644
index e31573b..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-land-hdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-land-mdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-land-mdpi/splash.png
deleted file mode 100644
index f7a6492..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-land-mdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-land-xhdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-land-xhdpi/splash.png
deleted file mode 100644
index 8077255..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-land-xhdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-land-xxhdpi/splash.png
deleted file mode 100644
index 14c6c8f..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-land-xxhdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
deleted file mode 100644
index 244ca25..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-land-xxxhdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-port-hdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-port-hdpi/splash.png
deleted file mode 100644
index 74faaa5..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-port-hdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-port-mdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-port-mdpi/splash.png
deleted file mode 100644
index e944f4a..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-port-mdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-port-xhdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-port-xhdpi/splash.png
deleted file mode 100644
index 564a82f..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-port-xhdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-port-xxhdpi/splash.png
deleted file mode 100644
index bfabe68..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-port-xxhdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/mobile-wrapper/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
deleted file mode 100644
index 6929071..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable-port-xxxhdpi/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/mobile-wrapper/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index c7bd21d..0000000
--- a/mobile-wrapper/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mobile-wrapper/android/app/src/main/res/drawable/ic_launcher_background.xml b/mobile-wrapper/android/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index d5fccc5..0000000
--- a/mobile-wrapper/android/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/mobile-wrapper/android/app/src/main/res/drawable/splash.png b/mobile-wrapper/android/app/src/main/res/drawable/splash.png
deleted file mode 100644
index f7a6492..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/drawable/splash.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/layout/activity_main.xml b/mobile-wrapper/android/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index b5ad138..0000000
--- a/mobile-wrapper/android/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/mobile-wrapper/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 036d09b..0000000
--- a/mobile-wrapper/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/mobile-wrapper/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 036d09b..0000000
--- a/mobile-wrapper/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index c023e50..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index 2127973..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index b441f37..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 72905b8..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index 8ed0605..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 9502e47..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 4d1e077..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index df0f158..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 853db04..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 6cdf97c..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 2960cbb..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 8e3093a..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 46de6e2..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index d2ea9ab..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index a40d73e..0000000
Binary files a/mobile-wrapper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/mobile-wrapper/android/app/src/main/res/values/ic_launcher_background.xml b/mobile-wrapper/android/app/src/main/res/values/ic_launcher_background.xml
deleted file mode 100644
index c5d5899..0000000
--- a/mobile-wrapper/android/app/src/main/res/values/ic_launcher_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #FFFFFF
-
\ No newline at end of file
diff --git a/mobile-wrapper/android/app/src/main/res/values/strings.xml b/mobile-wrapper/android/app/src/main/res/values/strings.xml
deleted file mode 100644
index 4cb3778..0000000
--- a/mobile-wrapper/android/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- Helium Mobile
- Helium Mobile
- dev.srizan.helium.mobile
- dev.srizan.helium.mobile
-
diff --git a/mobile-wrapper/android/app/src/main/res/values/styles.xml b/mobile-wrapper/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index be874e5..0000000
--- a/mobile-wrapper/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/mobile-wrapper/android/app/src/main/res/xml/file_paths.xml b/mobile-wrapper/android/app/src/main/res/xml/file_paths.xml
deleted file mode 100644
index bd0c4d8..0000000
--- a/mobile-wrapper/android/app/src/main/res/xml/file_paths.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/mobile-wrapper/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/mobile-wrapper/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
deleted file mode 100644
index 0297327..0000000
--- a/mobile-wrapper/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.getcapacitor.myapp;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
-
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
diff --git a/mobile-wrapper/android/build.gradle b/mobile-wrapper/android/build.gradle
deleted file mode 100644
index f1b3b0e..0000000
--- a/mobile-wrapper/android/build.gradle
+++ /dev/null
@@ -1,29 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:8.7.2'
- classpath 'com.google.gms:google-services:4.4.2'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-apply from: "variables.gradle"
-
-allprojects {
- repositories {
- google()
- mavenCentral()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/mobile-wrapper/android/capacitor.settings.gradle b/mobile-wrapper/android/capacitor.settings.gradle
deleted file mode 100644
index 9e56504..0000000
--- a/mobile-wrapper/android/capacitor.settings.gradle
+++ /dev/null
@@ -1,9 +0,0 @@
-// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
-include ':capacitor-android'
-project(':capacitor-android').projectDir = new File('../../node_modules/.pnpm/@capacitor+android@7.5.0_@capacitor+core@7.5.0/node_modules/@capacitor/android/capacitor')
-
-include ':capacitor-app'
-project(':capacitor-app').projectDir = new File('../../node_modules/.pnpm/@capacitor+app@7.1.2_@capacitor+core@7.5.0/node_modules/@capacitor/app/android')
-
-include ':capacitor-browser'
-project(':capacitor-browser').projectDir = new File('../../node_modules/.pnpm/@capacitor+browser@7.0.4_@capacitor+core@7.5.0/node_modules/@capacitor/browser/android')
diff --git a/mobile-wrapper/android/gradle.properties b/mobile-wrapper/android/gradle.properties
deleted file mode 100644
index 2e87c52..0000000
--- a/mobile-wrapper/android/gradle.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
diff --git a/mobile-wrapper/android/gradle/wrapper/gradle-wrapper.jar b/mobile-wrapper/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index a4b76b9..0000000
Binary files a/mobile-wrapper/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/mobile-wrapper/android/gradle/wrapper/gradle-wrapper.properties b/mobile-wrapper/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index c1d5e01..0000000
--- a/mobile-wrapper/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
-networkTimeout=10000
-validateDistributionUrl=true
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/mobile-wrapper/android/gradlew b/mobile-wrapper/android/gradlew
deleted file mode 100755
index f5feea6..0000000
--- a/mobile-wrapper/android/gradlew
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- if ! command -v java >/dev/null 2>&1
- then
- die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
-# and any embedded shellness will be escaped.
-# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
-# treated as '${Hostname}' itself on the command line.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/mobile-wrapper/android/gradlew.bat b/mobile-wrapper/android/gradlew.bat
deleted file mode 100644
index 9b42019..0000000
--- a/mobile-wrapper/android/gradlew.bat
+++ /dev/null
@@ -1,94 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-@rem SPDX-License-Identifier: Apache-2.0
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/mobile-wrapper/android/settings.gradle b/mobile-wrapper/android/settings.gradle
deleted file mode 100644
index 3b4431d..0000000
--- a/mobile-wrapper/android/settings.gradle
+++ /dev/null
@@ -1,5 +0,0 @@
-include ':app'
-include ':capacitor-cordova-android-plugins'
-project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
-
-apply from: 'capacitor.settings.gradle'
\ No newline at end of file
diff --git a/mobile-wrapper/android/variables.gradle b/mobile-wrapper/android/variables.gradle
deleted file mode 100644
index 2c8e408..0000000
--- a/mobile-wrapper/android/variables.gradle
+++ /dev/null
@@ -1,16 +0,0 @@
-ext {
- minSdkVersion = 23
- compileSdkVersion = 35
- targetSdkVersion = 35
- androidxActivityVersion = '1.9.2'
- androidxAppCompatVersion = '1.7.0'
- androidxCoordinatorLayoutVersion = '1.2.0'
- androidxCoreVersion = '1.15.0'
- androidxFragmentVersion = '1.8.4'
- coreSplashScreenVersion = '1.0.1'
- androidxWebkitVersion = '1.12.1'
- junitVersion = '4.13.2'
- androidxJunitVersion = '1.2.1'
- androidxEspressoCoreVersion = '3.6.1'
- cordovaAndroidVersion = '10.1.1'
-}
\ No newline at end of file
diff --git a/mobile-wrapper/capacitor.config.ts b/mobile-wrapper/capacitor.config.ts
deleted file mode 100644
index dec4924..0000000
--- a/mobile-wrapper/capacitor.config.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import type { CapacitorConfig } from "@capacitor/cli";
-
-const config: CapacitorConfig = {
- appId: "dev.srizan.helium.mobile",
- appName: "Helium Mobile",
- webDir: "dist",
- server: {
- androidScheme: "https",
- },
-};
-
-export default config;
diff --git a/mobile-wrapper/index.html b/mobile-wrapper/index.html
deleted file mode 100644
index 411564c..0000000
--- a/mobile-wrapper/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
- Helium Mobile
-
-
-
-
-
-
diff --git a/mobile-wrapper/package.json b/mobile-wrapper/package.json
deleted file mode 100644
index 8f94efd..0000000
--- a/mobile-wrapper/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "helium-mobile-wrapper",
- "version": "0.1.0",
- "private": true,
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview",
- "cap:sync": "cap sync",
- "cap:android:add": "cap add android",
- "cap:android:open": "cap open android",
- "cap:android:run": "cap run android"
- },
- "dependencies": {
- "@capacitor/app": "^7.1.2",
- "@capacitor/android": "^7.4.3",
- "@capacitor/browser": "^7.0.2",
- "@capacitor/core": "^7.4.3",
- "react": "19.2.3",
- "react-dom": "19.2.3"
- },
- "devDependencies": {
- "@capacitor/cli": "^7.4.3",
- "@types/react": "^19.2.2",
- "@types/react-dom": "^19.2.2",
- "@vitejs/plugin-react": "^5.1.0",
- "typescript": "^5.9.3",
- "vite": "^7.2.2"
- }
-}
diff --git a/mobile-wrapper/src/App.tsx b/mobile-wrapper/src/App.tsx
deleted file mode 100644
index bf0541a..0000000
--- a/mobile-wrapper/src/App.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Browser } from "@capacitor/browser";
-
-const HELIUM_URL = "https://helium.srizan.dev";
-const HELIUM_CHROME_INTENT_URL =
- "intent://helium.srizan.dev#Intent;scheme=https;package=com.android.chrome;end";
-
-function isAndroid(): boolean {
- return /android/i.test(navigator.userAgent);
-}
-
-async function openHelium(): Promise {
- if (isAndroid()) {
- window.location.href = HELIUM_CHROME_INTENT_URL;
- return;
- }
-
- await Browser.open({
- url: HELIUM_URL,
- presentationStyle: "fullscreen",
- });
-}
-
-async function openHeliumFallback(): Promise {
- await Browser.open({
- url: HELIUM_URL,
- presentationStyle: "fullscreen",
- });
-}
-
-function App() {
- return (
-
-
- Helium Android Wrapper
- Open Helium with screen share support
-
- This wrapper launches Helium in a Chrome Custom Tab. On most Android
- devices this gives the best chance for WebRTC screen sharing,
- including audio when Android and Chrome allow it.
-
-
-
- Open Helium in Chrome
-
-
-
- Open with default browser
-
-
-
- If Chrome is not installed, use the fallback button. For audio capture,
- update Chrome and Android, then enable audio in the system
- screen-share picker.
-
-
-
- );
-}
-
-export default App;
diff --git a/mobile-wrapper/src/main.tsx b/mobile-wrapper/src/main.tsx
deleted file mode 100644
index be363fd..0000000
--- a/mobile-wrapper/src/main.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { StrictMode } from "react";
-import { createRoot } from "react-dom/client";
-import App from "./App";
-import "./styles.css";
-
-const rootElement = document.getElementById("root");
-
-if (!rootElement) {
- throw new Error("Root element not found");
-}
-
-createRoot(rootElement).render(
-
-
- ,
-);
diff --git a/mobile-wrapper/src/styles.css b/mobile-wrapper/src/styles.css
deleted file mode 100644
index 4a3fcd7..0000000
--- a/mobile-wrapper/src/styles.css
+++ /dev/null
@@ -1,91 +0,0 @@
-:root {
- font-family: "Manrope", "Segoe UI", sans-serif;
- color: #1a2027;
- background: radial-gradient(circle at 20% 20%, #e5f5ff 0%, #f4f8ff 45%, #f6f6f2 100%);
-}
-
-* {
- box-sizing: border-box;
-}
-
-html,
-body,
-#root {
- margin: 0;
- min-height: 100%;
-}
-
-.page {
- min-height: 100vh;
- display: grid;
- place-items: center;
- padding: 24px;
-}
-
-.card {
- width: min(560px, 100%);
- border-radius: 20px;
- background: rgba(255, 255, 255, 0.8);
- border: 1px solid #d7e3f6;
- box-shadow: 0 24px 80px -48px rgba(24, 78, 148, 0.45);
- padding: 24px;
- display: grid;
- gap: 14px;
-}
-
-.eyebrow {
- margin: 0;
- font-size: 0.8rem;
- text-transform: uppercase;
- letter-spacing: 0.06em;
- color: #4e7ab3;
- font-weight: 700;
-}
-
-h1 {
- margin: 0;
- font-size: clamp(1.3rem, 4vw, 1.8rem);
- line-height: 1.2;
-}
-
-.lead,
-.note {
- margin: 0;
- line-height: 1.5;
-}
-
-.lead {
- color: #2b3a4d;
-}
-
-.note {
- font-size: 0.9rem;
- color: #4f5f73;
-}
-
-.cta {
- border: 0;
- border-radius: 12px;
- padding: 12px 16px;
- width: fit-content;
- font-size: 1rem;
- font-weight: 700;
- color: #fff;
- background: linear-gradient(135deg, #2563eb, #0f67d2);
- box-shadow: 0 10px 24px -12px rgba(15, 103, 210, 0.7);
-}
-
-.cta:active {
- transform: translateY(1px);
-}
-
-.secondary {
- border: 1px solid #c8d9ee;
- border-radius: 12px;
- padding: 11px 16px;
- width: fit-content;
- font-size: 0.95rem;
- font-weight: 700;
- color: #234669;
- background: #f7fbff;
-}
diff --git a/mobile-wrapper/tsconfig.json b/mobile-wrapper/tsconfig.json
deleted file mode 100644
index e967365..0000000
--- a/mobile-wrapper/tsconfig.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2022",
- "useDefineForClassFields": true,
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
- "module": "ESNext",
- "skipLibCheck": true,
- "moduleResolution": "Bundler",
- "allowImportingTsExtensions": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "jsx": "react-jsx",
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["src", "capacitor.config.ts", "vite.config.ts"]
-}
diff --git a/mobile-wrapper/vite.config.ts b/mobile-wrapper/vite.config.ts
deleted file mode 100644
index 2fd0293..0000000
--- a/mobile-wrapper/vite.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineConfig } from "vite";
-import react from "@vitejs/plugin-react";
-
-export default defineConfig({
- base: "./",
- plugins: [react()],
-});
diff --git a/native-app/app.json b/native-app/app.json
index 5be58dd..e6408b1 100644
--- a/native-app/app.json
+++ b/native-app/app.json
@@ -4,13 +4,31 @@
"slug": "helium-native",
"scheme": "heliumnative",
"version": "0.1.0",
+ "icon": "./assets/images/icon.png",
"orientation": "portrait",
- "userInterfaceStyle": "light",
+ "userInterfaceStyle": "automatic",
"android": {
- "package": "dev.srizan.helium.viewer"
+ "package": "dev.srizan.helium.viewer",
+ "adaptiveIcon": {
+ "foregroundImage": "./assets/images/adaptive-icon.png",
+ "backgroundColor": "#c026d3",
+ "monochromeImage": "./assets/images/adaptive-icon-monochrome.png"
+ }
},
"plugins": [
- "expo-secure-store"
+ "expo-secure-store",
+ [
+ "expo-splash-screen",
+ {
+ "backgroundColor": "#fdfbff",
+ "image": "./assets/images/splash-icon.png",
+ "imageWidth": 220,
+ "dark": {
+ "backgroundColor": "#1e1b2e",
+ "image": "./assets/images/splash-icon-dark.png"
+ }
+ }
+ ]
],
"ios": {
"bundleIdentifier": "dev.srizan.helium.viewer"
diff --git a/native-app/assets/images/adaptive-icon-monochrome.png b/native-app/assets/images/adaptive-icon-monochrome.png
new file mode 100644
index 0000000..beb3b17
Binary files /dev/null and b/native-app/assets/images/adaptive-icon-monochrome.png differ
diff --git a/native-app/assets/images/adaptive-icon.png b/native-app/assets/images/adaptive-icon.png
new file mode 100644
index 0000000..beb3b17
Binary files /dev/null and b/native-app/assets/images/adaptive-icon.png differ
diff --git a/native-app/assets/images/icon.png b/native-app/assets/images/icon.png
new file mode 100644
index 0000000..8860617
Binary files /dev/null and b/native-app/assets/images/icon.png differ
diff --git a/native-app/assets/images/logo-brand.svg b/native-app/assets/images/logo-brand.svg
new file mode 100644
index 0000000..09fcb77
--- /dev/null
+++ b/native-app/assets/images/logo-brand.svg
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/native-app/assets/images/logo-white.svg b/native-app/assets/images/logo-white.svg
new file mode 100644
index 0000000..d0b06e5
--- /dev/null
+++ b/native-app/assets/images/logo-white.svg
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/native-app/assets/images/splash-icon-dark.png b/native-app/assets/images/splash-icon-dark.png
new file mode 100644
index 0000000..0ec9652
Binary files /dev/null and b/native-app/assets/images/splash-icon-dark.png differ
diff --git a/native-app/assets/images/splash-icon.png b/native-app/assets/images/splash-icon.png
new file mode 100644
index 0000000..c143d57
Binary files /dev/null and b/native-app/assets/images/splash-icon.png differ
diff --git a/native-app/package.json b/native-app/package.json
index a94a7d0..1132891 100644
--- a/native-app/package.json
+++ b/native-app/package.json
@@ -14,6 +14,7 @@
"@clerk/clerk-expo": "^2.19.22",
"expo": "^54.0.0",
"expo-secure-store": "^15.0.0",
+ "expo-splash-screen": "~31.0.13",
"react": "19.2.0",
"react-native": "0.82.0",
"react-native-url-polyfill": "^2.0.0",
diff --git a/native-app/src/components/ui/Button.tsx b/native-app/src/components/ui/Button.tsx
new file mode 100644
index 0000000..6f8f93c
--- /dev/null
+++ b/native-app/src/components/ui/Button.tsx
@@ -0,0 +1,138 @@
+import React from "react";
+import {
+ ActivityIndicator,
+ Pressable,
+ PressableProps,
+ StyleSheet,
+ Text,
+ View,
+} from "react-native";
+
+import { useAppTheme } from "../../lib/theme";
+
+interface ButtonProps extends PressableProps {
+ variant?: "default" | "secondary" | "destructive" | "outline" | "ghost";
+ size?: "default" | "sm" | "lg" | "icon";
+ label?: string;
+ loading?: boolean;
+ children?: React.ReactNode;
+}
+
+export function Button({
+ variant = "default",
+ size = "default",
+ label,
+ loading = false,
+ children,
+ style,
+ disabled,
+ ...props
+}: ButtonProps) {
+ const theme = useAppTheme();
+
+ const getBackgroundColor = (pressed: boolean) => {
+ if (disabled) return theme.muted;
+ switch (variant) {
+ case "default":
+ return theme.primary;
+ case "destructive":
+ return theme.destructive;
+ case "secondary":
+ return theme.secondary;
+ case "outline":
+ case "ghost":
+ return pressed ? theme.accent : "transparent";
+ default:
+ return theme.primary;
+ }
+ };
+
+ const getBorderColor = () => {
+ if (variant === "outline") return theme.input;
+ return "transparent";
+ };
+
+ const getTextColor = () => {
+ if (disabled) return theme.mutedForeground;
+ switch (variant) {
+ case "default":
+ return theme.primaryForeground;
+ case "destructive":
+ return theme.destructiveForeground;
+ case "secondary":
+ return theme.secondaryForeground;
+ case "outline":
+ case "ghost":
+ return theme.foreground;
+ default:
+ return theme.primaryForeground;
+ }
+ };
+
+ const getPadding = () => {
+ switch (size) {
+ case "sm":
+ return { paddingVertical: 8, paddingHorizontal: 12 };
+ case "lg":
+ return { paddingVertical: 12, paddingHorizontal: 32 };
+ case "icon":
+ return { padding: 10, width: 40, height: 40, justifyContent: "center", alignItems: "center" } as const;
+ default:
+ return { paddingVertical: 10, paddingHorizontal: 16 };
+ }
+ };
+
+ return (
+ [
+ styles.base,
+ {
+ backgroundColor: getBackgroundColor(pressed),
+ borderColor: getBorderColor(),
+ borderWidth: variant === "outline" ? 1 : 0,
+ opacity: pressed && variant !== "outline" && variant !== "ghost" ? 0.9 : 1,
+ },
+ getPadding(),
+ style as any,
+ ]}
+ {...props}
+ >
+ {loading ? (
+
+ ) : (
+
+ {children ? (
+ children
+ ) : (
+
+ {label}
+
+ )}
+
+ )}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ base: {
+ flexDirection: "row",
+ alignItems: "center",
+ justifyContent: "center",
+ borderRadius: 8, // radius-md
+ },
+ contentContainer: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 8,
+ },
+ text: {
+ fontWeight: "600",
+ },
+});
diff --git a/native-app/src/components/ui/Card.tsx b/native-app/src/components/ui/Card.tsx
new file mode 100644
index 0000000..8ec80ae
--- /dev/null
+++ b/native-app/src/components/ui/Card.tsx
@@ -0,0 +1,87 @@
+import React from "react";
+import { StyleSheet, Text, TextProps, View, ViewProps } from "react-native";
+
+import { useAppTheme } from "../../lib/theme";
+
+export function Card({ style, ...props }: ViewProps) {
+ const theme = useAppTheme();
+ return (
+
+ );
+}
+
+export function CardHeader({ style, ...props }: ViewProps) {
+ return ;
+}
+
+export function CardTitle({ style, ...props }: TextProps) {
+ const theme = useAppTheme();
+ return (
+
+ );
+}
+
+export function CardDescription({ style, ...props }: TextProps) {
+ const theme = useAppTheme();
+ return (
+
+ );
+}
+
+export function CardContent({ style, ...props }: ViewProps) {
+ return ;
+}
+
+export function CardFooter({ style, ...props }: ViewProps) {
+ return ;
+}
+
+const styles = StyleSheet.create({
+ card: {
+ borderRadius: 12, // radius-xl
+ borderWidth: 1,
+ overflow: "hidden",
+ },
+ header: {
+ padding: 18,
+ gap: 4,
+ },
+ title: {
+ fontSize: 20,
+ fontWeight: "700",
+ letterSpacing: -0.5,
+ },
+ description: {
+ fontSize: 14,
+ },
+ content: {
+ paddingHorizontal: 18,
+ paddingBottom: 18,
+ },
+ footer: {
+ padding: 18,
+ paddingTop: 0,
+ flexDirection: "row",
+ alignItems: "center",
+ },
+});
diff --git a/native-app/src/components/ui/Input.tsx b/native-app/src/components/ui/Input.tsx
new file mode 100644
index 0000000..83345f7
--- /dev/null
+++ b/native-app/src/components/ui/Input.tsx
@@ -0,0 +1,55 @@
+import React from "react";
+import { StyleSheet, TextInput, TextInputProps, View, Text } from "react-native";
+
+import { useAppTheme } from "../../lib/theme";
+
+interface InputProps extends TextInputProps {
+ label?: string;
+ error?: string;
+}
+
+export function Input({ label, error, style, ...props }: InputProps) {
+ const theme = useAppTheme();
+
+ return (
+
+ {label && {label} }
+
+ {error && {error} }
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ gap: 8,
+ marginBottom: 16,
+ },
+ label: {
+ fontSize: 14,
+ fontWeight: "500",
+ },
+ input: {
+ height: 40, // h-10
+ borderWidth: 1,
+ borderRadius: 8, // radius-md
+ paddingHorizontal: 12,
+ fontSize: 14,
+ },
+ error: {
+ fontSize: 12,
+ marginTop: 4,
+ },
+});
diff --git a/native-app/src/components/ui/index.ts b/native-app/src/components/ui/index.ts
new file mode 100644
index 0000000..000b8ef
--- /dev/null
+++ b/native-app/src/components/ui/index.ts
@@ -0,0 +1,3 @@
+export * from "./Button";
+export * from "./Card";
+export * from "./Input";
diff --git a/native-app/src/i18n/messages.ts b/native-app/src/i18n/messages.ts
index 6d61f15..fff48cd 100644
--- a/native-app/src/i18n/messages.ts
+++ b/native-app/src/i18n/messages.ts
@@ -93,43 +93,43 @@ export const messages: Record = {
},
es: {
missingClerkKey: "Falta EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY",
- appTitle: "Helium Nativo",
- signInSubtitle: "Inicia sesion con Clerk",
+ appTitle: "Helium (Android)",
+ signInSubtitle: "Inicia sesión con Clerk",
email: "Correo",
- password: "Contrasena",
- signIn: "Iniciar sesion",
- signingIn: "Iniciando sesion...",
- signedIn: "Sesion iniciada",
- signInFailed: "Error al iniciar sesion",
+ password: "Contraseña",
+ signIn: "Iniciar sesión",
+ signingIn: "Iniciando sesión...",
+ signedIn: "Sesión iniciada",
+ signInFailed: "Error al iniciar sesión",
needsExtraStep: "Falta un paso adicional: {status}",
- loadingPresets: "Cargando presets",
+ loadingPresets: "Cargando ajustes predefinidos",
couldNotReadToken: "No se pudo leer el token",
- noPresetsFound: "No se encontraron presets",
+ noPresetsFound: "No se encontraron ajustes predefinidos",
loadedIceServers: "Se cargaron {count} entradas ICE",
- failedToLoadPresets: "Error al cargar presets: {message}",
+ failedToLoadPresets: "Error al cargar ajustes predefinidos: {message}",
failedToParsePreset: "Error al parsear ICE del preset",
streamerTitle: "Helium Emisor",
streamerSubtitle: "Comparte la pantalla de Android con Helium",
preset: "Preset",
- session: "Sesion",
+ session: "Sesión",
status: "Estado",
viewers: "Espectadores",
defaultLabel: "predeterminado",
startShare: "Iniciar pantalla",
stop: "Detener",
- signOut: "Cerrar sesion",
+ signOut: "Cerrar sesión",
previewActive: "Captura activa. Vista previa desactivada para menor latencia.",
previewIdle: "Inicia la captura para transmitir esta pantalla",
statusIdle: "En espera",
statusStopped: "Detenido",
- statusNoPreset: "No hay preset seleccionado",
+ statusNoPreset: "No hay ajuste predefinido seleccionado",
statusRequestingCapture: "Solicitando captura de pantalla",
statusNoVideoTrack: "La captura inicio sin pista de video",
statusCapturing: "Capturando {video} video / {audio} audio",
- statusConnectingSignaling: "Conectando senalizacion",
+ statusConnectingSignaling: "Conectando señalización",
statusCreatingRoom: "Creando sala",
- statusRoomCreated: "Codigo de sala: {roomId}",
- statusViewerJoined: "Se unio un espectador",
+ statusRoomCreated: "Código de sala: {roomId}",
+ statusViewerJoined: "Se unió un espectador",
statusPeerState: "Estado del peer: {state}",
statusWebsocketError: "Error de WebSocket",
statusWebsocketClosed: "WebSocket cerrado",
diff --git a/native-app/src/lib/theme.ts b/native-app/src/lib/theme.ts
index 2c273c1..43d6203 100644
--- a/native-app/src/lib/theme.ts
+++ b/native-app/src/lib/theme.ts
@@ -14,41 +14,62 @@ export interface AppTheme {
secondaryForeground: string;
accent: string;
destructive: string;
+ destructiveForeground: string;
}
const lightTheme: AppTheme = {
- background: "#f0eff5",
- foreground: "#4f4c64",
- card: "#eceaf2",
- border: "#e1dee9",
- input: "#dfdce8",
- muted: "#e7e5ee",
- mutedForeground: "#66637d",
- primary: "#a43ad7",
- primaryForeground: "#ffffff",
- secondary: "#be9bcd",
- secondaryForeground: "#3f3452",
- accent: "#d0cee0",
- destructive: "#b4435a",
+ background: "#FAFAFA", // slightly off-white
+ foreground: "#09090b", // zinc-950
+ card: "#FFFFFF",
+ border: "#E4E4E7", // zinc-200
+ input: "#E4E4E7",
+ muted: "#F4F4F5", // zinc-100
+ mutedForeground: "#71717A", // zinc-500
+ primary: "#c026d3", // fuchsia-600
+ primaryForeground: "#FFFFFF",
+ secondary: "#F4F4F5", // zinc-100
+ secondaryForeground: "#18181B", // zinc-900
+ accent: "#F4F4F5",
+ destructive: "#EF4444", // red-500
+ destructiveForeground: "#FFFFFF",
};
const darkTheme: AppTheme = {
- background: "#30273b",
- foreground: "#e4deec",
- card: "#2a2234",
- border: "#494055",
- input: "#534a5f",
- muted: "#3b3347",
- mutedForeground: "#bbb3c7",
- primary: "#d28ee8",
- primaryForeground: "#48245f",
- secondary: "#6d4a82",
- secondaryForeground: "#eadcf1",
- accent: "#5a5268",
- destructive: "#d46f7a",
+ background: "#18181b", // zinc-950 (or slight purple tint per brand: #1a1625)
+ foreground: "#FAFAFA", // zinc-50
+ card: "#18181b", // Matches background often in shadcn default, or slightly lighter
+ border: "#27272A", // zinc-800
+ input: "#27272A",
+ muted: "#27272A",
+ mutedForeground: "#A1A1AA", // zinc-400
+ primary: "#d946ef", // fuchsia-500
+ primaryForeground: "#1a1625",
+ secondary: "#27272A",
+ secondaryForeground: "#FAFAFA",
+ accent: "#27272A",
+ destructive: "#7F1D1D", // red-900
+ destructiveForeground: "#FFFFFF",
+};
+
+// Override with specific brand colors from oklch analysis if needed
+const brandLightTheme = {
+ ...lightTheme,
+ background: "#fdfbff", // slightly purple white
+ primary: "#c026d3",
+ secondary: "#f5f3ff", // light violet
+};
+
+const brandDarkTheme = {
+ ...darkTheme,
+ background: "#1e1b2e", // Deep purple/slate
+ card: "#1e1b2e",
+ border: "#2e2a45",
+ input: "#2e2a45",
+ muted: "#2e2a45",
+ primary: "#e879f9", // bright fuchsia
};
export function useAppTheme(): AppTheme {
const colorScheme = useColorScheme();
- return colorScheme === "dark" ? darkTheme : lightTheme;
+ return colorScheme === "dark" ? brandDarkTheme : brandLightTheme;
}
diff --git a/native-app/src/screens/SignInScreen.tsx b/native-app/src/screens/SignInScreen.tsx
index 861a9f1..6736f94 100644
--- a/native-app/src/screens/SignInScreen.tsx
+++ b/native-app/src/screens/SignInScreen.tsx
@@ -1,16 +1,18 @@
import { useState } from "react";
import { useSignIn } from "@clerk/clerk-expo";
import {
- ActivityIndicator,
- Pressable,
+ KeyboardAvoidingView,
+ Platform,
StyleSheet,
Text,
- TextInput,
View,
} from "react-native";
import { useAppTheme } from "../lib/theme";
import { useI18n } from "../i18n/I18nProvider";
+import { Button } from "../components/ui/Button";
+import { Input } from "../components/ui/Input";
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../components/ui/Card";
export function SignInScreen() {
const theme = useAppTheme();
@@ -48,42 +50,52 @@ export function SignInScreen() {
return (
- {t("appTitle")}
- {t("signInSubtitle")}
-
-
-
-
- {
- void onSignIn();
- }}
- style={styles.button}
+
- {isLoaded ? (
- {t("signIn")}
- ) : (
-
- )}
-
+
+
+ {t("appTitle")}
+
+ {t("signInSubtitle")}
+
+
+
+
+
- {status}
+
+
+ {
+ void onSignIn();
+ }}
+ size="lg"
+ />
+
+ {status ? (
+ {status}
+ ) : null}
+
+
+
);
}
@@ -91,48 +103,33 @@ export function SignInScreen() {
function createStyles(theme: ReturnType) {
return StyleSheet.create({
container: {
- alignItems: "stretch",
- backgroundColor: theme.background,
flex: 1,
- gap: 12,
+ backgroundColor: theme.background,
justifyContent: "center",
padding: 24,
},
- title: {
- color: theme.foreground,
- fontSize: 28,
- fontWeight: "700",
- textAlign: "center",
+ keyboardView: {
+ justifyContent: "center",
+ flex: 1,
+ maxWidth: 500,
+ width: "100%",
+ alignSelf: "center",
},
- subtitle: {
- color: theme.mutedForeground,
- marginBottom: 12,
- textAlign: "center",
- },
- input: {
- backgroundColor: theme.input,
- borderColor: theme.border,
- borderRadius: 12,
- borderWidth: 1,
- color: theme.foreground,
- paddingHorizontal: 14,
- paddingVertical: 12,
- },
- button: {
- alignItems: "center",
- backgroundColor: theme.primary,
- borderRadius: 12,
- paddingVertical: 12,
- },
- buttonText: {
- color: theme.primaryForeground,
- fontSize: 16,
- fontWeight: "700",
+ card: {
+ shadowColor: "#000",
+ shadowOffset: {
+ width: 0,
+ height: 2,
+ },
+ shadowOpacity: 0.05,
+ shadowRadius: 10,
+ elevation: 2,
},
status: {
color: theme.mutedForeground,
fontSize: 13,
textAlign: "center",
+ marginTop: 16,
},
});
}
diff --git a/native-app/src/screens/StreamerScreen.tsx b/native-app/src/screens/StreamerScreen.tsx
index dd65ce7..70e44d7 100644
--- a/native-app/src/screens/StreamerScreen.tsx
+++ b/native-app/src/screens/StreamerScreen.tsx
@@ -15,6 +15,8 @@ import type { MessageKey } from "../i18n/messages";
import { useAppTheme } from "../lib/theme";
import { getPresets } from "../lib/presets";
import type { NativeIceServer, PresetUser } from "../types/presets";
+import { Button } from "../components/ui/Button";
+import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "../components/ui/Card";
export function StreamerScreen() {
const { getToken, signOut } = useAuth();
@@ -104,60 +106,63 @@ export function StreamerScreen() {
return (
- {t("streamerTitle")}
- {t("streamerSubtitle")}
+
+ {t("streamerTitle")}
+ {t("streamerSubtitle")}
+
-
- {t("preset")}
- {t(presetStatusKey, presetStatusParams)}
-
-
+
+
+ {t("preset")}
+ {t(presetStatusKey, presetStatusParams)}
+
+
{presets.map((preset) => {
const selected = presetId === preset.presetId;
return (
- {
- setPresetId(preset.presetId);
- }}
- style={[styles.presetItem, selected ? styles.presetItemSelected : null]}
+ onPress={() => setPresetId(preset.presetId)}
+ variant={selected ? "secondary" : "ghost"}
+ style={{ justifyContent: "flex-start" }}
>
-
- {preset.preset.name}
- {preset.isDefault ? ` (${t("defaultLabel")})` : ""}
+
+ {preset.preset.name}
+ {preset.isDefault ? ` (${t("defaultLabel")})` : ""}
-
+
);
})}
-
-
+
+
-
- {t("session")}
- {t("status")}: {t(statusKey, statusParams)}
- {t("viewers")}: {viewerCount}
- {roomCode || "------"}
+
+
+ {t("session")}
+
+ {t("status")}: {t(statusKey, statusParams)} • {t("viewers")}: {viewerCount}
+
+
+
+
+ {roomCode || "------"}
+
-
- {
- void startSharing();
- }}
- style={styles.primaryButton}
- >
- {t("startShare")}
-
-
-
- {t("stop")}
-
-
-
+
+ void startSharing()}
+ label={t("startShare")}
+ variant="default"
+ style={{ flex: 1 }}
+ />
+
+
+
+
{isSharing ? (
@@ -169,14 +174,12 @@ export function StreamerScreen() {
)}
- {
- void signOut();
- }}
- style={styles.signOutButton}
- >
- {t("signOut")}
-
+ void signOut()}
+ label={t("signOut")}
+ variant="destructive"
+ style={{ marginTop: 8 }}
+ />
);
@@ -189,116 +192,58 @@ function createStyles(theme: ReturnType) {
flex: 1,
},
container: {
- gap: 12,
+ gap: 16,
padding: 16,
paddingBottom: 28,
},
+ header: {
+ marginBottom: 8,
+ },
title: {
color: theme.foreground,
- fontSize: 24,
- fontWeight: "700",
+ fontSize: 28,
+ fontWeight: "800",
+ letterSpacing: -0.5,
},
subtitle: {
color: theme.mutedForeground,
- marginTop: -6,
- },
- card: {
- backgroundColor: theme.card,
- borderColor: theme.border,
- borderRadius: 14,
- borderWidth: 1,
- gap: 8,
- padding: 12,
- },
- cardTitle: {
- color: theme.foreground,
- fontSize: 17,
- fontWeight: "700",
- },
- small: {
- color: theme.mutedForeground,
- fontSize: 13,
+ fontSize: 16,
},
presetList: {
- gap: 8,
+ gap: 4,
},
- presetItem: {
- backgroundColor: theme.input,
- borderColor: theme.border,
- borderRadius: 10,
- borderWidth: 1,
- paddingHorizontal: 10,
- paddingVertical: 10,
- },
- presetItemSelected: {
+ roomCodeContainer: {
+ alignItems: "center",
+ paddingVertical: 12,
backgroundColor: theme.secondary,
- borderColor: theme.primary,
- },
- presetItemText: {
- color: theme.foreground,
- fontWeight: "600",
- },
- presetItemTextSelected: {
- color: theme.secondaryForeground,
+ borderRadius: 8,
+ marginBottom: 4,
},
roomCode: {
color: theme.primary,
- fontSize: 34,
+ fontSize: 32,
fontWeight: "800",
- letterSpacing: 2,
- marginTop: 6,
+ letterSpacing: 4,
+ fontVariant: ["tabular-nums"],
},
actions: {
flexDirection: "row",
gap: 8,
- marginTop: 6,
- },
- primaryButton: {
- alignItems: "center",
- backgroundColor: theme.primary,
- borderRadius: 10,
- flex: 1,
- paddingVertical: 11,
- },
- primaryButtonText: {
- color: theme.primaryForeground,
- fontWeight: "700",
- },
- secondaryButton: {
- alignItems: "center",
- backgroundColor: theme.accent,
- borderRadius: 10,
- justifyContent: "center",
- paddingHorizontal: 16,
- paddingVertical: 11,
- },
- secondaryButtonText: {
- color: theme.foreground,
- fontWeight: "700",
},
preview: {
alignItems: "center",
backgroundColor: "#000000",
- borderRadius: 14,
- height: 220,
+ borderRadius: 12,
+ height: 200,
justifyContent: "center",
overflow: "hidden",
+ borderWidth: 1,
+ borderColor: theme.border,
},
previewPlaceholder: {
color: theme.mutedForeground,
paddingHorizontal: 16,
textAlign: "center",
},
- signOutButton: {
- alignItems: "center",
- borderColor: theme.destructive,
- borderRadius: 10,
- borderWidth: 1,
- paddingVertical: 10,
- },
- signOutText: {
- color: theme.destructive,
- fontWeight: "700",
- },
});
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 282b23e..342075b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -143,46 +143,6 @@ importers:
specifier: ^6.1.0
version: 6.1.0
- mobile-wrapper:
- dependencies:
- '@capacitor/android':
- specifier: ^7.4.3
- version: 7.5.0(@capacitor/core@7.5.0)
- '@capacitor/app':
- specifier: ^7.1.2
- version: 7.1.2(@capacitor/core@7.5.0)
- '@capacitor/browser':
- specifier: ^7.0.2
- version: 7.0.4(@capacitor/core@7.5.0)
- '@capacitor/core':
- specifier: ^7.4.3
- version: 7.5.0
- react:
- specifier: 19.2.3
- version: 19.2.3
- react-dom:
- specifier: 19.2.3
- version: 19.2.3(react@19.2.3)
- devDependencies:
- '@capacitor/cli':
- specifier: ^7.4.3
- version: 7.5.0
- '@types/react':
- specifier: ^19.2.2
- version: 19.2.14
- '@types/react-dom':
- specifier: ^19.2.2
- version: 19.2.3(@types/react@19.2.14)
- '@vitejs/plugin-react':
- specifier: ^5.1.0
- version: 5.1.4(vite@7.3.1(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))
- typescript:
- specifier: ^5.9.3
- version: 5.9.3
- vite:
- specifier: ^7.2.2
- version: 7.3.1(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)
-
native-app:
dependencies:
'@clerk/clerk-expo':
@@ -194,6 +154,9 @@ importers:
expo-secure-store:
specifier: ^15.0.0
version: 15.0.8(expo@54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10))
+ expo-splash-screen:
+ specifier: ~31.0.13
+ version: 31.0.13(expo@54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10))
react:
specifier: 19.2.0
version: 19.2.0
@@ -818,29 +781,6 @@ packages:
commander:
optional: true
- '@capacitor/android@7.5.0':
- resolution: {integrity: sha512-VjESuJYzQQH4vxvrOQV0yXuDv3Gx1bfb6YpAkoGfUHe0kiw0LY5nh5Kn7I5bI9hlht9SJ8YmSsCgFeMNyzKoWQ==}
- peerDependencies:
- '@capacitor/core': ^7.5.0
-
- '@capacitor/app@7.1.2':
- resolution: {integrity: sha512-d4I/oF/PRu4megL7/IGKYfe5j7yzSON1FRFgq6kH+m5kH6g7V+wyjHRLauCzGNjdRx4S+nWOumINds0qcRBtKg==}
- peerDependencies:
- '@capacitor/core': '>=7.0.0'
-
- '@capacitor/browser@7.0.4':
- resolution: {integrity: sha512-XjooNDHEalQoMAb5/Ip7pGcPCIPHEaBv/s/B6K83qVZE66MXC/6enhw18TNaMNtL7U8bGOe6tEG1FFbQVf3PHw==}
- peerDependencies:
- '@capacitor/core': '>=7.0.0'
-
- '@capacitor/cli@7.5.0':
- resolution: {integrity: sha512-mlohsvLZjWrO5eAVTn1+dABNQwQawcphVp6NQVJZ3I4x2BAoNmJj53QflX7PYGUipL9gF9EM9Yiku3m1McxFZg==}
- engines: {node: '>=20.0.0'}
- hasBin: true
-
- '@capacitor/core@7.5.0':
- resolution: {integrity: sha512-4Y4trISe2Bp3lwsoGFoQIvgX4hiZO8S1Slmbz6oFaMxAuEc4noipQGCQx974PF4glwVVe/8+H3P9iEmCXtrUgA==}
-
'@clack/core@1.0.0-alpha.7':
resolution: {integrity: sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ==}
@@ -1818,38 +1758,6 @@ packages:
vue-i18n:
optional: true
- '@ionic/cli-framework-output@2.2.8':
- resolution: {integrity: sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-array@2.1.6':
- resolution: {integrity: sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-fs@3.1.7':
- resolution: {integrity: sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-object@2.1.6':
- resolution: {integrity: sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-process@2.1.12':
- resolution: {integrity: sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-stream@3.1.7':
- resolution: {integrity: sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-subprocess@3.0.1':
- resolution: {integrity: sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==}
- engines: {node: '>=16.0.0'}
-
- '@ionic/utils-terminal@2.3.5':
- resolution: {integrity: sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==}
- engines: {node: '>=16.0.0'}
-
'@ioredis/commands@1.4.0':
resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==}
@@ -2828,9 +2736,6 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.59':
resolution: {integrity: sha512-aoh6LAJRyhtazs98ydgpNOYstxUlsOV1KJXcpf/0c0vFcUA8uyd/hwKRhqE/AAPNqAho9RliGsvitCoOzREoVA==}
- '@rolldown/pluginutils@1.0.0-rc.3':
- resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
-
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
engines: {node: '>=14.0.0'}
@@ -3369,9 +3274,6 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- '@types/fs-extra@8.1.5':
- resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==}
-
'@types/fs-extra@9.0.13':
resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
@@ -3427,11 +3329,6 @@ packages:
'@types/plist@3.0.5':
resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==}
- '@types/react-dom@19.2.3':
- resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
- peerDependencies:
- '@types/react': ^19.2.0
-
'@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
@@ -3441,9 +3338,6 @@ packages:
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
- '@types/slice-ansi@4.0.0':
- resolution: {integrity: sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==}
-
'@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
@@ -3530,12 +3424,6 @@ packages:
engines: {node: '>=18'}
hasBin: true
- '@vitejs/plugin-react@5.1.4':
- resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
-
'@vitejs/plugin-vue-jsx@5.1.3':
resolution: {integrity: sha512-I6Zr8cYVr5WHMW5gNOP09DNqW9rgO8RX73Wa6Czgq/0ndpTfJM4vfDChfOT1+3KtdrNqilNBtNlFwVeB02ZzGw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -4913,10 +4801,6 @@ packages:
engines: {node: '>= 12.20.55'}
hasBin: true
- elementtree@0.1.7:
- resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==}
- engines: {node: '>= 0.4.0'}
-
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -5210,6 +5094,11 @@ packages:
resolution: {integrity: sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==}
engines: {node: '>=20.16.0'}
+ expo-splash-screen@31.0.13:
+ resolution: {integrity: sha512-1epJLC1cDlwwj089R2h8cxaU5uk4ONVAC+vzGiTZH4YARQhL4Stlz1MbR6yAS173GMosvkE6CAeihR7oIbCkDA==}
+ peerDependencies:
+ expo: '*'
+
expo-web-browser@15.0.10:
resolution: {integrity: sha512-fvDhW4bhmXAeWFNFiInmsGCK83PAqAcQaFyp/3pE/jbdKmFKoRCWr46uZGIfN4msLK/OODhaQ/+US7GSJNDHJg==}
peerDependencies:
@@ -6514,11 +6403,6 @@ packages:
nanotar@0.2.0:
resolution: {integrity: sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==}
- native-run@2.0.3:
- resolution: {integrity: sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q==}
- engines: {node: '>=16.0.0'}
- hasBin: true
-
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -7317,11 +7201,6 @@ packages:
react-devtools-core@6.1.5:
resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==}
- react-dom@19.2.3:
- resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==}
- peerDependencies:
- react: ^19.2.3
-
react-dom@19.2.4:
resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
peerDependencies:
@@ -7358,10 +7237,6 @@ packages:
resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
engines: {node: '>=0.10.0'}
- react-refresh@0.18.0:
- resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
- engines: {node: '>=0.10.0'}
-
react@19.2.0:
resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
engines: {node: '>=0.10.0'}
@@ -7520,11 +7395,6 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rimraf@6.1.2:
- resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==}
- engines: {node: 20 || >=22}
- hasBin: true
-
roarr@2.15.4:
resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
engines: {node: '>=8.0'}
@@ -7572,9 +7442,6 @@ packages:
sanitize-filename@1.6.3:
resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
- sax@1.1.4:
- resolution: {integrity: sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==}
-
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
@@ -7690,10 +7557,6 @@ packages:
resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
engines: {node: '>=8'}
- slice-ansi@4.0.0:
- resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
- engines: {node: '>=10'}
-
slugify@1.6.6:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
@@ -7993,9 +7856,6 @@ packages:
throat@5.0.0:
resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
- through2@4.0.2:
- resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
-
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -8276,10 +8136,6 @@ packages:
uploadthing:
optional: true
- untildify@4.0.0:
- resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
- engines: {node: '>=8'}
-
untun@0.1.3:
resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==}
hasBin: true
@@ -9564,44 +9420,6 @@ snapshots:
citty: 0.1.6
commander: 13.1.0
- '@capacitor/android@7.5.0(@capacitor/core@7.5.0)':
- dependencies:
- '@capacitor/core': 7.5.0
-
- '@capacitor/app@7.1.2(@capacitor/core@7.5.0)':
- dependencies:
- '@capacitor/core': 7.5.0
-
- '@capacitor/browser@7.0.4(@capacitor/core@7.5.0)':
- dependencies:
- '@capacitor/core': 7.5.0
-
- '@capacitor/cli@7.5.0':
- dependencies:
- '@ionic/cli-framework-output': 2.2.8
- '@ionic/utils-subprocess': 3.0.1
- '@ionic/utils-terminal': 2.3.5
- commander: 12.1.0
- debug: 4.4.3
- env-paths: 2.2.1
- fs-extra: 11.3.3
- kleur: 4.1.5
- native-run: 2.0.3
- open: 8.4.2
- plist: 3.1.0
- prompts: 2.4.2
- rimraf: 6.1.2
- semver: 7.7.3
- tar: 7.5.7
- tslib: 2.8.1
- xml2js: 0.6.2
- transitivePeerDependencies:
- - supports-color
-
- '@capacitor/core@7.5.0':
- dependencies:
- tslib: 2.8.1
-
'@clack/core@1.0.0-alpha.7':
dependencies:
picocolors: 1.1.1
@@ -10731,82 +10549,6 @@ snapshots:
vue: 3.5.26(typescript@5.9.3)
vue-i18n: 11.2.8(vue@3.5.26(typescript@5.9.3))
- '@ionic/cli-framework-output@2.2.8':
- dependencies:
- '@ionic/utils-terminal': 2.3.5
- debug: 4.4.3
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-array@2.1.6':
- dependencies:
- debug: 4.4.3
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-fs@3.1.7':
- dependencies:
- '@types/fs-extra': 8.1.5
- debug: 4.4.3
- fs-extra: 9.1.0
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-object@2.1.6':
- dependencies:
- debug: 4.4.3
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-process@2.1.12':
- dependencies:
- '@ionic/utils-object': 2.1.6
- '@ionic/utils-terminal': 2.3.5
- debug: 4.4.3
- signal-exit: 3.0.7
- tree-kill: 1.2.2
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-stream@3.1.7':
- dependencies:
- debug: 4.4.3
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-subprocess@3.0.1':
- dependencies:
- '@ionic/utils-array': 2.1.6
- '@ionic/utils-fs': 3.1.7
- '@ionic/utils-process': 2.1.12
- '@ionic/utils-stream': 3.1.7
- '@ionic/utils-terminal': 2.3.5
- cross-spawn: 7.0.6
- debug: 4.4.3
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
-
- '@ionic/utils-terminal@2.3.5':
- dependencies:
- '@types/slice-ansi': 4.0.0
- debug: 4.4.3
- signal-exit: 3.0.7
- slice-ansi: 4.0.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
- tslib: 2.8.1
- untildify: 4.0.0
- wrap-ansi: 7.0.0
- transitivePeerDependencies:
- - supports-color
-
'@ioredis/commands@1.4.0': {}
'@isaacs/balanced-match@4.0.1': {}
@@ -11986,8 +11728,6 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.59': {}
- '@rolldown/pluginutils@1.0.0-rc.3': {}
-
'@rollup/plugin-alias@5.1.1(rollup@4.52.5)':
optionalDependencies:
rollup: 4.52.5
@@ -12547,10 +12287,6 @@ snapshots:
'@types/estree@1.0.8': {}
- '@types/fs-extra@8.1.5':
- dependencies:
- '@types/node': 24.9.2
-
'@types/fs-extra@9.0.13':
dependencies:
'@types/node': 24.9.2
@@ -12614,10 +12350,6 @@ snapshots:
xmlbuilder: 15.1.1
optional: true
- '@types/react-dom@19.2.3(@types/react@19.2.14)':
- dependencies:
- '@types/react': 19.2.14
-
'@types/react@19.2.14':
dependencies:
csstype: 3.2.3
@@ -12628,8 +12360,6 @@ snapshots:
dependencies:
'@types/node': 24.9.2
- '@types/slice-ansi@4.0.0': {}
-
'@types/stack-utils@2.0.3': {}
'@types/trusted-types@2.0.7':
@@ -12749,18 +12479,6 @@ snapshots:
- rollup
- supports-color
- '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
- '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
- '@rolldown/pluginutils': 1.0.0-rc.3
- '@types/babel__core': 7.20.5
- react-refresh: 0.18.0
- vite: 7.3.1(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2)
- transitivePeerDependencies:
- - supports-color
-
'@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.1(@types/node@24.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))':
dependencies:
'@babel/core': 7.28.5
@@ -13229,7 +12947,8 @@ snapshots:
'@babel/parser': 7.28.5
ast-kit: 2.1.3
- astral-regex@2.0.0: {}
+ astral-regex@2.0.0:
+ optional: true
async-exit-hook@2.0.1: {}
@@ -14339,10 +14058,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- elementtree@0.1.7:
- dependencies:
- sax: 1.1.4
-
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
@@ -14726,6 +14441,13 @@ snapshots:
expo-server@1.0.5: {}
+ expo-splash-screen@31.0.13(expo@54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10)):
+ dependencies:
+ '@expo/prebuild-config': 54.0.8(expo@54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10))
+ expo: 54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10)
+ transitivePeerDependencies:
+ - supports-color
+
expo-web-browser@15.0.10(expo@54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10))(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10)):
dependencies:
expo: 54.0.33(@babel/core@7.29.0)(bufferutil@4.1.0)(react-native@0.82.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0)(utf-8-validate@5.0.10)
@@ -16188,22 +15910,6 @@ snapshots:
nanotar@0.2.0: {}
- native-run@2.0.3:
- dependencies:
- '@ionic/utils-fs': 3.1.7
- '@ionic/utils-terminal': 2.3.5
- bplist-parser: 0.3.2
- debug: 4.4.3
- elementtree: 0.1.7
- ini: 4.1.1
- plist: 3.1.0
- split2: 4.2.0
- through2: 4.0.2
- tslib: 2.8.1
- yauzl: 2.10.0
- transitivePeerDependencies:
- - supports-color
-
natural-compare@1.4.0: {}
negotiator@0.6.3: {}
@@ -17268,11 +16974,6 @@ snapshots:
- bufferutil
- utf-8-validate
- react-dom@19.2.3(react@19.2.3):
- dependencies:
- react: 19.2.3
- scheduler: 0.27.0
-
react-dom@19.2.4(react@19.2.0):
dependencies:
react: 19.2.0
@@ -17352,8 +17053,6 @@ snapshots:
react-refresh@0.14.2: {}
- react-refresh@0.18.0: {}
-
react@19.2.0: {}
react@19.2.3: {}
@@ -17516,11 +17215,6 @@ snapshots:
dependencies:
glob: 7.2.3
- rimraf@6.1.2:
- dependencies:
- glob: 13.0.3
- package-json-from-dist: 1.0.1
-
roarr@2.15.4:
dependencies:
boolean: 3.2.0
@@ -17601,8 +17295,6 @@ snapshots:
dependencies:
truncate-utf8-bytes: 1.0.2
- sax@1.1.4: {}
-
sax@1.4.1: {}
scheduler@0.26.0: {}
@@ -17747,12 +17439,6 @@ snapshots:
is-fullwidth-code-point: 3.0.0
optional: true
- slice-ansi@4.0.0:
- dependencies:
- ansi-styles: 4.3.0
- astral-regex: 2.0.0
- is-fullwidth-code-point: 3.0.0
-
slugify@1.6.6: {}
smart-buffer@4.2.0: {}
@@ -18070,10 +17756,6 @@ snapshots:
throat@5.0.0: {}
- through2@4.0.2:
- dependencies:
- readable-stream: 3.6.2
-
tiny-invariant@1.3.3: {}
tinyexec@1.0.1: {}
@@ -18319,8 +18001,6 @@ snapshots:
idb-keyval: 6.2.1
ioredis: 5.8.2
- untildify@4.0.0: {}
-
untun@0.1.3:
dependencies:
citty: 0.1.6
@@ -18676,6 +18356,7 @@ snapshots:
dependencies:
sax: 1.4.1
xmlbuilder: 11.0.1
+ optional: true
xmlbuilder@11.0.1: {}