react-native-video-provider 0.1.1 → 0.2.1

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 +34 -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 +16 -0
  10. package/lib/module/components/VideoPlayer.js.map +1 -1
  11. package/lib/module/core/VideoManager.js +50 -5
  12. package/lib/module/core/VideoManager.js.map +1 -1
  13. package/lib/module/hooks/useFullscreen.js +7 -3
  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 +15 -2
  20. package/lib/typescript/src/components/VideoPlayer.d.ts.map +1 -1
  21. package/lib/typescript/src/core/VideoManager.d.ts +24 -5
  22. package/lib/typescript/src/core/VideoManager.d.ts.map +1 -1
  23. package/lib/typescript/src/hooks/useFullscreen.d.ts +5 -2
  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 +12 -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 +32 -1
  36. package/src/core/VideoManager.ts +58 -5
  37. package/src/hooks/useFullscreen.ts +15 -3
  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 +18 -0
package/README.md CHANGED
@@ -83,6 +83,37 @@ player.showFloating(); // draggable in-app window
83
83
  player.enterPiP(); // system picture-in-picture
84
84
  ```
85
85
 
86
+ **5. Force an orientation** — values: `'auto' | 'portrait' |
87
+ 'inverted-portrait' | 'landscape' | 'inverted-landscape'`.
88
+
89
+ Scoped to fullscreen (applied when fullscreen opens, restored when it
90
+ closes — the rest of the app is unaffected):
91
+
92
+ ```tsx
93
+ // This player's fullscreen (incl. the built-in controls' button) locks to
94
+ // portrait — e.g. a vertical video:
95
+ <VideoPlayer source={video} fullscreenOrientation="portrait" />
96
+
97
+ // Or per call:
98
+ const { enter, toggle } = useFullscreen();
99
+ enter('landscape');
100
+ ```
101
+
102
+ Or as a standing lock, independent of fullscreen:
103
+
104
+ ```tsx
105
+ // While this player is mounted (released on unmount):
106
+ <VideoPlayer source={video} orientation="landscape" />
107
+
108
+ // Imperative:
109
+ player.setOrientation('inverted-landscape');
110
+ player.setOrientation('auto'); // release
111
+ ```
112
+
113
+ On iOS this needs the AppDelegate forwarding shown in
114
+ [Platform setup](#ios--fullscreen-rotation). Inverted portrait is ignored by
115
+ iPhones without a home button (the OS doesn't allow it).
116
+
86
117
  ## Surfaces (the core idea)
87
118
 
88
119
  `<VideoSurface>` never creates a player — it registers a mount point. The
@@ -120,8 +151,9 @@ useVideoEvents({
120
151
  ### iOS — fullscreen rotation
121
152
 
122
153
  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):
154
+ library so rotation unlocks while fullscreen is visible and `setOrientation`
155
+ / the `orientation` prop can force a rotation (skip this only if you don't
156
+ use those features and your app already supports all orientations):
125
157
 
126
158
  ```swift
127
159
  // 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,8 @@ export function VideoPlayer({
21
21
  surfaceId,
22
22
  controls = true,
23
23
  resizeMode,
24
+ orientation,
25
+ fullscreenOrientation,
24
26
  style,
25
27
  ...rest
26
28
  }) {
@@ -40,6 +42,20 @@ export function VideoPlayer({
40
42
  manager.setResizeMode(resizeMode);
41
43
  }
42
44
  }, [manager, resizeMode]);
