diff --git a/apps/example/app.json b/apps/example/app.json index 86e0214396..794db29205 100644 --- a/apps/example/app.json +++ b/apps/example/app.json @@ -32,12 +32,21 @@ ] }, "ios": { - "metalAPIValidation": false + "metalAPIValidation": false, + "infoPlist": { + "NSMicrophoneUsageDescription": "This app needs access to the microphone to test voice recording and reproduce audio-related bugs with Skia rendering." + } }, "macos": { - "metalAPIValidation": false + "metalAPIValidation": false, + "infoPlist": { + "NSMicrophoneUsageDescription": "This app needs access to the microphone to test voice recording and reproduce audio-related bugs with Skia rendering." + } }, "visionos": { - "metalAPIValidation": false + "metalAPIValidation": false, + "infoPlist": { + "NSMicrophoneUsageDescription": "This app needs access to the microphone to test voice recording and reproduce audio-related bugs with Skia rendering." + } } } diff --git a/apps/example/ios/Podfile.lock b/apps/example/ios/Podfile.lock index 2aaa1f6362..810f3abd54 100644 --- a/apps/example/ios/Podfile.lock +++ b/apps/example/ios/Podfile.lock @@ -1327,49 +1327,6 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-slider (4.5.7): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - react-native-slider/common (= 4.5.7) - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - react-native-slider/common (4.5.7): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - React-NativeModulesApple (0.78.0): - glog - hermes-engine @@ -1657,6 +1614,8 @@ PODS: - React-logger (= 0.78.0) - React-perflogger (= 0.78.0) - React-utils (= 0.78.0) + - ReactNativeAudioToolkit (2.0.3): + - React - ReactNativeHost (0.5.12): - DoubleConversion - glog @@ -1957,7 +1916,6 @@ DEPENDENCIES: - React-microtasksnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-safe-area-context (from `../../../node_modules/react-native-safe-area-context`) - "react-native-skia (from `../../../node_modules/@shopify/react-native-skia`)" - - "react-native-slider (from `../../../node_modules/@react-native-community/slider`)" - React-NativeModulesApple (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../../../node_modules/react-native/ReactCommon/reactperflogger`) - React-performancetimeline (from `../../../node_modules/react-native/ReactCommon/react/performance/timeline`) @@ -1986,6 +1944,7 @@ DEPENDENCIES: - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`) + - "ReactNativeAudioToolkit (from `../../../node_modules/@react-native-community/audio-toolkit`)" - "ReactNativeHost (from `../node_modules/@rnx-kit/react-native-host`)" - ReactTestApp-DevSupport (from `../node_modules/react-native-test-app`) - ReactTestApp-Resources (from `..`) @@ -2079,8 +2038,6 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native-safe-area-context" react-native-skia: :path: "../../../node_modules/@shopify/react-native-skia" - react-native-slider: - :path: "../../../node_modules/@react-native-community/slider" React-NativeModulesApple: :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" React-perflogger: @@ -2137,6 +2094,8 @@ EXTERNAL SOURCES: :path: build/generated/ios ReactCommon: :path: "../../../node_modules/react-native/ReactCommon" + ReactNativeAudioToolkit: + :path: "../../../node_modules/@react-native-community/audio-toolkit" ReactNativeHost: :path: "../node_modules/@rnx-kit/react-native-host" ReactTestApp-DevSupport: @@ -2162,77 +2121,77 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 hermes-engine: b417d2b2aee3b89b58e63e23a51e02be91dc876d - RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 RCTDeprecation: b2eecf2d60216df56bc5e6be5f063826d3c1ee35 RCTRequired: 78522de7dc73b81f3ed7890d145fa341f5bb32ea RCTTypeSafety: c135dd2bf50402d87fd12884cbad5d5e64850edd React: b229c49ed5898dab46d60f61ed5a0bfa2ee2fadb React-callinvoker: 2ac508e92c8bd9cf834cc7d7787d94352e4af58f - React-Core: 13cdd1558d0b3f6d9d5a22e14d89150280e79f02 - React-CoreModules: b07a6744f48305405e67c845ebf481b6551b712a - React-cxxreact: 1055a86c66ac35b4e80bd5fb766aed5f494dfff4 + React-Core: 325b4f6d9162ae8b9a6ff42fe78e260eb124180d + React-CoreModules: 558041e5258f70cd1092f82778d07b8b2ff01897 + React-cxxreact: 8fff17cbe76e6a8f9991b59552e1235429f9c74b React-debug: 0a5fcdbacc6becba0521e910c1bcfdb20f32a3f6 - React-defaultsnativemodule: 4bb28fc97fee5be63a9ebf8f7a435cfe8ba69459 - React-domnativemodule: b36a11c2597243d7563985028c51ece988d8ae33 - React-Fabric: afc561718f25b2cd800b709d934101afe376a12c - React-FabricComponents: f4e0a4e18a27bf6d39cbf2a0b42f37a92fa4e37f - React-FabricImage: 37d8e8b672eda68a19d71143eb65148084efb325 + React-defaultsnativemodule: 618dc50a0fad41b489997c3eb7aba3a74479fd14 + React-domnativemodule: 7ba599afb6c2a7ec3eb6450153e2efe0b8747e9a + React-Fabric: 252112089d2c63308f4cbfade4010b6606db67d1 + React-FabricComponents: 3c0f75321680d14d124438ab279c64ec2a3d13c4 + React-FabricImage: 728b8061cdec2857ca885fd605ee03ad43ffca98 React-featureflags: 19682e02ef5861d96b992af16a19109c3dfc1200 - React-featureflagsnativemodule: d7cddf6d907b4e5ab84f9e744b7e88461656e48c - React-graphics: b0f78580cdaf5800d25437e3d41cc6c3d83b7aea - React-hermes: 71186f872c932e4574d5feb3ed754dda63a0b3bd - React-idlecallbacksnativemodule: dd2af19cdd3bc55149d17a2409ed72b694dfbe9c - React-ImageManager: a77dde8d5aa6a2b6962c702bf3a47695ef0aa32b - React-jserrorhandler: 9c14e89f12d5904257a79aaf84a70cd2e5ac07ba - React-jsi: 0775a66820496769ad83e629f0f5cce621a57fc7 - React-jsiexecutor: 2cf5ba481386803f3c88b85c63fa102cba5d769e - React-jsinspector: 8052d532bb7a98b6e021755674659802fb140cc5 - React-jsinspectortracing: bdd8fd0adcb4813663562e7874c5842449df6d8a - React-jsitracing: 2bab3bf55de3d04baf205def375fa6643c47c794 - React-logger: 795cd5055782db394f187f9db0477d4b25b44291 - React-Mapbuffer: 0502faf46cab8fb89cfc7bf3e6c6109b6ef9b5de - React-microtasksnativemodule: 663bc64e3a96c5fc91081923ae7481adc1359a78 - react-native-safe-area-context: 286b3e7b5589795bb85ffc38faf4c0706c48a092 - react-native-skia: 0457c9311947ef4642e3f55d5647220c5e529eb2 - react-native-slider: 27263d134d55db948a4706f1e47d0ec88fb354dd - React-NativeModulesApple: 16fbd5b040ff6c492dacc361d49e63cba7a6a7a1 - React-perflogger: ab51b7592532a0ea45bf6eed7e6cae14a368b678 - React-performancetimeline: bc2e48198ec814d578ac8401f65d78a574358203 + React-featureflagsnativemodule: 23528c7e7d50782b7ef0804168ba40bbaf1e86ab + React-graphics: fefe48f71bfe6f48fd037f59e8277b12e91b6be1 + React-hermes: a9a0c8377627b5506ef9a7b6f60a805c306e3f51 + React-idlecallbacksnativemodule: 7e2b6a3b70e042f89cd91dbd73c479bb39a72a7e + React-ImageManager: e3300996ac2e2914bf821f71e2f2c92ae6e62ae2 + React-jserrorhandler: fa75876c662e5d7e79d6efc763fc9f4c88e26986 + React-jsi: f3f51595cc4c089037b536368f016d4742bf9cf7 + React-jsiexecutor: cca6c232db461e2fd213a11e9364cfa6fdaa20eb + React-jsinspector: 2bd4c9fddf189d6ec2abf4948461060502582bef + React-jsinspectortracing: a417d8a0ad481edaa415734b4dac81e3e5ee7dc6 + React-jsitracing: 1ff7172c5b0522cbf6c98d82bdbb160e49b5804e + React-logger: 018826bfd51b9f18e87f67db1590bc510ad20664 + React-Mapbuffer: 3c11cee7737609275c7b66bd0b1de475f094cedf + React-microtasksnativemodule: 843f352b32aacbe13a9c750190d34df44c3e6c2c + react-native-safe-area-context: 0f14bce545abcdfbff79ce2e3c78c109f0be283e + react-native-skia: 83ea407f6494e4a24a9c971cbfccedca4fe00e65 + React-NativeModulesApple: 88433b6946778bea9c153e27b671de15411bf225 + React-perflogger: 9e8d3c0dc0194eb932162812a168aa5dc662f418 + React-performancetimeline: 5a2d6efef52bdcefac079c7baa30934978acd023 React-RCTActionSheet: 592674cf61142497e0e820688f5a696e41bf16dd - React-RCTAnimation: 8fbb8dba757b49c78f4db403133ab6399a4ce952 - React-RCTAppDelegate: 7f88baa8cb4e5d6c38bb4d84339925c70c9ac864 - React-RCTBlob: f89b162d0fe6b570a18e755eb16cbe356d3c6d17 - React-RCTFabric: 8ad6d875abe6e87312cef90e4b15ef7f6bed72e6 - React-RCTFBReactNativeSpec: 8c29630c2f379c729300e4c1e540f3d1b78d1936 - React-RCTImage: ccac9969940f170503857733f9a5f63578e106e1 - React-RCTLinking: d82427bbf18415a3732105383dff119131cadd90 - React-RCTNetwork: 12ad4d0fbde939e00251ca5ca890da2e6825cc3c - React-RCTSettings: e7865bf9f455abf427da349c855f8644b5c39afa - React-RCTText: 2cdfd88745059ec3202a0842ea75a956c7d6f27d - React-RCTVibration: a3a1458e6230dfd64b3768ebc0a4aac430d9d508 + React-RCTAnimation: e6d669872f9b3b4ab9527aab283b7c49283236b7 + React-RCTAppDelegate: de2343fe08be4c945d57e0ecce44afcc7dd8fc03 + React-RCTBlob: 3e2dce94c56218becc4b32b627fc2293149f798d + React-RCTFabric: cac2c033381d79a5956e08550b0220cb2d78ea93 + React-RCTFBReactNativeSpec: d10ca5e0ccbfeac8c047361fedf8e4ac653887b6 + React-RCTImage: dc04b176c022d12a8f55ae7a7279b1e091066ae0 + React-RCTLinking: 88f5e37fe4f26fbc80791aa2a5f01baf9b9a3fd5 + React-RCTNetwork: f213693565efbd698b8e9c18d700a514b49c0c8e + React-RCTSettings: a2d32a90c45a3575568cad850abc45924999b8a5 + React-RCTText: 54cdcd1cbf6f6a91dc6317f5d2c2b7fc3f6bf7a0 + React-RCTVibration: 11dae0e7f577b5807bb7d31e2e881eb46f854fd4 React-rendererconsistency: 64e897e00d2568fd8dfe31e2496f80e85c0aaad1 - React-rendererdebug: a3f6d3ae7d2fa0035885026756281c07ee32479e + React-rendererdebug: 41ce452460c44bba715d9e41d5493a96de277764 React-rncore: 58748c2aa445f56b99e5118dad0aedb51c40ce9f - React-RuntimeApple: f0fda7bacabd32daa099cfda8f07466c30acd149 - React-RuntimeCore: 683ee0b6a76d4b4bf6fbf83a541895b4887cc636 + React-RuntimeApple: 7785ed0d8ae54da65a88736bb63ca97608a6d933 + React-RuntimeCore: 6029ea70bc77f98cfd43ebe69217f14e93ba1f12 React-runtimeexecutor: a188df372373baf5066e6e229177836488799f80 - React-RuntimeHermes: 907c8e9bec13ea6466b94828c088c24590d4d0b6 - React-runtimescheduler: a2e2a39125dd6426b5d8b773f689d660cd7c5f60 + React-RuntimeHermes: a264609c28b796edfffc8ae4cb8fad1773ab948b + React-runtimescheduler: 23ec3a1e0fb1ec752d1a9c1fb15258c30bfc7222 React-timing: bb220a53a795ed57976a4855c521f3de2f298fe5 - React-utils: 300d8bbb6555dcffaca71e7a0663201b5c7edbbc - ReactAppDependencyProvider: f2e81d80afd71a8058589e19d8a134243fa53f17 - ReactCodegen: 50b6e45bbbef9b39d9798820cdbe87bfc7922e22 - ReactCommon: 3d39389f8e2a2157d5c999f8fba57bd1c8f226f0 - ReactNativeHost: e96154926221741f253f2c1ded13c6959c5c3d43 - ReactTestApp-DevSupport: 6994b53b5b81139a8ce63e0776c726c95de079a1 + React-utils: 3b054aaebe658fc710a8d239d0e4b9fd3e0b78f9 + ReactAppDependencyProvider: a1fb08dfdc7ebc387b2e54cfc9decd283ed821d8 + ReactCodegen: e232f8db3a40721044ec81b9388f95a7afaad36a + ReactCommon: 0c097b53f03d6bf166edbcd0915da32f3015dd90 + ReactNativeAudioToolkit: 1b4cddfc1cc4624c3db0a936d700fef298458f19 + ReactNativeHost: 1b6ccdcfc87bb31e772a5b3c3ca3b09c90954328 + ReactTestApp-DevSupport: ea18f446cff64b6c9a3e28788600c82ecf51bde6 ReactTestApp-Resources: 1bd9ff10e4c24f2ad87101a32023721ae923bccf - RNGestureHandler: 66e593addd8952725107cfaa4f5e3378e946b541 - RNReanimated: 858fe25904af44131b8b608a5005b64778609a6a - RNScreens: 0f01bbed9bd8045a8d58e4b46993c28c7f498f3c - RNSVG: 8588ee1ca9b2e6fd2c99466e35b3db0e9f81bb40 + RNGestureHandler: dcb1b1db024f3744b03af56d132f4f72c4c27195 + RNReanimated: d5f33d14a4d1da33a02d89124de233a64b3aaeaa + RNScreens: 790123c4a28783d80a342ce42e8c7381bed62db1 + RNSVG: 8126581b369adf6a0004b6a6cab1a55e3002d5b0 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 9b7fb56e7b08cde60e2153344fa6afbd88e5d99f + Yoga: afd04ff05ebe0121a00c468a8a3c8080221cb14c PODFILE CHECKSUM: 87506345285a0371afb28b9c3e6daaa999c214f3 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/apps/example/package.json b/apps/example/package.json index 3b1ff9efb4..9e711c7eac 100644 --- a/apps/example/package.json +++ b/apps/example/package.json @@ -16,11 +16,12 @@ "pod:install": "cd ios && pod install", "test": "jest", "tsc": "tsc --noEmit", - "start": "react-native start" + "start": "react-native start", + "postinstall": "yarn pod:install" }, "dependencies": { "@callstack/react-native-visionos": "^0.75.0", - "@react-native-community/slider": "^4.5.7", + "@react-native-community/audio-toolkit": "^2.0.3", "@react-navigation/bottom-tabs": "^7.2.1", "@react-navigation/elements": "^2.2.6", "@react-navigation/native": "^7.0.15", diff --git a/apps/example/src/Examples/Breathe/Breathe.tsx b/apps/example/src/Examples/Breathe/Breathe.tsx index 0f10360b55..85ad0e55f4 100644 --- a/apps/example/src/Examples/Breathe/Breathe.tsx +++ b/apps/example/src/Examples/Breathe/Breathe.tsx @@ -1,5 +1,14 @@ -import React, { useMemo } from "react"; -import { StyleSheet, useWindowDimensions, View } from "react-native"; +import React, { useMemo, useState, useEffect, useRef } from "react"; +import { + StyleSheet, + useWindowDimensions, + View, + TouchableOpacity, + Text, + Alert, + Platform, + PermissionsAndroid, +} from "react-native"; import { BlurMask, vec, @@ -12,6 +21,7 @@ import { } from "@shopify/react-native-skia"; import type { SharedValue } from "react-native-reanimated"; import { useDerivedValue } from "react-native-reanimated"; +import { Recorder } from "@react-native-community/audio-toolkit"; import { useLoop } from "../../components/Animations"; @@ -59,6 +69,8 @@ export const Breathe = () => { () => vec(width / 2, height / 2 - 64), [height, width] ); + const [isRecording, setIsRecording] = useState(false); + const recorderRef = useRef(null); const progress = useLoop({ duration: 3000 }); @@ -66,6 +78,139 @@ export const Breathe = () => { { rotate: mix(progress.value, -Math.PI, 0) }, ]); + // Clean up audio resources when component unmounts + useEffect(() => { + return () => { + if (recorderRef.current) { + recorderRef.current.destroy(); + recorderRef.current = null; + } + }; + }, []); + + const requestMicrophonePermission = async () => { + if (Platform.OS === "android") { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.RECORD_AUDIO, + { + title: "Microphone Permission", + message: + "App needs access to your microphone to test voice recording.", + buttonNeutral: "Ask Me Later", + buttonNegative: "Cancel", + buttonPositive: "OK", + } + ); + return granted === PermissionsAndroid.RESULTS.GRANTED; + } catch (err) { + console.warn(err); + return false; + } + } + return true; // iOS permissions are handled differently + }; + + const startVoiceSession = async () => { + try { + // Request permission first + const hasPermission = await requestMicrophonePermission(); + if (!hasPermission) { + Alert.alert( + "Permission Denied", + "Microphone permission is required for voice recording." + ); + return; + } + + console.log( + "Starting voice session - using real microphone with audio-toolkit..." + ); + + // Clean up any existing recorder + if (recorderRef.current) { + recorderRef.current.destroy(); + } + + // Create a new recorder instance + // Using a temporary filename for the recording + const recorder = new Recorder("test_recording.mp4", { + bitrate: 256000, + channels: 2, + sampleRate: 44100, + quality: "max", + format: "mp4", + encoder: "aac", + }); + + recorderRef.current = recorder; + + // Set up event handlers + recorder.on("info", (info) => { + console.log("Recorder info:", info); + }); + + recorder.on("error", (error) => { + console.error("Recorder error:", error); + Alert.alert("Recording Error", "An error occurred while recording."); + setIsRecording(false); + }); + + // Prepare and start recording + recorder.prepare((err, fsPath) => { + if (err) { + console.error("Failed to prepare recorder:", err); + Alert.alert("Error", "Failed to prepare audio recorder"); + return; + } + + console.log("Recorder prepared, starting recording at:", fsPath); + + recorder.record((recordErr) => { + if (recordErr) { + console.error("Failed to start recording:", recordErr); + Alert.alert("Error", "Failed to start recording"); + return; + } + + setIsRecording(true); + console.log("Voice recording started successfully"); + + Alert.alert( + "Voice Session Active", + "Real microphone recording is now active. Watch if Skia becomes unresponsive.", + [{ text: "OK" }] + ); + }); + }); + } catch (error) { + console.error("Error starting voice session:", error); + Alert.alert("Error", `Failed to start voice session: ${error}`); + } + }; + + const stopVoiceSession = () => { + if (recorderRef.current) { + recorderRef.current.stop((err) => { + if (err) { + console.error("Error stopping recording:", err); + } else { + console.log("Recording stopped successfully"); + } + + // Clean up the recorder + recorderRef.current?.destroy(); + recorderRef.current = null; + }); + } + + setIsRecording(false); + Alert.alert( + "Voice Session Ended", + "Microphone recording has been stopped." + ); + }; + return ( @@ -79,6 +224,22 @@ export const Breathe = () => { })} + + + + + {isRecording ? "🔴 Stop Voice Session" : "🎤 Start Voice Session"} + + + {isRecording && ( + + Recording... Check if Skia is responsive + + )} + ); }; @@ -87,4 +248,33 @@ const styles = StyleSheet.create({ container: { flex: 1, }, + buttonContainer: { + position: "absolute", + bottom: 50, + left: 20, + right: 20, + alignItems: "center", + }, + button: { + backgroundColor: "#61bea2", + paddingHorizontal: 20, + paddingVertical: 12, + borderRadius: 25, + minWidth: 200, + alignItems: "center", + }, + buttonRecording: { + backgroundColor: "#ff4444", + }, + buttonText: { + color: "white", + fontSize: 16, + fontWeight: "600", + }, + recordingText: { + color: "#ff4444", + fontSize: 14, + marginTop: 10, + fontWeight: "500", + }, }); diff --git a/apps/example/src/Examples/Video/Video.tsx b/apps/example/src/Examples/Video/Video.tsx index 6a6a7adbea..836e213c3d 100644 --- a/apps/example/src/Examples/Video/Video.tsx +++ b/apps/example/src/Examples/Video/Video.tsx @@ -10,7 +10,6 @@ import { } from "@shopify/react-native-skia"; import { Platform, Pressable, View, useWindowDimensions } from "react-native"; import { useDerivedValue, useSharedValue } from "react-native-reanimated"; -import Slider from "@react-native-community/slider"; // on Web because of CORS we need to use a local video const videoURL = @@ -62,22 +61,7 @@ export const Video = () => { /> - - { - seek.value = value * duration; - paused.value = false; - }} - onSlidingStart={() => { - paused.value = true; - }} - /> - + ); }; diff --git a/externals/depot_tools b/externals/depot_tools index abc5109882..8a1ec6a021 160000 --- a/externals/depot_tools +++ b/externals/depot_tools @@ -1 +1 @@ -Subproject commit abc51098824678cbce29d7913c4951a857033c49 +Subproject commit 8a1ec6a0213ae033f6749f261e1c528488349991 diff --git a/yarn.lock b/yarn.lock index e95fcd0e1a..72dc84821c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7078,6 +7078,17 @@ __metadata: languageName: node linkType: hard +"@react-native-community/audio-toolkit@npm:^2.0.3": + version: 2.0.3 + resolution: "@react-native-community/audio-toolkit@npm:2.0.3" + dependencies: + async: ^2.6.3 + eventemitter3: ^1.2.0 + lodash: ^4.17.15 + checksum: d5b561153ea41b7bd64fffe804d973869d50ca66471cdd2c1b73a262ada828c998344c650e1b7c42972997f173eef238c3fe85ae95459041605d2bab41d7ba35 + languageName: node + linkType: hard + "@react-native-community/cli-clean@npm:14.0.0": version: 14.0.0 resolution: "@react-native-community/cli-clean@npm:14.0.0" @@ -7663,13 +7674,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/slider@npm:^4.5.7": - version: 4.5.7 - resolution: "@react-native-community/slider@npm:4.5.7" - checksum: f8b722c1821332398324d4d45a31c70b90007c1f859840ddc58388a0783d3a4706e7d0808898ecc76091de60041ae20a0758ef4d706d2ae06a4b4d46ff934028 - languageName: node - linkType: hard - "@react-native-macos/virtualized-lists@npm:0.78.6": version: 0.78.6 resolution: "@react-native-macos/virtualized-lists@npm:0.78.6" @@ -12122,6 +12126,15 @@ __metadata: languageName: node linkType: hard +"async@npm:^2.6.3": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + "async@npm:^3.2.3": version: 3.2.6 resolution: "async@npm:3.2.6" @@ -17387,6 +17400,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^1.2.0": + version: 1.2.0 + resolution: "eventemitter3@npm:1.2.0" + checksum: 1ce3c91340f5038bd611c31a32c69167ccc598049a6844f58400583b4d70f5c0c2d13a201c763624f81de461498fe2767d0bfadcb2c0c417e37556a481b00c1d + languageName: node + linkType: hard + "eventemitter3@npm:^4.0.0": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -17421,10 +17441,10 @@ __metadata: "@babel/preset-env": ^7.25.3 "@babel/runtime": ^7.25.0 "@callstack/react-native-visionos": ^0.75.0 + "@react-native-community/audio-toolkit": ^2.0.3 "@react-native-community/cli": 15.0.1 "@react-native-community/cli-platform-android": 15.0.1 "@react-native-community/cli-platform-ios": 15.0.1 - "@react-native-community/slider": ^4.5.7 "@react-native/babel-preset": 0.78.0 "@react-native/eslint-config": 0.78.0 "@react-native/metro-config": 0.78.0 @@ -23316,7 +23336,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7