From 7a2b4014f40758a025fcd6b388448d3559ec6a4a Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:40:10 +0200 Subject: [PATCH 01/17] fix(sample): update dependencies to fix local asset playback (#4121) * fix(sample): align dependencies and fix local asset playback --- examples/basic/ios/Podfile.lock | 10 +- examples/basic/package.json | 10 +- examples/basic/yarn.lock | 856 ++++++++++++-------------------- 3 files changed, 320 insertions(+), 556 deletions(-) diff --git a/examples/basic/ios/Podfile.lock b/examples/basic/ios/Podfile.lock index 7ab84ea57d..fc0fa2ade8 100644 --- a/examples/basic/ios/Podfile.lock +++ b/examples/basic/ios/Podfile.lock @@ -994,7 +994,7 @@ PODS: - React-Mapbuffer (0.74.3): - glog - React-debug - - react-native-video (6.4.3): + - react-native-video (6.4.4): - DoubleConversion - glog - hermes-engine @@ -1008,7 +1008,7 @@ PODS: - React-featureflags - React-graphics - React-ImageManager - - react-native-video/Video (= 6.4.3) + - react-native-video/Video (= 6.4.4) - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1038,7 +1038,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-video/Video (6.4.3): + - react-native-video/Video (6.4.4): - DoubleConversion - glog - hermes-engine @@ -1559,7 +1559,7 @@ SPEC CHECKSUMS: React-jsitracing: 1aa5681c353b41573b03e0e480a5adf5fa1c56d8 React-logger: fa92ba4d3a5d39ac450f59be2a3cec7b099f0304 React-Mapbuffer: 70da5955150a58732e9336a0c7e71cd49e909f25 - react-native-video: 3d5881ee6643a9a87e0e259b742c2d07aee7b27e + react-native-video: f57ea9a2df4675386f57f48494853a54bdba0d9f react-native-video-plugin-sample: d3a93b7ad777cad7fa2c30473de75a2635ce5feb React-nativeconfig: 84806b820491db30175afbf027e99e8415dc63f0 React-NativeModulesApple: 7b79212f8cf496ab554e0b7b09acbd4aa4690260 @@ -1594,4 +1594,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: a73d485df51877001f2b04a5a4379cfa5a3ba8fa -COCOAPODS: 1.13.0 +COCOAPODS: 1.15.2 diff --git a/examples/basic/package.json b/examples/basic/package.json index 86cb65706b..5e0665bcb5 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -14,12 +14,12 @@ }, "dependencies": { "@react-native-picker/picker": "2.7.5", - "expo": "^51.0.17", - "expo-asset": "^10.0.9", - "expo-image": "^1.12.12", + "expo": "^51.0.31", + "expo-asset": "~10.0.10", + "expo-image": "^1.12.15", "react": "18.2.0", - "react-native": "0.74.3", - "react-native-windows": "0.74.1" + "react-native": "0.74.5", + "react-native-windows": "0.74.19" }, "devDependencies": { "@babel/core": "^7.24.0", diff --git a/examples/basic/yarn.lock b/examples/basic/yarn.lock index 6b496084d2..a1cfcd486f 100644 --- a/examples/basic/yarn.lock +++ b/examples/basic/yarn.lock @@ -79,30 +79,30 @@ tslib "^2.2.0" "@azure/core-util@^1.0.0", "@azure/core-util@^1.1.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1" - integrity sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw== + version "1.9.2" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.2.tgz#1dc37dc5b0dae34c578be62cf98905ba7c0cafe7" + integrity sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ== dependencies: "@azure/abort-controller" "^2.0.0" tslib "^2.6.2" "@azure/logger@^1.0.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.2.tgz#3f4b876cefad328dc14aff8b850d63b611e249dc" - integrity sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.4.tgz#223cbf2b424dfa66478ce9a4f575f59c6f379768" + integrity sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ== dependencies: tslib "^2.6.2" "@azure/opentelemetry-instrumentation-azure-sdk@^1.0.0-beta.5": - version "1.0.0-beta.5" - resolved "https://registry.yarnpkg.com/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz#78809e6c005d08450701e5d37f087f6fce2f86eb" - integrity sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA== + version "1.0.0-beta.6" + resolved "https://registry.yarnpkg.com/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.6.tgz#94f46c3ccffa7e05f1776a137327fda27220d240" + integrity sha512-JP6TJ7vDNX6r0gN2+EQBINTNqZ86frl1RAj5STtbLP1ClgIhcdXXb0hvq7CuEOv7InrroHMDoEYG80OQcWChug== dependencies: "@azure/core-tracing" "^1.0.0" "@azure/logger" "^1.0.0" - "@opentelemetry/api" "^1.4.1" - "@opentelemetry/core" "^1.15.2" - "@opentelemetry/instrumentation" "^0.41.2" + "@opentelemetry/api" "^1.9.0" + "@opentelemetry/core" "^1.25.1" + "@opentelemetry/instrumentation" "^0.52.1" tslib "^2.2.0" "@babel/code-frame@7.10.4", "@babel/code-frame@~7.10.4": @@ -1376,28 +1376,28 @@ mv "~2" safe-json-stringify "~1" -"@expo/cli@0.18.21": - version "0.18.21" - resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.18.21.tgz#a44fb04bbac42141bc101b6acb91eb7b237e5722" - integrity sha512-t8sFUGXRM/vafILp98H/MvIgJ5c7OG+d780Zastpzn0zfakaVDvXyw9tXskwAYi9YHJpG8/cfvght1c5fBDBoA== +"@expo/cli@0.18.29": + version "0.18.29" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.18.29.tgz#108682e28ccf3beab34938501d6dfc079683b82c" + integrity sha512-X810C48Ss+67RdZU39YEO1khNYo1RmjouRV+vVe0QhMoTe8R6OA3t+XYEdwaNbJ5p/DJN7szfHfNmX2glpC7xg== dependencies: "@babel/runtime" "^7.20.0" "@expo/code-signing-certificates" "0.0.5" "@expo/config" "~9.0.0-beta.0" - "@expo/config-plugins" "~8.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" "@expo/devcert" "^1.0.0" "@expo/env" "~0.3.0" "@expo/image-utils" "^0.5.0" "@expo/json-file" "^8.3.0" - "@expo/metro-config" "~0.18.6" + "@expo/metro-config" "0.18.11" "@expo/osascript" "^2.0.31" "@expo/package-manager" "^1.5.0" "@expo/plist" "^0.1.0" - "@expo/prebuild-config" "7.0.6" + "@expo/prebuild-config" "7.0.8" "@expo/rudder-sdk-node" "1.1.1" "@expo/spawn-async" "^1.7.2" "@expo/xcpretty" "^4.3.0" - "@react-native/dev-middleware" "0.74.84" + "@react-native/dev-middleware" "0.74.85" "@urql/core" "2.3.6" "@urql/exchange-retry" "0.3.0" accepts "^1.3.8" @@ -1467,7 +1467,28 @@ node-forge "^1.2.1" nullthrows "^1.1.1" -"@expo/config-plugins@8.0.6", "@expo/config-plugins@~8.0.0", "@expo/config-plugins@~8.0.0-beta.0": +"@expo/config-plugins@8.0.8", "@expo/config-plugins@~8.0.8": + version "8.0.8" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.8.tgz#294a71905a498ea02c8b79bea950b5e37ab5d748" + integrity sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw== + dependencies: + "@expo/config-types" "^51.0.0-unreleased" + "@expo/json-file" "~8.3.0" + "@expo/plist" "^0.1.0" + "@expo/sdk-runtime-versions" "^1.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" + getenv "^1.0.0" + glob "7.1.6" + resolve-from "^5.0.0" + semver "^7.5.4" + slash "^3.0.0" + slugify "^1.6.6" + xcode "^3.0.1" + xml2js "0.6.0" + +"@expo/config-plugins@~8.0.0": version "8.0.6" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.6.tgz#ab87eb4d2a6d1b40e95f74ed9ff3d849561f3f88" integrity sha512-Vmn/BSg/hBmliU/Bl+G4sExDoWd4iHXQG7ITUNR5Uar7uLko1A5vdVV+EOEUFA0f8jEZMHG3uZJUoXmr4LPaxA== @@ -1493,13 +1514,13 @@ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-51.0.2.tgz#7385451b180d34d8f2a4eeb5feabe1fe3c5d4f32" integrity sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ== -"@expo/config@9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-9.0.1.tgz#e7b79de5af29d5ab2a98a62c3cda31f03bd75827" - integrity sha512-0tjaXBstTbXmD4z+UMFBkh2SZFwilizSQhW6DlaTMnPG5ezuw93zSFEWAuEC3YzkpVtNQTmYzxAYjxwh6seOGg== +"@expo/config@9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-9.0.3.tgz#4bc2ec654145e6242f4b1964db2962ee0fee1270" + integrity sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg== dependencies: "@babel/code-frame" "~7.10.4" - "@expo/config-plugins" "~8.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" "@expo/config-types" "^51.0.0-unreleased" "@expo/json-file" "^8.3.0" getenv "^1.0.0" @@ -1582,10 +1603,10 @@ json5 "^2.2.2" write-file-atomic "^2.3.0" -"@expo/metro-config@0.18.8", "@expo/metro-config@~0.18.6": - version "0.18.8" - resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.18.8.tgz#2902bfdb864876da3cf5b1822a554bbb011e4a77" - integrity sha512-YGpTlVc1/6EPzPbt0LZt92Bwrpjngulup6uHSTRbwn/heMPfFaVv1Y4VE3GAUkx7/Qwu+dTVIV0Kys4pLOAIiw== +"@expo/metro-config@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.18.11.tgz#22e82d92fb9d94ac760cc8b3bff48e6f32b4f032" + integrity sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.5" @@ -1641,17 +1662,17 @@ base64-js "^1.2.3" xmlbuilder "^14.0.0" -"@expo/prebuild-config@7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.6.tgz#b9c2c36ee564244da8073ce7bea22ebe57743615" - integrity sha512-Hts+iGBaG6OQ+N8IEMMgwQElzJeSTb7iUJ26xADEHkaexsucAK+V52dM8M4ceicvbZR9q8M+ebJEGj0MCNA3dQ== +"@expo/prebuild-config@7.0.8": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz#8af72b19c92f05f1ab6c6c70d31f33159dacac39" + integrity sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg== dependencies: "@expo/config" "~9.0.0-beta.0" - "@expo/config-plugins" "~8.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" "@expo/config-types" "^51.0.0-unreleased" "@expo/image-utils" "^0.5.0" "@expo/json-file" "^8.3.0" - "@react-native/normalize-colors" "0.74.84" + "@react-native/normalize-colors" "0.74.85" debug "^4.3.1" fs-extra "^9.0.0" resolve-from "^5.0.0" @@ -2029,9 +2050,9 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@microsoft/applicationinsights-web-snippet@^1.0.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.2.0.tgz#2c1b3761e008f1e16ae84974b37523d709af5dd8" - integrity sha512-KpJzrC+VYOKSNVOlk0vIxsQ6ZmZOswdNXvkv+nVBsz6tzRI86fKW2qKTCzKcd80f3xOa6dxg6OfEljQPcelQ7g== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.2.1.tgz#c158081f8c40ea9ad94475abac15f67182768882" + integrity sha512-+Cy9zFqdQgdAbMK1dpm7B+3DUnrByai0Tq6XG9v737HJpW6G1EiNNbTuFeXdPWyGaq6FIx9jxm/SUcxA6/Rxxg== "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" @@ -2068,66 +2089,64 @@ dependencies: semver "^7.3.5" -"@opentelemetry/api@^1.4.1": +"@opentelemetry/api-logs@0.52.1": + version "0.52.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz#52906375da4d64c206b0c4cb8ffa209214654ecc" + integrity sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A== + dependencies: + "@opentelemetry/api" "^1.0.0" + +"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.4.1", "@opentelemetry/api@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== -"@opentelemetry/core@1.25.1", "@opentelemetry/core@^1.15.2": - version "1.25.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.25.1.tgz#ff667d939d128adfc7c793edae2f6bca177f829d" - integrity sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ== +"@opentelemetry/core@1.26.0", "@opentelemetry/core@^1.15.2", "@opentelemetry/core@^1.25.1": + version "1.26.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.26.0.tgz#7d84265aaa850ed0ca5813f97d831155be42b328" + integrity sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ== dependencies: - "@opentelemetry/semantic-conventions" "1.25.1" + "@opentelemetry/semantic-conventions" "1.27.0" -"@opentelemetry/instrumentation@^0.41.2": - version "0.41.2" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz#cae11fa64485dcf03dae331f35b315b64bc6189f" - integrity sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw== +"@opentelemetry/instrumentation@^0.52.1": + version "0.52.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz#2e7e46a38bd7afbf03cf688c862b0b43418b7f48" + integrity sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw== dependencies: + "@opentelemetry/api-logs" "0.52.1" "@types/shimmer" "^1.0.2" - import-in-the-middle "1.4.2" + import-in-the-middle "^1.8.1" require-in-the-middle "^7.1.1" - semver "^7.5.1" + semver "^7.5.2" shimmer "^1.2.1" -"@opentelemetry/resources@1.25.1": - version "1.25.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.25.1.tgz#bb9a674af25a1a6c30840b755bc69da2796fefbb" - integrity sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ== +"@opentelemetry/resources@1.26.0": + version "1.26.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.26.0.tgz#da4c7366018bd8add1f3aa9c91c6ac59fd503cef" + integrity sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw== dependencies: - "@opentelemetry/core" "1.25.1" - "@opentelemetry/semantic-conventions" "1.25.1" + "@opentelemetry/core" "1.26.0" + "@opentelemetry/semantic-conventions" "1.27.0" "@opentelemetry/sdk-trace-base@^1.15.2": - version "1.25.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz#cbc1e60af255655d2020aa14cde17b37bd13df37" - integrity sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw== + version "1.26.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz#0c913bc6d2cfafd901de330e4540952269ae579c" + integrity sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw== dependencies: - "@opentelemetry/core" "1.25.1" - "@opentelemetry/resources" "1.25.1" - "@opentelemetry/semantic-conventions" "1.25.1" + "@opentelemetry/core" "1.26.0" + "@opentelemetry/resources" "1.26.0" + "@opentelemetry/semantic-conventions" "1.27.0" -"@opentelemetry/semantic-conventions@1.25.1", "@opentelemetry/semantic-conventions@^1.15.2": - version "1.25.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz#0deecb386197c5e9c2c28f2f89f51fb8ae9f145e" - integrity sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ== +"@opentelemetry/semantic-conventions@1.27.0", "@opentelemetry/semantic-conventions@^1.15.2": + version "1.27.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz#1a857dcc95a5ab30122e04417148211e6f945e6c" + integrity sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg== "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@react-native-community/cli-clean@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.4.tgz#53c07c6f2834a971dc40eab290edcf8ccc5d1e00" - integrity sha512-nS1BJ+2Z+aLmqePxB4AYgJ+C/bgQt02xAgSYtCUv+lneRBGhL2tHRrK8/Iolp0y+yQoUtHHf4txYi90zGXLVfw== - dependencies: - "@react-native-community/cli-tools" "13.6.4" - chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - "@react-native-community/cli-clean@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz#b6754f39c2b877c9d730feb848945150e1d52209" @@ -2138,18 +2157,6 @@ execa "^5.0.0" fast-glob "^3.3.2" -"@react-native-community/cli-config@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.4.tgz#3004c7bca55cb384b3a99c38c1a48dad24533237" - integrity sha512-GGK415WoTx1R9FXtfb/cTnan9JIWwSm+a5UCuFd6+suzS0oIt1Md1vCzjNh6W1CK3b43rZC2e+3ZU7Ljd7YtyQ== - dependencies: - "@react-native-community/cli-tools" "13.6.4" - chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" - fast-glob "^3.3.2" - joi "^17.2.1" - "@react-native-community/cli-config@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.9.tgz#d609a64d40a173c89bd7d24e31807bb7dcba69f9" @@ -2162,13 +2169,6 @@ fast-glob "^3.3.2" joi "^17.2.1" -"@react-native-community/cli-debugger-ui@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.4.tgz#3881b9cfe14e66b3ee827a84f19ca9d0283fd764" - integrity sha512-9Gs31s6tA1kuEo69ay9qLgM3x2gsN/RI994DCUKnFSW+qSusQJyyrmfllR2mGU3Wl1W09/nYpIg87W9JPf5y4A== - dependencies: - serve-static "^1.13.1" - "@react-native-community/cli-debugger-ui@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz#bc5727c51964206a00d417e5148b46331a81d5a5" @@ -2176,29 +2176,6 @@ dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.4.tgz#07e5c2f163807e61ce0ba12901903e591177e3d3" - integrity sha512-lWOXCISH/cHtLvO0cWTr+IPSzA54FewVOw7MoCMEvWusH+1n7c3hXTAve78mLozGQ7iuUufkHFWwKf3dzOkflQ== - dependencies: - "@react-native-community/cli-config" "13.6.4" - "@react-native-community/cli-platform-android" "13.6.4" - "@react-native-community/cli-platform-apple" "13.6.4" - "@react-native-community/cli-platform-ios" "13.6.4" - "@react-native-community/cli-tools" "13.6.4" - chalk "^4.1.2" - command-exists "^1.2.8" - deepmerge "^4.3.0" - envinfo "^7.10.0" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - node-stream-zip "^1.9.1" - ora "^5.4.1" - semver "^7.5.2" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - yaml "^2.2.1" - "@react-native-community/cli-doctor@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz#f1d4eeff427ddc8a9d19851042621c10939c35cb" @@ -2222,16 +2199,6 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-hermes@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.4.tgz#6d3e9b5c251461e9bb35b04110544db8a4f5968f" - integrity sha512-VIAufA/2wTccbMYBT9o+mQs9baOEpTxCiIdWeVdkPWKzIwtKsLpDZJlUqj4r4rI66mwjFyQ60PhwSzEJ2ApFeQ== - dependencies: - "@react-native-community/cli-platform-android" "13.6.4" - "@react-native-community/cli-tools" "13.6.4" - chalk "^4.1.2" - hermes-profile-transformer "^0.0.6" - "@react-native-community/cli-hermes@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz#88c8dfe936a0d4272efc54429eda9ccc3fca3ad8" @@ -2242,18 +2209,6 @@ chalk "^4.1.2" hermes-profile-transformer "^0.0.6" -"@react-native-community/cli-platform-android@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.4.tgz#78ab4c840f4f1f5252ad2fcc5a55f7681ec458cb" - integrity sha512-WhknYwIobKKCqaGCN3BzZEQHTbaZTDiGvcXzevvN867ldfaGdtbH0DVqNunbPoV1RNzeV9qKoQHFdWBkg83tpg== - dependencies: - "@react-native-community/cli-tools" "13.6.4" - chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - fast-xml-parser "^4.2.4" - logkitty "^0.7.1" - "@react-native-community/cli-platform-android@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz#b175b9b11334fc90da3f395432678bd53c30fae4" @@ -2266,18 +2221,6 @@ fast-xml-parser "^4.2.4" logkitty "^0.7.1" -"@react-native-community/cli-platform-apple@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.4.tgz#4912eaf519800a957745192718822b94655c8119" - integrity sha512-TLBiotdIz0veLbmvNQIdUv9fkBx7m34ANGYqr5nH7TFxdmey+Z+omoBqG/HGpvyR7d0AY+kZzzV4k+HkYHM/aQ== - dependencies: - "@react-native-community/cli-tools" "13.6.4" - chalk "^4.1.2" - execa "^5.0.0" - fast-glob "^3.3.2" - fast-xml-parser "^4.0.12" - ora "^5.4.1" - "@react-native-community/cli-platform-apple@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz#02fb5dc47d62acd85f4d7a852e93216927a772fa" @@ -2290,13 +2233,6 @@ fast-xml-parser "^4.0.12" ora "^5.4.1" -"@react-native-community/cli-platform-ios@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.4.tgz#96ec915c6df23b2b7b7e0d8cb3db7368e448d620" - integrity sha512-8Dlva8RY+MY5nhWAj6V7voG3+JOEzDTJmD0FHqL+4p0srvr9v7IEVcxfw5lKBDIUNd0OMAHNevGA+cyz1J60jg== - dependencies: - "@react-native-community/cli-platform-apple" "13.6.4" - "@react-native-community/cli-platform-ios@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz#f37ceab41c2302e8f0d4bcbd3bf58b3353db4306" @@ -2304,21 +2240,6 @@ dependencies: "@react-native-community/cli-platform-apple" "13.6.9" -"@react-native-community/cli-server-api@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.4.tgz#6bcec7ae387fc3aeb3e78f62561a91962e6fadf7" - integrity sha512-D2qSuYCFwrrUJUM0SDc9l3lEhU02yjf+9Peri/xhspzAhALnsf6Z/H7BCjddMV42g9/eY33LqiGyN5chr83a+g== - dependencies: - "@react-native-community/cli-debugger-ui" "13.6.4" - "@react-native-community/cli-tools" "13.6.4" - compression "^1.7.1" - connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" - serve-static "^1.13.1" - ws "^7.5.1" - "@react-native-community/cli-server-api@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz#269e666bc26e9d0b2f42c7f6099559b5f9259e9d" @@ -2334,23 +2255,6 @@ serve-static "^1.13.1" ws "^6.2.2" -"@react-native-community/cli-tools@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.4.tgz#ab396604b6dcf215790807fe89656e779b11f0ec" - integrity sha512-N4oHLLbeTdg8opqJozjClmuTfazo1Mt+oxU7mr7m45VCsFgBqTF70Uwad289TM/3l44PP679NRMAHVYqpIRYtQ== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - execa "^5.0.0" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - sudo-prompt "^9.0.0" - "@react-native-community/cli-tools@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz#2baee279358ba1a863e737b2fa9f45659ad91929" @@ -2368,13 +2272,6 @@ shell-quote "^1.7.3" sudo-prompt "^9.0.0" -"@react-native-community/cli-types@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.4.tgz#e499a3691ee597aa4b93196ff182a4782fae7afb" - integrity sha512-NxGCNs4eYtVC8x0wj0jJ/MZLRy8C+B9l8lY8kShuAcvWTv5JXRqmXjg8uK1aA+xikPh0maq4cc/zLw1roroY/A== - dependencies: - joi "^17.2.1" - "@react-native-community/cli-types@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.9.tgz#08bfb796eacf0daeb31e2de516e81e78a36a1a55" @@ -2382,29 +2279,6 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@13.6.4": - version "13.6.4" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.4.tgz#dabe2749470a34533e18aada51d97c94b3568307" - integrity sha512-V7rt2N5JY7M4dJFgdNfR164r3hZdR/Z7V54dv85TFQHRbdwF4QrkG+GeagAU54qrkK/OU8OH3AF2+mKuiNWpGA== - dependencies: - "@react-native-community/cli-clean" "13.6.4" - "@react-native-community/cli-config" "13.6.4" - "@react-native-community/cli-debugger-ui" "13.6.4" - "@react-native-community/cli-doctor" "13.6.4" - "@react-native-community/cli-hermes" "13.6.4" - "@react-native-community/cli-server-api" "13.6.4" - "@react-native-community/cli-tools" "13.6.4" - "@react-native-community/cli-types" "13.6.4" - chalk "^4.1.2" - commander "^9.4.1" - deepmerge "^4.3.0" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.2" - semver "^7.5.2" - "@react-native-community/cli@13.6.9": version "13.6.9" resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.9.tgz#ba6360b94e0aba9c4001bda256cf7e57e2ecb02c" @@ -2433,15 +2307,15 @@ resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-2.7.5.tgz#e43fcd65f260fa4f23e974ccb9fb7c1f7a9ff94a" integrity sha512-vhMaOLkXSUb+YKVbukMJToU4g+89VMhBG2U9+cLYF8X8HtFRidrHjohGqT8/OyesDuKIXeLIP+UFYI9Q9CRA9Q== -"@react-native-windows/cli@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.74.0.tgz#da85c0f8d7f96a761080fae27323fe257560e22d" - integrity sha512-grOp6b/Pfa4T+n+oWmoo18BXI97CKZPbRKTlCg2Ne5Hsq2rj4Ewg8tnRFKFOMthy5dZcPWLqsphkT0J/sQBHXw== +"@react-native-windows/cli@0.74.3": + version "0.74.3" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.74.3.tgz#ef1abf6f709cf5a0a5d5e45bbe6937b8d7af8c0e" + integrity sha512-1HkQkWYbY1CzVc9G/MP68xWNLutBNRPalx1KtImyACggUkWXadWK46Wi1IbyDtSMlY5cIpCTHL03cdHHsXAkaQ== dependencies: - "@react-native-windows/codegen" "0.74.0" - "@react-native-windows/fs" "0.74.0" - "@react-native-windows/package-utils" "0.74.0" - "@react-native-windows/telemetry" "0.74.0" + "@react-native-windows/codegen" "0.74.2" + "@react-native-windows/fs" "0.74.1" + "@react-native-windows/package-utils" "0.74.1" + "@react-native-windows/telemetry" "0.74.1" "@xmldom/xmldom" "^0.7.7" chalk "^4.1.0" cli-spinners "^2.2.0" @@ -2460,50 +2334,50 @@ xml-parser "^1.2.1" xpath "^0.0.27" -"@react-native-windows/codegen@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.74.0.tgz#9024ba6e871088e42356f94eb126697e6268487b" - integrity sha512-jSN5PZQKZIuaukoUJU9LOyHs2Y/KmG5xsLtSGRUcjG8wTrzP+xXxj3115hHdk9vreL80o+pup5o1UNfyLfvGIA== +"@react-native-windows/codegen@0.74.2": + version "0.74.2" + resolved "https://registry.yarnpkg.com/@react-native-windows/codegen/-/codegen-0.74.2.tgz#04053553067d8affdce04a449426672bcec58c47" + integrity sha512-KJ2wOeF+QFXx8d1T4sph0tDLCCMZdPvkNz1pRzMPmnvbTksx9krulCY3ZwxK0ZbDfn03VOfpSeMI4Ru47RJWuA== dependencies: - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" chalk "^4.1.0" - globby "^11.0.4" + globby "^11.1.0" mustache "^4.0.1" source-map-support "^0.5.19" yargs "^16.2.0" -"@react-native-windows/find-repo-root@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.74.0.tgz#687819c76825d3f7c58401a9d96c2c748774506f" - integrity sha512-6dxkKX+mtT+yXuTDUf7A+ZQnyX57WlYk3fDNeNTpI66xBR4QuRwPdzTNamZxvX6JEMSe4lm4PqXWlfAKYzPENw== +"@react-native-windows/find-repo-root@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/find-repo-root/-/find-repo-root-0.74.1.tgz#bf2f10545c29ffcdb76b9179fce346f84e15c5ab" + integrity sha512-k+Hk16/NmPhxsQYGCRtAfcQqCDCJvAxC74FLzFOO6+c/VDM0U05kEcJsJzI1dh/0kZh+YSZQo3w1RrA1z1S2gw== dependencies: - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" find-up "^4.1.0" -"@react-native-windows/fs@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.74.0.tgz#bbef312e6c9541292a69e607c1e5fbc47e2a665c" - integrity sha512-YK8CkNHSwskU3PPCPTw1DPen3/QXS7qP7rAp+FNK4LfyOgiO1V9TiIyz3DcvqOsD+iwriXoEl/3Bvo/8HmlTbQ== +"@react-native-windows/fs@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/fs/-/fs-0.74.1.tgz#2c6ade1f937adc6056b1a6b052b7b85acb725a14" + integrity sha512-Qepr2KyMvCKugOwIXKXtgMqww5P3yI5HTtxIUWytBCoIPEk1lJdpx/sFjTGmir0QXaLlZxXbdrxpLLnN7eq3Tg== dependencies: graceful-fs "^4.2.8" -"@react-native-windows/package-utils@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.74.0.tgz#bdcd18f993d899a6f9914365863bde7ee4eee509" - integrity sha512-b7c2/DycLM3MK7K6Y4XVuKFBTLvyg0DSP7++f/yZsBWyCysFycAS5gCrlVbXk6Kez3CIEspSS7op+GJMduMp8g== +"@react-native-windows/package-utils@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/package-utils/-/package-utils-0.74.1.tgz#18e49bb5b2ed967f279605223eae65a3ea55112f" + integrity sha512-nzKo1H991npbRx2EJT0wkniGkngEw7ND5+oz6jhbNFQ3UCKIUBCLc2bPBBX1Z5jp40R+qoVbgnQP2fuAN5y9tA== dependencies: - "@react-native-windows/find-repo-root" "0.74.0" - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/find-repo-root" "0.74.1" + "@react-native-windows/fs" "0.74.1" get-monorepo-packages "^1.2.0" lodash "^4.17.15" -"@react-native-windows/telemetry@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.74.0.tgz#e050312998d6c64f50f368bcb3299e9e3138fd10" - integrity sha512-80vMPWXLJpa3v+vAafXjCQM0GFE3Iq8breRkrwzmbANAfCEXoJdOI0Aju0sOqDyiE68OUekjU9lwWbIyFEQGJQ== +"@react-native-windows/telemetry@0.74.1": + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.74.1.tgz#ecc53e608f64f9e976952a92216e7b2328437523" + integrity sha512-9xdXJ77AQ4f5PXEHBCXd7N1HyXX22moxbTZHMShb4JPVellSWCLNPlqxUuXTDEjjn6rlIsS2ToiT0owQ1nZszA== dependencies: "@azure/core-auth" "1.5.0" - "@react-native-windows/fs" "0.74.0" + "@react-native-windows/fs" "0.74.1" "@xmldom/xmldom" "^0.7.7" applicationinsights "2.9.1" ci-info "^3.2.0" @@ -2512,35 +2386,16 @@ os-locale "^5.0.0" xpath "^0.0.27" -"@react-native/assets-registry@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.81.tgz#76b17f8f79b366ec4f18a0f4e99b7cd466aa5aa7" - integrity sha512-ms+D6pJ6l30epm53pwnAislW79LEUHJxWfe1Cu0LWyTTBlg1OFoqXfB3eIbpe4WyH3nrlkQAh0yyk4huT2mCvw== - -"@react-native/assets-registry@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.85.tgz#ae903c0c25f4d6a751d53d63245d5612c81edd98" - integrity sha512-59YmIQxfGDw4aP9S/nAM+sjSFdW8fUP6fsqczCcXgL2YVEjyER9XCaUT0J1K+PdHep8pi05KUgIKUds8P3jbmA== +"@react-native/assets-registry@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.87.tgz#7dda64e48db14597e19e15f679e31abbb1c1fb4d" + integrity sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg== "@react-native/assets@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== -"@react-native/babel-plugin-codegen@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.81.tgz#80484fb9029038694a92193ae2653529e44aab64" - integrity sha512-Bj6g5/xkLMBAdC6665TbD3uCKCQSmLQpGv3gyqya/ydZpv3dDmDXfkGmO4fqTwEMunzu09Sk55st2ipmuXAaAg== - dependencies: - "@react-native/codegen" "0.74.81" - -"@react-native/babel-plugin-codegen@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz#a3a72c188d875601704a421e395f6909fdec40f3" - integrity sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw== - dependencies: - "@react-native/codegen" "0.74.84" - "@react-native/babel-plugin-codegen@0.74.85": version "0.74.85" resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz#067224bf5099ee2679babd700c7115822a747004" @@ -2548,59 +2403,17 @@ dependencies: "@react-native/codegen" "0.74.85" -"@react-native/babel-preset@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.81.tgz#80d0b96eef35d671f97eaf223c4d770170d7f23f" - integrity sha512-H80B3Y3lBBVC4x9tceTEQq/04lx01gW6ajWCcVbd7sHvGEAxfMFEZUmVZr0451Cafn02wVnDJ8psto1F+0w5lw== +"@react-native/babel-plugin-codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz#44457f4de69911f37a6ac308a7783203a757574a" + integrity sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw== dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.81" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.14.0" + "@react-native/codegen" "0.74.87" -"@react-native/babel-preset@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.84.tgz#703ebfc810d82c9f51f033352abd5f9fa70d492b" - integrity sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg== +"@react-native/babel-preset@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.85.tgz#3ce6ca77a318dec226fd9e3fff9c2ef7b0aa66e3" + integrity sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w== dependencies: "@babel/core" "^7.20.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0" @@ -2642,14 +2455,14 @@ "@babel/plugin-transform-typescript" "^7.5.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.84" + "@react-native/babel-plugin-codegen" "0.74.85" babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/babel-preset@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.85.tgz#3ce6ca77a318dec226fd9e3fff9c2ef7b0aa66e3" - integrity sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w== +"@react-native/babel-preset@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.87.tgz#3d74517d2ea8898f83b5106027033607d5bda50d" + integrity sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg== dependencies: "@babel/core" "^7.20.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0" @@ -2691,27 +2504,14 @@ "@babel/plugin-transform-typescript" "^7.5.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.85" + "@react-native/babel-plugin-codegen" "0.74.87" babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.81.tgz#1025ffd41f2b4710fd700c9e8e85210b9651a7c4" - integrity sha512-hhXo4ccv2lYWaJrZDsdbRTZ5SzSOdyZ0MY6YXwf3xEFLuSunbUMu17Rz5LXemKXlpVx4KEgJ/TDc2pPVaRPZgA== - dependencies: - "@babel/parser" "^7.20.0" - glob "^7.1.1" - hermes-parser "0.19.1" - invariant "^2.2.4" - jscodeshift "^0.14.0" - mkdirp "^0.5.1" - nullthrows "^1.1.1" - -"@react-native/codegen@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.84.tgz#d3425a510b7da558ef5088d9b0aa5e0b1c05c783" - integrity sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ== +"@react-native/codegen@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.85.tgz#568464071c0b9be741da1a1ab43b1df88180ca5d" + integrity sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q== dependencies: "@babel/parser" "^7.20.0" glob "^7.1.1" @@ -2721,10 +2521,10 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/codegen@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.85.tgz#568464071c0b9be741da1a1ab43b1df88180ca5d" - integrity sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q== +"@react-native/codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.87.tgz#47f07a627d0294c8270a03aee098991ed91f8ae9" + integrity sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg== dependencies: "@babel/parser" "^7.20.0" glob "^7.1.1" @@ -2734,33 +2534,15 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.81.tgz#4177207374942c52a86ad52c8c915f46729305ab" - integrity sha512-ezPOwPxbDgrBZLJJMcXryXJXjv3VWt+Mt4jRZiEtvy6pAoi2owSH0b178T5cEZaWsxQN0BbyJ7F/xJsNiF4z0Q== - dependencies: - "@react-native-community/cli-server-api" "13.6.4" - "@react-native-community/cli-tools" "13.6.4" - "@react-native/dev-middleware" "0.74.81" - "@react-native/metro-babel-transformer" "0.74.81" - chalk "^4.0.0" - execa "^5.1.1" - metro "^0.80.3" - metro-config "^0.80.3" - metro-core "^0.80.3" - node-fetch "^2.2.0" - querystring "^0.2.1" - readline "^1.3.0" - -"@react-native/community-cli-plugin@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.85.tgz#5bf95599166fd2b8bf10612250006e282053f6c4" - integrity sha512-ODzND33eA2owAY3g9jgCdqB+BjAh8qJ7dvmSotXgrgDYr3MJMpd8gvHTIPe2fg4Kab+wk8uipRhrE0i0RYMwtQ== +"@react-native/community-cli-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz#4d9798d51381912f3771acded9b6b2804987e952" + integrity sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ== dependencies: "@react-native-community/cli-server-api" "13.6.9" "@react-native-community/cli-tools" "13.6.9" - "@react-native/dev-middleware" "0.74.85" - "@react-native/metro-babel-transformer" "0.74.85" + "@react-native/dev-middleware" "0.74.87" + "@react-native/metro-babel-transformer" "0.74.87" chalk "^4.0.0" execa "^5.1.1" metro "^0.80.3" @@ -2770,47 +2552,23 @@ querystring "^0.2.1" readline "^1.3.0" -"@react-native/debugger-frontend@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.81.tgz#17cefe2b3ff485071bd30d819995867fd145da27" - integrity sha512-HCYF1/88AfixG75558HkNh9wcvGweRaSZGBA71KoZj03umXM8XJy0/ZpacGOml2Fwiqpil72gi6uU+rypcc/vw== - -"@react-native/debugger-frontend@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz#0bde122a988916b6a50f05a7c3ab1c5db029b149" - integrity sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A== - "@react-native/debugger-frontend@0.74.85": version "0.74.85" resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz#a7af94a7b81cb59f241fd1771d1b083445329700" integrity sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ== -"@react-native/dev-middleware@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.81.tgz#120ab62982a48cba90c7724d099ddaa50184c200" - integrity sha512-x2IpvUJN1LJE0WmPsSfQIbQaa9xwH+2VDFOUrzuO9cbQap8rNfZpcvVNbrZgrlKbgS4LXbbsj6VSL8b6SnMKMA== - dependencies: - "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.81" - "@rnx-kit/chromium-edge-launcher" "^1.0.0" - chrome-launcher "^0.15.2" - connect "^3.6.5" - debug "^2.2.0" - node-fetch "^2.2.0" - nullthrows "^1.1.1" - open "^7.0.3" - selfsigned "^2.4.1" - serve-static "^1.13.1" - temp-dir "^2.0.0" - ws "^6.2.2" +"@react-native/debugger-frontend@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz#0bb4f4f54365d04fc975349d5f635cb575f6a5d8" + integrity sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ== -"@react-native/dev-middleware@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" - integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== +"@react-native/dev-middleware@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz#eca35aceb882b1111385f7c20f1aad7a33a2734e" + integrity sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.84" + "@react-native/debugger-frontend" "0.74.85" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -2823,13 +2581,13 @@ temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/dev-middleware@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz#eca35aceb882b1111385f7c20f1aad7a33a2734e" - integrity sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w== +"@react-native/dev-middleware@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz#254807b579a3015ced659a14c374dbf029a9c04e" + integrity sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.85" + "@react-native/debugger-frontend" "0.74.87" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -2866,35 +2624,20 @@ resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.85.tgz#9e028ccf97ad6d3d661d796eb614951343be5a1f" integrity sha512-FtyfgL8EOTddxm+DyjfsInqMtjmU0PWQIRdyET/uob8i6sCxS+HmBzhbtEVZUKwld2kNG1JGgdNLndcEejC81Q== -"@react-native/gradle-plugin@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.81.tgz#aac01999b1005bba3213f504deee7efaadb62c1e" - integrity sha512-7YQ4TLnqfe2kplWWzBWO6k0rPSrWEbuEiRXSJNZQCtCk+t2YX985G62p/9jWm3sGLN4UTcpDXaFNTTPBvlycoQ== - -"@react-native/gradle-plugin@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.85.tgz#7c7d16655a4c15da87402ae3f7d6566466aea723" - integrity sha512-1VQSLukJzaVMn1MYcs8Weo1nUW8xCas2XU1KuoV7OJPk6xPnEBFJmapmEGP5mWeEy7kcTXJmddEgy1wwW0tcig== - -"@react-native/js-polyfills@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.81.tgz#64780497be4ecbff1b27076294e3ebd7df1ba485" - integrity sha512-o4MiR+/kkHoeoQ/zPwt81LnTm6pqdg0wOhU7S7vIZUqzJ7YUpnpaAvF+/z7HzUOPudnavoCN0wvcZPe/AMEyCA== +"@react-native/gradle-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz#a66c01fda7a938a116dc27447f0ccce285796b2a" + integrity sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A== "@react-native/js-polyfills@0.74.85": version "0.74.85" resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.85.tgz#1abfeeaec5ff24b6a1b3e2296e760359fce47739" integrity sha512-gp4Rg9le3lVZeW7Cie6qLfekvRKZuhJ3LKgi1SFB4N154z1wIclypAJXVXgWBsy8JKJfTwRI+sffC4qZDlvzrg== -"@react-native/metro-babel-transformer@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.81.tgz#f724eab91e6de82f8d098e6de57f25bb7501d2d6" - integrity sha512-PVcMjj23poAK6Uemflz4MIJdEpONpjqF7JASNqqQkY6wfDdaIiZSNk8EBCWKb0t7nKqhMvtTq11DMzYJ0JFITg== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.74.81" - hermes-parser "0.19.1" - nullthrows "^1.1.1" +"@react-native/js-polyfills@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz#d28090a4dae417a2e9ad14e065fcf8cf52cc482c" + integrity sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw== "@react-native/metro-babel-transformer@0.74.85": version "0.74.85" @@ -2906,6 +2649,16 @@ hermes-parser "0.19.1" nullthrows "^1.1.1" +"@react-native/metro-babel-transformer@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz#f60958f5e7eb39008a2c01dc5248ab60240bdc01" + integrity sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A== + dependencies: + "@babel/core" "^7.20.0" + "@react-native/babel-preset" "0.74.87" + hermes-parser "0.19.1" + nullthrows "^1.1.1" + "@react-native/metro-config@0.74.85": version "0.74.85" resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.85.tgz#41d14320dc78f62c03eb32cf3091f78bb619012a" @@ -2916,38 +2669,25 @@ metro-config "^0.80.3" metro-runtime "^0.80.3" -"@react-native/normalize-colors@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.81.tgz#0b7c440b6e126f79036cbe74a88791aba72b9fcf" - integrity sha512-g3YvkLO7UsSWiDfYAU+gLhRHtEpUyz732lZB+N8IlLXc5MnfXHC8GKneDGY3Mh52I3gBrs20o37D5viQX9E1CA== - -"@react-native/normalize-colors@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045" - integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A== - "@react-native/normalize-colors@0.74.85": version "0.74.85" resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz#62bcb9ab1b10b822ca0278fdfdf23d3b18e125da" integrity sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw== +"@react-native/normalize-colors@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz#a814169d0ce4ce13ffebcda0a3a5a3f780ccd772" + integrity sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA== + "@react-native/typescript-config@0.74.85": version "0.74.85" resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.85.tgz#42f9e73c6801cd86baa3023838a1a9e0b9c257b0" integrity sha512-FiMIWSRPCEW6yobrzAL2GR4a5PMyRpJEUsKkN7h5J2dpM/f33FLZdDon/ljIK2iPB4XOt6m1opUxep9ZqjToDg== -"@react-native/virtualized-lists@0.74.81": - version "0.74.81" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.81.tgz#8e43d4c72ec561754491eae731f40877f03d05fb" - integrity sha512-5jF9S10Ug2Wl+L/0+O8WmbC726sMMX8jk/1JrvDDK+0DRLMobfjLc1L26fONlVBF7lE5ctqvKZ9TlKdhPTNOZg== - dependencies: - invariant "^2.2.4" - nullthrows "^1.1.1" - -"@react-native/virtualized-lists@0.74.85": - version "0.74.85" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.85.tgz#a6178c7168953807b3b610c9f8d208a6f758407d" - integrity sha512-jx2Zw0qlZteoQ+0KxRc7s4drsljLBEP534FaNZ950e9+CN9nVkLsV6rigcTjDR8wjKMSBWhKf0C0C3egYz7Ehg== +"@react-native/virtualized-lists@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz#31bc44d62617df7d893df22c4c57094f576677a0" + integrity sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" @@ -3140,9 +2880,9 @@ integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/shimmer@^1.0.2": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.0.5.tgz#491d8984d4510e550bfeb02d518791d7f59d2b88" - integrity sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded" + integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -3358,10 +3098,10 @@ accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -3792,10 +3532,10 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-expo@~11.0.11: - version "11.0.11" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-11.0.11.tgz#bf06b8ffd16e1904a1a64ecf08ef965b41c85fcb" - integrity sha512-5AM8FE6mH4IKda08brCzZs9uJU+1K2L/F+7dxWZCprxIlpvNOexqb9TeO/l8m8z1511jmuiAfML6at+46ls+tg== +babel-preset-expo@~11.0.14: + version "11.0.14" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-11.0.14.tgz#ca0884e82d89e49cd216ad3497e3d7ad93657d51" + integrity sha512-4BVYR0Sc2sSNxYTiE/OLSnPiOp+weFNy8eV+hX3aD6YAIbBnw+VubKRWqJV/sOJauzOLz0SgYAYyFciYMqizRA== dependencies: "@babel/plugin-proposal-decorators" "^7.12.9" "@babel/plugin-transform-export-namespace-from" "^7.22.11" @@ -3803,7 +3543,7 @@ babel-preset-expo@~11.0.11: "@babel/plugin-transform-parameters" "^7.22.15" "@babel/preset-react" "^7.22.15" "@babel/preset-typescript" "^7.23.0" - "@react-native/babel-preset" "0.74.84" + "@react-native/babel-preset" "0.74.87" babel-plugin-react-compiler "^0.0.0-experimental-592953e-20240517" babel-plugin-react-native-web "~0.19.10" react-refresh "^0.14.2" @@ -4075,11 +3815,16 @@ ci-info@^3.2.0, ci-info@^3.3.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -cjs-module-lexer@^1.0.0, cjs-module-lexer@^1.2.2: +cjs-module-lexer@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== +cjs-module-lexer@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz#677de7ed7efff67cc40c9bf1897fea79d41b5215" + integrity sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g== + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -4428,6 +4173,13 @@ debug@^3.1.0: dependencies: ms "^2.1.1" +debug@^4.3.5: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -5082,7 +4834,7 @@ expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -expo-asset@^10.0.9, expo-asset@~10.0.10: +expo-asset@~10.0.10: version "10.0.10" resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-10.0.10.tgz#9e6e02c1a6ec3d19b50d5e615e4dd8e5cc30e857" integrity sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A== @@ -5104,59 +4856,61 @@ expo-file-system@~17.0.1: resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-17.0.1.tgz#b9f8af8c1c06ec71d96fd7a0d2567fa9e1c88f15" integrity sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw== -expo-font@~12.0.7: - version "12.0.7" - resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-12.0.7.tgz#4e81a90c72262f64d8a18ecc2f7a0da4446048bb" - integrity sha512-rbSdpjtT/A3M+u9xchR9tdD+5VGSxptUis7ngX5zfAVp3O5atOcPNSA82Jeo15HkrQE+w/upfFBOvi56lsGdsQ== +expo-font@~12.0.9: + version "12.0.9" + resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-12.0.9.tgz#096860a6b8b5dd54152262eafd318593ec2db48c" + integrity sha512-seTCyf0tbgkAnp3ZI9ZfK9QVtURQUgFnuj+GuJ5TSnN0XsOtVe1s2RxTvmMgkfuvfkzcjJ69gyRpsZS1cC8hjw== dependencies: fontfaceobserver "^2.1.0" -expo-image@^1.12.12: - version "1.12.12" - resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-1.12.12.tgz#b6422a07da0f6dddcea154d2857f617086a527cc" - integrity sha512-zZutUhKYqcqTH12o87pGCVLsuQeRK2vaNwxa8beznbDnmWevm3dmbOTCxaOhGgjyDxwcdwDa483Q4IKCXL6tBw== +expo-image@^1.12.15: + version "1.12.15" + resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-1.12.15.tgz#86c3d84500d769a5afadca78b2382a0552d29180" + integrity sha512-rjvnNSaFnrmlugDESTaYJhgdqRLn+M5vu0lD5NGNd2LkxGG5HrRV3gSzeyQQ68XRhrDN8eJvkcKujPKJUTMraw== expo-keep-awake@~13.0.2: version "13.0.2" resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz#5ef31311a339671eec9921b934fdd90ab9652b0e" integrity sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw== -expo-modules-autolinking@1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz#4a867f727d9dfde07de8dde14b333a3cbf82ce3c" - integrity sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw== +expo-modules-autolinking@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.11.2.tgz#98245eb66f157bbfebebd2d576256ea7c683c605" + integrity sha512-fdcaNO8ucHA3yLNY52ZUENBcAG7KEx8QyMmnVNavO1JVBGRMZG8JyVcbrhYQDtVtpxkbai5YzwvLutINvbDZDQ== dependencies: chalk "^4.1.0" commander "^7.2.0" fast-glob "^3.2.5" find-up "^5.0.0" fs-extra "^9.1.0" + require-from-string "^2.0.2" + resolve-from "^5.0.0" -expo-modules-core@1.12.18: - version "1.12.18" - resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.12.18.tgz#fd086c3177b42df979db912f8a2389494ef98483" - integrity sha512-YhIOJsMNjPvP0tmTbC1MRlxl5q7l21uQQDr1rlXEWHNmI2AEMW0gfr2wXrlB2Tz/oOIx8YqREsj3i0VsYXEaCA== +expo-modules-core@1.12.23: + version "1.12.23" + resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.12.23.tgz#ea1c0c876aa52db2cb9d25cb59404c334f92446f" + integrity sha512-NYp/rWhKW6zlqNdC8/r+FckzlAGWX0IJEjOxwYHuYeRUn/vnKksb43G4E3jcaQEZgmWlKxK4LpxL3gr7m0RJFA== dependencies: invariant "^2.2.4" -expo@^51.0.17: - version "51.0.17" - resolved "https://registry.yarnpkg.com/expo/-/expo-51.0.17.tgz#aa5217a38edd9fd0b28b598daf3661acd66537f2" - integrity sha512-VqLrdVMLdjCUhNuWWGdexqkiscnudY7OACafBrfqIFOejAeKceEaBU5YQIlNlOsKuB7PBMqDkhdZ+dG93Ul4ig== +expo@^51.0.31: + version "51.0.31" + resolved "https://registry.yarnpkg.com/expo/-/expo-51.0.31.tgz#edd623e718705d88681406e72869076dfeb485ff" + integrity sha512-YiUNcxzSkQ0jlKW+e8F81KnZfAhCugEZI9VYmuIsFONHivtiYIADHdcFvUWnexUEdgPQDkgWw85XBnIbzIZ39Q== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.18.21" - "@expo/config" "9.0.1" - "@expo/config-plugins" "8.0.6" - "@expo/metro-config" "0.18.8" + "@expo/cli" "0.18.29" + "@expo/config" "9.0.3" + "@expo/config-plugins" "8.0.8" + "@expo/metro-config" "0.18.11" "@expo/vector-icons" "^14.0.0" - babel-preset-expo "~11.0.11" + babel-preset-expo "~11.0.14" expo-asset "~10.0.10" expo-file-system "~17.0.1" - expo-font "~12.0.7" + expo-font "~12.0.9" expo-keep-awake "~13.0.2" - expo-modules-autolinking "1.11.1" - expo-modules-core "1.12.18" + expo-modules-autolinking "1.11.2" + expo-modules-core "1.12.23" fbemitter "^3.0.0" whatwg-url-without-unicode "8.0.0-3" @@ -5625,7 +5379,7 @@ globalthis@^1.0.3: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: +globby@^11.0.1, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5843,13 +5597,13 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-in-the-middle@1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz#2a266676e3495e72c04bbaa5ec14756ba168391b" - integrity sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw== +import-in-the-middle@^1.8.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz#a94c4925b8da18256cde3b3b7b38253e6ca5e708" + integrity sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q== dependencies: acorn "^8.8.2" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" cjs-module-lexer "^1.2.2" module-details-from-path "^1.0.3" @@ -8197,25 +7951,25 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-native-windows@0.74.1: - version "0.74.1" - resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.74.1.tgz#86b01160413f5e8d6526349c8c224d8735a341a8" - integrity sha512-/nvfCVqzmCdZ6BD0X4mU5oIB8xFkDliT7ll1jJq9ryqdD/wtxunx7vNqe7Fm+XKHBJdsyA9Wd9MamrOtHqXQng== +react-native-windows@0.74.19: + version "0.74.19" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.74.19.tgz#06dce7b5d0332eb2869b953ba9ac1e121e683996" + integrity sha512-9JmehsvlfkQSSKFhEcyIbQzTQWCF81KM836vScwEbyRYhkCC8BIShOl4wmYcMGDFZVDQ24aV/k8wbVQRXvseYw== dependencies: "@babel/runtime" "^7.0.0" "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "13.6.4" - "@react-native-community/cli-platform-android" "13.6.4" - "@react-native-community/cli-platform-ios" "13.6.4" - "@react-native-windows/cli" "0.74.0" + "@react-native-community/cli" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-windows/cli" "0.74.3" "@react-native/assets" "1.0.0" - "@react-native/assets-registry" "0.74.81" - "@react-native/codegen" "0.74.81" - "@react-native/community-cli-plugin" "0.74.81" - "@react-native/gradle-plugin" "0.74.81" - "@react-native/js-polyfills" "0.74.81" - "@react-native/normalize-colors" "0.74.81" - "@react-native/virtualized-lists" "0.74.81" + "@react-native/assets-registry" "0.74.87" + "@react-native/codegen" "0.74.87" + "@react-native/community-cli-plugin" "0.74.87" + "@react-native/gradle-plugin" "0.74.87" + "@react-native/js-polyfills" "0.74.87" + "@react-native/normalize-colors" "0.74.87" + "@react-native/virtualized-lists" "0.74.87" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" @@ -8244,22 +7998,22 @@ react-native-windows@0.74.1: ws "^6.2.2" yargs "^17.6.2" -react-native@0.74.3: - version "0.74.3" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.3.tgz#eef32cd10afb1f4b26f75b79eefd6b220c63953c" - integrity sha512-UFutCC6WEw6HkxlcpQ2BemKqi0JkwrgDchYB5Svi8Sp4Xwt4HA6LGEjNQgZ+3KM44bjyFRpofQym0uh0jACGng== +react-native@0.74.5: + version "0.74.5" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.5.tgz#80e556690fc2583d46714d5618ecd30d93c24e81" + integrity sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw== dependencies: "@jest/create-cache-key-function" "^29.6.3" "@react-native-community/cli" "13.6.9" "@react-native-community/cli-platform-android" "13.6.9" "@react-native-community/cli-platform-ios" "13.6.9" - "@react-native/assets-registry" "0.74.85" - "@react-native/codegen" "0.74.85" - "@react-native/community-cli-plugin" "0.74.85" - "@react-native/gradle-plugin" "0.74.85" - "@react-native/js-polyfills" "0.74.85" - "@react-native/normalize-colors" "0.74.85" - "@react-native/virtualized-lists" "0.74.85" + "@react-native/assets-registry" "0.74.87" + "@react-native/codegen" "0.74.87" + "@react-native/community-cli-plugin" "0.74.87" + "@react-native/gradle-plugin" "0.74.87" + "@react-native/js-polyfills" "0.74.87" + "@react-native/normalize-colors" "0.74.87" + "@react-native/virtualized-lists" "0.74.87" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" @@ -8438,13 +8192,13 @@ require-from-string@^2.0.2: integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-in-the-middle@^7.1.1: - version "7.3.0" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz#ce64a1083647dc07b3273b348357efac8a9945c9" - integrity sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw== + version "7.4.0" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz#606977820d4b5f9be75e5a108ce34cfed25b3bb4" + integrity sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ== dependencies: - debug "^4.1.1" + debug "^4.3.5" module-details-from-path "^1.0.3" - resolve "^1.22.1" + resolve "^1.22.8" require-main-filename@^2.0.0: version "2.0.0" @@ -8492,7 +8246,7 @@ resolve.exports@^2.0.0, resolve.exports@^2.0.2: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2: +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -8637,7 +8391,12 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: +semver@^7.3.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== @@ -9321,11 +9080,16 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.4.0, tslib@^2.6.2: +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@^2.2.0, tslib@^2.6.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" From 3a32d67087c39bcf7904043d15a2fdba65307f4e Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:40:38 +0200 Subject: [PATCH 02/17] fix(ios): ensure behavior is correct with empty text track list (#4123) * fix(ios): ensure behavior is correct with empty text track list --- examples/basic/src/constants/general.ts | 5 +++++ ios/Video/RCTVideo.swift | 23 +++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/examples/basic/src/constants/general.ts b/examples/basic/src/constants/general.ts index 665a23cd15..e0d1218548 100644 --- a/examples/basic/src/constants/general.ts +++ b/examples/basic/src/constants/general.ts @@ -78,6 +78,11 @@ export const srcAllPlatformList = [ uri: 'https://bitmovin-a.akamaihd.net/content/sintel/hls/playlist.m3u8', startPosition: 50000, }, + { + description: 'mp3 with texttrack', + uri: 'https://traffic.libsyn.com/democracynow/wx2024-0702_SOT_DeadCalm-LucileSmith-FULL-V2.mxf-audio.mp3', // an mp3 file + textTracks: [], // empty text track list + }, { description: 'BigBugBunny sideLoaded subtitles', // sideloaded subtitles wont work for streaming like HLS on ios diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index f1ca220f17..e735d5d4f2 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -42,7 +42,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH private var _repeat = false private var _isPlaying = false private var _allowsExternalPlayback = true - private var _textTracks: [TextTrack]? + private var _textTracks: [TextTrack] = [] private var _selectedTextTrackCriteria: SelectedTrackCriteria? private var _selectedAudioTrackCriteria: SelectedTrackCriteria? private var _playbackStalled = false @@ -598,7 +598,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } func playerItemPrepareText(asset: AVAsset!, assetOptions: NSDictionary?, uri: String) async -> AVPlayerItem { - if (self._textTracks == nil) || self._textTracks?.isEmpty == true || (uri.hasSuffix(".m3u8")) { + if self._textTracks.isEmpty == true || (uri.hasSuffix(".m3u8")) { return await self.playerItemPropegateMetadata(AVPlayerItem(asset: asset)) } @@ -612,7 +612,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH textTracks: self._textTracks ) - if validTextTracks.count != self._textTracks?.count { + if validTextTracks.count != self._textTracks.count { self.setTextTracks(validTextTracks) } @@ -963,8 +963,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH func setSelectedTextTrack(_ selectedTextTrack: SelectedTrackCriteria?) { _selectedTextTrackCriteria = selectedTextTrack - if _textTracks != nil { // sideloaded text tracks - RCTPlayerOperations.setSideloadedText(player: _player, textTracks: _textTracks!, criteria: _selectedTextTrackCriteria) + if !_textTracks.isEmpty { // sideloaded text tracks + RCTPlayerOperations.setSideloadedText(player: _player, textTracks: _textTracks, criteria: _selectedTextTrackCriteria) } else { // text tracks included in the HLS playlist§ Task { await RCTPlayerOperations.setMediaSelectionTrackForCharacteristic(player: _player, characteristic: AVMediaCharacteristic.legible, @@ -979,8 +979,11 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } func setTextTracks(_ textTracks: [TextTrack]?) { - _textTracks = textTracks - + if textTracks == nil { + _textTracks = [] + } else { + _textTracks = textTracks! + } // in case textTracks was set after selectedTextTrack if _selectedTextTrackCriteria != nil { setSelectedTextTrack(_selectedTextTrackCriteria) } } @@ -1294,7 +1297,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH _playerItem = nil _source = nil _chapters = nil - _textTracks = nil + _textTracks = [] _selectedTextTrackCriteria = nil _selectedAudioTrackCriteria = nil _presentingViewController = nil @@ -1448,7 +1451,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH "orientation": orientation, ], "audioTracks": audioTracks, - "textTracks": self._textTracks?.compactMap { $0.json } ?? textTracks.map(\.json), + "textTracks": self._textTracks.compactMap { $0.json } ?? textTracks.map(\.json), "target": self.reactTag as Any]) } @@ -1646,7 +1649,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH if onTextTracks != nil { Task { let textTracks = await RCTVideoUtils.getTextTrackInfo(self._player) - self.onTextTracks?(["textTracks": self._textTracks?.compactMap { $0.json } ?? textTracks.compactMap(\.json)]) + self.onTextTracks?(["textTracks": self._textTracks.compactMap { $0.json } ?? textTracks.compactMap(\.json)]) } } From 688d98d68f888a59bde1ee33aa844ac63c9026a5 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:42:51 +0200 Subject: [PATCH 03/17] fix(tvos): fix build (and update sample) (#4134) * fix(tvos): fix build (and update sample) --- examples/exampletvOS/ios/Podfile.lock | 10 +++++----- ios/Video/RCTVideo.swift | 23 ++++++++++++----------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/examples/exampletvOS/ios/Podfile.lock b/examples/exampletvOS/ios/Podfile.lock index 41c5f3da7e..d3b3675bfa 100644 --- a/examples/exampletvOS/ios/Podfile.lock +++ b/examples/exampletvOS/ios/Podfile.lock @@ -316,11 +316,11 @@ PODS: - React-jsinspector (0.71.12-0) - React-logger (0.71.12-0): - glog - - react-native-video (6.0.0): + - react-native-video (6.4.5): - RCT-Folly (= 2021.07.22.00) - React-Core - - react-native-video/Video (= 6.0.0) - - react-native-video/Video (6.0.0): + - react-native-video/Video (= 6.4.5) + - react-native-video/Video (6.4.5): - RCT-Folly (= 2021.07.22.00) - React-Core - React-perflogger (0.71.12-0) @@ -592,7 +592,7 @@ SPEC CHECKSUMS: React-jsiexecutor: 0c8c5e8b2171be52295f59097923babf84d1cf66 React-jsinspector: f8e6919523047a9bd1270ade75b4eca0108963b4 React-logger: 16c56636d4209cc204d06c5ba347cee21b960012 - react-native-video: fc60911540a69935cc7950829163f6f41259cb0d + react-native-video: fdcfbf66416475f8e122be9f7d72dd1d156ef3ed React-perflogger: 355109dc9d6f34e35bc35dabb32310f8ed2d29a2 React-RCTActionSheet: 9d1be4d43972f2aae4b31d9e53ffb030115fa445 React-RCTAnimation: aab7e1ecd325db67e1f2a947d85a52adf86594b7 @@ -609,6 +609,6 @@ SPEC CHECKSUMS: Yoga: 8b8c06e142662150974d1c70b4c5ffb08eb468db YogaKit: 1e22bf2228b3a5ac8cc88965153061ae92c494b5 -PODFILE CHECKSUM: 26d254806a611a4bc6b6c39cff790dd08f770ccf +PODFILE CHECKSUM: e20830ba1d59fa52a9075c08861e37e5f2ac113c COCOAPODS: 1.15.2 diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index e735d5d4f2..5acc616f14 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -498,18 +498,19 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH NowPlayingInfoCenterManager.shared.registerPlayer(player: _player!) } } else { - if #available(iOS 16.0, *) { - // This feature caused crashes, if the app was put in bg, before the source change - // https://github.com/TheWidlarzGroup/react-native-video/issues/3900 - self._playerViewController?.allowsVideoFrameAnalysis = false - } - + #if !os(tvOS) + if #available(iOS 16.0, *) { + // This feature caused crashes, if the app was put in bg, before the source change + // https://github.com/TheWidlarzGroup/react-native-video/issues/3900 + self._playerViewController?.allowsVideoFrameAnalysis = false + } + #endif _player?.replaceCurrentItem(with: playerItem) - - if #available(iOS 16.0, *) { - self._playerViewController?.allowsVideoFrameAnalysis = true - } - + #if !os(tvOS) + if #available(iOS 16.0, *) { + self._playerViewController?.allowsVideoFrameAnalysis = true + } + #endif // later we can just call "updateNowPlayingInfo: NowPlayingInfoCenterManager.shared.updateNowPlayingInfo() } From 2fa6c43615c1bc0a3bbcb5f472ffaeb8ae16a1af Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:13:06 +0200 Subject: [PATCH 04/17] fix(android): add subtitleStyle.subtitlesFollowVideo prop to control subtitles positionning (#4133) * fix(android): add subtitleStyle.subtitlesFollowVideo prop to control subtitles positionning * docs: add new prop description * docs: add supported platform for subtitleStyle * chore: use constructor instead of parse --- .../brentvatne/common/api/SubtitleStyle.kt | 6 ++- .../brentvatne/exoplayer/ExoPlayerView.java | 26 ++++++++++-- docs/pages/component/props.mdx | 41 +++++++++++++++---- examples/basic/src/VideoPlayer.tsx | 1 + src/specs/VideoNativeComponent.ts | 1 + src/types/video.ts | 1 + 6 files changed, 63 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/com/brentvatne/common/api/SubtitleStyle.kt b/android/src/main/java/com/brentvatne/common/api/SubtitleStyle.kt index efb4da0a81..1ac0fd03ac 100644 --- a/android/src/main/java/com/brentvatne/common/api/SubtitleStyle.kt +++ b/android/src/main/java/com/brentvatne/common/api/SubtitleStyle.kt @@ -6,7 +6,7 @@ import com.facebook.react.bridge.ReadableMap /** * Helper file to parse SubtitleStyle prop and build a dedicated class */ -class SubtitleStyle private constructor() { +class SubtitleStyle public constructor() { var fontSize = -1 private set var paddingLeft = 0 @@ -19,6 +19,8 @@ class SubtitleStyle private constructor() { private set var opacity = 1f private set + var subtitlesFollowVideo = true + private set companion object { private const val PROP_FONT_SIZE_TRACK = "fontSize" @@ -27,6 +29,7 @@ class SubtitleStyle private constructor() { private const val PROP_PADDING_LEFT = "paddingLeft" private const val PROP_PADDING_RIGHT = "paddingRight" private const val PROP_OPACITY = "opacity" + private const val PROP_SUBTITLES_FOLLOW_VIDEO = "subtitlesFollowVideo" @JvmStatic fun parse(src: ReadableMap?): SubtitleStyle { @@ -37,6 +40,7 @@ class SubtitleStyle private constructor() { subtitleStyle.paddingLeft = ReactBridgeUtils.safeGetInt(src, PROP_PADDING_LEFT, 0) subtitleStyle.paddingRight = ReactBridgeUtils.safeGetInt(src, PROP_PADDING_RIGHT, 0) subtitleStyle.opacity = ReactBridgeUtils.safeGetFloat(src, PROP_OPACITY, 1f) + subtitleStyle.subtitlesFollowVideo = ReactBridgeUtils.safeGetBool(src, PROP_SUBTITLES_FOLLOW_VIDEO, true) return subtitleStyle } } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java index dd18dbfd5b..45624d6fa6 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java @@ -48,6 +48,8 @@ public final class ExoPlayerView extends FrameLayout implements AdViewProvider { private @ViewType.ViewType int viewType = ViewType.VIEW_TYPE_SURFACE; private boolean hideShutterView = false; + private SubtitleStyle localStyle = new SubtitleStyle(); + public ExoPlayerView(Context context) { super(context, null, 0); @@ -80,10 +82,15 @@ public ExoPlayerView(Context context) { adOverlayFrameLayout = new FrameLayout(context); layout.addView(shutterView, 1, layoutParams); - layout.addView(adOverlayFrameLayout, 2, layoutParams); + if (localStyle.getSubtitlesFollowVideo()) { + layout.addView(subtitleLayout, layoutParams); + layout.addView(adOverlayFrameLayout, layoutParams); + } addViewInLayout(layout, 0, aspectRatioParams); - addViewInLayout(subtitleLayout, 1, layoutParams); + if (!localStyle.getSubtitlesFollowVideo()) { + addViewInLayout(subtitleLayout, 1, layoutParams); + } } private void clearVideoView() { @@ -107,7 +114,7 @@ public boolean isPlaying() { } public void setSubtitleStyle(SubtitleStyle style) { - // ensure we reset subtile style before reapplying it + // ensure we reset subtitle style before reapplying it subtitleLayout.setUserDefaultStyle(); subtitleLayout.setUserDefaultTextSize(); @@ -121,7 +128,18 @@ public void setSubtitleStyle(SubtitleStyle style) { } else { subtitleLayout.setVisibility(View.GONE); } - + if (localStyle.getSubtitlesFollowVideo() != style.getSubtitlesFollowVideo()) { + // No need to manipulate layout if value didn't change + if (style.getSubtitlesFollowVideo()) { + removeViewInLayout(subtitleLayout); + layout.addView(subtitleLayout, layoutParams); + } else { + layout.removeViewInLayout(subtitleLayout); + addViewInLayout(subtitleLayout, 1, layoutParams, false); + } + requestLayout(); + } + localStyle = style; } public void setShutterColor(Integer color) { diff --git a/docs/pages/component/props.mdx b/docs/pages/component/props.mdx index e32865969e..47971ba83e 100644 --- a/docs/pages/component/props.mdx +++ b/docs/pages/component/props.mdx @@ -846,14 +846,18 @@ source={{ ### `subtitleStyle` -| Property | Description | Platforms | -| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -| fontSize | Adjust the font size of the subtitles. Default: font size of the device | Android | -| paddingTop | Adjust the top padding of the subtitles. Default: 0 | Android | -| paddingBottom | Adjust the bottom padding of the subtitles. Default: 0 | Android | -| paddingLeft | Adjust the left padding of the subtitles. Default: 0 | Android | -| paddingRight | Adjust the right padding of the subtitles. Default: 0 | Android | -| opacity | Adjust the visibility of subtitles with 0 hiding and 1 fully showing them. Android supports float values between 0 and 1 for varying opacity levels, whereas iOS supports only 0 or 1. Default: 1. | Android, iOS | + + +| Property | Platform | Description | Platforms | +| ------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| fontSize | Android | Adjust the font size of the subtitles. Default: font size of the device | Android | +| paddingTop | Android | Adjust the top padding of the subtitles. Default: 0 | Android | +| paddingBottom | Android | Adjust the bottom padding of the subtitles. Default: 0 | Android | +| paddingLeft | Android | Adjust the left padding of the subtitles. Default: 0 | Android | +| paddingRight | Android | Adjust the right padding of the subtitles. Default: 0 | Android | +| opacity | Android, iOS | Adjust the visibility of subtitles with 0 hiding and 1 fully showing them. Android supports float values between 0 and 1 for varying opacity levels, whereas iOS supports only 0 or 1. Default: 1. | Android, iOS | +| subtitlesFollowVideo | Android | Boolean to adjust position of subtitles. Default: true | + Example: @@ -861,6 +865,27 @@ Example: subtitleStyle={{ paddingBottom: 50, fontSize: 20, opacity: 0 }} ``` +Note for `subtitlesFollowVideo` + +`subtitlesFollowVideo` helps to determine how the subtitles are positionned. +To understand this prop you need to understand how views management works. +The main View style passed to react native video is the position reserved to display the video component. +It may not match exactly the real video size. +For exemple, you can pass a 4:3 video view and render a 16:9 video inside. +So there is a second view, the video view. + +Subtitles are managed in a third view. + +First react-native-video resize the video to keep aspect ratio (depending on `resizeMode` property) and put it in main view. + +* When putting subtitlesFollowVideo to true, the subtitle view will be adapt to the video view. +It means that if the video is displayed out of screen, the subtitles may also be displayed out of screen. + +* When putting subtitlesFollowVideo to false, the subtitle view will keep adapting to the main view. +It means that if the video is displayed out of screen, the subtitles may also be displayed out of screen. + +This prop can be changed on runtime. + ### `textTracks` diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index 243d2fa8f5..b77f97c9da 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -268,6 +268,7 @@ const VideoPlayer: FC = ({}) => { onPlaybackStateChanged={onPlaybackStateChanged} bufferingStrategy={BufferingStrategyType.DEFAULT} debug={{enable: true, thread: true}} + subtitleStyle={{subtitlesFollowVideo: true}} /> )} diff --git a/src/specs/VideoNativeComponent.ts b/src/specs/VideoNativeComponent.ts index a5eba10c38..82b92745a8 100644 --- a/src/specs/VideoNativeComponent.ts +++ b/src/specs/VideoNativeComponent.ts @@ -131,6 +131,7 @@ type SubtitleStyle = Readonly<{ paddingLeft?: WithDefault; paddingRight?: WithDefault; opacity?: WithDefault; + subtitlesFollowVideo?: WithDefault; }>; type OnLoadData = Readonly<{ diff --git a/src/types/video.ts b/src/types/video.ts index d29d0108a9..b34becb5e0 100644 --- a/src/types/video.ts +++ b/src/types/video.ts @@ -168,6 +168,7 @@ export type SubtitleStyle = { paddingLeft?: number; paddingRight?: number; opacity?: number; + subtitlesFollowVideo?: boolean; }; export enum TextTrackType { From fbe570d62fbb5852fb3696addd6a789b8f8922a3 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 17:01:39 +0200 Subject: [PATCH 05/17] Fix/allow text track selection by index (#4124) * fix(ios): ensure behavior is correct with empty text track list * fix(ios): add index to text tracks reported --- examples/basic/ios/Podfile.lock | 480 ++++++++++++++++---------------- ios/Video/RCTVideo.swift | 18 +- 2 files changed, 256 insertions(+), 242 deletions(-) diff --git a/examples/basic/ios/Podfile.lock b/examples/basic/ios/Podfile.lock index fc0fa2ade8..5d670dfb15 100644 --- a/examples/basic/ios/Podfile.lock +++ b/examples/basic/ios/Podfile.lock @@ -3,15 +3,15 @@ PODS: - DoubleConversion (1.1.6) - EXConstants (16.0.2): - ExpoModulesCore - - Expo (51.0.17): + - Expo (51.0.31): - ExpoModulesCore - ExpoAsset (10.0.10): - ExpoModulesCore - ExpoFileSystem (17.0.1): - ExpoModulesCore - - ExpoFont (12.0.7): + - ExpoFont (12.0.9): - ExpoModulesCore - - ExpoImage (1.12.12): + - ExpoImage (1.12.15): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.19.1) @@ -20,7 +20,7 @@ PODS: - SDWebImageWebPCoder (~> 0.14.6) - ExpoKeepAwake (13.0.2): - ExpoModulesCore - - ExpoModulesCore (1.12.18): + - ExpoModulesCore (1.12.23): - DoubleConversion - glog - hermes-engine @@ -43,7 +43,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - FBLazyVector (0.74.3) + - FBLazyVector (0.74.5) - fmt (9.1.0) - glog (0.3.5) - hermes-engine (0.74.3): @@ -82,27 +82,27 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.74.3) - - RCTRequired (0.74.3) - - RCTTypeSafety (0.74.3): - - FBLazyVector (= 0.74.3) - - RCTRequired (= 0.74.3) - - React-Core (= 0.74.3) - - React (0.74.3): - - React-Core (= 0.74.3) - - React-Core/DevSupport (= 0.74.3) - - React-Core/RCTWebSocket (= 0.74.3) - - React-RCTActionSheet (= 0.74.3) - - React-RCTAnimation (= 0.74.3) - - React-RCTBlob (= 0.74.3) - - React-RCTImage (= 0.74.3) - - React-RCTLinking (= 0.74.3) - - React-RCTNetwork (= 0.74.3) - - React-RCTSettings (= 0.74.3) - - React-RCTText (= 0.74.3) - - React-RCTVibration (= 0.74.3) - - React-callinvoker (0.74.3) - - React-Codegen (0.74.3): + - RCTDeprecation (0.74.5) + - RCTRequired (0.74.5) + - RCTTypeSafety (0.74.5): + - FBLazyVector (= 0.74.5) + - RCTRequired (= 0.74.5) + - React-Core (= 0.74.5) + - React (0.74.5): + - React-Core (= 0.74.5) + - React-Core/DevSupport (= 0.74.5) + - React-Core/RCTWebSocket (= 0.74.5) + - React-RCTActionSheet (= 0.74.5) + - React-RCTAnimation (= 0.74.5) + - React-RCTBlob (= 0.74.5) + - React-RCTImage (= 0.74.5) + - React-RCTLinking (= 0.74.5) + - React-RCTNetwork (= 0.74.5) + - React-RCTSettings (= 0.74.5) + - React-RCTText (= 0.74.5) + - React-RCTVibration (= 0.74.5) + - React-callinvoker (0.74.5) + - React-Codegen (0.74.5): - DoubleConversion - glog - hermes-engine @@ -122,12 +122,12 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.74.3): + - React-Core (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.3) + - React-Core/Default (= 0.74.5) - React-cxxreact - React-featureflags - React-hermes @@ -139,7 +139,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/CoreModulesHeaders (0.74.3): + - React-Core/CoreModulesHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -156,7 +156,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/Default (0.74.3): + - React-Core/Default (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -172,13 +172,13 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/DevSupport (0.74.3): + - React-Core/DevSupport (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.3) - - React-Core/RCTWebSocket (= 0.74.3) + - React-Core/Default (= 0.74.5) + - React-Core/RCTWebSocket (= 0.74.5) - React-cxxreact - React-featureflags - React-hermes @@ -190,7 +190,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.74.3): + - React-Core/RCTActionSheetHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -207,7 +207,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTAnimationHeaders (0.74.3): + - React-Core/RCTAnimationHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -224,7 +224,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTBlobHeaders (0.74.3): + - React-Core/RCTBlobHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -241,7 +241,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTImageHeaders (0.74.3): + - React-Core/RCTImageHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -258,7 +258,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTLinkingHeaders (0.74.3): + - React-Core/RCTLinkingHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -275,7 +275,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTNetworkHeaders (0.74.3): + - React-Core/RCTNetworkHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -292,7 +292,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTSettingsHeaders (0.74.3): + - React-Core/RCTSettingsHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -309,7 +309,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTTextHeaders (0.74.3): + - React-Core/RCTTextHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -326,7 +326,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTVibrationHeaders (0.74.3): + - React-Core/RCTVibrationHeaders (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -343,12 +343,12 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTWebSocket (0.74.3): + - React-Core/RCTWebSocket (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.3) + - React-Core/Default (= 0.74.5) - React-cxxreact - React-featureflags - React-hermes @@ -360,36 +360,36 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-CoreModules (0.74.3): + - React-CoreModules (0.74.5): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.74.3) + - RCTTypeSafety (= 0.74.5) - React-Codegen - - React-Core/CoreModulesHeaders (= 0.74.3) - - React-jsi (= 0.74.3) + - React-Core/CoreModulesHeaders (= 0.74.5) + - React-jsi (= 0.74.5) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.74.3) + - React-RCTImage (= 0.74.5) - ReactCommon - SocketRocket (= 0.7.0) - - React-cxxreact (0.74.3): + - React-cxxreact (0.74.5): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.3) - - React-debug (= 0.74.3) - - React-jsi (= 0.74.3) + - React-callinvoker (= 0.74.5) + - React-debug (= 0.74.5) + - React-jsi (= 0.74.5) - React-jsinspector - - React-logger (= 0.74.3) - - React-perflogger (= 0.74.3) - - React-runtimeexecutor (= 0.74.3) - - React-debug (0.74.3) - - React-Fabric (0.74.3): + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - React-runtimeexecutor (= 0.74.5) + - React-debug (0.74.5) + - React-Fabric (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -400,20 +400,20 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.74.3) - - React-Fabric/attributedstring (= 0.74.3) - - React-Fabric/componentregistry (= 0.74.3) - - React-Fabric/componentregistrynative (= 0.74.3) - - React-Fabric/components (= 0.74.3) - - React-Fabric/core (= 0.74.3) - - React-Fabric/imagemanager (= 0.74.3) - - React-Fabric/leakchecker (= 0.74.3) - - React-Fabric/mounting (= 0.74.3) - - React-Fabric/scheduler (= 0.74.3) - - React-Fabric/telemetry (= 0.74.3) - - React-Fabric/templateprocessor (= 0.74.3) - - React-Fabric/textlayoutmanager (= 0.74.3) - - React-Fabric/uimanager (= 0.74.3) + - React-Fabric/animations (= 0.74.5) + - React-Fabric/attributedstring (= 0.74.5) + - React-Fabric/componentregistry (= 0.74.5) + - React-Fabric/componentregistrynative (= 0.74.5) + - React-Fabric/components (= 0.74.5) + - React-Fabric/core (= 0.74.5) + - React-Fabric/imagemanager (= 0.74.5) + - React-Fabric/leakchecker (= 0.74.5) + - React-Fabric/mounting (= 0.74.5) + - React-Fabric/scheduler (= 0.74.5) + - React-Fabric/telemetry (= 0.74.5) + - React-Fabric/templateprocessor (= 0.74.5) + - React-Fabric/textlayoutmanager (= 0.74.5) + - React-Fabric/uimanager (= 0.74.5) - React-graphics - React-jsi - React-jsiexecutor @@ -422,7 +422,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.74.3): + - React-Fabric/animations (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -441,7 +441,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.74.3): + - React-Fabric/attributedstring (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -460,7 +460,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.74.3): + - React-Fabric/componentregistry (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -479,7 +479,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.74.3): + - React-Fabric/componentregistrynative (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -498,7 +498,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.74.3): + - React-Fabric/components (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -509,17 +509,17 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/inputaccessory (= 0.74.3) - - React-Fabric/components/legacyviewmanagerinterop (= 0.74.3) - - React-Fabric/components/modal (= 0.74.3) - - React-Fabric/components/rncore (= 0.74.3) - - React-Fabric/components/root (= 0.74.3) - - React-Fabric/components/safeareaview (= 0.74.3) - - React-Fabric/components/scrollview (= 0.74.3) - - React-Fabric/components/text (= 0.74.3) - - React-Fabric/components/textinput (= 0.74.3) - - React-Fabric/components/unimplementedview (= 0.74.3) - - React-Fabric/components/view (= 0.74.3) + - React-Fabric/components/inputaccessory (= 0.74.5) + - React-Fabric/components/legacyviewmanagerinterop (= 0.74.5) + - React-Fabric/components/modal (= 0.74.5) + - React-Fabric/components/rncore (= 0.74.5) + - React-Fabric/components/root (= 0.74.5) + - React-Fabric/components/safeareaview (= 0.74.5) + - React-Fabric/components/scrollview (= 0.74.5) + - React-Fabric/components/text (= 0.74.5) + - React-Fabric/components/textinput (= 0.74.5) + - React-Fabric/components/unimplementedview (= 0.74.5) + - React-Fabric/components/view (= 0.74.5) - React-graphics - React-jsi - React-jsiexecutor @@ -528,7 +528,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.74.3): + - React-Fabric/components/inputaccessory (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -547,7 +547,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.74.3): + - React-Fabric/components/legacyviewmanagerinterop (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -566,7 +566,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.74.3): + - React-Fabric/components/modal (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -585,7 +585,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.74.3): + - React-Fabric/components/rncore (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -604,7 +604,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.74.3): + - React-Fabric/components/root (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -623,7 +623,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.74.3): + - React-Fabric/components/safeareaview (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -642,7 +642,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.74.3): + - React-Fabric/components/scrollview (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -661,7 +661,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.74.3): + - React-Fabric/components/text (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -680,7 +680,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.74.3): + - React-Fabric/components/textinput (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -699,7 +699,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.74.3): + - React-Fabric/components/unimplementedview (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -718,7 +718,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.74.3): + - React-Fabric/components/view (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -738,7 +738,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.74.3): + - React-Fabric/core (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -757,7 +757,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.74.3): + - React-Fabric/imagemanager (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -776,7 +776,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.74.3): + - React-Fabric/leakchecker (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -795,7 +795,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.74.3): + - React-Fabric/mounting (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -814,7 +814,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.74.3): + - React-Fabric/scheduler (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -833,7 +833,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.74.3): + - React-Fabric/telemetry (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -852,7 +852,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.74.3): + - React-Fabric/templateprocessor (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -871,7 +871,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.74.3): + - React-Fabric/textlayoutmanager (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -891,7 +891,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.74.3): + - React-Fabric/uimanager (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -910,45 +910,45 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricImage (0.74.3): + - React-FabricImage (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.74.3) - - RCTTypeSafety (= 0.74.3) + - RCTRequired (= 0.74.5) + - RCTTypeSafety (= 0.74.5) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.74.3) + - React-jsiexecutor (= 0.74.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.74.3) - - React-graphics (0.74.3): + - React-featureflags (0.74.5) + - React-graphics (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly/Fabric (= 2024.01.01.00) - - React-Core/Default (= 0.74.3) + - React-Core/Default (= 0.74.5) - React-utils - - React-hermes (0.74.3): + - React-hermes (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.3) + - React-cxxreact (= 0.74.5) - React-jsi - - React-jsiexecutor (= 0.74.3) + - React-jsiexecutor (= 0.74.5) - React-jsinspector - - React-perflogger (= 0.74.3) + - React-perflogger (= 0.74.5) - React-runtimeexecutor - - React-ImageManager (0.74.3): + - React-ImageManager (0.74.5): - glog - RCT-Folly/Fabric - React-Core/Default @@ -957,44 +957,44 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.74.3): + - React-jserrorhandler (0.74.5): - RCT-Folly/Fabric (= 2024.01.01.00) - React-debug - React-jsi - React-Mapbuffer - - React-jsi (0.74.3): + - React-jsi (0.74.5): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.74.3): + - React-jsiexecutor (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.3) - - React-jsi (= 0.74.3) + - React-cxxreact (= 0.74.5) + - React-jsi (= 0.74.5) - React-jsinspector - - React-perflogger (= 0.74.3) - - React-jsinspector (0.74.3): + - React-perflogger (= 0.74.5) + - React-jsinspector (0.74.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-runtimeexecutor (= 0.74.3) - - React-jsitracing (0.74.3): + - React-runtimeexecutor (= 0.74.5) + - React-jsitracing (0.74.5): - React-jsi - - React-logger (0.74.3): + - React-logger (0.74.5): - glog - - React-Mapbuffer (0.74.3): + - React-Mapbuffer (0.74.5): - glog - React-debug - - react-native-video (6.4.4): + - react-native-video (6.4.5): - DoubleConversion - glog - hermes-engine @@ -1008,7 +1008,7 @@ PODS: - React-featureflags - React-graphics - React-ImageManager - - react-native-video/Video (= 6.4.4) + - react-native-video/Video (= 6.4.5) - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1038,7 +1038,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-video/Video (6.4.4): + - react-native-video/Video (6.4.5): - DoubleConversion - glog - hermes-engine @@ -1059,8 +1059,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.74.3) - - React-NativeModulesApple (0.74.3): + - React-nativeconfig (0.74.5) + - React-NativeModulesApple (0.74.5): - glog - hermes-engine - React-callinvoker @@ -1071,10 +1071,10 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.74.3) - - React-RCTActionSheet (0.74.3): - - React-Core/RCTActionSheetHeaders (= 0.74.3) - - React-RCTAnimation (0.74.3): + - React-perflogger (0.74.5) + - React-RCTActionSheet (0.74.5): + - React-Core/RCTActionSheetHeaders (= 0.74.5) + - React-RCTAnimation (0.74.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1082,7 +1082,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTAppDelegate (0.74.3): + - React-RCTAppDelegate (0.74.5): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1106,7 +1106,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.74.3): + - React-RCTBlob (0.74.5): - DoubleConversion - fmt (= 9.1.0) - hermes-engine @@ -1119,7 +1119,7 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.74.3): + - React-RCTFabric (0.74.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1139,7 +1139,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.74.3): + - React-RCTImage (0.74.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1148,14 +1148,14 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.74.3): + - React-RCTLinking (0.74.5): - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.74.3) - - React-jsi (= 0.74.3) + - React-Core/RCTLinkingHeaders (= 0.74.5) + - React-jsi (= 0.74.5) - React-NativeModulesApple - ReactCommon - - ReactCommon/turbomodule/core (= 0.74.3) - - React-RCTNetwork (0.74.3): + - ReactCommon/turbomodule/core (= 0.74.5) + - React-RCTNetwork (0.74.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1163,7 +1163,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTSettings (0.74.3): + - React-RCTSettings (0.74.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1171,23 +1171,23 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTText (0.74.3): - - React-Core/RCTTextHeaders (= 0.74.3) + - React-RCTText (0.74.5): + - React-Core/RCTTextHeaders (= 0.74.5) - Yoga - - React-RCTVibration (0.74.3): + - React-RCTVibration (0.74.5): - RCT-Folly (= 2024.01.01.00) - React-Codegen - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-rendererdebug (0.74.3): + - React-rendererdebug (0.74.5): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.74.3) - - React-RuntimeApple (0.74.3): + - React-rncore (0.74.5) + - React-RuntimeApple (0.74.5): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker @@ -1205,7 +1205,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - React-utils - - React-RuntimeCore (0.74.3): + - React-RuntimeCore (0.74.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1218,9 +1218,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.74.3): - - React-jsi (= 0.74.3) - - React-RuntimeHermes (0.74.3): + - React-runtimeexecutor (0.74.5): + - React-jsi (= 0.74.5) + - React-RuntimeHermes (0.74.5): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-featureflags @@ -1231,7 +1231,7 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.74.3): + - React-runtimescheduler (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -1243,51 +1243,51 @@ PODS: - React-rendererdebug - React-runtimeexecutor - React-utils - - React-utils (0.74.3): + - React-utils (0.74.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-debug - - React-jsi (= 0.74.3) - - ReactCommon (0.74.3): - - ReactCommon/turbomodule (= 0.74.3) - - ReactCommon/turbomodule (0.74.3): + - React-jsi (= 0.74.5) + - ReactCommon (0.74.5): + - ReactCommon/turbomodule (= 0.74.5) + - ReactCommon/turbomodule (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.3) - - React-cxxreact (= 0.74.3) - - React-jsi (= 0.74.3) - - React-logger (= 0.74.3) - - React-perflogger (= 0.74.3) - - ReactCommon/turbomodule/bridging (= 0.74.3) - - ReactCommon/turbomodule/core (= 0.74.3) - - ReactCommon/turbomodule/bridging (0.74.3): + - React-callinvoker (= 0.74.5) + - React-cxxreact (= 0.74.5) + - React-jsi (= 0.74.5) + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - ReactCommon/turbomodule/bridging (= 0.74.5) + - ReactCommon/turbomodule/core (= 0.74.5) + - ReactCommon/turbomodule/bridging (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.3) - - React-cxxreact (= 0.74.3) - - React-jsi (= 0.74.3) - - React-logger (= 0.74.3) - - React-perflogger (= 0.74.3) - - ReactCommon/turbomodule/core (0.74.3): + - React-callinvoker (= 0.74.5) + - React-cxxreact (= 0.74.5) + - React-jsi (= 0.74.5) + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - ReactCommon/turbomodule/core (0.74.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.3) - - React-cxxreact (= 0.74.3) - - React-debug (= 0.74.3) - - React-jsi (= 0.74.3) - - React-logger (= 0.74.3) - - React-perflogger (= 0.74.3) - - React-utils (= 0.74.3) + - React-callinvoker (= 0.74.5) + - React-cxxreact (= 0.74.5) + - React-debug (= 0.74.5) + - React-jsi (= 0.74.5) + - React-logger (= 0.74.5) + - React-perflogger (= 0.74.5) + - React-utils (= 0.74.5) - RNCPicker (2.7.5): - React-Core - SDWebImage (5.19.2): @@ -1521,14 +1521,14 @@ SPEC CHECKSUMS: boost: d3f49c53809116a5d38da093a8aa78bf551aed09 DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 EXConstants: 409690fbfd5afea964e5e9d6c4eb2c2b59222c59 - Expo: 675a5642b5860771507237259da50b921c03a9f3 + Expo: 4773e11951abd0f666f67023f0cb1d48c3e8a32b ExpoAsset: 323700f291684f110fb55f0d4022a3362ea9f875 ExpoFileSystem: 80bfe850b1f9922c16905822ecbf97acd711dc51 - ExpoFont: 43b69559cef3d773db57c7ae7edd3cb0aa0dc610 - ExpoImage: 2ccccff1219ebc765e344f3338f2430af2df4824 + ExpoFont: e7f2275c10ca8573c991e007329ad6bf98086485 + ExpoImage: f77df382153d716f332f974438a803c4527f60b0 ExpoKeepAwake: 3b8815d9dd1d419ee474df004021c69fdd316d08 - ExpoModulesCore: b2fa8cc3c12f0ba45a9ae125c0e3bcad04f3fb7b - FBLazyVector: 7e977dd099937dc5458851233141583abba49ff2 + ExpoModulesCore: e3c518e094990b3ad960edbd19c291f2a1b56b0a + FBLazyVector: ac12dc084d1c8ec4cc4d7b3cf1b0ebda6dab85af fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f hermes-engine: 1f547997900dd0752dc0cc0ae6dd16173c49e09b @@ -1536,61 +1536,61 @@ SPEC CHECKSUMS: libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 - RCTDeprecation: 4c7eeb42be0b2e95195563c49be08d0b839d22b4 - RCTRequired: d530a0f489699c8500e944fde963102c42dcd0c2 - RCTTypeSafety: b20878506b094fa3d9007d7b9e4be0faa3562499 - React: 2f9da0177233f60fa3462d83fcccde245759f81a - React-callinvoker: d0205f0dcebf72ec27263ab41e3a5ad827ed503f - React-Codegen: 27212e14727ad7d6d9fd1b1967fbf21929e4ce29 - React-Core: 690ebbbf8f8dcfba6686ce8927731d3f025c3114 - React-CoreModules: 185da31f5eb2e6043c3d19b10c64c4661322ed6a - React-cxxreact: c53d2ac9246235351086b8c588feaf775b4ec7f7 - React-debug: 40caf8ab4c0fd3afe831912e3d4d0e7303eecc5d - React-Fabric: 51ccb4f7e45df5837e796f339d602737063c463e - React-FabricImage: 376b7a81bfe64102e7da5fc85cd1775638584c92 - React-featureflags: 0d0576ae8306801a8a660b36afcdbda04dd7cc12 - React-graphics: e0e6b8fbb1c5968c70d3584dccec42544b769b60 - React-hermes: 917b7ab4c3cb9204c2ad020d74f313830097148b - React-ImageManager: 5cebcc0136f3b309c7f5189b96e6c0ebd0ec8192 - React-jserrorhandler: 5dc7e036cba3b7d167380c02afabf818ad0b2f98 - React-jsi: 024b933267079f80c30a5cae97bf5ce521217505 - React-jsiexecutor: 45cb079c87db3f514da3acfc686387a0e01de5c5 - React-jsinspector: c9551971f1298163c93e2bfb082c2b4245618fc6 - React-jsitracing: 1aa5681c353b41573b03e0e480a5adf5fa1c56d8 - React-logger: fa92ba4d3a5d39ac450f59be2a3cec7b099f0304 - React-Mapbuffer: 70da5955150a58732e9336a0c7e71cd49e909f25 - react-native-video: f57ea9a2df4675386f57f48494853a54bdba0d9f + RCTDeprecation: 3afceddffa65aee666dafd6f0116f1d975db1584 + RCTRequired: ec1239bc9d8bf63e10fb92bd8b26171a9258e0c1 + RCTTypeSafety: f5ecbc86c5c5fa163c05acb7a1c5012e15b5f994 + React: fc9fa7258eff606f44d58c5b233a82dc9cf09018 + React-callinvoker: e3fab14d69607fb7e8e3a57e5a415aed863d3599 + React-Codegen: bd1a15f54af401efee5f439aa6fd420b10550125 + React-Core: 3a5fd9e781cecf87803e5b091496a606a3df774a + React-CoreModules: cbf4707dafab8f9f826ac0c63a07d0bf5d01e256 + React-cxxreact: 7b188556271e3c7fdf22a04819f6a6225045b9dd + React-debug: 2d6f912c0c4c91a9fde617d8425088af7315c10b + React-Fabric: 47ff62e0c7f017606585327f6016190625295c5e + React-FabricImage: 823627aa521b4ecc896334f0dbf2bc8376edbf1e + React-featureflags: 2a4555681de0d4b683d98d7e9fd7bdf9e9ce1aa2 + React-graphics: edbd2a6c018b2e2d541ab8cb886cc31babf14646 + React-hermes: a7054fbcbda3957e3c5eaad06ef9bf79998d535a + React-ImageManager: 314824c4bb6f152699724dc9eb3ce544b87048bd + React-jserrorhandler: fffe10523886a352161ef492af2063651721c8ee + React-jsi: f3ce1dd2e950b6ad12b65ea3ef89168f1b94c584 + React-jsiexecutor: b4df3a27973d82f9abf3c4bd0f88e042cda25f16 + React-jsinspector: 2ea90b8e53970a1fea1449fb8e6419e21ca79867 + React-jsitracing: c83efb63c8e9e1dff72a3c56e88ae1c530a87795 + React-logger: 257858bd55f3a4e1bc0cf07ddc8fb9faba6f8c7c + React-Mapbuffer: dce508662b995ffefd29e278a16b78217039d43d + react-native-video: c5cd8b71116762c5a4ceee7f7961587d99aae8e3 react-native-video-plugin-sample: d3a93b7ad777cad7fa2c30473de75a2635ce5feb - React-nativeconfig: 84806b820491db30175afbf027e99e8415dc63f0 - React-NativeModulesApple: 7b79212f8cf496ab554e0b7b09acbd4aa4690260 - React-perflogger: 7bb9ba49435ff66b666e7966ee10082508a203e8 - React-RCTActionSheet: a2816ae2b5c8523c2bc18a8f874a724a096e6d97 - React-RCTAnimation: e78f52d7422bac13e1213e25e9bcbf99be872e1a - React-RCTAppDelegate: 24f46de486cfa3a9f46e4b0786eaf17d92e1e0c6 - React-RCTBlob: 9f9d6599d1b00690704dadc4a4bc33a7e76938be - React-RCTFabric: 416d20a24b117a7ec7d32088fc8f359b5e558fa7 - React-RCTImage: 39dd5aee6b92213845e1e7a7c41865801dc33493 - React-RCTLinking: 35d742a982f901f9ea416d772763e2da65c2dc7d - React-RCTNetwork: b078576c0c896c71905f841716b9f9f5922111dc - React-RCTSettings: 900aab52b5b1212f247c2944d88f4defbf6146f2 - React-RCTText: a3895ab4e5df4a5fd41b6f059eed484a0c7016d1 - React-RCTVibration: ab4912e1427d8de00ef89e9e6582094c4c25dc05 - React-rendererdebug: 8ea55aebb8cba804db2a8449a2f0c80ccfe0ce5a - React-rncore: 1f725aee4e00c317e51cb4d37aca7f6a47da9a11 - React-RuntimeApple: c1833d8e82f7c5314c001d61d289849c75217944 - React-RuntimeCore: 0a5b37b50737af3505b5801376ae5788532c013e - React-runtimeexecutor: 69cab8ddf409de6d6a855a71c8af9e7290c4e55b - React-RuntimeHermes: 44847ba3e8a9394b9829d9a9abde7590624f32d0 - React-runtimescheduler: e4ad653e1d2f5ff40ba047446cacde009694f0ed - React-utils: 6f7ac39d9a0de447d4334bb25d144a28c0c5d8c9 - ReactCommon: 4a09c7d8a06e93c1e2e988a3b9f3db3d2449f2fc + React-nativeconfig: f326487bc61eba3f0e328da6efb2711533dcac46 + React-NativeModulesApple: d89733f5baed8b9249ca5a8e497d63c550097312 + React-perflogger: ed4e0c65781521e0424f2e5e40b40cc7879d737e + React-RCTActionSheet: 49d53ff03bb5688ca4606c55859053a0cd129ea5 + React-RCTAnimation: 07b4923885c52c397c4ec103924bf6e53b42c73e + React-RCTAppDelegate: 316e295076734baf9bdf1bfac7d92ab647aed930 + React-RCTBlob: 85c57b0d5e667ff8a472163ba3af0628171a64bb + React-RCTFabric: 62695e345da7c451b05a131f0c6ba80367dbd5c3 + React-RCTImage: b965c85bec820e2a9c154b1fb00a2ecdd59a9c92 + React-RCTLinking: 75f04a5f27c26c4e73a39c50df470820d219df79 + React-RCTNetwork: c1a9143f4d5778efc92da40d83969d03912ccc24 + React-RCTSettings: c6800f91c0ecd48868cd5db754b0b0a7f5ffe039 + React-RCTText: b923e24f9b7250bc4f7ab154c4168ad9f8d8fc9d + React-RCTVibration: 08c4f0c917c435b3619386c25a94ee5d64c250f0 + React-rendererdebug: fac75dc155e1202cfc187485a6e4f6e842fcc5c7 + React-rncore: 12dc32f08f195e573e9d969a348b976a3d057bbc + React-RuntimeApple: 5c7591dd19de1c7fefe8e61cf934d8f8f9fc0409 + React-RuntimeCore: ec3c8be706ca2e4607eb8c675d32512352501f9e + React-runtimeexecutor: 0e688aefc14c6bc8601f4968d8d01c3fb6446844 + React-RuntimeHermes: df243bd7c8d4ba3bd237ce6ded22031e02d37908 + React-runtimescheduler: db7189185a2e5912b0d17194302e501f801a381e + React-utils: 3f1fcffc14893afb9a7e5b7c736353873cc5fc95 + ReactCommon: f79ae672224dc1e6c2d932062176883c98eebd57 RNCPicker: 3e2c37a8328f368ce14da050cdc8231deb5fc9f9 SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - Yoga: eed50599a85bd9f6882a9938d118aed6a397db9c + Yoga: 1ab23c1835475da69cf14e211a560e73aab24cb0 PODFILE CHECKSUM: a73d485df51877001f2b04a5a4379cfa5a3ba8fa diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index 5acc616f14..2e405c76a8 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -1394,6 +1394,20 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } } + func extractJsonWithIndex(from tracks: [TextTrack]) -> [NSDictionary]? { + if tracks.isEmpty { + // No tracks, need to return nil to handle + return nil + } + // Map each enumerated pair to include the index in the json dictionary + let mappedTracks = tracks.enumerated().compactMap { index, track -> NSDictionary? in + guard let json = track.json?.mutableCopy() as? NSMutableDictionary else { return nil } + json["index"] = index // Insert the index into the json dictionary + return json + } + return mappedTracks + } + func handleReadyToPlay() { guard let _playerItem else { return } @@ -1452,7 +1466,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH "orientation": orientation, ], "audioTracks": audioTracks, - "textTracks": self._textTracks.compactMap { $0.json } ?? textTracks.map(\.json), + "textTracks": extractJsonWithIndex(from: _textTracks) ?? textTracks.map(\.json), "target": self.reactTag as Any]) } @@ -1650,7 +1664,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH if onTextTracks != nil { Task { let textTracks = await RCTVideoUtils.getTextTrackInfo(self._player) - self.onTextTracks?(["textTracks": self._textTracks.compactMap { $0.json } ?? textTracks.compactMap(\.json)]) + self.onTextTracks?(["textTracks": extractJsonWithIndex(from: _textTracks) ?? textTracks.compactMap(\.json)]) } } From 89df9d69ff96f7d6ff3d493bf1a3eb9c3da51c3c Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 19:08:27 +0200 Subject: [PATCH 06/17] fix(ios): ensure we don't disable tracks when not necessary (causes black screen) (#4130) --- ios/Video/Features/RCTPlayerOperations.swift | 6 +++++- ios/Video/RCTVideo.swift | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ios/Video/Features/RCTPlayerOperations.swift b/ios/Video/Features/RCTPlayerOperations.swift index 9c80c85f3e..d1ca88a9e4 100644 --- a/ios/Video/Features/RCTPlayerOperations.swift +++ b/ios/Video/Features/RCTPlayerOperations.swift @@ -15,11 +15,15 @@ enum RCTPlayerOperations { let trackCount: Int! = player?.currentItem?.tracks.count ?? 0 // The first few tracks will be audio & video track - var firstTextIndex = 0 + var firstTextIndex = -1 for i in 0 ..< trackCount where player?.currentItem?.tracks[i].assetTrack?.hasMediaCharacteristic(.legible) ?? false { firstTextIndex = i break } + if firstTextIndex == -1 { + // no sideLoaded text track available (can happen with invalid vtt url) + return + } var selectedTrackIndex: Int = RCTVideoUnset diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index 2e405c76a8..3aaf532c8a 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -613,6 +613,10 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH textTracks: self._textTracks ) + if validTextTracks.isEmpty { + DebugLog("Strange state, not valid textTrack") + } + if validTextTracks.count != self._textTracks.count { self.setTextTracks(validTextTracks) } From 308447a5ba1d5a8fbc025520ec43521ef967bd98 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Mon, 2 Sep 2024 19:10:39 +0200 Subject: [PATCH 07/17] Fix/track selection by title (#4129) * chore(sample): make track selection by title possible * fix(android): fix test for track selection by title --- .../exoplayer/ReactExoplayerView.java | 2 +- examples/basic/src/VideoPlayer.tsx | 21 ++++++------- examples/basic/src/components/Overlay.tsx | 6 +--- .../src/components/TextTracksSelector.tsx | 30 ++++++++----------- examples/basic/src/constants/general.ts | 7 ++++- 5 files changed, 32 insertions(+), 34 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index dacae93748..37b68f486d 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1940,7 +1940,7 @@ public void setSelectedTrack(int trackType, String type, String value) { } else if ("title".equals(type)) { for (int i = 0; i < groups.length; ++i) { Format format = groups.get(i).getFormat(0); - if (format.id != null && format.id.equals(value)) { + if (format.label != null && format.label.equals(value)) { groupIndex = i; break; } diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index b77f97c9da..5784a4e31b 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -130,17 +130,18 @@ const VideoPlayer: FC = ({}) => { if (selectedTrack?.language) { setTextTracks(data.textTracks); - if (textTracksSelectionBy === 'index') { - setSelectedTextTrack({ - type: SelectedTrackType.INDEX, - value: selectedTrack?.index, - }); - } else { - setSelectedTextTrack({ - type: SelectedTrackType.LANGUAGE, - value: selectedTrack?.language, - }); + let value; + if (textTracksSelectionBy === SelectedTrackType.INDEX) { + value = selectedTrack?.index; + } else if (textTracksSelectionBy === SelectedTrackType.LANGUAGE) { + value = selectedTrack?.language; + } else if (textTracksSelectionBy === SelectedTrackType.TITLE) { + value = selectedTrack?.title; } + setSelectedTextTrack({ + type: textTracksSelectionBy, + value: value, + }); } else { setTextTracks(data.textTracks); } diff --git a/examples/basic/src/components/Overlay.tsx b/examples/basic/src/components/Overlay.tsx index ba964b2f49..3c9c487b31 100644 --- a/examples/basic/src/components/Overlay.tsx +++ b/examples/basic/src/components/Overlay.tsx @@ -164,11 +164,7 @@ const _Overlay = forwardRef((props, ref) => { const onSelectedTextTrackChange = (itemValue: string) => { console.log('on value change ' + itemValue); - const type = - textTracksSelectionBy === 'index' - ? SelectedTrackType.INDEX - : SelectedTrackType.LANGUAGE; - setSelectedTextTrack({type, value: itemValue}); + setSelectedTextTrack({type: textTracksSelectionBy, value: itemValue}); }; const onSelectedVideoTrackChange = (itemValue: string) => { diff --git a/examples/basic/src/components/TextTracksSelector.tsx b/examples/basic/src/components/TextTracksSelector.tsx index ad4c1bffeb..b1fb04ff61 100644 --- a/examples/basic/src/components/TextTracksSelector.tsx +++ b/examples/basic/src/components/TextTracksSelector.tsx @@ -1,6 +1,10 @@ import {Picker} from '@react-native-picker/picker'; import {Text} from 'react-native'; -import type {TextTrack, SelectedTrack} from 'react-native-video'; +import { + type TextTrack, + type SelectedTrack, + SelectedTrackType, +} from 'react-native-video'; import styles from '../styles'; import React from 'react'; @@ -38,23 +42,15 @@ export const TextTrackSelector = ({ if (!track) { return; } - if (textTracksSelectionBy === 'index') { - return ( - - ); - } else { - return ( - - ); + let value; + if (textTracksSelectionBy === SelectedTrackType.INDEX) { + value = track.index; + } else if (textTracksSelectionBy === SelectedTrackType.LANGUAGE) { + value = track.language; + } else if (textTracksSelectionBy === SelectedTrackType.TITLE) { + value = track.title; } + return ; })} diff --git a/examples/basic/src/constants/general.ts b/examples/basic/src/constants/general.ts index e0d1218548..6325877d23 100644 --- a/examples/basic/src/constants/general.ts +++ b/examples/basic/src/constants/general.ts @@ -2,13 +2,18 @@ import { BufferConfig, DRMType, ISO639_1, + SelectedTrackType, TextTrackType, } from 'react-native-video'; import {SampleVideoSource} from '../types'; import {localeVideo} from '../assets'; import {Platform} from 'react-native'; -export const textTracksSelectionBy = 'index'; +// This constant allows to change how the sample behaves regarding to texts selection. +// You can change it to change how selector will use tracks information. +// by default, index will be displayed and index will be applied to selected tracks. +// You can also use LANGUAGE or TITLE +export const textTracksSelectionBy = SelectedTrackType.INDEX; export const isIos = Platform.OS === 'ios'; From 8b8ebe9410e95085e5602393c2ce3de814df4a96 Mon Sep 17 00:00:00 2001 From: Seyed Mostafa Hasani Date: Tue, 3 Sep 2024 10:29:24 +0330 Subject: [PATCH 08/17] fix(android): show the status bar and navigation bar after exiting full-screen mode (#4112) * fix(android): show the status bar and navigation bar after exiting full-screen mode --- .../java/com/brentvatne/exoplayer/ReactExoplayerView.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 37b68f486d..3ef807c3fb 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -2277,10 +2277,6 @@ public void setFullscreen(boolean fullscreen) { fullScreenPlayerView.show(); } UiThreadUtil.runOnUiThread(() -> { - originalFitsSystemWindows = window.getDecorView().getFitsSystemWindows(); - WindowCompat.setDecorFitsSystemWindows(window, false); - controller.hide(WindowInsetsCompat.Type.systemBars()); - controller.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); eventEmitter.onVideoFullscreenPlayerDidPresent.invoke(); }); } else { @@ -2291,8 +2287,6 @@ public void setFullscreen(boolean fullscreen) { setControls(controls); } UiThreadUtil.runOnUiThread(() -> { - WindowCompat.setDecorFitsSystemWindows(window, originalFitsSystemWindows); - controller.show(WindowInsetsCompat.Type.systemBars()); eventEmitter.onVideoFullscreenPlayerDidDismiss.invoke(); }); } From c51c061f435cf7a5e348e628c93d320d509de54f Mon Sep 17 00:00:00 2001 From: Seyed Mostafa Hasani Date: Tue, 3 Sep 2024 12:46:20 +0330 Subject: [PATCH 09/17] chore(android): clean up ReactExoplayerView class (#4141) --- .../exoplayer/ReactExoplayerView.java | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 3ef807c3fb..c3933ef896 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -7,7 +7,6 @@ import static androidx.media3.common.C.CONTENT_TYPE_SS; import static androidx.media3.common.C.TIME_END_OF_SOURCE; - import android.annotation.SuppressLint; import android.app.Activity; import android.app.ActivityManager; @@ -24,7 +23,6 @@ import android.os.Message; import android.text.TextUtils; import android.view.View; -import android.view.Window; import android.view.accessibility.CaptioningManager; import android.widget.FrameLayout; import android.widget.ImageButton; @@ -34,9 +32,6 @@ import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; -import androidx.core.view.WindowCompat; -import androidx.core.view.WindowInsetsCompat; -import androidx.core.view.WindowInsetsControllerCompat; import androidx.media3.common.AudioAttributes; import androidx.media3.common.C; import androidx.media3.common.Format; @@ -131,18 +126,17 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.uimanager.ThemedReactContext; import com.google.ads.interactivemedia.v3.api.AdError; -import com.google.ads.interactivemedia.v3.api.AdEvent; import com.google.ads.interactivemedia.v3.api.AdErrorEvent; -import com.google.ads.interactivemedia.v3.api.ImaSdkSettings; +import com.google.ads.interactivemedia.v3.api.AdEvent; import com.google.ads.interactivemedia.v3.api.ImaSdkFactory; +import com.google.ads.interactivemedia.v3.api.ImaSdkSettings; import com.google.common.collect.ImmutableList; import java.net.CookieHandler; import java.net.CookieManager; import java.net.CookiePolicy; -import java.lang.Math; -import java.util.List; import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -191,8 +185,6 @@ public class ReactExoplayerView extends FrameLayout implements private ExoPlayer player; private DefaultTrackSelector trackSelector; private boolean playerNeedsSource; - private MediaMetadata customMetadata; - private ServiceConnection playbackServiceConnection; private PlaybackServiceBinder playbackServiceBinder; @@ -205,7 +197,6 @@ public class ReactExoplayerView extends FrameLayout implements private long resumePosition; private boolean loadVideoStarted; private boolean isFullscreen; - private boolean originalFitsSystemWindows; private boolean isInBackground; private boolean isPaused; private boolean isBuffering; @@ -271,7 +262,7 @@ public class ReactExoplayerView extends FrameLayout implements private boolean viewHasDropped = false; - private String instanceId = String.valueOf(UUID.randomUUID()); + private final String instanceId = String.valueOf(UUID.randomUUID()); private CmcdConfiguration.Factory cmcdConfigurationFactory; @@ -1028,7 +1019,7 @@ private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessi .setUri(uri); // refresh custom Metadata - customMetadata = ConfigurationUtils.buildCustomMetadata(source.getMetadata()); + MediaMetadata customMetadata = ConfigurationUtils.buildCustomMetadata(source.getMetadata()); if (customMetadata != null) { mediaItemBuilder.setMediaMetadata(customMetadata); } @@ -2269,8 +2260,6 @@ public void setFullscreen(boolean fullscreen) { return; } - Window window = activity.getWindow(); - WindowInsetsControllerCompat controller = new WindowInsetsControllerCompat(window, window.getDecorView()); if (isFullscreen) { eventEmitter.onVideoFullscreenPlayerWillPresent.invoke(); if (fullScreenPlayerView != null) { From d6bae3cd076018f07556ab27af2779479bc7ff7d Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:33:43 +0200 Subject: [PATCH 10/17] fix(ios): fix onBandwidth update event (old ios api is deprecated and doens't work) (#4140) --- examples/basic/src/VideoPlayer.tsx | 6 ++++++ ios/Video/Features/RCTPlayerObserver.swift | 4 ++-- ios/Video/RCTVideo.swift | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index 5784a4e31b..83e66db762 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -30,6 +30,7 @@ import Video, { type SelectedTrack, type SelectedVideoTrack, type EnumValues, + OnBandwidthUpdateData, } from 'react-native-video'; import styles from './styles'; import {type AdditionalSourceInfo} from './types'; @@ -214,6 +215,10 @@ const VideoPlayer: FC = ({}) => { console.log('onPlaybackStateChanged', data); }; + const onVideoBandwidthUpdate = (data: OnBandwidthUpdateData) => { + console.log('onVideoBandwidthUpdate', data); + } + const onFullScreenExit = () => { // iOS pauses video on exit from full screen Platform.OS === 'ios' && setPaused(true); @@ -253,6 +258,7 @@ const VideoPlayer: FC = ({}) => { onAspectRatio={onAspectRatio} onReadyForDisplay={onReadyForDisplay} onBuffer={onVideoBuffer} + onBandwidthUpdate={onVideoBandwidthUpdate} onSeek={onSeek} repeat={repeat} selectedTextTrack={selectedTextTrack} diff --git a/ios/Video/Features/RCTPlayerObserver.swift b/ios/Video/Features/RCTPlayerObserver.swift index 4f88b23d87..198a51f5c8 100644 --- a/ios/Video/Features/RCTPlayerObserver.swift +++ b/ios/Video/Features/RCTPlayerObserver.swift @@ -284,11 +284,11 @@ class RCTPlayerObserver: NSObject, AVPlayerItemMetadataOutputPushDelegate, AVPla name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime, object: nil) - NotificationCenter.default.removeObserver(_handlers, name: NSNotification.Name.AVPlayerItemNewAccessLogEntry, object: player?.currentItem) + NotificationCenter.default.removeObserver(_handlers, name: AVPlayerItem.newAccessLogEntryNotification, object: player?.currentItem) NotificationCenter.default.addObserver(_handlers, selector: #selector(RCTPlayerObserverHandlerObjc.handleAVPlayerAccess(notification:)), - name: NSNotification.Name.AVPlayerItemNewAccessLogEntry, + name: AVPlayerItem.newAccessLogEntryNotification, object: player?.currentItem) } diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index 3aaf532c8a..7ff1a7e7de 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -1661,7 +1661,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } guard let lastEvent = accessLog.events.last else { return } - onVideoBandwidthUpdate?(["bitrate": lastEvent.observedBitrate, "target": reactTag]) + onVideoBandwidthUpdate?(["bitrate": lastEvent.indicatedBitrate, "target": reactTag]) } func handleTracksChange(playerItem _: AVPlayerItem, change _: NSKeyValueObservedChange<[AVPlayerItemTrack]>) { From 9707081ab90a305c89fb8d68e6751ad0747f2e51 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Wed, 4 Sep 2024 09:53:30 +0200 Subject: [PATCH 11/17] Chore/rework fullscreen configuration (#4142) * feat(android): handle navigation bar status in full-screen mode * chore: update default value of prop * chore(android): rework fullscreen configuration --------- Co-authored-by: mostafahasani --- .../brentvatne/common/api/ControlsConfig.kt | 5 +- .../exoplayer/FullScreenPlayerView.kt | 97 ++++++++++++++++++- .../exoplayer/ReactExoplayerView.java | 17 ++-- docs/pages/component/props.mdx | 16 +-- examples/basic/package.json | 1 + examples/basic/src/VideoPlayer.tsx | 12 ++- examples/basic/yarn.lock | 8 ++ src/specs/VideoNativeComponent.ts | 6 +- src/types/video.ts | 2 + 9 files changed, 141 insertions(+), 23 deletions(-) diff --git a/android/src/main/java/com/brentvatne/common/api/ControlsConfig.kt b/android/src/main/java/com/brentvatne/common/api/ControlsConfig.kt index 52736db2f3..a50482c658 100644 --- a/android/src/main/java/com/brentvatne/common/api/ControlsConfig.kt +++ b/android/src/main/java/com/brentvatne/common/api/ControlsConfig.kt @@ -7,6 +7,8 @@ class ControlsConfig { var hideSeekBar: Boolean = false var seekIncrementMS: Int = 10000 var hideDuration: Boolean = false + var hideNavigationBarOnFullScreenMode: Boolean = true + var hideNotificationBarOnFullScreenMode: Boolean = true companion object { @JvmStatic @@ -17,8 +19,9 @@ class ControlsConfig { config.hideSeekBar = ReactBridgeUtils.safeGetBool(src, "hideSeekBar", false) config.seekIncrementMS = ReactBridgeUtils.safeGetInt(src, "seekIncrementMS", 10000) config.hideDuration = ReactBridgeUtils.safeGetBool(src, "hideDuration", false) + config.hideNavigationBarOnFullScreenMode = ReactBridgeUtils.safeGetBool(src, "hideNavigationBarOnFullScreenMode", true) + config.hideNotificationBarOnFullScreenMode = ReactBridgeUtils.safeGetBool(src, "hideNotificationBarOnFullScreenMode", true) } - return config } } diff --git a/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.kt b/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.kt index 00f9397524..1b9b1ce30c 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.kt +++ b/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.kt @@ -6,11 +6,16 @@ import android.content.Context import android.os.Handler import android.os.Looper import android.view.ViewGroup +import android.view.Window import android.view.WindowManager import android.widget.FrameLayout import android.widget.ImageButton import androidx.activity.OnBackPressedCallback +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat import androidx.media3.ui.LegacyPlayerControlView +import com.brentvatne.common.api.ControlsConfig import com.brentvatne.common.toolbox.DebugLog import java.lang.ref.WeakReference @@ -20,14 +25,22 @@ class FullScreenPlayerView( private val exoPlayerView: ExoPlayerView, private val reactExoplayerView: ReactExoplayerView, private val playerControlView: LegacyPlayerControlView?, - private val onBackPressedCallback: OnBackPressedCallback -) : Dialog(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen) { + private val onBackPressedCallback: OnBackPressedCallback, + private val controlsConfig: ControlsConfig +) : Dialog(context, android.R.style.Theme_Black_NoTitleBar) { private var parent: ViewGroup? = null private val containerView = FrameLayout(context) private val mKeepScreenOnHandler = Handler(Looper.getMainLooper()) private val mKeepScreenOnUpdater = KeepScreenOnUpdater(this) + // As this view is fullscreen we need to save initial state and restore it afterward + // Following variables save UI state when open the view + // restoreUIState, will reapply these values + private var initialSystemBarsBehavior: Int? = null + private var initialNavigationBarIsVisible: Boolean? = null + private var initialNotificationBarIsVisible: Boolean? = null + private class KeepScreenOnUpdater(fullScreenPlayerView: FullScreenPlayerView) : Runnable { private val mFullscreenPlayer = WeakReference(fullScreenPlayerView) @@ -59,6 +72,15 @@ class FullScreenPlayerView( init { setContentView(containerView, generateDefaultLayoutParams()) + + window?.let { + val inset = WindowInsetsControllerCompat(it, it.decorView) + initialSystemBarsBehavior = inset.systemBarsBehavior + initialNavigationBarIsVisible = ViewCompat.getRootWindowInsets(it.decorView) + ?.isVisible(WindowInsetsCompat.Type.navigationBars()) == true + initialNotificationBarIsVisible = ViewCompat.getRootWindowInsets(it.decorView) + ?.isVisible(WindowInsetsCompat.Type.statusBars()) == true + } } override fun onBackPressed() { super.onBackPressed() @@ -75,6 +97,7 @@ class FullScreenPlayerView( parent?.removeView(it) containerView.addView(it, generateDefaultLayoutParams()) } + updateNavigationBarVisibility() } override fun onStop() { @@ -89,6 +112,19 @@ class FullScreenPlayerView( } parent?.requestLayout() parent = null + restoreSystemUI() + } + + // restore system UI state + private fun restoreSystemUI() { + window?.let { + updateNavigationBarVisibility( + it, + initialNavigationBarIsVisible, + initialNotificationBarIsVisible, + initialSystemBarsBehavior + ) + } } private fun getFullscreenIconResource(isFullscreen: Boolean): Int = @@ -127,4 +163,61 @@ class FullScreenPlayerView( layoutParams.setMargins(0, 0, 0, 0) return layoutParams } + + private fun updateBarVisibility( + inset: WindowInsetsControllerCompat, + type: Int, + shouldHide: Boolean?, + initialVisibility: Boolean?, + systemBarsBehavior: Int? = null + ) { + shouldHide?.takeIf { it != initialVisibility }?.let { + if (it) { + inset.hide(type) + systemBarsBehavior?.let { behavior -> inset.systemBarsBehavior = behavior } + } else { + inset.show(type) + } + } + } + + // Move the UI to fullscreen. + // if you change this code, remember to check that the UI is well restored in restoreUIState + private fun updateNavigationBarVisibility( + window: Window, + hideNavigationBarOnFullScreenMode: Boolean?, + hideNotificationBarOnFullScreenMode: Boolean?, + systemBarsBehavior: Int? + ) { + // Configure the behavior of the hidden system bars. + val inset = WindowInsetsControllerCompat(window, window.decorView) + + // Update navigation bar visibility and apply systemBarsBehavior if hiding + updateBarVisibility( + inset, + WindowInsetsCompat.Type.navigationBars(), + hideNavigationBarOnFullScreenMode, + initialNavigationBarIsVisible, + systemBarsBehavior + ) + + // Update notification bar visibility (no need for systemBarsBehavior here) + updateBarVisibility( + inset, + WindowInsetsCompat.Type.statusBars(), + hideNotificationBarOnFullScreenMode, + initialNotificationBarIsVisible + ) + } + + private fun updateNavigationBarVisibility() { + window?.let { + updateNavigationBarVisibility( + it, + controlsConfig.hideNavigationBarOnFullScreenMode, + controlsConfig.hideNotificationBarOnFullScreenMode, + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + ) + } + } } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index c3933ef896..01d6a223b1 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -427,15 +427,6 @@ public void onVisibilityChange(int visibility) { }); } - if (fullScreenPlayerView == null) { - fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, this, playerControlView, new OnBackPressedCallback(true) { - @Override - public void handleOnBackPressed() { - setFullscreen(false); - } - }); - } - // Setting the player for the playerControlView playerControlView.setPlayer(player); playPauseControlContainer = playerControlView.findViewById(R.id.exo_play_pause_container); @@ -2261,6 +2252,12 @@ public void setFullscreen(boolean fullscreen) { } if (isFullscreen) { + fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, this, playerControlView, new OnBackPressedCallback(true) { + @Override + public void handleOnBackPressed() { + setFullscreen(false); + } + }, controlsConfig); eventEmitter.onVideoFullscreenPlayerWillPresent.invoke(); if (fullScreenPlayerView != null) { fullScreenPlayerView.show(); @@ -2383,4 +2380,4 @@ public void setControlsStyles(ControlsConfig controlsStyles) { controlsConfig = controlsStyles; refreshProgressBarVisibility(); } -} +} \ No newline at end of file diff --git a/docs/pages/component/props.mdx b/docs/pages/component/props.mdx index 47971ba83e..655161cde5 100644 --- a/docs/pages/component/props.mdx +++ b/docs/pages/component/props.mdx @@ -144,11 +144,13 @@ If needed, you can also add your controls or use a package like [react-native-vi Adjust the control styles. This prop is need only if `controls={true}` and is an object. See the list of prop supported below. -| Property | Type | Description | -|-----------------|---------|-----------------------------------------------------------------------------------------| -| hideSeekBar | boolean | The default value is `false`, allowing you to hide the seek bar for live broadcasts. | -| hideDuration | boolean | The default value is `false`, allowing you to hide the duration. | -| seekIncrementMS | number | The default value is `10000`. You can change the value to increment forward and rewind. | +| Property | Type | Description | +|-----------------------------------|---------|--------------------------------------------------------------------------------------------| +| hideSeekBar | boolean | The default value is `false`, allowing you to hide the seek bar for live broadcasts. | +| hideDuration | boolean | The default value is `false`, allowing you to hide the duration. | +| seekIncrementMS | number | The default value is `10000`. You can change the value to increment forward and rewind. | +| hideNavigationBarOnFullScreenMode | boolean | The default value is `true`, allowing you to hide the navigation bar on full-screen mode. | +| hideNotificationBarOnFullScreenMode | boolean | The default value is `true`, allowing you to hide the notification bar on full-screen mode. | Example with default values: @@ -157,6 +159,8 @@ controlsStyles={{ hideSeekBar: false, hideDuration: false, seekIncrementMS: 10000, + hideNavigationBarOnFullScreenMode: true, + hideNotificationBarOnFullScreenMode: true, }} ``` @@ -1089,4 +1093,4 @@ Example: }} // or other video props /> -``` \ No newline at end of file +``` diff --git a/examples/basic/package.json b/examples/basic/package.json index 5e0665bcb5..a0fcc35671 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -17,6 +17,7 @@ "expo": "^51.0.31", "expo-asset": "~10.0.10", "expo-image": "^1.12.15", + "expo-navigation-bar": "~3.0.7", "react": "18.2.0", "react-native": "0.74.5", "react-native-windows": "0.74.19" diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index 83e66db762..53e36e2ddf 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -1,8 +1,8 @@ 'use strict'; -import React, {type FC, useCallback, useRef, useState} from 'react'; +import React, {type FC, useCallback, useRef, useState, useEffect} from 'react'; -import {Platform, TouchableOpacity, View} from 'react-native'; +import {Platform, TouchableOpacity, View, StatusBar} from 'react-native'; import Video, { VideoRef, @@ -36,6 +36,7 @@ import styles from './styles'; import {type AdditionalSourceInfo} from './types'; import {bufferConfig, srcList, textTracksSelectionBy} from './constants'; import {Overlay, toast, VideoLoader} from './components'; +import * as NavigationBar from 'expo-navigation-bar'; type Props = NonNullable; @@ -104,6 +105,10 @@ const VideoPlayer: FC = ({}) => { goToChannel((srcListId + srcList.length - 1) % srcList.length); }, [goToChannel, srcListId]); + useEffect(() => { + NavigationBar.setVisibilityAsync('visible'); + }, []); + const onAudioTracks = (data: OnAudioTracksData) => { const selectedTrack = data.audioTracks?.find((x: AudioTrack) => { return x.selected; @@ -226,6 +231,8 @@ const VideoPlayer: FC = ({}) => { return ( +