react-native-theoplayer 10.13.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/android/build.gradle +13 -7
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar +0 -0
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{10.12.0/ads-wrapper-10.12.0.pom → 11.0.0/ads-wrapper-11.0.0.pom} +3 -3
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
- package/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +7 -7
- package/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +7 -12
- package/android/src/main/java/com/theoplayer/cast/CastModule.kt +0 -1
- package/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +14 -17
- package/ios/ads/THEOplayerRCTAdAdapter.swift +2 -2
- package/ios/ads/THEOplayerRCTAdsNative.swift +1 -1
- package/lib/commonjs/api/event/PlayerEvent.js +0 -9
- package/lib/commonjs/api/event/PlayerEvent.js.map +1 -1
- package/lib/commonjs/api/player/PlayerEventMap.js +0 -1
- package/lib/commonjs/api/player/PlayerEventMap.js.map +1 -1
- package/lib/commonjs/api/source/SourceDescription.js +0 -80
- package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
- package/lib/commonjs/api/track/TextTrack.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.js +0 -1
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +5 -3
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +0 -3
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +0 -3
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/WebEventForwarder.js +0 -1
- package/lib/commonjs/internal/adapter/WebEventForwarder.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js +1 -13
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/commonjs/internal/adapter/web/TrackUtils.js +3 -1
- package/lib/commonjs/internal/adapter/web/TrackUtils.js.map +1 -1
- package/lib/commonjs/internal/hooks/useIsAttached.js +48 -0
- package/lib/commonjs/internal/hooks/useIsAttached.js.map +1 -0
- package/lib/commonjs/manifest.json +1 -1
- package/lib/module/api/event/PlayerEvent.js +0 -10
- package/lib/module/api/event/PlayerEvent.js.map +1 -1
- package/lib/module/api/player/PlayerEventMap.js +0 -1
- package/lib/module/api/player/PlayerEventMap.js.map +1 -1
- package/lib/module/api/source/SourceDescription.js +1 -88
- package/lib/module/api/source/SourceDescription.js.map +1 -1
- package/lib/module/api/track/TextTrack.js.map +1 -1
- package/lib/module/internal/THEOplayerView.js +1 -2
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/THEOplayerView.web.js +5 -3
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +0 -3
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js +0 -3
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/module/internal/adapter/WebEventForwarder.js +1 -2
- package/lib/module/internal/adapter/WebEventForwarder.js.map +1 -1
- package/lib/module/internal/adapter/event/PlayerEvents.js +0 -11
- package/lib/module/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/module/internal/adapter/web/TrackUtils.js +3 -1
- package/lib/module/internal/adapter/web/TrackUtils.js.map +1 -1
- package/lib/module/internal/hooks/useIsAttached.js +43 -0
- package/lib/module/internal/hooks/useIsAttached.js.map +1 -0
- package/lib/module/manifest.json +1 -1
- package/lib/typescript/api/event/PlayerEvent.d.ts +0 -19
- package/lib/typescript/api/event/PlayerEvent.d.ts.map +1 -1
- package/lib/typescript/api/player/PlayerEventMap.d.ts +1 -11
- package/lib/typescript/api/player/PlayerEventMap.d.ts.map +1 -1
- package/lib/typescript/api/player/THEOplayer.d.ts +0 -6
- package/lib/typescript/api/player/THEOplayer.d.ts.map +1 -1
- package/lib/typescript/api/source/SourceDescription.d.ts +0 -20
- package/lib/typescript/api/source/SourceDescription.d.ts.map +1 -1
- package/lib/typescript/api/theolive/TheoLiveSource.d.ts +3 -3
- package/lib/typescript/api/theolive/TheoLiveSource.d.ts.map +1 -1
- package/lib/typescript/api/track/TextTrack.d.ts +11 -0
- package/lib/typescript/api/track/TextTrack.d.ts.map +1 -1
- package/lib/typescript/internal/THEOplayerView.d.ts.map +1 -1
- package/lib/typescript/internal/THEOplayerView.web.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +0 -1
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +0 -1
- package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/WebEventForwarder.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts +1 -9
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/web/TrackUtils.d.ts.map +1 -1
- package/lib/typescript/internal/hooks/useIsAttached.d.ts +16 -0
- package/lib/typescript/internal/hooks/useIsAttached.d.ts.map +1 -0
- package/package.json +9 -9
- package/react-native-theoplayer.podspec +8 -8
- package/src/api/event/PlayerEvent.ts +0 -21
- package/src/api/player/PlayerEventMap.ts +0 -12
- package/src/api/player/THEOplayer.ts +0 -7
- package/src/api/source/SourceDescription.ts +0 -22
- package/src/api/theolive/TheoLiveSource.ts +3 -3
- package/src/api/track/TextTrack.ts +12 -0
- package/src/internal/THEOplayerView.tsx +0 -2
- package/src/internal/THEOplayerView.web.tsx +6 -4
- package/src/internal/adapter/THEOplayerAdapter.ts +0 -4
- package/src/internal/adapter/THEOplayerWebAdapter.ts +0 -4
- package/src/internal/adapter/WebEventForwarder.ts +0 -2
- package/src/internal/adapter/event/PlayerEvents.ts +0 -13
- package/src/internal/adapter/track/TextTrackStyleAdapter.ts +4 -4
- package/src/internal/adapter/web/TrackUtils.ts +2 -1
- package/src/internal/hooks/useIsAttached.ts +44 -0
- package/src/manifest.json +1 -1
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-theoplayer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.0.0",
|
|
4
4
|
"description": "A THEOplayer video component for react-native.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@eslint/js": "^9.13.0",
|
|
60
60
|
"@expo/config-plugins": "^10.0.2",
|
|
61
|
-
"@react-native/eslint-config": "^0.
|
|
62
|
-
"@types/react": "^19.2.
|
|
61
|
+
"@react-native/eslint-config": "^0.84.1",
|
|
62
|
+
"@types/react": "^19.2.14",
|
|
63
63
|
"eslint": "^8.57.1",
|
|
64
64
|
"eslint-config-prettier": "^9.1.0",
|
|
65
65
|
"eslint-plugin-react-hooks": "^7.0.0",
|
|
@@ -67,10 +67,10 @@
|
|
|
67
67
|
"lint-staged": "^15.5.1",
|
|
68
68
|
"pod-install": "^0.1.39",
|
|
69
69
|
"prettier": "^3.5.3",
|
|
70
|
-
"react": "^19.2.
|
|
71
|
-
"react-native": "^0.
|
|
70
|
+
"react": "^19.2.3",
|
|
71
|
+
"react-native": "^0.84.1",
|
|
72
72
|
"react-native-builder-bob": "^0.39.1",
|
|
73
|
-
"theoplayer": "^
|
|
73
|
+
"theoplayer": "^11.0.0",
|
|
74
74
|
"typedoc": "^0.25.13",
|
|
75
75
|
"typedoc-plugin-external-resolver": "^1.0.3",
|
|
76
76
|
"typedoc-plugin-mdn-links": "^3.3.4",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"peerDependencies": {
|
|
81
81
|
"react": "*",
|
|
82
82
|
"react-native": "*",
|
|
83
|
-
"theoplayer": "^
|
|
83
|
+
"theoplayer": "^11"
|
|
84
84
|
},
|
|
85
85
|
"peerDependenciesMeta": {
|
|
86
86
|
"theoplayer": {
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
90
|
"engines": {
|
|
91
|
-
"node": ">=
|
|
91
|
+
"node": ">=20"
|
|
92
92
|
},
|
|
93
93
|
"eslintIgnore": [
|
|
94
94
|
"node_modules/",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
]
|
|
110
110
|
},
|
|
111
111
|
"dependencies": {
|
|
112
|
-
"@theoplayer/cmcd-connector-web": "^1.
|
|
112
|
+
"@theoplayer/cmcd-connector-web": "^1.5.0",
|
|
113
113
|
"buffer": "^6.0.3"
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -32,7 +32,7 @@ Pod::Spec.new do |s|
|
|
|
32
32
|
s.license = package["license"]
|
|
33
33
|
s.authors = package["author"]
|
|
34
34
|
|
|
35
|
-
s.platforms = { :ios => "
|
|
35
|
+
s.platforms = { :ios => "15.0", :tvos => "15.0" }
|
|
36
36
|
s.source = { :git => "https://www.theoplayer.com/.git", :tag => "#{s.version}" }
|
|
37
37
|
|
|
38
38
|
s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift', 'ios/pip/*.swift', 'ios/backgroundAudio/*.swift', 'ios/cache/*.swift', 'ios/sideloadedMetadata/*.swift', 'ios/eventBroadcasting/*.swift' , 'ios/ui/*.swift', 'ios/presentationMode/*.swift', 'ios/viewController/*.swift', 'ios/THEOlive/*.swift', 'ios/THEOads/*.swift', 'ios/millicast/*.swift'
|
|
@@ -43,37 +43,37 @@ Pod::Spec.new do |s|
|
|
|
43
43
|
|
|
44
44
|
# THEOplayer Dependency
|
|
45
45
|
puts "Adding THEOplayerSDK-core"
|
|
46
|
-
s.dependency "THEOplayerSDK-core", "~>
|
|
46
|
+
s.dependency "THEOplayerSDK-core", "~> 11.0"
|
|
47
47
|
|
|
48
48
|
# THEOlive Dependency
|
|
49
49
|
puts "Adding THEOplayer-Integration-THEOlive"
|
|
50
|
-
s.dependency "THEOplayer-Integration-THEOlive", "~>
|
|
50
|
+
s.dependency "THEOplayer-Integration-THEOlive", "~> 11.0"
|
|
51
51
|
|
|
52
52
|
# Feature based integration dependencies
|
|
53
53
|
if theofeatures.include?("GOOGLE_IMA")
|
|
54
54
|
puts "Adding THEOplayer-Integration-GoogleIMA"
|
|
55
|
-
s.dependency "THEOplayer-Integration-GoogleIMA", "~>
|
|
55
|
+
s.dependency "THEOplayer-Integration-GoogleIMA", "~> 11.0"
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
if theofeatures.include?("CHROMECAST")
|
|
59
59
|
puts "Adding THEOplayer-Integration-GoogleCast"
|
|
60
|
-
s.ios.dependency "THEOplayer-Integration-GoogleCast", "~>
|
|
60
|
+
s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 11.0"
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
if theofeatures.include?("THEO_ADS")
|
|
64
64
|
puts "Adding THEOplayer-Integration-THEOads"
|
|
65
|
-
s.dependency "THEOplayer-Integration-THEOads", "~>
|
|
65
|
+
s.dependency "THEOplayer-Integration-THEOads", "~> 11.0"
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
if theofeatures.include?("MILLICAST")
|
|
69
69
|
puts "Adding THEOplayer-Integration-Millicast"
|
|
70
|
-
s.dependency "THEOplayer-Integration-Millicast", "~>
|
|
70
|
+
s.dependency "THEOplayer-Integration-Millicast", "~> 11.0"
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
# Feature based connector dependencies
|
|
74
74
|
if theofeatures.include?("SIDELOADED_TEXTTRACKS")
|
|
75
75
|
puts "Adding THEOplayer-Connector-SideloadedSubtitle"
|
|
76
|
-
s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~>
|
|
76
|
+
s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 11.0"
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
end
|
|
@@ -69,27 +69,6 @@ export interface DimensionChangeEvent extends Event<PlayerEventType.DIMENSION_CH
|
|
|
69
69
|
readonly height: number;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
/**
|
|
73
|
-
* Dispatched when player is resized.
|
|
74
|
-
*
|
|
75
|
-
* @category Events
|
|
76
|
-
* @category Player
|
|
77
|
-
* @public
|
|
78
|
-
*
|
|
79
|
-
* @deprecated use {@link DimensionChangeEvent} instead. This event is set for removal in version 11.
|
|
80
|
-
*/
|
|
81
|
-
export interface ResizeEvent extends Event<PlayerEventType.RESIZE> {
|
|
82
|
-
/**
|
|
83
|
-
* The player's current width.
|
|
84
|
-
*/
|
|
85
|
-
readonly width: number;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* The player's current height.
|
|
89
|
-
*/
|
|
90
|
-
readonly height: number;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
72
|
/**
|
|
94
73
|
* Dispatched when video is resized.
|
|
95
74
|
*
|
|
@@ -12,7 +12,6 @@ import type {
|
|
|
12
12
|
TimeUpdateEvent,
|
|
13
13
|
PresentationModeChangeEvent,
|
|
14
14
|
VolumeChangeEvent,
|
|
15
|
-
ResizeEvent,
|
|
16
15
|
SeekedEvent,
|
|
17
16
|
SeekingEvent,
|
|
18
17
|
VideoResizeEvent,
|
|
@@ -62,10 +61,6 @@ export enum PlayerEventType {
|
|
|
62
61
|
WAITING = 'waiting',
|
|
63
62
|
PRESENTATIONMODE_CHANGE = 'presentationmodechange',
|
|
64
63
|
DESTROY = 'destroy',
|
|
65
|
-
/**
|
|
66
|
-
* @deprecated Use {@link PlayerEventType.DIMENSION_CHANGE} instead. This event is set for removal in version 11.
|
|
67
|
-
*/
|
|
68
|
-
RESIZE = 'resize',
|
|
69
64
|
DIMENSION_CHANGE = 'dimensionchange',
|
|
70
65
|
VIDEO_RESIZE = 'videoresize',
|
|
71
66
|
}
|
|
@@ -238,13 +233,6 @@ export interface PlayerEventMap {
|
|
|
238
233
|
*/
|
|
239
234
|
[PlayerEventType.DESTROY]: Event<PlayerEventType.DESTROY>;
|
|
240
235
|
|
|
241
|
-
/**
|
|
242
|
-
* Dispatched when the player size changes.
|
|
243
|
-
*
|
|
244
|
-
* @deprecated Use {@link dimensionchange} instead. This event is set for removal in version 11.
|
|
245
|
-
*/
|
|
246
|
-
[PlayerEventType.RESIZE]: ResizeEvent;
|
|
247
|
-
|
|
248
236
|
/**
|
|
249
237
|
* Dispatched when the player size changes.
|
|
250
238
|
*/
|
|
@@ -287,11 +287,4 @@ export interface THEOplayer extends EventDispatcher<PlayerEventMap> {
|
|
|
287
287
|
* The API for THEOlive.
|
|
288
288
|
*/
|
|
289
289
|
readonly theoLive: TheoLiveAPI;
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* The API for THEOlive.
|
|
293
|
-
*
|
|
294
|
-
* @deprecated use {@link THEOplayer.theoLive} instead.
|
|
295
|
-
*/
|
|
296
|
-
readonly theolive: TheoLiveAPI;
|
|
297
290
|
}
|
|
@@ -50,18 +50,6 @@ export type Sources = Source | Source[];
|
|
|
50
50
|
*/
|
|
51
51
|
export type CrossOriginSetting = '' | 'anonymous' | 'use-credentials';
|
|
52
52
|
|
|
53
|
-
/**
|
|
54
|
-
* The integration identifier of a source specific to a pre-integration, represented by a value from the following list:
|
|
55
|
-
* <br/> - `'theolive'`: The source contains the THEOlive initialization url.
|
|
56
|
-
*
|
|
57
|
-
* @category Source
|
|
58
|
-
* @public
|
|
59
|
-
* @deprecated use {@link TypedSource.type} instead.
|
|
60
|
-
*/
|
|
61
|
-
export enum SourceIntegrationId {
|
|
62
|
-
THEO_LIVE = 'theolive'
|
|
63
|
-
}
|
|
64
|
-
|
|
65
53
|
/**
|
|
66
54
|
* Describes the configuration of a player's source.
|
|
67
55
|
*
|
|
@@ -284,16 +272,6 @@ export interface TextTrackDescription {
|
|
|
284
272
|
* @public
|
|
285
273
|
*/
|
|
286
274
|
export interface BaseSource {
|
|
287
|
-
/**
|
|
288
|
-
* The integration ID of the source.
|
|
289
|
-
*
|
|
290
|
-
* @remarks
|
|
291
|
-
* <br/> - This can be used to signal that a source is specific to an integration.
|
|
292
|
-
*
|
|
293
|
-
* @deprecated use {@link TypedSource.type} instead.
|
|
294
|
-
*/
|
|
295
|
-
integration?: SourceIntegrationId;
|
|
296
|
-
|
|
297
275
|
/**
|
|
298
276
|
* The cross-origin setting of the source.
|
|
299
277
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TypedSource } from 'react-native-theoplayer';
|
|
2
2
|
import { WebrtcOptions } from './WebrtcOptions';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -9,9 +9,9 @@ import { WebrtcOptions } from './WebrtcOptions';
|
|
|
9
9
|
*/
|
|
10
10
|
export interface TheoLiveSource extends TypedSource {
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* The source URL of the media resource.
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
src: string;
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* The content type.
|
|
@@ -149,6 +149,18 @@ export interface TextTrack extends Track {
|
|
|
149
149
|
* <br/> - For HLS: the corresponding #EXT-X-MEDIA tag contains the attributes TYPE=SUBTITLES and FORCED=YES (not supported yet)
|
|
150
150
|
*/
|
|
151
151
|
readonly forced: boolean;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The closed caption service number of the text track.
|
|
155
|
+
*
|
|
156
|
+
* @platform web,android
|
|
157
|
+
*
|
|
158
|
+
* @remarks
|
|
159
|
+
* <br/> - For CEA-608 caption tracks, this holds the channel number.
|
|
160
|
+
* <br/> - For CEA-708 caption tracks, this holds the service number.
|
|
161
|
+
* <br/> - Otherwise, this is `undefined`.
|
|
162
|
+
*/
|
|
163
|
+
readonly captionChannel?: number;
|
|
152
164
|
}
|
|
153
165
|
|
|
154
166
|
/**
|
|
@@ -39,7 +39,6 @@ import {
|
|
|
39
39
|
DefaultTextTrackListEvent,
|
|
40
40
|
DefaultVolumeChangeEvent,
|
|
41
41
|
DefaultTimeupdateEvent,
|
|
42
|
-
DefaultResizeEvent,
|
|
43
42
|
DefaultSeekingEvent,
|
|
44
43
|
DefaultSeekedEvent,
|
|
45
44
|
DefaultVideoResizeEvent,
|
|
@@ -420,7 +419,6 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
|
|
|
420
419
|
private _onDimensionChange = (event: NativeSyntheticEvent<NativeDimensionChangeEvent>) => {
|
|
421
420
|
const width = event.nativeEvent.width;
|
|
422
421
|
const height = event.nativeEvent.height;
|
|
423
|
-
this._facade?.dispatchEvent(new DefaultResizeEvent(width, height));
|
|
424
422
|
this._facade?.dispatchEvent(new DefaultDimensionChangeEvent(width, height));
|
|
425
423
|
};
|
|
426
424
|
|
|
@@ -2,16 +2,18 @@ import React, { useEffect, useRef } from 'react';
|
|
|
2
2
|
import type { THEOplayerViewProps } from 'react-native-theoplayer';
|
|
3
3
|
import { ChromelessPlayer } from 'theoplayer';
|
|
4
4
|
import { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';
|
|
5
|
+
import { useIsAttached } from './hooks/useIsAttached';
|
|
5
6
|
|
|
6
7
|
export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProps>) {
|
|
7
8
|
const { config, children, onPlayerReady, onPlayerDestroy } = props;
|
|
8
9
|
const player = useRef<ChromelessPlayer | null>(null);
|
|
9
10
|
const adapter = useRef<THEOplayerWebAdapter | null>(null);
|
|
10
|
-
const container = useRef<
|
|
11
|
+
const container = useRef<HTMLDivElement | null>(null);
|
|
12
|
+
const attachedToDocument = useIsAttached(container);
|
|
11
13
|
|
|
12
14
|
useEffect(() => {
|
|
13
|
-
// Create player inside container.
|
|
14
|
-
if (container.current) {
|
|
15
|
+
// Create player inside container once it is attached to the document.
|
|
16
|
+
if (container.current && attachedToDocument) {
|
|
15
17
|
const ads = {
|
|
16
18
|
...config?.ads,
|
|
17
19
|
googleIma: {
|
|
@@ -51,7 +53,7 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
|
|
|
51
53
|
};
|
|
52
54
|
// TODO: Follow the rules of react hooks, to be fixed in next major because it's a breaking change for some customers.
|
|
53
55
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
-
}, [container]);
|
|
56
|
+
}, [container, attachedToDocument]);
|
|
55
57
|
|
|
56
58
|
return (
|
|
57
59
|
// Note: `display: contents` causes an element's children to appear as if they were direct children of the element's parent,
|
|
@@ -243,10 +243,6 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
243
243
|
return this._theoliveAdapter;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
get theolive(): TheoLiveAPI {
|
|
247
|
-
return this._theoliveAdapter;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
246
|
set autoplay(autoplay: boolean) {
|
|
251
247
|
this._state.autoplay = autoplay;
|
|
252
248
|
NativePlayerModule.setAutoplay(this._view.nativeHandle, autoplay);
|
|
@@ -374,10 +374,6 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
374
374
|
return this._theoliveAdapter;
|
|
375
375
|
}
|
|
376
376
|
|
|
377
|
-
public get theolive(): TheoLiveAPI {
|
|
378
|
-
return this._theoliveAdapter;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
377
|
public get version(): PlayerVersion {
|
|
382
378
|
return {
|
|
383
379
|
version: nativeVersion,
|
|
@@ -62,7 +62,6 @@ import {
|
|
|
62
62
|
DefaultProgressEvent,
|
|
63
63
|
DefaultRateChangeEvent,
|
|
64
64
|
DefaultReadyStateChangeEvent,
|
|
65
|
-
DefaultResizeEvent,
|
|
66
65
|
DefaultSeekedEvent,
|
|
67
66
|
DefaultSeekingEvent,
|
|
68
67
|
DefaultSegmentNotFoundEvent,
|
|
@@ -289,7 +288,6 @@ export class WebEventForwarder {
|
|
|
289
288
|
};
|
|
290
289
|
|
|
291
290
|
private readonly onDimensionChange = (event: NativeDimensionChangeEvent) => {
|
|
292
|
-
this._facade.dispatchEvent(new DefaultResizeEvent(event.width, event.height));
|
|
293
291
|
this._facade.dispatchEvent(new DefaultDimensionChangeEvent(event.width, event.height));
|
|
294
292
|
};
|
|
295
293
|
|
|
@@ -30,7 +30,6 @@ import {
|
|
|
30
30
|
Quality,
|
|
31
31
|
RateChangeEvent,
|
|
32
32
|
ReadyStateChangeEvent,
|
|
33
|
-
ResizeEvent,
|
|
34
33
|
SeekedEvent,
|
|
35
34
|
SeekingEvent,
|
|
36
35
|
SegmentNotFoundEvent,
|
|
@@ -103,18 +102,6 @@ export class DefaultVolumeChangeEvent extends BaseEvent<PlayerEventType.VOLUME_C
|
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
|
|
106
|
-
/**
|
|
107
|
-
* @deprecated Use {@link DefaultDimensionChangeEvent} instead. This event is set for removal in version 11.
|
|
108
|
-
*/
|
|
109
|
-
export class DefaultResizeEvent extends BaseEvent<PlayerEventType.RESIZE> implements ResizeEvent {
|
|
110
|
-
constructor(
|
|
111
|
-
public width: number,
|
|
112
|
-
public height: number,
|
|
113
|
-
) {
|
|
114
|
-
super(PlayerEventType.RESIZE);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
105
|
export class DefaultDimensionChangeEvent extends BaseEvent<PlayerEventType.DIMENSION_CHANGE> implements DimensionChangeEvent {
|
|
119
106
|
constructor(
|
|
120
107
|
public width: number,
|
|
@@ -77,14 +77,14 @@ export class TextTrackStyleAdapter implements TextTrackStyle {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
get fontPath(): string | undefined {
|
|
80
|
-
return this._fontPath
|
|
80
|
+
return this._fontPath;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
set fontPath(path: string) {
|
|
84
|
-
this._fontPath = path
|
|
84
|
+
this._fontPath = path;
|
|
85
85
|
NativePlayerModule.setTextTrackStyle(this._view.nativeHandle, {
|
|
86
|
-
fontPath: path
|
|
87
|
-
})
|
|
86
|
+
fontPath: path,
|
|
87
|
+
});
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
get fontSize(): string | undefined {
|
|
@@ -41,7 +41,7 @@ export function fromNativeTextTrackList(tracks: NativeTextTrackList): TextTrack[
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export function fromNativeTextTrack(track: NativeTextTrack): TextTrack {
|
|
44
|
-
const { id, uid, kind, label, language, mode, type, src, forced } = track;
|
|
44
|
+
const { id, uid, kind, label, language, mode, type, src, forced, captionChannel } = track;
|
|
45
45
|
|
|
46
46
|
return {
|
|
47
47
|
id,
|
|
@@ -53,6 +53,7 @@ export function fromNativeTextTrack(track: NativeTextTrack): TextTrack {
|
|
|
53
53
|
type,
|
|
54
54
|
src,
|
|
55
55
|
forced,
|
|
56
|
+
captionChannel,
|
|
56
57
|
cues: track.cues ? track.cues.map((cue) => fromNativeCue(cue)) : [],
|
|
57
58
|
} as TextTrack;
|
|
58
59
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook to determine if a referenced HTMLDivElement is currently attached to the document.
|
|
3
|
+
*
|
|
4
|
+
* This hook checks if the provided ref's current element is attached to the DOM (document.body).
|
|
5
|
+
* Returns a boolean indicating the attachment state.
|
|
6
|
+
* Once attached, it will stop observing for changes to optimize performance.
|
|
7
|
+
*
|
|
8
|
+
* @param ref - React ref object pointing to an HTMLDivElement
|
|
9
|
+
* @returns boolean - true if the element is attached to the document, false otherwise
|
|
10
|
+
*/
|
|
11
|
+
import { RefObject, useEffect, useState } from 'react';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param ref
|
|
15
|
+
*/
|
|
16
|
+
export const useIsAttached = (ref: RefObject<HTMLDivElement | null>) => {
|
|
17
|
+
const [isAttached, setIsAttached] = useState<boolean>(false);
|
|
18
|
+
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!ref.current) return;
|
|
21
|
+
|
|
22
|
+
const checkAttached = () => {
|
|
23
|
+
const connected = ref.current?.isConnected ?? false;
|
|
24
|
+
setIsAttached(connected);
|
|
25
|
+
return connected;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
if (checkAttached()) return;
|
|
29
|
+
|
|
30
|
+
const observer: MutationObserver = new MutationObserver(() => {
|
|
31
|
+
const attached = checkAttached();
|
|
32
|
+
// Once attached, stop observing.
|
|
33
|
+
if (attached) {
|
|
34
|
+
observer.disconnect();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
observer.observe(document.body, {
|
|
38
|
+
childList: true,
|
|
39
|
+
subtree: true,
|
|
40
|
+
});
|
|
41
|
+
return () => observer.disconnect();
|
|
42
|
+
}, [ref]);
|
|
43
|
+
return isAttached;
|
|
44
|
+
};
|
package/src/manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"
|
|
1
|
+
{"version":"11.0.0","buildDate":"2026-04-16T14:36:11.831Z"}
|