diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c10615c8..937d0075e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [11.0.0] - 26-04-16 + +### Added + +- Added support for player SDK v11. More info on the [migration documentation](./doc/migrating-to-react-native-theoplayer-11.md) page. +- Enabled core library desugaring for Android to support version 3.39.0 of the Google IMA SDK. +- Added `TextTrack.captionChannel` to retrieve the CEA-608 channel and/or CEA-708 service numbers of closed caption text tracks. + +### Changed + +- Upgraded example app to React-Native v0.84.1. +- Changed the minimum supported iOS/tvOS version to 15.0, dropping support for iOS/tvOS 13 and 14. + +### Fixed + +- Fixed an issue on Web where Google IMA could fail to initialize when used with `react-reverse-portal` due to the player container not being attached to the document yet. + +### Removed + +- Removed deprecated `ResizeEvent` in favor of `DimensionChangeEvent`. +- Removed deprecated `player.theolive` property in favor of `player.theoLive`. +- Removed deprecated `source.integration` property in favor of `source.type`. + ## [10.13.0] - 26-03-27 ### Fixed diff --git a/android/build.gradle b/android/build.gradle index a61022ee2..23139c788 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath "com.android.tools.build:gradle:${safeExtGet('gradlePluginVersion', '8.12.3')}" + classpath "com.android.tools.build:gradle:${safeExtGet('gradlePluginVersion', '8.13.0')}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', '2.2.10')}" } } @@ -92,12 +92,16 @@ android { minifyEnabled false } } + buildFeatures { + buildConfig true + } lint { disable 'GradleCompatible' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 + coreLibraryDesugaringEnabled true } packagingOptions { exclude 'META-INF/kotlin-stdlib.kotlin_module' @@ -122,15 +126,16 @@ repositories { mavenLocal() } -// The minimum supported THEOplayer version is 10.12.0 -def theoVersion = safeExtGet('THEOplayer_sdk', '[10.12.0, 11.0.0)') -def theoMediaSessionVersion = safeExtGet('THEOplayer_mediasession', '[8.0.0, 11.0.0)') -def theoAdsWrapperVersion = "10.12.0" +// The minimum supported THEOplayer version is 11.0.0 +def theoVersion = safeExtGet('THEOplayer_sdk', '[11.0.0, 12.0.0)') +def theoMediaSessionVersion = safeExtGet('THEOplayer_mediasession', '[11.0.0, 12.0.0)') +def theoAdsWrapperVersion = "11.0.0" def coroutinesVersion = safeExtGet('coroutinesVersion', '1.10.2') def appcompatVersion = safeExtGet('appcompatVersion', '1.7.1') -def corektxVersion = safeExtGet('corektxVersion', '1.16.0') -def gsonVersion = safeExtGet('gsonVersion', '2.13.1') +def corektxVersion = safeExtGet('corektxVersion', '1.17.0') +def gsonVersion = safeExtGet('gsonVersion', '2.13.2') def activityktxVersion = safeExtGet('activityktxVersion', '1.10.1') +def coreLibraryDesugaringVersion = safeExtGet('coreLibraryDesugaringVersion', '2.1.5') dependencies { def addOptiViewIntegration = { enabled, notation, additional = null -> @@ -156,6 +161,7 @@ dependencies { implementation("androidx.core:core-ktx:$corektxVersion") implementation("androidx.activity:activity-ktx:$activityktxVersion") implementation("com.google.code.gson:gson:$gsonVersion") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:$coreLibraryDesugaringVersion") println("Using THEOplayer (${versionString(theoVersion)})") implementation("com.theoplayer.theoplayer-sdk-android:core:$theoVersion") diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar deleted file mode 100644 index d0cac704a..000000000 Binary files a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar and /dev/null differ diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar new file mode 100644 index 000000000..bc90fbbb6 Binary files /dev/null and b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar differ diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.pom b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.pom similarity index 85% rename from android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.pom rename to android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.pom index 4c3287dd5..feffcb8b9 100644 --- a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.pom +++ b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.pom @@ -1,17 +1,17 @@ - 10.12.0 + 11.0.0 com.theoplayer.theoplayer-sdk-android ads-wrapper - 10.12.0 + 11.0.0 aar com.theoplayer.theoplayer-sdk-android integration-ads-ima - [10.0.0,11.0.0) + [11.0.0,12.0.0) runtime diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml index 63c6398ae..bd9d59cca 100644 --- a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +++ b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml @@ -3,11 +3,11 @@ com.theoplayer.theoplayer-sdk-android ads-wrapper - 10.12.0 - 10.12.0 + 11.0.0 + 11.0.0 - 10.12.0 + 11.0.0 - 20260318164412 + 20260410095400 diff --git a/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt b/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt index 11391afdd..95c1bd9dc 100644 --- a/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +++ b/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt @@ -133,24 +133,24 @@ class PlayerConfigAdapter(private val configProps: ReadableMap?) { getMap(PROP_FEATURE_FLAGS)?.toHashMap()?.forEach { (key, value) -> convertedMap[key] = value as String } - featureFlags = convertedMap + setFeatureFlags(convertedMap) } // The maximum number of VAST redirects. if (hasKey(PROP_MAX_REDIRECTS)) { maxRedirects = getInt(PROP_MAX_REDIRECTS) } // The partner provided player type. - playerType = "THEOplayer" + setPlayerType("THEOplayer") // The partner provided player version. - playerVersion = THEOplayerGlobal.getVersion() + setPlayerVersion(THEOplayerGlobal.getVersion()) // The Publisher Provided Identification (PPID) sent with ads request. if (hasKey(PROP_PPID)) { - ppid = getString(PROP_PPID) ?: "" + setPpid(getString(PROP_PPID) ?: "") } // The session ID to identify a single user session. This should be a UUID. It // is used exclusively for frequency capping across the user session. if (hasKey(PROP_SESSION_ID)) { - sessionId = getString(PROP_PPID) ?: "" + setSessionId(getString(PROP_PPID) ?: "") } // Toggles debug mode which will output detailed log information to the console. if (hasKey(PROP_ENABLE_DEBUG_MODE)) { @@ -177,11 +177,11 @@ class PlayerConfigAdapter(private val configProps: ReadableMap?) { enablePreloading = preloadTypeString !== "none" } if (hasKey(PROP_ALLOWED_MIMETYPES)) { - mimeTypes = ArrayList().apply { + setMimeTypes(ArrayList().apply { getArray(PROP_ALLOWED_MIMETYPES)?.toArrayList()?.forEach { add(it as String) } - } + }) } } // bitrate and timeout are configured under the ima config diff --git a/android/src/main/java/com/theoplayer/ads/AdAdapter.kt b/android/src/main/java/com/theoplayer/ads/AdAdapter.kt index 4052a0055..e003c864c 100644 --- a/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +++ b/android/src/main/java/com/theoplayer/ads/AdAdapter.kt @@ -100,7 +100,7 @@ object AdAdapter { adPayload.putDouble(PROP_AD_HEIGHT, ad.imaAd.vastMediaHeight.toDouble()) adPayload.putString(PROP_AD_CONTENT_TYPE, ad.imaAd.contentType) adPayload.putString(PROP_AD_DESCRIPTION, ad.imaAd.description) - } catch (ignore: Exception) { + } catch (_: Exception) { // googleImaAd.getImaAd() is not known yet } val universalAdIdsPayload = Arguments.createArray() @@ -142,7 +142,7 @@ object AdAdapter { return adbreakPayload } adbreakPayload.putString(PROP_ADBREAK_INTEGRATION, adbreak.integration.type) - adbreakPayload.putString(PROP_ADBREAK_ID, adbreak.idAsString) + adbreakPayload.putString(PROP_ADBREAK_ID, adbreak.id) adbreakPayload.putInt(PROP_ADBREAK_MAXDURATION,adbreak.maxDuration) adbreakPayload.putInt(PROP_ADBREAK_TIMEOFFSET, adbreak.timeOffset) adbreakPayload.putDouble(PROP_ADBREAK_MAXREMAININGDURATION, adbreak.maxRemainingDuration) @@ -288,10 +288,15 @@ object AdAdapter { return adBreak.getString(PROP_AD_CUSTOM_INTEGRATION) } + @Deprecated("Deprecated in favor of getIdAsString()") override fun getIdAsString(): String? { return if (adBreak.hasKey(PROP_ADBREAK_ID)) adBreak.getString(PROP_ADBREAK_ID) else null } + override fun getId(): String? { + return if (adBreak.hasKey(PROP_ADBREAK_ID)) adBreak.getString(PROP_ADBREAK_ID) else null + } + override fun getCustomData(): Any? { // Not supported yet return null @@ -415,16 +420,6 @@ object AdAdapter { return ad?.getString(PROP_AD_TRAFFICKING_PARAMETERS) ?: "" } - @Deprecated("Deprecated in Java") - override fun getUniversalAdIdRegistry(): String { - return "" - } - - @Deprecated("Deprecated in Java") - override fun getUniversalAdIdValue(): String { - return ad?.getString(PROP_UNIVERSAL_AD_ID_VALUE) ?: "" - } - override fun getCompanionAds(): List { return emptyList() } diff --git a/android/src/main/java/com/theoplayer/cast/CastModule.kt b/android/src/main/java/com/theoplayer/cast/CastModule.kt index 81d0fe676..21f7491aa 100644 --- a/android/src/main/java/com/theoplayer/cast/CastModule.kt +++ b/android/src/main/java/com/theoplayer/cast/CastModule.kt @@ -59,7 +59,6 @@ class CastModule(context: ReactApplicationContext) : ReactContextBaseJavaModule( PlayerCastState.AVAILABLE -> "available" PlayerCastState.CONNECTED -> "connected" PlayerCastState.CONNECTING -> "connecting" - PlayerCastState.UNAVAILABLE -> "unavailable" else -> "unavailable" } } diff --git a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt index 2003722f1..27b46dde2 100644 --- a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +++ b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt @@ -26,6 +26,7 @@ private const val PROP_NAME = "name" private const val PROP_ENABLED = "enabled" private const val PROP_SRC = "src" private const val PROP_FORCED = "forced" +private const val PROP_CAPTION_CHANNEL = "captionChannel" private const val PROP_AUDIO_SAMPLING_RATE = "audioSamplingRate" private const val PROP_BANDWIDTH = "bandwidth" private const val PROP_QUALITIES = "qualities" @@ -43,9 +44,6 @@ private const val PROP_ENDDATE = "endDate" private const val PROP_DURATION = "duration" private const val PROP_PLANNED_DURATION = "plannedDuration" private const val PROP_END_ON_NEXT = "endOnNext" -private const val PROP_SCTE35CMD = "scte35Cmd" -private const val PROP_SCTE35OUT = "scte35Out" -private const val PROP_SCTE35IN = "scte35In" private const val PROP_CUSTOM_ATTRIBUTES = "customAttributes" object TrackListAdapter { @@ -72,6 +70,9 @@ object TrackListAdapter { textTrackPayload.putString(PROP_SRC, textTrack.source) textTrackPayload.putBoolean(PROP_FORCED, textTrack.isForced) + // THEOplayer v10.13+ + textTrack.captionChannel?.let { textTrackPayload.putInt(PROP_CAPTION_CHANNEL, it) } + // Optionally pass cue list. val cueList = textTrack.cues if (cueList != null) { @@ -167,13 +168,12 @@ object TrackListAdapter { audioTrackPayload.putString(PROP_LABEL, audioTrack.label) audioTrackPayload.putString(PROP_LANGUAGE, audioTrack.language) audioTrackPayload.putBoolean(PROP_ENABLED, audioTrack.isEnabled) - val qualityList = audioTrack.qualities val qualities = Arguments.createArray() try { - qualityList?.forEach { quality -> + audioTrack.qualities.forEach { quality -> qualities.pushMap(fromAudioQuality(quality)) } - } catch (ignore: NullPointerException) { + } catch (_: NullPointerException) { } audioTrackPayload.putArray(PROP_QUALITIES, qualities) val activeQuality = audioTrack.activeQuality @@ -214,18 +214,15 @@ object TrackListAdapter { videoTrackPayload.putBoolean(PROP_ENABLED, videoTrack.isEnabled) val qualities = Arguments.createArray() try { - val qualityList = videoTrack.qualities - if (qualityList != null) { - // Sort qualities according to (height, bandwidth) - val sortedQualityList = QualityListAdapter(qualityList) - sortedQualityList.sort { o: VideoQuality, t1: VideoQuality -> - if (o.height == t1.height) t1.bandwidth.compareTo(o.bandwidth) else t1.height.compareTo(o.height) - } - for (quality in sortedQualityList) { - qualities.pushMap(fromVideoQuality(quality as VideoQuality)) - } + // Sort qualities according to (height, bandwidth) + val sortedQualityList = QualityListAdapter(videoTrack.qualities) + sortedQualityList.sort { o: VideoQuality, t1: VideoQuality -> + if (o.height == t1.height) t1.bandwidth.compareTo(o.bandwidth) else t1.height.compareTo(o.height) + } + for (quality in sortedQualityList) { + qualities.pushMap(fromVideoQuality(quality as VideoQuality)) } - } catch (ignore: java.lang.NullPointerException) { + } catch (_: java.lang.NullPointerException) { } videoTrackPayload.putArray(PROP_QUALITIES, qualities) val activeQuality = videoTrack.activeQuality diff --git a/doc/migrating-to-react-native-theoplayer-11.md b/doc/migrating-to-react-native-theoplayer-11.md new file mode 100644 index 000000000..7b343802e --- /dev/null +++ b/doc/migrating-to-react-native-theoplayer-11.md @@ -0,0 +1,41 @@ +# Migrating to THEOplayer React Native SDK 11.x + +This article will guide you through updating to THEOplayer React Native SDK version 11 (from version 10), +and the changes needed in your code. + +## Update React Native THEOplayer + +Run the following command to install THEOplayer React Native SDK version 11: + +```bash +npm install react-native-theoplayer@11 +``` + +## Breaking API changes + +- Removed deprecated `ResizeEvent` in favor of `DimensionChangeEvent`. +- Removed deprecated `player.theolive` property in favor of `player.theoLive`. +- Removed deprecated `source.integration` property in favor of `source.type`. + +## Breaking Changes on Web + +The breaking changes for the native Web SDK are listed in the v11 [changelog](https://optiview.dolby.com/docs/theoplayer/changelog/#-breaking-changes), +none of which impact the React Native SDK on Web. + +## Breaking Changes on iOS + +The breaking changes for the native Web SDK are listed in the v11 [changelog](https://optiview.dolby.com/docs/theoplayer/changelog/#-breaking-changes-2). + +The following updates in particular impact the React Native SDK on iOS. + +- The minimum supported iOS/tvOS version is now 15.0, dropping support for iOS/tvOS 13 and 14. + +## Breaking Changes on Android + +The breaking changes for the native Android SDK are listed in the v11 [changelog](https://optiview.dolby.com/docs/theoplayer/changelog/#-breaking-changes-1). + +The following updates in particular impact the React Native SDK on Android. + +- The Google IMA SDK integration now requires [core library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) to be enabled. +See [our updated guide for Google IMA](https://optiview.dolby.com/docs/theoplayer/how-to-guides/ads/google-ima/#android-sdk) for instructions, or the +React Native THEOplayer [example app](https://github.com/THEOplayer/react-native-theoplayer/tree/develop/example) for a sample implementation. diff --git a/e2e/android/app/build.gradle b/e2e/android/app/build.gradle index cad5d2e80..74c1afb8b 100644 --- a/e2e/android/app/build.gradle +++ b/e2e/android/app/build.gradle @@ -20,9 +20,9 @@ react { /* Variants */ // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // skip the bundling of the JS bundle and the assets. Default is "debug", "debugOptimized". // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] + // debuggableVariants = ["liteDebug", "liteDebugOptimized", "prodDebug", "prodDebugOptimized"] /* Bundling */ // A list containing the node command and its flags. Default is just 'node'. @@ -94,6 +94,9 @@ android { keyPassword 'android' } } + compileOptions { + coreLibraryDesugaringEnabled true + } buildTypes { debug { signingConfig signingConfigs.debug @@ -119,6 +122,8 @@ dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") + if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { diff --git a/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt b/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt index 1939bf063..f96443c13 100644 --- a/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt +++ b/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt @@ -5,34 +5,20 @@ import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.soloader.OpenSourceMergedSoMapping -import com.facebook.soloader.SoLoader import com.theoplayer.ReactTHEOplayerPackage class MainApplication : Application(), ReactApplication { - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = + override val reactHost: ReactHost by lazy { + getDefaultReactHost( + context = applicationContext, + packageList = PackageList(this).packages.apply { // Packages that cannot be autolinked yet can be added manually here, for example: add(ReactTHEOplayerPackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + }, + ) + } override fun onCreate() { super.onCreate() diff --git a/e2e/android/build.gradle b/e2e/android/build.gradle index a25721b53..0181c74f9 100644 --- a/e2e/android/build.gradle +++ b/e2e/android/build.gradle @@ -12,8 +12,8 @@ buildscript { ndkVersion = "29.0.14033849" castFrameworkVersion = "22.0.0" kotlinVersion = "2.2.10" - agpVersion = "8.12.3" - rnrepoVersion = "0.2.1" + agpVersion = "8.13.0" + rnrepoVersion = "0.2.2" } repositories { google() diff --git a/e2e/android/gradle.properties b/e2e/android/gradle.properties index 124071bbb..ad66e4ae9 100644 --- a/e2e/android/gradle.properties +++ b/e2e/android/gradle.properties @@ -41,12 +41,12 @@ newArchEnabled=true hermesEnabled=true # Version of the THEOplayer SDK, if not specified, the latest available version within bounds is set. -#THEOplayer_sdk=[10.10.0, 11.0.0) +#THEOplayer_sdk=[11.0.0, 12.0.0) # Override Android sdk versions -#THEOplayer_compileSdkVersion = 34 +#THEOplayer_compileSdkVersion = 36 #THEOplayer_minSdkVersion = 21 -#THEOplayer_targetSdkVersion = 34 +#THEOplayer_targetSdkVersion = 36 # Toggle player event logging using tag 'VideoPlayer' (default: false) #THEOplayer_logPlayerEvents = true diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 49fc19aac..086bde286 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -8,10 +8,10 @@ "name": "react-native-theoplayer-e2e", "version": "0.0.1", "dependencies": { - "@theoplayer/react-native-ui": "^0.21.1", - "react": "19.2.0", - "react-dom": "19.2.0", - "react-native": "npm:react-native-tvos@^0.83.1-0", + "@theoplayer/react-native-ui": "^0.23.0", + "react": "19.2.3", + "react-dom": "19.2.3", + "react-native": "npm:react-native-tvos@^0.84.1-0", "react-native-device-info": "^14.1.1", "react-native-status-bar-height": "^2.6.0", "react-native-svg": "^15.12.1", @@ -23,22 +23,22 @@ "@babel/core": "^7.25.9", "@babel/preset-env": "^7.25.9", "@babel/runtime": "^7.26.10", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.1", - "@react-native/eslint-config": "0.83.1", - "@react-native/metro-config": "0.83.1", - "@react-native/typescript-config": "0.83.1", + "@react-native-community/cli": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native/babel-preset": "0.84.1", + "@react-native/eslint-config": "0.84.1", + "@react-native/metro-config": "0.84.1", + "@react-native/typescript-config": "0.84.1", "@types/cavy": "^3.2.9", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", "babel-loader": "^8.4.1", "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-react-native-web": "^0.17.7", "cavy": "github:tvanlaerhoven/cavy#v4.1.2", "cavy-cli": "github:tvanlaerhoven/cavy-cli#v3.1.7", - "copy-webpack-plugin": "^13.0.0", + "copy-webpack-plugin": "^14.0.0", "eslint": "^8.57.1", "html-webpack-plugin": "^5.6.3", "npm-check-updates": "^17.1.13", @@ -49,21 +49,21 @@ "webpack-dev-server": "^5.2.1" }, "engines": { - "node": ">=20" + "node": ">= 22.11.0" } }, "..": { - "version": "10.11.0", + "version": "10.13.0", "license": "BSD-3-Clause-Clear", "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" }, "devDependencies": { "@eslint/js": "^9.13.0", "@expo/config-plugins": "^10.0.2", - "@react-native/eslint-config": "^0.83.1", - "@types/react": "^19.2.0", + "@react-native/eslint-config": "^0.84.1", + "@types/react": "^19.2.14", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^7.0.0", @@ -71,10 +71,10 @@ "lint-staged": "^15.5.1", "pod-install": "^0.1.39", "prettier": "^3.5.3", - "react": "^19.2.0", - "react-native": "^0.83.1", + "react": "^19.2.3", + "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.10.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -82,12 +82,12 @@ "typescript-eslint": "^8.30.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -883,7 +883,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1022,7 +1022,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1205,7 +1205,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1239,7 +1239,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1255,7 +1255,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1406,7 +1406,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1422,7 +1422,7 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -1492,7 +1492,7 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1697,7 +1697,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1713,7 +1713,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1730,7 +1730,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2699,25 +2699,25 @@ } }, "node_modules/@react-native-community/cli": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.0.0.tgz", - "integrity": "sha512-/cMnGl5V1rqnbElY1Fvga1vfw0d3bnqiJLx2+2oh7l9ulnXfVRWb5tU2kgBqiMxuDOKA+DQoifC9q/tvkj5K2w==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.1.0.tgz", + "integrity": "sha512-441WsVtRe4nGJ9OzA+QMU1+22lA6Q2hRWqqIMKD0wjEMLqcSfOZyu2UL9a/yRpL/dRpyUsU4n7AxqKfTKO/Csg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-clean": "20.0.0", - "@react-native-community/cli-config": "20.0.0", - "@react-native-community/cli-doctor": "20.0.0", - "@react-native-community/cli-server-api": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "@react-native-community/cli-types": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-clean": "20.1.0", + "@react-native-community/cli-config": "20.1.0", + "@react-native-community/cli-doctor": "20.1.0", + "@react-native-community/cli-server-api": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", + "@react-native-community/cli-types": "20.1.0", "commander": "^9.4.1", "deepmerge": "^4.3.0", "execa": "^5.0.0", "find-up": "^5.0.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", + "picocolors": "^1.1.1", "prompts": "^2.4.2", "semver": "^7.5.2" }, @@ -2725,91 +2725,91 @@ "rnc-cli": "build/bin.js" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/@react-native-community/cli-clean": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.0.0.tgz", - "integrity": "sha512-YmdNRcT+Dp8lC7CfxSDIfPMbVPEXVFzBH62VZNbYGxjyakqAvoQUFTYPgM2AyFusAr4wDFbDOsEv88gCDwR3ig==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.1.0.tgz", + "integrity": "sha512-77L4DifWfxAT8ByHnkypge7GBMYpbJAjBGV+toowt5FQSGaTBDcBHCX+FFqFRukD5fH6i8sZ41Gtw+nbfCTTIA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "fast-glob": "^3.3.2" + "fast-glob": "^3.3.2", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-config": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.0.tgz", - "integrity": "sha512-5Ky9ceYuDqG62VIIpbOmkg8Lybj2fUjf/5wK4UO107uRqejBgNgKsbGnIZgEhREcaSEOkujWrroJ9gweueLfBg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.1.0.tgz", + "integrity": "sha512-1x9rhLLR/dKKb92Lb5O0l0EmUG08FHf+ZVyVEf9M+tX+p5QIm52MRiy43R0UAZ2jJnFApxRk+N3sxoYK4Dtnag==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "cosmiconfig": "^9.0.0", "deepmerge": "^4.3.0", "fast-glob": "^3.3.2", - "joi": "^17.2.1" + "joi": "^17.2.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-config-android": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.0.0.tgz", - "integrity": "sha512-asv60qYCnL1v0QFWcG9r1zckeFlKG+14GGNyPXY72Eea7RX5Cxdx8Pb6fIPKroWH1HEWjYH9KKHksMSnf9FMKw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.1.0.tgz", + "integrity": "sha512-3A01ZDyFeCALzzPcwP/fleHoP3sGNq1UX7FzxkTrOFX8RRL9ntXNXQd27E56VU4BBxGAjAJT4Utw8pcOjJceIA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1" + "fast-xml-parser": "^4.4.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-config-apple": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.0.0.tgz", - "integrity": "sha512-PS1gNOdpeQ6w7dVu1zi++E+ix2D0ZkGC2SQP6Y/Qp002wG4se56esLXItYiiLrJkhH21P28fXdmYvTEkjSm9/Q==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.1.0.tgz", + "integrity": "sha512-n6JVs8Q3yxRbtZQOy05ofeb1kGtspGN3SgwPmuaqvURF9fsuS7c4/9up2Kp9C+1D2J1remPJXiZLNGOcJvfpOA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "fast-glob": "^3.3.2" + "fast-glob": "^3.3.2", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.0.0.tgz", - "integrity": "sha512-cPHspi59+Fy41FDVxt62ZWoicCZ1o34k8LAl64NVSY0lwPl+CEi78jipXJhtfkVqSTetloA8zexa/vSAcJy57Q==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.1.0.tgz", + "integrity": "sha512-QfJF1GVjA4PBrIT3SJ0vFFIu0km1vwOmLDlOYVqfojajZJ+Dnvl0f94GN1il/jT7fITAxom///XH3/URvi7YTQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-config": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-apple": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-config": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-apple": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", "envinfo": "^7.13.0", "execa": "^5.0.0", "node-stream-zip": "^1.9.1", "ora": "^5.4.1", + "picocolors": "^1.1.1", "semver": "^7.5.2", "wcwidth": "^1.0.1", "yaml": "^2.2.1" } }, "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "devOptional": true, "license": "ISC", "bin": { @@ -2820,51 +2820,51 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.0.0.tgz", - "integrity": "sha512-th3ji1GRcV6ACelgC0wJtt9daDZ+63/52KTwL39xXGoqczFjml4qERK90/ppcXU0Ilgq55ANF8Pr+UotQ2AB/A==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.1.0.tgz", + "integrity": "sha512-TeHPDThOwDppQRpndm9kCdRCBI8AMy3HSIQ+iy7VYQXL5BtZ5LfmGdusoj7nVN/ZGn0Lc6Gwts5qowyupXdeKg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-config-android": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-config-android": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "logkitty": "^0.7.1" + "logkitty": "^0.7.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-platform-apple": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.0.0.tgz", - "integrity": "sha512-rZZCnAjUHN1XBgiWTAMwEKpbVTO4IHBSecdd1VxJFeTZ7WjmstqA6L/HXcnueBgxrzTCRqvkRIyEQXxC1OfhGw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.1.0.tgz", + "integrity": "sha512-0ih1hrYezSM2cuOlVnwBEFtMwtd8YgpTLmZauDJCv50rIumtkI1cQoOgLoS4tbPCj9U/Vn2a9BFH0DLFOOIacg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-config-apple": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-config-apple": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "fast-xml-parser": "^4.4.1" + "fast-xml-parser": "^4.4.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.0.0.tgz", - "integrity": "sha512-Z35M+4gUJgtS4WqgpKU9/XYur70nmj3Q65c9USyTq6v/7YJ4VmBkmhC9BticPs6wuQ9Jcv0NyVCY0Wmh6kMMYw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.1.0.tgz", + "integrity": "sha512-XN7Da9z4WsJxtqVtEzY8q2bv22OsvzaFP5zy5+phMWNoJlU4lf7IvBSxqGYMpQ9XhYP7arDw5vmW4W34s06rnA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-platform-apple": "20.0.0" + "@react-native-community/cli-platform-apple": "20.1.0" } }, "node_modules/@react-native-community/cli-server-api": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.0.0.tgz", - "integrity": "sha512-Ves21bXtjUK3tQbtqw/NdzpMW1vR2HvYCkUQ/MXKrJcPjgJnXQpSnTqHXz6ZdBlMbbwLJXOhSPiYzxb5/v4CDg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.1.0.tgz", + "integrity": "sha512-Tb415Oh8syXNT2zOzLzFkBXznzGaqKCiaichxKzGCDKg6JGHp3jSuCmcTcaPeYC7oc32n/S3Psw7798r4Q/7lA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", + "@react-native-community/cli-tools": "20.1.0", "body-parser": "^1.20.3", "compression": "^1.7.1", "connect": "^3.6.5", @@ -2877,28 +2877,28 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.0.tgz", - "integrity": "sha512-akSZGxr1IajJ8n0YCwQoA3DI0HttJ0WB7M3nVpb0lOM+rJpsBN7WG5Ft+8ozb6HyIPX+O+lLeYazxn5VNG/Xhw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.1.0.tgz", + "integrity": "sha512-/YmzHGOkY6Bgrv4OaA1L8rFqsBlQd1EB2/ipAoKPiieV0EcB5PUamUSuNeFU3sBZZTYQCUENwX4wgOHgFUlDnQ==", "devOptional": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", "execa": "^5.0.0", "find-up": "^5.0.0", "launch-editor": "^2.9.1", "mime": "^2.4.1", "ora": "^5.4.1", + "picocolors": "^1.1.1", "prompts": "^2.4.2", "semver": "^7.5.2" } }, "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "devOptional": true, "license": "ISC", "bin": { @@ -2909,9 +2909,9 @@ } }, "node_modules/@react-native-community/cli-types": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.0.0.tgz", - "integrity": "sha512-7J4hzGWOPTBV1d30Pf2NidV+bfCWpjfCOiGO3HUhz1fH4MvBM0FbbBmE9LE5NnMz7M8XSRSi68ZGYQXgLBB2Qw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.1.0.tgz", + "integrity": "sha512-D0kDspcwgbVXyNjwicT7Bb1JgXjijTw1JJd+qxyF/a9+sHv7TU4IchV+gN38QegeXqVyM4Ym7YZIvXMFBmyJqA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2932,9 +2932,9 @@ } }, "node_modules/@react-native-tvos/virtualized-lists": { - "version": "0.83.1-0", - "resolved": "https://registry.npmjs.org/@react-native-tvos/virtualized-lists/-/virtualized-lists-0.83.1-0.tgz", - "integrity": "sha512-AQxQkh7/I485IEWOvrwWGBiTfc4Q74HgJvbUNRf4PJxraWxiRHQzhlNG4MO33tSFmEzC8lFexl2GDWM6Rme49Q==", + "version": "0.84.1-0", + "resolved": "https://registry.npmjs.org/@react-native-tvos/virtualized-lists/-/virtualized-lists-0.84.1-0.tgz", + "integrity": "sha512-+pKuqyolRwyqQHeIYfJxtedBc2k1rudIOwp27S9VJSfTjpm2V+x2kHUaBU5upHW2Tyag2kI7jedlYkA5reoN5Q==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -2955,32 +2955,32 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", - "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.84.1.tgz", + "integrity": "sha512-lAJ6PDZv95FdT9s9uhc9ivhikW1Zwh4j9XdXM7J2l4oUA3t37qfoBmTSDLuPyE3Bi+Xtwa11hJm0BUTT2sc/gg==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.1.tgz", - "integrity": "sha512-VPj8O3pG1ESjZho9WVKxqiuryrotAECPHGF5mx46zLUYNTWR5u9OMUXYk7LeLy+JLWdGEZ2Gn3KoXeFZbuqE+g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.84.1.tgz", + "integrity": "sha512-vorvcvptGxtK0qTDCFQb+W3CU6oIhzcX5dduetWRBoAhXdthEQM0MQnF+GTXoXL8/luffKgy7PlZRG/WeI/oRQ==", "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.83.1" + "@react-native/codegen": "0.84.1" }, "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/babel-preset": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.1.tgz", - "integrity": "sha512-xI+tbsD4fXcI6PVU4sauRCh0a5fuLQC849SINmU2J5wP8kzKu4Ye0YkGjUW3mfGrjaZcjkWmF6s33jpyd3gdTw==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.84.1.tgz", + "integrity": "sha512-3GpmCKk21f4oe32bKIdmkdn+WydvhhZL+1nsoFBGi30Qrq9vL16giKu31OcnWshYz139x+mVAvCyoyzgn8RXSw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2990,27 +2990,19 @@ "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.24.7", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", @@ -3019,13 +3011,9 @@ "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.83.1", + "@react-native/babel-plugin-codegen": "0.84.1", "babel-plugin-syntax-hermes-parser": "0.32.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -3038,17 +3026,17 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", - "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.84.1.tgz", + "integrity": "sha512-n1RIU0QAavgCg1uC5+s53arL7/mpM+16IBhJ3nCFSd/iK5tUmCwxQDcIDC703fuXfpub/ZygeSjVN8bcOWn0gA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.25.3", - "glob": "^7.1.1", "hermes-parser": "0.32.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", + "tinyglobby": "^0.2.15", "yargs": "^17.6.2" }, "engines": { @@ -3059,12 +3047,12 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", - "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.84.1.tgz", + "integrity": "sha512-f6a+mJEJ6Joxlt/050TqYUr7uRRbeKnz8lnpL7JajhpsgZLEbkJRjH8HY5QiLcRdUwWFtizml4V+vcO3P4RxoQ==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.83.1", + "@react-native/dev-middleware": "0.84.1", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.3", @@ -3089,9 +3077,9 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3101,21 +3089,22 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", - "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.84.1.tgz", + "integrity": "sha512-rUU/Pyh3R5zT0WkVgB+yA6VwOp7HM5Hz4NYE97ajFS07OUIcv8JzBL3MXVdSSjLfldfqOuPEuKUaZcAOwPgabw==", "license": "BSD-3-Clause", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/debugger-shell": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.1.tgz", - "integrity": "sha512-d+0w446Hxth5OP/cBHSSxOEpbj13p2zToUy6e5e3tTERNJ8ueGlW7iGwGTrSymNDgXXFjErX+dY4P4/3WokPIQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.84.1.tgz", + "integrity": "sha512-LIGhh4q4ette3yW5OzmukNMYwmINYrRGDZqKyTYc/VZyNpblZPw72coXVHXdfpPT6+YlxHqXzn3UjFZpNODGCQ==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6", + "debug": "^4.4.0", "fb-dotslash": "0.5.8" }, "engines": { @@ -3123,14 +3112,14 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", - "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.84.1.tgz", + "integrity": "sha512-Z83ra+Gk6ElAhH3XRrv3vwbwCPTb04sPPlNpotxcFZb5LtRQZwT91ZQEXw3GOJCVIFp9EQ/gj8AQbVvtHKOUlQ==", "license": "MIT", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.83.1", - "@react-native/debugger-shell": "0.83.1", + "@react-native/debugger-frontend": "0.84.1", + "@react-native/debugger-shell": "0.84.1", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -3195,15 +3184,15 @@ } }, "node_modules/@react-native/eslint-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.83.1.tgz", - "integrity": "sha512-fo3DmFywzkpVZgIji9vR93kN7sSAY122ZIB7VcudgKlmD/YFxJ5Yi+ZNiWYl6aprLexxOWjROgHXNP0B0XaAng==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.84.1.tgz", + "integrity": "sha512-Z8j0uahXvPgvBAslxwIWwFliRQO0bL7nLpNiFroVnT1ojYCQHwFAbObDcAIs+Yva2FTat2A5m2rbi98MHVC+cg==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.83.1", + "@react-native/eslint-plugin": "0.84.1", "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "eslint-config-prettier": "^8.5.0", @@ -3212,20 +3201,20 @@ "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-native": "^4.0.0" + "eslint-plugin-react-native": "^5.0.0" }, "engines": { "node": ">= 20.19.4" }, "peerDependencies": { - "eslint": ">=8", + "eslint": "^8.0.0 || ^9.0.0", "prettier": ">=2" } }, "node_modules/@react-native/eslint-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.83.1.tgz", - "integrity": "sha512-nKd/FONY8aIIjtjEqI2ScvgJYeblBgdnwseRHlIC+Nm3f3tuOifUrHFtWBJznlrKFJcme31Tl7qiryE2SruLYw==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.84.1.tgz", + "integrity": "sha512-mKhsn3+CmN03vyW7/YQ6/LvLQppWT+eYqlCvmOvVoGlnh+XrJHJgwNr891zsyxGNELTwu/x2+T83ogwCmRHMEw==", "dev": true, "license": "MIT", "engines": { @@ -3233,32 +3222,32 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", - "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.84.1.tgz", + "integrity": "sha512-7uVlPBE3uluRNRX4MW7PUJIO1LDBTpAqStKHU7LHH+GRrdZbHsWtOEAX8PiY4GFfBEvG8hEjiuTOqAxMjV+hDg==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", - "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.84.1.tgz", + "integrity": "sha512-UsTe2AbUugsfyI7XIHMQq4E7xeC8a6GrYwuK+NohMMMJMxmyM3JkzIk+GB9e2il6ScEQNMJNaj+q+i5za8itxQ==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz", - "integrity": "sha512-fqt6DHWX1GBGDKa5WJOjDtPPy2M9lkYVLn59fBeFQ0GXhBRzNbUh8JzWWI/Q2CLDZ2tgKCcwaiXJ1OHWVd2BCQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.84.1.tgz", + "integrity": "sha512-NswINguTz0eg1Dc0oGO/1dejXSr6iQaz8/NnCRn5HJdA3dGfqadS7zlYv0YjiWpgKgcW6uENaIEgJOQww0KSpw==", "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.83.1", + "@react-native/babel-preset": "0.84.1", "hermes-parser": "0.32.0", "nullthrows": "^1.1.1" }, @@ -3270,14 +3259,14 @@ } }, "node_modules/@react-native/metro-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.83.1.tgz", - "integrity": "sha512-1rjYZf62fCm6QAinHmRAKnJxIypX0VF/zBPd0qWvWABMZugrS0eACuIbk9Wk0StBod4yL8KnwEJyg77ak8xYzQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.84.1.tgz", + "integrity": "sha512-KlRawK4aXxRLlR3HYVfZKhfQp7sejQefQ/LttUWUkErhKO0AFt+yznoSLq7xwIrH9K3A3YwImHuFVtUtuDmurA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native/js-polyfills": "0.83.1", - "@react-native/metro-babel-transformer": "0.83.1", + "@react-native/js-polyfills": "0.84.1", + "@react-native/metro-babel-transformer": "0.84.1", "metro-config": "^0.83.3", "metro-runtime": "^0.83.3" }, @@ -3286,15 +3275,15 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", - "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.84.1.tgz", + "integrity": "sha512-/UPaQ4jl95soXnLDEJ6Cs6lnRXhwbxtT4KbZz+AFDees7prMV2NOLcHfCnzmTabf5Y3oxENMVBL666n4GMLcTA==", "license": "MIT" }, "node_modules/@react-native/typescript-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.83.1.tgz", - "integrity": "sha512-y83qd7fmlZG+EJoOyKEmAXifdjN1csNhcfpyxDvgaIUNO/pw2ws3MV/wp+ERQ8F6JIuAu1zcfyCy1/pEA7tC9g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.84.1.tgz", + "integrity": "sha512-ar7Gn6ma3b+Ricdxn2sTZL2DT1NMlrfsWmOkFZegpfQJzheqX/8gzIB1aIbfZyvhEDsoz07RG7wmsyQAWqXjsw==", "dev": true, "license": "MIT" }, @@ -3347,9 +3336,9 @@ } }, "node_modules/@theoplayer/react-native-ui": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.21.2.tgz", - "integrity": "sha512-8iHrnizIwliS3udc3KVGatLKutHYM88D4vj1ICbJZHBEp70C1KnQGJVkvQhavCXy4EUe1nu9xHmLhXEHvacuwQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.23.0.tgz", + "integrity": "sha512-NzRdsx2Z/466E3ZDTgQFqBrkRQ0v/1TtJv7Pv67NJMmotc0yXLOYwDy2pyL/QDyYUzmTrUX9A26VP10wsXSHig==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms", "dependencies": { "@miblanchard/react-native-slider": "^2.6.0", @@ -3361,7 +3350,7 @@ "react-native": "*", "react-native-google-cast": "*", "react-native-svg": "^13.8.0 || ^14 || ^15", - "react-native-theoplayer": "^7 || ^8 || ^9 || ^10" + "react-native-theoplayer": "^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@types/babel__core": { @@ -3616,9 +3605,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3981,9 +3970,9 @@ "license": "ISC" }, "node_modules/@vscode/sudo-prompt": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.1.tgz", - "integrity": "sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.2.tgz", + "integrity": "sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==", "devOptional": true, "license": "MIT" }, @@ -5773,20 +5762,20 @@ "license": "MIT" }, "node_modules/copy-webpack-plugin": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", - "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz", + "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==", "dev": true, "license": "MIT", "dependencies": { "glob-parent": "^6.0.1", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2", + "serialize-javascript": "^7.0.3", "tinyglobby": "^0.2.12" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", @@ -5853,6 +5842,16 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/core-js-compat": { "version": "3.47.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", @@ -5875,9 +5874,9 @@ "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -6036,9 +6035,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", - "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", "devOptional": true, "license": "MIT" }, @@ -6426,17 +6425,21 @@ } }, "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.2.tgz", + "integrity": "sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==", "devOptional": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "escape-html": "~1.0.3" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/es-abstract": { @@ -6875,16 +6878,16 @@ } }, "node_modules/eslint-plugin-react-native": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", - "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-5.0.0.tgz", + "integrity": "sha512-VyWlyCC/7FC/aONibOwLkzmyKg4j9oI8fzrk9WYNs4I8/m436JuOTAFwLvEn1CVvc7La4cPfbCyspP4OYpP52Q==", "dev": true, "license": "MIT", "dependencies": { "eslint-plugin-react-native-globals": "^0.1.1" }, "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-react-native-globals": { @@ -7372,9 +7375,9 @@ "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.5.tgz", + "integrity": "sha512-cK9c5I/DwIOI7/Q7AlGN3DuTdwN61gwSfL8rvuVPK+0mcCNHHGxRrpiFtaZZRfRMJL3Gl8B2AFlBG6qXf03w9A==", "devOptional": true, "funding": [ { @@ -7628,9 +7631,9 @@ "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -8116,9 +8119,9 @@ } }, "node_modules/hermes-compiler": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.0.tgz", - "integrity": "sha512-clxa193o+GYYwykWVFfpHduCATz8fR5jvU7ngXpfKHj+E9hr9vjLNtdLSEe8MUbObvVexV3wcyxQ00xTPIrB1Q==", + "version": "250829098.0.9", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.9.tgz", + "integrity": "sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==", "license": "MIT" }, "node_modules/hermes-estree": { @@ -9700,9 +9703,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -11497,16 +11500,6 @@ ], "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -11533,9 +11526,9 @@ } }, "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11573,15 +11566,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.0" + "react": "^19.2.3" } }, "node_modules/react-is": { @@ -11593,19 +11586,19 @@ }, "node_modules/react-native": { "name": "react-native-tvos", - "version": "0.83.1-0", - "resolved": "https://registry.npmjs.org/react-native-tvos/-/react-native-tvos-0.83.1-0.tgz", - "integrity": "sha512-l+18XpdWmh7qDqTMZ2vwCv0PmvF+lxQSaxHk+Kt+0ZGwWi+gz0KyK15bf39xuzp2W+WBBgamLMtx+D6OBCUb7A==", + "version": "0.84.1-0", + "resolved": "https://registry.npmjs.org/react-native-tvos/-/react-native-tvos-0.84.1-0.tgz", + "integrity": "sha512-vJWbzbnUhI88wtvdZEKR+A85OYvqRqTffg3grW3XJrNNP8pXJ7yEK2q8Vbg3SCqtWuox9KJ+Ss0KCv+yUcd66A==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native-tvos/virtualized-lists": "0.83.1-0", - "@react-native/assets-registry": "0.83.1", - "@react-native/codegen": "0.83.1", - "@react-native/community-cli-plugin": "0.83.1", - "@react-native/gradle-plugin": "0.83.1", - "@react-native/js-polyfills": "0.83.1", - "@react-native/normalize-colors": "0.83.1", + "@react-native-tvos/virtualized-lists": "0.84.1-0", + "@react-native/assets-registry": "0.84.1", + "@react-native/codegen": "0.84.1", + "@react-native/community-cli-plugin": "0.84.1", + "@react-native/gradle-plugin": "0.84.1", + "@react-native/js-polyfills": "0.84.1", + "@react-native/normalize-colors": "0.84.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -11614,8 +11607,7 @@ "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "hermes-compiler": "0.14.0", + "hermes-compiler": "250829098.0.9", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", @@ -11630,6 +11622,7 @@ "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" @@ -11642,7 +11635,7 @@ }, "peerDependencies": { "@types/react": "^19.1.1", - "react": "^19.2.0" + "react": "^19.2.3" }, "peerDependenciesMeta": { "@types/react": { @@ -11784,9 +11777,9 @@ } }, "node_modules/react-native/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12482,16 +12475,6 @@ "node": ">=0.10.0" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -13239,16 +13222,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -13382,9 +13364,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -13444,7 +13426,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -13461,7 +13442,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -13479,7 +13459,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" diff --git a/e2e/package.json b/e2e/package.json index 45f09c207..e9e755871 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -14,10 +14,10 @@ "update-dependencies": "npx ncu '/@theoplayer\\/.*/' -u" }, "dependencies": { - "@theoplayer/react-native-ui": "^0.21.1", - "react": "19.2.0", - "react-dom": "19.2.0", - "react-native": "npm:react-native-tvos@^0.83.1-0", + "@theoplayer/react-native-ui": "^0.23.0", + "react": "19.2.3", + "react-dom": "19.2.3", + "react-native": "npm:react-native-tvos@^0.84.1-0", "react-native-device-info": "^14.1.1", "react-native-status-bar-height": "^2.6.0", "react-native-svg": "^15.12.1", @@ -29,22 +29,22 @@ "@babel/core": "^7.25.9", "@babel/preset-env": "^7.25.9", "@babel/runtime": "^7.26.10", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.1", - "@react-native/eslint-config": "0.83.1", - "@react-native/metro-config": "0.83.1", - "@react-native/typescript-config": "0.83.1", + "@react-native-community/cli": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native/babel-preset": "0.84.1", + "@react-native/eslint-config": "0.84.1", + "@react-native/metro-config": "0.84.1", + "@react-native/typescript-config": "0.84.1", "@types/cavy": "^3.2.9", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", "babel-loader": "^8.4.1", "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-react-native-web": "^0.17.7", "cavy": "github:tvanlaerhoven/cavy#v4.1.2", "cavy-cli": "github:tvanlaerhoven/cavy-cli#v3.1.7", - "copy-webpack-plugin": "^13.0.0", + "copy-webpack-plugin": "^14.0.0", "eslint": "^8.57.1", "html-webpack-plugin": "^5.6.3", "npm-check-updates": "^17.1.13", @@ -61,6 +61,6 @@ } }, "engines": { - "node": ">=20" + "node": ">= 22.11.0" } } diff --git a/e2e/react-native-theoplayer.json b/e2e/react-native-theoplayer.json index a91ca8d26..0ec39ba29 100644 --- a/e2e/react-native-theoplayer.json +++ b/e2e/react-native-theoplayer.json @@ -1,5 +1,5 @@ { "ios": { - "features": ["GOOGLE_IMA", "CHROMECAST", "SIDELOADED_TEXTTRACKS", "THEO_ADS", "MILLICAST"] + "features": ["GOOGLE_IMA", "CHROMECAST", "THEO_ADS", "MILLICAST"] } } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 19d99169b..c453f1918 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -20,9 +20,9 @@ react { /* Variants */ // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // skip the bundling of the JS bundle and the assets. Default is "debug", "debugOptimized". // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] + // debuggableVariants = ["liteDebug", "liteDebugOptimized", "prodDebug", "prodDebugOptimized"] /* Bundling */ // A list containing the node command and its flags. Default is just 'node'. @@ -94,6 +94,9 @@ android { keyPassword 'android' } } + compileOptions { + coreLibraryDesugaringEnabled true + } buildTypes { debug { signingConfig signingConfigs.debug @@ -120,6 +123,7 @@ dependencies { implementation("com.facebook.react:react-android") implementation("androidx.activity:activity-ktx:1.9.3") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") diff --git a/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt b/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt index 1939bf063..f96443c13 100644 --- a/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt +++ b/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt @@ -5,34 +5,20 @@ import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.soloader.OpenSourceMergedSoMapping -import com.facebook.soloader.SoLoader import com.theoplayer.ReactTHEOplayerPackage class MainApplication : Application(), ReactApplication { - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = + override val reactHost: ReactHost by lazy { + getDefaultReactHost( + context = applicationContext, + packageList = PackageList(this).packages.apply { // Packages that cannot be autolinked yet can be added manually here, for example: add(ReactTHEOplayerPackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + }, + ) + } override fun onCreate() { super.onCreate() diff --git a/example/android/build.gradle b/example/android/build.gradle index a25721b53..0181c74f9 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -12,8 +12,8 @@ buildscript { ndkVersion = "29.0.14033849" castFrameworkVersion = "22.0.0" kotlinVersion = "2.2.10" - agpVersion = "8.12.3" - rnrepoVersion = "0.2.1" + agpVersion = "8.13.0" + rnrepoVersion = "0.2.2" } repositories { google() diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 3e7bacabb..9e25e3493 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -46,7 +46,7 @@ hermesEnabled=true edgeToEdgeEnabled=false # Version of the THEOplayer SDK, if not specified, the latest available version within bounds is set. -#THEOplayer_sdk=[10.12.0, 11.0.0) +#THEOplayer_sdk=[11.0.0, 12.0.0) # Override Android sdk versions #THEOplayer_compileSdkVersion = 36 diff --git a/example/babel.config.js b/example/babel.config.js index 740e17231..b86719fc5 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -1,6 +1,4 @@ module.exports = { presets: ['module:@react-native/babel-preset'], - plugins: [ - 'babel-plugin-react-compiler', - ], + plugins: ['babel-plugin-react-compiler'], }; diff --git a/example/package-lock.json b/example/package-lock.json index 5bbe237b5..738adb9c7 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -8,11 +8,11 @@ "name": "react-native-theoplayer-example", "version": "0.0.1", "dependencies": { - "@theoplayer/react-native-drm": "^1.10.0", - "@theoplayer/react-native-ui": "^0.21.1", - "react": "19.2.0", - "react-dom": "19.2.0", - "react-native": "npm:react-native-tvos@^0.83.1-0", + "@theoplayer/react-native-drm": "^1.12.0", + "@theoplayer/react-native-ui": "^0.23.0", + "react": "19.2.3", + "react-dom": "19.2.3", + "react-native": "npm:react-native-tvos@^0.84.1-0", "react-native-safe-area-context": "^5.5.2", "react-native-status-bar-height": "^2.6.0", "react-native-svg": "^15.12.1", @@ -24,44 +24,44 @@ "@babel/core": "^7.25.9", "@babel/preset-env": "^7.25.9", "@babel/runtime": "^7.26.10", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.1", - "@react-native/eslint-config": "0.83.1", - "@react-native/metro-config": "0.83.1", - "@react-native/typescript-config": "0.83.1", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", + "@react-native-community/cli": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native/babel-preset": "0.84.1", + "@react-native/eslint-config": "0.84.1", + "@react-native/metro-config": "0.84.1", + "@react-native/typescript-config": "0.84.1", + "@types/react": "^19.2.3", + "@types/react-dom": "^19.2.3", "babel-loader": "^8.4.1", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "^0.17.7", - "copy-webpack-plugin": "^13.0.1", + "copy-webpack-plugin": "^14.0.0", "eslint": "^8.57.1", "html-webpack-plugin": "^5.6.3", "react-native-svg-web": "^1.0.9", - "theoplayer": "^10", + "theoplayer": "^11", "typescript": "5.8.3", "webpack": "^5.105.0", "webpack-cli": "^6.0.1", "webpack-dev-server": "^5.2.1" }, "engines": { - "node": ">= 20" + "node": ">= 22.11.0" } }, "..": { - "version": "10.9.0", + "version": "10.13.0", "license": "BSD-3-Clause-Clear", "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" }, "devDependencies": { "@eslint/js": "^9.13.0", "@expo/config-plugins": "^10.0.2", - "@react-native/eslint-config": "^0.83.1", - "@types/react": "^19.2.0", + "@react-native/eslint-config": "^0.84.1", + "@types/react": "^19.2.14", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^7.0.0", @@ -69,10 +69,10 @@ "lint-staged": "^15.5.1", "pod-install": "^0.1.39", "prettier": "^3.5.3", - "react": "^19.2.0", - "react-native": "^0.83.1", + "react": "^19.2.3", + "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.10.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -80,12 +80,12 @@ "typescript-eslint": "^8.30.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^9.12.0 || ^10 || ^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -881,7 +881,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1020,7 +1020,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1203,7 +1203,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1237,7 +1237,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1253,7 +1253,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1404,7 +1404,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1420,7 +1420,7 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -1490,7 +1490,7 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1695,7 +1695,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1711,7 +1711,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1728,7 +1728,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2697,25 +2697,25 @@ } }, "node_modules/@react-native-community/cli": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.0.0.tgz", - "integrity": "sha512-/cMnGl5V1rqnbElY1Fvga1vfw0d3bnqiJLx2+2oh7l9ulnXfVRWb5tU2kgBqiMxuDOKA+DQoifC9q/tvkj5K2w==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.1.0.tgz", + "integrity": "sha512-441WsVtRe4nGJ9OzA+QMU1+22lA6Q2hRWqqIMKD0wjEMLqcSfOZyu2UL9a/yRpL/dRpyUsU4n7AxqKfTKO/Csg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-clean": "20.0.0", - "@react-native-community/cli-config": "20.0.0", - "@react-native-community/cli-doctor": "20.0.0", - "@react-native-community/cli-server-api": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "@react-native-community/cli-types": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-clean": "20.1.0", + "@react-native-community/cli-config": "20.1.0", + "@react-native-community/cli-doctor": "20.1.0", + "@react-native-community/cli-server-api": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", + "@react-native-community/cli-types": "20.1.0", "commander": "^9.4.1", "deepmerge": "^4.3.0", "execa": "^5.0.0", "find-up": "^5.0.0", "fs-extra": "^8.1.0", "graceful-fs": "^4.1.3", + "picocolors": "^1.1.1", "prompts": "^2.4.2", "semver": "^7.5.2" }, @@ -2723,91 +2723,91 @@ "rnc-cli": "build/bin.js" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/@react-native-community/cli-clean": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.0.0.tgz", - "integrity": "sha512-YmdNRcT+Dp8lC7CfxSDIfPMbVPEXVFzBH62VZNbYGxjyakqAvoQUFTYPgM2AyFusAr4wDFbDOsEv88gCDwR3ig==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.1.0.tgz", + "integrity": "sha512-77L4DifWfxAT8ByHnkypge7GBMYpbJAjBGV+toowt5FQSGaTBDcBHCX+FFqFRukD5fH6i8sZ41Gtw+nbfCTTIA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "fast-glob": "^3.3.2" + "fast-glob": "^3.3.2", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-config": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.0.tgz", - "integrity": "sha512-5Ky9ceYuDqG62VIIpbOmkg8Lybj2fUjf/5wK4UO107uRqejBgNgKsbGnIZgEhREcaSEOkujWrroJ9gweueLfBg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.1.0.tgz", + "integrity": "sha512-1x9rhLLR/dKKb92Lb5O0l0EmUG08FHf+ZVyVEf9M+tX+p5QIm52MRiy43R0UAZ2jJnFApxRk+N3sxoYK4Dtnag==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "cosmiconfig": "^9.0.0", "deepmerge": "^4.3.0", "fast-glob": "^3.3.2", - "joi": "^17.2.1" + "joi": "^17.2.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-config-android": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.0.0.tgz", - "integrity": "sha512-asv60qYCnL1v0QFWcG9r1zckeFlKG+14GGNyPXY72Eea7RX5Cxdx8Pb6fIPKroWH1HEWjYH9KKHksMSnf9FMKw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.1.0.tgz", + "integrity": "sha512-3A01ZDyFeCALzzPcwP/fleHoP3sGNq1UX7FzxkTrOFX8RRL9ntXNXQd27E56VU4BBxGAjAJT4Utw8pcOjJceIA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1" + "fast-xml-parser": "^4.4.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-config-apple": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.0.0.tgz", - "integrity": "sha512-PS1gNOdpeQ6w7dVu1zi++E+ix2D0ZkGC2SQP6Y/Qp002wG4se56esLXItYiiLrJkhH21P28fXdmYvTEkjSm9/Q==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.1.0.tgz", + "integrity": "sha512-n6JVs8Q3yxRbtZQOy05ofeb1kGtspGN3SgwPmuaqvURF9fsuS7c4/9up2Kp9C+1D2J1remPJXiZLNGOcJvfpOA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "fast-glob": "^3.3.2" + "fast-glob": "^3.3.2", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-doctor": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.0.0.tgz", - "integrity": "sha512-cPHspi59+Fy41FDVxt62ZWoicCZ1o34k8LAl64NVSY0lwPl+CEi78jipXJhtfkVqSTetloA8zexa/vSAcJy57Q==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.1.0.tgz", + "integrity": "sha512-QfJF1GVjA4PBrIT3SJ0vFFIu0km1vwOmLDlOYVqfojajZJ+Dnvl0f94GN1il/jT7fITAxom///XH3/URvi7YTQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-config": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-apple": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-config": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-apple": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", "command-exists": "^1.2.8", "deepmerge": "^4.3.0", "envinfo": "^7.13.0", "execa": "^5.0.0", "node-stream-zip": "^1.9.1", "ora": "^5.4.1", + "picocolors": "^1.1.1", "semver": "^7.5.2", "wcwidth": "^1.0.1", "yaml": "^2.2.1" } }, "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "devOptional": true, "license": "ISC", "bin": { @@ -2818,51 +2818,51 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.0.0.tgz", - "integrity": "sha512-th3ji1GRcV6ACelgC0wJtt9daDZ+63/52KTwL39xXGoqczFjml4qERK90/ppcXU0Ilgq55ANF8Pr+UotQ2AB/A==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.1.0.tgz", + "integrity": "sha512-TeHPDThOwDppQRpndm9kCdRCBI8AMy3HSIQ+iy7VYQXL5BtZ5LfmGdusoj7nVN/ZGn0Lc6Gwts5qowyupXdeKg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-config-android": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-config-android": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "logkitty": "^0.7.1" + "logkitty": "^0.7.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-platform-apple": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.0.0.tgz", - "integrity": "sha512-rZZCnAjUHN1XBgiWTAMwEKpbVTO4IHBSecdd1VxJFeTZ7WjmstqA6L/HXcnueBgxrzTCRqvkRIyEQXxC1OfhGw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.1.0.tgz", + "integrity": "sha512-0ih1hrYezSM2cuOlVnwBEFtMwtd8YgpTLmZauDJCv50rIumtkI1cQoOgLoS4tbPCj9U/Vn2a9BFH0DLFOOIacg==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-config-apple": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", + "@react-native-community/cli-config-apple": "20.1.0", + "@react-native-community/cli-tools": "20.1.0", "execa": "^5.0.0", - "fast-xml-parser": "^4.4.1" + "fast-xml-parser": "^4.4.1", + "picocolors": "^1.1.1" } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.0.0.tgz", - "integrity": "sha512-Z35M+4gUJgtS4WqgpKU9/XYur70nmj3Q65c9USyTq6v/7YJ4VmBkmhC9BticPs6wuQ9Jcv0NyVCY0Wmh6kMMYw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.1.0.tgz", + "integrity": "sha512-XN7Da9z4WsJxtqVtEzY8q2bv22OsvzaFP5zy5+phMWNoJlU4lf7IvBSxqGYMpQ9XhYP7arDw5vmW4W34s06rnA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-platform-apple": "20.0.0" + "@react-native-community/cli-platform-apple": "20.1.0" } }, "node_modules/@react-native-community/cli-server-api": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.0.0.tgz", - "integrity": "sha512-Ves21bXtjUK3tQbtqw/NdzpMW1vR2HvYCkUQ/MXKrJcPjgJnXQpSnTqHXz6ZdBlMbbwLJXOhSPiYzxb5/v4CDg==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.1.0.tgz", + "integrity": "sha512-Tb415Oh8syXNT2zOzLzFkBXznzGaqKCiaichxKzGCDKg6JGHp3jSuCmcTcaPeYC7oc32n/S3Psw7798r4Q/7lA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "20.0.0", + "@react-native-community/cli-tools": "20.1.0", "body-parser": "^1.20.3", "compression": "^1.7.1", "connect": "^3.6.5", @@ -2875,28 +2875,28 @@ } }, "node_modules/@react-native-community/cli-tools": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.0.tgz", - "integrity": "sha512-akSZGxr1IajJ8n0YCwQoA3DI0HttJ0WB7M3nVpb0lOM+rJpsBN7WG5Ft+8ozb6HyIPX+O+lLeYazxn5VNG/Xhw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.1.0.tgz", + "integrity": "sha512-/YmzHGOkY6Bgrv4OaA1L8rFqsBlQd1EB2/ipAoKPiieV0EcB5PUamUSuNeFU3sBZZTYQCUENwX4wgOHgFUlDnQ==", "devOptional": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", "execa": "^5.0.0", "find-up": "^5.0.0", "launch-editor": "^2.9.1", "mime": "^2.4.1", "ora": "^5.4.1", + "picocolors": "^1.1.1", "prompts": "^2.4.2", "semver": "^7.5.2" } }, "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "devOptional": true, "license": "ISC", "bin": { @@ -2907,9 +2907,9 @@ } }, "node_modules/@react-native-community/cli-types": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.0.0.tgz", - "integrity": "sha512-7J4hzGWOPTBV1d30Pf2NidV+bfCWpjfCOiGO3HUhz1fH4MvBM0FbbBmE9LE5NnMz7M8XSRSi68ZGYQXgLBB2Qw==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.1.0.tgz", + "integrity": "sha512-D0kDspcwgbVXyNjwicT7Bb1JgXjijTw1JJd+qxyF/a9+sHv7TU4IchV+gN38QegeXqVyM4Ym7YZIvXMFBmyJqA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2930,9 +2930,9 @@ } }, "node_modules/@react-native-tvos/virtualized-lists": { - "version": "0.83.1-0", - "resolved": "https://registry.npmjs.org/@react-native-tvos/virtualized-lists/-/virtualized-lists-0.83.1-0.tgz", - "integrity": "sha512-AQxQkh7/I485IEWOvrwWGBiTfc4Q74HgJvbUNRf4PJxraWxiRHQzhlNG4MO33tSFmEzC8lFexl2GDWM6Rme49Q==", + "version": "0.84.1-0", + "resolved": "https://registry.npmjs.org/@react-native-tvos/virtualized-lists/-/virtualized-lists-0.84.1-0.tgz", + "integrity": "sha512-+pKuqyolRwyqQHeIYfJxtedBc2k1rudIOwp27S9VJSfTjpm2V+x2kHUaBU5upHW2Tyag2kI7jedlYkA5reoN5Q==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -2953,32 +2953,32 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", - "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.84.1.tgz", + "integrity": "sha512-lAJ6PDZv95FdT9s9uhc9ivhikW1Zwh4j9XdXM7J2l4oUA3t37qfoBmTSDLuPyE3Bi+Xtwa11hJm0BUTT2sc/gg==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.1.tgz", - "integrity": "sha512-VPj8O3pG1ESjZho9WVKxqiuryrotAECPHGF5mx46zLUYNTWR5u9OMUXYk7LeLy+JLWdGEZ2Gn3KoXeFZbuqE+g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.84.1.tgz", + "integrity": "sha512-vorvcvptGxtK0qTDCFQb+W3CU6oIhzcX5dduetWRBoAhXdthEQM0MQnF+GTXoXL8/luffKgy7PlZRG/WeI/oRQ==", "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.83.1" + "@react-native/codegen": "0.84.1" }, "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/babel-preset": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.1.tgz", - "integrity": "sha512-xI+tbsD4fXcI6PVU4sauRCh0a5fuLQC849SINmU2J5wP8kzKu4Ye0YkGjUW3mfGrjaZcjkWmF6s33jpyd3gdTw==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.84.1.tgz", + "integrity": "sha512-3GpmCKk21f4oe32bKIdmkdn+WydvhhZL+1nsoFBGi30Qrq9vL16giKu31OcnWshYz139x+mVAvCyoyzgn8RXSw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2988,27 +2988,19 @@ "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.24.7", "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-react-display-name": "^7.24.7", @@ -3017,13 +3009,9 @@ "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.83.1", + "@react-native/babel-plugin-codegen": "0.84.1", "babel-plugin-syntax-hermes-parser": "0.32.0", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -3036,17 +3024,17 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", - "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.84.1.tgz", + "integrity": "sha512-n1RIU0QAavgCg1uC5+s53arL7/mpM+16IBhJ3nCFSd/iK5tUmCwxQDcIDC703fuXfpub/ZygeSjVN8bcOWn0gA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.25.3", - "glob": "^7.1.1", "hermes-parser": "0.32.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", + "tinyglobby": "^0.2.15", "yargs": "^17.6.2" }, "engines": { @@ -3057,12 +3045,12 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", - "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.84.1.tgz", + "integrity": "sha512-f6a+mJEJ6Joxlt/050TqYUr7uRRbeKnz8lnpL7JajhpsgZLEbkJRjH8HY5QiLcRdUwWFtizml4V+vcO3P4RxoQ==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.83.1", + "@react-native/dev-middleware": "0.84.1", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.3", @@ -3087,9 +3075,9 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3099,21 +3087,22 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", - "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.84.1.tgz", + "integrity": "sha512-rUU/Pyh3R5zT0WkVgB+yA6VwOp7HM5Hz4NYE97ajFS07OUIcv8JzBL3MXVdSSjLfldfqOuPEuKUaZcAOwPgabw==", "license": "BSD-3-Clause", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/debugger-shell": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.1.tgz", - "integrity": "sha512-d+0w446Hxth5OP/cBHSSxOEpbj13p2zToUy6e5e3tTERNJ8ueGlW7iGwGTrSymNDgXXFjErX+dY4P4/3WokPIQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.84.1.tgz", + "integrity": "sha512-LIGhh4q4ette3yW5OzmukNMYwmINYrRGDZqKyTYc/VZyNpblZPw72coXVHXdfpPT6+YlxHqXzn3UjFZpNODGCQ==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6", + "debug": "^4.4.0", "fb-dotslash": "0.5.8" }, "engines": { @@ -3121,14 +3110,14 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", - "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.84.1.tgz", + "integrity": "sha512-Z83ra+Gk6ElAhH3XRrv3vwbwCPTb04sPPlNpotxcFZb5LtRQZwT91ZQEXw3GOJCVIFp9EQ/gj8AQbVvtHKOUlQ==", "license": "MIT", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.83.1", - "@react-native/debugger-shell": "0.83.1", + "@react-native/debugger-frontend": "0.84.1", + "@react-native/debugger-shell": "0.84.1", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -3193,15 +3182,15 @@ } }, "node_modules/@react-native/eslint-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.83.1.tgz", - "integrity": "sha512-fo3DmFywzkpVZgIji9vR93kN7sSAY122ZIB7VcudgKlmD/YFxJ5Yi+ZNiWYl6aprLexxOWjROgHXNP0B0XaAng==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.84.1.tgz", + "integrity": "sha512-Z8j0uahXvPgvBAslxwIWwFliRQO0bL7nLpNiFroVnT1ojYCQHwFAbObDcAIs+Yva2FTat2A5m2rbi98MHVC+cg==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.83.1", + "@react-native/eslint-plugin": "0.84.1", "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "eslint-config-prettier": "^8.5.0", @@ -3210,20 +3199,20 @@ "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-native": "^4.0.0" + "eslint-plugin-react-native": "^5.0.0" }, "engines": { "node": ">= 20.19.4" }, "peerDependencies": { - "eslint": ">=8", + "eslint": "^8.0.0 || ^9.0.0", "prettier": ">=2" } }, "node_modules/@react-native/eslint-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.83.1.tgz", - "integrity": "sha512-nKd/FONY8aIIjtjEqI2ScvgJYeblBgdnwseRHlIC+Nm3f3tuOifUrHFtWBJznlrKFJcme31Tl7qiryE2SruLYw==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.84.1.tgz", + "integrity": "sha512-mKhsn3+CmN03vyW7/YQ6/LvLQppWT+eYqlCvmOvVoGlnh+XrJHJgwNr891zsyxGNELTwu/x2+T83ogwCmRHMEw==", "dev": true, "license": "MIT", "engines": { @@ -3231,32 +3220,32 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", - "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.84.1.tgz", + "integrity": "sha512-7uVlPBE3uluRNRX4MW7PUJIO1LDBTpAqStKHU7LHH+GRrdZbHsWtOEAX8PiY4GFfBEvG8hEjiuTOqAxMjV+hDg==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", - "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.84.1.tgz", + "integrity": "sha512-UsTe2AbUugsfyI7XIHMQq4E7xeC8a6GrYwuK+NohMMMJMxmyM3JkzIk+GB9e2il6ScEQNMJNaj+q+i5za8itxQ==", "license": "MIT", "engines": { "node": ">= 20.19.4" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz", - "integrity": "sha512-fqt6DHWX1GBGDKa5WJOjDtPPy2M9lkYVLn59fBeFQ0GXhBRzNbUh8JzWWI/Q2CLDZ2tgKCcwaiXJ1OHWVd2BCQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.84.1.tgz", + "integrity": "sha512-NswINguTz0eg1Dc0oGO/1dejXSr6iQaz8/NnCRn5HJdA3dGfqadS7zlYv0YjiWpgKgcW6uENaIEgJOQww0KSpw==", "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.83.1", + "@react-native/babel-preset": "0.84.1", "hermes-parser": "0.32.0", "nullthrows": "^1.1.1" }, @@ -3268,14 +3257,14 @@ } }, "node_modules/@react-native/metro-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.83.1.tgz", - "integrity": "sha512-1rjYZf62fCm6QAinHmRAKnJxIypX0VF/zBPd0qWvWABMZugrS0eACuIbk9Wk0StBod4yL8KnwEJyg77ak8xYzQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.84.1.tgz", + "integrity": "sha512-KlRawK4aXxRLlR3HYVfZKhfQp7sejQefQ/LttUWUkErhKO0AFt+yznoSLq7xwIrH9K3A3YwImHuFVtUtuDmurA==", "devOptional": true, "license": "MIT", "dependencies": { - "@react-native/js-polyfills": "0.83.1", - "@react-native/metro-babel-transformer": "0.83.1", + "@react-native/js-polyfills": "0.84.1", + "@react-native/metro-babel-transformer": "0.84.1", "metro-config": "^0.83.3", "metro-runtime": "^0.83.3" }, @@ -3284,15 +3273,15 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", - "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.84.1.tgz", + "integrity": "sha512-/UPaQ4jl95soXnLDEJ6Cs6lnRXhwbxtT4KbZz+AFDees7prMV2NOLcHfCnzmTabf5Y3oxENMVBL666n4GMLcTA==", "license": "MIT" }, "node_modules/@react-native/typescript-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.83.1.tgz", - "integrity": "sha512-y83qd7fmlZG+EJoOyKEmAXifdjN1csNhcfpyxDvgaIUNO/pw2ws3MV/wp+ERQ8F6JIuAu1zcfyCy1/pEA7tC9g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.84.1.tgz", + "integrity": "sha512-ar7Gn6ma3b+Ricdxn2sTZL2DT1NMlrfsWmOkFZegpfQJzheqX/8gzIB1aIbfZyvhEDsoz07RG7wmsyQAWqXjsw==", "dev": true, "license": "MIT" }, @@ -3345,20 +3334,20 @@ } }, "node_modules/@theoplayer/react-native-drm": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@theoplayer/react-native-drm/-/react-native-drm-1.10.0.tgz", - "integrity": "sha512-s7QQMlpxVE8nmCTwzNaHbdIsEmoqUvdixoblW0oNwxks9ocyubOmHwxoc+TRalo2Q6dq/BzacHKCXp2F1KhFrg==", - "license": "SEE LICENSE AT https://www.theoplayer.com/terms", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@theoplayer/react-native-drm/-/react-native-drm-1.12.0.tgz", + "integrity": "sha512-n3+FBLEyBP43mDG3hk0iy6AcQhWoE3NoVWZsTL1LiHHcr4jJvTQLjQO3r3FHv4I5E337nojks1gVFVdYx7dbSg==", + "license": "BSD-3-Clause-Clear", "peerDependencies": { "react": "*", - "react-native-theoplayer": "^7 || ^8 || ^9 || ^10", - "theoplayer": "^7 || ^8 || ^9 || ^10" + "react-native-theoplayer": "^7 || ^8 || ^9 || ^10 || ^11", + "theoplayer": "^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@theoplayer/react-native-ui": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.21.2.tgz", - "integrity": "sha512-8iHrnizIwliS3udc3KVGatLKutHYM88D4vj1ICbJZHBEp70C1KnQGJVkvQhavCXy4EUe1nu9xHmLhXEHvacuwQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.23.0.tgz", + "integrity": "sha512-NzRdsx2Z/466E3ZDTgQFqBrkRQ0v/1TtJv7Pv67NJMmotc0yXLOYwDy2pyL/QDyYUzmTrUX9A26VP10wsXSHig==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms", "dependencies": { "@miblanchard/react-native-slider": "^2.6.0", @@ -3370,7 +3359,7 @@ "react-native": "*", "react-native-google-cast": "*", "react-native-svg": "^13.8.0 || ^14 || ^15", - "react-native-theoplayer": "^7 || ^8 || ^9 || ^10" + "react-native-theoplayer": "^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@types/babel__core": { @@ -3980,9 +3969,9 @@ "license": "ISC" }, "node_modules/@vscode/sudo-prompt": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.1.tgz", - "integrity": "sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.2.tgz", + "integrity": "sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==", "devOptional": true, "license": "MIT" }, @@ -5610,20 +5599,20 @@ "license": "MIT" }, "node_modules/copy-webpack-plugin": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", - "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz", + "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==", "dev": true, "license": "MIT", "dependencies": { "glob-parent": "^6.0.1", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2", + "serialize-javascript": "^7.0.3", "tinyglobby": "^0.2.12" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", @@ -5690,6 +5679,16 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/core-js-compat": { "version": "3.47.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", @@ -5712,9 +5711,9 @@ "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5873,9 +5872,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", - "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", "devOptional": true, "license": "MIT" }, @@ -6263,17 +6262,21 @@ } }, "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.2.tgz", + "integrity": "sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==", "devOptional": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "escape-html": "~1.0.3" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/es-abstract": { @@ -6712,16 +6715,16 @@ } }, "node_modules/eslint-plugin-react-native": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", - "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-5.0.0.tgz", + "integrity": "sha512-VyWlyCC/7FC/aONibOwLkzmyKg4j9oI8fzrk9WYNs4I8/m436JuOTAFwLvEn1CVvc7La4cPfbCyspP4OYpP52Q==", "dev": true, "license": "MIT", "dependencies": { "eslint-plugin-react-native-globals": "^0.1.1" }, "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-react-native-globals": { @@ -7209,9 +7212,9 @@ "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.5.tgz", + "integrity": "sha512-cK9c5I/DwIOI7/Q7AlGN3DuTdwN61gwSfL8rvuVPK+0mcCNHHGxRrpiFtaZZRfRMJL3Gl8B2AFlBG6qXf03w9A==", "devOptional": true, "funding": [ { @@ -7455,9 +7458,9 @@ "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -7943,9 +7946,9 @@ } }, "node_modules/hermes-compiler": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.0.tgz", - "integrity": "sha512-clxa193o+GYYwykWVFfpHduCATz8fR5jvU7ngXpfKHj+E9hr9vjLNtdLSEe8MUbObvVexV3wcyxQ00xTPIrB1Q==", + "version": "250829098.0.9", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.9.tgz", + "integrity": "sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==", "license": "MIT" }, "node_modules/hermes-estree": { @@ -9517,9 +9520,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -11154,16 +11157,6 @@ ], "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -11190,9 +11183,9 @@ } }, "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11230,15 +11223,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.0" + "react": "^19.2.3" } }, "node_modules/react-is": { @@ -11249,19 +11242,19 @@ }, "node_modules/react-native": { "name": "react-native-tvos", - "version": "0.83.1-0", - "resolved": "https://registry.npmjs.org/react-native-tvos/-/react-native-tvos-0.83.1-0.tgz", - "integrity": "sha512-l+18XpdWmh7qDqTMZ2vwCv0PmvF+lxQSaxHk+Kt+0ZGwWi+gz0KyK15bf39xuzp2W+WBBgamLMtx+D6OBCUb7A==", + "version": "0.84.1-0", + "resolved": "https://registry.npmjs.org/react-native-tvos/-/react-native-tvos-0.84.1-0.tgz", + "integrity": "sha512-vJWbzbnUhI88wtvdZEKR+A85OYvqRqTffg3grW3XJrNNP8pXJ7yEK2q8Vbg3SCqtWuox9KJ+Ss0KCv+yUcd66A==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native-tvos/virtualized-lists": "0.83.1-0", - "@react-native/assets-registry": "0.83.1", - "@react-native/codegen": "0.83.1", - "@react-native/community-cli-plugin": "0.83.1", - "@react-native/gradle-plugin": "0.83.1", - "@react-native/js-polyfills": "0.83.1", - "@react-native/normalize-colors": "0.83.1", + "@react-native-tvos/virtualized-lists": "0.84.1-0", + "@react-native/assets-registry": "0.84.1", + "@react-native/codegen": "0.84.1", + "@react-native/community-cli-plugin": "0.84.1", + "@react-native/gradle-plugin": "0.84.1", + "@react-native/js-polyfills": "0.84.1", + "@react-native/normalize-colors": "0.84.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -11270,8 +11263,7 @@ "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "hermes-compiler": "0.14.0", + "hermes-compiler": "250829098.0.9", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", @@ -11286,6 +11278,7 @@ "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" @@ -11298,7 +11291,7 @@ }, "peerDependencies": { "@types/react": "^19.1.1", - "react": "^19.2.0" + "react": "^19.2.3" }, "peerDependenciesMeta": { "@types/react": { @@ -11441,9 +11434,9 @@ } }, "node_modules/react-native/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12125,16 +12118,6 @@ "node": ">=0.10.0" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -12882,16 +12865,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -13025,9 +13007,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -13035,9 +13017,9 @@ } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", - "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -13054,9 +13036,9 @@ "license": "MIT" }, "node_modules/theoplayer": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-10.6.1.tgz", - "integrity": "sha512-mz3LpcChF0/pUWJwzJtMwKWyuqmv85Ao8eAFVmYFI0K+krjC+yAm28suFa7E6BITZfNTtwlDTY+ZPRDcxd6+ng==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-11.0.0.tgz", + "integrity": "sha512-pxjpNtd++m87H5ndEPlNbKpHhXCNbFDgnXB0g6RfTv/v7zSpSLwiB0F0vIJe5asaqEJ6pKH7kvpTgnaEN2TElw==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms" }, "node_modules/thingies": { @@ -13093,7 +13075,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -13110,7 +13091,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -13128,7 +13108,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -13338,7 +13317,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/example/package.json b/example/package.json index a2d6312e8..60f9eb982 100644 --- a/example/package.json +++ b/example/package.json @@ -15,11 +15,11 @@ "pod-update": "cd ios && RCT_NEW_ARCH_ENABLED=1 bundle exec pod update" }, "dependencies": { - "@theoplayer/react-native-drm": "^1.10.0", - "@theoplayer/react-native-ui": "^0.21.1", - "react": "19.2.0", - "react-dom": "19.2.0", - "react-native": "npm:react-native-tvos@^0.83.1-0", + "@theoplayer/react-native-drm": "^1.12.0", + "@theoplayer/react-native-ui": "^0.23.0", + "react": "19.2.3", + "react-dom": "19.2.3", + "react-native": "npm:react-native-tvos@^0.84.1-0", "react-native-safe-area-context": "^5.5.2", "react-native-status-bar-height": "^2.6.0", "react-native-svg": "^15.12.1", @@ -31,23 +31,23 @@ "@babel/core": "^7.25.9", "@babel/preset-env": "^7.25.9", "@babel/runtime": "^7.26.10", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.1", - "@react-native/eslint-config": "0.83.1", - "@react-native/metro-config": "0.83.1", - "@react-native/typescript-config": "0.83.1", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", + "@react-native-community/cli": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native/babel-preset": "0.84.1", + "@react-native/eslint-config": "0.84.1", + "@react-native/metro-config": "0.84.1", + "@react-native/typescript-config": "0.84.1", + "@types/react": "^19.2.3", + "@types/react-dom": "^19.2.3", "babel-loader": "^8.4.1", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "^0.17.7", - "copy-webpack-plugin": "^13.0.1", + "copy-webpack-plugin": "^14.0.0", "eslint": "^8.57.1", "html-webpack-plugin": "^5.6.3", "react-native-svg-web": "^1.0.9", - "theoplayer": "^10", + "theoplayer": "^11", "typescript": "5.8.3", "webpack": "^5.105.0", "webpack-cli": "^6.0.1", @@ -57,6 +57,6 @@ "react-native": "$react-native" }, "engines": { - "node": ">= 20" + "node": ">= 22.11.0" } } diff --git a/example/web/public/index.html b/example/web/public/index.html index 4a6d88a29..310786e4b 100644 --- a/example/web/public/index.html +++ b/example/web/public/index.html @@ -14,6 +14,9 @@ + + +
diff --git a/ios/ads/THEOplayerRCTAdAdapter.swift b/ios/ads/THEOplayerRCTAdAdapter.swift index 51dd07f90..31bfbac45 100644 --- a/ios/ads/THEOplayerRCTAdAdapter.swift +++ b/ios/ads/THEOplayerRCTAdAdapter.swift @@ -62,8 +62,8 @@ class THEOplayerRCTAdAdapter { if let skipOffset = ad.skipOffset { adData[PROP_AD_SKIP_OFFSET] = (skipOffset == -1) ? skipOffset : skipOffset } - if processAdBreak { - adData[PROP_AD_BREAK] = THEOplayerRCTAdAdapter.fromAdBreak(adBreak: ad.adBreak) + if processAdBreak, let adBreak = ad.adBreak { + adData[PROP_AD_BREAK] = THEOplayerRCTAdAdapter.fromAdBreak(adBreak: adBreak) } #if os(iOS) diff --git a/ios/ads/THEOplayerRCTAdsNative.swift b/ios/ads/THEOplayerRCTAdsNative.swift index a27abbde9..151f2ec16 100644 --- a/ios/ads/THEOplayerRCTAdsNative.swift +++ b/ios/ads/THEOplayerRCTAdsNative.swift @@ -5,7 +5,7 @@ import THEOplayerSDK class NativeAd: THEOplayerSDK.Ad { /** A reference to the `AdBreak` of which the ad is a part of.*/ - var adBreak: AdBreak + var adBreak: AdBreak? /** An array of `CompanionAd`s associated to the ad, if available within the same Creatives element.*/ var companions: [THEOplayerSDK.CompanionAd] = [] /** Either 'linear' or 'nonlinear', depending on the concrete implementer.*/ diff --git a/package-lock.json b/package-lock.json index d777f185d..326740a01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,22 @@ { "name": "react-native-theoplayer", - "version": "10.13.0", + "version": "11.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-theoplayer", - "version": "10.13.0", + "version": "11.0.0", "license": "BSD-3-Clause-Clear", "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" }, "devDependencies": { "@eslint/js": "^9.13.0", "@expo/config-plugins": "^10.0.2", - "@react-native/eslint-config": "^0.83.1", - "@types/react": "^19.2.0", + "@react-native/eslint-config": "^0.84.1", + "@types/react": "^19.2.14", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^7.0.0", @@ -24,10 +24,10 @@ "lint-staged": "^15.5.1", "pod-install": "^0.1.39", "prettier": "^3.5.3", - "react": "^19.2.0", - "react-native": "^0.83.1", + "react": "^19.2.3", + "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.10.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -35,12 +35,12 @@ "typescript-eslint": "^8.30.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -62,13 +62,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -135,14 +135,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -548,13 +548,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1981,53 +1981,33 @@ "dev": true }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", - "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse--for-generate-function-map": { - "name": "@babel/traverse", - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -2035,9 +2015,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -2776,9 +2756,9 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", - "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.84.1.tgz", + "integrity": "sha512-lAJ6PDZv95FdT9s9uhc9ivhikW1Zwh4j9XdXM7J2l4oUA3t37qfoBmTSDLuPyE3Bi+Xtwa11hJm0BUTT2sc/gg==", "dev": true, "license": "MIT", "engines": { @@ -2786,18 +2766,18 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", - "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.84.1.tgz", + "integrity": "sha512-n1RIU0QAavgCg1uC5+s53arL7/mpM+16IBhJ3nCFSd/iK5tUmCwxQDcIDC703fuXfpub/ZygeSjVN8bcOWn0gA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.25.3", - "glob": "^7.1.1", "hermes-parser": "0.32.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", + "tinyglobby": "^0.2.15", "yargs": "^17.6.2" }, "engines": { @@ -2808,13 +2788,13 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", - "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.84.1.tgz", + "integrity": "sha512-f6a+mJEJ6Joxlt/050TqYUr7uRRbeKnz8lnpL7JajhpsgZLEbkJRjH8HY5QiLcRdUwWFtizml4V+vcO3P4RxoQ==", "dev": true, "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.83.1", + "@react-native/dev-middleware": "0.84.1", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.3", @@ -2839,9 +2819,9 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -2852,9 +2832,9 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", - "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.84.1.tgz", + "integrity": "sha512-rUU/Pyh3R5zT0WkVgB+yA6VwOp7HM5Hz4NYE97ajFS07OUIcv8JzBL3MXVdSSjLfldfqOuPEuKUaZcAOwPgabw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -2862,13 +2842,14 @@ } }, "node_modules/@react-native/debugger-shell": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.1.tgz", - "integrity": "sha512-d+0w446Hxth5OP/cBHSSxOEpbj13p2zToUy6e5e3tTERNJ8ueGlW7iGwGTrSymNDgXXFjErX+dY4P4/3WokPIQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.84.1.tgz", + "integrity": "sha512-LIGhh4q4ette3yW5OzmukNMYwmINYrRGDZqKyTYc/VZyNpblZPw72coXVHXdfpPT6+YlxHqXzn3UjFZpNODGCQ==", "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6", + "debug": "^4.4.0", "fb-dotslash": "0.5.8" }, "engines": { @@ -2876,15 +2857,15 @@ } }, "node_modules/@react-native/dev-middleware": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", - "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.84.1.tgz", + "integrity": "sha512-Z83ra+Gk6ElAhH3XRrv3vwbwCPTb04sPPlNpotxcFZb5LtRQZwT91ZQEXw3GOJCVIFp9EQ/gj8AQbVvtHKOUlQ==", "dev": true, "license": "MIT", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.83.1", - "@react-native/debugger-shell": "0.83.1", + "@react-native/debugger-frontend": "0.84.1", + "@react-native/debugger-shell": "0.84.1", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -2900,15 +2881,15 @@ } }, "node_modules/@react-native/eslint-config": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.83.1.tgz", - "integrity": "sha512-fo3DmFywzkpVZgIji9vR93kN7sSAY122ZIB7VcudgKlmD/YFxJ5Yi+ZNiWYl6aprLexxOWjROgHXNP0B0XaAng==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.84.1.tgz", + "integrity": "sha512-Z8j0uahXvPgvBAslxwIWwFliRQO0bL7nLpNiFroVnT1ojYCQHwFAbObDcAIs+Yva2FTat2A5m2rbi98MHVC+cg==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.83.1", + "@react-native/eslint-plugin": "0.84.1", "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "eslint-config-prettier": "^8.5.0", @@ -2917,13 +2898,13 @@ "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-native": "^4.0.0" + "eslint-plugin-react-native": "^5.0.0" }, "engines": { "node": ">= 20.19.4" }, "peerDependencies": { - "eslint": ">=8", + "eslint": "^8.0.0 || ^9.0.0", "prettier": ">=2" } }, @@ -3060,18 +3041,6 @@ "eslint": "^8.1.0" } }, - "node_modules/@react-native/eslint-config/node_modules/eslint-plugin-react-native": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz", - "integrity": "sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q==", - "dev": true, - "dependencies": { - "eslint-plugin-react-native-globals": "^0.1.1" - }, - "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, "node_modules/@react-native/eslint-config/node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -3083,9 +3052,9 @@ } }, "node_modules/@react-native/eslint-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.83.1.tgz", - "integrity": "sha512-nKd/FONY8aIIjtjEqI2ScvgJYeblBgdnwseRHlIC+Nm3f3tuOifUrHFtWBJznlrKFJcme31Tl7qiryE2SruLYw==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.84.1.tgz", + "integrity": "sha512-mKhsn3+CmN03vyW7/YQ6/LvLQppWT+eYqlCvmOvVoGlnh+XrJHJgwNr891zsyxGNELTwu/x2+T83ogwCmRHMEw==", "dev": true, "license": "MIT", "engines": { @@ -3093,9 +3062,9 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", - "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.84.1.tgz", + "integrity": "sha512-7uVlPBE3uluRNRX4MW7PUJIO1LDBTpAqStKHU7LHH+GRrdZbHsWtOEAX8PiY4GFfBEvG8hEjiuTOqAxMjV+hDg==", "dev": true, "license": "MIT", "engines": { @@ -3103,9 +3072,9 @@ } }, "node_modules/@react-native/js-polyfills": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", - "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.84.1.tgz", + "integrity": "sha512-UsTe2AbUugsfyI7XIHMQq4E7xeC8a6GrYwuK+NohMMMJMxmyM3JkzIk+GB9e2il6ScEQNMJNaj+q+i5za8itxQ==", "dev": true, "license": "MIT", "engines": { @@ -3113,16 +3082,16 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", - "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.84.1.tgz", + "integrity": "sha512-/UPaQ4jl95soXnLDEJ6Cs6lnRXhwbxtT4KbZz+AFDees7prMV2NOLcHfCnzmTabf5Y3oxENMVBL666n4GMLcTA==", "dev": true, "license": "MIT" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.1.tgz", - "integrity": "sha512-MdmoAbQUTOdicCocm5XAFDJWsswxk7hxa6ALnm6Y88p01HFML0W593hAn6qOt9q6IM1KbAcebtH6oOd4gcQy8w==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.84.1.tgz", + "integrity": "sha512-sJoDunzhci8ZsqxlUiKoLut4xQeQcmbIgvDHGQKeBz6uEq9HgU+hCWOijMRr6sLP0slQVfBAza34Rq7IbXZZOA==", "dev": true, "license": "MIT", "dependencies": { @@ -3168,12 +3137,12 @@ } }, "node_modules/@theoplayer/cmcd-connector-web": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@theoplayer/cmcd-connector-web/-/cmcd-connector-web-1.4.0.tgz", - "integrity": "sha512-fOl94/HKnJLiBwhy4KPLOtxcNksUHfCyXQTvTM0kVBdd+Y6DwgreGpk6RXeHpxzkVXgH0Sx1DjNutwfIqLk/yA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@theoplayer/cmcd-connector-web/-/cmcd-connector-web-1.5.0.tgz", + "integrity": "sha512-eWElrE36ubYqaxcsc4iA8L1YwRB0m48rXl3OWjiQIZINdMUSyEB87999xEG9Y21WKVDCjG7yegnJzFBKnzttmQ==", "license": "MIT", "peerDependencies": { - "theoplayer": "^5 || ^6 || ^7 || ^8 || ^9 || ^10" + "theoplayer": "^5 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@types/babel__core": { @@ -3260,9 +3229,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", "dependencies": { @@ -3873,9 +3842,9 @@ "dev": true }, "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", + "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", "dev": true, "license": "MIT", "engines": { @@ -5684,11 +5653,25 @@ "hermes-estree": "0.25.1" } }, + "node_modules/eslint-plugin-react-native": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-5.0.0.tgz", + "integrity": "sha512-VyWlyCC/7FC/aONibOwLkzmyKg4j9oI8fzrk9WYNs4I8/m436JuOTAFwLvEn1CVvc7La4cPfbCyspP4OYpP52Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-react-native-globals": "^0.1.1" + }, + "peerDependencies": { + "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, "node_modules/eslint-plugin-react-native-globals": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.11", @@ -6575,9 +6558,9 @@ } }, "node_modules/hermes-compiler": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.0.tgz", - "integrity": "sha512-clxa193o+GYYwykWVFfpHduCATz8fR5jvU7ngXpfKHj+E9hr9vjLNtdLSEe8MUbObvVexV3wcyxQ00xTPIrB1Q==", + "version": "250829098.0.9", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.9.tgz", + "integrity": "sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==", "dev": true, "license": "MIT" }, @@ -7993,9 +7976,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -8183,20 +8166,20 @@ } }, "node_modules/metro": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", - "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.5.tgz", + "integrity": "sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", + "@babel/code-frame": "^7.29.0", "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "accepts": "^1.3.7", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "accepts": "^2.0.0", "chalk": "^4.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", @@ -8204,25 +8187,25 @@ "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.32.0", + "hermes-parser": "0.33.3", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3", - "mime-types": "^2.1.27", + "metro-babel-transformer": "0.83.5", + "metro-cache": "0.83.5", + "metro-cache-key": "0.83.5", + "metro-config": "0.83.5", + "metro-core": "0.83.5", + "metro-file-map": "0.83.5", + "metro-resolver": "0.83.5", + "metro-runtime": "0.83.5", + "metro-source-map": "0.83.5", + "metro-symbolicate": "0.83.5", + "metro-transform-plugins": "0.83.5", + "metro-transform-worker": "0.83.5", + "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", "source-map": "^0.5.6", @@ -8238,41 +8221,58 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", - "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.5.tgz", + "integrity": "sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.32.0", + "hermes-parser": "0.33.3", "nullthrows": "^1.1.1" }, "engines": { "node": ">=20.19.4" } }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz", + "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz", + "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.33.3" + } + }, "node_modules/metro-cache": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", - "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.5.tgz", + "integrity": "sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==", "dev": true, "license": "MIT", "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" + "metro-core": "0.83.5" }, "engines": { "node": ">=20.19.4" } }, "node_modules/metro-cache-key": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", - "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.5.tgz", + "integrity": "sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==", "dev": true, "license": "MIT", "dependencies": { @@ -8283,19 +8283,19 @@ } }, "node_modules/metro-config": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", - "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.5.tgz", + "integrity": "sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==", "dev": true, "license": "MIT", "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.83.3", - "metro-cache": "0.83.3", - "metro-core": "0.83.3", - "metro-runtime": "0.83.3", + "metro": "0.83.5", + "metro-cache": "0.83.5", + "metro-core": "0.83.5", + "metro-runtime": "0.83.5", "yaml": "^2.6.1" }, "engines": { @@ -8303,24 +8303,24 @@ } }, "node_modules/metro-core": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", - "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.5.tgz", + "integrity": "sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==", "dev": true, "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" + "metro-resolver": "0.83.5" }, "engines": { "node": ">=20.19.4" } }, "node_modules/metro-file-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", - "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.5.tgz", + "integrity": "sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8339,9 +8339,9 @@ } }, "node_modules/metro-minify-terser": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", - "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.5.tgz", + "integrity": "sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8353,9 +8353,9 @@ } }, "node_modules/metro-resolver": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", - "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.5.tgz", + "integrity": "sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==", "dev": true, "license": "MIT", "dependencies": { @@ -8366,9 +8366,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", - "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.5.tgz", + "integrity": "sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==", "dev": true, "license": "MIT", "dependencies": { @@ -8380,20 +8380,19 @@ } }, "node_modules/metro-source-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", - "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.5.tgz", + "integrity": "sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", + "metro-symbolicate": "0.83.5", "nullthrows": "^1.1.1", - "ob1": "0.83.3", + "ob1": "0.83.5", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -8402,15 +8401,15 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", - "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.5.tgz", + "integrity": "sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==", "dev": true, "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.83.3", + "metro-source-map": "0.83.5", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -8423,16 +8422,16 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", - "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.5.tgz", + "integrity": "sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", + "@babel/generator": "^7.29.1", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" }, @@ -8441,30 +8440,44 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", - "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.5.tgz", + "integrity": "sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-source-map": "0.83.3", - "metro-transform-plugins": "0.83.3", + "metro": "0.83.5", + "metro-babel-transformer": "0.83.5", + "metro-cache": "0.83.5", + "metro-cache-key": "0.83.5", + "metro-minify-terser": "0.83.5", + "metro-source-map": "0.83.5", + "metro-transform-plugins": "0.83.5", "nullthrows": "^1.1.1" }, "engines": { "node": ">=20.19.4" } }, + "node_modules/metro/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/metro/node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -8472,6 +8485,60 @@ "dev": true, "license": "MIT" }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz", + "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz", + "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.33.3" + } + }, + "node_modules/metro/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/metro/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -8664,9 +8731,9 @@ "dev": true }, "node_modules/ob1": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", - "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.5.tgz", + "integrity": "sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==", "dev": true, "license": "MIT", "dependencies": { @@ -9286,9 +9353,9 @@ } }, "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "dev": true, "license": "MIT", "engines": { @@ -9313,20 +9380,20 @@ "dev": true }, "node_modules/react-native": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.1.tgz", - "integrity": "sha512-mL1q5HPq5cWseVhWRLl+Fwvi5z1UO+3vGOpjr+sHFwcUletPRZ5Kv+d0tUfqHmvi73/53NjlQqX1Pyn4GguUfA==", + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.84.1.tgz", + "integrity": "sha512-0PjxOyXRu3tZ8EobabxSukvhKje2HJbsZikR0U+pvS0pYZza2hXKjcSBiBdFN4h9D0S3v6a8kkrDK6WTRKMwzg==", "dev": true, "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.83.1", - "@react-native/codegen": "0.83.1", - "@react-native/community-cli-plugin": "0.83.1", - "@react-native/gradle-plugin": "0.83.1", - "@react-native/js-polyfills": "0.83.1", - "@react-native/normalize-colors": "0.83.1", - "@react-native/virtualized-lists": "0.83.1", + "@react-native/assets-registry": "0.84.1", + "@react-native/codegen": "0.84.1", + "@react-native/community-cli-plugin": "0.84.1", + "@react-native/gradle-plugin": "0.84.1", + "@react-native/js-polyfills": "0.84.1", + "@react-native/normalize-colors": "0.84.1", + "@react-native/virtualized-lists": "0.84.1", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -9335,8 +9402,7 @@ "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "hermes-compiler": "0.14.0", + "hermes-compiler": "250829098.0.9", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", @@ -9351,6 +9417,7 @@ "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" @@ -9363,7 +9430,7 @@ }, "peerDependencies": { "@types/react": "^19.1.1", - "react": "^19.2.0" + "react": "^19.2.3" }, "peerDependenciesMeta": { "@types/react": { @@ -10869,9 +10936,9 @@ "dev": true }, "node_modules/theoplayer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-10.10.0.tgz", - "integrity": "sha512-24UKdnryzQHl8ch+E3YLJv4swZpydtjNZuh+mA57xBosQsirIxMKuuU0tE6ZjRu21ULgreu2KFwy3Qg9n0hMgg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-11.0.0.tgz", + "integrity": "sha512-pxjpNtd++m87H5ndEPlNbKpHhXCNbFDgnXB0g6RfTv/v7zSpSLwiB0F0vIJe5asaqEJ6pKH7kvpTgnaEN2TElw==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms" }, "node_modules/throat": { @@ -10890,6 +10957,54 @@ "xtend": "~4.0.1" } }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", diff --git a/package.json b/package.json index 3f5491302..836af3299 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-theoplayer", - "version": "10.13.0", + "version": "11.0.0", "description": "A THEOplayer video component for react-native.", "main": "lib/commonjs/index", "module": "lib/module/index", @@ -58,8 +58,8 @@ "devDependencies": { "@eslint/js": "^9.13.0", "@expo/config-plugins": "^10.0.2", - "@react-native/eslint-config": "^0.83.1", - "@types/react": "^19.2.0", + "@react-native/eslint-config": "^0.84.1", + "@types/react": "^19.2.14", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^7.0.0", @@ -67,10 +67,10 @@ "lint-staged": "^15.5.1", "pod-install": "^0.1.39", "prettier": "^3.5.3", - "react": "^19.2.0", - "react-native": "^0.83.1", + "react": "^19.2.3", + "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.10.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -80,7 +80,7 @@ "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -88,7 +88,7 @@ } }, "engines": { - "node": ">=16" + "node": ">=20" }, "eslintIgnore": [ "node_modules/", @@ -109,7 +109,7 @@ ] }, "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" } } diff --git a/react-native-theoplayer.podspec b/react-native-theoplayer.podspec index fe642bd34..75885c65d 100644 --- a/react-native-theoplayer.podspec +++ b/react-native-theoplayer.podspec @@ -32,7 +32,7 @@ Pod::Spec.new do |s| s.license = package["license"] s.authors = package["author"] - s.platforms = { :ios => "13.4", :tvos => "13.4" } + s.platforms = { :ios => "15.0", :tvos => "15.0" } s.source = { :git => "https://www.theoplayer.com/.git", :tag => "#{s.version}" } s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift', 'ios/pip/*.swift', 'ios/backgroundAudio/*.swift', 'ios/cache/*.swift', 'ios/sideloadedMetadata/*.swift', 'ios/eventBroadcasting/*.swift' , 'ios/ui/*.swift', 'ios/presentationMode/*.swift', 'ios/viewController/*.swift', 'ios/THEOlive/*.swift', 'ios/THEOads/*.swift', 'ios/millicast/*.swift' @@ -43,37 +43,37 @@ Pod::Spec.new do |s| # THEOplayer Dependency puts "Adding THEOplayerSDK-core" - s.dependency "THEOplayerSDK-core", "~> 10.10" + s.dependency "THEOplayerSDK-core", "~> 11.0" # THEOlive Dependency puts "Adding THEOplayer-Integration-THEOlive" - s.dependency "THEOplayer-Integration-THEOlive", "~> 10.12" + s.dependency "THEOplayer-Integration-THEOlive", "~> 11.0" # Feature based integration dependencies if theofeatures.include?("GOOGLE_IMA") puts "Adding THEOplayer-Integration-GoogleIMA" - s.dependency "THEOplayer-Integration-GoogleIMA", "~> 10.12" + s.dependency "THEOplayer-Integration-GoogleIMA", "~> 11.0" end if theofeatures.include?("CHROMECAST") puts "Adding THEOplayer-Integration-GoogleCast" - s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 10.12" + s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 11.0" end if theofeatures.include?("THEO_ADS") puts "Adding THEOplayer-Integration-THEOads" - s.dependency "THEOplayer-Integration-THEOads", "~> 10.12" + s.dependency "THEOplayer-Integration-THEOads", "~> 11.0" end if theofeatures.include?("MILLICAST") puts "Adding THEOplayer-Integration-Millicast" - s.dependency "THEOplayer-Integration-Millicast", "~> 10.12" + s.dependency "THEOplayer-Integration-Millicast", "~> 11.0" end # Feature based connector dependencies if theofeatures.include?("SIDELOADED_TEXTTRACKS") puts "Adding THEOplayer-Connector-SideloadedSubtitle" - s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 10.12" + s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 11.0" end end diff --git a/src/api/event/PlayerEvent.ts b/src/api/event/PlayerEvent.ts index 314a6a1c9..5e2d93e73 100644 --- a/src/api/event/PlayerEvent.ts +++ b/src/api/event/PlayerEvent.ts @@ -69,27 +69,6 @@ export interface DimensionChangeEvent extends Event { - /** - * The player's current width. - */ - readonly width: number; - - /** - * The player's current height. - */ - readonly height: number; -} - /** * Dispatched when video is resized. * diff --git a/src/api/player/PlayerEventMap.ts b/src/api/player/PlayerEventMap.ts index 0a39dbeeb..65b31125d 100644 --- a/src/api/player/PlayerEventMap.ts +++ b/src/api/player/PlayerEventMap.ts @@ -12,7 +12,6 @@ import type { TimeUpdateEvent, PresentationModeChangeEvent, VolumeChangeEvent, - ResizeEvent, SeekedEvent, SeekingEvent, VideoResizeEvent, @@ -62,10 +61,6 @@ export enum PlayerEventType { WAITING = 'waiting', PRESENTATIONMODE_CHANGE = 'presentationmodechange', DESTROY = 'destroy', - /** - * @deprecated Use {@link PlayerEventType.DIMENSION_CHANGE} instead. This event is set for removal in version 11. - */ - RESIZE = 'resize', DIMENSION_CHANGE = 'dimensionchange', VIDEO_RESIZE = 'videoresize', } @@ -238,13 +233,6 @@ export interface PlayerEventMap { */ [PlayerEventType.DESTROY]: Event; - /** - * Dispatched when the player size changes. - * - * @deprecated Use {@link dimensionchange} instead. This event is set for removal in version 11. - */ - [PlayerEventType.RESIZE]: ResizeEvent; - /** * Dispatched when the player size changes. */ diff --git a/src/api/player/THEOplayer.ts b/src/api/player/THEOplayer.ts index a66289724..616899908 100644 --- a/src/api/player/THEOplayer.ts +++ b/src/api/player/THEOplayer.ts @@ -287,11 +287,4 @@ export interface THEOplayer extends EventDispatcher { * The API for THEOlive. */ readonly theoLive: TheoLiveAPI; - - /** - * The API for THEOlive. - * - * @deprecated use {@link THEOplayer.theoLive} instead. - */ - readonly theolive: TheoLiveAPI; } diff --git a/src/api/source/SourceDescription.ts b/src/api/source/SourceDescription.ts index 0f6e77697..e303c545a 100644 --- a/src/api/source/SourceDescription.ts +++ b/src/api/source/SourceDescription.ts @@ -50,18 +50,6 @@ export type Sources = Source | Source[]; */ export type CrossOriginSetting = '' | 'anonymous' | 'use-credentials'; -/** - * The integration identifier of a source specific to a pre-integration, represented by a value from the following list: - *
- `'theolive'`: The source contains the THEOlive initialization url. - * - * @category Source - * @public - * @deprecated use {@link TypedSource.type} instead. - */ -export enum SourceIntegrationId { - THEO_LIVE = 'theolive' -} - /** * Describes the configuration of a player's source. * @@ -284,16 +272,6 @@ export interface TextTrackDescription { * @public */ export interface BaseSource { - /** - * The integration ID of the source. - * - * @remarks - *
- This can be used to signal that a source is specific to an integration. - * - * @deprecated use {@link TypedSource.type} instead. - */ - integration?: SourceIntegrationId; - /** * The cross-origin setting of the source. * diff --git a/src/api/theolive/TheoLiveSource.ts b/src/api/theolive/TheoLiveSource.ts index 87f77442c..479dc0a4b 100644 --- a/src/api/theolive/TheoLiveSource.ts +++ b/src/api/theolive/TheoLiveSource.ts @@ -1,4 +1,4 @@ -import { SourceIntegrationId, TypedSource } from 'react-native-theoplayer'; +import { TypedSource } from 'react-native-theoplayer'; import { WebrtcOptions } from './WebrtcOptions'; /** @@ -9,9 +9,9 @@ import { WebrtcOptions } from './WebrtcOptions'; */ export interface TheoLiveSource extends TypedSource { /** - * @deprecated use {@link TypedSource.type} instead. + * The source URL of the media resource. */ - integration: SourceIntegrationId.THEO_LIVE; + src: string; /** * The content type. diff --git a/src/api/track/TextTrack.ts b/src/api/track/TextTrack.ts index cfe59f936..1ddfe517d 100644 --- a/src/api/track/TextTrack.ts +++ b/src/api/track/TextTrack.ts @@ -149,6 +149,18 @@ export interface TextTrack extends Track { *
- For HLS: the corresponding #EXT-X-MEDIA tag contains the attributes TYPE=SUBTITLES and FORCED=YES (not supported yet) */ readonly forced: boolean; + + /** + * The closed caption service number of the text track. + * + * @platform web,android + * + * @remarks + *
- For CEA-608 caption tracks, this holds the channel number. + *
- For CEA-708 caption tracks, this holds the service number. + *
- Otherwise, this is `undefined`. + */ + readonly captionChannel?: number; } /** diff --git a/src/internal/THEOplayerView.tsx b/src/internal/THEOplayerView.tsx index 7ec47b997..b9a428d0c 100644 --- a/src/internal/THEOplayerView.tsx +++ b/src/internal/THEOplayerView.tsx @@ -39,7 +39,6 @@ import { DefaultTextTrackListEvent, DefaultVolumeChangeEvent, DefaultTimeupdateEvent, - DefaultResizeEvent, DefaultSeekingEvent, DefaultSeekedEvent, DefaultVideoResizeEvent, @@ -420,7 +419,6 @@ export class THEOplayerView extends PureComponent) => { const width = event.nativeEvent.width; const height = event.nativeEvent.height; - this._facade?.dispatchEvent(new DefaultResizeEvent(width, height)); this._facade?.dispatchEvent(new DefaultDimensionChangeEvent(width, height)); }; diff --git a/src/internal/THEOplayerView.web.tsx b/src/internal/THEOplayerView.web.tsx index 00d4dc4d7..de3767aeb 100644 --- a/src/internal/THEOplayerView.web.tsx +++ b/src/internal/THEOplayerView.web.tsx @@ -2,16 +2,18 @@ import React, { useEffect, useRef } from 'react'; import type { THEOplayerViewProps } from 'react-native-theoplayer'; import { ChromelessPlayer } from 'theoplayer'; import { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter'; +import { useIsAttached } from './hooks/useIsAttached'; export function THEOplayerView(props: React.PropsWithChildren) { const { config, children, onPlayerReady, onPlayerDestroy } = props; const player = useRef(null); const adapter = useRef(null); - const container = useRef(null); + const container = useRef(null); + const attachedToDocument = useIsAttached(container); useEffect(() => { - // Create player inside container. - if (container.current) { + // Create player inside container once it is attached to the document. + if (container.current && attachedToDocument) { const ads = { ...config?.ads, googleIma: { @@ -51,7 +53,7 @@ export function THEOplayerView(props: React.PropsWithChildren im return this._theoliveAdapter; } - get theolive(): TheoLiveAPI { - return this._theoliveAdapter; - } - set autoplay(autoplay: boolean) { this._state.autoplay = autoplay; NativePlayerModule.setAutoplay(this._view.nativeHandle, autoplay); diff --git a/src/internal/adapter/THEOplayerWebAdapter.ts b/src/internal/adapter/THEOplayerWebAdapter.ts index eee810e4f..1f4a1642e 100644 --- a/src/internal/adapter/THEOplayerWebAdapter.ts +++ b/src/internal/adapter/THEOplayerWebAdapter.ts @@ -374,10 +374,6 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher return this._theoliveAdapter; } - public get theolive(): TheoLiveAPI { - return this._theoliveAdapter; - } - public get version(): PlayerVersion { return { version: nativeVersion, diff --git a/src/internal/adapter/WebEventForwarder.ts b/src/internal/adapter/WebEventForwarder.ts index dbc9459c1..b6d3c63ac 100644 --- a/src/internal/adapter/WebEventForwarder.ts +++ b/src/internal/adapter/WebEventForwarder.ts @@ -62,7 +62,6 @@ import { DefaultProgressEvent, DefaultRateChangeEvent, DefaultReadyStateChangeEvent, - DefaultResizeEvent, DefaultSeekedEvent, DefaultSeekingEvent, DefaultSegmentNotFoundEvent, @@ -289,7 +288,6 @@ export class WebEventForwarder { }; private readonly onDimensionChange = (event: NativeDimensionChangeEvent) => { - this._facade.dispatchEvent(new DefaultResizeEvent(event.width, event.height)); this._facade.dispatchEvent(new DefaultDimensionChangeEvent(event.width, event.height)); }; diff --git a/src/internal/adapter/event/PlayerEvents.ts b/src/internal/adapter/event/PlayerEvents.ts index 0f3414f5e..abf5852f6 100644 --- a/src/internal/adapter/event/PlayerEvents.ts +++ b/src/internal/adapter/event/PlayerEvents.ts @@ -30,7 +30,6 @@ import { Quality, RateChangeEvent, ReadyStateChangeEvent, - ResizeEvent, SeekedEvent, SeekingEvent, SegmentNotFoundEvent, @@ -103,18 +102,6 @@ export class DefaultVolumeChangeEvent extends BaseEvent implements ResizeEvent { - constructor( - public width: number, - public height: number, - ) { - super(PlayerEventType.RESIZE); - } -} - export class DefaultDimensionChangeEvent extends BaseEvent implements DimensionChangeEvent { constructor( public width: number, diff --git a/src/internal/adapter/track/TextTrackStyleAdapter.ts b/src/internal/adapter/track/TextTrackStyleAdapter.ts index be106189f..7509a1162 100644 --- a/src/internal/adapter/track/TextTrackStyleAdapter.ts +++ b/src/internal/adapter/track/TextTrackStyleAdapter.ts @@ -77,14 +77,14 @@ export class TextTrackStyleAdapter implements TextTrackStyle { } get fontPath(): string | undefined { - return this._fontPath + return this._fontPath; } set fontPath(path: string) { - this._fontPath = path + this._fontPath = path; NativePlayerModule.setTextTrackStyle(this._view.nativeHandle, { - fontPath: path - }) + fontPath: path, + }); } get fontSize(): string | undefined { diff --git a/src/internal/adapter/web/TrackUtils.ts b/src/internal/adapter/web/TrackUtils.ts index c8c4baca6..bd0ff83e0 100644 --- a/src/internal/adapter/web/TrackUtils.ts +++ b/src/internal/adapter/web/TrackUtils.ts @@ -41,7 +41,7 @@ export function fromNativeTextTrackList(tracks: NativeTextTrackList): TextTrack[ } export function fromNativeTextTrack(track: NativeTextTrack): TextTrack { - const { id, uid, kind, label, language, mode, type, src, forced } = track; + const { id, uid, kind, label, language, mode, type, src, forced, captionChannel } = track; return { id, @@ -53,6 +53,7 @@ export function fromNativeTextTrack(track: NativeTextTrack): TextTrack { type, src, forced, + captionChannel, cues: track.cues ? track.cues.map((cue) => fromNativeCue(cue)) : [], } as TextTrack; } diff --git a/src/internal/hooks/useIsAttached.ts b/src/internal/hooks/useIsAttached.ts new file mode 100644 index 000000000..c73712318 --- /dev/null +++ b/src/internal/hooks/useIsAttached.ts @@ -0,0 +1,44 @@ +/** + * React hook to determine if a referenced HTMLDivElement is currently attached to the document. + * + * This hook checks if the provided ref's current element is attached to the DOM (document.body). + * Returns a boolean indicating the attachment state. + * Once attached, it will stop observing for changes to optimize performance. + * + * @param ref - React ref object pointing to an HTMLDivElement + * @returns boolean - true if the element is attached to the document, false otherwise + */ +import { RefObject, useEffect, useState } from 'react'; + +/** + * @param ref + */ +export const useIsAttached = (ref: RefObject) => { + const [isAttached, setIsAttached] = useState(false); + + useEffect(() => { + if (!ref.current) return; + + const checkAttached = () => { + const connected = ref.current?.isConnected ?? false; + setIsAttached(connected); + return connected; + }; + + if (checkAttached()) return; + + const observer: MutationObserver = new MutationObserver(() => { + const attached = checkAttached(); + // Once attached, stop observing. + if (attached) { + observer.disconnect(); + } + }); + observer.observe(document.body, { + childList: true, + subtree: true, + }); + return () => observer.disconnect(); + }, [ref]); + return isAttached; +};