@capgo/capacitor-screen-orientation 8.2.0 → 8.3.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.
- package/README.md +134 -22
- package/android/src/main/java/ee/forgr/capacitor/screenorientation/CapacitorScreenOrientationPlugin.java +23 -1
- package/dist/docs.json +260 -3
- package/dist/esm/definitions.d.ts +144 -3
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +8 -1
- package/dist/esm/web.js +10 -1
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +10 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +10 -1
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapacitorScreenOrientationPlugin/CapacitorScreenOrientationPlugin.swift +36 -8
- package/ios/Sources/CapacitorScreenOrientationPlugin/IPhoneDuoFold.swift +258 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# @capgo/capacitor-screen-orientation
|
|
2
2
|
|
|
3
|
-
<a href="https://capgo.app
|
|
3
|
+
<a href="https://capgo.app/?ref=plugin_screen_orientation"><img src="https://capgo.app/readme-banner.svg?repo=Cap-go/capacitor-screen-orientation" alt="Capgo - Instant updates for Capacitor" /></a>
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
|
-
<
|
|
7
|
-
<h2><a href="https://capgo.app/
|
|
6
|
+
<p><b>Capgo</b>: open-source live updates for Ionic and Capacitor apps. Ship OTA fixes and features instantly, without waiting for app store review.</p>
|
|
7
|
+
<h2><a href="https://capgo.app/register/?ref=plugin_screen_orientation">➡️ Get started for free</a></h2>
|
|
8
|
+
<p>14-day unlimited free trial. No credit card required</p>
|
|
9
|
+
<p><a href="https://capgo.app/consulting/?ref=plugin_screen_orientation">Missing a feature? We'll build the plugin for you 💪</a></p>
|
|
8
10
|
</div>
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
12
|
Screen orientation plugin with support for detecting true physical device orientation
|
|
13
13
|
|
|
14
14
|
## Features
|
|
@@ -20,11 +20,29 @@ Screen orientation plugin with support for detecting true physical device orient
|
|
|
20
20
|
- 🔒 **Detect if orientation lock is enabled** by comparing physical vs UI orientation
|
|
21
21
|
- 🔄 Real-time orientation change detection
|
|
22
22
|
- 🎯 Lock orientation to specific modes
|
|
23
|
-
- 📖 **
|
|
23
|
+
- 📖 **iPhone Duo and Android foldables**: flat, book, or tabletop, hinge angle, which display is showing, and where iPhone Duo puts the tab bar
|
|
24
24
|
- 🌐 Web platform support
|
|
25
25
|
|
|
26
26
|
**Important Note:** This plugin can detect the physical orientation of the device using motion sensors, but it **cannot bypass the UI orientation lock**. The screen will still respect the user's orientation lock setting. This is useful for knowing how the device is physically held vs. how the UI is displayed.
|
|
27
27
|
|
|
28
|
+
## iPhone Duo
|
|
29
|
+
|
|
30
|
+
iPhone Duo (iOS 27.1 or later) is a foldable iPhone. The same fold calls used on Android report it:
|
|
31
|
+
|
|
32
|
+
| Pose | `posture` | Hinge |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| Open flat, or closed on the outer display | `flat` | `180` open, `0` closed |
|
|
35
|
+
| Held half-open like a book | `book` | vertical hinge, about `20` to `160` |
|
|
36
|
+
| Propped half-open like a laptop | `tabletop` | horizontal hinge |
|
|
37
|
+
|
|
38
|
+
Closed on the cover screen, the iPhone Duo simulator reports the outer display and a hinge at 0°:
|
|
39
|
+
|
|
40
|
+
<img src="screenshots/ios-iphone-duo.webp" width="300" alt="iPhone Duo simulator closed on the cover screen, reporting flat, outer display, hinge 0 degrees">
|
|
41
|
+
|
|
42
|
+
`activeDisplay` is `inner` on the large folding screen and `outer` on the cover screen. `getReservedRegions()` returns the fold (`division`) and anything covering the glass, such as the camera (`occlusion`). `getBarPlacement()` says whether iOS moved the tab bar to the side, and how wide that bar is.
|
|
43
|
+
|
|
44
|
+
A regular iPhone, and iOS before 27.1, stays `flat` with no hinge angle. Android foldables report posture and hinge angle the same way. Rear display and dual-screen modes stay on Android.
|
|
45
|
+
|
|
28
46
|
## Documentation
|
|
29
47
|
|
|
30
48
|
The most complete doc is available here: https://capgo.app/docs/plugins/screen-orientation/
|
|
@@ -133,8 +151,10 @@ await ScreenOrientation.stopOrientationTracking();
|
|
|
133
151
|
// Remove listener
|
|
134
152
|
await listener.remove();
|
|
135
153
|
|
|
136
|
-
//
|
|
137
|
-
const { posture } = await ScreenOrientation.getFoldState();
|
|
154
|
+
// iPhone Duo and Android foldables. Flat on phones that do not fold.
|
|
155
|
+
const { posture, activeDisplay } = await ScreenOrientation.getFoldState();
|
|
156
|
+
const { angle, status } = await ScreenOrientation.getHingeAngle();
|
|
157
|
+
const { verticalBarEdge, inset } = await ScreenOrientation.getBarPlacement();
|
|
138
158
|
const { widthClass } = await ScreenOrientation.getSizeClass();
|
|
139
159
|
```
|
|
140
160
|
|
|
@@ -151,6 +171,9 @@ const { widthClass } = await ScreenOrientation.getSizeClass();
|
|
|
151
171
|
* [`isDeviceFoldable()`](#isdevicefoldable)
|
|
152
172
|
* [`getFoldState()`](#getfoldstate)
|
|
153
173
|
* [`getHingeAngle()`](#gethingeangle)
|
|
174
|
+
* [`getReservedRegions()`](#getreservedregions)
|
|
175
|
+
* [`getBarPlacement()`](#getbarplacement)
|
|
176
|
+
* [`setVerticalBarBehavior(...)`](#setverticalbarbehavior)
|
|
154
177
|
* [`getSizeClass()`](#getsizeclass)
|
|
155
178
|
* [`addListener('screenOrientationChange', ...)`](#addlistenerscreenorientationchange-)
|
|
156
179
|
* [`addListener('foldStateChange', ...)`](#addlistenerfoldstatechange-)
|
|
@@ -295,7 +318,7 @@ isDeviceFoldable() => Promise<DeviceFoldableResult>
|
|
|
295
318
|
|
|
296
319
|
Whether this device folds, and whether it can stand half-open like a laptop.
|
|
297
320
|
|
|
298
|
-
Both flags are `false` on web and iOS.
|
|
321
|
+
Both flags are `false` on web, on Android phones that do not fold, and on iOS except iPhone Duo (iOS 27.1 or later).
|
|
299
322
|
|
|
300
323
|
**Returns:** <code>Promise<<a href="#devicefoldableresult">DeviceFoldableResult</a>></code>
|
|
301
324
|
|
|
@@ -338,6 +361,63 @@ Read the hinge angle in degrees.
|
|
|
338
361
|
--------------------
|
|
339
362
|
|
|
340
363
|
|
|
364
|
+
### getReservedRegions()
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
getReservedRegions() => Promise<{ regions: ReservedRegion[]; }>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Read the fold and anything covering the screen.
|
|
371
|
+
|
|
372
|
+
iPhone Duo reports the fold, the vertical status bar area, and the under-display camera.
|
|
373
|
+
Resolves to an empty list on Android, web, and iOS before 27.1.
|
|
374
|
+
|
|
375
|
+
**Returns:** <code>Promise<{ regions: ReservedRegion[]; }></code>
|
|
376
|
+
|
|
377
|
+
**Since:** 8.2.0
|
|
378
|
+
|
|
379
|
+
--------------------
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
### getBarPlacement()
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
getBarPlacement() => Promise<BarPlacement>
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Read where iPhone Duo puts native tab bars and toolbars.
|
|
389
|
+
|
|
390
|
+
`verticalBarEdge` is `null` when bars stay horizontal, and always on Android and web.
|
|
391
|
+
|
|
392
|
+
**Returns:** <code>Promise<<a href="#barplacement">BarPlacement</a>></code>
|
|
393
|
+
|
|
394
|
+
**Since:** 8.2.0
|
|
395
|
+
|
|
396
|
+
--------------------
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
### setVerticalBarBehavior(...)
|
|
400
|
+
|
|
401
|
+
```typescript
|
|
402
|
+
setVerticalBarBehavior(options: { behavior: 'automatic' | 'disabled'; }) => Promise<{ applied: boolean; }>
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Choose whether iPhone Duo may move this app's bars to the side.
|
|
406
|
+
|
|
407
|
+
Resolves to `{ applied: false }` unless the app's bridge view controller opts in.
|
|
408
|
+
Android and web always resolve to `{ applied: false }`.
|
|
409
|
+
|
|
410
|
+
| Param | Type | Description |
|
|
411
|
+
| ------------- | ----------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
412
|
+
| **`options`** | <code>{ behavior: 'automatic' \| 'disabled'; }</code> | `automatic` lets the system move bars. `disabled` keeps them horizontal. |
|
|
413
|
+
|
|
414
|
+
**Returns:** <code>Promise<{ applied: boolean; }></code>
|
|
415
|
+
|
|
416
|
+
**Since:** 8.2.0
|
|
417
|
+
|
|
418
|
+
--------------------
|
|
419
|
+
|
|
420
|
+
|
|
341
421
|
### getSizeClass()
|
|
342
422
|
|
|
343
423
|
```typescript
|
|
@@ -401,7 +481,7 @@ addListener(eventName: 'hingeAngleChange', listenerFunc: (event: HingeAngleResul
|
|
|
401
481
|
Listen for hinge angle changes.
|
|
402
482
|
|
|
403
483
|
On Android the hinge sensor runs only while at least one listener is registered.
|
|
404
|
-
|
|
484
|
+
On iOS this fires on iPhone Duo (iOS 27.1 or later). Never fires on web.
|
|
405
485
|
|
|
406
486
|
| Param | Type | Description |
|
|
407
487
|
| ------------------ | --------------------------------------------------------------------------------- | ------------------------------------------- |
|
|
@@ -523,16 +603,20 @@ Whether this device can fold.
|
|
|
523
603
|
|
|
524
604
|
Current fold of the window.
|
|
525
605
|
|
|
526
|
-
Phones that do not fold, iOS
|
|
606
|
+
Phones that do not fold, and iOS before 27.1, resolve to a flat state.
|
|
607
|
+
iPhone Duo reports `book`, `tabletop`, or `flat`, and which display is in front.
|
|
527
608
|
|
|
528
|
-
| Prop | Type
|
|
529
|
-
| ---------------------- |
|
|
530
|
-
| **`state`** | <code><a href="#foldstatevalue">FoldStateValue</a></code>
|
|
531
|
-
| **`isSeparating`** | <code>boolean</code>
|
|
532
|
-
| **`posture`** | <code><a href="#foldposture">FoldPosture</a></code>
|
|
533
|
-
| **`hingeOrientation`** | <code><a href="#hingeorientation">HingeOrientation</a></code>
|
|
534
|
-
| **`hingeBounds`** | <code><a href="#foldbounds">FoldBounds</a></code>
|
|
535
|
-
| **`occludedBounds`** | <code><a href="#foldbounds">FoldBounds</a></code>
|
|
609
|
+
| Prop | Type | Description | Since |
|
|
610
|
+
| ---------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ----- |
|
|
611
|
+
| **`state`** | <code><a href="#foldstatevalue">FoldStateValue</a></code> | Posture of the fold. | 8.2.0 |
|
|
612
|
+
| **`isSeparating`** | <code>boolean</code> | Whether the fold splits the web view into two areas. | 8.2.0 |
|
|
613
|
+
| **`posture`** | <code><a href="#foldposture">FoldPosture</a></code> | How the device is held. | 8.2.0 |
|
|
614
|
+
| **`hingeOrientation`** | <code><a href="#hingeorientation">HingeOrientation</a></code> | Direction of the hinge. Omitted when there is no fold. | 8.2.0 |
|
|
615
|
+
| **`hingeBounds`** | <code><a href="#foldbounds">FoldBounds</a></code> | Position of the fold in CSS pixels. Omitted when there is no fold. | 8.2.0 |
|
|
616
|
+
| **`occludedBounds`** | <code><a href="#foldbounds">FoldBounds</a></code> | Area the hinge covers. Present when the hinge has a physical gap. | 8.2.0 |
|
|
617
|
+
| **`activeDisplay`** | <code>'inner' \| 'outer'</code> | Which display is showing the app on iPhone Duo. Omitted on Android, web, and iOS before 27.1. | 8.2.0 |
|
|
618
|
+
| **`hingeMargins`** | <code>{ top: number; right: number; bottom: number; left: number; }</code> | Space the system keeps clear around the fold, in CSS pixels. iPhone Duo reports 20 on each side of a vertical fold. | 8.2.0 |
|
|
619
|
+
| **`cameraBounds`** | <code>FoldBounds[]</code> | Areas covering the display, such as the iPhone Duo camera. Omitted when there are none. | 8.2.0 |
|
|
536
620
|
|
|
537
621
|
|
|
538
622
|
#### FoldBounds
|
|
@@ -553,9 +637,37 @@ Angle between the two halves of a foldable, in degrees.
|
|
|
553
637
|
|
|
554
638
|
`0` is closed and `180` is flat. `angle` is `null` when the device has no hinge sensor.
|
|
555
639
|
|
|
556
|
-
| Prop
|
|
557
|
-
|
|
|
558
|
-
| **`angle`**
|
|
640
|
+
| Prop | Type | Description | Since |
|
|
641
|
+
| ------------ | --------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----- |
|
|
642
|
+
| **`angle`** | <code>number \| null</code> | Hinge angle in degrees, or `null` when no sensor is available. | 8.2.0 |
|
|
643
|
+
| **`status`** | <code>'closed' \| 'partiallyOpen' \| 'fullyOpen' \| null</code> | How far open iPhone Duo is, as the system sees it. `null` on Android and web. | 8.2.0 |
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
#### ReservedRegion
|
|
647
|
+
|
|
648
|
+
A region the system reserves on iPhone Duo.
|
|
649
|
+
|
|
650
|
+
`division` is the fold. `occlusion` is something covering the display, such as the camera.
|
|
651
|
+
|
|
652
|
+
| Prop | Type | Description | Since |
|
|
653
|
+
| -------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----- |
|
|
654
|
+
| **`kind`** | <code>'division' \| 'occlusion'</code> | What the region is. | 8.2.0 |
|
|
655
|
+
| **`isActive`** | <code>boolean</code> | Whether the region applies right now. An inactive division is a flat fold. | 8.2.0 |
|
|
656
|
+
| **`x`** | <code>number</code> | Left edge, in CSS pixels. | 8.2.0 |
|
|
657
|
+
| **`y`** | <code>number</code> | Top edge, in CSS pixels. | 8.2.0 |
|
|
658
|
+
| **`width`** | <code>number</code> | Width in CSS pixels. | 8.2.0 |
|
|
659
|
+
| **`height`** | <code>number</code> | Height in CSS pixels. | 8.2.0 |
|
|
660
|
+
| **`margins`** | <code>{ top: number; right: number; bottom: number; left: number; }</code> | Space to keep clear around the region, in CSS pixels. | 8.2.0 |
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
#### BarPlacement
|
|
664
|
+
|
|
665
|
+
Where iPhone Duo places native bars.
|
|
666
|
+
|
|
667
|
+
| Prop | Type | Description | Since |
|
|
668
|
+
| --------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------- | ----- |
|
|
669
|
+
| **`verticalBarEdge`** | <code>'leading' \| 'trailing' \| null</code> | The edge the system moves tab bars and toolbars to. `null` when they stay horizontal. | 8.2.0 |
|
|
670
|
+
| **`inset`** | <code>number</code> | How much room the vertical bar takes, in points. `0` when bars stay horizontal. | 8.2.0 |
|
|
559
671
|
|
|
560
672
|
|
|
561
673
|
#### SizeClass
|
|
@@ -24,7 +24,7 @@ import org.json.JSONObject;
|
|
|
24
24
|
@CapacitorPlugin(name = "CapacitorScreenOrientation")
|
|
25
25
|
public class CapacitorScreenOrientationPlugin extends Plugin implements SensorEventListener {
|
|
26
26
|
|
|
27
|
-
private final String pluginVersion = "8.
|
|
27
|
+
private final String pluginVersion = "8.3.1";
|
|
28
28
|
private int currentOrientation;
|
|
29
29
|
private SensorManager sensorManager;
|
|
30
30
|
private Sensor accelerometer;
|
|
@@ -185,6 +185,28 @@ public class CapacitorScreenOrientationPlugin extends Plugin implements SensorEv
|
|
|
185
185
|
call.resolve(currentSizeClass());
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
@PluginMethod
|
|
189
|
+
public void getReservedRegions(PluginCall call) {
|
|
190
|
+
JSObject result = new JSObject();
|
|
191
|
+
result.put("regions", new org.json.JSONArray());
|
|
192
|
+
call.resolve(result);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@PluginMethod
|
|
196
|
+
public void getBarPlacement(PluginCall call) {
|
|
197
|
+
JSObject result = new JSObject();
|
|
198
|
+
result.put("verticalBarEdge", JSONObject.NULL);
|
|
199
|
+
result.put("inset", 0);
|
|
200
|
+
call.resolve(result);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@PluginMethod
|
|
204
|
+
public void setVerticalBarBehavior(PluginCall call) {
|
|
205
|
+
JSObject result = new JSObject();
|
|
206
|
+
result.put("applied", false);
|
|
207
|
+
call.resolve(result);
|
|
208
|
+
}
|
|
209
|
+
|
|
188
210
|
@PluginMethod
|
|
189
211
|
public void orientation(final PluginCall call) {
|
|
190
212
|
try {
|
package/dist/docs.json
CHANGED
|
@@ -195,7 +195,7 @@
|
|
|
195
195
|
"text": "```typescript\nconst { foldable, supportsTabletop } = await ScreenOrientation.isDeviceFoldable();\n```"
|
|
196
196
|
}
|
|
197
197
|
],
|
|
198
|
-
"docs": "Whether this device folds, and whether it can stand half-open like a laptop.\n\nBoth flags are `false` on web and iOS.",
|
|
198
|
+
"docs": "Whether this device folds, and whether it can stand half-open like a laptop.\n\nBoth flags are `false` on web, on Android phones that do not fold, and on iOS except iPhone Duo (iOS 27.1 or later).",
|
|
199
199
|
"complexTypes": [
|
|
200
200
|
"DeviceFoldableResult"
|
|
201
201
|
],
|
|
@@ -251,6 +251,77 @@
|
|
|
251
251
|
],
|
|
252
252
|
"slug": "gethingeangle"
|
|
253
253
|
},
|
|
254
|
+
{
|
|
255
|
+
"name": "getReservedRegions",
|
|
256
|
+
"signature": "() => Promise<{ regions: ReservedRegion[]; }>",
|
|
257
|
+
"parameters": [],
|
|
258
|
+
"returns": "Promise<{ regions: ReservedRegion[]; }>",
|
|
259
|
+
"tags": [
|
|
260
|
+
{
|
|
261
|
+
"name": "since",
|
|
262
|
+
"text": "8.2.0"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "returns",
|
|
266
|
+
"text": "The reserved regions."
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
"docs": "Read the fold and anything covering the screen.\n\niPhone Duo reports the fold, the vertical status bar area, and the under-display camera.\nResolves to an empty list on Android, web, and iOS before 27.1.",
|
|
270
|
+
"complexTypes": [
|
|
271
|
+
"ReservedRegion"
|
|
272
|
+
],
|
|
273
|
+
"slug": "getreservedregions"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "getBarPlacement",
|
|
277
|
+
"signature": "() => Promise<BarPlacement>",
|
|
278
|
+
"parameters": [],
|
|
279
|
+
"returns": "Promise<BarPlacement>",
|
|
280
|
+
"tags": [
|
|
281
|
+
{
|
|
282
|
+
"name": "since",
|
|
283
|
+
"text": "8.2.0"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"name": "returns",
|
|
287
|
+
"text": "The current bar placement."
|
|
288
|
+
}
|
|
289
|
+
],
|
|
290
|
+
"docs": "Read where iPhone Duo puts native tab bars and toolbars.\n\n`verticalBarEdge` is `null` when bars stay horizontal, and always on Android and web.",
|
|
291
|
+
"complexTypes": [
|
|
292
|
+
"BarPlacement"
|
|
293
|
+
],
|
|
294
|
+
"slug": "getbarplacement"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"name": "setVerticalBarBehavior",
|
|
298
|
+
"signature": "(options: { behavior: 'automatic' | 'disabled'; }) => Promise<{ applied: boolean; }>",
|
|
299
|
+
"parameters": [
|
|
300
|
+
{
|
|
301
|
+
"name": "options",
|
|
302
|
+
"docs": "`automatic` lets the system move bars. `disabled` keeps them horizontal.",
|
|
303
|
+
"type": "{ behavior: 'automatic' | 'disabled'; }"
|
|
304
|
+
}
|
|
305
|
+
],
|
|
306
|
+
"returns": "Promise<{ applied: boolean; }>",
|
|
307
|
+
"tags": [
|
|
308
|
+
{
|
|
309
|
+
"name": "since",
|
|
310
|
+
"text": "8.2.0"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"name": "param",
|
|
314
|
+
"text": "options `automatic` lets the system move bars. `disabled` keeps them horizontal."
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"name": "returns",
|
|
318
|
+
"text": "Whether the app applied the choice."
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
"docs": "Choose whether iPhone Duo may move this app's bars to the side.\n\nResolves to `{ applied: false }` unless the app's bridge view controller opts in.\nAndroid and web always resolve to `{ applied: false }`.",
|
|
322
|
+
"complexTypes": [],
|
|
323
|
+
"slug": "setverticalbarbehavior"
|
|
324
|
+
},
|
|
254
325
|
{
|
|
255
326
|
"name": "getSizeClass",
|
|
256
327
|
"signature": "() => Promise<SizeClass>",
|
|
@@ -375,7 +446,7 @@
|
|
|
375
446
|
"text": "A promise that resolves to a listener handle."
|
|
376
447
|
}
|
|
377
448
|
],
|
|
378
|
-
"docs": "Listen for hinge angle changes.\n\nOn Android the hinge sensor runs only while at least one listener is registered.\
|
|
449
|
+
"docs": "Listen for hinge angle changes.\n\nOn Android the hinge sensor runs only while at least one listener is registered.\nOn iOS this fires on iPhone Duo (iOS 27.1 or later). Never fires on web.",
|
|
379
450
|
"complexTypes": [
|
|
380
451
|
"PluginListenerHandle",
|
|
381
452
|
"HingeAngleResult"
|
|
@@ -670,7 +741,7 @@
|
|
|
670
741
|
{
|
|
671
742
|
"name": "FoldState",
|
|
672
743
|
"slug": "foldstate",
|
|
673
|
-
"docs": "Current fold of the window.\n\nPhones that do not fold, iOS
|
|
744
|
+
"docs": "Current fold of the window.\n\nPhones that do not fold, and iOS before 27.1, resolve to a flat state.\niPhone Duo reports `book`, `tabletop`, or `flat`, and which display is in front.",
|
|
674
745
|
"tags": [
|
|
675
746
|
{
|
|
676
747
|
"text": "8.2.0",
|
|
@@ -760,6 +831,44 @@
|
|
|
760
831
|
"FoldBounds"
|
|
761
832
|
],
|
|
762
833
|
"type": "FoldBounds"
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"name": "activeDisplay",
|
|
837
|
+
"tags": [
|
|
838
|
+
{
|
|
839
|
+
"text": "8.2.0",
|
|
840
|
+
"name": "since"
|
|
841
|
+
}
|
|
842
|
+
],
|
|
843
|
+
"docs": "Which display is showing the app on iPhone Duo. Omitted on Android, web, and iOS before 27.1.",
|
|
844
|
+
"complexTypes": [],
|
|
845
|
+
"type": "'inner' | 'outer' | undefined"
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"name": "hingeMargins",
|
|
849
|
+
"tags": [
|
|
850
|
+
{
|
|
851
|
+
"text": "8.2.0",
|
|
852
|
+
"name": "since"
|
|
853
|
+
}
|
|
854
|
+
],
|
|
855
|
+
"docs": "Space the system keeps clear around the fold, in CSS pixels. iPhone Duo reports 20 on each side of a vertical fold.",
|
|
856
|
+
"complexTypes": [],
|
|
857
|
+
"type": "{ top: number; right: number; bottom: number; left: number; } | undefined"
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
"name": "cameraBounds",
|
|
861
|
+
"tags": [
|
|
862
|
+
{
|
|
863
|
+
"text": "8.2.0",
|
|
864
|
+
"name": "since"
|
|
865
|
+
}
|
|
866
|
+
],
|
|
867
|
+
"docs": "Areas covering the display, such as the iPhone Duo camera. Omitted when there are none.",
|
|
868
|
+
"complexTypes": [
|
|
869
|
+
"FoldBounds"
|
|
870
|
+
],
|
|
871
|
+
"type": "FoldBounds[] | undefined"
|
|
763
872
|
}
|
|
764
873
|
]
|
|
765
874
|
},
|
|
@@ -828,6 +937,154 @@
|
|
|
828
937
|
"docs": "Hinge angle in degrees, or `null` when no sensor is available.",
|
|
829
938
|
"complexTypes": [],
|
|
830
939
|
"type": "number | null"
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"name": "status",
|
|
943
|
+
"tags": [
|
|
944
|
+
{
|
|
945
|
+
"text": "8.2.0",
|
|
946
|
+
"name": "since"
|
|
947
|
+
}
|
|
948
|
+
],
|
|
949
|
+
"docs": "How far open iPhone Duo is, as the system sees it. `null` on Android and web.",
|
|
950
|
+
"complexTypes": [],
|
|
951
|
+
"type": "'closed' | 'partiallyOpen' | 'fullyOpen' | null | undefined"
|
|
952
|
+
}
|
|
953
|
+
]
|
|
954
|
+
},
|
|
955
|
+
{
|
|
956
|
+
"name": "ReservedRegion",
|
|
957
|
+
"slug": "reservedregion",
|
|
958
|
+
"docs": "A region the system reserves on iPhone Duo.\n\n`division` is the fold. `occlusion` is something covering the display, such as the camera.",
|
|
959
|
+
"tags": [
|
|
960
|
+
{
|
|
961
|
+
"text": "8.2.0",
|
|
962
|
+
"name": "since"
|
|
963
|
+
}
|
|
964
|
+
],
|
|
965
|
+
"methods": [],
|
|
966
|
+
"properties": [
|
|
967
|
+
{
|
|
968
|
+
"name": "kind",
|
|
969
|
+
"tags": [
|
|
970
|
+
{
|
|
971
|
+
"text": "8.2.0",
|
|
972
|
+
"name": "since"
|
|
973
|
+
}
|
|
974
|
+
],
|
|
975
|
+
"docs": "What the region is.",
|
|
976
|
+
"complexTypes": [],
|
|
977
|
+
"type": "'division' | 'occlusion'"
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"name": "isActive",
|
|
981
|
+
"tags": [
|
|
982
|
+
{
|
|
983
|
+
"text": "8.2.0",
|
|
984
|
+
"name": "since"
|
|
985
|
+
}
|
|
986
|
+
],
|
|
987
|
+
"docs": "Whether the region applies right now. An inactive division is a flat fold.",
|
|
988
|
+
"complexTypes": [],
|
|
989
|
+
"type": "boolean"
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
"name": "x",
|
|
993
|
+
"tags": [
|
|
994
|
+
{
|
|
995
|
+
"text": "8.2.0",
|
|
996
|
+
"name": "since"
|
|
997
|
+
}
|
|
998
|
+
],
|
|
999
|
+
"docs": "Left edge, in CSS pixels.",
|
|
1000
|
+
"complexTypes": [],
|
|
1001
|
+
"type": "number"
|
|
1002
|
+
},
|
|
1003
|
+
{
|
|
1004
|
+
"name": "y",
|
|
1005
|
+
"tags": [
|
|
1006
|
+
{
|
|
1007
|
+
"text": "8.2.0",
|
|
1008
|
+
"name": "since"
|
|
1009
|
+
}
|
|
1010
|
+
],
|
|
1011
|
+
"docs": "Top edge, in CSS pixels.",
|
|
1012
|
+
"complexTypes": [],
|
|
1013
|
+
"type": "number"
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
"name": "width",
|
|
1017
|
+
"tags": [
|
|
1018
|
+
{
|
|
1019
|
+
"text": "8.2.0",
|
|
1020
|
+
"name": "since"
|
|
1021
|
+
}
|
|
1022
|
+
],
|
|
1023
|
+
"docs": "Width in CSS pixels.",
|
|
1024
|
+
"complexTypes": [],
|
|
1025
|
+
"type": "number"
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
"name": "height",
|
|
1029
|
+
"tags": [
|
|
1030
|
+
{
|
|
1031
|
+
"text": "8.2.0",
|
|
1032
|
+
"name": "since"
|
|
1033
|
+
}
|
|
1034
|
+
],
|
|
1035
|
+
"docs": "Height in CSS pixels.",
|
|
1036
|
+
"complexTypes": [],
|
|
1037
|
+
"type": "number"
|
|
1038
|
+
},
|
|
1039
|
+
{
|
|
1040
|
+
"name": "margins",
|
|
1041
|
+
"tags": [
|
|
1042
|
+
{
|
|
1043
|
+
"text": "8.2.0",
|
|
1044
|
+
"name": "since"
|
|
1045
|
+
}
|
|
1046
|
+
],
|
|
1047
|
+
"docs": "Space to keep clear around the region, in CSS pixels.",
|
|
1048
|
+
"complexTypes": [],
|
|
1049
|
+
"type": "{ top: number; right: number; bottom: number; left: number; }"
|
|
1050
|
+
}
|
|
1051
|
+
]
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"name": "BarPlacement",
|
|
1055
|
+
"slug": "barplacement",
|
|
1056
|
+
"docs": "Where iPhone Duo places native bars.",
|
|
1057
|
+
"tags": [
|
|
1058
|
+
{
|
|
1059
|
+
"text": "8.2.0",
|
|
1060
|
+
"name": "since"
|
|
1061
|
+
}
|
|
1062
|
+
],
|
|
1063
|
+
"methods": [],
|
|
1064
|
+
"properties": [
|
|
1065
|
+
{
|
|
1066
|
+
"name": "verticalBarEdge",
|
|
1067
|
+
"tags": [
|
|
1068
|
+
{
|
|
1069
|
+
"text": "8.2.0",
|
|
1070
|
+
"name": "since"
|
|
1071
|
+
}
|
|
1072
|
+
],
|
|
1073
|
+
"docs": "The edge the system moves tab bars and toolbars to. `null` when they stay horizontal.",
|
|
1074
|
+
"complexTypes": [],
|
|
1075
|
+
"type": "'leading' | 'trailing' | null"
|
|
1076
|
+
},
|
|
1077
|
+
{
|
|
1078
|
+
"name": "inset",
|
|
1079
|
+
"tags": [
|
|
1080
|
+
{
|
|
1081
|
+
"text": "8.2.0",
|
|
1082
|
+
"name": "since"
|
|
1083
|
+
}
|
|
1084
|
+
],
|
|
1085
|
+
"docs": "How much room the vertical bar takes, in points. `0` when bars stay horizontal.",
|
|
1086
|
+
"complexTypes": [],
|
|
1087
|
+
"type": "number"
|
|
831
1088
|
}
|
|
832
1089
|
]
|
|
833
1090
|
},
|