react-native-video-provider 0.1.1 → 0.2.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 (41) hide show
  1. package/README.md +23 -2
  2. package/android/src/main/java/com/auvideo/AuVideoModule.kt +48 -5
  3. package/ios/AuVideo.mm +5 -0
  4. package/ios/AuVideoOrientation.swift +62 -11
  5. package/lib/module/NativeAuVideo.js +3 -0
  6. package/lib/module/NativeAuVideo.js.map +1 -1
  7. package/lib/module/codegen-types.d.js +2 -0
  8. package/lib/module/codegen-types.d.js.map +1 -0
  9. package/lib/module/components/VideoPlayer.js +8 -0
  10. package/lib/module/components/VideoPlayer.js.map +1 -1
  11. package/lib/module/core/VideoManager.js +22 -1
  12. package/lib/module/core/VideoManager.js.map +1 -1
  13. package/lib/module/hooks/useFullscreen.js +5 -1
  14. package/lib/module/hooks/useFullscreen.js.map +1 -1
  15. package/lib/module/state/createVideoStore.js +1 -0
  16. package/lib/module/state/createVideoStore.js.map +1 -1
  17. package/lib/typescript/src/NativeAuVideo.d.ts +18 -11
  18. package/lib/typescript/src/NativeAuVideo.d.ts.map +1 -1
  19. package/lib/typescript/src/components/VideoPlayer.d.ts +8 -2
  20. package/lib/typescript/src/components/VideoPlayer.d.ts.map +1 -1
  21. package/lib/typescript/src/core/VideoManager.d.ts +6 -1
  22. package/lib/typescript/src/core/VideoManager.d.ts.map +1 -1
  23. package/lib/typescript/src/hooks/useFullscreen.d.ts +3 -0
  24. package/lib/typescript/src/hooks/useFullscreen.d.ts.map +1 -1
  25. package/lib/typescript/src/index.d.ts +1 -1
  26. package/lib/typescript/src/index.d.ts.map +1 -1
  27. package/lib/typescript/src/state/createVideoStore.d.ts.map +1 -1
  28. package/lib/typescript/src/types/index.d.ts +1 -1
  29. package/lib/typescript/src/types/index.d.ts.map +1 -1
  30. package/lib/typescript/src/types/video.d.ts +18 -0
  31. package/lib/typescript/src/types/video.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/src/NativeAuVideo.ts +24 -15
  34. package/src/codegen-types.d.ts +20 -0
  35. package/src/components/VideoPlayer.tsx +16 -1
  36. package/src/core/VideoManager.ts +20 -0
  37. package/src/hooks/useFullscreen.ts +7 -1
  38. package/src/index.ts +1 -0
  39. package/src/state/createVideoStore.ts +1 -0
  40. package/src/types/index.ts +1 -0
  41. package/src/types/video.ts +24 -0
package/README.md CHANGED
@@ -83,6 +83,26 @@ player.showFloating(); // draggable in-app window
83
83
  player.enterPiP(); // system picture-in-picture
84
84
  ```
85
85
 
86
+ **5. Force an orientation** — per player, imperatively, or whenever
87
+ fullscreen is active:
88
+
89
+ ```tsx
90
+ // While this player is mounted (released on unmount):
91
+ <VideoPlayer source={video} orientation="landscape" />
92
+
93
+ // Imperative — 'auto' | 'portrait' | 'inverted-portrait'
94
+ // | 'landscape' | 'inverted-landscape'
95
+ player.setOrientation('inverted-landscape');
96
+ player.setOrientation('auto'); // release
97
+
98
+ // Always go landscape in the built-in fullscreen host:
99
+ <VideoProvider config={{ fullscreenOrientation: 'landscape' }}>
100
+ ```
101
+
102
+ On iOS this needs the AppDelegate forwarding shown in
103
+ [Platform setup](#ios--fullscreen-rotation). Inverted portrait is ignored by
104
+ iPhones without a home button (the OS doesn't allow it).
105
+
86
106
  ## Surfaces (the core idea)
87
107
 
88
108
  `<VideoSurface>` never creates a player — it registers a mount point. The
@@ -120,8 +140,9 @@ useVideoEvents({
120
140
  ### iOS — fullscreen rotation
121
141
 
122
142
  iOS asks the AppDelegate which orientations are allowed. Forward that to the
123
- library so rotation unlocks only while fullscreen is visible (skip this if
124
- your app already supports all orientations):
143
+ library so rotation unlocks while fullscreen is visible and `setOrientation`
144
+ / the `orientation` prop can force a rotation (skip this only if you don't
145
+ use those features and your app already supports all orientations):
125
146
 
126
147
  ```swift
127
148
  // AppDelegate.swift
@@ -1,5 +1,6 @@
1
1
  package com.auvideo
2
2
 
3
+ import android.app.Activity
3
4
  import android.app.PictureInPictureParams
4
5
  import android.content.pm.ActivityInfo
5
6
  import android.content.pm.PackageManager
@@ -17,8 +18,14 @@ import com.facebook.react.bridge.UiThreadUtil
17
18
  class AuVideoModule(reactContext: ReactApplicationContext) :