45
+ useEffect(() => {
46
+ if (!orientation || orientation === 'auto') {
47
+ return;
48
+ }
49
+ manager.setOrientation(orientation);
50
+ return () => manager.setOrientation('auto');
51
+ }, [manager, orientation]);
52
+ useEffect(() => {
53
+ if (!fullscreenOrientation) {
54
+ return;
55
+ }
56
+ manager.setFullscreenOrientation(fullscreenOrientation);
57
+ return () => manager.setFullscreenOrientation(null);
58
+ }, [manager, fullscreenOrientation]);
43
59
  return /*#__PURE__*/_jsxs(View, {
44
60
  style: [styles.container, style],
45
61
  ...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","fullscreenOrientation","style","rest","manager","id","setSource","setResizeMode","setOrientation","setFullscreenOrientation","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;AA8B9C;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,qBAAqB;EACrBC,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAMC,OAAO,GAAGjB,eAAe,CAAC,CAAC;EACjC,MAAMkB,EAAE,GAAGR,SAAS,IAAI,UAAUF,MAAM,CAACU,EAAE,EAAE;EAE7CrB,SAAS,CAAC,MAAM;IACdoB,OAAO,CAACE,SAAS,CAACX,MAAM,EAAE;MAAEC,QAAQ;MAAEC,SAAS,EAAEQ;IAAG,CAAC,CAAC;IACtD;IACA;IACA;EACF,CAAC,EAAE,CAACD,OAAO,EAAET,MAAM,CAACU,EAAE,EAAEA,EAAE,CAAC,CAAC;EAE5BrB,SAAS,CAAC,MAAM;IACd,IAAIe,UAAU,EAAE;MACdK,OAAO,CAACG,aAAa,CAACR,UAAU,CAAC;IACnC;EACF,CAAC,EAAE,CAACK,OAAO,EAAEL,UAAU,CAAC,CAAC;EAEzBf,SAAS,CAAC,MAAM;IACd,IAAI,CAACgB,WAAW,IAAIA,WAAW,KAAK,MAAM,EAAE;MAC1C;IACF;IACAI,OAAO,CAACI,cAAc,CAACR,WAAW,CAAC;IACnC,OAAO,MAAMI,OAAO,CAACI,cAAc,CAAC,MAAM,CAAC;EAC7C,CAAC,EAAE,CAACJ,OAAO,EAAEJ,WAAW,CAAC,CAAC;EAE1BhB,SAAS,CAAC,MAAM;IACd,IAAI,CAACiB,qBAAqB,EAAE;MAC1B;IACF;IACAG,OAAO,CAACK,wBAAwB,CAACR,qBAAqB,CAAC;IACvD,OAAO,MAAMG,OAAO,CAACK,wBAAwB,CAAC,IAAI,CAAC;EACrD,CAAC,EAAE,CAACL,OAAO,EAAEH,qBAAqB,CAAC,CAAC;EAEpC,oBACER,KAAA,CAACP,IAAI;IAACgB,KAAK,EAAE,CAACQ,MAAM,CAACC,SAAS,EAAET,KAAK,CAAE;IAAA,GAAKC,IAAI;IAAAS,QAAA,gBAC9CrB,IAAA,CAACF,YAAY;MAACQ,SAAS,EAAEQ,EAAG;MAACH,KAAK,EAAEQ,MAAM,CAACG;IAAQ,CAAE,CAAC,EACrDf,QAAQ,gBAAGP,IAAA,CAACH,aAAa,IAAE,CAAC,GAAG,IAAI;EAAA,CAChC,CAAC;AAEX;AAEA,MAAMsB,MAAM,GAAGzB,UAAU,CAAC6B,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":[]}
@@ -9,6 +9,7 @@ export const FULLSCREEN_SURFACE_ID = '__au_fullscreen__';
9
9
  /** Surface id used by the built-in floating host. */
10
10
  export const FLOATING_SURFACE_ID = '__au_floating__';
11
11
  const RESERVED_SURFACES = new Set([FULLSCREEN_SURFACE_ID, FLOATING_SURFACE_ID]);
12
+ const ORIENTATION_LOCKS = ['auto', 'portrait', 'inverted-portrait', 'landscape', 'inverted-landscape'];
12
13
  function toNativeSource(source) {
13
14
  return {
14
15
  id: source.id,
@@ -47,6 +48,11 @@ export class VideoManager {
47
48
  };
48
49
  /** Last non-reserved surface, restored after fullscreen/floating exits. */
49
50
  lastInlineSurfaceId = null;
51
+
52
+ /** Per-player default for `enterFullscreen()` (VideoPlayer's prop). */
53
+ fullscreenOrientationDefault = null;
54
+ /** True while a fullscreen-scoped lock is applied, so exit restores it. */
55
+ fullscreenLockApplied = false;
50
56
  constructor() {}
51
57
  get providerConfig() {
52
58
  return this.config;
@@ -271,6 +277,28 @@ export class VideoManager {
271
277
  });
272
278
  NativeAuVideo.setResizeMode(mode);
273
279
  }
280
+
281
+ /**
282
+ * Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
283
+ * overriding the app's own lock until cleared with `'auto'`.
284
+ */
285
+ setOrientation(lock) {
286
+ this.set({
287
+ orientationLock: lock
288
+ });
289
+ NativeAuVideo.setOrientation(lock);
290
+ }
291
+
292
+ /**
293
+ * Register the orientation `enterFullscreen()` uses when called without an
294
+ * argument (the built-in controls call it that way). Scoped: applied when
295
+ * fullscreen opens, restored when it closes — the rest of the app is
296
+ * unaffected. Pass null to unregister. Set by VideoPlayer's
297
+ * `fullscreenOrientation` prop.
298
+ */
299
+ setFullscreenOrientation(lock) {
300
+ this.fullscreenOrientationDefault = lock;
301
+ }
274
302
  async getPosition() {
275
303
  return NativeAuVideo.getPosition();
276
304
  }
@@ -321,10 +349,12 @@ export class VideoManager {
321
349
  // ------------------------------------------------------------ modes
322
350
 
323
351
  /**
324
- * Show the built-in fullscreen host and unlock device rotation.
325
- * The host mounts a surface and attaches automatically.
352
+ * Show the built-in fullscreen host. Rotation unlocks by default; pass an
353
+ * orientation (or set VideoPlayer's `fullscreenOrientation` prop) to force
354
+ * one for the fullscreen session only — it is restored on exit, so the
355
+ * rest of the app never sees the lock.
326
356
  */
327
- enterFullscreen() {
357
+ enterFullscreen(orientation) {
328
358
  if (this.store.getState().fullscreen) {
329
359
  return;
330
360
  }
@@ -334,6 +364,13 @@ export class VideoManager {
334
364
  });
335
365
  this.setMode('fullscreen');
336
366
  NativeAuVideo.enterFullscreen();
367
+ // `enter` is often passed straight to onPress, so the argument may be a
368
+ // press event — only honor real orientation values.
369
+ const requested = ORIENTATION_LOCKS.includes(orientation) ? orientation : this.fullscreenOrientationDefault;
370
+ if (requested && requested !== 'auto') {
371
+ this.fullscreenLockApplied = true;
372
+ NativeAuVideo.setOrientation(requested);
373
+ }
337
374
  this.events.emit('onEnterFullscreen', undefined);
338
375
  }
339
376
 
@@ -342,6 +379,11 @@ export class VideoManager {
342
379
  if (!this.store.getState().fullscreen) {
343
380
  return;
344
381
  }
382
+ if (this.fullscreenLockApplied) {
383
+ this.fullscreenLockApplied = false;
384
+ // Drop the fullscreen-only lock, restoring any explicit setOrientation.
385
+ NativeAuVideo.setOrientation(this.store.getState().orientationLock);
386
+ }
345
387
  NativeAuVideo.exitFullscreen();
346
388
  this.set({
347
389
  fullscreen: false
@@ -349,11 +391,11 @@ export class VideoManager {
349
391
  this.events.emit('onExitFullscreen', undefined);
350
392
  this.restoreInlineSurface();
351
393
  }
352
- toggleFullscreen() {
394
+ toggleFullscreen(orientation) {
353
395
  if (this.store.getState().fullscreen) {
354
396
  this.exitFullscreen();
355
397
  } else {
356
- this.enterFullscreen();
398
+ this.enterFullscreen(orientation);
357
399
  }
358
400
  }
359
401
  showFloating() {
@@ -424,6 +466,9 @@ export class VideoManager {
424
466
  this.events.removeAll();
425
467
  this.initialized = false;
426
468
  this.lastInlineSurfaceId = null;
469
+ this.fullscreenOrientationDefault = null;
470
+ this.fullscreenLockApplied = false;
471
+ NativeAuVideo.setOrientation('auto');
427
472
  NativeAuVideo.releasePlayer();
428
473
  this.store.setState({
429
474
  ...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":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeAuVideo","createVideoStore","initialVideoState","Emitter","FULLSCREEN_SURFACE_ID","FLOATING_SURFACE_ID","RESERVED_SURFACES","Set","ORIENTATION_LOCKS","toNativeSource","source","id","uri","headers","title","artist","artworkUri","startPosition","VideoManager","instance","shared","store","events","nativeSubscriptions","initialized","config","fullscreenHost","floatingHost","pauseOnDetach","lastInlineSurfaceId","fullscreenOrientationDefault","fullscreenLockApplied","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","setFullscreenOrientation","getPosition","has","detach","handleSurfaceUnmount","state","enterFullscreen","orientation","fullscreen","floating","requested","includes","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 enter = useCallback(() => manager.enterFullscreen(), [manager]);
9
+ const orientationLock = usePlayback(s => s.orientationLock);
10
+ const enter = useCallback(orientation => manager.enterFullscreen(orientation), [manager]);
10
11
  const exit = useCallback(() => manager.exitFullscreen(), [manager]);
11
- const toggle = useCallback(() => manager.toggleFullscreen(), [manager]);
12
+ const toggle = useCallback(orientation => manager.toggleFullscreen(orientation), [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","orientation","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,CACtBU,WAA6B,IAAKN,OAAO,CAACO,eAAe,CAACD,WAAW,CAAC,EACvE,CAACN,OAAO,CACV,CAAC;EACD,MAAMQ,IAAI,GAAGZ,WAAW,CAAC,MAAMI,OAAO,CAACS,cAAc,CAAC,CAAC,EAAE,CAACT,OAAO,CAAC,CAAC;EACnE,MAAMU,MAAM,GAAGd,WAAW,CACvBU,WAA6B,IAAKN,OAAO,CAACW,gBAAgB,CAACL,WAAW,CAAC,EACxE,CAACN,OAAO,CACV,CAAC;EACD,MAAMY,cAAc,GAAGhB,WAAW,CAC/BiB,IAAqB,IAAKb,OAAO,CAACY,cAAc,CAACC,IAAI,CAAC,EACvD,CAACb,OAAO,CACV,CAAC;EAED,OAAO;IAAEC,YAAY;IAAEI,KAAK;IAAEG,IAAI;IAAEE,MAAM;IAAEN,eAAe;IAAEQ;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,19 @@ 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;
22
+ /**
23
+ * Orientation to force ONLY while this player is fullscreen (e.g.
24
+ * `'portrait'` for a vertical video). Applied when fullscreen opens —
25
+ * including via the built-in controls' fullscreen button — and restored
26
+ * when it closes, so the rest of the app is unaffected.
27
+ */
28
+ fullscreenOrientation?: OrientationLock;
16
29
  }
17
30
  /**
18
31
  * Convenience all-in-one player: `setSource` (same-video handoff aware) +
@@ -23,5 +36,5 @@ export interface VideoPlayerProps extends ViewProps {
23
36
  * <VideoPlayer source={{ id: '123', uri }} style={{ aspectRatio: 16 / 9 }} />
24
37
  * ```
25
38
  */
26
- export declare function VideoPlayer({ source, autoplay, surfaceId, controls, resizeMode, style, ...rest }: VideoPlayerProps): import("react").JSX.Element;
39
+ export declare function VideoPlayer({ source, autoplay, surfaceId, controls, resizeMode, orientation, fullscreenOrientation, style, ...rest }: VideoPlayerProps): import("react").JSX.Element;
27
40
  //# 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;IAC9B;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,eAAe,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAe,EACf,SAAS,EACT,QAAe,EACf,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,KAAK,EACL,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAuClB"}
@@ -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__";
@@ -23,6 +23,10 @@ export declare class VideoManager {
23
23
  private config;
24
24
  /** Last non-reserved surface, restored after fullscreen/floating exits. */
25
25
  private lastInlineSurfaceId;
26
+ /** Per-player default for `enterFullscreen()` (VideoPlayer's prop). */
27
+ private fullscreenOrientationDefault;
28
+ /** True while a fullscreen-scoped lock is applied, so exit restores it. */
29
+ private fullscreenLockApplied;
26
30
  private constructor();
27
31
  get providerConfig(): Required<VideoProviderConfig>;
28
32
  /**
@@ -55,6 +59,19 @@ export declare class VideoManager {
55
59
  unmute(): void;
56
60
  setRepeat(repeat: boolean): void;
57
61
  setResizeMode(mode: ResizeMode): void;
62
+ /**
63
+ * Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
64
+ * overriding the app's own lock until cleared with `'auto'`.
65
+ */
66
+ setOrientation(lock: OrientationLock): void;
67
+ /**
68
+ * Register the orientation `enterFullscreen()` uses when called without an
69
+ * argument (the built-in controls call it that way). Scoped: applied when
70
+ * fullscreen opens, restored when it closes — the rest of the app is
71
+ * unaffected. Pass null to unregister. Set by VideoPlayer's
72
+ * `fullscreenOrientation` prop.
73
+ */
74
+ setFullscreenOrientation(lock: OrientationLock | null): void;
58
75
  getPosition(): Promise<number>;
59
76
  /** Re-parent the player into the surface registered under `surfaceId`. */
60
77
  attach(surfaceId: string): void;
@@ -67,13 +84,15 @@ export declare class VideoManager {
67
84
  */
68
85
  handleSurfaceUnmount(surfaceId: string): void;
69
86
  /**
70
- * Show the built-in fullscreen host and unlock device rotation.
71
- * The host mounts a surface and attaches automatically.
87
+ * Show the built-in fullscreen host. Rotation unlocks by default; pass an
88
+ * orientation (or set VideoPlayer's `fullscreenOrientation` prop) to force
89
+ * one for the fullscreen session only — it is restored on exit, so the
90
+ * rest of the app never sees the lock.
72
91
  */
73
- enterFullscreen(): void;
92
+ enterFullscreen(orientation?: OrientationLock): void;
74
93
  /** Restore the previous orientation lock and re-attach the previous surface. */
75
94
  exitFullscreen(): void;
76
- toggleFullscreen(): void;
95
+ toggleFullscreen(orientation?: OrientationLock): void;
77
96
  showFloating(): void;
78
97
  hideFloating(): void;
79
98
  enterPiP(): Promise<boolean>;
@@ -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
- enter: () => void;
4
+ enter: (orientation?: OrientationLock) => void;
4
5
  exit: () => void;
5
- toggle: () => void;
6
+ toggle: (orientation?: OrientationLock) => 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;;0BAMV,eAAe;;2BAKf,eAAe;;2BAIvB,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;
@@ -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;CACzB"}
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.1",
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,19 @@ 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;
27
+ /**
28
+ * Orientation to force ONLY while this player is fullscreen (e.g.
29
+ * `'portrait'` for a vertical video). Applied when fullscreen opens —
30
+ * including via the built-in controls' fullscreen button — and restored
31
+ * when it closes, so the rest of the app is unaffected.
32
+ */
33
+ fullscreenOrientation?: OrientationLock;
21
34
  }
22
35
 
23
36
  /**
@@ -35,6 +48,8 @@ export function VideoPlayer({
35
48
  surfaceId,
36
49
  controls = true,
37
50
  resizeMode,
51
+ orientation,
52
+ fullscreenOrientation,
38
53
  style,
39
54
  ...rest
40
55
  }: VideoPlayerProps) {
@@ -54,6 +69,22 @@ export function VideoPlayer({
54
69
  }
55
70
  }, [manager, resizeMode]);
56
71
 
72
+ useEffect(() => {
73
+ if (!orientation || orientation === 'auto') {
74
+ return;
75
+ }
76
+ manager.setOrientation(orientation);
77
+ return () => manager.setOrientation('auto');
78
+ }, [manager, orientation]);
79
+
80
+ useEffect(() => {
81
+ if (!fullscreenOrientation) {
82
+ return;
83
+ }
84
+ manager.setFullscreenOrientation(fullscreenOrientation);
85
+ return () => manager.setFullscreenOrientation(null);
86
+ }, [manager, fullscreenOrientation]);
87
+
57
88
  return (
58
89
  <View style={[styles.container, style]} {...rest}>
59
90
  <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,
@@ -24,6 +25,14 @@ export const FLOATING_SURFACE_ID = '__au_floating__';
24
25
 
25
26
  const RESERVED_SURFACES = new Set([FULLSCREEN_SURFACE_ID, FLOATING_SURFACE_ID]);
26
27
 
28
+ const ORIENTATION_LOCKS: readonly OrientationLock[] = [
29
+ 'auto',
30
+ 'portrait',
31
+ 'inverted-portrait',
32
+ 'landscape',
33
+ 'inverted-landscape',
34
+ ];
35
+
27
36
  function toNativeSource(source: VideoSource): NativeVideoSource {
28
37
  return {
29
38
  id: source.id,
@@ -66,6 +75,11 @@ export class VideoManager {
66
75
  /** Last non-reserved surface, restored after fullscreen/floating exits. */
67
76
  private lastInlineSurfaceId: string | null = null;
68
77
 
78
+ /** Per-player default for `enterFullscreen()` (VideoPlayer's prop). */
79
+ private fullscreenOrientationDefault: OrientationLock | null = null;
80
+ /** True while a fullscreen-scoped lock is applied, so exit restores it. */
81
+ private fullscreenLockApplied = false;
82
+
69
83
  private constructor() {}
70
84
 
71
85
  get providerConfig(): Required<VideoProviderConfig> {
@@ -295,6 +309,26 @@ export class VideoManager {
295
309
  NativeAuVideo.setResizeMode(mode);
296
310
  }
297
311
 
312
+ /**
313
+ * Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
314
+ * overriding the app's own lock until cleared with `'auto'`.
315
+ */
316
+ setOrientation(lock: OrientationLock): void {
317
+ this.set({ orientationLock: lock });
318
+ NativeAuVideo.setOrientation(lock);
319
+ }
320
+
321
+ /**
322
+ * Register the orientation `enterFullscreen()` uses when called without an
323
+ * argument (the built-in controls call it that way). Scoped: applied when
324
+ * fullscreen opens, restored when it closes — the rest of the app is
325
+ * unaffected. Pass null to unregister. Set by VideoPlayer's
326
+ * `fullscreenOrientation` prop.
327
+ */
328
+ setFullscreenOrientation(lock: OrientationLock | null): void {
329
+ this.fullscreenOrientationDefault = lock;
330
+ }
331
+
298
332
  async getPosition(): Promise<number> {
299
333
  return NativeAuVideo.getPosition();
300
334
  }
@@ -339,16 +373,27 @@ export class VideoManager {
339
373
  // ------------------------------------------------------------ modes
340
374
 
341
375
  /**
342
- * Show the built-in fullscreen host and unlock device rotation.
343
- * The host mounts a surface and attaches automatically.
376
+ * Show the built-in fullscreen host. Rotation unlocks by default; pass an
377
+ * orientation (or set VideoPlayer's `fullscreenOrientation` prop) to force
378
+ * one for the fullscreen session only — it is restored on exit, so the
379
+ * rest of the app never sees the lock.
344
380
  */
345
- enterFullscreen(): void {
381
+ enterFullscreen(orientation?: OrientationLock): void {
346
382
  if (this.store.getState().fullscreen) {
347
383
  return;
348
384
  }
349
385
  this.set({ fullscreen: true, floating: false });
350
386
  this.setMode('fullscreen');
351
387
  NativeAuVideo.enterFullscreen();
388
+ // `enter` is often passed straight to onPress, so the argument may be a
389
+ // press event — only honor real orientation values.
390
+ const requested = ORIENTATION_LOCKS.includes(orientation as OrientationLock)
391
+ ? (orientation as OrientationLock)
392
+ : this.fullscreenOrientationDefault;
393
+ if (requested && requested !== 'auto') {
394
+ this.fullscreenLockApplied = true;
395
+ NativeAuVideo.setOrientation(requested);
396
+ }
352
397
  this.events.emit('onEnterFullscreen', undefined);
353
398
  }
354
399
 
@@ -357,17 +402,22 @@ export class VideoManager {
357
402
  if (!this.store.getState().fullscreen) {
358
403
  return;
359
404
  }
405
+ if (this.fullscreenLockApplied) {
406
+ this.fullscreenLockApplied = false;
407
+ // Drop the fullscreen-only lock, restoring any explicit setOrientation.
408
+ NativeAuVideo.setOrientation(this.store.getState().orientationLock);
409
+ }
360
410
  NativeAuVideo.exitFullscreen();
361
411
  this.set({ fullscreen: false });
362
412
  this.events.emit('onExitFullscreen', undefined);
363
413
  this.restoreInlineSurface();
364
414
  }
365
415
 
366
- toggleFullscreen(): void {
416
+ toggleFullscreen(orientation?: OrientationLock): void {
367
417
  if (this.store.getState().fullscreen) {
368
418
  this.exitFullscreen();
369
419
  } else {
370
- this.enterFullscreen();
420
+ this.enterFullscreen(orientation);
371
421
  }
372
422
  }
373
423
 
@@ -431,6 +481,9 @@ export class VideoManager {
431
481
  this.events.removeAll();
432
482
  this.initialized = false;
433
483
  this.lastInlineSurfaceId = null;
484
+ this.fullscreenOrientationDefault = null;
485
+ this.fullscreenLockApplied = false;
486
+ NativeAuVideo.setOrientation('auto');
434
487
  NativeAuVideo.releasePlayer();
435
488
  this.store.setState({ ...initialVideoState }, true);
436
489
  }
@@ -1,14 +1,26 @@
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
- const enter = useCallback(() => manager.enterFullscreen(), [manager]);
11
+ const enter = useCallback(
12
+ (orientation?: OrientationLock) => manager.enterFullscreen(orientation),
13
+ [manager]
14
+ );
10
15
  const exit = useCallback(() => manager.exitFullscreen(), [manager]);
11
- const toggle = useCallback(() => manager.toggleFullscreen(), [manager]);
16
+ const toggle = useCallback(
17
+ (orientation?: OrientationLock) => manager.toggleFullscreen(orientation),
18
+ [manager]
19
+ );
20
+ const setOrientation = useCallback(
21
+ (lock: OrientationLock) => manager.setOrientation(lock),
22
+ [manager]
23
+ );
12
24
 
13
- return { isFullscreen, enter, exit, toggle };
25
+ return { isFullscreen, enter, exit, toggle, orientationLock, setOrientation };
14
26
  }
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;