Fix lazy loading, web build; revert tree shaking for now (#815)

* Revert "fix yarn web (#814)"

This reverts commit bf158fd977.

* Revert "add hermes ios engine"

This reverts commit f6defcfb12.

* Revert "codex feedback"

This reverts commit df35a47f72.

* Revert "merge with dev"

This reverts commit 47a8d9d2f1.

* Revert "update Gemfile.lock and remove lock when reinstalling"

This reverts commit 5f25752f77.

* Revert "test package update"

This reverts commit 19dcba0e42.

* Revert "revert install cmd changes"

This reverts commit 5427bd12a1.

* Revert "Fix CI build by excluding nokogiri in GitHub Actions/Act environments"

This reverts commit dbff69a13e.

* Revert "prettier"

This reverts commit 87f421456f.

* Revert "fix building"

This reverts commit fbbefd2a3d.

* Revert "optimize path resolving"

This reverts commit 23b1118b8e.

* Revert "fix loading"

This reverts commit f0c884b43b.

* Revert "clean up dupe bundle install"

This reverts commit 5428567bbe.

* Revert "fix metro loading"

This reverts commit 3a766001dc.

* Revert "remove passport provider lazy loading"

This reverts commit 5f793a54b3.

* Revert "allow cursor to edit Gemfile and update lock file"

This reverts commit b6f7158e8e.

* Revert "Update Gemfile.lock to exclude nokogiri in CI environments"

This reverts commit 243640152d.

* Revert "fix install commands"

This reverts commit 2dc7d7c1c9.

* Revert "fix imports and test"

This reverts commit 83d6308029.

* Revert "fix import"

This reverts commit fa42b07ce4.

* Revert "update build checks"

This reverts commit b281f15a16.

* Revert "save updated imports"

This reverts commit 215bca4bee.

* Revert "fix build command"

This reverts commit 37f95bc8fb.

* Revert "build dependencies before linting"

This reverts commit 9e57e017ca.

* Revert "lint suggestions"

This reverts commit ff9b9d2c7c.

* Revert "fix type. more opportunities"

This reverts commit 7ad82d5817.

* Revert "add typing to crypto loader"

This reverts commit d55eec8f44.

* Revert "yarn nice"

This reverts commit df1c2dbd9b.

* Revert "update lock"

This reverts commit 04692ba3b5.

* Revert "cm feedback"

This reverts commit 848071f315.

* fix file name

* fix web loading

* fix border width styling

* fix package commands

* fix import and update lock

* fixes from reverted commits

* more fixes for web building

* fix yarn web:build

* add yarn web:build workflow

* cm feedback

* final fixes

* fix for and vitge

* fix loading
This commit is contained in:
Justin Hernandez
2025-07-30 22:27:49 -07:00
committed by GitHub
parent bf158fd977
commit 86656fdca6
53 changed files with 352 additions and 647 deletions

View File

@@ -24,6 +24,7 @@ jobs:
- name: Yarn types
shell: bash
run: yarn types
test-common:
runs-on: ubuntu-latest
steps:

21
.github/workflows/web.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: Web CI
on:
push:
paths:
- "app/**"
- ".github/workflows/web.yml"
- ".github/actions/**"
jobs:
web-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
uses: ./.github/actions/yarn-install
- name: Build dependencies
shell: bash
run: yarn workspace @selfxyz/common build
- name: Build web app
run: yarn web:build

View File

@@ -1,10 +1,10 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
// CI/CD Pipeline Test - July 29, 2025 - With Permissions Fix
import 'react-native-get-random-values';
import { Buffer } from 'buffer';
import React from 'react';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { YStack } from 'tamagui';
import ErrorBoundary from './src/components/ErrorBoundary';
@@ -22,23 +22,21 @@ global.Buffer = Buffer;
function App(): React.JSX.Element {
return (
<SafeAreaProvider>
<ErrorBoundary>
<YStack flex={1} height="100%" width="100%">
<RemoteConfigProvider>
<AuthProvider>
<PassportProvider>
<DatabaseProvider>
<NotificationTrackingProvider>
<AppNavigation />
</NotificationTrackingProvider>
</DatabaseProvider>
</PassportProvider>
</AuthProvider>
</RemoteConfigProvider>
</YStack>
</ErrorBoundary>
</SafeAreaProvider>
<ErrorBoundary>
<YStack flex={1} height="100%" width="100%">
<RemoteConfigProvider>
<AuthProvider>
<PassportProvider>
<DatabaseProvider>
<NotificationTrackingProvider>
<AppNavigation />
</NotificationTrackingProvider>
</DatabaseProvider>
</PassportProvider>
</AuthProvider>
</RemoteConfigProvider>
</YStack>
</ErrorBoundary>
);
}

View File

@@ -12,8 +12,7 @@ gem "fastlane", "~> 2.228.0"
group :development do
gem "dotenv"
# Exclude nokogiri for GitHub Actions and Act
gem "nokogiri", "~> 1.18.9", platform: :ruby
gem "nokogiri", "~> 1.18", platform: :ruby
end
plugins_path = File.join(File.dirname(__FILE__), "fastlane", "Pluginfile")

View File

@@ -24,28 +24,28 @@ GEM
json (>= 1.5.1)
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
aws-partitions (1.1137.0)
aws-sdk-core (3.227.0)
aws-eventstream (1.3.2)
aws-partitions (1.1088.0)
aws-sdk-core (3.222.2)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.108.0)
aws-sdk-core (~> 3, >= 3.227.0)
aws-sdk-kms (1.99.0)
aws-sdk-core (~> 3, >= 3.216.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.194.0)
aws-sdk-core (~> 3, >= 3.227.0)
aws-sdk-s3 (1.183.0)
aws-sdk-core (~> 3, >= 3.216.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-sigv4 (1.11.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.3.0)
benchmark (0.4.1)
bigdecimal (3.2.2)
base64 (0.2.0)
benchmark (0.4.0)
bigdecimal (3.1.9)
claide (1.1.0)
cocoapods (1.16.2)
addressable (~> 2.8)
@@ -89,13 +89,13 @@ GEM
commander (4.6.0)
highline (~> 2.0.0)
concurrent-ruby (1.3.5)
connection_pool (2.5.3)
connection_pool (2.5.0)
declarative (0.0.20)
digest-crc (0.7.0)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107)
dotenv (2.8.1)
drb (2.2.3)
drb (2.2.1)
emoji_regex (3.2.3)
escape (0.0.4)
ethon (0.16.0)
@@ -117,10 +117,10 @@ GEM
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.1)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.1.1)
faraday-multipart (1.1.0)
multipart-post (~> 2.0)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
@@ -176,7 +176,7 @@ GEM
fastlane-plugin-versioning_android (0.1.1)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
ffi (1.17.2)
ffi (1.17.1)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
@@ -224,21 +224,21 @@ GEM
i18n (1.14.7)
concurrent-ruby (~> 1.0)
jmespath (1.6.2)
json (2.13.2)
jwt (2.10.2)
json (2.10.2)
jwt (2.10.1)
base64
logger (1.7.0)
logger (1.6.6)
mini_magick (4.13.2)
mini_mime (1.1.5)
mini_portile2 (2.8.9)
minitest (5.25.5)
molinillo (0.8.0)
multi_json (1.17.0)
multi_json (1.15.0)
multipart-post (2.4.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
nap (1.1.0)
naturally (2.3.0)
naturally (2.2.1)
netrc (0.11.0)
nkf (0.2.0)
nokogiri (1.18.9)
@@ -249,7 +249,7 @@ GEM
plist (3.7.2)
public_suffix (4.0.7)
racc (1.8.1)
rake (13.3.0)
rake (13.2.1)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
@@ -262,7 +262,7 @@ GEM
rubyzip (2.4.1)
securerandom (0.4.1)
security (0.1.5)
signet (0.20.0)
signet (0.19.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
@@ -308,10 +308,10 @@ DEPENDENCIES
fastlane (~> 2.228.0)
fastlane-plugin-increment_version_code
fastlane-plugin-versioning_android
nokogiri (~> 1.18.9)
nokogiri (~> 1.18)
RUBY VERSION
ruby 3.2.7p253
BUNDLED WITH
2.6.9
2.4.19

View File

@@ -116,6 +116,7 @@ android {
javaMaxHeapSize "4g"
preDexLibraries false
}
defaultConfig {
applicationId "com.proofofpassportapp"
minSdkVersion rootProject.ext.minSdkVersion
@@ -154,8 +155,7 @@ android {
signingConfig signingConfigs.debug
}
release {
// Only use release signing config if the properties are available, otherwise fall back to debug
signingConfig project.hasProperty('MYAPP_UPLOAD_STORE_FILE') ? signingConfigs.release : signingConfigs.debug
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}

View File

@@ -10,7 +10,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx6144m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:+UseStringDeduplication
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:+UseStringDeduplication
android.defaults.buildfeatures.buildconfig=true
# When configured, Gradle will run in incubating parallel mode.

View File

@@ -1,7 +1,6 @@
module.exports = {
presets: ['module:@react-native/babel-preset'],
plugins: [
['@tamagui/babel-plugin', { platform: 'native' }],
['@babel/plugin-transform-private-methods', { loose: true }],
[
'module:react-native-dotenv',

View File

@@ -128,6 +128,9 @@ target "Self" do
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["CODE_SIGNING_ALLOWED"] = "NO"
# Fix for Rosetta emulator builds - exclude arm64 for simulator
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
end

View File

@@ -2319,6 +2319,6 @@ SPEC CHECKSUMS:
SwiftyTesseract: 1f3d96668ae92dc2208d9842c8a59bea9fad2cbb
Yoga: b05994d1933f507b0a28ceaa4fdb968dc18da178
PODFILE CHECKSUM: 99a2fe1b63850931eea0c4a535d1fb74860e14b3
PODFILE CHECKSUM: b81ba34191ee5d356ad68dc704f09d3e47b416b4
COCOAPODS: 1.16.2

View File

@@ -12,7 +12,6 @@ const extraNodeModules = {
util: require.resolve('util'),
assert: require.resolve('assert'),
'@babel/runtime': path.join(trueMonorepoNodeModules, '@babel/runtime'),
'@selfxyz/common': path.resolve(commonPath, 'src'),
};
const watchFolders = [
path.resolve(commonPath),
@@ -31,8 +30,6 @@ const config = {
babelTransformerPath: require.resolve(
'react-native-svg-transformer/react-native',
),
disableImportExportTransform: true,
inlineRequires: true,
},
resolver: {
extraNodeModules,
@@ -44,34 +41,6 @@ const config = {
],
assetExts: assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg'],
resolverMainFields: ['react-native', 'browser', 'main'],
platforms: ['ios', 'android', 'native', 'web'],
// Custom resolver to handle .js imports that should resolve to .ts files
resolveRequest: (context, moduleName, platform) => {
// Only process .js imports from the common package source
const isFromCommonSrc = context.originModulePath.includes(
path.join('common', 'src'),
);
if (moduleName.endsWith('.js') && isFromCommonSrc) {
const tsModuleName = moduleName.replace(/\.js$/, '.ts');
const tsxModuleName = moduleName.replace(/\.js$/, '.tsx');
// Try to resolve as .ts first, then .tsx
try {
return context.resolveRequest(context, tsModuleName, platform);
} catch (tsError) {
try {
return context.resolveRequest(context, tsxModuleName, platform);
} catch (tsxError) {
// Fall back to default resolution
return context.resolveRequest(context, moduleName, platform);
}
}
}
// Default resolution for everything else
return context.resolveRequest(context, moduleName, platform);
},
},
watchFolders,
};

View File

@@ -16,7 +16,7 @@
"clean": "yarn clean:watchman && yarn clean:build && yarn clean:ios && yarn clean:android && yarn clean:xcode && yarn clean:pod-cache && yarn clean:node",
"clean:android": "rm -rf android/app/build android/build",
"clean:build": "rm -rf ios/build android/app/build android/build",
"clean:ios": "rm -rf ios/Pods ios/Podfile.lock && rm -rf Gemfile.lock",
"clean:ios": "rm -rf ios/Pods ios/Podfile.lock",
"clean:node": "rm -rf ../node_modules app/node_modules",
"clean:pod-cache": "cd ios && pod cache clean --all && cd ..",
"clean:watchman": "watchman watch-del-all",
@@ -143,7 +143,6 @@
"@react-native/gradle-plugin": "^0.79.2",
"@react-native/metro-config": "0.75.4",
"@react-native/typescript-config": "0.75.4",
"@tamagui/babel-plugin": "^1.132.15",
"@tamagui/types": "1.126.14",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/react-native": "^13.2.0",

View File

@@ -1,8 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import type { Country3LetterCode } from '@selfxyz/common/constants/constants';
import { countryCodes } from '@selfxyz/common/constants/constants';
import type { SelfAppDisclosureConfig } from '@selfxyz/common/utils/appType';
import type { SelfAppDisclosureConfig } from '@selfxyz/common';
import { Country3LetterCode, countryCodes } from '@selfxyz/common';
import React from 'react';
import { XStack, YStack } from 'tamagui';

View File

@@ -18,6 +18,7 @@ export interface ButtonProps extends ViewProps {
interface AbstractButtonProps extends ButtonProps {
bgColor: string;
borderColor?: string;
borderWidth?: number;
color: string;
onPress?: ((e: any) => void) | null | undefined;
}
@@ -35,6 +36,7 @@ export default function AbstractButton({
bgColor,
color,
borderColor,
borderWidth = 4,
style,
animatedComponent,
trackEvent,
@@ -64,9 +66,13 @@ export default function AbstractButton({
onPress={handlePress}
style={[
styles.container,
{ backgroundColor: bgColor, borderColor: borderColor },
{ backgroundColor: bgColor },
hasBorder
? styles.withBorder
? {
borderWidth: borderWidth,
borderColor: borderColor,
padding: 20 - borderWidth, // Adjust padding to maintain total size
}
: Platform.select({ web: { borderWidth: 0 }, default: {} }),
style as ViewStyle,
]}
@@ -92,10 +98,6 @@ const styles = StyleSheet.create({
padding: 20,
borderRadius: 5,
},
withBorder: {
borderWidth: 4,
padding: 16, // plus 4 of border = 20
},
text: {
fontFamily: dinot,
textAlign: 'center',

View File

@@ -3,16 +3,22 @@
import React from 'react';
import { amber50, black, slate300, white } from '../../utils/colors';
import { normalizeBorderWidth } from '../../utils/styleUtils';
import AbstractButton, { ButtonProps } from './AbstractButton';
export function PrimaryButton({ children, ...props }: ButtonProps) {
const isDisabled = props.disabled;
const { borderWidth, ...restProps } = props;
const isDisabled = restProps.disabled;
const bgColor = isDisabled ? white : black;
const color = isDisabled ? slate300 : amber50;
const borderColor = isDisabled ? slate300 : undefined;
const numericBorderWidth = normalizeBorderWidth(borderWidth);
return (
<AbstractButton
{...props}
{...restProps}
borderWidth={numericBorderWidth}
borderColor={borderColor}
bgColor={bgColor}
color={color}

View File

@@ -3,16 +3,22 @@
import React from 'react';
import { slate200, slate300, slate500, white } from '../../utils/colors';
import { normalizeBorderWidth } from '../../utils/styleUtils';
import AbstractButton, { ButtonProps } from './AbstractButton';
export function SecondaryButton({ children, ...props }: ButtonProps) {
const isDisabled = props.disabled;
const { borderWidth, ...restProps } = props;
const isDisabled = restProps.disabled;
const bgColor = isDisabled ? white : slate200;
const color = isDisabled ? slate300 : slate500;
const borderColor = isDisabled ? slate200 : undefined;
const numericBorderWidth = normalizeBorderWidth(borderWidth);
return (
<AbstractButton
{...props}
{...restProps}
borderWidth={numericBorderWidth}
bgColor={bgColor}
color={color}
borderColor={borderColor}

View File

@@ -1,10 +1,14 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import { ProgressNavBar } from '../components/NavBar';
import { shouldShowAesopRedesign } from '../hooks/useAesopRedesign';
import PassportOnboardingScreen from '../screens/aesop/PassportOnboardingScreen';
const PassportOnboardingScreen = lazy(
() => import('../screens/aesop/PassportOnboardingScreen'),
);
import { white } from '../utils/colors';
const aesopScreens = {

View File

@@ -1,12 +1,21 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import DevFeatureFlagsScreen from '../screens/dev/DevFeatureFlagsScreen';
import DevHapticFeedbackScreen from '../screens/dev/DevHapticFeedback';
import DevSettingsScreen from '../screens/dev/DevSettingsScreen';
import MockDataScreen from '../screens/dev/MockDataScreen';
import MockDataScreenDeepLink from '../screens/dev/MockDataScreenDeepLink';
const DevFeatureFlagsScreen = lazy(
() => import('../screens/dev/DevFeatureFlagsScreen'),
);
const DevHapticFeedbackScreen = lazy(
() => import('../screens/dev/DevHapticFeedback'),
);
const DevSettingsScreen = lazy(
() => import('../screens/dev/DevSettingsScreen'),
);
const MockDataScreen = lazy(() => import('../screens/dev/MockDataScreen'));
const MockDataScreenDeepLink = lazy(
() => import('../screens/dev/MockDataScreenDeepLink'),
);
import { white } from '../utils/colors';
const devScreens = {

View File

@@ -1,12 +1,17 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import { HomeNavBar } from '../components/NavBar';
import DisclaimerScreen from '../screens/home/DisclaimerScreen';
import HomeScreen from '../screens/home/HomeScreen';
import ProofHistoryDetailScreen from '../screens/home/ProofHistoryDetailScreen';
import ProofHistoryScreen from '../screens/home/ProofHistoryScreen';
const DisclaimerScreen = lazy(() => import('../screens/home/DisclaimerScreen'));
const HomeScreen = lazy(() => import('../screens/home/HomeScreen'));
const ProofHistoryDetailScreen = lazy(
() => import('../screens/home/ProofHistoryDetailScreen'),
);
const ProofHistoryScreen = lazy(
() => import('../screens/home/ProofHistoryScreen'),
);
import { black } from '../utils/colors';
const homeScreens = {
Disclaimer: {

View File

@@ -9,10 +9,10 @@ import { createNativeStackNavigator } from '@react-navigation/native-stack';
import React, { Suspense, useEffect } from 'react';
import { Platform, View } from 'react-native';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { Text } from 'tamagui';
import { DefaultNavBar } from '../components/NavBar';
import AppLayout from '../layouts/AppLayout';
const SuspenseFallback = () => <View>Loading...</View>;
import analytics from '../utils/analytics';
import { white } from '../utils/colors';
import { setupUniversalLinkListenerInNavigation } from '../utils/deeplinks';
@@ -60,8 +60,19 @@ declare global {
export const navigationRef = createNavigationContainerRef();
const { trackScreenView } = analytics();
const Navigation = createStaticNavigation(AppNavigation);
const SuspenseFallback = () => {
if (Platform.OS === 'web') {
return <div>Loading...</div>;
}
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Loading...</Text>
</View>
);
};
const NavigationWithTracking = () => {
const trackScreen = () => {
const currentRoute = navigationRef.getCurrentRoute();

View File

@@ -1,15 +1,19 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import React from 'react';
import React, { lazy } from 'react';
import { StatusBar } from 'react-native';
import LaunchScreen from '../screens/misc/LaunchScreen';
import LoadingScreen from '../screens/misc/LoadingScreen';
import ModalScreen from '../screens/misc/ModalScreen';
// Important: SplashScreen is imported directly and not lazy-loaded.
// This is because it's used as a fallback for the Suspense boundary in the root navigator,
// ensuring it's immediately available at startup.
import SplashScreen from '../screens/misc/SplashScreen';
import { black } from '../utils/colors';
const LaunchScreen = lazy(() => import('../screens/misc/LaunchScreen'));
const LoadingScreen = lazy(() => import('../screens/misc/LoadingScreen'));
const ModalScreen = lazy(() => import('../screens/misc/ModalScreen'));
const miscScreens = {
Launch: {
screen: LaunchScreen,

View File

@@ -1,14 +1,29 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import NFCMethodSelectionScreen from '../screens/passport/NFCMethodSelectionScreen';
import PassportCameraScreen from '../screens/passport/PassportCameraScreen';
import PassportCameraTrouble from '../screens/passport/PassportCameraTroubleScreen';
import PassportNFCScanScreen from '../screens/passport/PassportNFCScanScreen';
import PassportNFCTrouble from '../screens/passport/PassportNFCTroubleScreen';
import PassportOnboardingScreen from '../screens/passport/PassportOnboardingScreen';
import UnsupportedPassportScreen from '../screens/passport/UnsupportedPassportScreen';
const PassportCameraScreen = lazy(
() => import('../screens/passport/PassportCameraScreen'),
);
const PassportCameraTrouble = lazy(
() => import('../screens/passport/PassportCameraTroubleScreen'),
);
const PassportNFCScanScreen = lazy(
() => import('../screens/passport/PassportNFCScanScreen'),
);
const PassportNFCTrouble = lazy(
() => import('../screens/passport/PassportNFCTroubleScreen'),
);
const PassportOnboardingScreen = lazy(
() => import('../screens/passport/PassportOnboardingScreen'),
);
const UnsupportedPassportScreen = lazy(
() => import('../screens/passport/UnsupportedPassportScreen'),
);
const NFCMethodSelectionScreen = lazy(
() => import('../screens/passport/NFCMethodSelectionScreen'),
);
const passportScreens = {
PassportCamera: {

View File

@@ -1,12 +1,21 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import ConfirmBelongingScreen from '../screens/prove/ConfirmBelongingScreen';
import ProofRequestStatusScreen from '../screens/prove/ProofRequestStatusScreen';
import ProveScreen from '../screens/prove/ProveScreen';
import QRCodeTroubleScreen from '../screens/prove/QRCodeTroubleScreen';
import QRCodeViewFinderScreen from '../screens/prove/ViewFinderScreen';
const ConfirmBelongingScreen = lazy(
() => import('../screens/prove/ConfirmBelongingScreen'),
);
const ProofRequestStatusScreen = lazy(
() => import('../screens/prove/ProofRequestStatusScreen'),
);
const ProveScreen = lazy(() => import('../screens/prove/ProveScreen'));
const QRCodeTroubleScreen = lazy(
() => import('../screens/prove/QRCodeTroubleScreen'),
);
const QRCodeViewFinderScreen = lazy(
() => import('../screens/prove/ViewFinderScreen'),
);
import { black, white } from '../utils/colors';
const proveScreens = {

View File

@@ -1,13 +1,26 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import AccountRecoveryChoiceScreen from '../screens/recovery/AccountRecoveryChoiceScreen';
import AccountRecoveryScreen from '../screens/recovery/AccountRecoveryScreen';
import AccountVerifiedSuccessScreen from '../screens/recovery/AccountVerifiedSuccessScreen';
import PassportDataNotFound from '../screens/recovery/PassportDataNotFoundScreen';
import RecoverWithPhraseScreen from '../screens/recovery/RecoverWithPhraseScreen';
import SaveRecoveryPhraseScreen from '../screens/recovery/SaveRecoveryPhraseScreen';
const AccountRecoveryChoiceScreen = lazy(
() => import('../screens/recovery/AccountRecoveryChoiceScreen'),
);
const AccountRecoveryScreen = lazy(
() => import('../screens/recovery/AccountRecoveryScreen'),
);
const AccountVerifiedSuccessScreen = lazy(
() => import('../screens/recovery/AccountVerifiedSuccessScreen'),
);
const PassportDataNotFound = lazy(
() => import('../screens/recovery/PassportDataNotFoundScreen'),
);
const RecoverWithPhraseScreen = lazy(
() => import('../screens/recovery/RecoverWithPhraseScreen'),
);
const SaveRecoveryPhraseScreen = lazy(
() => import('../screens/recovery/SaveRecoveryPhraseScreen'),
);
import { black, slate300 } from '../utils/colors';
const recoveryScreens = {

View File

@@ -1,8 +1,11 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import PassportDataNotFound from '../screens/recovery/PassportDataNotFoundScreen';
const PassportDataNotFound = lazy(
() => import('../screens/recovery/PassportDataNotFoundScreen'),
);
const recoveryScreens = {
PassportDataNotFound: {

View File

@@ -1,12 +1,21 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import CloudBackupScreen from '../screens/settings/CloudBackupScreen';
import ManageDocumentsScreen from '../screens/settings/ManageDocumentsScreen';
import PassportDataInfoScreen from '../screens/settings/PassportDataInfoScreen';
import SettingsScreen from '../screens/settings/SettingsScreen';
import ShowRecoveryPhraseScreen from '../screens/settings/ShowRecoveryPhraseScreen';
const CloudBackupScreen = lazy(
() => import('../screens/settings/CloudBackupScreen'),
);
const ManageDocumentsScreen = lazy(
() => import('../screens/settings/ManageDocumentsScreen'),
);
const PassportDataInfoScreen = lazy(
() => import('../screens/settings/PassportDataInfoScreen'),
);
const SettingsScreen = lazy(() => import('../screens/settings/SettingsScreen'));
const ShowRecoveryPhraseScreen = lazy(
() => import('../screens/settings/ShowRecoveryPhraseScreen'),
);
import { black, slate300, white } from '../utils/colors';
const settingsScreens = {

View File

@@ -1,10 +1,15 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
import { lazy } from 'react';
import ManageDocumentsScreen from '../screens/settings/ManageDocumentsScreen';
import PassportDataInfoScreen from '../screens/settings/PassportDataInfoScreen';
import SettingsScreen from '../screens/settings/SettingsScreen';
const ManageDocumentsScreen = lazy(
() => import('../screens/settings/ManageDocumentsScreen'),
);
const PassportDataInfoScreen = lazy(
() => import('../screens/settings/PassportDataInfoScreen'),
);
const SettingsScreen = lazy(() => import('../screens/settings/SettingsScreen'));
import { black, white } from '../utils/colors';
const settingsScreens = {

View File

@@ -38,16 +38,14 @@
* - Display format determined by documentCategory
*/
import type {
import {
brutforceSignatureAlgorithmDsc,
DocumentCategory,
parseCertificateSimple,
PassportData,
PublicKeyDetailsECDSA,
PublicKeyDetailsRSA,
} from '@selfxyz/common/utils/certificate_parsing/dataStructure';
import { parseCertificateSimple } from '@selfxyz/common/utils/certificate_parsing/parseCertificateSimple';
import { brutforceSignatureAlgorithmDsc } from '@selfxyz/common/utils/passports/passport_parsing/brutForceDscSignature';
import type {
DocumentCategory,
PassportData,
} from '@selfxyz/common/utils/types';
} from '@selfxyz/common';
import { sha256 } from 'js-sha256';
import React, {
createContext,

View File

@@ -1,14 +1,14 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { useNavigation } from '@react-navigation/native';
import { countryCodes } from '@selfxyz/common/constants/constants';
import { getSKIPEM } from '@selfxyz/common/utils/csca';
import type { IdDocInput } from '@selfxyz/common/utils/passports/genMockIdDoc';
import {
countryCodes,
generateMockDSC,
genMockIdDoc,
} from '@selfxyz/common/utils/passports/genMockIdDoc';
import { initPassportDataParsing } from '@selfxyz/common/utils/passports/passport';
getSKIPEM,
IdDocInput,
initPassportDataParsing,
} from '@selfxyz/common';
import { ChevronDown, Minus, Plus, X } from '@tamagui/lucide-icons';
import { flag } from 'country-emoji';
import getCountryISO2 from 'country-iso-3-to-2';

View File

@@ -1,9 +1,11 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { useNavigation } from '@react-navigation/native';
import { countryCodes } from '@selfxyz/common/constants/constants';
import type { IdDocInput } from '@selfxyz/common/utils/passports/genMockIdDoc';
import { genMockIdDocAndInitDataParsing } from '@selfxyz/common/utils/passports/genMockIdDoc';
import {
countryCodes,
genMockIdDocAndInitDataParsing,
IdDocInput,
} from '@selfxyz/common';
import { flag } from 'country-emoji';
import getCountryISO2 from 'country-iso-3-to-2';
import React, { useCallback, useEffect, useState } from 'react';

View File

@@ -65,8 +65,8 @@ const LaunchScreen: React.FC = () => {
<AbstractButton
bgColor={black}
borderColor={zinc800}
color={white}
borderWidth={1}
color={white}
trackEvent={AppEvents.SUPPORTED_BIOMETRIC_IDS}
onPress={async () => {
try {

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { StaticScreenProps, useIsFocused } from '@react-navigation/native';
import type { PassportData } from '@selfxyz/common/utils/types';
import { PassportData } from '@selfxyz/common';
import LottieView from 'lottie-react-native';
import React, { useEffect, useState } from 'react';
import { StyleSheet, View } from 'react-native';

View File

@@ -5,9 +5,11 @@ import {
useNavigation,
useRoute,
} from '@react-navigation/native';
import { getSKIPEM } from '@selfxyz/common/utils/csca';
import { initPassportDataParsing } from '@selfxyz/common/utils/passports/passport';
import type { PassportData } from '@selfxyz/common/utils/types';
import {
getSKIPEM,
initPassportDataParsing,
PassportData,
} from '@selfxyz/common';
import { CircleHelp } from '@tamagui/lucide-icons';
import LottieView from 'lottie-react-native';
import React, { useCallback, useEffect, useRef, useState } from 'react';

View File

@@ -2,7 +2,7 @@
import { useIsFocused } from '@react-navigation/native';
import LottieView from 'lottie-react-native';
import React, { useCallback, useEffect, useRef, useState } from 'react';
import React, { useEffect, useState } from 'react';
import { Linking, StatusBar, StyleSheet, View } from 'react-native';
import { ScrollView, Spinner } from 'tamagui';
@@ -48,15 +48,15 @@ const SuccessScreen: React.FC = () => {
const [animationSource, setAnimationSource] = useState<any>(loadingAnimation);
const [countdown, setCountdown] = useState<number | null>(null);
const [countdownStarted, setCountdownStarted] = useState(false);
const timerRef = useRef<NodeJS.Timeout | null>(null);
const timerRef = React.useRef<NodeJS.Timeout | null>(null);
const onOkPress = useCallback(() => {
function onOkPress() {
buttonTap();
goHome();
setTimeout(() => {
cleanSelfApp();
}, 2000); // Wait 2 seconds to user coming back to the home screen. If we don't wait the appname will change and user will see it.
}, [goHome, cleanSelfApp]);
}
function cancelDeeplinkCallbackRedirect() {
setCountdown(null);
@@ -132,9 +132,8 @@ const SuccessScreen: React.FC = () => {
errorCode,
reason,
updateProofStatus,
selfApp,
selfApp?.deeplinkCallback,
countdownStarted,
countdown,
]);
useEffect(() => {

View File

@@ -1,8 +1,8 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { useIsFocused, useNavigation } from '@react-navigation/native';
import type { SelfAppDisclosureConfig } from '@selfxyz/common/utils/appType';
import { formatEndpoint } from '@selfxyz/common/utils/scope';
import type { SelfAppDisclosureConfig } from '@selfxyz/common';
import { formatEndpoint } from '@selfxyz/common';
import { Eye, EyeOff } from '@tamagui/lucide-icons';
import LottieView from 'lottie-react-native';
import React, {

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { useFocusEffect } from '@react-navigation/native';
import type { PassportMetadata } from '@selfxyz/common/utils/passports/passport_parsing/parsePassportData';
import { PassportMetadata } from '@selfxyz/common';
import React, { useCallback, useState } from 'react';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { ScrollView, Separator, XStack, YStack } from 'tamagui';

View File

@@ -1,7 +1,6 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import type { EndpointType } from '@selfxyz/common/utils/appType';
import type { UserIdType } from '@selfxyz/common/utils/circuits/uuid';
import type { EndpointType, UserIdType } from '@selfxyz/common';
export interface ProofHistory {
id: string;

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { WS_DB_RELAYER } from '@selfxyz/common/constants/constants';
import { WS_DB_RELAYER } from '@selfxyz/common';
import { io } from 'socket.io-client';
import { create } from 'zustand';

View File

@@ -15,7 +15,7 @@ import {
IDENTITY_TREE_URL_ID_CARD,
IDENTITY_TREE_URL_STAGING,
IDENTITY_TREE_URL_STAGING_ID_CARD,
} from '@selfxyz/common/constants/constants';
} from '@selfxyz/common';
import { create } from 'zustand';
import { fetchOfacTrees } from '../utils/ofac';

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { WS_DB_RELAYER } from '@selfxyz/common/constants/constants';
import type { SelfApp } from '@selfxyz/common/utils/appType';
import type { SelfApp } from '@selfxyz/common';
import { WS_DB_RELAYER } from '@selfxyz/common';
import socketIo, { Socket } from 'socket.io-client';
import { create } from 'zustand';

View File

@@ -1,12 +1,6 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
interface CryptoUtils {
elliptic: typeof import('elliptic');
forge: typeof import('node-forge');
ethers: typeof import('ethers');
}
export const loadCryptoUtils = async (): Promise<CryptoUtils> => {
export const loadCryptoUtils = async () => {
const [elliptic, forge, ethers] = await Promise.all([
import('elliptic'),
import('node-forge'),

View File

@@ -2,7 +2,7 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { ENABLE_DEBUG_LOGS, MIXPANEL_NFC_PROJECT_TOKEN } from '@env';
import type { PassportData } from '@selfxyz/common/utils/types';
import { PassportData } from '@selfxyz/common';
import { Buffer } from 'buffer';
import { NativeModules, Platform } from 'react-native';
import PassportReader from 'react-native-passport-reader';

View File

@@ -1,9 +1,6 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import {
TREE_URL,
TREE_URL_STAGING,
} from '@selfxyz/common/constants/constants';
import { TREE_URL, TREE_URL_STAGING } from '@selfxyz/common';
export type OfacVariant = 'passport' | 'id_card';

View File

@@ -1,10 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import { X509Certificate } from '@peculiar/x509';
import {
PCR0_MANAGER_ADDRESS,
RPC_URL,
} from '@selfxyz/common/constants/constants';
import { PCR0_MANAGER_ADDRESS, RPC_URL } from '@selfxyz/common';
import { decode } from '@stablelib/cbor';
import { fromBER } from 'asn1js';
import { Buffer } from 'buffer';

View File

@@ -0,0 +1,22 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
// Only export what's actually used elsewhere to enable proper tree shaking
// From provingMachine - used in screens and tests
export { type ProvingStateType, useProvingStore } from './provingMachine';
// From validateDocument - used in recovery and splash screens
export {
hasAnyValidRegisteredDocument,
isUserRegisteredWithAlternativeCSCA,
} from './validateDocument';
// From loadingScreenStateText - used in loading screen
export { getLoadingScreenText } from './loadingScreenStateText';
// From provingUtils - used in tests (keeping these for testing purposes)
export {
encryptAES256GCM,
getPayload,
getWSDbRelayerUrl,
} from './provingUtils';

View File

@@ -2,29 +2,25 @@
import { LeanIMT } from '@openpassport/zk-kit-lean-imt';
import { SMT } from '@openpassport/zk-kit-smt';
import {
attributeToPosition,
attributeToPosition_ID,
DEFAULT_MAJORITY,
ID_CARD_ATTESTATION_ID,
PASSPORT_ATTESTATION_ID,
} from '@selfxyz/common/constants/constants';
import type {
SelfApp,
SelfAppDisclosureConfig,
} from '@selfxyz/common/utils/appType';
import { getCircuitNameFromPassportData } from '@selfxyz/common/utils/circuits/circuitsName';
import {
generateCircuitInputsDSC,
generateCircuitInputsRegister,
generateCircuitInputsVCandDisclose,
} from '@selfxyz/common/utils/circuits/generateInputs';
import { calculateUserIdentifierHash } from '@selfxyz/common/utils/hash';
import { hashEndpointWithScope } from '@selfxyz/common/utils/scope';
import type {
DocumentCategory,
PassportData,
} from '@selfxyz/common/utils/types';
SelfApp,
SelfAppDisclosureConfig,
} from '@selfxyz/common';
import {
attributeToPosition,
attributeToPosition_ID,
calculateUserIdentifierHash,
DEFAULT_MAJORITY,
generateCircuitInputsDSC,
generateCircuitInputsRegister,
generateCircuitInputsVCandDisclose,
getCircuitNameFromPassportData,
hashEndpointWithScope,
ID_CARD_ATTESTATION_ID,
PASSPORT_ATTESTATION_ID,
} from '@selfxyz/common';
import { poseidon2 } from 'poseidon-lite';
import { useProtocolStore } from '../../stores/protocolStore';

View File

@@ -1,12 +1,15 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import type { EndpointType, SelfApp } from '@selfxyz/common/utils/appType';
import { getCircuitNameFromPassportData } from '@selfxyz/common/utils/circuits/circuitsName';
import { getSolidityPackedUserContextData } from '@selfxyz/common/utils/hash';
import type {
DocumentCategory,
EndpointType,
PassportData,
} from '@selfxyz/common/utils/types';
SelfApp,
} from '@selfxyz/common';
import {
getCircuitNameFromPassportData,
getSolidityPackedUserContextData,
} from '@selfxyz/common';
import forge from 'node-forge';
import socketIo, { Socket } from 'socket.io-client';
import { v4 } from 'uuid';

View File

@@ -1,11 +1,11 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import type { EndpointType } from '@selfxyz/common';
import {
initElliptic,
WS_DB_RELAYER,
WS_DB_RELAYER_STAGING,
} from '@selfxyz/common/constants/constants';
import type { EndpointType } from '@selfxyz/common/utils/appType';
import { initElliptic } from '@selfxyz/common/utils/certificate_parsing/elliptic';
} from '@selfxyz/common';
import forge from 'node-forge';
const elliptic = initElliptic();

View File

@@ -4,22 +4,18 @@ import { LeanIMT } from '@openpassport/zk-kit-lean-imt';
import {
API_URL,
API_URL_STAGING,
ID_CARD_ATTESTATION_ID,
PASSPORT_ATTESTATION_ID,
} from '@selfxyz/common/constants/constants';
import { parseCertificateSimple } from '@selfxyz/common/utils/certificate_parsing/parseCertificateSimple';
import { getCircuitNameFromPassportData } from '@selfxyz/common/utils/circuits/circuitsName';
import * as Hash from '@selfxyz/common/utils/hash';
import { formatMrz } from '@selfxyz/common/utils/passports/format';
import {
DocumentCategory,
formatMrz,
generateCommitment,
generateNullifier,
} from '@selfxyz/common/utils/passports/passport';
import { getLeafDscTree } from '@selfxyz/common/utils/trees';
import type {
DocumentCategory,
getCircuitNameFromPassportData,
getLeafDscTree,
Hash,
ID_CARD_ATTESTATION_ID,
parseCertificateSimple,
PASSPORT_ATTESTATION_ID,
PassportData,
} from '@selfxyz/common/utils/types';
} from '@selfxyz/common';
import { poseidon2, poseidon5 } from 'poseidon-lite';
import { DocumentEvents } from '../../consts/analytics';

View File

@@ -0,0 +1,18 @@
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
/**
* Utility functions for style, design, and layout operations.
*/
/**
* Normalizes borderWidth value.
* Validates and converts borderWidth to a non-negative number or undefined.
* @param borderWidth - The borderWidth value to normalize
* @returns Normalized borderWidth (non-negative number) or undefined
*/
export function normalizeBorderWidth(borderWidth: unknown): number | undefined {
if (typeof borderWidth === 'number' && borderWidth >= 0) {
return borderWidth;
}
return undefined;
}

View File

@@ -16,8 +16,8 @@ jest.mock('../../../src/utils/analytics', () => () => ({
trackEvent: jest.fn(),
}));
jest.mock('@selfxyz/common/utils/hash', () => {
const actual = jest.requireActual('@selfxyz/common/utils/hash') as any;
jest.mock('@selfxyz/common', () => {
const actual = jest.requireActual('@selfxyz/common') as any;
return {
...actual,
getSolidityPackedUserContextData: jest.fn(() => '0x1234'),

View File

@@ -99,14 +99,14 @@ export default defineConfig({
'react-native-cloud-storage',
],
'screens-passport': [
'./src/screens/passport',
'./src/utils/nfcScanner',
'./src/navigation/passport.ts',
'./src/utils/nfcScanner.ts',
],
'screens-prove': ['./src/screens/prove', './src/utils/proving'],
'screens-settings': ['./src/screens/settings'],
'screens-recovery': ['./src/screens/recovery'],
'screens-dev': ['./src/screens/dev'],
'screens-aesop': ['./src/screens/aesop'],
'screens-prove': ['./src/navigation/prove.ts', './src/utils/proving'],
'screens-settings': ['./src/navigation/settings.ts'],
'screens-recovery': ['./src/navigation/recovery.ts'],
'screens-dev': ['./src/navigation/dev.ts'],
'screens-aesop': ['./src/navigation/aesop.ts'],
},
},
},

407
yarn.lock
View File

@@ -4636,7 +4636,6 @@ __metadata:
"@stablelib/cbor": "npm:^2.0.1"
"@tamagui/animations-css": "npm:^1.129.3"
"@tamagui/animations-react-native": "npm:^1.129.3"
"@tamagui/babel-plugin": "npm:^1.132.15"
"@tamagui/config": "npm:1.126.14"
"@tamagui/lucide-icons": "npm:1.126.14"
"@tamagui/toast": "npm:^1.127.2"
@@ -6933,21 +6932,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/animations-css@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/animations-css@npm:1.132.15"
dependencies:
"@tamagui/constants": "npm:1.132.15"
"@tamagui/cubic-bezier-animator": "npm:1.132.15"
"@tamagui/use-presence": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
peerDependencies:
react: "*"
react-dom: "*"
checksum: 10c0/5dd2d2b8bbf095301febd454a5b16d6db787bdf6cc8e140ee7652cc1b34123fbb2a479bce579673b0d7419fb693ae5f0986b4dc717b884616bc4e4f9ac944821
languageName: node
linkType: hard
"@tamagui/animations-css@npm:^1.129.3":
version: 1.129.3
resolution: "@tamagui/animations-css@npm:1.129.3"
@@ -6989,20 +6973,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/animations-react-native@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/animations-react-native@npm:1.132.15"
dependencies:
"@tamagui/constants": "npm:1.132.15"
"@tamagui/use-presence": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
peerDependencies:
react: "*"
react-native: "*"
checksum: 10c0/f72e794ad0b2ab691e9d48e24f95fb17248170b174b85a7d4f5b376132322f607d9c5132a36f87ec0e87402f5903068dc66d7c54141e5fe7d45164881869cfa7
languageName: node
linkType: hard
"@tamagui/animations-react-native@npm:^1.129.3":
version: 1.129.3
resolution: "@tamagui/animations-react-native@npm:1.129.3"
@@ -7051,20 +7021,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/babel-plugin@npm:^1.132.15":
version: 1.132.15
resolution: "@tamagui/babel-plugin@npm:1.132.15"
dependencies:
"@babel/core": "npm:^7.25.2"
"@babel/generator": "npm:^7.25.5"
"@babel/helper-plugin-utils": "npm:^7.24.8"
"@babel/template": "npm:^7.25.0"
"@babel/traverse": "npm:^7.25.4"
"@tamagui/static": "npm:1.132.15"
checksum: 10c0/ded194f046b2851c5eafff6291cddd40c3a1d27c400c92c5f8b956d2a32037752916a4d2dd1c3b3e77b8eb03251578a9441ff43a5137e732ab1fd080e61746db
languageName: node
linkType: hard
"@tamagui/build@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/build@npm:1.126.14"
@@ -7170,13 +7126,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/cli-color@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/cli-color@npm:1.132.15"
checksum: 10c0/7faf46d63e93ad3d1ad524590c2523292a6814c5794af519790886fccde7fff78982ccf3f94b5ad6cf0ac71a5abb4c604b658fdb006ffa90c36e96436bfc2273
languageName: node
linkType: hard
"@tamagui/collapsible@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/collapsible@npm:1.126.14"
@@ -7246,15 +7195,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/compose-refs@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/compose-refs@npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/a2c0c8f7fb74892113070017558a9dd608beaaa3745d004be149e05f0e564321b40dc7c340ab2962ff16a583713897a1fe2135150730234e42ccc5bae97c83e1
languageName: node
linkType: hard
"@tamagui/config-default@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/config-default@npm:1.126.14"
@@ -7266,19 +7206,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/config-default@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/config-default@npm:1.132.15"
dependencies:
"@tamagui/animations-css": "npm:1.132.15"
"@tamagui/animations-react-native": "npm:1.132.15"
"@tamagui/core": "npm:1.132.15"
"@tamagui/shorthands": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
checksum: 10c0/5cbe6683abcdf906c1a9e61b168a945297256302fc2d50b55230858957fa418115c2df133844e19f01df64438971c3d7ec648f580190f4b1ed75b86e6804afe1
languageName: node
linkType: hard
"@tamagui/config@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/config@npm:1.126.14"
@@ -7324,16 +7251,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/constants@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/constants@npm:1.132.15"
peerDependencies:
react: "*"
react-native: ^0.79.2
checksum: 10c0/a18e3dc0e2fb65aed5df4467b3e8447afde53be06055cea0964a474757008a1c5c5f8689cc54c41de6374d9b4aaf7587be469a31528394eb65db8ed271fd0bb8
languageName: node
linkType: hard
"@tamagui/core@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/core@npm:1.126.14"
@@ -7360,24 +7277,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/core@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/core@npm:1.132.15"
dependencies:
"@tamagui/helpers": "npm:1.132.15"
"@tamagui/react-native-media-driver": "npm:1.132.15"
"@tamagui/react-native-use-pressable": "npm:1.132.15"
"@tamagui/react-native-use-responder-events": "npm:1.132.15"
"@tamagui/use-element-layout": "npm:1.132.15"
"@tamagui/use-event": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
peerDependencies:
react: "*"
react-native: "*"
checksum: 10c0/c0e0c3c4abaeb81a467d851b26db563cd36516fb2dc179123acc9c3a2e633d401a3cf5bb8d32c9c3afc5a65f4212f6aab64e643b479351402525fc2b1e847f04
languageName: node
linkType: hard
"@tamagui/create-context@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/create-context@npm:1.126.14"
@@ -7405,15 +7304,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/create-theme@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/create-theme@npm:1.132.15"
dependencies:
"@tamagui/web": "npm:1.132.15"
checksum: 10c0/16476d110dadbf97e41d23cfca409eb5886053e456560637a02e6a03632a25b5f4d3d6250bcb0adac2018187378ca5be946a49ebd1e117fb2f5b7a486fcfac30
languageName: node
linkType: hard
"@tamagui/cubic-bezier-animator@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/cubic-bezier-animator@npm:1.126.14"
@@ -7428,13 +7318,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/cubic-bezier-animator@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/cubic-bezier-animator@npm:1.132.15"
checksum: 10c0/8c58aedb193073dd78c6ceb3e0d3fb8f11d46ab6d70af47e3ce2de0c4ab969e679b85ca76ca84c3af513f7dbd7e32d2e5bef1e539c00aaac672a2bf604c3a11e
languageName: node
linkType: hard
"@tamagui/dialog@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/dialog@npm:1.126.14"
@@ -7512,13 +7395,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/fake-react-native@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/fake-react-native@npm:1.132.15"
checksum: 10c0/61c3f2f7afa375f42adbfbbd5fcdd5019566262d05b6869e190db612bf55a5f9bbe5725faff23aa046916728515be9509570803c8a0a96508a351caee87beac6
languageName: node
linkType: hard
"@tamagui/floating@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/floating@npm:1.126.14"
@@ -7616,19 +7492,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/generate-themes@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/generate-themes@npm:1.132.15"
dependencies:
"@tamagui/create-theme": "npm:1.132.15"
"@tamagui/theme-builder": "npm:1.132.15"
"@tamagui/types": "npm:1.132.15"
esbuild-register: "npm:^3.6.0"
fs-extra: "npm:^11.2.0"
checksum: 10c0/dcaf96fe9ae056603f13484f3d73a45c8453fe55372f3696a43705d2cbb4012b39dd766f3af2b2768b1a3a12997ac6a05747f431244c8b9809e8ad5e797a9981
languageName: node
linkType: hard
"@tamagui/get-button-sized@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/get-button-sized@npm:1.126.14"
@@ -7712,15 +7575,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/helpers-node@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/helpers-node@npm:1.132.15"
dependencies:
"@tamagui/types": "npm:1.132.15"
checksum: 10c0/3d7f8696ee8304b15a979a76a2214c6eec946fca1138ef2183fa9e3b8d62235d73e9682a42f54f3825c4747a2bf9b0af8e355a55267616ceb3c1a38860e604f5
languageName: node
linkType: hard
"@tamagui/helpers-tamagui@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/helpers-tamagui@npm:1.126.14"
@@ -7775,18 +7629,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/helpers@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/helpers@npm:1.132.15"
dependencies:
"@tamagui/constants": "npm:1.132.15"
"@tamagui/simple-hash": "npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/d488ac52fffa10e30fe3a43e86c70950ecf184e597766ee9df874b47bc1634d7dc1fe4e877bb5c0349af3bc1c89c9cbb11183e97aec1e4c7ef1ddcc6afaf4559
languageName: node
linkType: hard
"@tamagui/image@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/image@npm:1.126.14"
@@ -7799,15 +7641,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/is-equal-shallow@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/is-equal-shallow@npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/8cf54bc19f889e96c9be47436b09ece6895c0f61dadbf3dce43ba525aa44b50d4c4af5de5747237d74a4bcfceb2632fe4861d0ed26f32726b83f44d1794165d2
languageName: node
linkType: hard
"@tamagui/label@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/label@npm:1.126.14"
@@ -7897,15 +7730,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/normalize-css-color@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/normalize-css-color@npm:1.132.15"
dependencies:
"@react-native/normalize-color": "npm:^2.1.0"
checksum: 10c0/63fe76c424fbdabaf5f973d1b319e212f91edf97c4a87b786a74f2761329a503b6dbfbb842785175d805d8cc659e40866a506608025bcfe909724e2a49efc7aa
languageName: node
linkType: hard
"@tamagui/polyfill-dev@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/polyfill-dev@npm:1.126.14"
@@ -8021,13 +7845,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/proxy-worm@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/proxy-worm@npm:1.132.15"
checksum: 10c0/0f544ea74d6fca2e416b806b21aa7e51f5236fd0ad1488ff450440c10942c55f7313ec0fb4745499ee8d876ed34b383250d382b7d9a1e6fe03b1c11027db2a01
languageName: node
linkType: hard
"@tamagui/radio-group@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/radio-group@npm:1.126.14"
@@ -8091,17 +7908,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/react-native-media-driver@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/react-native-media-driver@npm:1.132.15"
dependencies:
"@tamagui/web": "npm:1.132.15"
peerDependencies:
react-native: "*"
checksum: 10c0/f80d251713f987ecbd804a025b95c1439608190e70d3efcddf4e555fde7696efd8246c7f51e2a73ab1132fd68c96ebb21f647fb70e7e70df8f9fd565996e4ca2
languageName: node
linkType: hard
"@tamagui/react-native-svg@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/react-native-svg@npm:1.126.14"
@@ -8127,15 +7933,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/react-native-use-pressable@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/react-native-use-pressable@npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/296916cf29b25ba923e667bf6ff7fd30f92adc662a3ea6ea9c051ee01f145279c0354efbb23bb85206542862a0b611aac1246058baf1f4afffa4e74e1550e259
languageName: node
linkType: hard
"@tamagui/react-native-use-responder-events@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/react-native-use-responder-events@npm:1.126.14"
@@ -8154,15 +7951,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/react-native-use-responder-events@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/react-native-use-responder-events@npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/824987ab9dea059cbd020f977abe435eb621eafee472734509efc5b949a2caafe76404951b8c48eb115e234624ff86ec504c5d5fc414bf6f2c289038ce323158
languageName: node
linkType: hard
"@tamagui/react-native-web-internals@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/react-native-web-internals@npm:1.126.14"
@@ -8177,23 +7965,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/react-native-web-internals@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/react-native-web-internals@npm:1.132.15"
dependencies:
"@tamagui/normalize-css-color": "npm:1.132.15"
"@tamagui/react-native-use-pressable": "npm:1.132.15"
"@tamagui/react-native-use-responder-events": "npm:1.132.15"
"@tamagui/simple-hash": "npm:1.132.15"
"@tamagui/use-element-layout": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
peerDependencies:
react: "*"
react-dom: "*"
checksum: 10c0/28b78e183326914de87ad283c1ffcd1ef5d75b89646aaa9c3c5f5913f084ea2a08927a6bb39726834d62fce4fce8b9e086c447686b29cc71935bfbd73fe93be1
languageName: node
linkType: hard
"@tamagui/react-native-web-lite@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/react-native-web-lite@npm:1.126.14"
@@ -8209,24 +7980,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/react-native-web-lite@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/react-native-web-lite@npm:1.132.15"
dependencies:
"@tamagui/normalize-css-color": "npm:1.132.15"
"@tamagui/react-native-use-pressable": "npm:1.132.15"
"@tamagui/react-native-use-responder-events": "npm:1.132.15"
"@tamagui/react-native-web-internals": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
invariant: "npm:^2.2.4"
memoize-one: "npm:^6.0.0"
peerDependencies:
react: "*"
react-dom: "*"
checksum: 10c0/0d8e6fe271d10ec480c63eb3202ba33c3cee35da2b05f902e106784829172c4977d478c0289c431927ec2323f521f29fa05b9af34af8edd10f5d9057eefe9a83
languageName: node
linkType: hard
"@tamagui/remove-scroll@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/remove-scroll@npm:1.126.14"
@@ -8363,15 +8116,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/shorthands@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/shorthands@npm:1.132.15"
dependencies:
"@tamagui/web": "npm:1.132.15"
checksum: 10c0/f89f1768bb67d0c0f61add69cf79f8e0274e00837e0b66eef71715cb5c8e3e2b2bada6debb75f78674f00f716b379405e90c3e1fbeb80fb113cafdfb864ac7f9
languageName: node
linkType: hard
"@tamagui/simple-hash@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/simple-hash@npm:1.126.14"
@@ -8393,13 +8137,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/simple-hash@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/simple-hash@npm:1.132.15"
checksum: 10c0/9205253e058f2479bdd24b49909d9c5f296248e706732869fb797e174c98b40f5954a24852c032bbe23c97450f099d6807ab479acbe12bc8f58b760942e46041
languageName: node
linkType: hard
"@tamagui/slider@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/slider@npm:1.126.14"
@@ -8500,51 +8237,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/static@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/static@npm:1.132.15"
dependencies:
"@babel/core": "npm:^7.25.2"
"@babel/generator": "npm:^7.25.5"
"@babel/helper-plugin-utils": "npm:^7.24.8"
"@babel/parser": "npm:^7.25.4"
"@babel/plugin-transform-react-jsx": "npm:^7.25.2"
"@babel/runtime": "npm:^7.25.4"
"@babel/template": "npm:^7.25.0"
"@babel/traverse": "npm:^7.25.4"
"@babel/types": "npm:^7.25.4"
"@tamagui/cli-color": "npm:1.132.15"
"@tamagui/config-default": "npm:1.132.15"
"@tamagui/core": "npm:1.132.15"
"@tamagui/fake-react-native": "npm:1.132.15"
"@tamagui/generate-themes": "npm:1.132.15"
"@tamagui/helpers": "npm:1.132.15"
"@tamagui/helpers-node": "npm:1.132.15"
"@tamagui/proxy-worm": "npm:1.132.15"
"@tamagui/react-native-web-internals": "npm:1.132.15"
"@tamagui/react-native-web-lite": "npm:1.132.15"
"@tamagui/shorthands": "npm:1.132.15"
"@tamagui/types": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
babel-literal-to-ast: "npm:^2.1.0"
browserslist: "npm:^4.22.2"
check-dependency-version-consistency: "npm:^4.1.0"
esbuild: "npm:^0.25.0"
esbuild-register: "npm:^3.6.0"
fast-glob: "npm:^3.2.11"
find-cache-dir: "npm:^3.3.2"
find-root: "npm:^1.1.0"
fs-extra: "npm:^11.2.0"
invariant: "npm:^2.2.4"
js-yaml: "npm:^4.1.0"
react-native-web: "npm:^0.20.0"
peerDependencies:
react: "*"
react-native: ^0.79.2
checksum: 10c0/84e37da36f8bf53567d07019f354394ed752239af4f7316056539ddc0217370fd7e7bc0d3fe8ea450740ddefeb981f0d03dd481757ac95723cd3728ce8b0785b
languageName: node
linkType: hard
"@tamagui/switch-headless@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/switch-headless@npm:1.126.14"
@@ -8638,17 +8330,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/theme-builder@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/theme-builder@npm:1.132.15"
dependencies:
"@tamagui/create-theme": "npm:1.132.15"
"@tamagui/web": "npm:1.132.15"
color2k: "npm:^2.0.2"
checksum: 10c0/50847a9c7eaec324f9374eb57fd385191379034f550a7631ca283dbb69bfe18788b19457f4c66efa9c043c89980176274f0fab9f61527dcf907e36f7b9f91770
languageName: node
linkType: hard
"@tamagui/theme@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/theme@npm:1.126.14"
@@ -8695,13 +8376,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/timer@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/timer@npm:1.132.15"
checksum: 10c0/0ee4539e6ec3f06fc4899e1a0bcb6c7a68dc1d9a64cbceb311aad10051e47bb9b7fe1169fdf461c33767c747359824f8a2e82cf6b18d30b70a9aff8be7befc27
languageName: node
linkType: hard
"@tamagui/toast@npm:^1.127.2":
version: 1.127.2
resolution: "@tamagui/toast@npm:1.127.2"
@@ -8793,13 +8467,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/types@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/types@npm:1.132.15"
checksum: 10c0/1b953991981d7a980b4c2130dedcb578fccc440e2c7ff762f03fb49667ae2ed14eaaf266f01eaf256dbc20a23028845c77ee7deb6af1cafe36708332347398ee
languageName: node
linkType: hard
"@tamagui/use-callback-ref@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/use-callback-ref@npm:1.126.14"
@@ -8892,15 +8559,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/use-did-finish-ssr@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/use-did-finish-ssr@npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/8cd0b97e5948a743a6d7517f731a65104fdb2443f5c159521e07a8924ed6eb449423ac0dd4a140b6593a9545014751b7b66f9b4c0349f7c81be67fc2b967b927
languageName: node
linkType: hard
"@tamagui/use-direction@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/use-direction@npm:1.126.14"
@@ -8910,18 +8568,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/use-element-layout@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/use-element-layout@npm:1.132.15"
dependencies:
"@tamagui/constants": "npm:1.132.15"
"@tamagui/is-equal-shallow": "npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/1faefa505a930649c6a69775af4d936b877c579d7f1307fcc252c734b35f5eee0a8dbb437da6697a905aeb9cc2d3e07206ab57e95e389fce3f0ee908c6d5b3d0
languageName: node
linkType: hard
"@tamagui/use-escape-keydown@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/use-escape-keydown@npm:1.126.14"
@@ -8973,17 +8619,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/use-event@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/use-event@npm:1.132.15"
dependencies:
"@tamagui/constants": "npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/6de3648cc71a088aa3b65a2423b25d58880cc20dc589ff96948a27834721dc961d8c3b2742b3da050ccfc2aca01c0ea147def6fa7e5f9fc9919837a2f26c03cc
languageName: node
linkType: hard
"@tamagui/use-force-update@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/use-force-update@npm:1.126.14"
@@ -9011,15 +8646,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/use-force-update@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/use-force-update@npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/4d71fd46d33281a1b04c77809c6cfef15a385a1bcdc4195979b417a4a42828157bca7cf14e9b658d7aee08b44a6b8abcbfb48b7badc09e6a725bd78cd6d77e7d
languageName: node
linkType: hard
"@tamagui/use-keyboard-visible@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/use-keyboard-visible@npm:1.126.14"
@@ -9062,17 +8688,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/use-presence@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/use-presence@npm:1.132.15"
dependencies:
"@tamagui/web": "npm:1.132.15"
peerDependencies:
react: "*"
checksum: 10c0/178602715af06f5215a2afc7d7a16ba1f2a5591bd7b067adb6a272fefd9340bad087156381c0b440cbb3a00ff22ce191191849ff27033f3c315640987b557356
languageName: node
linkType: hard
"@tamagui/use-previous@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/use-previous@npm:1.126.14"
@@ -9192,28 +8807,6 @@ __metadata:
languageName: node
linkType: hard
"@tamagui/web@npm:1.132.15":
version: 1.132.15
resolution: "@tamagui/web@npm:1.132.15"
dependencies:
"@tamagui/compose-refs": "npm:1.132.15"
"@tamagui/constants": "npm:1.132.15"
"@tamagui/helpers": "npm:1.132.15"
"@tamagui/is-equal-shallow": "npm:1.132.15"
"@tamagui/normalize-css-color": "npm:1.132.15"
"@tamagui/timer": "npm:1.132.15"
"@tamagui/types": "npm:1.132.15"
"@tamagui/use-did-finish-ssr": "npm:1.132.15"
"@tamagui/use-event": "npm:1.132.15"
"@tamagui/use-force-update": "npm:1.132.15"
peerDependencies:
react: "*"
react-dom: "*"
react-native: "*"
checksum: 10c0/f43ed3989dfedf34e40070fbd78641ccd1198a93ed4bf87b75af59be94d5fa0e0035804dfbbaa6acaf3c89b00a0e27eb1e2eb6e4bc70f77a6851b9a1bbb46f90
languageName: node
linkType: hard
"@tamagui/z-index-stack@npm:1.126.14":
version: 1.126.14
resolution: "@tamagui/z-index-stack@npm:1.126.14"