From 9df3e65a424ca37fe3f70cd9195aae632215dc1c Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sat, 14 Mar 2026 04:02:39 -0400 Subject: [PATCH 01/13] feat: add web support via CSS transitions Implement EaseView.web.tsx that uses CSS transitions for timing animations, CSS @keyframes for loop animations, and a timing approximation for springs. React Native's .web.tsx resolution automatically picks this up on web. --- src/EaseView.web.tsx | 277 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 src/EaseView.web.tsx diff --git a/src/EaseView.web.tsx b/src/EaseView.web.tsx new file mode 100644 index 0000000..26c02dc --- /dev/null +++ b/src/EaseView.web.tsx @@ -0,0 +1,277 @@ +/// +import React, { useEffect, useRef, useState, useCallback } from 'react'; +import type { + AnimateProps, + CubicBezier, + Transition, + TransitionEndEvent, + TransformOrigin, +} from './types'; + +/** Identity values used as defaults for animate/initialAnimate. */ +const IDENTITY: Required> = { + opacity: 1, + translateX: 0, + translateY: 0, + scaleX: 1, + scaleY: 1, + rotate: 0, + rotateX: 0, + rotateY: 0, + borderRadius: 0, +}; + +/** Preset easing curves as cubic bezier control points. */ +const EASING_PRESETS: Record = { + linear: [0, 0, 1, 1], + easeIn: [0.42, 0, 1, 1], + easeOut: [0, 0, 0.58, 1], + easeInOut: [0.42, 0, 0.58, 1], +}; + +export type EaseViewProps = { + animate?: AnimateProps; + initialAnimate?: AnimateProps; + transition?: Transition; + onTransitionEnd?: (event: TransitionEndEvent) => void; + /** No-op on web. */ + useHardwareLayer?: boolean; + transformOrigin?: TransformOrigin; + style?: React.CSSProperties; + children?: React.ReactNode; +} & Omit, 'style'>; + +function resolveAnimateValues(props: AnimateProps | undefined): Required< + Omit +> & { + backgroundColor?: string; +} { + return { + ...IDENTITY, + ...props, + scaleX: props?.scaleX ?? props?.scale ?? IDENTITY.scaleX, + scaleY: props?.scaleY ?? props?.scale ?? IDENTITY.scaleY, + rotateX: props?.rotateX ?? IDENTITY.rotateX, + rotateY: props?.rotateY ?? IDENTITY.rotateY, + backgroundColor: props?.backgroundColor as string | undefined, + }; +} + +function buildTransform(vals: ReturnType): string { + const parts: string[] = []; + if (vals.translateX !== 0 || vals.translateY !== 0) { + parts.push(`translate(${vals.translateX}px, ${vals.translateY}px)`); + } + if (vals.scaleX !== 1 || vals.scaleY !== 1) { + parts.push( + vals.scaleX === vals.scaleY + ? `scale(${vals.scaleX})` + : `scale(${vals.scaleX}, ${vals.scaleY})`, + ); + } + if (vals.rotate !== 0) { + parts.push(`rotate(${vals.rotate}deg)`); + } + if (vals.rotateX !== 0) { + parts.push(`rotateX(${vals.rotateX}deg)`); + } + if (vals.rotateY !== 0) { + parts.push(`rotateY(${vals.rotateY}deg)`); + } + return parts.length > 0 ? parts.join(' ') : 'none'; +} + +function resolveEasing(transition: Transition | undefined): string { + if (!transition || transition.type !== 'timing') { + return 'cubic-bezier(0.42, 0, 0.58, 1)'; + } + const easing = transition.easing ?? 'easeInOut'; + const bezier: CubicBezier = Array.isArray(easing) + ? easing + : EASING_PRESETS[easing]!; + return `cubic-bezier(${bezier[0]}, ${bezier[1]}, ${bezier[2]}, ${bezier[3]})`; +} + +function resolveDuration(transition: Transition | undefined): number { + if (!transition) return 300; + if (transition.type === 'timing') return transition.duration ?? 300; + if (transition.type === 'none') return 0; + // Spring type: approximate duration from damping/stiffness/mass. + // A critically-damped spring settles in ~4-5 time constants. + // tau = 2 * mass / damping, settle ~ 4 * tau + const damping = transition.damping ?? 15; + const mass = transition.mass ?? 1; + const tau = (2 * mass) / damping; + return Math.round(tau * 4 * 1000); +} + +/** CSS transition properties that we animate. */ +const TRANSITION_PROPS = [ + 'opacity', + 'transform', + 'border-radius', + 'background-color', +]; + +/** Counter for unique keyframe names. */ +let keyframeCounter = 0; + +export function EaseView({ + animate, + initialAnimate, + transition, + onTransitionEnd, + useHardwareLayer: _useHardwareLayer, + transformOrigin, + style, + children, + ...rest +}: EaseViewProps) { + const resolved = resolveAnimateValues(animate); + const hasInitial = initialAnimate != null; + const [mounted, setMounted] = useState(!hasInitial); + const divRef = useRef(null); + const animationNameRef = useRef(null); + + // For initialAnimate: render initial values first, then animate on mount. + useEffect(() => { + if (hasInitial) { + // Force a layout read to flush initial styles before enabling transitions. + divRef.current?.getBoundingClientRect(); + setMounted(true); + } + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + // Handle transitionend event. + const handleTransitionEnd = useCallback( + (e: React.TransitionEvent) => { + // Only fire for our own transitions, not children bubbling up. + if (e.target !== e.currentTarget) return; + // Fire once per batch — use opacity as the sentinel property. + if (e.propertyName !== 'opacity' && e.propertyName !== 'transform') + return; + onTransitionEnd?.({ finished: true }); + }, + [onTransitionEnd], + ); + + // Determine which values to render. + const displayValues = + !mounted && hasInitial ? resolveAnimateValues(initialAnimate) : resolved; + + const duration = resolveDuration(transition); + const easing = resolveEasing(transition); + + // Build computed styles. + const transformStr = buildTransform(displayValues); + const originX = ((transformOrigin?.x ?? 0.5) * 100).toFixed(1); + const originY = ((transformOrigin?.y ?? 0.5) * 100).toFixed(1); + + const transitionType = transition?.type ?? 'timing'; + const loopMode = transition?.type === 'timing' ? transition.loop : undefined; + + // Build CSS transition string. + const transitionCss = + transitionType === 'none' || (!mounted && hasInitial) + ? 'none' + : TRANSITION_PROPS.map((prop) => `${prop} ${duration}ms ${easing}`).join( + ', ', + ); + + // Handle loop animations via CSS @keyframes. + useEffect(() => { + const el = divRef.current; + if (!loopMode || !el) { + // Clean up any existing animation. + if (animationNameRef.current && el) { + el.style.animation = ''; + animationNameRef.current = null; + } + return; + } + + const fromValues = initialAnimate + ? resolveAnimateValues(initialAnimate) + : resolveAnimateValues(undefined); + const toValues = resolveAnimateValues(animate); + + const fromTransform = buildTransform(fromValues); + const toTransform = buildTransform(toValues); + + const name = `ease-loop-${++keyframeCounter}`; + animationNameRef.current = name; + + const fromBlock = [ + `opacity: ${fromValues.opacity}`, + `transform: ${fromTransform}`, + `border-radius: ${fromValues.borderRadius}px`, + fromValues.backgroundColor + ? `background-color: ${fromValues.backgroundColor}` + : '', + ] + .filter(Boolean) + .join('; '); + + const toBlock = [ + `opacity: ${toValues.opacity}`, + `transform: ${toTransform}`, + `border-radius: ${toValues.borderRadius}px`, + toValues.backgroundColor + ? `background-color: ${toValues.backgroundColor}` + : '', + ] + .filter(Boolean) + .join('; '); + + const keyframes = `@keyframes ${name} { from { ${fromBlock} } to { ${toBlock} } }`; + + const styleEl = document.createElement('style'); + styleEl.textContent = keyframes; + document.head.appendChild(styleEl); + + const direction = loopMode === 'reverse' ? 'alternate' : 'normal'; + el.style.animation = `${name} ${duration}ms ${easing} infinite ${direction}`; + + return () => { + styleEl.remove(); + el.style.animation = ''; + animationNameRef.current = null; + }; + }, [loopMode, animate, initialAnimate, duration, easing]); + + const computedStyle: React.CSSProperties = { + ...style, + opacity: displayValues.opacity, + transform: transformStr, + transformOrigin: `${originX}% ${originY}%`, + borderRadius: + displayValues.borderRadius > 0 + ? displayValues.borderRadius + : style?.borderRadius, + backgroundColor: displayValues.backgroundColor ?? style?.backgroundColor, + transition: loopMode ? 'none' : transitionCss, + // Spring approximation: use the same CSS transition with estimated duration. + // CSS does not natively support spring physics, so this is a best-effort + // timing approximation using an ease-out curve for a spring-like feel. + ...(transitionType === 'spring' && !loopMode + ? { + transition: TRANSITION_PROPS.map( + (prop) => + `${prop} ${duration}ms cubic-bezier(0.25, 0.46, 0.45, 0.94)`, + ).join(', '), + } + : {}), + willChange: 'transform, opacity', + }; + + return ( +
+ {children} +
+ ); +} From 3055a3d590d8c31aef872656eb88c836271225b9 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 03:03:36 -0400 Subject: [PATCH 02/13] feat(example): add Expo for web support Install expo and web dependencies (react-dom, react-native-web, @expo/metro-runtime) to enable running the example app on web via `npx expo start --web`. --- example/.gitignore | 5 + example/android/app/build.gradle | 5 + .../main/java/ease/example/MainActivity.kt | 3 +- .../main/java/ease/example/MainApplication.kt | 11 +- example/android/build.gradle | 1 + example/android/settings.gradle | 20 +- example/app.json | 11 +- example/babel.config.js | 2 +- .../ios/EaseExample.xcodeproj/project.pbxproj | 12 +- example/ios/EaseExample/AppDelegate.swift | 16 +- example/ios/Podfile | 20 +- example/metro.config.js | 2 +- example/package.json | 7 + example/tsconfig.json | 4 + yarn.lock | 2200 ++++++++++++++++- 15 files changed, 2239 insertions(+), 80 deletions(-) create mode 100644 example/.gitignore create mode 100644 example/tsconfig.json diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 0000000..1d9a9ca --- /dev/null +++ b/example/.gitignore @@ -0,0 +1,5 @@ + +# Expo +.expo +dist/ +web-build/ \ No newline at end of file diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index b3ec8a1..e064721 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -52,6 +52,11 @@ react { /* Autolinking */ autolinkLibrariesWithApp() + // + // Added by install-expo-modules + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", rootDir.getAbsoluteFile().getParentFile().getAbsolutePath(), "android", "absolute"].execute(null, rootDir).text.trim()) + cliFile = new File(["node", "--print", "require.resolve('@expo/cli')"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" } /** diff --git a/example/android/app/src/main/java/ease/example/MainActivity.kt b/example/android/app/src/main/java/ease/example/MainActivity.kt index 694ca07..5c49a3a 100644 --- a/example/android/app/src/main/java/ease/example/MainActivity.kt +++ b/example/android/app/src/main/java/ease/example/MainActivity.kt @@ -1,4 +1,5 @@ package ease.example +import expo.modules.ReactActivityDelegateWrapper import com.facebook.react.ReactActivity import com.facebook.react.ReactActivityDelegate @@ -18,5 +19,5 @@ class MainActivity : ReactActivity() { * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] */ override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) + ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)) } diff --git a/example/android/app/src/main/java/ease/example/MainApplication.kt b/example/android/app/src/main/java/ease/example/MainApplication.kt index 80f631e..7805a5f 100644 --- a/example/android/app/src/main/java/ease/example/MainApplication.kt +++ b/example/android/app/src/main/java/ease/example/MainApplication.kt @@ -1,4 +1,7 @@ package ease.example +import android.content.res.Configuration +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ExpoReactHostFactory import android.app.Application import com.facebook.react.PackageList @@ -10,7 +13,7 @@ import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost class MainApplication : Application(), ReactApplication { override val reactHost: ReactHost by lazy { - getDefaultReactHost( + ExpoReactHostFactory.getDefaultReactHost( context = applicationContext, packageList = PackageList(this).packages.apply { @@ -23,5 +26,11 @@ class MainApplication : Application(), ReactApplication { override fun onCreate() { super.onCreate() loadReactNative(this) + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) } } diff --git a/example/android/build.gradle b/example/android/build.gradle index dad99b0..d7e8f5a 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -19,3 +19,4 @@ buildscript { } apply plugin: "com.facebook.react.rootproject" +apply plugin: "expo-root-project" diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 37b81c4..944d053 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,6 +1,20 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } +pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") + def expoPluginsPath = new File( + providers.exec { + workingDir(rootDir) + commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })") + }.standardOutput.asText.get().trim(), + "../android/expo-gradle-plugin" + ).absolutePath + includeBuild(expoPluginsPath) +} +plugins { id("com.facebook.react.settings") +id("expo-autolinking-settings") +} +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) } rootProject.name = 'ease.example' include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') +expoAutolinking.useExpoModules() +expoAutolinking.useExpoVersionCatalog() +includeBuild(expoAutolinking.reactNativeGradlePlugin) diff --git a/example/app.json b/example/app.json index c26b96d..6b557c1 100644 --- a/example/app.json +++ b/example/app.json @@ -1,4 +1,13 @@ { "name": "EaseExample", - "displayName": "EaseExample" + "displayName": "EaseExample", + "expo": { + "name": "EaseExample", + "slug": "ease-example", + "version": "1.0.0", + "web": { + "bundler": "metro" + }, + "platforms": ["ios", "android", "web"] + } } diff --git a/example/babel.config.js b/example/babel.config.js index d29eac4..1c1ba27 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -6,7 +6,7 @@ const root = path.resolve(__dirname, '..'); module.exports = getConfig( { - presets: ['module:@react-native/babel-preset'], + presets: ['babel-preset-expo'], plugins: ['react-native-worklets/plugin'], }, { root, pkg }, diff --git a/example/ios/EaseExample.xcodeproj/project.pbxproj b/example/ios/EaseExample.xcodeproj/project.pbxproj index 4048774..04c6db9 100644 --- a/example/ios/EaseExample.xcodeproj/project.pbxproj +++ b/example/ios/EaseExample.xcodeproj/project.pbxproj @@ -67,7 +67,7 @@ name = Libraries; sourceTree = ""; }; - 83CBB9F61A601CBA00E9B192 = { + 83CBB9F61A601CBA00E9B192 /* PBXGroup */ = { isa = PBXGroup; children = ( 13B07FAE1A68108700A75B9A /* EaseExample */, @@ -125,7 +125,7 @@ /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { + 83CBB9F71A601CBA00E9B192 = { isa = PBXProject; attributes = { LastUpgradeCheck = 1210; @@ -143,7 +143,7 @@ en, Base, ); - mainGroup = 83CBB9F61A601CBA00E9B192; + mainGroup = 83CBB9F61A601CBA00E9B192 /* PBXGroup */; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -181,7 +181,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"\\\"$WITH_ENVIRONMENT\\\" \\\"$REACT_NATIVE_XCODE\\\"\"\n"; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n"; }; 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; @@ -381,6 +381,7 @@ SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; USE_HERMES = true; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -450,6 +451,7 @@ SDKROOT = iphoneos; USE_HERMES = true; VALIDATE_PRODUCT = YES; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -476,5 +478,5 @@ }; /* End XCConfigurationList section */ }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; + rootObject = 83CBB9F71A601CBA00E9B192; } diff --git a/example/ios/EaseExample/AppDelegate.swift b/example/ios/EaseExample/AppDelegate.swift index 26d8e16..44ac4a4 100644 --- a/example/ios/EaseExample/AppDelegate.swift +++ b/example/ios/EaseExample/AppDelegate.swift @@ -1,21 +1,22 @@ import UIKit +internal import Expo import React import React_RCTAppDelegate import ReactAppDependencyProvider @main -class AppDelegate: UIResponder, UIApplicationDelegate { +class AppDelegate: ExpoAppDelegate { var window: UIWindow? var reactNativeDelegate: ReactNativeDelegate? var reactNativeFactory: RCTReactNativeFactory? - func application( + override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) + let factory = ExpoReactNativeFactory(delegate: delegate) delegate.dependencyProvider = RCTAppDependencyProvider() reactNativeDelegate = delegate @@ -29,18 +30,19 @@ class AppDelegate: UIResponder, UIApplicationDelegate { launchOptions: launchOptions ) - return true + return super.application(application, didFinishLaunchingWithOptions: launchOptions) } } -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { +class ReactNativeDelegate: ExpoReactNativeFactoryDelegate { override func sourceURL(for bridge: RCTBridge) -> URL? { - self.bundleURL() + // needed to return the correct URL for expo-dev-client. + bridge.bundleURL ?? bundleURL() } override func bundleURL() -> URL? { #if DEBUG - RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") + RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: ".expo/.virtual-metro-entry") #else Bundle.main.url(forResource: "main", withExtension: "jsbundle") #endif diff --git a/example/ios/Podfile b/example/ios/Podfile index f37a789..7f64b71 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,3 +1,4 @@ +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") ENV['RCT_NEW_ARCH_ENABLED'] = '1' # Resolve react_native_pods.rb with node to allow for hoisting @@ -17,7 +18,24 @@ if linkage != nil end target 'EaseExample' do - config = use_native_modules! + use_expo_modules! + + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'ios' + ] + end + + config = use_native_modules!(config_command) use_react_native!( :path => config[:reactNativePath], diff --git a/example/metro.config.js b/example/metro.config.js index aa9a381..74734e4 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -1,5 +1,5 @@ const path = require('path'); -const { getDefaultConfig } = require('@react-native/metro-config'); +const { getDefaultConfig } = require('expo/metro-config'); const { withMetroConfig } = require('react-native-monorepo-config'); const root = path.resolve(__dirname, '..'); diff --git a/example/package.json b/example/package.json index 22e531f..1eec9f3 100644 --- a/example/package.json +++ b/example/package.json @@ -10,10 +10,14 @@ "build:ios": "react-native build-ios --mode Debug" }, "dependencies": { + "@expo/metro-runtime": "~55.0.6", + "expo": "~55.0.0", "react": "19.2.0", + "react-dom": "19.2.0", "react-native": "0.83.0", "react-native-reanimated": "^4.2.2", "react-native-safe-area-context": "^5.7.0", + "react-native-web": "^0.21.0", "react-native-worklets": "^0.7.4" }, "devDependencies": { @@ -27,6 +31,9 @@ "@react-native/metro-config": "0.83.0", "@react-native/typescript-config": "0.83.0", "@types/react": "^19.2.0", + "@types/react-dom": "^19", + "@types/react-native-web": "^0", + "babel-preset-expo": "~55.0.8", "react-native-builder-bob": "^0.40.18", "react-native-monorepo-config": "^0.3.3" }, diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..0e6371f --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,4 @@ +{ + "compilerOptions": {}, + "extends": "expo/tsconfig.base" +} diff --git a/yarn.lock b/yarn.lock index 3572ffb..2c4001e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,7 +21,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.20.0, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": version: 7.29.0 resolution: "@babel/code-frame@npm:7.29.0" dependencies: @@ -39,7 +39,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.2, @babel/core@npm:^7.27.4": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.20.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.2, @babel/core@npm:^7.27.4": version: 7.29.0 resolution: "@babel/core@npm:7.29.0" dependencies: @@ -76,7 +76,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1": +"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1": version: 7.29.1 resolution: "@babel/generator@npm:7.29.1" dependencies: @@ -173,7 +173,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.28.6": +"@babel/helper-module-imports@npm:^7.25.9, @babel/helper-module-imports@npm:^7.28.6": version: 7.28.6 resolution: "@babel/helper-module-imports@npm:7.28.6" dependencies: @@ -360,6 +360,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-decorators@npm:^7.12.9": + version: 7.29.0 + resolution: "@babel/plugin-proposal-decorators@npm:7.29.0" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-syntax-decorators": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b397506fb245374544e2c52909dcbd2193b0327594e3493ea4a47d8a22f6991a90128900d6ee3b129be5246ee08b0d07c8796cfb60502aacf20ac52cc6a92b68 + languageName: node + linkType: hard + "@babel/plugin-proposal-export-default-from@npm:^7.24.7": version: 7.27.1 resolution: "@babel/plugin-proposal-export-default-from@npm:7.27.1" @@ -424,6 +437,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-decorators@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-decorators@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd12119646f65e156709d1d6f4949758de36a4192c5c3057b5a5972b896386da5411a763aba087691edf539808616b254b84084b3340cff6e7968f9cab5004dd + languageName: node + linkType: hard + "@babel/plugin-syntax-dynamic-import@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" @@ -706,7 +730,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.28.6": +"@babel/plugin-transform-class-static-block@npm:^7.27.1, @babel/plugin-transform-class-static-block@npm:^7.28.6": version: 7.28.6 resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" dependencies: @@ -843,7 +867,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": +"@babel/plugin-transform-export-namespace-from@npm:^7.25.9, @babel/plugin-transform-export-namespace-from@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" dependencies: @@ -1493,7 +1517,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.24.7": +"@babel/preset-react@npm:^7.22.15, @babel/preset-react@npm:^7.24.7": version: 7.28.5 resolution: "@babel/preset-react@npm:7.28.5" dependencies: @@ -1524,7 +1548,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.24.7": +"@babel/preset-typescript@npm:^7.23.0, @babel/preset-typescript@npm:^7.24.7": version: 7.28.5 resolution: "@babel/preset-typescript@npm:7.28.5" dependencies: @@ -1539,7 +1563,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.25.0": +"@babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.25.0": version: 7.28.6 resolution: "@babel/runtime@npm:7.28.6" checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d @@ -1557,7 +1581,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.4, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.4, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": version: 7.29.0 resolution: "@babel/traverse@npm:7.29.0" dependencies: @@ -1572,7 +1596,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.2, @babel/types@npm:^7.26.0, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.29.0 resolution: "@babel/types@npm:7.29.0" dependencies: @@ -1929,6 +1953,493 @@ __metadata: languageName: node linkType: hard +"@expo/cli@npm:55.0.16": + version: 55.0.16 + resolution: "@expo/cli@npm:55.0.16" + dependencies: + "@expo/code-signing-certificates": "npm:^0.0.6" + "@expo/config": "npm:~55.0.8" + "@expo/config-plugins": "npm:~55.0.6" + "@expo/devcert": "npm:^1.2.1" + "@expo/env": "npm:~2.1.1" + "@expo/image-utils": "npm:^0.8.12" + "@expo/json-file": "npm:^10.0.12" + "@expo/log-box": "npm:55.0.7" + "@expo/metro": "npm:~54.2.0" + "@expo/metro-config": "npm:~55.0.9" + "@expo/osascript": "npm:^2.4.2" + "@expo/package-manager": "npm:^1.10.3" + "@expo/plist": "npm:^0.5.2" + "@expo/prebuild-config": "npm:^55.0.8" + "@expo/require-utils": "npm:^55.0.2" + "@expo/router-server": "npm:^55.0.10" + "@expo/schema-utils": "npm:^55.0.2" + "@expo/spawn-async": "npm:^1.7.2" + "@expo/ws-tunnel": "npm:^1.0.1" + "@expo/xcpretty": "npm:^4.4.0" + "@react-native/dev-middleware": "npm:0.83.2" + accepts: "npm:^1.3.8" + arg: "npm:^5.0.2" + better-opn: "npm:~3.0.2" + bplist-creator: "npm:0.1.0" + bplist-parser: "npm:^0.3.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.3.0" + compression: "npm:^1.7.4" + connect: "npm:^3.7.0" + debug: "npm:^4.3.4" + dnssd-advertise: "npm:^1.1.3" + expo-server: "npm:^55.0.6" + fetch-nodeshim: "npm:^0.4.6" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + lan-network: "npm:^0.2.0" + multitars: "npm:^0.2.3" + node-forge: "npm:^1.3.3" + npm-package-arg: "npm:^11.0.0" + ora: "npm:^3.4.0" + picomatch: "npm:^4.0.3" + pretty-format: "npm:^29.7.0" + progress: "npm:^2.0.3" + prompts: "npm:^2.3.2" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + send: "npm:^0.19.0" + slugify: "npm:^1.3.4" + source-map-support: "npm:~0.5.21" + stacktrace-parser: "npm:^0.1.10" + structured-headers: "npm:^0.4.1" + terminal-link: "npm:^2.1.1" + toqr: "npm:^0.1.1" + wrap-ansi: "npm:^7.0.0" + ws: "npm:^8.12.1" + zod: "npm:^3.25.76" + peerDependencies: + expo: "*" + expo-router: "*" + react-native: "*" + peerDependenciesMeta: + expo-router: + optional: true + react-native: + optional: true + bin: + expo-internal: build/bin/cli + checksum: 10c0/a82be8f8ac24e2ba6df3dc1b9d7079c99a15b28e2950c1b1fc97e1a3185f71852dbb0176e6ef7f30856d2601ac57107b13c374c102a71ce6e6f9665025e161e6 + languageName: node + linkType: hard + +"@expo/code-signing-certificates@npm:^0.0.6": + version: 0.0.6 + resolution: "@expo/code-signing-certificates@npm:0.0.6" + dependencies: + node-forge: "npm:^1.3.3" + checksum: 10c0/3c60be55fb056ccebf7355c1dbe959cee191eaa1c33c6ff5a7331c1ffe1cfa66edc6b62e8005b4a9023bbd40462d81d35284e79eaa8893facb2493801685bbea + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~55.0.6": + version: 55.0.6 + resolution: "@expo/config-plugins@npm:55.0.6" + dependencies: + "@expo/config-types": "npm:^55.0.5" + "@expo/json-file": "npm:~10.0.12" + "@expo/plist": "npm:^0.5.2" + "@expo/sdk-runtime-versions": "npm:^1.0.0" + chalk: "npm:^4.1.2" + debug: "npm:^4.3.5" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.4" + slugify: "npm:^1.6.6" + xcode: "npm:^3.0.1" + xml2js: "npm:0.6.0" + checksum: 10c0/1292600b50f28ba42b4a3b43238eb99a2ae3703fb86c1ebeb8235c1f0db2738bac79a0ff6107acf9dc448baefc5f6209517369614056f5b13f927345e86fcc2b + languageName: node + linkType: hard + +"@expo/config-types@npm:^55.0.5": + version: 55.0.5 + resolution: "@expo/config-types@npm:55.0.5" + checksum: 10c0/24ce0481cc465ddd3b53cfdde099ef4e899b1f8fff224a0f249b88c93e6c98930e99a55f3929eb53d08138b1b66102ece7b76e16f4e5fadcdf5bbac26c9c3d7e + languageName: node + linkType: hard + +"@expo/config@npm:~55.0.8": + version: 55.0.8 + resolution: "@expo/config@npm:55.0.8" + dependencies: + "@expo/config-plugins": "npm:~55.0.6" + "@expo/config-types": "npm:^55.0.5" + "@expo/json-file": "npm:^10.0.12" + "@expo/require-utils": "npm:^55.0.2" + deepmerge: "npm:^4.3.1" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + resolve-from: "npm:^5.0.0" + resolve-workspace-root: "npm:^2.0.0" + semver: "npm:^7.6.0" + slugify: "npm:^1.3.4" + checksum: 10c0/f671126b61bc2eef08ef38ad9ac55d0bc48fe18d9cd73503f7ee96934b59b3de176a62ddc79d4ef1558ba0c5d351e805445702b76f956e21d02e75a3d97f7ae7 + languageName: node + linkType: hard + +"@expo/devcert@npm:^1.2.1": + version: 1.2.1 + resolution: "@expo/devcert@npm:1.2.1" + dependencies: + "@expo/sudo-prompt": "npm:^9.3.1" + debug: "npm:^3.1.0" + checksum: 10c0/7c5cb4fa74a14702a44b4772a56f27fd191b6cd08988f3da01323f6d592623c80247171b7d66b2c0a32408f48a0814162dbb2764042444887f27e38b89ad1051 + languageName: node + linkType: hard + +"@expo/devtools@npm:55.0.2": + version: 55.0.2 + resolution: "@expo/devtools@npm:55.0.2" + dependencies: + chalk: "npm:^4.1.2" + peerDependencies: + react: "*" + react-native: "*" + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true + checksum: 10c0/f247e2a5d2c3129d8b0dbee6daa4a5bca5103d5e3a177257522a89661deb598d84af9805d302cc0af166635604a57fa73b38ff1304b5921b17d0bd372b459686 + languageName: node + linkType: hard + +"@expo/dom-webview@npm:^55.0.3": + version: 55.0.3 + resolution: "@expo/dom-webview@npm:55.0.3" + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 10c0/db27b9f464042cdbf33458b7523e0f5024c855b4a6a219ade7245a8e44688a3764679375761809d8d1bd7edf7eca1ad8b6ae7a75a1c8720d2fd5c95bc6a041bc + languageName: node + linkType: hard + +"@expo/env@npm:^2.0.11, @expo/env@npm:~2.1.1": + version: 2.1.1 + resolution: "@expo/env@npm:2.1.1" + dependencies: + chalk: "npm:^4.0.0" + debug: "npm:^4.3.4" + getenv: "npm:^2.0.0" + checksum: 10c0/c863fb05f16e0ffaac10ba0e5f632472c94ff755e5bfea1ce31820a17efc21dc932ccf8d307793187c752e85e151fe0579cc9038db5abc12f4b650174b182cbe + languageName: node + linkType: hard + +"@expo/fingerprint@npm:0.16.6": + version: 0.16.6 + resolution: "@expo/fingerprint@npm:0.16.6" + dependencies: + "@expo/env": "npm:^2.0.11" + "@expo/spawn-async": "npm:^1.7.2" + arg: "npm:^5.0.2" + chalk: "npm:^4.1.2" + debug: "npm:^4.3.4" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + ignore: "npm:^5.3.1" + minimatch: "npm:^10.2.2" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + bin: + fingerprint: bin/cli.js + checksum: 10c0/18f597e71aa2fa75ca72c59f81a825df5a0262b27d82b948b2d2a6edd11fa7a3a7f6daccef9d4d92224577631a1a15afd02ce7e0568a8a6db4738704706906fe + languageName: node + linkType: hard + +"@expo/image-utils@npm:^0.8.12": + version: 0.8.12 + resolution: "@expo/image-utils@npm:0.8.12" + dependencies: + "@expo/spawn-async": "npm:^1.7.2" + chalk: "npm:^4.0.0" + getenv: "npm:^2.0.0" + jimp-compact: "npm:0.16.1" + parse-png: "npm:^2.1.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + checksum: 10c0/f9ea7b8ac746602e824e6f5005242a400fce59f776caed05d27e3aa8a8354059ce44d0c3d50f6c1aa4e3256282f504150d0ea62c86e6cae5bacc626d530a35f6 + languageName: node + linkType: hard + +"@expo/json-file@npm:^10.0.12, @expo/json-file@npm:~10.0.12": + version: 10.0.12 + resolution: "@expo/json-file@npm:10.0.12" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + json5: "npm:^2.2.3" + checksum: 10c0/52131a6426e96208ff1b295d580fc70eebb8e292b29fde1db016b2f21a0942a7521feec96b3f58efe5b32dcc1642d569b4211d651146fcdb9bf7e5f08b635878 + languageName: node + linkType: hard + +"@expo/local-build-cache-provider@npm:55.0.6": + version: 55.0.6 + resolution: "@expo/local-build-cache-provider@npm:55.0.6" + dependencies: + "@expo/config": "npm:~55.0.8" + chalk: "npm:^4.1.2" + checksum: 10c0/c3f68686e0fd0aab9ea298fd3431ae2bb86380871a9ad9e98cde40e7e5aebfa68050b6213c13a21b58cac78127a8fcc62e54d459feb9f7ec5d062457e7139f4f + languageName: node + linkType: hard + +"@expo/log-box@npm:55.0.7": + version: 55.0.7 + resolution: "@expo/log-box@npm:55.0.7" + dependencies: + "@expo/dom-webview": "npm:^55.0.3" + anser: "npm:^1.4.9" + stacktrace-parser: "npm:^0.1.10" + peerDependencies: + "@expo/dom-webview": ^55.0.3 + expo: "*" + react: "*" + react-native: "*" + checksum: 10c0/e5872bb183542d2a1157bd8f15293d233ba4eaa8a7fbecc167a9ed6e9377ee07d010b0f267101bd94683f5d3a1f3c8259a0a346b5483a5af907effc4914173e7 + languageName: node + linkType: hard + +"@expo/metro-config@npm:55.0.9, @expo/metro-config@npm:~55.0.9": + version: 55.0.9 + resolution: "@expo/metro-config@npm:55.0.9" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + "@babel/core": "npm:^7.20.0" + "@babel/generator": "npm:^7.20.5" + "@expo/config": "npm:~55.0.8" + "@expo/env": "npm:~2.1.1" + "@expo/json-file": "npm:~10.0.12" + "@expo/metro": "npm:~54.2.0" + "@expo/spawn-async": "npm:^1.7.2" + browserslist: "npm:^4.25.0" + chalk: "npm:^4.1.0" + debug: "npm:^4.3.2" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + hermes-parser: "npm:^0.32.0" + jsc-safe-url: "npm:^0.2.4" + lightningcss: "npm:^1.30.1" + picomatch: "npm:^4.0.3" + postcss: "npm:~8.4.32" + resolve-from: "npm:^5.0.0" + peerDependencies: + expo: "*" + peerDependenciesMeta: + expo: + optional: true + checksum: 10c0/33f35c74050b12fd64ee0a29816049d7ab6854e3c4ceb1a95f049aff9bb50e844954e508781b4b16b60f872f2534f27e60f3bc59e16b44776aa4300de72f3c0d + languageName: node + linkType: hard + +"@expo/metro-runtime@npm:~55.0.6": + version: 55.0.6 + resolution: "@expo/metro-runtime@npm:55.0.6" + dependencies: + "@expo/log-box": "npm:55.0.7" + anser: "npm:^1.4.9" + pretty-format: "npm:^29.7.0" + stacktrace-parser: "npm:^0.1.10" + whatwg-fetch: "npm:^3.0.0" + peerDependencies: + expo: "*" + react: "*" + react-dom: "*" + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 10c0/d2eef66dc5e288bd8a0ad08ad65e5bb75aa9e56f627e7973ac3ee6d82c2502e0f01ba887a7326b64f9a35fd5794e71b8222d518368dadb593b05f25bc10e9709 + languageName: node + linkType: hard + +"@expo/metro@npm:~54.2.0": + version: 54.2.0 + resolution: "@expo/metro@npm:54.2.0" + dependencies: + metro: "npm:0.83.3" + metro-babel-transformer: "npm:0.83.3" + metro-cache: "npm:0.83.3" + metro-cache-key: "npm:0.83.3" + metro-config: "npm:0.83.3" + metro-core: "npm:0.83.3" + metro-file-map: "npm:0.83.3" + metro-minify-terser: "npm:0.83.3" + metro-resolver: "npm:0.83.3" + metro-runtime: "npm:0.83.3" + metro-source-map: "npm:0.83.3" + metro-symbolicate: "npm:0.83.3" + metro-transform-plugins: "npm:0.83.3" + metro-transform-worker: "npm:0.83.3" + checksum: 10c0/5114ac19021094e19fcbd383778748451bdf78c904cb9be831b04d44880b4ca05071c1e045e5ccf8076418e32a87de2e5163529f1d91fed4bdda2184958e8a61 + languageName: node + linkType: hard + +"@expo/osascript@npm:^2.4.2": + version: 2.4.2 + resolution: "@expo/osascript@npm:2.4.2" + dependencies: + "@expo/spawn-async": "npm:^1.7.2" + checksum: 10c0/80adc04b4a6f0695d00a88dcfe3336b395d6431fdccb9e8316c2ec1819ae6524a7063d7c8f4da7f1f3718e57637204c62c2383b7488b0008410efeb7108aa00f + languageName: node + linkType: hard + +"@expo/package-manager@npm:^1.10.3": + version: 1.10.3 + resolution: "@expo/package-manager@npm:1.10.3" + dependencies: + "@expo/json-file": "npm:^10.0.12" + "@expo/spawn-async": "npm:^1.7.2" + chalk: "npm:^4.0.0" + npm-package-arg: "npm:^11.0.0" + ora: "npm:^3.4.0" + resolve-workspace-root: "npm:^2.0.0" + checksum: 10c0/b9e6071b9f29f20ef4aae06390c207f22b17eced1fa2d77903100ab7efefe0951a8735dee997ac434550938d939d132a5b1f3f35344bfe9e40344c090d0ebedc + languageName: node + linkType: hard + +"@expo/plist@npm:^0.5.2": + version: 0.5.2 + resolution: "@expo/plist@npm:0.5.2" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + base64-js: "npm:^1.5.1" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/19adae2a365ac1a12db93682fb310ff8be03c711f9173bebe5841cbe60cdfb749247bc1a95fa0977b5bac3aa6a078a0fceeafe4ff6c66d1ed67cce496679e310 + languageName: node + linkType: hard + +"@expo/prebuild-config@npm:^55.0.8": + version: 55.0.8 + resolution: "@expo/prebuild-config@npm:55.0.8" + dependencies: + "@expo/config": "npm:~55.0.8" + "@expo/config-plugins": "npm:~55.0.6" + "@expo/config-types": "npm:^55.0.5" + "@expo/image-utils": "npm:^0.8.12" + "@expo/json-file": "npm:^10.0.12" + "@react-native/normalize-colors": "npm:0.83.2" + debug: "npm:^4.3.1" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + xml2js: "npm:0.6.0" + peerDependencies: + expo: "*" + checksum: 10c0/612d2ecafdbac004f427df99efe972a88b8a2bd35c99e0b2d62aa5cbbc0c7d092eb87bd59120b69d816abbe586e209b8b7bf7b26cc5ecfe2b73985d4c63337bf + languageName: node + linkType: hard + +"@expo/require-utils@npm:^55.0.2": + version: 55.0.2 + resolution: "@expo/require-utils@npm:55.0.2" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + "@babel/core": "npm:^7.25.2" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + peerDependencies: + typescript: ^5.0.0 || ^5.0.0-0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/f15ac98ef24198a01c851d3ff1620a6263dcb3766584d9cd4d347a61ba12b4942bab541441c36e566545b007b657f369715517944454264c4cb8a5262d661716 + languageName: node + linkType: hard + +"@expo/router-server@npm:^55.0.10": + version: 55.0.10 + resolution: "@expo/router-server@npm:55.0.10" + dependencies: + debug: "npm:^4.3.4" + peerDependencies: + "@expo/metro-runtime": ^55.0.6 + expo: "*" + expo-constants: ^55.0.7 + expo-font: ^55.0.4 + expo-router: "*" + expo-server: ^55.0.6 + react: "*" + react-dom: "*" + react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 + peerDependenciesMeta: + "@expo/metro-runtime": + optional: true + expo-router: + optional: true + react-dom: + optional: true + react-server-dom-webpack: + optional: true + checksum: 10c0/14767cf06fe6253fea30b2edd1015df9afc296c9edd5b6df97016794d513b2f1941223e35ba281d7f6bb9d173cff8fe1825a44f36faa270d1ffc226978b3b051 + languageName: node + linkType: hard + +"@expo/schema-utils@npm:^55.0.2": + version: 55.0.2 + resolution: "@expo/schema-utils@npm:55.0.2" + checksum: 10c0/0b443cd733f078a34ef6419f0051073f7333c338e108ca13509a728ae8c20dacfd7bba92cbe152e4bdb45f92bbc58290d3041f9a21cbd8518908708b10ccb3ad + languageName: node + linkType: hard + +"@expo/sdk-runtime-versions@npm:^1.0.0": + version: 1.0.0 + resolution: "@expo/sdk-runtime-versions@npm:1.0.0" + checksum: 10c0/f80ae78a294daf396f3eff2eb412948ced5501395a6d3b88058866da9c5135dbacbb2804f8d062222e7452159a61eebefd2f548a2939f539f0f0efe8145588a2 + languageName: node + linkType: hard + +"@expo/spawn-async@npm:^1.7.2": + version: 1.7.2 + resolution: "@expo/spawn-async@npm:1.7.2" + dependencies: + cross-spawn: "npm:^7.0.3" + checksum: 10c0/0548c4e95ee39393c2f3919bc605f21eba4f0a8ba66fa82fbbc4b1b624e0054526918489227b924f03af5bc156a011f39a2472c223c0d2237fb7afd8dedd5357 + languageName: node + linkType: hard + +"@expo/sudo-prompt@npm:^9.3.1": + version: 9.3.2 + resolution: "@expo/sudo-prompt@npm:9.3.2" + checksum: 10c0/032652bf1c3f326c9c194f336de5821b9ece9d48b22e3e277950d939fcd728c85459680a9771705904d375f128221cca2e1e91c5d7a85cf3c07fe6f88c361e9d + languageName: node + linkType: hard + +"@expo/vector-icons@npm:^15.0.2": + version: 15.1.1 + resolution: "@expo/vector-icons@npm:15.1.1" + peerDependencies: + expo-font: ">=14.0.4" + react: "*" + react-native: "*" + checksum: 10c0/fdd50c90484934204b90d345904fa69ca788a5de704d62b3cb580c52aa4cf4bffe1c05c509d043cf2b6842f1bdad6b78585524f3c6ae5f77e36385d83c0aa577 + languageName: node + linkType: hard + +"@expo/ws-tunnel@npm:^1.0.1": + version: 1.0.6 + resolution: "@expo/ws-tunnel@npm:1.0.6" + checksum: 10c0/050eb7fbd54b636c97c818e7ec5402ce616cae655290386a51600b200947e281cdd12d182251c07fab449e11a732135d61429b738cd03945e94757061e652ecd + languageName: node + linkType: hard + +"@expo/xcpretty@npm:^4.4.0": + version: 4.4.1 + resolution: "@expo/xcpretty@npm:4.4.1" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + chalk: "npm:^4.1.0" + js-yaml: "npm:^4.1.0" + bin: + excpretty: build/cli.js + checksum: 10c0/23bfd12b54bb296284402a4c547a73874b0ed4fa5f5dea26d5f80525c29befe40edb79df921fb3fd783cf0008779b29b7d4d606f2540cc23f96e39cbdc0b21dd + languageName: node + linkType: hard + "@gar/promise-retry@npm:^1.0.0": version: 1.0.2 resolution: "@gar/promise-retry@npm:1.0.2" @@ -3099,6 +3610,13 @@ __metadata: languageName: node linkType: hard +"@react-native/assets-registry@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/assets-registry@npm:0.84.1" + checksum: 10c0/8a4e7da279dc75c24a2498d271f1b6e719b5f6dee94bd4ea9046b4eded7887b2117b44185a2e656c7612a194af5efdb4db165bc1036ef95f2cdf11c535d7c655 + languageName: node + linkType: hard + "@react-native/babel-plugin-codegen@npm:0.83.0": version: 0.83.0 resolution: "@react-native/babel-plugin-codegen@npm:0.83.0" @@ -3109,6 +3627,16 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-plugin-codegen@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/babel-plugin-codegen@npm:0.83.2" + dependencies: + "@babel/traverse": "npm:^7.25.3" + "@react-native/codegen": "npm:0.83.2" + checksum: 10c0/7bb0b9d4369474da5aa490c135bc72ff39acfdefd26491f1782ef652152f21d8b77a03e6c1c136cc477a983864ab9fc0aab95674e21d8822786c9bdcfb26e588 + languageName: node + linkType: hard + "@react-native/babel-preset@npm:0.83.0": version: 0.83.0 resolution: "@react-native/babel-preset@npm:0.83.0" @@ -3164,6 +3692,61 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-preset@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/babel-preset@npm:0.83.2" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" + "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" + "@babel/plugin-transform-block-scoping": "npm:^7.25.0" + "@babel/plugin-transform-class-properties": "npm:^7.25.4" + "@babel/plugin-transform-classes": "npm:^7.25.4" + "@babel/plugin-transform-computed-properties": "npm:^7.24.7" + "@babel/plugin-transform-destructuring": "npm:^7.24.8" + "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2" + "@babel/plugin-transform-for-of": "npm:^7.24.7" + "@babel/plugin-transform-function-name": "npm:^7.25.1" + "@babel/plugin-transform-literals": "npm:^7.25.2" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-react-display-name": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.2" + "@babel/plugin-transform-react-jsx-self": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx-source": "npm:^7.24.7" + "@babel/plugin-transform-regenerator": "npm:^7.24.7" + "@babel/plugin-transform-runtime": "npm:^7.24.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" + "@babel/plugin-transform-spread": "npm:^7.24.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" + "@babel/plugin-transform-typescript": "npm:^7.25.2" + "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" + "@babel/template": "npm:^7.25.0" + "@react-native/babel-plugin-codegen": "npm:0.83.2" + babel-plugin-syntax-hermes-parser: "npm:0.32.0" + babel-plugin-transform-flow-enums: "npm:^0.0.2" + react-refresh: "npm:^0.14.0" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/e6ddf78cf07505f5fd172b6f4f73915b79be8150e329292e4188d35087d0e0a2343e64271024f1c13b0433dce69f7f92d1cc05c9ea226f6d4c2c2f55059996db + languageName: node + linkType: hard + "@react-native/codegen@npm:0.83.0": version: 0.83.0 resolution: "@react-native/codegen@npm:0.83.0" @@ -3181,6 +3764,40 @@ __metadata: languageName: node linkType: hard +"@react-native/codegen@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/codegen@npm:0.83.2" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/parser": "npm:^7.25.3" + glob: "npm:^7.1.1" + hermes-parser: "npm:0.32.0" + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + yargs: "npm:^17.6.2" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/7135e8d9765152720a78157ff25e87eb456fcaa64f0549dd5068d3450613465a8ac6234ce36143aaa580ac5c4ecb0cd434ec98ef7443e4895fcb53772aae31b0 + languageName: node + linkType: hard + +"@react-native/codegen@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/codegen@npm:0.84.1" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/parser": "npm:^7.25.3" + hermes-parser: "npm:0.32.0" + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + tinyglobby: "npm:^0.2.15" + yargs: "npm:^17.6.2" + peerDependencies: + "@babel/core": "*" + checksum: 10c0/776d32dcc851547e7012c3830da3aa5255d4e9bd2a0e0f0d644174731099a404a281bd9d0525e4b708caf4c3acb81bc00b7c9cd2479f250b99f184b9ec9b7bd1 + languageName: node + linkType: hard + "@react-native/community-cli-plugin@npm:0.83.0": version: 0.83.0 resolution: "@react-native/community-cli-plugin@npm:0.83.0" @@ -3204,6 +3821,29 @@ __metadata: languageName: node linkType: hard +"@react-native/community-cli-plugin@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/community-cli-plugin@npm:0.84.1" + dependencies: + "@react-native/dev-middleware": "npm:0.84.1" + debug: "npm:^4.4.0" + invariant: "npm:^2.2.4" + metro: "npm:^0.83.3" + metro-config: "npm:^0.83.3" + metro-core: "npm:^0.83.3" + semver: "npm:^7.1.3" + peerDependencies: + "@react-native-community/cli": "*" + "@react-native/metro-config": "*" + peerDependenciesMeta: + "@react-native-community/cli": + optional: true + "@react-native/metro-config": + optional: true + checksum: 10c0/a4ecc090979da82d9c4909a39b3eab2e4e1d74a54b33f8e8a06cfce21243506d94c9a6d6209920895c4762ca7b83da161c45ee31a39551d6d6b6c66a98aa4b4a + languageName: node + linkType: hard + "@react-native/debugger-frontend@npm:0.83.0": version: 0.83.0 resolution: "@react-native/debugger-frontend@npm:0.83.0" @@ -3211,23 +3851,98 @@ __metadata: languageName: node linkType: hard -"@react-native/debugger-shell@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/debugger-shell@npm:0.83.0" +"@react-native/debugger-frontend@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/debugger-frontend@npm:0.83.2" + checksum: 10c0/0c74f17befaa022ee52da9fffdd016aa1d0f61383cd4a6d1a98ae2a5b6cbc2104892ee401d243c419910bd4c9a83cbbbcdd004d0923488d79bbd9869c04ad0cc + languageName: node + linkType: hard + +"@react-native/debugger-frontend@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/debugger-frontend@npm:0.84.1" + checksum: 10c0/5affced111321605b87fa89283858904753f1d9fb91ac751de846142fb35978ea7d4c12501aca6911138e6202f1b153bd51aff93113d619eb944fbbcc8d39c02 + languageName: node + linkType: hard + +"@react-native/debugger-shell@npm:0.83.0": + version: 0.83.0 + resolution: "@react-native/debugger-shell@npm:0.83.0" + dependencies: + cross-spawn: "npm:^7.0.6" + fb-dotslash: "npm:0.5.8" + checksum: 10c0/17f76e052cd65aa1d70c1a7861c0f30492968f836c09243e766f0ec59cfa665f36ed9bea8d0279a267e942f43eb2c4e691112a09796d1fb157bf484b6e21f483 + languageName: node + linkType: hard + +"@react-native/debugger-shell@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/debugger-shell@npm:0.83.2" + dependencies: + cross-spawn: "npm:^7.0.6" + fb-dotslash: "npm:0.5.8" + checksum: 10c0/bf84bb5772d6c1b556edeb4407c0e00c747ee7ccd824ecc21d2c93f09446016bb9dc178f7e6054ea09e23a7e38b6f4c4ae7d4f37d17d89ba7c99efe2140a2a08 + languageName: node + linkType: hard + +"@react-native/debugger-shell@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/debugger-shell@npm:0.84.1" + dependencies: + cross-spawn: "npm:^7.0.6" + debug: "npm:^4.4.0" + fb-dotslash: "npm:0.5.8" + checksum: 10c0/8eaa48b391df25f180f8c21dece81c727398cbe675c3967ac81f559d45154280c3ade54e095e0d0f55a893ba21a77822127979555bc4c1ea4a0147481a02258d + languageName: node + linkType: hard + +"@react-native/dev-middleware@npm:0.83.0": + version: 0.83.0 + resolution: "@react-native/dev-middleware@npm:0.83.0" + dependencies: + "@isaacs/ttlcache": "npm:^1.4.1" + "@react-native/debugger-frontend": "npm:0.83.0" + "@react-native/debugger-shell": "npm:0.83.0" + chrome-launcher: "npm:^0.15.2" + chromium-edge-launcher: "npm:^0.2.0" + connect: "npm:^3.6.5" + debug: "npm:^4.4.0" + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + open: "npm:^7.0.3" + serve-static: "npm:^1.16.2" + ws: "npm:^7.5.10" + checksum: 10c0/1c3b779634d535eb071b1b06fb01f4eaae51184dba8ba3b490487acd7c70ab30630d38bf13916dc9cc733683df444c0db692757c12fb58bc841016e41a45e961 + languageName: node + linkType: hard + +"@react-native/dev-middleware@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/dev-middleware@npm:0.83.2" dependencies: - cross-spawn: "npm:^7.0.6" - fb-dotslash: "npm:0.5.8" - checksum: 10c0/17f76e052cd65aa1d70c1a7861c0f30492968f836c09243e766f0ec59cfa665f36ed9bea8d0279a267e942f43eb2c4e691112a09796d1fb157bf484b6e21f483 + "@isaacs/ttlcache": "npm:^1.4.1" + "@react-native/debugger-frontend": "npm:0.83.2" + "@react-native/debugger-shell": "npm:0.83.2" + chrome-launcher: "npm:^0.15.2" + chromium-edge-launcher: "npm:^0.2.0" + connect: "npm:^3.6.5" + debug: "npm:^4.4.0" + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + open: "npm:^7.0.3" + serve-static: "npm:^1.16.2" + ws: "npm:^7.5.10" + checksum: 10c0/bbbc5f2ed6694148f281def8ede8930731607170e3ee8baefee8df62e9513c960fce5d2591d215e8a4de30fca0a39a9e2a93ff77cd269654327780cba68ae063 languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/dev-middleware@npm:0.83.0" +"@react-native/dev-middleware@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/dev-middleware@npm:0.84.1" dependencies: "@isaacs/ttlcache": "npm:^1.4.1" - "@react-native/debugger-frontend": "npm:0.83.0" - "@react-native/debugger-shell": "npm:0.83.0" + "@react-native/debugger-frontend": "npm:0.84.1" + "@react-native/debugger-shell": "npm:0.84.1" chrome-launcher: "npm:^0.15.2" chromium-edge-launcher: "npm:^0.2.0" connect: "npm:^3.6.5" @@ -3237,7 +3952,7 @@ __metadata: open: "npm:^7.0.3" serve-static: "npm:^1.16.2" ws: "npm:^7.5.10" - checksum: 10c0/1c3b779634d535eb071b1b06fb01f4eaae51184dba8ba3b490487acd7c70ab30630d38bf13916dc9cc733683df444c0db692757c12fb58bc841016e41a45e961 + checksum: 10c0/a4b4ca5f7e05ce6eb66de5c0c895fcbba91fb814c0ed75c29c8dbfc7a1e9a8f46b760f07c076283e24928dd8f59cae3c2b2d7b0057afe574fe1dad2e21f48a06 languageName: node linkType: hard @@ -3278,6 +3993,13 @@ __metadata: languageName: node linkType: hard +"@react-native/gradle-plugin@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/gradle-plugin@npm:0.84.1" + checksum: 10c0/81c85b9cb07a1e858f487724b0cbfa287394d17b1c7ef79bf67d6b18505464a82941ac96e17a7414d124e3595af8b0adf79adf4c878a47bca538ee39513c60c9 + languageName: node + linkType: hard + "@react-native/js-polyfills@npm:0.83.0": version: 0.83.0 resolution: "@react-native/js-polyfills@npm:0.83.0" @@ -3285,6 +4007,13 @@ __metadata: languageName: node linkType: hard +"@react-native/js-polyfills@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/js-polyfills@npm:0.84.1" + checksum: 10c0/78e090abddbd3729be413223da18cd8d34fd30b8f4d461dfb4fea50965852bb89ea8344418fa9cbb16e8d9a108d349ecf8e83a4b8fa0f1b3d931850dd63f6b0f + languageName: node + linkType: hard + "@react-native/metro-babel-transformer@npm:0.83.0": version: 0.83.0 resolution: "@react-native/metro-babel-transformer@npm:0.83.0" @@ -3318,6 +4047,27 @@ __metadata: languageName: node linkType: hard +"@react-native/normalize-colors@npm:0.83.2": + version: 0.83.2 + resolution: "@react-native/normalize-colors@npm:0.83.2" + checksum: 10c0/eca54405074e9f5ba626f9b099a0d14b0621b6096300a42b06a9b40bbead9c3425f3ae919d7ef5a9fe8742ec9d0856a503804fc2bac29bdef52a708ebca88303 + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/normalize-colors@npm:0.84.1" + checksum: 10c0/c8bfaba7ff0941a87b1481356b15d068131357be90ff0fb6b4af6c7a679ec90cbbba0f55cef4973667dd74d40eb5e861a575b856ab0e61d76e0ed47285ba13fb + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:^0.74.1": + version: 0.74.89 + resolution: "@react-native/normalize-colors@npm:0.74.89" + checksum: 10c0/6d0e5c91793ca5a66b4a0e5995361f474caacac56bde4772ac02b8ab470bd323076c567bd8856b0b097816d2b890e73a4040a3df01fd284adee683f5ba89d5ba + languageName: node + linkType: hard + "@react-native/typescript-config@npm:0.83.0": version: 0.83.0 resolution: "@react-native/typescript-config@npm:0.83.0" @@ -3342,6 +4092,23 @@ __metadata: languageName: node linkType: hard +"@react-native/virtualized-lists@npm:0.84.1": + version: 0.84.1 + resolution: "@react-native/virtualized-lists@npm:0.84.1" + dependencies: + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@types/react": ^19.2.0 + react: "*" + react-native: "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/cc34c7529ac9e308b995817476fd8de12c0db134ae5544cdbedc2a9e9f215e3d9b188d5e4ef9b23d02f482916b37fce0ff74fb1dd4cb9cc312394354b0b520e9 + languageName: node + linkType: hard + "@release-it/conventional-changelog@npm:^10.0.1": version: 10.0.5 resolution: "@release-it/conventional-changelog@npm:10.0.5" @@ -3637,6 +4404,25 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^19": + version: 19.2.3 + resolution: "@types/react-dom@npm:19.2.3" + peerDependencies: + "@types/react": ^19.2.0 + checksum: 10c0/b486ebe0f4e2fb35e2e108df1d8fc0927ca5d6002d5771e8a739de11239fe62d0e207c50886185253c99eb9dedfeeb956ea7429e5ba17f6693c7acb4c02f8cd1 + languageName: node + linkType: hard + +"@types/react-native-web@npm:^0": + version: 0.19.2 + resolution: "@types/react-native-web@npm:0.19.2" + dependencies: + "@types/react": "npm:*" + react-native: "npm:*" + checksum: 10c0/df5a0cc071251a9626fef9aeb3e9e1e2e44a4465138cbdea01e80a7315a4a48c9da89e0d25672fda7a1c44decea9c9928f237d5367e33e7fb057f5c6402ca71d + languageName: node + linkType: hard + "@types/react-test-renderer@npm:^19": version: 19.1.0 resolution: "@types/react-test-renderer@npm:19.1.0" @@ -3962,6 +4748,13 @@ __metadata: languageName: node linkType: hard +"@xmldom/xmldom@npm:^0.8.8": + version: 0.8.11 + resolution: "@xmldom/xmldom@npm:0.8.11" + checksum: 10c0/e768623de72c95d3dae6b5da8e33dda0d81665047811b5498d23a328d45b13feb5536fe921d0308b96a4a8dd8addf80b1f6ef466508051c0b581e63e0dc74ed5 + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -3990,6 +4783,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:^1.3.7, accepts@npm:^1.3.8, accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + "accepts@npm:^2.0.0": version: 2.0.0 resolution: "accepts@npm:2.0.0" @@ -4000,16 +4803,6 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: "npm:~2.1.34" - negotiator: "npm:0.6.3" - checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -4076,7 +4869,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.3.2": +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -4117,7 +4910,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0": +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -4166,6 +4959,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e + languageName: node + linkType: hard + "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -4308,7 +5108,7 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.6": +"asap@npm:~2.0.3, asap@npm:~2.0.6": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d @@ -4506,6 +5306,22 @@ __metadata: languageName: node linkType: hard +"babel-plugin-react-compiler@npm:^1.0.0": + version: 1.0.0 + resolution: "babel-plugin-react-compiler@npm:1.0.0" + dependencies: + "@babel/types": "npm:^7.26.0" + checksum: 10c0/9406267ada8d7dbdfe8906b40ecadb816a5f4cee2922bee23f7729293b369624ee135b5a9b0f263851c263c9787522ac5d97016c9a2b82d1668300e42b18aff8 + languageName: node + linkType: hard + +"babel-plugin-react-native-web@npm:~0.21.0": + version: 0.21.2 + resolution: "babel-plugin-react-native-web@npm:0.21.2" + checksum: 10c0/45fa9b2fce90cb0d962bbc9c665e944ef6720f5740a573d457adf8e2881bd4112396922d5d5c0ab7cfc706f0c457e3edebddc55289d30924e1f42b4b7d849b8e + languageName: node + linkType: hard + "babel-plugin-syntax-hermes-parser@npm:0.32.0": version: 0.32.0 resolution: "babel-plugin-syntax-hermes-parser@npm:0.32.0" @@ -4524,6 +5340,15 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-hermes-parser@npm:^0.32.0": + version: 0.32.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.32.1" + dependencies: + hermes-parser: "npm:0.32.1" + checksum: 10c0/b254a2a324cf823c9ec749de0019cf787d59102e9bdd79fc687937e631574ba44f7d249954e284997f1ada1a2b9a1ffa87bc10b16f7e81869b767f99a978b2cf + languageName: node + linkType: hard + "babel-plugin-transform-flow-enums@npm:^0.0.2": version: 0.0.2 resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" @@ -4558,6 +5383,49 @@ __metadata: languageName: node linkType: hard +"babel-preset-expo@npm:~55.0.11, babel-preset-expo@npm:~55.0.8": + version: 55.0.11 + resolution: "babel-preset-expo@npm:55.0.11" + dependencies: + "@babel/generator": "npm:^7.20.5" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/plugin-proposal-decorators": "npm:^7.12.9" + "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-export-default-from": "npm:^7.24.7" + "@babel/plugin-transform-class-static-block": "npm:^7.27.1" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" + "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-runtime": "npm:^7.24.7" + "@babel/preset-react": "npm:^7.22.15" + "@babel/preset-typescript": "npm:^7.23.0" + "@react-native/babel-preset": "npm:0.83.2" + babel-plugin-react-compiler: "npm:^1.0.0" + babel-plugin-react-native-web: "npm:~0.21.0" + babel-plugin-syntax-hermes-parser: "npm:^0.32.0" + babel-plugin-transform-flow-enums: "npm:^0.0.2" + debug: "npm:^4.3.4" + resolve-from: "npm:^5.0.0" + peerDependencies: + "@babel/runtime": ^7.20.0 + expo: "*" + expo-widgets: ^55.0.4 + react-refresh: ">=0.14.0 <1.0.0" + peerDependenciesMeta: + "@babel/runtime": + optional: true + expo: + optional: true + expo-widgets: + optional: true + checksum: 10c0/df2b1ef86ce086a707993d9e7d19397c5680b5daee364657597cdef3650bdf1f72cb80e159ffd1c662bcfc10121650ca1a44ec89344b124314bd29ea3b640bb1 + languageName: node + linkType: hard + "babel-preset-jest@npm:30.3.0": version: 30.3.0 resolution: "babel-preset-jest@npm:30.3.0" @@ -4626,6 +5494,22 @@ __metadata: languageName: node linkType: hard +"better-opn@npm:~3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: "npm:^8.0.4" + checksum: 10c0/911ef25d44da75aabfd2444ce7a4294a8000ebcac73068c04a60298b0f7c7506b60421aa4cd02ac82502fb42baaff7e4892234b51e6923eded44c5a11185f2f5 + languageName: node + linkType: hard + +"big-integer@npm:1.6.x": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 10c0/9604224b4c2ab3c43c075d92da15863077a9f59e5d4205f4e7e76acd0cd47e8d469ec5e5dba8d9b32aa233951893b29329ca56ac80c20ce094b4a647a66abae0 + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -4657,6 +5541,33 @@ __metadata: languageName: node linkType: hard +"bplist-creator@npm:0.1.0": + version: 0.1.0 + resolution: "bplist-creator@npm:0.1.0" + dependencies: + stream-buffers: "npm:2.2.x" + checksum: 10c0/86f5fe95f34abd369b381abf0f726e220ecebd60a3d932568ae94895ccf1989a87553e4aee9ab3cfb4f35e6f72319f52aa73028165eec82819ed39f15189d493 + languageName: node + linkType: hard + +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: "npm:2.2.x" + checksum: 10c0/427ec37263ce0e8c68a83f595fc9889a9cbf2e6fda2de18e1f8ef7f0c6ce68c0cdbb7c9c1f3bb3f2d217407af8cffbdf254bf0f71c99f2186175d07752f08a47 + languageName: node + linkType: hard + +"bplist-parser@npm:0.3.2, bplist-parser@npm:^0.3.1": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: "npm:1.6.x" + checksum: 10c0/4dc307c11d2511a01255e87e370d4ab6f1962b35fdc27605fd4ce9a557a259c2dc9f87822617ddb1f7aa062a71e30ef20d6103329ac7ce235628f637fb0ed763 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.12 resolution: "brace-expansion@npm:1.1.12" @@ -4694,7 +5605,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.20.4, browserslist@npm:^4.24.0, browserslist@npm:^4.28.1": +"browserslist@npm:^4.20.4, browserslist@npm:^4.24.0, browserslist@npm:^4.25.0, browserslist@npm:^4.28.1": version: 4.28.1 resolution: "browserslist@npm:4.28.1" dependencies: @@ -4855,6 +5766,17 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^2.0.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -4937,7 +5859,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": +"ci-info@npm:^3.2.0, ci-info@npm:^3.3.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a @@ -4996,6 +5918,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: "npm:^2.0.0" + checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda + languageName: node + linkType: hard + "cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -5014,7 +5945,7 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0": +"cli-spinners@npm:^2.0.0, cli-spinners@npm:^2.5.0": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" checksum: 10c0/907a1c227ddf0d7a101e7ab8b300affc742ead4b4ebe920a5bf1bc6d45dce2958fcd195eb28fa25275062fe6fa9b109b93b63bc8033396ed3bcb50297008b3a3 @@ -5138,6 +6069,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a + languageName: node + linkType: hard + "commander@npm:^9.4.1": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -5176,7 +6114,7 @@ __metadata: languageName: node linkType: hard -"compression@npm:^1.7.1": +"compression@npm:^1.7.1, compression@npm:^1.7.4": version: 1.8.1 resolution: "compression@npm:1.8.1" dependencies: @@ -5217,7 +6155,7 @@ __metadata: languageName: node linkType: hard -"connect@npm:^3.6.5": +"connect@npm:^3.6.5, connect@npm:^3.7.0": version: 3.7.0 resolution: "connect@npm:3.7.0" dependencies: @@ -5414,6 +6352,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: "npm:^2.7.0" + checksum: 10c0/d8596adf0269130098a676f6739a0922f3cc7b71cc89729925411ebe851a87026171c82ea89154c4811c9867c01c44793205a52e618ce2684650218c7fbeeb9f + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -5425,6 +6372,15 @@ __metadata: languageName: node linkType: hard +"css-in-js-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "css-in-js-utils@npm:3.1.0" + dependencies: + hyphenate-style-name: "npm:^1.0.3" + checksum: 10c0/8bb042e8f7701a7edadc3cce5ce2d5cf41189631d7e2aed194d5a7059b25776dded2a0466cb9da1d1f3fc6c99dcecb51e45671148d073b8a2a71e34755152e52 + languageName: node + linkType: hard + "csstype@npm:^3.2.2": version: 3.2.3 resolution: "csstype@npm:3.2.3" @@ -5495,7 +6451,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.3": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -5507,6 +6463,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:^3.1.0": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -5584,6 +6549,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + "define-lazy-prop@npm:^3.0.0": version: 3.0.0 resolution: "define-lazy-prop@npm:3.0.0" @@ -5685,6 +6657,13 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^2.0.3": + version: 2.1.2 + resolution: "detect-libc@npm:2.1.2" + checksum: 10c0/acc675c29a5649fa1fb6e255f993b8ee829e510b6b56b0910666949c80c364738833417d0edb5f90e4e46be17228b0f2b66a010513984e18b15deeeac49369c4 + languageName: node + linkType: hard + "detect-newline@npm:^3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -5708,6 +6687,13 @@ __metadata: languageName: node linkType: hard +"dnssd-advertise@npm:^1.1.3": + version: 1.1.3 + resolution: "dnssd-advertise@npm:1.1.3" + checksum: 10c0/95cba839a3ad92622f99c95f79bc98a9a338b79c83264d5485237c35aa9c417debaf1c672bc5d662e931341f60fe8c1754a9937a8aca1fda29e336c79e78c2a3 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -6467,6 +7453,147 @@ __metadata: languageName: node linkType: hard +"expo-asset@npm:~55.0.8": + version: 55.0.8 + resolution: "expo-asset@npm:55.0.8" + dependencies: + "@expo/image-utils": "npm:^0.8.12" + expo-constants: "npm:~55.0.7" + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 10c0/c84ec0b39b0b1d7e9629f3ad9dba6b652c4a63e58dddda7524d65728ca41b6d8f3b36766aefea4b90d3c581ea9dd9357decff8f4c4d8c398c5e5ac63a5e24ea5 + languageName: node + linkType: hard + +"expo-constants@npm:~55.0.7": + version: 55.0.7 + resolution: "expo-constants@npm:55.0.7" + dependencies: + "@expo/config": "npm:~55.0.8" + "@expo/env": "npm:~2.1.1" + peerDependencies: + expo: "*" + react-native: "*" + checksum: 10c0/0f7391d2751e0e5b912558a2c4cccf6ac02fa429acfa484492c418cd37f738c5d9f365a412889836afd8f7bb1592ab13313f745976c211ffeb59aba500743bb6 + languageName: node + linkType: hard + +"expo-file-system@npm:~55.0.10": + version: 55.0.10 + resolution: "expo-file-system@npm:55.0.10" + peerDependencies: + expo: "*" + react-native: "*" + checksum: 10c0/1168339c48fb8d2180de3f546b59cffb41d75f43e912bc7e61967b8e159beb3187afb1fc9ab3b39808ecb6df35cc498bdb8d21becf191bd6733f5e47a727edd9 + languageName: node + linkType: hard + +"expo-font@npm:~55.0.4": + version: 55.0.4 + resolution: "expo-font@npm:55.0.4" + dependencies: + fontfaceobserver: "npm:^2.1.0" + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 10c0/6584feec71a153324cf8c60d1093092976f709b7dcf122f01bbe101bafa594cd38eddde831235ea1bf34cf01b8001fc0dd8a8faa24c03805aea5c2735a681217 + languageName: node + linkType: hard + +"expo-keep-awake@npm:~55.0.4": + version: 55.0.4 + resolution: "expo-keep-awake@npm:55.0.4" + peerDependencies: + expo: "*" + react: "*" + checksum: 10c0/a8bdd4c331086ec0cb2906aff11f2c6ff6acb852bde6db86af52f39391261bbe041f2692ae356ab00b33bec1f5aee29bdc24d2d57d6508d8e74a4b75a794acc5 + languageName: node + linkType: hard + +"expo-modules-autolinking@npm:55.0.9": + version: 55.0.9 + resolution: "expo-modules-autolinking@npm:55.0.9" + dependencies: + "@expo/require-utils": "npm:^55.0.2" + "@expo/spawn-async": "npm:^1.7.2" + chalk: "npm:^4.1.0" + commander: "npm:^7.2.0" + bin: + expo-modules-autolinking: bin/expo-modules-autolinking.js + checksum: 10c0/def6bc5e19053c2058245e5104f673fd5d91e76ec3fd10487e2632d58925302939f2199fba56cba062964eba865c8f5656b34d119eede8b58272e63b0e7eabcc + languageName: node + linkType: hard + +"expo-modules-core@npm:55.0.15": + version: 55.0.15 + resolution: "expo-modules-core@npm:55.0.15" + dependencies: + invariant: "npm:^2.2.4" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10c0/b81b171320837e57ff0f01f60a758fddbdced10d63909a72001e71abdd7ec6f62b5d4d01a70c490b53fea264888a3b078726f83b2c707f2169f383d1d2263bb1 + languageName: node + linkType: hard + +"expo-server@npm:^55.0.6": + version: 55.0.6 + resolution: "expo-server@npm:55.0.6" + checksum: 10c0/c8918cd5f09d6cbda028b527edcc6dbc8df932e3def085ef5de063678164d8f048e1fdb975c641f9d7ff2552394fb3acb34ffd58ac214f302eb239210c60fdc4 + languageName: node + linkType: hard + +"expo@npm:~55.0.0": + version: 55.0.6 + resolution: "expo@npm:55.0.6" + dependencies: + "@babel/runtime": "npm:^7.20.0" + "@expo/cli": "npm:55.0.16" + "@expo/config": "npm:~55.0.8" + "@expo/config-plugins": "npm:~55.0.6" + "@expo/devtools": "npm:55.0.2" + "@expo/fingerprint": "npm:0.16.6" + "@expo/local-build-cache-provider": "npm:55.0.6" + "@expo/log-box": "npm:55.0.7" + "@expo/metro": "npm:~54.2.0" + "@expo/metro-config": "npm:55.0.9" + "@expo/vector-icons": "npm:^15.0.2" + "@ungap/structured-clone": "npm:^1.3.0" + babel-preset-expo: "npm:~55.0.11" + expo-asset: "npm:~55.0.8" + expo-constants: "npm:~55.0.7" + expo-file-system: "npm:~55.0.10" + expo-font: "npm:~55.0.4" + expo-keep-awake: "npm:~55.0.4" + expo-modules-autolinking: "npm:55.0.9" + expo-modules-core: "npm:55.0.15" + pretty-format: "npm:^29.7.0" + react-refresh: "npm:^0.14.2" + whatwg-url-minimum: "npm:^0.1.1" + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 10c0/0eb19eeccc2adc7a35ae33ace6a4e81a7d66617980c07f51b50218cf35ce27a815b7a29f897140c9b26d11fa21878609ad6928c841488ea67235ac8447541770 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -6565,12 +7692,34 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0, fb-watchman@npm:^2.0.2": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" +"fb-watchman@npm:^2.0.0, fb-watchman@npm:^2.0.2": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + languageName: node + linkType: hard + +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 10c0/dfb64116b125a64abecca9e31477b5edb9a2332c5ffe74326fe36e0a72eef7fc8a49b86adf36c2c293078d79f4524f35e80f5e62546395f53fb7c9e69821f54f + languageName: node + linkType: hard + +"fbjs@npm:^3.0.4": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" dependencies: - bser: "npm:2.1.1" - checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + cross-fetch: "npm:^3.1.5" + fbjs-css-vars: "npm:^1.0.0" + loose-envify: "npm:^1.0.0" + object-assign: "npm:^4.1.0" + promise: "npm:^7.1.1" + setimmediate: "npm:^1.0.5" + ua-parser-js: "npm:^1.0.35" + checksum: 10c0/66d0a2fc9a774f9066e35ac2ac4bf1245931d27f3ac287c7d47e6aa1fc152b243c2109743eb8f65341e025621fb51a12038fadb9fd8fda2e3ddae04ebab06f91 languageName: node linkType: hard @@ -6595,6 +7744,13 @@ __metadata: languageName: node linkType: hard +"fetch-nodeshim@npm:^0.4.6": + version: 0.4.9 + resolution: "fetch-nodeshim@npm:0.4.9" + checksum: 10c0/16e6f8de7cb40350384b39a639b3d73e8b21309b40ee4d7efb845168f67812487615f67686a45affaf887f4817f4c5aabd7003e2c9773e9914cc117c38b29568 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -6683,6 +7839,13 @@ __metadata: languageName: node linkType: hard +"fontfaceobserver@npm:^2.1.0": + version: 2.3.0 + resolution: "fontfaceobserver@npm:2.3.0" + checksum: 10c0/9b539d5021757d3ed73c355bdb839296d6654de473a992aa98993ef46d951f0361545323de68f6d70c5334d7e3e9f409c1ae7a03c168b00cb0f6c5dea6c77bfa + languageName: node + linkType: hard + "for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -6905,6 +8068,13 @@ __metadata: languageName: node linkType: hard +"getenv@npm:^2.0.0": + version: 2.0.0 + resolution: "getenv@npm:2.0.0" + checksum: 10c0/397ff641dd70cd78e414430258651e9a2228d3c5553a8cf15ae7840f75d3f10dfcb83f668f84829e84ea665b0fce2f08a9eddda3c9dcd7faa2d3da1c182c1854 + languageName: node + linkType: hard + "giget@npm:^2.0.0": version: 2.0.0 resolution: "giget@npm:2.0.0" @@ -7105,6 +8275,13 @@ __metadata: languageName: node linkType: hard +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -7162,6 +8339,13 @@ __metadata: languageName: node linkType: hard +"hermes-compiler@npm:250829098.0.9": + version: 250829098.0.9 + resolution: "hermes-compiler@npm:250829098.0.9" + checksum: 10c0/dc8f5630c13821a0d620e1b95cc17205c7ed940a2195a052cf30e2d5a82b86c6a134c4c6c6f7567e0f9d1f6847034ad496de8f303e5992f780ff9e84c5e0dd50 + languageName: node + linkType: hard + "hermes-estree@npm:0.25.1": version: 0.25.1 resolution: "hermes-estree@npm:0.25.1" @@ -7183,6 +8367,13 @@ __metadata: languageName: node linkType: hard +"hermes-estree@npm:0.32.1": + version: 0.32.1 + resolution: "hermes-estree@npm:0.32.1" + checksum: 10c0/750d1e26c0df4aae15707765368352c6a34934939df09d96e6d260ee1e1500e753f7a18adac56647ef8ca2057e8f0e5d21ae07b97103b0d9c94d68afee154c5e + languageName: node + linkType: hard + "hermes-estree@npm:0.33.3": version: 0.33.3 resolution: "hermes-estree@npm:0.33.3" @@ -7208,6 +8399,15 @@ __metadata: languageName: node linkType: hard +"hermes-parser@npm:0.32.1, hermes-parser@npm:^0.32.0": + version: 0.32.1 + resolution: "hermes-parser@npm:0.32.1" + dependencies: + hermes-estree: "npm:0.32.1" + checksum: 10c0/77dc8b116c51d1b30ba9942629d4965301f2c7fa6a751a1842828d110ce33410daed5755ce8943a110dbfc6a5cafc704ddbfb7559e76b5c3170d2173c513047c + languageName: node + linkType: hard + "hermes-parser@npm:0.33.3": version: 0.33.3 resolution: "hermes-parser@npm:0.33.3" @@ -7226,6 +8426,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^7.0.0": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f + languageName: node + linkType: hard + "hosted-git-info@npm:^8.0.0": version: 8.1.0 resolution: "hosted-git-info@npm:8.1.0" @@ -7303,6 +8512,13 @@ __metadata: languageName: node linkType: hard +"hyphenate-style-name@npm:^1.0.3": + version: 1.1.0 + resolution: "hyphenate-style-name@npm:1.1.0" + checksum: 10c0/bfe88deac2414a41a0d08811e277c8c098f23993d6a1eb17f14a0f11b54c4d42865a63d3cfe1914668eefb9a188e2de58f38b55a179a238fd1fef606893e194f + languageName: node + linkType: hard + "iconv-lite@npm:^0.7.0, iconv-lite@npm:^0.7.2": version: 0.7.2 resolution: "iconv-lite@npm:0.7.2" @@ -7328,7 +8544,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.0.5, ignore@npm:^5.2.0": +"ignore@npm:^5.0.5, ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 @@ -7420,6 +8636,15 @@ __metadata: languageName: node linkType: hard +"inline-style-prefixer@npm:^7.0.1": + version: 7.0.1 + resolution: "inline-style-prefixer@npm:7.0.1" + dependencies: + css-in-js-utils: "npm:^3.1.0" + checksum: 10c0/15da5a396b7f286b5b6742efe315218cd577bc96b43de08aeb76af7697d9f1ab3bfc66cf19fad2173957dd5d617a790240b9d51898bdcf4c2efb40d3f8bcb370 + languageName: node + linkType: hard + "inquirer@npm:12.11.1": version: 12.11.1 resolution: "inquirer@npm:12.11.1" @@ -7564,7 +8789,7 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0": +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" bin: @@ -8638,6 +9863,13 @@ __metadata: languageName: node linkType: hard +"jimp-compact@npm:0.16.1": + version: 0.16.1 + resolution: "jimp-compact@npm:0.16.1" + checksum: 10c0/2d73bb927d840ce6dc093d089d770eddbb81472635ced7cad1d7c4545d8734aecf5bd3dedf7178a6cfab4d06c9d6cbbf59e5cb274ed99ca11cd4835a6374f16c + languageName: node + linkType: hard + "jiti@npm:^2.6.1": version: 2.6.1 resolution: "jiti@npm:2.6.1" @@ -8690,7 +9922,7 @@ __metadata: languageName: node linkType: hard -"jsc-safe-url@npm:^0.2.2": +"jsc-safe-url@npm:^0.2.2, jsc-safe-url@npm:^0.2.4": version: 0.2.4 resolution: "jsc-safe-url@npm:0.2.4" checksum: 10c0/429bd645f8a35938f08f5b01c282e5ef55ed8be30a9ca23517b7ca01dcbf84b4b0632042caceab50f8f5c0c1e76816fe3c74de3e59be84da7f89ae1503bd3c68 @@ -8824,6 +10056,15 @@ __metadata: languageName: node linkType: hard +"lan-network@npm:^0.2.0": + version: 0.2.0 + resolution: "lan-network@npm:0.2.0" + bin: + lan-network: dist/lan-network-cli.js + checksum: 10c0/06da664a94e962ded0e30705bebacca73e02a7575c6cf1e91d6b12d5af49b0491727a1308cbf0ff47a4d19c5779b74919dffd5b60b8fd1c879d4d2e79d98887e + languageName: node + linkType: hard + "launch-editor@npm:^2.9.1": version: 2.13.1 resolution: "launch-editor@npm:2.13.1" @@ -8972,6 +10213,126 @@ __metadata: languageName: node linkType: hard +"lightningcss-android-arm64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-android-arm64@npm:1.32.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-darwin-arm64@npm:1.32.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-darwin-x64@npm:1.32.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-freebsd-x64@npm:1.32.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.32.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.32.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.32.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.32.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-x64-musl@npm:1.32.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-arm64-msvc@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.32.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.32.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:^1.30.1": + version: 1.32.0 + resolution: "lightningcss@npm:1.32.0" + dependencies: + detect-libc: "npm:^2.0.3" + lightningcss-android-arm64: "npm:1.32.0" + lightningcss-darwin-arm64: "npm:1.32.0" + lightningcss-darwin-x64: "npm:1.32.0" + lightningcss-freebsd-x64: "npm:1.32.0" + lightningcss-linux-arm-gnueabihf: "npm:1.32.0" + lightningcss-linux-arm64-gnu: "npm:1.32.0" + lightningcss-linux-arm64-musl: "npm:1.32.0" + lightningcss-linux-x64-gnu: "npm:1.32.0" + lightningcss-linux-x64-musl: "npm:1.32.0" + lightningcss-win32-arm64-msvc: "npm:1.32.0" + lightningcss-win32-x64-msvc: "npm:1.32.0" + dependenciesMeta: + lightningcss-android-arm64: + optional: true + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-arm64-msvc: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: 10c0/70945bd55097af46fc9fab7f5ed09cd5869d85940a2acab7ee06d0117004a1d68155708a2d462531cea2fc3c67aefc9333a7068c80b0b78dd404c16838809e03 + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -9118,6 +10479,15 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: "npm:^2.0.1" + checksum: 10c0/574eb4205f54f0605021aa67ebb372c30ca64e8ddd439efeb8507af83c776dce789e83614e80059014d9e48dcc94c4b60cef2e85f0dc944eea27c799cec62353 + languageName: node + linkType: hard + "log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" @@ -9264,6 +10634,13 @@ __metadata: languageName: node linkType: hard +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: 10c0/45c88e064fd715166619af72e8cf8a7a17224d6edf61f7a8633d740ed8c8c0558a4373876c9b8ffc5518c2b65a960266adf403cc215cb1e90f7e262b58991f54 + languageName: node + linkType: hard + "meow@npm:^12.0.1": version: 12.1.1 resolution: "meow@npm:12.1.1" @@ -9292,6 +10669,18 @@ __metadata: languageName: node linkType: hard +"metro-babel-transformer@npm:0.83.3": + version: 0.83.3 + resolution: "metro-babel-transformer@npm:0.83.3" + dependencies: + "@babel/core": "npm:^7.25.2" + flow-enums-runtime: "npm:^0.0.6" + hermes-parser: "npm:0.32.0" + nullthrows: "npm:^1.1.1" + checksum: 10c0/b0107f86cdc9ef9419d669b5b3dac22e35b02c67c480563a63d98f5fb50953587938769efc854bfc09c225557790cd6488dbe3fed6f05c2b3f322cfb2e5ff577 + languageName: node + linkType: hard + "metro-babel-transformer@npm:0.83.5": version: 0.83.5 resolution: "metro-babel-transformer@npm:0.83.5" @@ -9304,6 +10693,15 @@ __metadata: languageName: node linkType: hard +"metro-cache-key@npm:0.83.3": + version: 0.83.3 + resolution: "metro-cache-key@npm:0.83.3" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + checksum: 10c0/403a2ca5b5bbb31a979effaa31fba0c47e2eb3830428c39c99db58aa0739a6fcc386f5a56c91495c53a4569065f0bda29e3038e9c41ca17af443971395f257dc + languageName: node + linkType: hard + "metro-cache-key@npm:0.83.5": version: 0.83.5 resolution: "metro-cache-key@npm:0.83.5" @@ -9313,6 +10711,18 @@ __metadata: languageName: node linkType: hard +"metro-cache@npm:0.83.3": + version: 0.83.3 + resolution: "metro-cache@npm:0.83.3" + dependencies: + exponential-backoff: "npm:^3.1.1" + flow-enums-runtime: "npm:^0.0.6" + https-proxy-agent: "npm:^7.0.5" + metro-core: "npm:0.83.3" + checksum: 10c0/608e85d819092c0b472c9adabb5de58e88355739de71833230626c1af7f3ce5dd1dca9f1ff3a836d995201f717315fd769c4c646a818c1f490ea2ec29417e32a + languageName: node + linkType: hard + "metro-cache@npm:0.83.5": version: 0.83.5 resolution: "metro-cache@npm:0.83.5" @@ -9325,6 +10735,22 @@ __metadata: languageName: node linkType: hard +"metro-config@npm:0.83.3": + version: 0.83.3 + resolution: "metro-config@npm:0.83.3" + dependencies: + connect: "npm:^3.6.5" + flow-enums-runtime: "npm:^0.0.6" + jest-validate: "npm:^29.7.0" + metro: "npm:0.83.3" + metro-cache: "npm:0.83.3" + metro-core: "npm:0.83.3" + metro-runtime: "npm:0.83.3" + yaml: "npm:^2.6.1" + checksum: 10c0/c53e4a061cfc776a65cdb5055c0be840055f9741dae25e7d407835988618b15f1407270dbd957c7333d01e9c79eccbf8e6bcb76421b2145bd134b53df459a033 + languageName: node + linkType: hard + "metro-config@npm:0.83.5, metro-config@npm:^0.83.3": version: 0.83.5 resolution: "metro-config@npm:0.83.5" @@ -9341,6 +10767,17 @@ __metadata: languageName: node linkType: hard +"metro-core@npm:0.83.3": + version: 0.83.3 + resolution: "metro-core@npm:0.83.3" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + lodash.throttle: "npm:^4.1.1" + metro-resolver: "npm:0.83.3" + checksum: 10c0/d44c1f117c4b27f18abd27110e9536abf3105733e8fccaa522bd0e008248cce0260130517840c4914d7ce5df498f39ecfd43b6046a0f0b1c0f8ada7de38e52c4 + languageName: node + linkType: hard + "metro-core@npm:0.83.5, metro-core@npm:^0.83.3": version: 0.83.5 resolution: "metro-core@npm:0.83.5" @@ -9352,6 +10789,23 @@ __metadata: languageName: node linkType: hard +"metro-file-map@npm:0.83.3": + version: 0.83.3 + resolution: "metro-file-map@npm:0.83.3" + dependencies: + debug: "npm:^4.4.0" + fb-watchman: "npm:^2.0.0" + flow-enums-runtime: "npm:^0.0.6" + graceful-fs: "npm:^4.2.4" + invariant: "npm:^2.2.4" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + nullthrows: "npm:^1.1.1" + walker: "npm:^1.0.7" + checksum: 10c0/4bf9c0fcdb5a5c08851f7370d6427fb68a770f156c4eabbddf20bd3583fb25ae428507eaeb8dc525e792db41d048620209750f33735055863abc909cbb6ef71a + languageName: node + linkType: hard + "metro-file-map@npm:0.83.5": version: 0.83.5 resolution: "metro-file-map@npm:0.83.5" @@ -9369,6 +10823,16 @@ __metadata: languageName: node linkType: hard +"metro-minify-terser@npm:0.83.3": + version: 0.83.3 + resolution: "metro-minify-terser@npm:0.83.3" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + terser: "npm:^5.15.0" + checksum: 10c0/9158e3199c0ea647776a7ed5c68ec1bb493f5347ac979f1ca75020cf1c39f907bd29983d60f8cb24dca17053d6b5c35f140c6d720fad0bd0fa9728e8c51e95c6 + languageName: node + linkType: hard + "metro-minify-terser@npm:0.83.5": version: 0.83.5 resolution: "metro-minify-terser@npm:0.83.5" @@ -9379,6 +10843,15 @@ __metadata: languageName: node linkType: hard +"metro-resolver@npm:0.83.3": + version: 0.83.3 + resolution: "metro-resolver@npm:0.83.3" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + checksum: 10c0/1d6c030a00b987fbee38e5c632219b2be602e38c9aa9628bb4b591f646e64130d08adb8dcb35076c5c8cc151135557b655f3dee514c0df9f26d3416629eb006b + languageName: node + linkType: hard + "metro-resolver@npm:0.83.5": version: 0.83.5 resolution: "metro-resolver@npm:0.83.5" @@ -9388,6 +10861,16 @@ __metadata: languageName: node linkType: hard +"metro-runtime@npm:0.83.3": + version: 0.83.3 + resolution: "metro-runtime@npm:0.83.3" + dependencies: + "@babel/runtime": "npm:^7.25.0" + flow-enums-runtime: "npm:^0.0.6" + checksum: 10c0/1d788483b6c2f13e0ea9ff4564996154754d3de84f683812ac848053eaea9243144adee3e8ffe90789e6c253f7402211d72b1b5ebf09e6c23841bc956a680253 + languageName: node + linkType: hard + "metro-runtime@npm:0.83.5, metro-runtime@npm:^0.83.3": version: 0.83.5 resolution: "metro-runtime@npm:0.83.5" @@ -9398,6 +10881,24 @@ __metadata: languageName: node linkType: hard +"metro-source-map@npm:0.83.3": + version: 0.83.3 + resolution: "metro-source-map@npm:0.83.3" + dependencies: + "@babel/traverse": "npm:^7.25.3" + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3" + "@babel/types": "npm:^7.25.2" + flow-enums-runtime: "npm:^0.0.6" + invariant: "npm:^2.2.4" + metro-symbolicate: "npm:0.83.3" + nullthrows: "npm:^1.1.1" + ob1: "npm:0.83.3" + source-map: "npm:^0.5.6" + vlq: "npm:^1.0.0" + checksum: 10c0/47e984bde1f8f06348298771f44b5803657c9cfa387df8ff36a359cc72ae3bc0e9c4ea6141345609b183ac8c63dcc997000d3626006e388c24779abb57c6f82c + languageName: node + linkType: hard + "metro-source-map@npm:0.83.5, metro-source-map@npm:^0.83.3": version: 0.83.5 resolution: "metro-source-map@npm:0.83.5" @@ -9415,6 +10916,22 @@ __metadata: languageName: node linkType: hard +"metro-symbolicate@npm:0.83.3": + version: 0.83.3 + resolution: "metro-symbolicate@npm:0.83.3" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + invariant: "npm:^2.2.4" + metro-source-map: "npm:0.83.3" + nullthrows: "npm:^1.1.1" + source-map: "npm:^0.5.6" + vlq: "npm:^1.0.0" + bin: + metro-symbolicate: src/index.js + checksum: 10c0/bd3d234c7581466a9a78f952caa25816666753f6b560fe41502727b3e59931ac65225c9909635dc7c25d4dfaf392631366ef3ec5fa8490413385d60f8d900112 + languageName: node + linkType: hard + "metro-symbolicate@npm:0.83.5": version: 0.83.5 resolution: "metro-symbolicate@npm:0.83.5" @@ -9431,6 +10948,20 @@ __metadata: languageName: node linkType: hard +"metro-transform-plugins@npm:0.83.3": + version: 0.83.3 + resolution: "metro-transform-plugins@npm:0.83.3" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/generator": "npm:^7.25.0" + "@babel/template": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.3" + flow-enums-runtime: "npm:^0.0.6" + nullthrows: "npm:^1.1.1" + checksum: 10c0/df3c6db6a69d4888e1b6aad40d48ffec0c3c3faa38e89c07633432fc107ef12c47d55598904c91aadfe0751c5bcb7ec191f8a5ee70c18d253201150fc617ca37 + languageName: node + linkType: hard + "metro-transform-plugins@npm:0.83.5": version: 0.83.5 resolution: "metro-transform-plugins@npm:0.83.5" @@ -9445,6 +10976,27 @@ __metadata: languageName: node linkType: hard +"metro-transform-worker@npm:0.83.3": + version: 0.83.3 + resolution: "metro-transform-worker@npm:0.83.3" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/generator": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.3" + "@babel/types": "npm:^7.25.2" + flow-enums-runtime: "npm:^0.0.6" + metro: "npm:0.83.3" + metro-babel-transformer: "npm:0.83.3" + metro-cache: "npm:0.83.3" + metro-cache-key: "npm:0.83.3" + metro-minify-terser: "npm:0.83.3" + metro-source-map: "npm:0.83.3" + metro-transform-plugins: "npm:0.83.3" + nullthrows: "npm:^1.1.1" + checksum: 10c0/bea0cbcc7d13cd2b97a2159257b3a53b9ecfb15da18ace82ae05bf2d0ac7cc1806c0bd77ed3b8f4c82c9532773fb99f3938e4b1480e2673f5eda69575ee1d7ef + languageName: node + linkType: hard + "metro-transform-worker@npm:0.83.5": version: 0.83.5 resolution: "metro-transform-worker@npm:0.83.5" @@ -9466,6 +11018,56 @@ __metadata: languageName: node linkType: hard +"metro@npm:0.83.3": + version: 0.83.3 + resolution: "metro@npm:0.83.3" + dependencies: + "@babel/code-frame": "npm:^7.24.7" + "@babel/core": "npm:^7.25.2" + "@babel/generator": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.3" + "@babel/template": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.3" + "@babel/types": "npm:^7.25.2" + accepts: "npm:^1.3.7" + chalk: "npm:^4.0.0" + ci-info: "npm:^2.0.0" + connect: "npm:^3.6.5" + debug: "npm:^4.4.0" + error-stack-parser: "npm:^2.0.6" + flow-enums-runtime: "npm:^0.0.6" + graceful-fs: "npm:^4.2.4" + hermes-parser: "npm:0.32.0" + image-size: "npm:^1.0.2" + invariant: "npm:^2.2.4" + jest-worker: "npm:^29.7.0" + jsc-safe-url: "npm:^0.2.2" + lodash.throttle: "npm:^4.1.1" + metro-babel-transformer: "npm:0.83.3" + metro-cache: "npm:0.83.3" + metro-cache-key: "npm:0.83.3" + metro-config: "npm:0.83.3" + metro-core: "npm:0.83.3" + metro-file-map: "npm:0.83.3" + metro-resolver: "npm:0.83.3" + metro-runtime: "npm:0.83.3" + metro-source-map: "npm:0.83.3" + metro-symbolicate: "npm:0.83.3" + metro-transform-plugins: "npm:0.83.3" + metro-transform-worker: "npm:0.83.3" + mime-types: "npm:^2.1.27" + nullthrows: "npm:^1.1.1" + serialize-error: "npm:^2.1.0" + source-map: "npm:^0.5.6" + throat: "npm:^5.0.0" + ws: "npm:^7.5.10" + yargs: "npm:^17.6.2" + bin: + metro: src/cli.js + checksum: 10c0/9513c05725c3984ce3b72896c4f7d019ad4fd024a1231b8b84c5c655a0563fc7f26725f28c20c5d3511e3825d64fec3a1e68621f6a6af34d785c5e714ed7da89 + languageName: node + linkType: hard + "metro@npm:0.83.5, metro@npm:^0.83.3": version: 0.83.5 resolution: "metro@npm:0.83.5" @@ -9549,7 +11151,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -9576,6 +11178,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -9730,13 +11339,20 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.3": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 languageName: node linkType: hard +"multitars@npm:^0.2.3": + version: 0.2.4 + resolution: "multitars@npm:0.2.4" + checksum: 10c0/c46a7385ea9c51a34ad8df1829501f070af48ab56c128861d2f6c8106a7fb586730deb82ca834afb43d12eac56d868a50d7c71c01097bb1791ebe1bd1ccf76d1 + languageName: node + linkType: hard + "mute-stream@npm:^2.0.0": version: 2.0.0 resolution: "mute-stream@npm:2.0.0" @@ -9744,6 +11360,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.7": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + "napi-postinstall@npm:^0.3.0": version: 0.3.4 resolution: "napi-postinstall@npm:0.3.4" @@ -9830,6 +11455,27 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-forge@npm:^1.3.3": + version: 1.3.3 + resolution: "node-forge@npm:1.3.3" + checksum: 10c0/9c6f53b0ebb34865872cf62a35b0aef8fb337e2efc766626c2e3a0040f4c02933bf29a62ba999eb44a2aca73bd512c4eda22705a47b94654b9fb8ed53db9a1db + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 12.2.0 resolution: "node-gyp@npm:12.2.0" @@ -9900,6 +11546,18 @@ __metadata: languageName: node linkType: hard +"npm-package-arg@npm:^11.0.0": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -9938,6 +11596,15 @@ __metadata: languageName: node linkType: hard +"ob1@npm:0.83.3": + version: 0.83.3 + resolution: "ob1@npm:0.83.3" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + checksum: 10c0/9231315de39cf0612a01e283c7d7ef31d16618e598de96e44ae1ab3007629296ce1a3d5d02ef60ff22d9fefe33050358c10e7fcba8278861157b89befe13cb3d + languageName: node + linkType: hard + "ob1@npm:0.83.5": version: 0.83.5 resolution: "ob1@npm:0.83.5" @@ -9947,7 +11614,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 @@ -10059,6 +11726,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: "npm:^1.0.0" + checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 + languageName: node + linkType: hard + "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -10117,6 +11793,17 @@ __metadata: languageName: node linkType: hard +"open@npm:^8.0.4": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -10148,6 +11835,20 @@ __metadata: languageName: node linkType: hard +"ora@npm:^3.4.0": + version: 3.4.0 + resolution: "ora@npm:3.4.0" + dependencies: + chalk: "npm:^2.4.2" + cli-cursor: "npm:^2.1.0" + cli-spinners: "npm:^2.0.0" + log-symbols: "npm:^2.2.0" + strip-ansi: "npm:^5.2.0" + wcwidth: "npm:^1.0.1" + checksum: 10c0/04cb375f222c36a16a95e6c39c473644a99a42fc34d35c37507cb836ea0a71f4d831fcd53198a460869114b2730891d63cc1047304afe5ddb078974d468edfb1 + languageName: node + linkType: hard + "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -10326,6 +12027,15 @@ __metadata: languageName: node linkType: hard +"parse-png@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-png@npm:2.1.0" + dependencies: + pngjs: "npm:^3.3.0" + checksum: 10c0/5157a8bbb976ae1ca990fc53c7014d42aac0967cb30e2daf36c3fef1876c8db0d551e695400c904f33c5c5add76a572c65b5044721d62417d8cc7abe4c4ffa41 + languageName: node + linkType: hard + "parse-url@npm:^9.2.0": version: 9.2.0 resolution: "parse-url@npm:9.2.0" @@ -10481,6 +12191,24 @@ __metadata: languageName: node linkType: hard +"plist@npm:^3.0.5": + version: 3.1.0 + resolution: "plist@npm:3.1.0" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + base64-js: "npm:^1.5.1" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/db19ba50faafc4103df8e79bcd6b08004a56db2a9dd30b3e5c8b0ef30398ef44344a674e594d012c8fc39e539a2b72cb58c60a76b4b4401cbbc7c8f6b028d93d + languageName: node + linkType: hard + +"pngjs@npm:^3.3.0": + version: 3.4.0 + resolution: "pngjs@npm:3.4.0" + checksum: 10c0/88ee73e2ad3f736e0b2573722309eb80bd2aa28916f0862379b4fd0f904751b4f61bb6bd1ecd7d4242d331f2b5c28c13309dd4b7d89a9b78306e35122fdc5011 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -10488,6 +12216,24 @@ __metadata: languageName: node linkType: hard +"postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss@npm:~8.4.32": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -10542,6 +12288,13 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^4.0.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + "proc-log@npm:^6.0.0": version: 6.1.0 resolution: "proc-log@npm:6.1.0" @@ -10549,6 +12302,22 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: 10c0/1697e07cb1068055dbe9fe858d242368ff5d2073639e652b75a7eb1f2a1a8d4afd404d719de23c7b48481a6aa0040686310e2dac2f53d776daa2176d3f96369c + languageName: node + linkType: hard + +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: "npm:~2.0.3" + checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f + languageName: node + linkType: hard + "promise@npm:^8.3.0": version: 8.3.0 resolution: "promise@npm:8.3.0" @@ -10558,7 +12327,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.4.2": +"prompts@npm:^2.3.2, prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -10697,6 +12466,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:19.2.0": + version: 19.2.0 + resolution: "react-dom@npm:19.2.0" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.0 + checksum: 10c0/fa2cae05248d01288e91523b590ce4e7635b1e13f1344e225f850d722a8da037bf0782f63b1c1d46353334e0c696909b82e582f8cad607948fde6f7646cc18d9 + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -10757,6 +12537,7 @@ __metadata: "@babel/core": "npm:^7.25.2" "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" + "@expo/metro-runtime": "npm:~55.0.6" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" @@ -10764,12 +12545,18 @@ __metadata: "@react-native/metro-config": "npm:0.83.0" "@react-native/typescript-config": "npm:0.83.0" "@types/react": "npm:^19.2.0" + "@types/react-dom": "npm:^19" + "@types/react-native-web": "npm:^0" + babel-preset-expo: "npm:~55.0.8" + expo: "npm:~55.0.0" react: "npm:19.2.0" + react-dom: "npm:19.2.0" react-native: "npm:0.83.0" react-native-builder-bob: "npm:^0.40.18" react-native-monorepo-config: "npm:^0.3.3" react-native-reanimated: "npm:^4.2.2" react-native-safe-area-context: "npm:^5.7.0" + react-native-web: "npm:^0.21.0" react-native-worklets: "npm:^0.7.4" languageName: unknown linkType: soft @@ -10856,6 +12643,25 @@ __metadata: languageName: node linkType: hard +"react-native-web@npm:^0.21.0": + version: 0.21.2 + resolution: "react-native-web@npm:0.21.2" + dependencies: + "@babel/runtime": "npm:^7.18.6" + "@react-native/normalize-colors": "npm:^0.74.1" + fbjs: "npm:^3.0.4" + inline-style-prefixer: "npm:^7.0.1" + memoize-one: "npm:^6.0.0" + nullthrows: "npm:^1.1.1" + postcss-value-parser: "npm:^4.2.0" + styleq: "npm:^0.1.3" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/8c184fef0045c25deff765c8e80963454a5dffd8e389a9e11cf2fec9e769ff0f82c3d56d082b1897a7ded8374d9ae8a49dac7f09377a104f1995a5ddea645095 + languageName: node + linkType: hard + "react-native-worklets@npm:^0.7.4": version: 0.7.4 resolution: "react-native-worklets@npm:0.7.4" @@ -10879,6 +12685,57 @@ __metadata: languageName: node linkType: hard +"react-native@npm:*": + version: 0.84.1 + resolution: "react-native@npm:0.84.1" + dependencies: + "@jest/create-cache-key-function": "npm:^29.7.0" + "@react-native/assets-registry": "npm:0.84.1" + "@react-native/codegen": "npm:0.84.1" + "@react-native/community-cli-plugin": "npm:0.84.1" + "@react-native/gradle-plugin": "npm:0.84.1" + "@react-native/js-polyfills": "npm:0.84.1" + "@react-native/normalize-colors": "npm:0.84.1" + "@react-native/virtualized-lists": "npm:0.84.1" + abort-controller: "npm:^3.0.0" + anser: "npm:^1.4.9" + ansi-regex: "npm:^5.0.0" + babel-jest: "npm:^29.7.0" + babel-plugin-syntax-hermes-parser: "npm:0.32.0" + base64-js: "npm:^1.5.1" + commander: "npm:^12.0.0" + flow-enums-runtime: "npm:^0.0.6" + hermes-compiler: "npm:250829098.0.9" + invariant: "npm:^2.2.4" + jest-environment-node: "npm:^29.7.0" + memoize-one: "npm:^5.0.0" + metro-runtime: "npm:^0.83.3" + metro-source-map: "npm:^0.83.3" + nullthrows: "npm:^1.1.1" + pretty-format: "npm:^29.7.0" + promise: "npm:^8.3.0" + react-devtools-core: "npm:^6.1.5" + react-refresh: "npm:^0.14.0" + regenerator-runtime: "npm:^0.13.2" + scheduler: "npm:0.27.0" + semver: "npm:^7.1.3" + stacktrace-parser: "npm:^0.1.10" + tinyglobby: "npm:^0.2.15" + whatwg-fetch: "npm:^3.0.0" + ws: "npm:^7.5.10" + yargs: "npm:^17.6.2" + peerDependencies: + "@types/react": ^19.1.1 + react: ^19.2.3 + peerDependenciesMeta: + "@types/react": + optional: true + bin: + react-native: cli.js + checksum: 10c0/2d4a64b8dfdcbc35b7c16aae00fb218288ba9ab474c1e105bf4eaac68c0b6243a5a5b8bd2e5c91619811c6c10112bb9396ab8052e9a3cc00b3395d85b7e80dcd + languageName: node + linkType: hard + "react-native@npm:0.83.0": version: 0.83.0 resolution: "react-native@npm:0.83.0" @@ -10930,7 +12787,7 @@ __metadata: languageName: node linkType: hard -"react-refresh@npm:^0.14.0": +"react-refresh@npm:^0.14.0, react-refresh@npm:^0.14.2": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" checksum: 10c0/875b72ef56b147a131e33f2abd6ec059d1989854b3ff438898e4f9310bfcc73acff709445b7ba843318a953cb9424bcc2c05af2b3d80011cee28f25aef3e2ebb @@ -11146,6 +13003,13 @@ __metadata: languageName: node linkType: hard +"resolve-workspace-root@npm:^2.0.0": + version: 2.0.1 + resolution: "resolve-workspace-root@npm:2.0.1" + checksum: 10c0/83104ea8476ba451a4bac32db42cf1dc79a7b98810764e507830a2f63af20cfb00fe7da5b0c324d77d4fcfda7a24e9e17895690d6f6a498735b633fd7fc372ca + languageName: node + linkType: hard + "resolve@npm:^1.1.6, resolve@npm:^1.22.11": version: 1.22.11 resolution: "resolve@npm:1.22.11" @@ -11204,6 +13068,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: "npm:^2.0.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 + languageName: node + linkType: hard + "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -11329,6 +13203,13 @@ __metadata: languageName: node linkType: hard +"sax@npm:>=0.6.0": + version: 1.5.0 + resolution: "sax@npm:1.5.0" + checksum: 10c0/bc3b60a7bfecd40b18256596e96b32df2488339ae1e00a77f842b568f0831228a16c3bd357ec500241ec0b9dc7a475a1286427795c4a8c50bb8e8878f3435dd8 + languageName: node + linkType: hard + "scheduler@npm:0.27.0, scheduler@npm:^0.27.0": version: 0.27.0 resolution: "scheduler@npm:0.27.0" @@ -11363,7 +13244,7 @@ __metadata: languageName: node linkType: hard -"send@npm:~0.19.1": +"send@npm:^0.19.0, send@npm:~0.19.1": version: 0.19.2 resolution: "send@npm:0.19.2" dependencies: @@ -11447,6 +13328,13 @@ __metadata: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + "setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -11539,6 +13427,17 @@ __metadata: languageName: node linkType: hard +"simple-plist@npm:^1.1.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: "npm:0.1.1" + bplist-parser: "npm:0.3.2" + plist: "npm:^3.0.5" + checksum: 10c0/226c283492d8518d715e4133d94bdbd15c0619561bcde583b4807b36cde106c0078c615b9b4e25c0e8758a4ae4e79ed5dd76e57cd528d8b7001ecab5ad35e343 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -11571,6 +13470,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:^1.3.4, slugify@npm:^1.6.6": + version: 1.6.8 + resolution: "slugify@npm:1.6.8" + checksum: 10c0/1052797a5e7bc6263c6e8dc64ad41d6f5ae2fd2e3a17c2aead09ded002f10de75283ff0b4da2b04dd2fbd7fa2f38a83abeaa3ab8d29709ca68e7592edd6e90dc + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -11599,6 +13505,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -11609,7 +13522,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:~0.5.20": +"source-map-support@npm:~0.5.20, source-map-support@npm:~0.5.21": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -11746,6 +13659,13 @@ __metadata: languageName: node linkType: hard +"stream-buffers@npm:2.2.x": + version: 2.2.0 + resolution: "stream-buffers@npm:2.2.0" + checksum: 10c0/14a351f0a066eaa08c8c64a74f4aedd87dd7a8e59d4be224703da33dca3eb370828ee6c0ae3fff59a9c743e8098728fc95c5f052ae7741672a31e6b1430ba50a + languageName: node + linkType: hard + "string-length@npm:^4.0.2": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -11882,7 +13802,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0": +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.2.0": version: 5.2.0 resolution: "strip-ansi@npm:5.2.0" dependencies: @@ -11944,7 +13864,30 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.1.0": +"structured-headers@npm:^0.4.1": + version: 0.4.1 + resolution: "structured-headers@npm:0.4.1" + checksum: 10c0/b7d326f6fec7e7f7901d1e0542577293b5d029bf3e1fb84995e33d9aabe47d03259f64ca2d778ef5c427f6f00c78bafa051b6f233131e1556f8bb9102b11ed64 + languageName: node + linkType: hard + +"styleq@npm:^0.1.3": + version: 0.1.3 + resolution: "styleq@npm:0.1.3" + checksum: 10c0/975d951792e65052f1f6e41aaad46492642ce4922b3dc36d4b49b37c8509f9a776794d8f275360f00116a5e6ab1e31514bdcd5840656c4e3213da6803fa12941 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -11962,6 +13905,16 @@ __metadata: languageName: node linkType: hard +"supports-hyperlinks@npm:^2.0.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: "npm:^4.0.0" + supports-color: "npm:^7.0.0" + checksum: 10c0/4057f0d86afb056cd799602f72d575b8fdd79001c5894bcb691176f14e870a687e7981e50bc1484980e8b688c6d5bcd4931e1609816abb5a7dc1486b7babf6a1 + languageName: node + linkType: hard + "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -11991,6 +13944,16 @@ __metadata: languageName: node linkType: hard +"terminal-link@npm:^2.1.1": + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" + dependencies: + ansi-escapes: "npm:^4.2.1" + supports-hyperlinks: "npm:^2.0.0" + checksum: 10c0/947458a5cd5408d2ffcdb14aee50bec8fb5022ae683b896b2f08ed6db7b2e7d42780d5c8b51e930e9c322bd7c7a517f4fa7c76983d0873c83245885ac5ee13e3 + languageName: node + linkType: hard + "terser@npm:^5.15.0": version: 5.46.0 resolution: "terser@npm:5.46.0" @@ -12077,6 +14040,20 @@ __metadata: languageName: node linkType: hard +"toqr@npm:^0.1.1": + version: 0.1.1 + resolution: "toqr@npm:0.1.1" + checksum: 10c0/eec346afae2eede8886938992a7eba59f765b3d3a3d5e7ce4984cb25b124e1a3d02531ed1ef3100d60fe443eeb1c7f83ca1fa0bbb04915d67baa5380e7c9eda4 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + "ts-api-utils@npm:^2.4.0": version: 2.4.0 resolution: "ts-api-utils@npm:2.4.0" @@ -12291,6 +14268,15 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^1.0.35": + version: 1.0.41 + resolution: "ua-parser-js@npm:1.0.41" + bin: + ua-parser-js: script/cli.js + checksum: 10c0/45dc1f7f3ce8248e0e64640d2e29c65c0ea1fc9cb105594de84af80e2a57bba4f718b9376098ca7a5b0ffe240f8995b0fa3714afa9d36861c41370a378f1a274 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.19.3 resolution: "uglify-js@npm:3.19.3" @@ -12535,6 +14521,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^7.0.3": + version: 7.0.3 + resolution: "uuid@npm:7.0.3" + bin: + uuid: dist/bin/uuid + checksum: 10c0/2eee5723b0fcce8256f5bfd3112af6c453b5471db00af9c3533e3d5a6e57de83513f9a145a570890457bd7abf2c2aa05797291d950ac666e5a074895dc63168b + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.3.0 resolution: "v8-to-istanbul@npm:9.3.0" @@ -12556,6 +14551,13 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 + languageName: node + linkType: hard + "vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -12595,6 +14597,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + "whatwg-fetch@npm:^3.0.0": version: 3.6.20 resolution: "whatwg-fetch@npm:3.6.20" @@ -12602,6 +14611,23 @@ __metadata: languageName: node linkType: hard +"whatwg-url-minimum@npm:^0.1.1": + version: 0.1.1 + resolution: "whatwg-url-minimum@npm:0.1.1" + checksum: 10c0/0e10fa110a3f7292d3fe0192ac0d823ab83601c5e2c1817a6371df038a9e1790cabdb866b0e1e67967e11d9b0d0b8ad1c61511fea62771e9f5fbb48c54b71319 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -12806,6 +14832,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.12.1": + version: 8.19.0 + resolution: "ws@npm:8.19.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04 + languageName: node + linkType: hard + "wsl-utils@npm:^0.1.0": version: 0.1.0 resolution: "wsl-utils@npm:0.1.0" @@ -12815,6 +14856,40 @@ __metadata: languageName: node linkType: hard +"xcode@npm:^3.0.1": + version: 3.0.1 + resolution: "xcode@npm:3.0.1" + dependencies: + simple-plist: "npm:^1.1.0" + uuid: "npm:^7.0.3" + checksum: 10c0/51bf35cee52909aeb18f868ecf9828f93b8042fadf968159320f9f11e757a52e43f6563a53b586986cfe5a34d576f3300c4c0cf1e14300084344ae206eaa53c3 + languageName: node + linkType: hard + +"xml2js@npm:0.6.0": + version: 0.6.0 + resolution: "xml2js@npm:0.6.0" + dependencies: + sax: "npm:>=0.6.0" + xmlbuilder: "npm:~11.0.0" + checksum: 10c0/db1ad659210eda4b77929aa692271308ec7e04830112161b8c707f3bcc7138947409c8461ae5c8bcb36b378d62594a8d1cb78770ff5c3dc46a68c67a0838b486 + languageName: node + linkType: hard + +"xmlbuilder@npm:^15.1.1": + version: 15.1.1 + resolution: "xmlbuilder@npm:15.1.1" + checksum: 10c0/665266a8916498ff8d82b3d46d3993913477a254b98149ff7cff060d9b7cc0db7cf5a3dae99aed92355254a808c0e2e3ec74ad1b04aa1061bdb8dfbea26c18b8 + languageName: node + linkType: hard + +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 10c0/74b979f89a0a129926bc786b913459bdbcefa809afaa551c5ab83f89b1915bdaea14c11c759284bb9b931e3b53004dbc2181e21d3ca9553eeb0b2a7b4e40c35b + languageName: node + linkType: hard + "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -12953,3 +15028,10 @@ __metadata: checksum: 10c0/860d25a81ab41d33aa25f8d0d07b091a04acb426e605f396227a796e9e800c44723ed96d0f53a512b57be3d1520f45bf69c0cb3b378a232a00787a2609625307 languageName: node linkType: hard + +"zod@npm:^3.25.76": + version: 3.25.76 + resolution: "zod@npm:3.25.76" + checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c + languageName: node + linkType: hard From 19d158cfe88cb002cf5794e063c5c43ef7ff6be7 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 03:24:02 -0400 Subject: [PATCH 03/13] chore(example): expo web setup - fix web entry config --- .gitignore | 1 + .../console-2026-03-15T07-17-07-752Z.log | 11 +++++++++++ .../console-2026-03-15T07-17-12-939Z.log | 13 +++++++++++++ .playwright-cli/page-2026-03-15T07-17-07-967Z.yml | 0 example/app.json | 12 +++++++++--- example/index.js | 5 ++--- example/package.json | 1 + 7 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 .playwright-cli/console-2026-03-15T07-17-07-752Z.log create mode 100644 .playwright-cli/console-2026-03-15T07-17-12-939Z.log create mode 100644 .playwright-cli/page-2026-03-15T07-17-07-967Z.yml diff --git a/.gitignore b/.gitignore index 67f3212..cdaf25a 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,4 @@ android/generated # React Native Nitro Modules nitrogen/ +.playwright-cli/ diff --git a/.playwright-cli/console-2026-03-15T07-17-07-752Z.log b/.playwright-cli/console-2026-03-15T07-17-07-752Z.log new file mode 100644 index 0000000..8bdd98f --- /dev/null +++ b/.playwright-cli/console-2026-03-15T07-17-07-752Z.log @@ -0,0 +1,11 @@ +[ 198ms] TypeError: Failed to set an indexed property [0] on 'CSSStyleDeclaration': Indexed property setter is not supported. + at setValueForStyle (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2294:391) + at setValueForStyles (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2302:84) + at setProp (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9077:9) + at setInitialProperties (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9461:120) + at completeWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:6259:24) + at completeUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8161:18) + at performUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8107:21) + at workLoopSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8009:38) + at renderRootSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7994:7) + at performWorkOnRoot (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7768:42) diff --git a/.playwright-cli/console-2026-03-15T07-17-12-939Z.log b/.playwright-cli/console-2026-03-15T07-17-12-939Z.log new file mode 100644 index 0000000..7148743 --- /dev/null +++ b/.playwright-cli/console-2026-03-15T07-17-12-939Z.log @@ -0,0 +1,13 @@ +Total messages: 1 (Errors: 1, Warnings: 0) + +TypeError: Failed to set an indexed property [0] on 'CSSStyleDeclaration': Indexed property setter is not supported. + at setValueForStyle (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2294:391) + at setValueForStyles (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2302:84) + at setProp (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9077:9) + at setInitialProperties (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9461:120) + at completeWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:6259:24) + at completeUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8161:18) + at performUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8107:21) + at workLoopSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8009:38) + at renderRootSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7994:7) + at performWorkOnRoot (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7768:42) \ No newline at end of file diff --git a/.playwright-cli/page-2026-03-15T07-17-07-967Z.yml b/.playwright-cli/page-2026-03-15T07-17-07-967Z.yml new file mode 100644 index 0000000..e69de29 diff --git a/example/app.json b/example/app.json index 6b557c1..199c6e2 100644 --- a/example/app.json +++ b/example/app.json @@ -6,8 +6,14 @@ "slug": "ease-example", "version": "1.0.0", "web": { - "bundler": "metro" + "bundler": "metro", + "output": "single", + "entry": "./index.js" }, - "platforms": ["ios", "android", "web"] + "platforms": [ + "ios", + "android", + "web" + ] } -} +} \ No newline at end of file diff --git a/example/index.js b/example/index.js index 117ddca..c1c862e 100644 --- a/example/index.js +++ b/example/index.js @@ -1,5 +1,4 @@ -import { AppRegistry } from 'react-native'; +import { registerRootComponent } from 'expo'; import App from './src/App'; -import { name as appName } from './app.json'; -AppRegistry.registerComponent(appName, () => App); +registerRootComponent(App); diff --git a/example/package.json b/example/package.json index 1eec9f3..4f779ec 100644 --- a/example/package.json +++ b/example/package.json @@ -2,6 +2,7 @@ "name": "react-native-ease-example", "version": "0.0.1", "private": true, + "main": "index.js", "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", From d07e21397025307e3bcdcdfc299aeab309a8afb5 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 12:01:15 -0400 Subject: [PATCH 04/13] fix(web): use StyleSheet.flatten to resolve RN style IDs/arrays The web EaseView receives RN StyleSheet numeric IDs and style arrays, but was trying to spread them directly as React.CSSProperties. Spreading an array gives {0: id} which caused: TypeError: Failed to set an indexed property [0] on CSSStyleDeclaration Fix: use StyleSheet.flatten() to resolve any RN StyleProp to a plain object before spreading into computedStyle. --- src/EaseView.web.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/EaseView.web.tsx b/src/EaseView.web.tsx index 26c02dc..73b9479 100644 --- a/src/EaseView.web.tsx +++ b/src/EaseView.web.tsx @@ -1,5 +1,6 @@ /// import React, { useEffect, useRef, useState, useCallback } from 'react'; +import { StyleSheet } from 'react-native'; import type { AnimateProps, CubicBezier, @@ -29,6 +30,13 @@ const EASING_PRESETS: Record = { easeInOut: [0.42, 0, 0.58, 1], }; +/** Flatten React Native StyleProp (number IDs, arrays, or objects) to a plain CSS object. */ +function flattenStyle(style: any): React.CSSProperties { + if (!style) return {}; + // Use RN's StyleSheet.flatten to resolve numeric IDs and arrays to plain objects. + return (StyleSheet.flatten(style) as React.CSSProperties) ?? {}; +} + export type EaseViewProps = { animate?: AnimateProps; initialAnimate?: AnimateProps; @@ -37,7 +45,7 @@ export type EaseViewProps = { /** No-op on web. */ useHardwareLayer?: boolean; transformOrigin?: TransformOrigin; - style?: React.CSSProperties; + style?: React.CSSProperties | Record | any[]; children?: React.ReactNode; } & Omit, 'style'>; @@ -239,16 +247,19 @@ export function EaseView({ }; }, [loopMode, animate, initialAnimate, duration, easing]); + const flatStyle = flattenStyle(style); + const computedStyle: React.CSSProperties = { - ...style, + ...flatStyle, opacity: displayValues.opacity, transform: transformStr, transformOrigin: `${originX}% ${originY}%`, borderRadius: displayValues.borderRadius > 0 ? displayValues.borderRadius - : style?.borderRadius, - backgroundColor: displayValues.backgroundColor ?? style?.backgroundColor, + : flatStyle?.borderRadius, + backgroundColor: + displayValues.backgroundColor ?? flatStyle?.backgroundColor, transition: loopMode ? 'none' : transitionCss, // Spring approximation: use the same CSS transition with estimated duration. // CSS does not natively support spring physics, so this is a best-effort From 5d28c019c7f801b3a63aca1c992fa978b71872c6 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 12:30:37 -0400 Subject: [PATCH 05/13] refactor(web): use View from react-native instead of raw div Replace the raw
with react-native View which: - Handles StyleSheet flattening automatically (no more manual flattenStyle) - Accepts StyleProp natively - Converts RN transform arrays to CSS transforms via react-native-web - Properly handles all RN style types (numeric IDs, arrays, objects) CSS transitions and keyframe animations are applied imperatively via the DOM ref, since View does not expose those as style props. Also removes accidentally committed .playwright-cli artifacts. --- .gitignore | 1 + .../console-2026-03-15T07-17-07-752Z.log | 11 -- .../console-2026-03-15T07-17-12-939Z.log | 13 -- .../page-2026-03-15T07-17-07-967Z.yml | 0 src/EaseView.web.tsx | 142 +++++++++--------- 5 files changed, 72 insertions(+), 95 deletions(-) delete mode 100644 .playwright-cli/console-2026-03-15T07-17-07-752Z.log delete mode 100644 .playwright-cli/console-2026-03-15T07-17-12-939Z.log delete mode 100644 .playwright-cli/page-2026-03-15T07-17-07-967Z.yml diff --git a/.gitignore b/.gitignore index cdaf25a..26f7a3b 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,4 @@ android/generated # React Native Nitro Modules nitrogen/ .playwright-cli/ +*.png diff --git a/.playwright-cli/console-2026-03-15T07-17-07-752Z.log b/.playwright-cli/console-2026-03-15T07-17-07-752Z.log deleted file mode 100644 index 8bdd98f..0000000 --- a/.playwright-cli/console-2026-03-15T07-17-07-752Z.log +++ /dev/null @@ -1,11 +0,0 @@ -[ 198ms] TypeError: Failed to set an indexed property [0] on 'CSSStyleDeclaration': Indexed property setter is not supported. - at setValueForStyle (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2294:391) - at setValueForStyles (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2302:84) - at setProp (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9077:9) - at setInitialProperties (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9461:120) - at completeWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:6259:24) - at completeUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8161:18) - at performUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8107:21) - at workLoopSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8009:38) - at renderRootSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7994:7) - at performWorkOnRoot (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7768:42) diff --git a/.playwright-cli/console-2026-03-15T07-17-12-939Z.log b/.playwright-cli/console-2026-03-15T07-17-12-939Z.log deleted file mode 100644 index 7148743..0000000 --- a/.playwright-cli/console-2026-03-15T07-17-12-939Z.log +++ /dev/null @@ -1,13 +0,0 @@ -Total messages: 1 (Errors: 1, Warnings: 0) - -TypeError: Failed to set an indexed property [0] on 'CSSStyleDeclaration': Indexed property setter is not supported. - at setValueForStyle (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2294:391) - at setValueForStyles (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:2302:84) - at setProp (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9077:9) - at setInitialProperties (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:9461:120) - at completeWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:6259:24) - at completeUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8161:18) - at performUnitOfWork (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8107:21) - at workLoopSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:8009:38) - at renderRootSync (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7994:7) - at performWorkOnRoot (http://localhost:8081/example/index.bundle?platform=web&dev=false&hot=false&lazy=true&transform.engine=hermes&transform.routerRoot=app&unstable_transformProfile=hermes-stable:7768:42) \ No newline at end of file diff --git a/.playwright-cli/page-2026-03-15T07-17-07-967Z.yml b/.playwright-cli/page-2026-03-15T07-17-07-967Z.yml deleted file mode 100644 index e69de29..0000000 diff --git a/src/EaseView.web.tsx b/src/EaseView.web.tsx index 73b9479..9baff01 100644 --- a/src/EaseView.web.tsx +++ b/src/EaseView.web.tsx @@ -1,6 +1,5 @@ -/// import React, { useEffect, useRef, useState, useCallback } from 'react'; -import { StyleSheet } from 'react-native'; +import { View, type ViewStyle, type StyleProp } from 'react-native'; import type { AnimateProps, CubicBezier, @@ -30,13 +29,6 @@ const EASING_PRESETS: Record = { easeInOut: [0.42, 0, 0.58, 1], }; -/** Flatten React Native StyleProp (number IDs, arrays, or objects) to a plain CSS object. */ -function flattenStyle(style: any): React.CSSProperties { - if (!style) return {}; - // Use RN's StyleSheet.flatten to resolve numeric IDs and arrays to plain objects. - return (StyleSheet.flatten(style) as React.CSSProperties) ?? {}; -} - export type EaseViewProps = { animate?: AnimateProps; initialAnimate?: AnimateProps; @@ -45,9 +37,9 @@ export type EaseViewProps = { /** No-op on web. */ useHardwareLayer?: boolean; transformOrigin?: TransformOrigin; - style?: React.CSSProperties | Record | any[]; + style?: StyleProp; children?: React.ReactNode; -} & Omit, 'style'>; +}; function resolveAnimateValues(props: AnimateProps | undefined): Required< Omit @@ -104,9 +96,6 @@ function resolveDuration(transition: Transition | undefined): number { if (!transition) return 300; if (transition.type === 'timing') return transition.duration ?? 300; if (transition.type === 'none') return 0; - // Spring type: approximate duration from damping/stiffness/mass. - // A critically-damped spring settles in ~4-5 time constants. - // tau = 2 * mass / damping, settle ~ 4 * tau const damping = transition.damping ?? 15; const mass = transition.mass ?? 1; const tau = (2 * mass) / damping; @@ -133,52 +122,39 @@ export function EaseView({ transformOrigin, style, children, - ...rest }: EaseViewProps) { const resolved = resolveAnimateValues(animate); const hasInitial = initialAnimate != null; const [mounted, setMounted] = useState(!hasInitial); - const divRef = useRef(null); + // On web, View ref gives us the underlying DOM element. + const viewRef = useRef(null); const animationNameRef = useRef(null); + const getElement = useCallback( + () => viewRef.current as unknown as HTMLElement | null, + [], + ); + // For initialAnimate: render initial values first, then animate on mount. useEffect(() => { if (hasInitial) { - // Force a layout read to flush initial styles before enabling transitions. - divRef.current?.getBoundingClientRect(); + getElement()?.getBoundingClientRect(); setMounted(true); } }, []); // eslint-disable-line react-hooks/exhaustive-deps - // Handle transitionend event. - const handleTransitionEnd = useCallback( - (e: React.TransitionEvent) => { - // Only fire for our own transitions, not children bubbling up. - if (e.target !== e.currentTarget) return; - // Fire once per batch — use opacity as the sentinel property. - if (e.propertyName !== 'opacity' && e.propertyName !== 'transform') - return; - onTransitionEnd?.({ finished: true }); - }, - [onTransitionEnd], - ); - - // Determine which values to render. const displayValues = !mounted && hasInitial ? resolveAnimateValues(initialAnimate) : resolved; const duration = resolveDuration(transition); const easing = resolveEasing(transition); - // Build computed styles. - const transformStr = buildTransform(displayValues); const originX = ((transformOrigin?.x ?? 0.5) * 100).toFixed(1); const originY = ((transformOrigin?.y ?? 0.5) * 100).toFixed(1); const transitionType = transition?.type ?? 'timing'; const loopMode = transition?.type === 'timing' ? transition.loop : undefined; - // Build CSS transition string. const transitionCss = transitionType === 'none' || (!mounted && hasInitial) ? 'none' @@ -186,13 +162,48 @@ export function EaseView({ ', ', ); + // Apply CSS transition/animation properties imperatively (not in RN style spec). + useEffect(() => { + const el = getElement(); + if (!el) return; + + if (!loopMode) { + const springTransition = + transitionType === 'spring' + ? TRANSITION_PROPS.map( + (prop) => + `${prop} ${duration}ms cubic-bezier(0.25, 0.46, 0.45, 0.94)`, + ).join(', ') + : null; + el.style.transition = springTransition ?? transitionCss; + } + el.style.willChange = 'transform, opacity'; + el.style.transformOrigin = `${originX}% ${originY}%`; + }); + + // Handle transitionend event via DOM listener. + useEffect(() => { + const el = getElement(); + if (!el || !onTransitionEnd) return; + + const handler = (e: TransitionEvent) => { + if (e.target !== e.currentTarget) return; + if (e.propertyName !== 'opacity' && e.propertyName !== 'transform') + return; + onTransitionEnd({ finished: true }); + }; + + el.addEventListener('transitionend', handler); + return () => el.removeEventListener('transitionend', handler); + }, [onTransitionEnd, getElement]); + // Handle loop animations via CSS @keyframes. useEffect(() => { - const el = divRef.current; + const el = getElement(); if (!loopMode || !el) { - // Clean up any existing animation. - if (animationNameRef.current && el) { - el.style.animation = ''; + if (animationNameRef.current) { + const cleanEl = getElement(); + if (cleanEl) cleanEl.style.animation = ''; animationNameRef.current = null; } return; @@ -238,6 +249,7 @@ export function EaseView({ document.head.appendChild(styleEl); const direction = loopMode === 'reverse' ? 'alternate' : 'normal'; + el.style.transition = 'none'; el.style.animation = `${name} ${duration}ms ${easing} infinite ${direction}`; return () => { @@ -245,44 +257,32 @@ export function EaseView({ el.style.animation = ''; animationNameRef.current = null; }; - }, [loopMode, animate, initialAnimate, duration, easing]); - - const flatStyle = flattenStyle(style); + }, [loopMode, animate, initialAnimate, duration, easing, getElement]); - const computedStyle: React.CSSProperties = { - ...flatStyle, + // Build animated style using RN transform array format. + // react-native-web converts these to CSS transform strings. + const animatedStyle: ViewStyle = { opacity: displayValues.opacity, - transform: transformStr, - transformOrigin: `${originX}% ${originY}%`, - borderRadius: - displayValues.borderRadius > 0 - ? displayValues.borderRadius - : flatStyle?.borderRadius, - backgroundColor: - displayValues.backgroundColor ?? flatStyle?.backgroundColor, - transition: loopMode ? 'none' : transitionCss, - // Spring approximation: use the same CSS transition with estimated duration. - // CSS does not natively support spring physics, so this is a best-effort - // timing approximation using an ease-out curve for a spring-like feel. - ...(transitionType === 'spring' && !loopMode - ? { - transition: TRANSITION_PROPS.map( - (prop) => - `${prop} ${duration}ms cubic-bezier(0.25, 0.46, 0.45, 0.94)`, - ).join(', '), - } + transform: [ + { translateX: displayValues.translateX }, + { translateY: displayValues.translateY }, + { scaleX: displayValues.scaleX }, + { scaleY: displayValues.scaleY }, + { rotate: `${displayValues.rotate}deg` }, + { rotateX: `${displayValues.rotateX}deg` }, + { rotateY: `${displayValues.rotateY}deg` }, + ], + ...(displayValues.borderRadius > 0 + ? { borderRadius: displayValues.borderRadius } + : {}), + ...(displayValues.backgroundColor + ? { backgroundColor: displayValues.backgroundColor } : {}), - willChange: 'transform, opacity', }; return ( -
+ {children} -
+
); } From 25f1a66acf4c33559b3317b4813421530ff8adc1 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 12:48:13 -0400 Subject: [PATCH 06/13] fix(web): don't override style border-radius/backgroundColor in loop keyframes Only include border-radius and background-color in CSS @keyframes when the user explicitly sets them in animate/initialAnimate props. Previously, IDENTITY defaults (borderRadius: 0) were always included, which overrode values set via the style prop (e.g. pulse's borderRadius: 30). --- src/EaseView.web.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/EaseView.web.tsx b/src/EaseView.web.tsx index 9baff01..74087c6 100644 --- a/src/EaseView.web.tsx +++ b/src/EaseView.web.tsx @@ -220,11 +220,19 @@ export function EaseView({ const name = `ease-loop-${++keyframeCounter}`; animationNameRef.current = name; + // Only include border-radius/background-color in keyframes when explicitly + // set by the user, to avoid overriding values from the style prop. + const hasBorderRadius = + initialAnimate?.borderRadius != null || animate?.borderRadius != null; + const hasBgColor = + initialAnimate?.backgroundColor != null || + animate?.backgroundColor != null; + const fromBlock = [ `opacity: ${fromValues.opacity}`, `transform: ${fromTransform}`, - `border-radius: ${fromValues.borderRadius}px`, - fromValues.backgroundColor + hasBorderRadius ? `border-radius: ${fromValues.borderRadius}px` : '', + hasBgColor && fromValues.backgroundColor ? `background-color: ${fromValues.backgroundColor}` : '', ] @@ -234,8 +242,8 @@ export function EaseView({ const toBlock = [ `opacity: ${toValues.opacity}`, `transform: ${toTransform}`, - `border-radius: ${toValues.borderRadius}px`, - toValues.backgroundColor + hasBorderRadius ? `border-radius: ${toValues.borderRadius}px` : '', + hasBgColor && toValues.backgroundColor ? `background-color: ${toValues.backgroundColor}` : '', ] From 1fab93479631236b35ff411a2eee25175e8f43e2 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 13:34:50 -0400 Subject: [PATCH 07/13] fix(web): remove will-change hint to fix overflow:hidden clipping will-change: transform causes the element to be promoted to its own GPU compositing layer, which can escape parent overflow:hidden clipping in some browsers. CSS animations already get GPU-promoted automatically, so the hint is unnecessary. --- src/EaseView.web.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/EaseView.web.tsx b/src/EaseView.web.tsx index 74087c6..f1f87ea 100644 --- a/src/EaseView.web.tsx +++ b/src/EaseView.web.tsx @@ -177,7 +177,6 @@ export function EaseView({ : null; el.style.transition = springTransition ?? transitionCss; } - el.style.willChange = 'transform, opacity'; el.style.transformOrigin = `${originX}% ${originY}%`; }); From 43d6445c50e7c3580f9a0af37afe07c085dd364f Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 14:35:18 -0400 Subject: [PATCH 08/13] fix(example): use useWindowDimensions for banner width on web BANNER_WIDTH was computed at module load time using Dimensions.get('window') which bakes in the build-time window width on static web exports. Switched to useWindowDimensions() hook so the banner correctly sizes to the actual viewport width at render time. --- .../ios/EaseExample.xcodeproj/project.pbxproj | 58 +++++++- example/ios/EaseExample/PrivacyInfo.xcprivacy | 15 ++- example/ios/Podfile.lock | 125 +++++++++++++++++- example/src/App.tsx | 48 +++---- 4 files changed, 210 insertions(+), 36 deletions(-) diff --git a/example/ios/EaseExample.xcodeproj/project.pbxproj b/example/ios/EaseExample.xcodeproj/project.pbxproj index 04c6db9..e44f0c8 100644 --- a/example/ios/EaseExample.xcodeproj/project.pbxproj +++ b/example/ios/EaseExample.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 33DE4459CEAA367436D50361 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + 8DCDB5AAED85C22E0CAD8165 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE06FE8D495B87E16131039B /* ExpoModulesProvider.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -24,6 +25,7 @@ 5DCACB8F33CDC322A6C60F78 /* libPods-EaseExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-EaseExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = EaseExample/AppDelegate.swift; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = EaseExample/LaunchScreen.storyboard; sourceTree = ""; }; + DE06FE8D495B87E16131039B /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-EaseExample/ExpoModulesProvider.swift"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -60,6 +62,14 @@ name = Frameworks; sourceTree = ""; }; + 430463FC6D22CBC22B82C194 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + A60D4F33ACE3D047C6FF7662 /* EaseExample */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -67,7 +77,7 @@ name = Libraries; sourceTree = ""; }; - 83CBB9F61A601CBA00E9B192 /* PBXGroup */ = { + 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( 13B07FAE1A68108700A75B9A /* EaseExample */, @@ -75,6 +85,7 @@ 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, BBD78D7AC51CEA395F1C20DB /* Pods */, + 430463FC6D22CBC22B82C194 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -89,6 +100,14 @@ name = Products; sourceTree = ""; }; + A60D4F33ACE3D047C6FF7662 /* EaseExample */ = { + isa = PBXGroup; + children = ( + DE06FE8D495B87E16131039B /* ExpoModulesProvider.swift */, + ); + name = EaseExample; + sourceTree = ""; + }; BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( @@ -106,6 +125,7 @@ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "EaseExample" */; buildPhases = ( C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 5BA567C489100F46E32E1A59 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, @@ -125,7 +145,7 @@ /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 = { + 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 1210; @@ -143,7 +163,7 @@ en, Base, ); - mainGroup = 83CBB9F61A601CBA00E9B192 /* PBXGroup */; + mainGroup = 83CBB9F61A601CBA00E9B192; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -200,6 +220,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-EaseExample/Pods-EaseExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 5BA567C489100F46E32E1A59 /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env", + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/Pods/Target Support Files/Pods-EaseExample/expo-configure-project.sh", + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Pods/Target Support Files/Pods-EaseExample/ExpoModulesProvider.swift", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-EaseExample/expo-configure-project.sh\"\n"; + }; C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -247,6 +290,7 @@ buildActionMask = 2147483647; files = ( 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */, + 8DCDB5AAED85C22E0CAD8165 /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -273,6 +317,7 @@ "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = ease.example; PRODUCT_NAME = EaseExample; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -300,6 +345,7 @@ "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = ease.example; PRODUCT_NAME = EaseExample; SWIFT_VERSION = 5.0; @@ -380,8 +426,8 @@ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - USE_HERMES = true; SWIFT_VERSION = 5.0; + USE_HERMES = true; }; name = Debug; }; @@ -449,9 +495,9 @@ ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; USE_HERMES = true; VALIDATE_PRODUCT = YES; - SWIFT_VERSION = 5.0; }; name = Release; }; @@ -478,5 +524,5 @@ }; /* End XCConfigurationList section */ }; - rootObject = 83CBB9F71A601CBA00E9B192; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; } diff --git a/example/ios/EaseExample/PrivacyInfo.xcprivacy b/example/ios/EaseExample/PrivacyInfo.xcprivacy index 41b8317..5bb83c5 100644 --- a/example/ios/EaseExample/PrivacyInfo.xcprivacy +++ b/example/ios/EaseExample/PrivacyInfo.xcprivacy @@ -4,20 +4,31 @@ NSPrivacyAccessedAPITypes + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + NSPrivacyAccessedAPIType NSPrivacyAccessedAPICategoryFileTimestamp NSPrivacyAccessedAPITypeReasons + 0A2A.1 + 3B52.1 C617.1 NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPICategoryDiskSpace NSPrivacyAccessedAPITypeReasons - CA92.1 + E174.1 + 85F4.1 diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 324798d..5d96e79 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -29,6 +29,87 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - EXConstants (55.0.7): + - ExpoModulesCore + - Expo (55.0.6): + - boost + - DoubleConversion + - ExpoModulesCore + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactAppDependencyProvider + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - ExpoAsset (55.0.8): + - ExpoModulesCore + - ExpoDomWebView (55.0.3): + - ExpoModulesCore + - ExpoFileSystem (55.0.10): + - ExpoModulesCore + - ExpoFont (55.0.4): + - ExpoModulesCore + - ExpoKeepAwake (55.0.4): + - ExpoModulesCore + - ExpoLogBox (55.0.7): + - React-Core + - ExpoModulesCore (55.0.15): + - boost + - DoubleConversion + - ExpoModulesJSI + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNWorklets + - SocketRocket + - Yoga + - ExpoModulesJSI (55.0.15): + - hermes-engine + - React-Core + - React-runtimescheduler + - ReactCommon - fast_float (8.0.0) - FBLazyVector (0.83.0) - fmt (11.0.2) @@ -2752,6 +2833,16 @@ DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - Ease (from `../..`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - Expo (from `../node_modules/expo`) + - ExpoAsset (from `../node_modules/expo-asset/ios`) + - "ExpoDomWebView (from `../node_modules/@expo/dom-webview/ios`)" + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoFont (from `../node_modules/expo-font/ios`) + - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) + - "ExpoLogBox (from `../node_modules/@expo/log-box`)" + - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoModulesJSI (from `../node_modules/expo-modules-core`) - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) @@ -2844,6 +2935,26 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" Ease: :path: "../.." + EXConstants: + :path: "../node_modules/expo-constants/ios" + Expo: + :path: "../node_modules/expo" + ExpoAsset: + :path: "../node_modules/expo-asset/ios" + ExpoDomWebView: + :path: "../node_modules/@expo/dom-webview/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoFont: + :path: "../node_modules/expo-font/ios" + ExpoKeepAwake: + :path: "../node_modules/expo-keep-awake/ios" + ExpoLogBox: + :path: "../node_modules/@expo/log-box" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" + ExpoModulesJSI: + :path: "../node_modules/expo-modules-core" fast_float: :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: @@ -3006,11 +3117,21 @@ SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb Ease: 1926ac476b99e4d4bbe830c0f8f7edf5d3990cdb + EXConstants: b3c63be5f8648e4ab8e6ff5099b62f629247f969 + Expo: a1988cb6c9c1718ce768d3cf23e4ee01c2a0070a + ExpoAsset: bdc7bc21fe25d197c3aa7547e14c12c42087d9c9 + ExpoDomWebView: f101fb3db4b6eec4163fca51f7507189b7e48661 + ExpoFileSystem: e1a42d7f69f7faae33f4d7d01708f7861f7bd757 + ExpoFont: 1aa465cf9f8ac6b670405becba8b15473581b2dd + ExpoKeepAwake: 7f3b28c361c37389b18841bb52a58003b39fcb33 + ExpoLogBox: 89b634d5a8a64c4a6a7caad8f9985a28463c7002 + ExpoModulesCore: b22629f1f1adf4d174c218ff9e0d7366b8b0cc9d + ExpoModulesJSI: 46dab6c6d9e181bf94757367a0d569bfc7fffd99 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FBLazyVector: a293a88992c4c33f0aee184acab0b64a08ff9458 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: a3bc462fbff75c23f8cb35ae50c37c12905b7423 + hermes-engine: acf937fcc6b1444c2801d559508f14c86a61c05b RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: 2b70c6e3abe00396cefd8913efbf6a2db01a2b36 RCTRequired: f3540eee8094231581d40c5c6d41b0f170237a81 @@ -3086,6 +3207,6 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 6ca93c8c13f56baeec55eb608577619b17a4d64e -PODFILE CHECKSUM: b945c918935ce26cb0357d98636dc7184bab408a +PODFILE CHECKSUM: 22b113d3b3717d11f710014850dff855e5bf40da COCOAPODS: 1.16.2 diff --git a/example/src/App.tsx b/example/src/App.tsx index 08f83dc..4d71865 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -5,7 +5,7 @@ import { Text, Pressable, ScrollView, - Dimensions, + useWindowDimensions, } from 'react-native'; import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; import { EaseView, type TransitionEndEvent } from 'react-native-ease'; @@ -15,10 +15,6 @@ import { Section } from './components/Section'; import { TabBar, type Screen } from './components/TabBar'; import { Button } from './components/Button'; -const { width: SCREEN_WIDTH } = Dimensions.get('window'); -// 20px scrollContent padding + 20px section padding on each side -const BANNER_WIDTH = SCREEN_WIDTH - 80; - function ButtonDemo() { const [pressed, setPressed] = useState(false); @@ -46,9 +42,25 @@ function ButtonDemo() { function BannerDemo() { const [playing, setPlaying] = useState(false); + const { width: SCREEN_WIDTH } = useWindowDimensions(); + const BANNER_WIDTH = SCREEN_WIDTH - 80; + const bannerContainerStyle = { + width: BANNER_WIDTH, + height: 60, + overflow: 'hidden' as const, + borderRadius: 12, + }; + const bannerTrackStyle = { flexDirection: 'row' as const, height: 60 }; + const bannerSlideStyle = { + width: BANNER_WIDTH, + height: 60, + backgroundColor: '#4a90d9', + alignItems: 'center' as const, + justifyContent: 'center' as const, + }; return (
- + {playing && ( - + react-native-ease - + react-native-ease @@ -595,23 +607,7 @@ const styles = StyleSheet.create({ fontSize: 18, fontWeight: '700', }, - bannerContainer: { - width: BANNER_WIDTH, - height: 60, - overflow: 'hidden', - borderRadius: 12, - }, - bannerTrack: { - flexDirection: 'row', - height: 60, - }, - bannerSlide: { - width: BANNER_WIDTH, - height: 60, - backgroundColor: '#4a90d9', - alignItems: 'center', - justifyContent: 'center', - }, + bannerText: { color: '#fff', fontSize: 16, From 2215b53471bda6993458baf31918459c72d3227a Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 17:25:23 -0400 Subject: [PATCH 09/13] fix(web): add dom lib to tsconfig, fix viewRef type, fix app registration for native --- example/index.js | 9 +++++++-- src/EaseView.web.tsx | 2 +- tsconfig.json | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/example/index.js b/example/index.js index c1c862e..e554206 100644 --- a/example/index.js +++ b/example/index.js @@ -1,4 +1,9 @@ -import { registerRootComponent } from 'expo'; +import { AppRegistry, Platform } from 'react-native'; import App from './src/App'; -registerRootComponent(App); +AppRegistry.registerComponent('EaseExample', () => App); + +if (Platform.OS === 'web') { + const rootTag = document.getElementById('root'); + AppRegistry.runApplication('EaseExample', { rootTag }); +} diff --git a/src/EaseView.web.tsx b/src/EaseView.web.tsx index f1f87ea..a1e872b 100644 --- a/src/EaseView.web.tsx +++ b/src/EaseView.web.tsx @@ -127,7 +127,7 @@ export function EaseView({ const hasInitial = initialAnimate != null; const [mounted, setMounted] = useState(!hasInitial); // On web, View ref gives us the underlying DOM element. - const viewRef = useRef(null); + const viewRef = useRef>(null); const animationNameRef = useRef(null); const getElement = useCallback( diff --git a/tsconfig.json b/tsconfig.json index 45fec6d..144603d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "jsx": "react-jsx", - "lib": ["ESNext"], + "lib": ["ESNext", "dom"], "module": "ESNext", "moduleResolution": "bundler", "noEmit": true, From 6cfc5fc8a0e1cd5238d7e17c59bf4ed85ff2669c Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 18:06:11 -0400 Subject: [PATCH 10/13] fix(example): remove duplicate gradle-plugin includeBuild for Android CI --- example/android/settings.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 944d053..c4a15c3 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -14,7 +14,5 @@ id("expo-autolinking-settings") extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) } rootProject.name = 'ease.example' include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') expoAutolinking.useExpoModules() expoAutolinking.useExpoVersionCatalog() -includeBuild(expoAutolinking.reactNativeGradlePlugin) From 7758f75a0b87ca34bf6796ead212478b354e55ee Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 18:58:32 -0400 Subject: [PATCH 11/13] fix(example): fix Android build - deduplicate gradle-plugin includeBuild --- example/package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/example/package.json b/example/package.json index 4f779ec..4e333b4 100644 --- a/example/package.json +++ b/example/package.json @@ -40,5 +40,8 @@ }, "engines": { "node": ">=20" + }, + "resolutions": { + "@react-native/gradle-plugin": "0.83.0" } -} +} \ No newline at end of file From eff87a6cef8e0678a29b847a25df249428218038 Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 19:06:37 -0400 Subject: [PATCH 12/13] fix(example): fix Android CI - use expo autolinking for gradle-plugin includeBuild --- example/android/settings.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/example/android/settings.gradle b/example/android/settings.gradle index c4a15c3..1c91ac7 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,4 +1,4 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") +pluginManagement { def expoPluginsPath = new File( providers.exec { workingDir(rootDir) @@ -16,3 +16,4 @@ rootProject.name = 'ease.example' include ':app' expoAutolinking.useExpoModules() expoAutolinking.useExpoVersionCatalog() +includeBuild(expoAutolinking.reactNativeGradlePlugin) From 7e439da60dfa201062dba99f7f526413c1502b6d Mon Sep 17 00:00:00 2001 From: janicduplessis Date: Sun, 15 Mar 2026 19:10:13 -0400 Subject: [PATCH 13/13] fix(example): restore gradle-plugin includeBuild in pluginManagement for settings plugin --- example/android/settings.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 1c91ac7..c09a958 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,4 +1,4 @@ -pluginManagement { +pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") def expoPluginsPath = new File( providers.exec { workingDir(rootDir) @@ -8,12 +8,12 @@ pluginManagement { ).absolutePath includeBuild(expoPluginsPath) } -plugins { id("com.facebook.react.settings") +plugins { id("com.facebook.react.settings") id("expo-autolinking-settings") } extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) } rootProject.name = 'ease.example' include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') expoAutolinking.useExpoModules() expoAutolinking.useExpoVersionCatalog() -includeBuild(expoAutolinking.reactNativeGradlePlugin)