18
19
  NativeAuVideoSpec(reactContext), PlayerCore.Listener {
19
20
 
21
+ /** The app's own requestedOrientation, saved before we first override it. */
20
22
  private var previousOrientation: Int? = null
21
23
 
24
+ /** Explicit lock from setOrientation; wins over the fullscreen unlock. */
25
+ private var lockedOrientation: Int? = null
26
+
27
+ private var fullscreenActive = false
28
+
22
29
  // ------------------------------------------------------------ lifecycle
23
30
 
24
31
  override fun nativeInit() {
@@ -126,6 +133,41 @@ class AuVideoModule(reactContext: ReactApplicationContext) :
126
133
  UiThreadUtil.runOnUiThread { PlayerCore.detach() }
127
134
  }
128
135
 
136
+ // ---------------------------------------------------------- orientation
137
+
138
+ override fun setOrientation(orientation: String) {
139
+ UiThreadUtil.runOnUiThread {
140
+ val activity = currentActivity ?: return@runOnUiThread
141
+ if (previousOrientation == null) {
142
+ previousOrientation = activity.requestedOrientation
143
+ }
144
+ lockedOrientation = when (orientation) {
145
+ "portrait" -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
146
+ "inverted-portrait" -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
147
+ "landscape" -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
148
+ "inverted-landscape" -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
149
+ else -> null // "auto"
150
+ }
151
+ applyOrientation(activity)
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Precedence: explicit lock > fullscreen sensor unlock > the app's own
157
+ * orientation. Once nothing overrides anymore, the saved value is dropped.
158
+ */
159
+ private fun applyOrientation(activity: Activity) {
160
+ val lock = lockedOrientation
161
+ activity.requestedOrientation = when {
162
+ lock != null -> lock
163
+ fullscreenActive -> ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
164
+ else -> previousOrientation ?: ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
165
+ }
166
+ if (lock == null && !fullscreenActive) {
167
+ previousOrientation = null
168
+ }
169
+ }
170
+
129
171
  // ----------------------------------------------------------- fullscreen
130
172
 
131
173
  override fun enterFullscreen() {
@@ -134,8 +176,10 @@ class AuVideoModule(reactContext: ReactApplicationContext) :
134
176
  if (previousOrientation == null) {
135
177
  previousOrientation = activity.requestedOrientation
136
178
  }
137
- // Unlock rotation while fullscreen is visible, even in portrait-locked apps.
138
- activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
179
+ // Unlock rotation while fullscreen is visible, even in portrait-locked
180
+ // apps — unless an explicit orientation lock is active.
181
+ fullscreenActive = true
182
+ applyOrientation(activity)
139
183
 
140
184
  val window = activity.window
141
185
  WindowCompat.setDecorFitsSystemWindows(window, false)
@@ -150,9 +194,8 @@ class AuVideoModule(reactContext: ReactApplicationContext) :
150
194
  override fun exitFullscreen() {
151
195
  UiThreadUtil.runOnUiThread {
152
196
  val activity = currentActivity ?: return@runOnUiThread
153
- activity.requestedOrientation =
154
- previousOrientation ?: ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
155
- previousOrientation = null
197
+ fullscreenActive = false
198
+ applyOrientation(activity)
156
199
 
157
200
  val window = activity.window
158
201
  WindowCompat.setDecorFitsSystemWindows(window, true)
package/ios/AuVideo.mm CHANGED
@@ -159,6 +159,11 @@ static AuVideoSourceSpec *AuVideoParseSource(NativeVideoSource &source)
159
159
  dispatch_async(dispatch_get_main_queue(), ^{ [AuVideoOrientation setFullscreen:NO]; });
160
160
  }
161
161
 
162
+ - (void)setOrientation:(NSString *)orientation
163
+ {
164
+ dispatch_async(dispatch_get_main_queue(), ^{ [AuVideoOrientation setOrientation:orientation]; });
165
+ }
166
+
162
167
  #pragma mark - PiP
163
168
 
164
169
  - (void)enterPip:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
@@ -1,11 +1,11 @@
1
1
  import Foundation
2
2
  import UIKit
3
3
 
4
- /// Fullscreen orientation coordination.
4
+ /// Fullscreen + forced-orientation coordination.
5
5
  ///
6
6
  /// iOS decides allowed orientations by asking the AppDelegate. For rotation
7
- /// to unlock only while the player is fullscreen, the host app forwards that
8
- /// question here (see README):
7
+ /// to unlock only while the player is fullscreen (and for `setOrientation`
8
+ /// locks to apply), the host app forwards that question here (see README):
9
9
  ///
10
10
  /// ```swift
11
11
  /// func application(_ application: UIApplication,
@@ -22,38 +22,89 @@ public final class AuVideoOrientation: NSObject {
22
22
  /// Orientations allowed while fullscreen. Default: everything but upside-down.
23
23
  @objc public static var fullscreenMask: UIInterfaceOrientationMask = .allButUpsideDown
24
24
 
25
+ /// Explicit lock from `setOrientation`. Empty = no lock. Wins over both
26
+ /// the app default and the fullscreen unlock.
27
+ @objc public private(set) static var lockMask: UIInterfaceOrientationMask = []
28
+
25
29
  /// Call from AppDelegate's supportedInterfaceOrientationsFor.
26
30
  @objc(maskWithDefault:)
27
31
  public static func mask(
28
32
  withDefault defaultMask: UIInterfaceOrientationMask
29
33
  ) -> UIInterfaceOrientationMask {
34
+ if !lockMask.isEmpty {
35
+ return lockMask
36
+ }
30
37
  return isFullscreenActive ? fullscreenMask : defaultMask
31
38
  }
32
39
 
33
40
  @objc public static func setFullscreen(_ active: Bool) {
34
41
  guard isFullscreenActive != active else { return }
35
42
  isFullscreenActive = active
36
- refresh()
43
+ applyCurrent()
44
+ }
45
+
46
+ /// Force a screen orientation until cleared with "auto".
47
+ /// Values: auto | portrait | inverted-portrait | landscape | inverted-landscape
48
+ /// (upside-down portrait is ignored on iPhones without a home button).
49
+ @objc(setOrientation:)
50
+ public static func setOrientation(_ orientation: String) {
51
+ // "landscape" = device top pointing left (interface landscapeRight),
52
+ // matching Android's SCREEN_ORIENTATION_LANDSCAPE; "inverted-" is the
53
+ // 180° rotation of each.
54
+ switch orientation {
55
+ case "portrait":
56
+ lockMask = .portrait
57
+ case "inverted-portrait":
58
+ lockMask = .portraitUpsideDown
59
+ case "landscape":
60
+ lockMask = .landscapeRight
61
+ case "inverted-landscape":
62
+ lockMask = .landscapeLeft
63
+ default:
64
+ lockMask = []
65
+ }
66
+ applyCurrent()
37
67
  }
38
68
 
39
- /// Makes the system re-query supported orientations; when exiting
40
- /// fullscreen in a portrait-locked app this also rotates back.
41
- private static func refresh() {
69
+ /// Re-query supported orientations and rotate to whatever now applies:
70
+ /// the lock if set, free rotation while fullscreen, else back to portrait
71
+ /// (portrait-locked apps are the common host).
72
+ private static func applyCurrent() {
73
+ if !lockMask.isEmpty {
74
+ refresh(rotatingTo: lockMask)
75
+ } else {
76
+ refresh(rotatingTo: isFullscreenActive ? nil : .portrait)
77
+ }
78
+ }
79
+
80
+ private static func refresh(rotatingTo mask: UIInterfaceOrientationMask?) {
42
81
  DispatchQueue.main.async {
43
82
  if #available(iOS 16.0, *) {
44
83
  for case let scene as UIWindowScene in UIApplication.shared.connectedScenes {
45
84
  scene.keyWindow?.rootViewController?
46
85
  .setNeedsUpdateOfSupportedInterfaceOrientations()
47
- if !isFullscreenActive {
48
- scene.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait), errorHandler: { _ in })
86
+ if let mask {
87
+ scene.requestGeometryUpdate(.iOS(interfaceOrientations: mask), errorHandler: { _ in })
49
88
  }
50
89
  }
51
90
  } else {
52
- if !isFullscreenActive {
53
- UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
91
+ if let device = legacyDeviceOrientation(for: mask) {
92
+ UIDevice.current.setValue(device.rawValue, forKey: "orientation")
54
93
  }
55
94
  UIViewController.attemptRotationToDeviceOrientation()
56
95
  }
57
96
  }
58
97
  }
98
+
99
+ private static func legacyDeviceOrientation(
100
+ for mask: UIInterfaceOrientationMask?
101
+ ) -> UIDeviceOrientation? {
102
+ guard let mask else { return nil }
103
+ if mask.contains(.portrait) { return .portrait }
104
+ if mask.contains(.portraitUpsideDown) { return .portraitUpsideDown }
105
+ // Interface landscapeRight is device landscapeLeft, and vice versa.
106
+ if mask.contains(.landscapeRight) { return .landscapeLeft }
107
+ if mask.contains(.landscapeLeft) { return .landscapeRight }
108
+ return nil
109
+ }
59
110
  }
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  import { TurboModuleRegistry } from 'react-native';
4
+ // Direct imports (not the `CodegenTypes.` namespace) so the spec parses on
5
+ // RN 0.79's codegen as well as 0.80+.
6
+
4
7
  export default TurboModuleRegistry.getEnforcing('AuVideo');
5
8
  //# sourceMappingURL=NativeAuVideo.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeAuVideo.ts"],"mappings":";;AAAA,SACEA,mBAAmB,QAGd,cAAc;AAqGrB,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeAuVideo.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AACpE;AACA;;AAgHA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=codegen-types.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["codegen-types.d.ts"],"mappings":"","ignoreList":[]}
@@ -21,6 +21,7 @@ export function VideoPlayer({
21
21
  surfaceId,
22
22
  controls = true,
23
23
  resizeMode,
24
+ orientation,
24
25
  style,
25
26
  ...rest
26
27
  }) {
@@ -40,6 +41,13 @@ export function VideoPlayer({
40
41
  manager.setResizeMode(resizeMode);
41
42
  }
42
43
  }, [manager, resizeMode]);
44
+ useEffect(() => {
45
+ if (!orientation || orientation === 'auto') {
46
+ return;
47
+ }
48
+ manager.setOrientation(orientation);
49
+ return () => manager.setOrientation('auto');
50
+ }, [manager, orientation]);
43
51
  return /*#__PURE__*/_jsxs(View, {
44
52
  style: [styles.container, style],
45
53
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","StyleSheet","View","useVideoManager","VideoControls","VideoSurface","jsx","_jsx","jsxs","_jsxs","VideoPlayer","source","autoplay","surfaceId","controls","resizeMode","style","rest","manager","id","setSource","setResizeMode","styles","container","children","surface","create","backgroundColor","overflow","position","top","left","right","bottom"],"sourceRoot":"../../../src","sources":["components/VideoPlayer.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,UAAU,EAAEC,IAAI,QAAwB,cAAc;AAC/D,SAASC,eAAe,QAAQ,6BAA0B;AAE1D,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiB9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAC;EAC1BC,MAAM;EACNC,QAAQ,GAAG,IAAI;EACfC,SAAS;EACTC,QAAQ,GAAG,IAAI;EACfC,UAAU;EACVC,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAMC,OAAO,GAAGf,eAAe,CAAC,CAAC;EACjC,MAAMgB,EAAE,GAAGN,SAAS,IAAI,UAAUF,MAAM,CAACQ,EAAE,EAAE;EAE7CnB,SAAS,CAAC,MAAM;IACdkB,OAAO,CAACE,SAAS,CAACT,MAAM,EAAE;MAAEC,QAAQ;MAAEC,SAAS,EAAEM;IAAG,CAAC,CAAC;IACtD;IACA;IACA;EACF,CAAC,EAAE,CAACD,OAAO,EAAEP,MAAM,CAACQ,EAAE,EAAEA,EAAE,CAAC,CAAC;EAE5BnB,SAAS,CAAC,MAAM;IACd,IAAIe,UAAU,EAAE;MACdG,OAAO,CAACG,aAAa,CAACN,UAAU,CAAC;IACnC;EACF,CAAC,EAAE,CAACG,OAAO,EAAEH,UAAU,CAAC,CAAC;EAEzB,oBACEN,KAAA,CAACP,IAAI;IAACc,KAAK,EAAE,CAACM,MAAM,CAACC,SAAS,EAAEP,KAAK,CAAE;IAAA,GAAKC,IAAI;IAAAO,QAAA,gBAC9CjB,IAAA,CAACF,YAAY;MAACQ,SAAS,EAAEM,EAAG;MAACH,KAAK,EAAEM,MAAM,CAACG;IAAQ,CAAE,CAAC,EACrDX,QAAQ,gBAAGP,IAAA,CAACH,aAAa,IAAE,CAAC,GAAG,IAAI;EAAA,CAChC,CAAC;AAEX;AAEA,MAAMkB,MAAM,GAAGrB,UAAU,CAACyB,MAAM,CAAC;EAC/BH,SAAS,EAAE;IACTI,eAAe,EAAE,MAAM;IACvBC,QAAQ,EAAE;EACZ,CAAC;EACDH,OAAO,EAAE;IACPI,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","StyleSheet","View","useVideoManager","VideoControls","VideoSurface","jsx","_jsx","jsxs","_jsxs","VideoPlayer","source","autoplay","surfaceId","controls","resizeMode","orientation","style","rest","manager","id","setSource","setResizeMode","setOrientation","styles","container","children","surface","create","backgroundColor","overflow","position","top","left","right","bottom"],"sourceRoot":"../../../src","sources":["components/VideoPlayer.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,UAAU,EAAEC,IAAI,QAAwB,cAAc;AAC/D,SAASC,eAAe,QAAQ,6BAA0B;AAE1D,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAuB9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAC;EAC1BC,MAAM;EACNC,QAAQ,GAAG,IAAI;EACfC,SAAS;EACTC,QAAQ,GAAG,IAAI;EACfC,UAAU;EACVC,WAAW;EACXC,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAMC,OAAO,GAAGhB,eAAe,CAAC,CAAC;EACjC,MAAMiB,EAAE,GAAGP,SAAS,IAAI,UAAUF,MAAM,CAACS,EAAE,EAAE;EAE7CpB,SAAS,CAAC,MAAM;IACdmB,OAAO,CAACE,SAAS,CAACV,MAAM,EAAE;MAAEC,QAAQ;MAAEC,SAAS,EAAEO;IAAG,CAAC,CAAC;IACtD;IACA;IACA;EACF,CAAC,EAAE,CAACD,OAAO,EAAER,MAAM,CAACS,EAAE,EAAEA,EAAE,CAAC,CAAC;EAE5BpB,SAAS,CAAC,MAAM;IACd,IAAIe,UAAU,EAAE;MACdI,OAAO,CAACG,aAAa,CAACP,UAAU,CAAC;IACnC;EACF,CAAC,EAAE,CAACI,OAAO,EAAEJ,UAAU,CAAC,CAAC;EAEzBf,SAAS,CAAC,MAAM;IACd,IAAI,CAACgB,WAAW,IAAIA,WAAW,KAAK,MAAM,EAAE;MAC1C;IACF;IACAG,OAAO,CAACI,cAAc,CAACP,WAAW,CAAC;IACnC,OAAO,MAAMG,OAAO,CAACI,cAAc,CAAC,MAAM,CAAC;EAC7C,CAAC,EAAE,CAACJ,OAAO,EAAEH,WAAW,CAAC,CAAC;EAE1B,oBACEP,KAAA,CAACP,IAAI;IAACe,KAAK,EAAE,CAACO,MAAM,CAACC,SAAS,EAAER,KAAK,CAAE;IAAA,GAAKC,IAAI;IAAAQ,QAAA,gBAC9CnB,IAAA,CAACF,YAAY;MAACQ,SAAS,EAAEO,EAAG;MAACH,KAAK,EAAEO,MAAM,CAACG;IAAQ,CAAE,CAAC,EACrDb,QAAQ,gBAAGP,IAAA,CAACH,aAAa,IAAE,CAAC,GAAG,IAAI;EAAA,CAChC,CAAC;AAEX;AAEA,MAAMoB,MAAM,GAAGvB,UAAU,CAAC2B,MAAM,CAAC;EAC/BH,SAAS,EAAE;IACTI,eAAe,EAAE,MAAM;IACvBC,QAAQ,EAAE;EACZ,CAAC;EACDH,OAAO,EAAE;IACPI,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
@@ -43,7 +43,8 @@ export class VideoManager {
43
43
  config = {
44
44
  fullscreenHost: true,
45
45
  floatingHost: true,
46
- pauseOnDetach: false
46
+ pauseOnDetach: false,
47
+ fullscreenOrientation: 'auto'
47
48
  };
48
49
  /** Last non-reserved surface, restored after fullscreen/floating exits. */
49
50
  lastInlineSurfaceId = null;
@@ -271,6 +272,17 @@ export class VideoManager {
271
272
  });
272
273
  NativeAuVideo.setResizeMode(mode);
273
274
  }
275
+
276
+ /**
277
+ * Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
278
+ * overriding the app's own lock until cleared with `'auto'`.
279
+ */
280
+ setOrientation(lock) {
281
+ this.set({
282
+ orientationLock: lock
283
+ });
284
+ NativeAuVideo.setOrientation(lock);
285
+ }
274
286
  async getPosition() {
275
287
  return NativeAuVideo.getPosition();
276
288
  }
@@ -334,6 +346,10 @@ export class VideoManager {
334
346
  });
335
347
  this.setMode('fullscreen');
336
348
  NativeAuVideo.enterFullscreen();
349
+ const forced = this.config.fullscreenOrientation;
350
+ if (forced !== 'auto') {
351
+ NativeAuVideo.setOrientation(forced);
352
+ }
337
353
  this.events.emit('onEnterFullscreen', undefined);
338
354
  }
339
355
 
@@ -342,6 +358,10 @@ export class VideoManager {
342
358
  if (!this.store.getState().fullscreen) {
343
359
  return;
344
360
  }
361
+ if (this.config.fullscreenOrientation !== 'auto') {
362
+ // Drop the fullscreen-only lock, restoring any explicit setOrientation.
363
+ NativeAuVideo.setOrientation(this.store.getState().orientationLock);
364
+ }
345
365
  NativeAuVideo.exitFullscreen();
346
366
  this.set({
347
367
  fullscreen: false
@@ -424,6 +444,7 @@ export class VideoManager {
424
444
  this.events.removeAll();
425
445
  this.initialized = false;
426
446
  this.lastInlineSurfaceId = null;
447
+ NativeAuVideo.setOrientation('auto');
427
448
  NativeAuVideo.releasePlayer();
428
449
  this.store.setState({
429
450
  ...initialVideoState
@@ -1 +1 @@
1
- {"version":3,"names":["NativeAuVideo","createVideoStore","initialVideoState","Emitter","FULLSCREEN_SURFACE_ID","FLOATING_SURFACE_ID","RESERVED_SURFACES","Set","toNativeSource","source","id","uri","headers","title","artist","artworkUri","startPosition","VideoManager","instance","shared","store","events","nativeSubscriptions","initialized","config","fullscreenHost","floatingHost","pauseOnDetach","lastInlineSurfaceId","constructor","providerConfig","init","nativeInit","subscribeNative","addListener","event","listener","subs","push","onStatusChange","e","applyStatus","status","onLoad","set","duration","videoWidth","width","videoHeight","height","loading","emit","videoId","onProgress","position","buffered","onSeek","onEnd","undefined","onError","error","playing","onAttach","onDetach","pause","onPipChange","pip","active","setMode","deriveMode","prev","getState","paused","buffering","setSource","options","autoplay","current","currentVideo","sameVideo","video","play","surfaceId","attach","preload","resume","toggle","stop","seek","clamped","Math","max","min","seekTo","seekBy","offset","setRate","rate","setVolume","volume","mute","muted","setMuted","unmute","setRepeat","repeat","setResizeMode","mode","resizeMode","getPosition","has","detach","handleSurfaceUnmount","state","enterFullscreen","fullscreen","floating","exitFullscreen","restoreInlineSurface","toggleFullscreen","showFloating","hideFloating","enterPiP","enterPip","exitPiP","exitPip","override","s","destroy","sub","remove","removeAll","releasePlayer","setState","partial"],"sourceRoot":"../../../src","sources":["core/VideoManager.ts"],"mappings":";;AACA,OAAOA,aAAa,MAAkC,qBAAkB;AACxE,SACEC,gBAAgB,EAChBC,iBAAiB,QAEZ,8BAA2B;AAWlC,SAASC,OAAO,QAA0C,qBAAkB;;AAE5E;AACA,OAAO,MAAMC,qBAAqB,GAAG,mBAAmB;AACxD;AACA,OAAO,MAAMC,mBAAmB,GAAG,iBAAiB;AAEpD,MAAMC,iBAAiB,GAAG,IAAIC,GAAG,CAAC,CAACH,qBAAqB,EAAEC,mBAAmB,CAAC,CAAC;AAE/E,SAASG,cAAcA,CAACC,MAAmB,EAAqB;EAC9D,OAAO;IACLC,EAAE,EAAED,MAAM,CAACC,EAAE;IACbC,GAAG,EAAEF,MAAM,CAACE,GAAG;IACfC,OAAO,EAAEH,MAAM,CAACG,OAAO;IACvBC,KAAK,EAAEJ,MAAM,CAACI,KAAK;IACnBC,MAAM,EAAEL,MAAM,CAACK,MAAM;IACrBC,UAAU,EAAEN,MAAM,CAACM,UAAU;IAC7BC,aAAa,EAAEP,MAAM,CAACO;EACxB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,CAAC;EACxB,OAAeC,QAAQ,GAAwB,IAAI;EAEnD,WAAWC,MAAMA,CAAA,EAAiB;IAChC,IAAI,CAACF,YAAY,CAACC,QAAQ,EAAE;MAC1BD,YAAY,CAACC,QAAQ,GAAG,IAAID,YAAY,CAAC,CAAC;IAC5C;IACA,OAAOA,YAAY,CAACC,QAAQ;EAC9B;EAESE,KAAK,GAAenB,gBAAgB,CAAC,CAAC;EAEvCoB,MAAM,GAAG,IAAIlB,OAAO,CAAgB,CAAC;EACrCmB,mBAAmB,GAAwB,EAAE;EAC7CC,WAAW,GAAG,KAAK;EACnBC,MAAM,GAAkC;IAC9CC,cAAc,EAAE,IAAI;IACpBC,YAAY,EAAE,IAAI;IAClBC,aAAa,EAAE;EACjB,CAAC;EACD;EACQC,mBAAmB,GAAkB,IAAI;EAEzCC,WAAWA,CAAA,EAAG,CAAC;EAEvB,IAAIC,cAAcA,CAAA,EAAkC;IAClD,OAAO,IAAI,CAACN,MAAM;EACpB;;EAEA;AACF;AACA;AACA;EACEO,IAAIA,CAACP,MAA4B,EAAQ;IACvC,IAAI,CAACA,MAAM,GAAG;MAAE,GAAG,IAAI,CAACA,MAAM;MAAE,GAAGA;IAAO,CAAC;IAC3C,IAAI,IAAI,CAACD,WAAW,EAAE;MACpB;IACF;IACA,IAAI,CAACA,WAAW,GAAG,IAAI;IACvBvB,aAAa,CAACgC,UAAU,CAAC,CAAC;IAC1B,IAAI,CAACC,eAAe,CAAC,CAAC;EACxB;;EAEA;;EAEAC,WAAWA,CACTC,KAAQ,EACRC,QAAoC,EACtB;IACd,OAAO,IAAI,CAACf,MAAM,CAACa,WAAW,CAACC,KAAK,EAAEC,QAAQ,CAAC;EACjD;EAEQH,eAAeA,CAAA,EAAS;IAC9B,MAAMI,IAAI,GAAG,IAAI,CAACf,mBAAmB;IAErCe,IAAI,CAACC,IAAI,CACPtC,aAAa,CAACuC,cAAc,CAAEC,CAAC,IAAK;MAClC,IAAI,CAACC,WAAW,CAACD,CAAC,CAACE,MAAwB,CAAC;IAC9C,CAAC,CACH,CAAC;IACDL,IAAI,CAACC,IAAI,CACPtC,aAAa,CAAC2C,MAAM,CAAEH,CAAC,IAAK;MAC1B,IAAI,CAACI,GAAG,CAAC;QACPC,QAAQ,EAAEL,CAAC,CAACK,QAAQ;QACpBC,UAAU,EAAEN,CAAC,CAACO,KAAK;QACnBC,WAAW,EAAER,CAAC,CAACS,MAAM;QACrBC,OAAO,EAAE;MACX,CAAC,CAAC;MACF,IAAI,CAAC7B,MAAM,CAAC8B,IAAI,CAAC,QAAQ,EAAEX,CAAC,CAAC;MAC7B,IAAI,CAACnB,MAAM,CAAC8B,IAAI,CAAC,SAAS,EAAE;QAAEC,OAAO,EAAEZ,CAAC,CAACY;MAAQ,CAAC,CAAC;IACrD,CAAC,CACH,CAAC;IACDf,IAAI,CAACC,IAAI,CACPtC,aAAa,CAACqD,UAAU,CAAEb,CAAC,IAAK;MAC9B,IAAI,CAACI,GAAG,CAAC;QACPU,QAAQ,EAAEd,CAAC,CAACc,QAAQ;QACpBT,QAAQ,EAAEL,CAAC,CAACK,QAAQ;QACpBU,QAAQ,EAAEf,CAAC,CAACe;MACd,CAAC,CAAC;MACF,IAAI,CAAClC,MAAM,CAAC8B,IAAI,CAAC,YAAY,EAAEX,CAAC,CAAC;IACnC,CAAC,CACH,CAAC;IACDH,IAAI,CAACC,IAAI,CACPtC,aAAa,CAACwD,MAAM,CAAEhB,CAAC,IAAK;MAC1B,IAAI,CAACI,GAAG,CAAC;QAAEU,QAAQ,EAAEd,CAAC,CAACc;MAAS,CAAC,CAAC;MAClC,IAAI,CAACjC,MAAM,CAAC8B,IAAI,CAAC,QAAQ,EAAEX,CAAC,CAAC;IAC/B,CAAC,CACH,CAAC;IACDH,IAAI,CAACC,IAAI,CACPtC,aAAa,CAACyD,KAAK,CAAC,MAAM;MACxB,IAAI,CAAChB,WAAW,CAAC,OAAO,CAAC;MACzB,IAAI,CAACpB,MAAM,CAAC8B,IAAI,CAAC,OAAO,EAAEO,SAAS,CAAC;IACtC,CAAC,CACH,CAAC;IACDrB,IAAI,CAACC,IAAI,CACPtC,aAAa,CAAC2D,OAAO,CAAEnB,CAAC,IAAK;MAC3B,IAAI,CAACI,GAAG,CAAC;QAAEgB,KAAK,EAAEpB,CAAC;QAAEE,MAAM,EAAE,OAAO;QAAEmB,OAAO,EAAE,KAAK;QAAEX,OAAO,EAAE;MAAM,CAAC,CAAC;MACvE,IAAI,CAAC7B,MAAM,CAAC8B,IAAI,CAAC,SAAS,EAAEX,CAAC,CAAC;IAChC,CAAC,CACH,CAAC;IACDH,IAAI,CAACC,IAAI,CACPtC,aAAa,CAAC8D,QAAQ,CAAEtB,CAAC,IAAK;MAC5B,IAAI,CAACnB,MAAM,CAAC8B,IAAI,CAAC,UAAU,EAAEX,CAAC,CAAC;IACjC,CAAC,CACH,CAAC;IACDH,IAAI,CAACC,IAAI,CACPtC,aAAa,CAAC+D,QAAQ,CAAEvB,CAAC,IAAK;MAC5B,IAAI,CAACnB,MAAM,CAAC8B,IAAI,CAAC,UAAU,EAAEX,CAAC,CAAC;MAC/B,IAAI,IAAI,CAAChB,MAAM,CAACG,aAAa,EAAE;QAC7B,IAAI,CAACqC,KAAK,CAAC,CAAC;MACd;IACF,CAAC,CACH,CAAC;IACD3B,IAAI,CAACC,IAAI,CACPtC,aAAa,CAACiE,WAAW,CAAEzB,CAAC,IAAK;MAC/B,IAAI,CAACI,GAAG,CAAC;QAAEsB,GAAG,EAAE1B,CAAC,CAAC2B;MAAO,CAAC,CAAC;MAC3B,IAAI,CAACC,OAAO,CAAC5B,CAAC,CAAC2B,MAAM,GAAG,KAAK,GAAG,IAAI,CAACE,UAAU,CAAC;QAAEH,GAAG,EAAE;MAAM,CAAC,CAAC,CAAC;MAChE,IAAI,CAAC7C,MAAM,CAAC8B,IAAI,CAAC,cAAc,EAAEX,CAAC,CAAC;IACrC,CAAC,CACH,CAAC;EACH;EAEQC,WAAWA,CAACC,MAAsB,EAAQ;IAChD,MAAM4B,IAAI,GAAG,IAAI,CAAClD,KAAK,CAACmD,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC3B,GAAG,CAAC;MACPF,MAAM;MACNmB,OAAO,EAAEnB,MAAM,KAAK,SAAS;MAC7B8B,MAAM,EAAE9B,MAAM,KAAK,QAAQ;MAC3B+B,SAAS,EAAE/B,MAAM,KAAK,WAAW;MACjCQ,OAAO,EAAER,MAAM,KAAK,SAAS;MAC7BkB,KAAK,EAAElB,MAAM,KAAK,OAAO,GAAG4B,IAAI,CAACV,KAAK,GAAG;IAC3C,CAAC,CAAC;IACF,IAAIlB,MAAM,KAAK,SAAS,IAAI4B,IAAI,CAAC5B,MAAM,KAAK,SAAS,EAAE;MACrD,IAAI,CAACrB,MAAM,CAAC8B,IAAI,CAAC,QAAQ,EAAEO,SAAS,CAAC;IACvC;IACA,IAAIhB,MAAM,KAAK,QAAQ,IAAI4B,IAAI,CAAC5B,MAAM,KAAK,QAAQ,EAAE;MACnD,IAAI,CAACrB,MAAM,CAAC8B,IAAI,CAAC,SAAS,EAAEO,SAAS,CAAC;IACxC;IACA,IAAKhB,MAAM,KAAK,WAAW,MAAO4B,IAAI,CAAC5B,MAAM,KAAK,WAAW,CAAC,EAAE;MAC9D,IAAI,CAACrB,MAAM,CAAC8B,IAAI,CAAC,UAAU,EAAE;QAAEsB,SAAS,EAAE/B,MAAM,KAAK;MAAY,CAAC,CAAC;IACrE;EACF;;EAEA;;EAEA;AACF;AACA;AACA;AACA;EACEgC,SAASA,CAACjE,MAAmB,EAAEkE,OAA0B,EAAQ;IAC/D,MAAMC,QAAQ,GAAGD,OAAO,EAAEC,QAAQ,IAAI,IAAI;IAC1C,MAAMC,OAAO,GAAG,IAAI,CAACzD,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAACO,YAAY;IAClD,MAAMC,SAAS,GAAGF,OAAO,EAAEnE,EAAE,KAAKD,MAAM,CAACC,EAAE;IAE3C,IAAI,CAACqE,SAAS,EAAE;MACd,IAAI,CAACnC,GAAG,CAAC;QACPkC,YAAY,EAAErE,MAAM;QACpBiC,MAAM,EAAE,SAAS;QACjBQ,OAAO,EAAE,IAAI;QACbI,QAAQ,EAAE7C,MAAM,CAACO,aAAa,IAAI,CAAC;QACnC6B,QAAQ,EAAE,CAAC;QACXU,QAAQ,EAAE,CAAC;QACXK,KAAK,EAAE;MACT,CAAC,CAAC;MACF5D,aAAa,CAAC0E,SAAS,CAAClE,cAAc,CAACC,MAAM,CAAC,EAAEmE,QAAQ,CAAC;MACzD,IAAI,CAACvD,MAAM,CAAC8B,IAAI,CAAC,gBAAgB,EAAE;QAAE6B,KAAK,EAAEvE;MAAO,CAAC,CAAC;IACvD,CAAC,MAAM,IAAImE,QAAQ,IAAI,CAAC,IAAI,CAACxD,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAACV,OAAO,EAAE;MACrD,IAAI,CAACoB,IAAI,CAAC,CAAC;IACb;IAEA,IAAIN,OAAO,EAAEO,SAAS,EAAE;MACtB,IAAI,CAACC,MAAM,CAACR,OAAO,CAACO,SAAS,CAAC;IAChC;EACF;;EAEA;EACAE,OAAOA,CAAC3E,MAAmB,EAAQ;IACjCT,aAAa,CAACoF,OAAO,CAAC5E,cAAc,CAACC,MAAM,CAAC,CAAC;EAC/C;EAEAwE,IAAIA,CAAA,EAAS;IACXjF,aAAa,CAACiF,IAAI,CAAC,CAAC;EACtB;EAEAjB,KAAKA,CAAA,EAAS;IACZhE,aAAa,CAACgE,KAAK,CAAC,CAAC;EACvB;EAEAqB,MAAMA,CAAA,EAAS;IACbrF,aAAa,CAACiF,IAAI,CAAC,CAAC;EACtB;EAEAK,MAAMA,CAAA,EAAS;IACb,IAAI,IAAI,CAAClE,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAACV,OAAO,EAAE;MACjC,IAAI,CAACG,KAAK,CAAC,CAAC;IACd,CAAC,MAAM;MACL,IAAI,CAACiB,IAAI,CAAC,CAAC;IACb;EACF;EAEAM,IAAIA,CAAA,EAAS;IACXvF,aAAa,CAACuF,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC3C,GAAG,CAAC;MAAEU,QAAQ,EAAE,CAAC;MAAEO,OAAO,EAAE,KAAK;MAAEnB,MAAM,EAAE;IAAO,CAAC,CAAC;EAC3D;;EAEA;EACA8C,IAAIA,CAAClC,QAAgB,EAAQ;IAC3B,MAAMT,QAAQ,GAAG,IAAI,CAACzB,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAAC1B,QAAQ;IAC/C,MAAM4C,OAAO,GAAGC,IAAI,CAACC,GAAG,CACtB,CAAC,EACD9C,QAAQ,GAAG,CAAC,GAAG6C,IAAI,CAACE,GAAG,CAACtC,QAAQ,EAAET,QAAQ,CAAC,GAAGS,QAChD,CAAC;IACD,IAAI,CAACV,GAAG,CAAC;MAAEU,QAAQ,EAAEmC;IAAQ,CAAC,CAAC;IAC/BzF,aAAa,CAAC6F,MAAM,CAACJ,OAAO,CAAC;EAC/B;EAEAK,MAAMA,CAACC,MAAc,EAAQ;IAC3B,IAAI,CAACP,IAAI,CAAC,IAAI,CAACpE,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAACjB,QAAQ,GAAGyC,MAAM,CAAC;EACpD;EAEAC,OAAOA,CAACC,IAAY,EAAQ;IAC1B,IAAI,CAACrD,GAAG,CAAC;MAAEqD;IAAK,CAAC,CAAC;IAClBjG,aAAa,CAACgG,OAAO,CAACC,IAAI,CAAC;EAC7B;EAEAC,SAASA,CAACC,MAAc,EAAQ;IAC9B,MAAMV,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACO,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,CAACvD,GAAG,CAAC;MAAEuD,MAAM,EAAEV;IAAQ,CAAC,CAAC;IAC7BzF,aAAa,CAACkG,SAAS,CAACT,OAAO,CAAC;EAClC;EAEAW,IAAIA,CAAA,EAAS;IACX,IAAI,CAACxD,GAAG,CAAC;MAAEyD,KAAK,EAAE;IAAK,CAAC,CAAC;IACzBrG,aAAa,CAACsG,QAAQ,CAAC,IAAI,CAAC;EAC9B;EAEAC,MAAMA,CAAA,EAAS;IACb,IAAI,CAAC3D,GAAG,CAAC;MAAEyD,KAAK,EAAE;IAAM,CAAC,CAAC;IAC1BrG,aAAa,CAACsG,QAAQ,CAAC,KAAK,CAAC;EAC/B;EAEAE,SAASA,CAACC,MAAe,EAAQ;IAC/B,IAAI,CAAC7D,GAAG,CAAC;MAAE6D;IAAO,CAAC,CAAC;IACpBzG,aAAa,CAACwG,SAAS,CAACC,MAAM,CAAC;EACjC;EAEAC,aAAaA,CAACC,IAAgB,EAAQ;IACpC,IAAI,CAAC/D,GAAG,CAAC;MAAEgE,UAAU,EAAED;IAAK,CAAC,CAAC;IAC9B3G,aAAa,CAAC0G,aAAa,CAACC,IAAI,CAAC;EACnC;EAEA,MAAME,WAAWA,CAAA,EAAoB;IACnC,OAAO7G,aAAa,CAAC6G,WAAW,CAAC,CAAC;EACpC;;EAEA;;EAEA;EACA1B,MAAMA,CAACD,SAAiB,EAAQ;IAC9B,IAAI,CAAC5E,iBAAiB,CAACwG,GAAG,CAAC5B,SAAS,CAAC,EAAE;MACrC,IAAI,CAACtD,mBAAmB,GAAGsD,SAAS;IACtC;IACA,IAAI,CAACtC,GAAG,CAAC;MAAEsC;IAAU,CAAC,CAAC;IACvB,IAAI,CAACd,OAAO,CAAC,IAAI,CAACC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACjCrE,aAAa,CAACmF,MAAM,CAACD,SAAS,CAAC;EACjC;;EAEA;EACA6B,MAAMA,CAAA,EAAS;IACb,IAAI,CAACnE,GAAG,CAAC;MAAEsC,SAAS,EAAE;IAAK,CAAC,CAAC;IAC7B,IAAI,CAACd,OAAO,CAAC,QAAQ,CAAC;IACtBpE,aAAa,CAAC+G,MAAM,CAAC,CAAC;EACxB;;EAEA;AACF;AACA;AACA;AACA;EACEC,oBAAoBA,CAAC9B,SAAiB,EAAQ;IAC5C,MAAM+B,KAAK,GAAG,IAAI,CAAC7F,KAAK,CAACmD,QAAQ,CAAC,CAAC;IACnC,IAAI0C,KAAK,CAAC/B,SAAS,KAAKA,SAAS,EAAE;MACjC,IAAI,CAACtC,GAAG,CAAC;QAAEsC,SAAS,EAAE;MAAK,CAAC,CAAC;MAC7B,IAAI,IAAI,CAAC1D,MAAM,CAACG,aAAa,EAAE;QAC7B,IAAI,CAACqC,KAAK,CAAC,CAAC;MACd;IACF;IACA,IAAI,IAAI,CAACpC,mBAAmB,KAAKsD,SAAS,EAAE;MAC1C,IAAI,CAACtD,mBAAmB,GAAG,IAAI;IACjC;EACF;;EAEA;;EAEA;AACF;AACA;AACA;EACEsF,eAAeA,CAAA,EAAS;IACtB,IAAI,IAAI,CAAC9F,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAAC4C,UAAU,EAAE;MACpC;IACF;IACA,IAAI,CAACvE,GAAG,CAAC;MAAEuE,UAAU,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAM,CAAC,CAAC;IAC/C,IAAI,CAAChD,OAAO,CAAC,YAAY,CAAC;IAC1BpE,aAAa,CAACkH,eAAe,CAAC,CAAC;IAC/B,IAAI,CAAC7F,MAAM,CAAC8B,IAAI,CAAC,mBAAmB,EAAEO,SAAS,CAAC;EAClD;;EAEA;EACA2D,cAAcA,CAAA,EAAS;IACrB,IAAI,CAAC,IAAI,CAACjG,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAAC4C,UAAU,EAAE;MACrC;IACF;IACAnH,aAAa,CAACqH,cAAc,CAAC,CAAC;IAC9B,IAAI,CAACzE,GAAG,CAAC;MAAEuE,UAAU,EAAE;IAAM,CAAC,CAAC;IAC/B,IAAI,CAAC9F,MAAM,CAAC8B,IAAI,CAAC,kBAAkB,EAAEO,SAAS,CAAC;IAC/C,IAAI,CAAC4D,oBAAoB,CAAC,CAAC;EAC7B;EAEAC,gBAAgBA,CAAA,EAAS;IACvB,IAAI,IAAI,CAACnG,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAAC4C,UAAU,EAAE;MACpC,IAAI,CAACE,cAAc,CAAC,CAAC;IACvB,CAAC,MAAM;MACL,IAAI,CAACH,eAAe,CAAC,CAAC;IACxB;EACF;EAEAM,YAAYA,CAAA,EAAS;IACnB,IAAI,IAAI,CAACpG,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAAC6C,QAAQ,EAAE;MAClC;IACF;IACA,IAAI,CAACxE,GAAG,CAAC;MAAEwE,QAAQ,EAAE,IAAI;MAAED,UAAU,EAAE;IAAM,CAAC,CAAC;IAC/C,IAAI,CAAC/C,OAAO,CAAC,UAAU,CAAC;EAC1B;EAEAqD,YAAYA,CAAA,EAAS;IACnB,IAAI,CAAC,IAAI,CAACrG,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAAC6C,QAAQ,EAAE;MACnC;IACF;IACA,IAAI,CAACxE,GAAG,CAAC;MAAEwE,QAAQ,EAAE;IAAM,CAAC,CAAC;IAC7B,IAAI,CAACE,oBAAoB,CAAC,CAAC;EAC7B;EAEA,MAAMI,QAAQA,CAAA,EAAqB;IACjC,OAAO1H,aAAa,CAAC2H,QAAQ,CAAC,CAAC;EACjC;EAEAC,OAAOA,CAAA,EAAS;IACd5H,aAAa,CAAC6H,OAAO,CAAC,CAAC;EACzB;EAEQP,oBAAoBA,CAAA,EAAS;IACnC,IAAI,IAAI,CAAC1F,mBAAmB,EAAE;MAC5B,IAAI,CAACuD,MAAM,CAAC,IAAI,CAACvD,mBAAmB,CAAC;IACvC,CAAC,MAAM;MACL,IAAI,CAACgB,GAAG,CAAC;QAAEsC,SAAS,EAAE;MAAK,CAAC,CAAC;MAC7B,IAAI,CAACd,OAAO,CAAC,QAAQ,CAAC;IACxB;EACF;EAEQC,UAAUA,CAACyD,QAA0C,EAAc;IACzE,MAAMC,CAAC,GAAG;MAAE,GAAG,IAAI,CAAC3G,KAAK,CAACmD,QAAQ,CAAC,CAAC;MAAE,GAAGuD;IAAS,CAAC;IACnD,IAAIC,CAAC,CAAC7D,GAAG,EAAE,OAAO,KAAK;IACvB,IAAI6D,CAAC,CAACZ,UAAU,EAAE,OAAO,YAAY;IACrC,IAAIY,CAAC,CAACX,QAAQ,EAAE,OAAO,UAAU;IACjC,IAAIW,CAAC,CAAC7C,SAAS,EAAE,OAAO,QAAQ;IAChC,OAAO,QAAQ;EACjB;EAEQd,OAAOA,CAACuC,IAAgB,EAAQ;IACtC,IAAI,IAAI,CAACvF,KAAK,CAACmD,QAAQ,CAAC,CAAC,CAACoC,IAAI,KAAKA,IAAI,EAAE;MACvC,IAAI,CAAC/D,GAAG,CAAC;QAAE+D;MAAK,CAAC,CAAC;MAClB,IAAI,CAACtF,MAAM,CAAC8B,IAAI,CAAC,eAAe,EAAE;QAAEwD;MAAK,CAAC,CAAC;IAC7C;EACF;;EAEA;;EAEA;EACAqB,OAAOA,CAAA,EAAS;IACd,KAAK,MAAMC,GAAG,IAAI,IAAI,CAAC3G,mBAAmB,EAAE;MAC1C2G,GAAG,CAACC,MAAM,CAAC,CAAC;IACd;IACA,IAAI,CAAC5G,mBAAmB,GAAG,EAAE;IAC7B,IAAI,CAACD,MAAM,CAAC8G,SAAS,CAAC,CAAC;IACvB,IAAI,CAAC5G,WAAW,GAAG,KAAK;IACxB,IAAI,CAACK,mBAAmB,GAAG,IAAI;IAC/B5B,aAAa,CAACoI,aAAa,CAAC,CAAC;IAC7B,IAAI,CAAChH,KAAK,CAACiH,QAAQ,CAAC;MAAE,GAAGnI;IAAkB,CAAC,EAAE,IAAI,CAAC;EACrD;EAEQ0C,GAAGA,CAAC0F,OAA4B,EAAQ;IAC9C,IAAI,CAAClH,KAAK,CAACiH,QAAQ,CAACC,OAAO,CAAC;EAC9B;AACF","ignoreList":[]}
1
+ {"version":3,"names":["NativeAuVideo","createVideoStore","initialVideoState","Emitter","FULLSCREEN_SURFACE_ID","FLOATING_SURFACE_ID","RESERVED_SURFACES","Set","toNativeSource","source","id","uri","headers","title","artist","artworkUri","startPosition","VideoManager","instance","shared","store","events","nativeSubscriptions","initialized","config","fullscreenHost","floatingHost","pauseOnDetach","fullscreenOrientation","lastInlineSurfaceId","constructor","providerConfig","init","nativeInit","subscribeNative","addListener","event","listener","subs","push","onStatusChange","e","applyStatus","status","onLoad","set","duration","videoWidth","width","videoHeight","height","loading","emit","videoId","onProgress","position","buffered","onSeek","onEnd","undefined","onError","error","playing","onAttach","onDetach","pause","onPipChange","pip","active","setMode","deriveMode","prev","getState","paused","buffering","setSource","options","autoplay","current","currentVideo","sameVideo","video","play","surfaceId","attach","preload","resume","toggle","stop","seek","clamped","Math","max","min","seekTo","seekBy","offset","setRate","rate","setVolume","volume","mute","muted","setMuted","unmute","setRepeat","repeat","setResizeMode","mode","resizeMode","setOrientation","lock","orientationLock","getPosition","has","detach","handleSurfaceUnmount","state","enterFullscreen","fullscreen","floating","forced","exitFullscreen","restoreInlineSurface","toggleFullscreen","showFloating","hideFloating","enterPiP","enterPip","exitPiP","exitPip","override","s","destroy","sub","remove","removeAll","releasePlayer","setState","partial"],"sourceRoot":"../../../src","sources":["core/VideoManager.ts"],"mappings":"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","ignoreList":[]}
@@ -6,14 +6,18 @@ import { usePlayback } from "./usePlayback.js";
6
6
  export function useFullscreen() {
7
7
  const manager = useVideoManager();
8
8
  const isFullscreen = usePlayback(s => s.fullscreen);
9
+ const orientationLock = usePlayback(s => s.orientationLock);
9
10
  const enter = useCallback(() => manager.enterFullscreen(), [manager]);
10
11
  const exit = useCallback(() => manager.exitFullscreen(), [manager]);
11
12
  const toggle = useCallback(() => manager.toggleFullscreen(), [manager]);
13
+ const setOrientation = useCallback(lock => manager.setOrientation(lock), [manager]);
12
14
  return {
13
15
  isFullscreen,
14
16
  enter,
15
17
  exit,
16
- toggle
18
+ toggle,
19
+ orientationLock,
20
+ setOrientation
17
21
  };
18
22
  }
19
23
  //# sourceMappingURL=useFullscreen.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useVideoManager","usePlayback","useFullscreen","manager","isFullscreen","s","fullscreen","enter","enterFullscreen","exit","exitFullscreen","toggle","toggleFullscreen"],"sourceRoot":"../../../src","sources":["hooks/useFullscreen.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,6BAA0B;AAC1D,SAASC,WAAW,QAAQ,kBAAe;AAE3C,OAAO,SAASC,aAAaA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAGH,eAAe,CAAC,CAAC;EACjC,MAAMI,YAAY,GAAGH,WAAW,CAAEI,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC;EAErD,MAAMC,KAAK,GAAGR,WAAW,CAAC,MAAMI,OAAO,CAACK,eAAe,CAAC,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC;EACrE,MAAMM,IAAI,GAAGV,WAAW,CAAC,MAAMI,OAAO,CAACO,cAAc,CAAC,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;EACnE,MAAMQ,MAAM,GAAGZ,WAAW,CAAC,MAAMI,OAAO,CAACS,gBAAgB,CAAC,CAAC,EAAE,CAACT,OAAO,CAAC,CAAC;EAEvE,OAAO;IAAEC,YAAY;IAAEG,KAAK;IAAEE,IAAI;IAAEE;EAAO,CAAC;AAC9C","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useVideoManager","usePlayback","useFullscreen","manager","isFullscreen","s","fullscreen","orientationLock","enter","enterFullscreen","exit","exitFullscreen","toggle","toggleFullscreen","setOrientation","lock"],"sourceRoot":"../../../src","sources":["hooks/useFullscreen.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,6BAA0B;AAE1D,SAASC,WAAW,QAAQ,kBAAe;AAE3C,OAAO,SAASC,aAAaA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAGH,eAAe,CAAC,CAAC;EACjC,MAAMI,YAAY,GAAGH,WAAW,CAAEI,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC;EACrD,MAAMC,eAAe,GAAGN,WAAW,CAAEI,CAAC,IAAKA,CAAC,CAACE,eAAe,CAAC;EAE7D,MAAMC,KAAK,GAAGT,WAAW,CAAC,MAAMI,OAAO,CAACM,eAAe,CAAC,CAAC,EAAE,CAACN,OAAO,CAAC,CAAC;EACrE,MAAMO,IAAI,GAAGX,WAAW,CAAC,MAAMI,OAAO,CAACQ,cAAc,CAAC,CAAC,EAAE,CAACR,OAAO,CAAC,CAAC;EACnE,MAAMS,MAAM,GAAGb,WAAW,CAAC,MAAMI,OAAO,CAACU,gBAAgB,CAAC,CAAC,EAAE,CAACV,OAAO,CAAC,CAAC;EACvE,MAAMW,cAAc,GAAGf,WAAW,CAC/BgB,IAAqB,IAAKZ,OAAO,CAACW,cAAc,CAACC,IAAI,CAAC,EACvD,CAACZ,OAAO,CACV,CAAC;EAED,OAAO;IAAEC,YAAY;IAAEI,KAAK;IAAEE,IAAI;IAAEE,MAAM;IAAEL,eAAe;IAAEO;EAAe,CAAC;AAC/E","ignoreList":[]}
@@ -16,6 +16,7 @@ export const initialVideoState = {
16
16
  muted: false,
17
17
  repeat: false,
18
18
  resizeMode: 'contain',
19
+ orientationLock: 'auto',
19
20
  fullscreen: false,
20
21
  pip: false,
21
22
  floating: false,
@@ -1 +1 @@
1
- {"version":3,"names":["createStore","initialVideoState","currentVideo","status","playing","paused","buffering","loading","position","duration","buffered","rate","volume","muted","repeat","resizeMode","fullscreen","pip","floating","mode","surfaceId","videoWidth","videoHeight","error","createVideoStore"],"sourceRoot":"../../../src","sources":["state/createVideoStore.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAuB,iBAAiB;AAG5D,OAAO,MAAMC,iBAA6B,GAAG;EAC3CC,YAAY,EAAE,IAAI;EAClBC,MAAM,EAAE,MAAM;EACdC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE,KAAK;EACbC,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE,KAAK;EACdC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,MAAM,EAAE,CAAC;EACTC,KAAK,EAAE,KAAK;EACZC,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,KAAK;EACjBC,GAAG,EAAE,KAAK;EACVC,QAAQ,EAAE,KAAK;EACfC,IAAI,EAAE,QAAQ;EACdC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE,CAAC;EACbC,WAAW,EAAE,CAAC;EACdC,KAAK,EAAE;AACT,CAAC;AAID,OAAO,SAASC,gBAAgBA,CAAA,EAAe;EAC7C,OAAOxB,WAAW,CAAa,CAAC,CAAC,OAAO;IAAE,GAAGC;EAAkB,CAAC,CAAC,CAAC;AACpE","ignoreList":[]}
1
+ {"version":3,"names":["createStore","initialVideoState","currentVideo","status","playing","paused","buffering","loading","position","duration","buffered","rate","volume","muted","repeat","resizeMode","orientationLock","fullscreen","pip","floating","mode","surfaceId","videoWidth","videoHeight","error","createVideoStore"],"sourceRoot":"../../../src","sources":["state/createVideoStore.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAuB,iBAAiB;AAG5D,OAAO,MAAMC,iBAA6B,GAAG;EAC3CC,YAAY,EAAE,IAAI;EAClBC,MAAM,EAAE,MAAM;EACdC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE,KAAK;EACbC,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE,KAAK;EACdC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,MAAM,EAAE,CAAC;EACTC,KAAK,EAAE,KAAK;EACZC,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,SAAS;EACrBC,eAAe,EAAE,MAAM;EACvBC,UAAU,EAAE,KAAK;EACjBC,GAAG,EAAE,KAAK;EACVC,QAAQ,EAAE,KAAK;EACfC,IAAI,EAAE,QAAQ;EACdC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE,CAAC;EACbC,WAAW,EAAE,CAAC;EACdC,KAAK,EAAE;AACT,CAAC;AAID,OAAO,SAASC,gBAAgBA,CAAA,EAAe;EAC7C,OAAOzB,WAAW,CAAa,CAAC,CAAC,OAAO;IAAE,GAAGC;EAAkB,CAAC,CAAC,CAAC;AACpE","ignoreList":[]}
@@ -1,9 +1,10 @@
1
- import { type TurboModule, type CodegenTypes } from 'react-native';
1
+ import { type TurboModule } from 'react-native';
2
+ import type { EventEmitter, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
2
3
  export type NativeVideoSource = {
3
4
  id: string;
4
5
  uri: string;
5
6
  /** HTTP headers, string -> string */
6
- headers?: CodegenTypes.UnsafeObject;
7
+ headers?: UnsafeObject;
7
8
  title?: string;
8
9
  artist?: string;
9
10
  artworkUri?: string;
@@ -65,20 +66,26 @@ export interface Spec extends TurboModule {
65
66
  enterFullscreen(): void;
66
67
  /** Restore the previous orientation lock. */
67
68
  exitFullscreen(): void;
69
+ /**
70
+ * Force a screen orientation, overriding the app's own lock and the
71
+ * fullscreen sensor unlock until cleared with 'auto'.
72
+ * auto | portrait | inverted-portrait | landscape | inverted-landscape
73
+ */
74
+ setOrientation(orientation: string): void;
68
75
  enterPip(): Promise<boolean>;
69
76
  exitPip(): void;
70
77
  getPosition(): Promise<number>;
71
78
  /** Tear down the native player entirely. */
72
79
  releasePlayer(): void;
73
- readonly onStatusChange: CodegenTypes.EventEmitter<NativeStatusEvent>;
74
- readonly onLoad: CodegenTypes.EventEmitter<NativeLoadEvent>;
75
- readonly onProgress: CodegenTypes.EventEmitter<NativeProgressEvent>;
76
- readonly onSeek: CodegenTypes.EventEmitter<NativeSeekEvent>;
77
- readonly onEnd: CodegenTypes.EventEmitter<void>;
78
- readonly onError: CodegenTypes.EventEmitter<NativeErrorEvent>;
79
- readonly onAttach: CodegenTypes.EventEmitter<NativeSurfaceEvent>;
80
- readonly onDetach: CodegenTypes.EventEmitter<NativeSurfaceEvent>;
81
- readonly onPipChange: CodegenTypes.EventEmitter<NativePipEvent>;
80
+ readonly onStatusChange: EventEmitter<NativeStatusEvent>;
81
+ readonly onLoad: EventEmitter<NativeLoadEvent>;
82
+ readonly onProgress: EventEmitter<NativeProgressEvent>;
83
+ readonly onSeek: EventEmitter<NativeSeekEvent>;
84
+ readonly onEnd: EventEmitter<void>;
85
+ readonly onError: EventEmitter<NativeErrorEvent>;
86
+ readonly onAttach: EventEmitter<NativeSurfaceEvent>;
87
+ readonly onDetach: EventEmitter<NativeSurfaceEvent>;
88
+ readonly onPipChange: EventEmitter<NativePipEvent>;
82
89
  }
83
90
  declare const _default: Spec;
84
91
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeAuVideo.d.ts","sourceRoot":"","sources":["../../../src/NativeAuVideo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NativeAuVideo.d.ts","sourceRoot":"","sources":["../../../src/NativeAuVideo.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type ViewProps } from 'react-native';
2
- import type { ResizeMode, VideoSource } from '../types/video.js';
2
+ import type { OrientationLock, ResizeMode, VideoSource } from '../types/video.js';
3
3
  export interface VideoPlayerProps extends ViewProps {
4
4
  source: VideoSource;
5
5
  /** Default true. */
@@ -13,6 +13,12 @@ export interface VideoPlayerProps extends ViewProps {
13
13
  /** Show built-in controls. Default true. */
14
14
  controls?: boolean;
15
15
  resizeMode?: ResizeMode;
16
+ /**
17
+ * Force the screen into this orientation while the player is mounted:
18
+ * `'landscape'`, `'inverted-landscape'`, `'portrait'` or
19
+ * `'inverted-portrait'`. Released (back to `'auto'`) on unmount.
20
+ */
21
+ orientation?: OrientationLock;
16
22
  }
17
23
  /**
18
24
  * Convenience all-in-one player: `setSource` (same-video handoff aware) +
@@ -23,5 +29,5 @@ export interface VideoPlayerProps extends ViewProps {
23
29
  * <VideoPlayer source={{ id: '123', uri }} style={{ aspectRatio: 16 / 9 }} />
24
30
  * ```
25
31
  */
26
- export declare function VideoPlayer({ source, autoplay, surfaceId, controls, resizeMode, style, ...rest }: VideoPlayerProps): import("react").JSX.Element;
32
+ export declare function VideoPlayer({ source, autoplay, surfaceId, controls, resizeMode, orientation, style, ...rest }: VideoPlayerProps): import("react").JSX.Element;
27
33
  //# sourceMappingURL=VideoPlayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoPlayer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAgB,CAAC;AAI9D,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,MAAM,EAAE,WAAW,CAAC;IACpB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAe,EACf,SAAS,EACT,QAAe,EACf,UAAU,EACV,KAAK,EACL,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAuBlB"}
1
+ {"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoPlayer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAgB,CAAC;AAI/E,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,MAAM,EAAE,WAAW,CAAC;IACpB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAe,EACf,SAAS,EACT,QAAe,EACf,UAAU,EACV,WAAW,EACX,KAAK,EACL,GAAG,IAAI,EACR,EAAE,gBAAgB,+BA+BlB"}
@@ -1,6 +1,6 @@
1
1
  import { type VideoStore } from '../state/createVideoStore.js';
2
2
  import type { VideoEventMap, VideoEventName } from '../types/events.js';
3
- import type { ResizeMode, SetSourceOptions, VideoProviderConfig, VideoSource } from '../types/video.js';
3
+ import type { OrientationLock, ResizeMode, SetSourceOptions, VideoProviderConfig, VideoSource } from '../types/video.js';
4
4
  import { type Listener, type Subscription } from '../utils/Emitter.js';
5
5
  /** Surface id used by the built-in fullscreen host. */
6
6
  export declare const FULLSCREEN_SURFACE_ID = "__au_fullscreen__";
@@ -55,6 +55,11 @@ export declare class VideoManager {
55
55
  unmute(): void;
56
56
  setRepeat(repeat: boolean): void;
57
57
  setResizeMode(mode: ResizeMode): void;
58
+ /**
59
+ * Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
60
+ * overriding the app's own lock until cleared with `'auto'`.
61
+ */
62
+ setOrientation(lock: OrientationLock): void;
58
63
  getPosition(): Promise<number>;
59
64
  /** Re-parent the player into the surface registered under `surfaceId`. */
60
65
  attach(surfaceId: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"VideoManager.d.ts","sourceRoot":"","sources":["../../../../src/core/VideoManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,8BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAiB,CAAC;AACrE,OAAO,KAAK,EAGV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EAEZ,MAAM,mBAAgB,CAAC;AACxB,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAkB,CAAC;AAE7E,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,qDAAqD;AACrD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAgBrD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IAEpD,MAAM,KAAK,MAAM,IAAI,YAAY,CAKhC;IAED,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAsB;IAEhD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAIZ;IACF,2EAA2E;IAC3E,OAAO,CAAC,mBAAmB,CAAuB;IAElD,OAAO;IAEP,IAAI,cAAc,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAElD;IAED;;;OAGG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAYxC,WAAW,CAAC,CAAC,SAAS,cAAc,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACnC,YAAY;IAIf,OAAO,CAAC,eAAe;IAsEvB,OAAO,CAAC,WAAW;IAuBnB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;IA0BhE,oEAAoE;IACpE,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIlC,IAAI,IAAI,IAAI;IAIZ,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;IAId,MAAM,IAAI,IAAI;IAQd,IAAI,IAAI,IAAI;IAKZ,8BAA8B;IAC9B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU5B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,IAAI;IAKd,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKhC,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK/B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAMpC,0EAA0E;IAC1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS/B,uFAAuF;IACvF,MAAM,IAAI,IAAI;IAMd;;;;OAIG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAe7C;;;OAGG;IACH,eAAe,IAAI,IAAI;IAUvB,gFAAgF;IAChF,cAAc,IAAI,IAAI;IAUtB,gBAAgB,IAAI,IAAI;IAQxB,YAAY,IAAI,IAAI;IAQpB,YAAY,IAAI,IAAI;IAQd,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,OAAO;IASf,2DAA2D;IAC3D,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,GAAG;CAGZ"}
1
+ {"version":3,"file":"VideoManager.d.ts","sourceRoot":"","sources":["../../../../src/core/VideoManager.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ import type { OrientationLock } from '../types/video.js';
1
2
  export declare function useFullscreen(): {
2
3
  isFullscreen: boolean;
3
4
  enter: () => void;
4
5
  exit: () => void;
5
6
  toggle: () => void;
7
+ orientationLock: OrientationLock;
8
+ setOrientation: (lock: OrientationLock) => void;
6
9
  };
7
10
  //# sourceMappingURL=useFullscreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFullscreen.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useFullscreen.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa;;;;;EAS5B"}
1
+ {"version":3,"file":"useFullscreen.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useFullscreen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAgB,CAAC;AAGtD,wBAAgB,aAAa;;;;;;2BASlB,eAAe;EAKzB"}
@@ -14,5 +14,5 @@ export { useFullscreen } from './hooks/useFullscreen.js';
14
14
  export { usePiP } from './hooks/usePiP.js';
15
15
  export { useVideoEvents, type VideoEventHandlers, } from './hooks/useVideoEvents.js';
16
16
  export { formatTime } from './utils/formatTime.js';
17
- export type { VideoSource, ResizeMode, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, VideoEventMap, VideoEventName, } from './types/index.js';
17
+ export type { VideoSource, ResizeMode, OrientationLock, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, VideoEventMap, VideoEventName, } from './types/index.js';
18
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,8BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAA+B,CAAC;AACjE,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAgB,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,2BAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAEhD,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,kBAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,8BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAA+B,CAAC;AACjE,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAgB,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,2BAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAEhD,YAAY,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,kBAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createVideoStore.d.ts","sourceRoot":"","sources":["../../../../src/state/createVideoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAgB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,EAAE,UAuB/B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
1
+ {"version":3,"file":"createVideoStore.d.ts","sourceRoot":"","sources":["../../../../src/state/createVideoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAgB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,EAAE,UAwB/B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
@@ -1,3 +1,3 @@
1
- export type { VideoSource, ResizeMode, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, } from './video.js';
1
+ export type { VideoSource, ResizeMode, OrientationLock, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, } from './video.js';
2
2
  export type { VideoEventMap, VideoEventName } from './events.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAU,CAAC"}
@@ -14,6 +14,16 @@ export interface VideoSource {
14
14
  startPosition?: number;
15
15
  }
16
16
  export type ResizeMode = 'contain' | 'cover' | 'stretch';
17
+ /**
18
+ * Forced screen orientation.
19
+ *
20
+ * - `auto` — no lock; the app's own orientation settings apply.
21
+ * - `landscape` / `inverted-landscape` — the two landscape rotations
22
+ * (inverted = rotated 180°).
23
+ * - `portrait` / `inverted-portrait` — upright and upside-down portrait.
24
+ * Note: iPhones without a home button ignore upside-down portrait.
25
+ */
26
+ export type OrientationLock = 'auto' | 'portrait' | 'inverted-portrait' | 'landscape' | 'inverted-landscape';
17
27
  export type PlayerMode = 'inline' | 'fullscreen' | 'floating' | 'pip' | 'background' | 'hidden';
18
28
  export type PlaybackStatus = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'buffering' | 'ended' | 'error';
19
29
  export interface VideoError {
@@ -38,6 +48,8 @@ export interface VideoState {
38
48
  muted: boolean;
39
49
  repeat: boolean;
40
50
  resizeMode: ResizeMode;
51
+ /** Orientation forced via `setOrientation` (not the fullscreen unlock). */
52
+ orientationLock: OrientationLock;
41
53
  fullscreen: boolean;
42
54
  pip: boolean;
43
55
  floating: boolean;
@@ -66,5 +78,11 @@ export interface VideoProviderConfig {
66
78
  floatingHost?: boolean;
67
79
  /** Pause playback when the active surface unmounts. Default false. */
68
80
  pauseOnDetach?: boolean;
81
+ /**
82
+ * Orientation to force while fullscreen is active, e.g. `'landscape'`.
83
+ * Restored to the previous lock (or `'auto'`) on exit.
84
+ * Default `'auto'` — fullscreen just unlocks the sensor.
85
+ */
86
+ fullscreenOrientation?: OrientationLock;
69
87
  }
70
88
  //# sourceMappingURL=video.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../../src/types/video.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD,MAAM,MAAM,UAAU,GACpB,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../../src/types/video.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,UAAU,GACV,mBAAmB,GACnB,WAAW,GACX,oBAAoB,CAAC;AAEzB,MAAM,MAAM,UAAU,GACpB,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,2EAA2E;IAC3E,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,eAAe,CAAC;CACzC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-video-provider",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Singleton-engine video library for React Native (one native player, many surfaces)",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,14 +1,16 @@
1
- import {
2
- TurboModuleRegistry,
3
- type TurboModule,
4
- type CodegenTypes,
5
- } from 'react-native';
1
+ import { TurboModuleRegistry, type TurboModule } from 'react-native';
2
+ // Direct imports (not the `CodegenTypes.` namespace) so the spec parses on
3
+ // RN 0.79's codegen as well as 0.80+.
4
+ import type {
5
+ EventEmitter,
6
+ UnsafeObject,
7
+ } from 'react-native/Libraries/Types/CodegenTypes';
6
8
 
7
9
  export type NativeVideoSource = {
8
10
  id: string;
9
11
  uri: string;
10
12
  /** HTTP headers, string -> string */
11
- headers?: CodegenTypes.UnsafeObject;
13
+ headers?: UnsafeObject;
12
14
  title?: string;
13
15
  artist?: string;
14
16
  artworkUri?: string;
@@ -84,6 +86,13 @@ export interface Spec extends TurboModule {
84
86
  /** Restore the previous orientation lock. */
85
87
  exitFullscreen(): void;
86
88
 
89
+ /**
90
+ * Force a screen orientation, overriding the app's own lock and the
91
+ * fullscreen sensor unlock until cleared with 'auto'.
92
+ * auto | portrait | inverted-portrait | landscape | inverted-landscape
93
+ */
94
+ setOrientation(orientation: string): void;
95
+
87
96
  enterPip(): Promise<boolean>;
88
97
  exitPip(): void;
89
98
 
@@ -92,15 +101,15 @@ export interface Spec extends TurboModule {
92
101
  /** Tear down the native player entirely. */
93
102
  releasePlayer(): void;
94
103
 
95
- readonly onStatusChange: CodegenTypes.EventEmitter<NativeStatusEvent>;
96
- readonly onLoad: CodegenTypes.EventEmitter<NativeLoadEvent>;
97
- readonly onProgress: CodegenTypes.EventEmitter<NativeProgressEvent>;
98
- readonly onSeek: CodegenTypes.EventEmitter<NativeSeekEvent>;
99
- readonly onEnd: CodegenTypes.EventEmitter<void>;
100
- readonly onError: CodegenTypes.EventEmitter<NativeErrorEvent>;
101
- readonly onAttach: CodegenTypes.EventEmitter<NativeSurfaceEvent>;
102
- readonly onDetach: CodegenTypes.EventEmitter<NativeSurfaceEvent>;
103
- readonly onPipChange: CodegenTypes.EventEmitter<NativePipEvent>;
104
+ readonly onStatusChange: EventEmitter<NativeStatusEvent>;
105
+ readonly onLoad: EventEmitter<NativeLoadEvent>;
106
+ readonly onProgress: EventEmitter<NativeProgressEvent>;
107
+ readonly onSeek: EventEmitter<NativeSeekEvent>;
108
+ readonly onEnd: EventEmitter<void>;
109
+ readonly onError: EventEmitter<NativeErrorEvent>;
110
+ readonly onAttach: EventEmitter<NativeSurfaceEvent>;
111
+ readonly onDetach: EventEmitter<NativeSurfaceEvent>;
112
+ readonly onPipChange: EventEmitter<NativePipEvent>;
104
113
  }
105
114
 
106
115
  export default TurboModuleRegistry.getEnforcing<Spec>('AuVideo');
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The TurboModule spec imports codegen types from the deep path
3
+ * 'react-native/Libraries/Types/CodegenTypes' so it parses on RN 0.79's
4
+ * codegen (which can't resolve the `CodegenTypes.` namespace style added in
5
+ * 0.80). This repo typechecks with the `react-native-strict-api` condition,
6
+ * which blocks deep Libraries/* type resolution — so alias the deep path to
7
+ * the public namespace here. Type-only; erased at build time.
8
+ */
9
+ declare module 'react-native/Libraries/Types/CodegenTypes' {
10
+ import type { CodegenTypes } from 'react-native';
11
+
12
+ export type EventEmitter<T> = CodegenTypes.EventEmitter<T>;
13
+ export type UnsafeObject = CodegenTypes.UnsafeObject;
14
+ export type Int32 = CodegenTypes.Int32;
15
+ export type Float = CodegenTypes.Float;
16
+ export type Double = CodegenTypes.Double;
17
+ export type WithDefault<T, D> = CodegenTypes.WithDefault<T, D>;
18
+ export type DirectEventHandler<T> = CodegenTypes.DirectEventHandler<T>;
19
+ export type BubblingEventHandler<T> = CodegenTypes.BubblingEventHandler<T>;
20
+ }
@@ -1,7 +1,7 @@
1
1
  import { useEffect } from 'react';
2
2
  import { StyleSheet, View, type ViewProps } from 'react-native';
3
3
  import { useVideoManager } from '../provider/VideoContext';
4
- import type { ResizeMode, VideoSource } from '../types/video';
4
+ import type { OrientationLock, ResizeMode, VideoSource } from '../types/video';
5
5
  import { VideoControls } from './VideoControls';
6
6
  import { VideoSurface } from './VideoSurface';
7
7
 
@@ -18,6 +18,12 @@ export interface VideoPlayerProps extends ViewProps {
18
18
  /** Show built-in controls. Default true. */
19
19
  controls?: boolean;
20
20
  resizeMode?: ResizeMode;
21
+ /**
22
+ * Force the screen into this orientation while the player is mounted:
23
+ * `'landscape'`, `'inverted-landscape'`, `'portrait'` or
24
+ * `'inverted-portrait'`. Released (back to `'auto'`) on unmount.
25
+ */
26
+ orientation?: OrientationLock;
21
27
  }
22
28
 
23
29
  /**
@@ -35,6 +41,7 @@ export function VideoPlayer({
35
41
  surfaceId,
36
42
  controls = true,
37
43
  resizeMode,
44
+ orientation,
38
45
  style,
39
46
  ...rest
40
47
  }: VideoPlayerProps) {
@@ -54,6 +61,14 @@ export function VideoPlayer({
54
61
  }
55
62
  }, [manager, resizeMode]);
56
63
 
64
+ useEffect(() => {
65
+ if (!orientation || orientation === 'auto') {
66
+ return;
67
+ }
68
+ manager.setOrientation(orientation);
69
+ return () => manager.setOrientation('auto');
70
+ }, [manager, orientation]);
71
+
57
72
  return (
58
73
  <View style={[styles.container, style]} {...rest}>
59
74
  <VideoSurface surfaceId={id} style={styles.surface} />
@@ -7,6 +7,7 @@ import {
7
7
  } from '../state/createVideoStore';
8
8
  import type { VideoEventMap, VideoEventName } from '../types/events';
9
9
  import type {
10
+ OrientationLock,
10
11
  PlaybackStatus,
11
12
  PlayerMode,
12
13
  ResizeMode,
@@ -62,6 +63,7 @@ export class VideoManager {
62
63
  fullscreenHost: true,
63
64
  floatingHost: true,
64
65
  pauseOnDetach: false,
66
+ fullscreenOrientation: 'auto',
65
67
  };
66
68
  /** Last non-reserved surface, restored after fullscreen/floating exits. */
67
69
  private lastInlineSurfaceId: string | null = null;
@@ -295,6 +297,15 @@ export class VideoManager {
295
297
  NativeAuVideo.setResizeMode(mode);
296
298
  }
297
299
 
300
+ /**
301
+ * Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
302
+ * overriding the app's own lock until cleared with `'auto'`.
303
+ */
304
+ setOrientation(lock: OrientationLock): void {
305
+ this.set({ orientationLock: lock });
306
+ NativeAuVideo.setOrientation(lock);
307
+ }
308
+
298
309
  async getPosition(): Promise<number> {
299
310
  return NativeAuVideo.getPosition();
300
311
  }
@@ -349,6 +360,10 @@ export class VideoManager {
349
360
  this.set({ fullscreen: true, floating: false });
350
361
  this.setMode('fullscreen');
351
362
  NativeAuVideo.enterFullscreen();
363
+ const forced = this.config.fullscreenOrientation;
364
+ if (forced !== 'auto') {
365
+ NativeAuVideo.setOrientation(forced);
366
+ }
352
367
  this.events.emit('onEnterFullscreen', undefined);
353
368
  }
354
369
 
@@ -357,6 +372,10 @@ export class VideoManager {
357
372
  if (!this.store.getState().fullscreen) {
358
373
  return;
359
374
  }
375
+ if (this.config.fullscreenOrientation !== 'auto') {
376
+ // Drop the fullscreen-only lock, restoring any explicit setOrientation.
377
+ NativeAuVideo.setOrientation(this.store.getState().orientationLock);
378
+ }
360
379
  NativeAuVideo.exitFullscreen();
361
380
  this.set({ fullscreen: false });
362
381
  this.events.emit('onExitFullscreen', undefined);
@@ -431,6 +450,7 @@ export class VideoManager {
431
450
  this.events.removeAll();
432
451
  this.initialized = false;
433
452
  this.lastInlineSurfaceId = null;
453
+ NativeAuVideo.setOrientation('auto');
434
454
  NativeAuVideo.releasePlayer();
435
455
  this.store.setState({ ...initialVideoState }, true);
436
456
  }
@@ -1,14 +1,20 @@
1
1
  import { useCallback } from 'react';
2
2
  import { useVideoManager } from '../provider/VideoContext';
3
+ import type { OrientationLock } from '../types/video';
3
4
  import { usePlayback } from './usePlayback';
4
5
 
5
6
  export function useFullscreen() {
6
7
  const manager = useVideoManager();
7
8
  const isFullscreen = usePlayback((s) => s.fullscreen);
9
+ const orientationLock = usePlayback((s) => s.orientationLock);
8
10
 
9
11
  const enter = useCallback(() => manager.enterFullscreen(), [manager]);
10
12
  const exit = useCallback(() => manager.exitFullscreen(), [manager]);
11
13
  const toggle = useCallback(() => manager.toggleFullscreen(), [manager]);
14
+ const setOrientation = useCallback(
15
+ (lock: OrientationLock) => manager.setOrientation(lock),
16
+ [manager]
17
+ );
12
18
 
13
- return { isFullscreen, enter, exit, toggle };
19
+ return { isFullscreen, enter, exit, toggle, orientationLock, setOrientation };
14
20
  }
package/src/index.ts CHANGED
@@ -43,6 +43,7 @@ export { formatTime } from './utils/formatTime';
43
43
  export type {
44
44
  VideoSource,
45
45
  ResizeMode,
46
+ OrientationLock,
46
47
  PlayerMode,
47
48
  PlaybackStatus,
48
49
  VideoError,
@@ -16,6 +16,7 @@ export const initialVideoState: VideoState = {
16
16
  muted: false,
17
17
  repeat: false,
18
18
  resizeMode: 'contain',
19
+ orientationLock: 'auto',
19
20
  fullscreen: false,
20
21
  pip: false,
21
22
  floating: false,
@@ -1,6 +1,7 @@
1
1
  export type {
2
2
  VideoSource,
3
3
  ResizeMode,
4
+ OrientationLock,
4
5
  PlayerMode,
5
6
  PlaybackStatus,
6
7
  VideoError,
@@ -16,6 +16,22 @@ export interface VideoSource {
16
16
 
17
17
  export type ResizeMode = 'contain' | 'cover' | 'stretch';
18
18
 
19
+ /**
20
+ * Forced screen orientation.
21
+ *
22
+ * - `auto` — no lock; the app's own orientation settings apply.
23
+ * - `landscape` / `inverted-landscape` — the two landscape rotations
24
+ * (inverted = rotated 180°).
25
+ * - `portrait` / `inverted-portrait` — upright and upside-down portrait.
26
+ * Note: iPhones without a home button ignore upside-down portrait.
27
+ */
28
+ export type OrientationLock =
29
+ | 'auto'
30
+ | 'portrait'
31
+ | 'inverted-portrait'
32
+ | 'landscape'
33
+ | 'inverted-landscape';
34
+
19
35
  export type PlayerMode =
20
36
  'inline' | 'fullscreen' | 'floating' | 'pip' | 'background' | 'hidden';
21
37
 
@@ -52,6 +68,8 @@ export interface VideoState {
52
68
  muted: boolean;
53
69
  repeat: boolean;
54
70
  resizeMode: ResizeMode;
71
+ /** Orientation forced via `setOrientation` (not the fullscreen unlock). */
72
+ orientationLock: OrientationLock;
55
73
  fullscreen: boolean;
56
74
  pip: boolean;
57
75
  floating: boolean;
@@ -82,4 +100,10 @@ export interface VideoProviderConfig {
82
100
  floatingHost?: boolean;
83
101
  /** Pause playback when the active surface unmounts. Default false. */
84
102
  pauseOnDetach?: boolean;
103
+ /**
104
+ * Orientation to force while fullscreen is active, e.g. `'landscape'`.
105
+ * Restored to the previous lock (or `'auto'`) on exit.
106
+ * Default `'auto'` — fullscreen just unlocks the sensor.
107
+ */
108
+ fullscreenOrientation?: OrientationLock;
85
109
  }