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.
Files changed (102) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/android/build.gradle +13 -7
  3. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar +0 -0
  4. 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
  5. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
  6. package/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +7 -7
  7. package/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +7 -12
  8. package/android/src/main/java/com/theoplayer/cast/CastModule.kt +0 -1
  9. package/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +14 -17
  10. package/ios/ads/THEOplayerRCTAdAdapter.swift +2 -2
  11. package/ios/ads/THEOplayerRCTAdsNative.swift +1 -1
  12. package/lib/commonjs/api/event/PlayerEvent.js +0 -9
  13. package/lib/commonjs/api/event/PlayerEvent.js.map +1 -1
  14. package/lib/commonjs/api/player/PlayerEventMap.js +0 -1
  15. package/lib/commonjs/api/player/PlayerEventMap.js.map +1 -1
  16. package/lib/commonjs/api/source/SourceDescription.js +0 -80
  17. package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
  18. package/lib/commonjs/api/track/TextTrack.js.map +1 -1
  19. package/lib/commonjs/internal/THEOplayerView.js +0 -1
  20. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  21. package/lib/commonjs/internal/THEOplayerView.web.js +5 -3
  22. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  23. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +0 -3
  24. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  25. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +0 -3
  26. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  27. package/lib/commonjs/internal/adapter/WebEventForwarder.js +0 -1
  28. package/lib/commonjs/internal/adapter/WebEventForwarder.js.map +1 -1
  29. package/lib/commonjs/internal/adapter/event/PlayerEvents.js +1 -13
  30. package/lib/commonjs/internal/adapter/event/PlayerEvents.js.map +1 -1
  31. package/lib/commonjs/internal/adapter/web/TrackUtils.js +3 -1
  32. package/lib/commonjs/internal/adapter/web/TrackUtils.js.map +1 -1
  33. package/lib/commonjs/internal/hooks/useIsAttached.js +48 -0
  34. package/lib/commonjs/internal/hooks/useIsAttached.js.map +1 -0
  35. package/lib/commonjs/manifest.json +1 -1
  36. package/lib/module/api/event/PlayerEvent.js +0 -10
  37. package/lib/module/api/event/PlayerEvent.js.map +1 -1
  38. package/lib/module/api/player/PlayerEventMap.js +0 -1
  39. package/lib/module/api/player/PlayerEventMap.js.map +1 -1
  40. package/lib/module/api/source/SourceDescription.js +1 -88
  41. package/lib/module/api/source/SourceDescription.js.map +1 -1
  42. package/lib/module/api/track/TextTrack.js.map +1 -1
  43. package/lib/module/internal/THEOplayerView.js +1 -2
  44. package/lib/module/internal/THEOplayerView.js.map +1 -1
  45. package/lib/module/internal/THEOplayerView.web.js +5 -3
  46. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  47. package/lib/module/internal/adapter/THEOplayerAdapter.js +0 -3
  48. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  49. package/lib/module/internal/adapter/THEOplayerWebAdapter.js +0 -3
  50. package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  51. package/lib/module/internal/adapter/WebEventForwarder.js +1 -2
  52. package/lib/module/internal/adapter/WebEventForwarder.js.map +1 -1
  53. package/lib/module/internal/adapter/event/PlayerEvents.js +0 -11
  54. package/lib/module/internal/adapter/event/PlayerEvents.js.map +1 -1
  55. package/lib/module/internal/adapter/web/TrackUtils.js +3 -1
  56. package/lib/module/internal/adapter/web/TrackUtils.js.map +1 -1
  57. package/lib/module/internal/hooks/useIsAttached.js +43 -0
  58. package/lib/module/internal/hooks/useIsAttached.js.map +1 -0
  59. package/lib/module/manifest.json +1 -1
  60. package/lib/typescript/api/event/PlayerEvent.d.ts +0 -19
  61. package/lib/typescript/api/event/PlayerEvent.d.ts.map +1 -1
  62. package/lib/typescript/api/player/PlayerEventMap.d.ts +1 -11
  63. package/lib/typescript/api/player/PlayerEventMap.d.ts.map +1 -1
  64. package/lib/typescript/api/player/THEOplayer.d.ts +0 -6
  65. package/lib/typescript/api/player/THEOplayer.d.ts.map +1 -1
  66. package/lib/typescript/api/source/SourceDescription.d.ts +0 -20
  67. package/lib/typescript/api/source/SourceDescription.d.ts.map +1 -1
  68. package/lib/typescript/api/theolive/TheoLiveSource.d.ts +3 -3
  69. package/lib/typescript/api/theolive/TheoLiveSource.d.ts.map +1 -1
  70. package/lib/typescript/api/track/TextTrack.d.ts +11 -0
  71. package/lib/typescript/api/track/TextTrack.d.ts.map +1 -1
  72. package/lib/typescript/internal/THEOplayerView.d.ts.map +1 -1
  73. package/lib/typescript/internal/THEOplayerView.web.d.ts.map +1 -1
  74. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +0 -1
  75. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts.map +1 -1
  76. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +0 -1
  77. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts.map +1 -1
  78. package/lib/typescript/internal/adapter/WebEventForwarder.d.ts.map +1 -1
  79. package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts +1 -9
  80. package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts.map +1 -1
  81. package/lib/typescript/internal/adapter/web/TrackUtils.d.ts.map +1 -1
  82. package/lib/typescript/internal/hooks/useIsAttached.d.ts +16 -0
  83. package/lib/typescript/internal/hooks/useIsAttached.d.ts.map +1 -0
  84. package/package.json +9 -9
  85. package/react-native-theoplayer.podspec +8 -8
  86. package/src/api/event/PlayerEvent.ts +0 -21
  87. package/src/api/player/PlayerEventMap.ts +0 -12
  88. package/src/api/player/THEOplayer.ts +0 -7
  89. package/src/api/source/SourceDescription.ts +0 -22
  90. package/src/api/theolive/TheoLiveSource.ts +3 -3
  91. package/src/api/track/TextTrack.ts +12 -0
  92. package/src/internal/THEOplayerView.tsx +0 -2
  93. package/src/internal/THEOplayerView.web.tsx +6 -4
  94. package/src/internal/adapter/THEOplayerAdapter.ts +0 -4
  95. package/src/internal/adapter/THEOplayerWebAdapter.ts +0 -4
  96. package/src/internal/adapter/WebEventForwarder.ts +0 -2
  97. package/src/internal/adapter/event/PlayerEvents.ts +0 -13
  98. package/src/internal/adapter/track/TextTrackStyleAdapter.ts +4 -4
  99. package/src/internal/adapter/web/TrackUtils.ts +2 -1
  100. package/src/internal/hooks/useIsAttached.ts +44 -0
  101. package/src/manifest.json +1 -1
  102. 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": "10.13.0",
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.83.1",
62
- "@types/react": "^19.2.0",
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.0",
71
- "react-native": "^0.83.1",
70
+ "react": "^19.2.3",
71
+ "react-native": "^0.84.1",
72
72
  "react-native-builder-bob": "^0.39.1",
73
- "theoplayer": "^10.10.0",
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": "^9.12.0 || ^10"
83
+ "theoplayer": "^11"
84
84
  },
85
85
  "peerDependenciesMeta": {
86
86
  "theoplayer": {
@@ -88,7 +88,7 @@
88
88
  }
89
89
  },
90
90
  "engines": {
91
- "node": ">=16"
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.4.0",
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 => "13.4", :tvos => "13.4" }
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", "~> 10.10"
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", "~> 10.12"
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", "~> 10.12"
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", "~> 10.12"
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", "~> 10.12"
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", "~> 10.12"
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", "~> 10.12"
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 { SourceIntegrationId, TypedSource } from 'react-native-theoplayer';
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
- * @deprecated use {@link TypedSource.type} instead.
12
+ * The source URL of the media resource.
13
13
  */
14
- integration: SourceIntegrationId.THEO_LIVE;
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<null | HTMLDivElement>(null);
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":"10.13.0","buildDate":"2026-03-27T13:55:41.539Z"}
1
+ {"version":"11.0.0","buildDate":"2026-04-16T14:36:11.831Z"}