one 2.0.0-beta.100.1 → 2.0.0-beta.102.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/android/src/main/java/com/margelo/nitro/one/HybridOneAdaptive.kt +392 -0
- package/android/src/main/java/com/margelo/nitro/one/HybridOneDocumentPicker.kt +147 -0
- package/dist/cjs/one.cjs +1 -0
- package/dist/cjs/one.native.cjs +1 -0
- package/dist/cjs/one.native.js +1 -0
- package/dist/cjs/one.native.js.map +1 -1
- package/dist/cjs/platform/adaptive/index.native.cjs +79 -53
- package/dist/cjs/platform/adaptive/index.native.js +79 -53
- package/dist/cjs/platform/adaptive/index.native.js.map +1 -1
- package/dist/cjs/platform/document-picker/index.cjs +58 -0
- package/dist/cjs/platform/document-picker/index.native.cjs +57 -0
- package/dist/cjs/platform/document-picker/index.native.js +59 -0
- package/dist/cjs/platform/document-picker/index.native.js.map +1 -0
- package/dist/cjs/platform/document-picker/options.cjs +42 -0
- package/dist/cjs/platform/document-picker/options.native.cjs +64 -0
- package/dist/cjs/platform/document-picker/options.native.js +66 -0
- package/dist/cjs/platform/document-picker/options.native.js.map +1 -0
- package/dist/cjs/platform/document-picker/types.cjs +16 -0
- package/dist/cjs/platform/document-picker/types.native.cjs +18 -0
- package/dist/cjs/platform/document-picker/types.native.js +20 -0
- package/dist/cjs/platform/document-picker/types.native.js.map +1 -0
- package/dist/cjs/platform/index.cjs +2 -0
- package/dist/cjs/platform/index.native.cjs +2 -0
- package/dist/cjs/platform/index.native.js +2 -0
- package/dist/cjs/platform/index.native.js.map +1 -1
- package/dist/cjs/platform/specs/OneAdaptive.nitro.cjs +16 -0
- package/dist/cjs/platform/specs/OneAdaptive.nitro.native.cjs +18 -0
- package/dist/cjs/platform/specs/OneAdaptive.nitro.native.js +20 -0
- package/dist/cjs/platform/specs/OneAdaptive.nitro.native.js.map +1 -0
- package/dist/cjs/platform/specs/OneDocumentPicker.nitro.cjs +16 -0
- package/dist/cjs/platform/specs/OneDocumentPicker.nitro.native.cjs +18 -0
- package/dist/cjs/platform/specs/OneDocumentPicker.nitro.native.js +20 -0
- package/dist/cjs/platform/specs/OneDocumentPicker.nitro.native.js.map +1 -0
- package/dist/cjs/platform/ui/Image.native.cjs +32 -5
- package/dist/cjs/platform/ui/Image.native.js +32 -5
- package/dist/cjs/platform/ui/Image.native.js.map +1 -1
- package/dist/cjs/vite/plugins/swiftPackagePlugin.cjs +4 -1
- package/dist/cjs/vite/plugins/swiftPackagePlugin.native.cjs +4 -1
- package/dist/cjs/vite/plugins/swiftPackagePlugin.native.js +4 -1
- package/dist/cjs/vite/plugins/swiftPackagePlugin.native.js.map +1 -1
- package/dist/esm/one.mjs +2 -1
- package/dist/esm/one.mjs.map +1 -1
- package/dist/esm/one.native.js +2 -1
- package/dist/esm/one.native.js.map +1 -1
- package/dist/esm/platform/adaptive/index.native.js +79 -53
- package/dist/esm/platform/adaptive/index.native.js.map +1 -1
- package/dist/esm/platform/document-picker/index.mjs +39 -0
- package/dist/esm/platform/document-picker/index.mjs.map +1 -0
- package/dist/esm/platform/document-picker/index.native.js +36 -0
- package/dist/esm/platform/document-picker/index.native.js.map +1 -0
- package/dist/esm/platform/document-picker/options.mjs +22 -0
- package/dist/esm/platform/document-picker/options.mjs.map +1 -0
- package/dist/esm/platform/document-picker/options.native.js +42 -0
- package/dist/esm/platform/document-picker/options.native.js.map +1 -0
- package/dist/esm/platform/document-picker/types.mjs +0 -0
- package/dist/esm/platform/document-picker/types.native.js +0 -0
- package/dist/esm/platform/index.mjs +2 -1
- package/dist/esm/platform/index.mjs.map +1 -1
- package/dist/esm/platform/index.native.js +2 -1
- package/dist/esm/platform/index.native.js.map +1 -1
- package/dist/esm/platform/specs/OneAdaptive.nitro.mjs +0 -0
- package/dist/esm/platform/specs/OneAdaptive.nitro.native.js +0 -0
- package/dist/esm/platform/specs/OneDocumentPicker.nitro.mjs +0 -0
- package/dist/esm/platform/specs/OneDocumentPicker.nitro.native.js +0 -0
- package/dist/esm/platform/ui/Image.native.js +32 -5
- package/dist/esm/platform/ui/Image.native.js.map +1 -1
- package/dist/esm/vite/plugins/swiftPackagePlugin.mjs +4 -1
- package/dist/esm/vite/plugins/swiftPackagePlugin.mjs.map +1 -1
- package/dist/esm/vite/plugins/swiftPackagePlugin.native.js +4 -1
- package/dist/esm/vite/plugins/swiftPackagePlugin.native.js.map +1 -1
- package/ios/Nitro/HybridOneAdaptive.swift +243 -0
- package/ios/Nitro/HybridOneDocumentPicker.swift +156 -0
- package/ios/Nitro/HybridOneNotifications.swift +12 -16
- package/ios/OneNotificationsLaunch.mm +37 -0
- package/nitrogen/generated/android/One+autolinking.cmake +4 -0
- package/nitrogen/generated/android/OneOnLoad.cpp +38 -2
- package/nitrogen/generated/android/c++/JDocumentPickerAsset.hpp +70 -0
- package/nitrogen/generated/android/c++/JDocumentPickerNativeResult.hpp +83 -0
- package/nitrogen/generated/android/c++/JFunc_void_SizeClass.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_HingeState_.hpp +80 -0
- package/nitrogen/generated/android/c++/JHingeState.hpp +62 -0
- package/nitrogen/generated/android/c++/JHingeStatus.hpp +64 -0
- package/nitrogen/generated/android/c++/JHybridOneAdaptiveSpec.cpp +138 -0
- package/nitrogen/generated/android/c++/JHybridOneAdaptiveSpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridOneDocumentPickerSpec.cpp +79 -0
- package/nitrogen/generated/android/c++/JHybridOneDocumentPickerSpec.hpp +63 -0
- package/nitrogen/generated/android/c++/JNetworkStateType.hpp +3 -3
- package/nitrogen/generated/android/c++/JResolvedDocumentPickerOptions.hpp +80 -0
- package/nitrogen/generated/android/c++/JSizeClass.hpp +62 -0
- package/nitrogen/generated/android/c++/JUserInterfaceSizeClass.hpp +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/DocumentPickerAsset.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/DocumentPickerNativeResult.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/Func_void_SizeClass.kt +78 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/Func_void_std__optional_HingeState_.kt +78 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HingeState.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HingeStatus.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneAdaptiveSpec.kt +87 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneDocumentPickerSpec.kt +57 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/NetworkStateType.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/ResolvedDocumentPickerOptions.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SizeClass.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/UserInterfaceSizeClass.kt +24 -0
- package/nitrogen/generated/ios/One-Swift-Cxx-Bridge.cpp +71 -13
- package/nitrogen/generated/ios/One-Swift-Cxx-Bridge.hpp +316 -65
- package/nitrogen/generated/ios/One-Swift-Cxx-Umbrella.hpp +31 -0
- package/nitrogen/generated/ios/OneAutolinking.mm +16 -0
- package/nitrogen/generated/ios/OneAutolinking.swift +24 -0
- package/nitrogen/generated/ios/c++/HybridOneAdaptiveSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridOneAdaptiveSpecSwift.hpp +135 -0
- package/nitrogen/generated/ios/c++/HybridOneDocumentPickerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridOneDocumentPickerSpecSwift.hpp +93 -0
- package/nitrogen/generated/ios/swift/DocumentPickerAsset.swift +70 -0
- package/nitrogen/generated/ios/swift/DocumentPickerNativeResult.swift +53 -0
- package/nitrogen/generated/ios/swift/Func_void_DocumentPickerNativeResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_SizeClass.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_HingeState_.swift +46 -0
- package/nitrogen/generated/ios/swift/HingeState.swift +34 -0
- package/nitrogen/generated/ios/swift/HingeStatus.swift +48 -0
- package/nitrogen/generated/ios/swift/HybridOneAdaptiveSpec.swift +60 -0
- package/nitrogen/generated/ios/swift/HybridOneAdaptiveSpec_cxx.swift +246 -0
- package/nitrogen/generated/ios/swift/HybridOneDocumentPickerSpec.swift +55 -0
- package/nitrogen/generated/ios/swift/HybridOneDocumentPickerSpec_cxx.swift +145 -0
- package/nitrogen/generated/ios/swift/NetworkStateType.swift +4 -4
- package/nitrogen/generated/ios/swift/ResolvedDocumentPickerOptions.swift +40 -0
- package/nitrogen/generated/ios/swift/SizeClass.swift +34 -0
- package/nitrogen/generated/ios/swift/UserInterfaceSizeClass.swift +44 -0
- package/nitrogen/generated/shared/c++/DocumentPickerAsset.hpp +96 -0
- package/nitrogen/generated/shared/c++/DocumentPickerNativeResult.hpp +90 -0
- package/nitrogen/generated/shared/c++/HingeState.hpp +88 -0
- package/nitrogen/generated/shared/c++/HingeStatus.hpp +84 -0
- package/nitrogen/generated/shared/c++/HybridOneAdaptiveSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridOneAdaptiveSpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/HybridOneDocumentPickerSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridOneDocumentPickerSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/NetworkStateType.hpp +5 -5
- package/nitrogen/generated/shared/c++/ResolvedDocumentPickerOptions.hpp +88 -0
- package/nitrogen/generated/shared/c++/SizeClass.hpp +88 -0
- package/nitrogen/generated/shared/c++/UserInterfaceSizeClass.hpp +80 -0
- package/package.json +10 -10
- package/src/one.ts +3 -0
- package/src/platform/adaptive/index.native.ts +99 -66
- package/src/platform/document-picker/index.native.ts +50 -0
- package/src/platform/document-picker/index.ts +51 -0
- package/src/platform/document-picker/options.ts +30 -0
- package/src/platform/document-picker/types.ts +34 -0
- package/src/platform/index.native.ts +8 -0
- package/src/platform/index.ts +8 -0
- package/src/platform/specs/OneAdaptive.nitro.ts +18 -0
- package/src/platform/specs/OneDocumentPicker.nitro.ts +16 -0
- package/src/platform/ui/Image.native.tsx +43 -8
- package/src/vite/plugins/swiftPackagePlugin.ts +9 -1
- package/types/one.d.ts +2 -1
- package/types/one.d.ts.map +1 -1
- package/types/platform/adaptive/index.native.d.ts +7 -3
- package/types/platform/adaptive/index.native.d.ts.map +1 -1
- package/types/platform/document-picker/index.d.ts +7 -0
- package/types/platform/document-picker/index.d.ts.map +1 -0
- package/types/platform/document-picker/index.native.d.ts +7 -0
- package/types/platform/document-picker/index.native.d.ts.map +1 -0
- package/types/platform/document-picker/options.d.ts +7 -0
- package/types/platform/document-picker/options.d.ts.map +1 -0
- package/types/platform/document-picker/types.d.ts +20 -0
- package/types/platform/document-picker/types.d.ts.map +1 -0
- package/types/platform/index.d.ts +2 -0
- package/types/platform/index.d.ts.map +1 -1
- package/types/platform/index.native.d.ts +2 -0
- package/types/platform/index.native.d.ts.map +1 -1
- package/types/platform/specs/OneAdaptive.nitro.d.ts +14 -0
- package/types/platform/specs/OneAdaptive.nitro.d.ts.map +1 -0
- package/types/platform/specs/OneDocumentPicker.nitro.d.ts +14 -0
- package/types/platform/specs/OneDocumentPicker.nitro.d.ts.map +1 -0
- package/types/platform/ui/Image.native.d.ts +16 -2
- package/types/platform/ui/Image.native.d.ts.map +1 -1
- package/types/vite/plugins/swiftPackagePlugin.d.ts.map +1 -1
- package/ios/OneNativeAdaptive.h +0 -5
- package/ios/OneNativeAdaptive.mm +0 -96
- package/ios/OneNativeAdaptiveBridge.swift +0 -134
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
package com.margelo.nitro.one
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.ComponentCallbacks
|
|
5
|
+
import android.content.Context
|
|
6
|
+
import android.content.res.Configuration
|
|
7
|
+
import android.hardware.Sensor
|
|
8
|
+
import android.hardware.SensorEvent
|
|
9
|
+
import android.hardware.SensorEventListener
|
|
10
|
+
import android.hardware.SensorManager
|
|
11
|
+
import android.os.Handler
|
|
12
|
+
import android.os.Looper
|
|
13
|
+
import androidx.core.content.ContextCompat
|
|
14
|
+
import androidx.core.util.Consumer
|
|
15
|
+
import androidx.window.WindowSdkExtensions
|
|
16
|
+
import androidx.window.java.layout.WindowInfoTrackerCallbackAdapter
|
|
17
|
+
import androidx.window.layout.FoldingFeature
|
|
18
|
+
import androidx.window.layout.WindowInfoTracker
|
|
19
|
+
import androidx.window.layout.WindowLayoutInfo
|
|
20
|
+
import androidx.window.layout.WindowMetricsCalculator
|
|
21
|
+
import com.margelo.nitro.NitroModules
|
|
22
|
+
import com.margelo.nitro.core.Promise
|
|
23
|
+
|
|
24
|
+
// window size class and hinge state, the android half of OneAdaptive. size
|
|
25
|
+
// classes come from the current activity window's WindowMetrics against the
|
|
26
|
+
// Jetpack WindowSizeClass breakpoints (width compact below 600dp, height
|
|
27
|
+
// compact below 480dp, else regular) and re-emit on configuration and
|
|
28
|
+
// window-layout changes. hinge status comes from the WindowInfoTracker
|
|
29
|
+
// FoldingFeature (FLAT fullyOpen, HALF_OPENED partiallyOpen) with the angle
|
|
30
|
+
// from the hinge-angle sensor in radians; a hinge sensor with no
|
|
31
|
+
// FoldingFeature in the current window reads closed, and a device with no
|
|
32
|
+
// hinge sensor reads null. the first listener starts the monitors and the
|
|
33
|
+
// last removal stops them, including the sensor.
|
|
34
|
+
class HybridOneAdaptive : HybridOneAdaptiveSpec() {
|
|
35
|
+
private val sizeClassListeners = mutableMapOf<Int, (SizeClass) -> Unit>()
|
|
36
|
+
private val hingeListeners = mutableMapOf<Int, (HingeState?) -> Unit>()
|
|
37
|
+
private var nextListenerId = 0
|
|
38
|
+
|
|
39
|
+
private var configCallbacks: ComponentCallbacks? = null
|
|
40
|
+
private var layoutTracker: WindowInfoTrackerCallbackAdapter? = null
|
|
41
|
+
private val layoutConsumer = Consumer<WindowLayoutInfo> { info ->
|
|
42
|
+
synchronized(this) {
|
|
43
|
+
foldingFeatures = info.displayFeatures.filterIsInstance<FoldingFeature>()
|
|
44
|
+
}
|
|
45
|
+
emitSizeClassIfChanged()
|
|
46
|
+
emitHinge()
|
|
47
|
+
}
|
|
48
|
+
private var foldingFeatures: List<FoldingFeature> = emptyList()
|
|
49
|
+
|
|
50
|
+
private var sensorListener: SensorEventListener? = null
|
|
51
|
+
private var lastAngleDeg: Float? = null
|
|
52
|
+
private var hingeSensorChecked = false
|
|
53
|
+
private var hingeSensor: Sensor? = null
|
|
54
|
+
|
|
55
|
+
private var lastSizeClass: SizeClass? = null
|
|
56
|
+
private var lastHinge: HingeState? = null
|
|
57
|
+
private var lastHingeSet = false
|
|
58
|
+
|
|
59
|
+
private fun activity(): Activity? =
|
|
60
|
+
NitroModules.applicationContext?.currentActivity
|
|
61
|
+
|
|
62
|
+
private fun appContext(): Context? = NitroModules.applicationContext
|
|
63
|
+
|
|
64
|
+
private fun computeSizeClass(): SizeClass {
|
|
65
|
+
val current = activity()
|
|
66
|
+
?: return SizeClass(UserInterfaceSizeClass.UNSPECIFIED, UserInterfaceSizeClass.UNSPECIFIED)
|
|
67
|
+
return try {
|
|
68
|
+
val metrics = WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(current)
|
|
69
|
+
val density = current.resources.displayMetrics.density
|
|
70
|
+
if (density <= 0) {
|
|
71
|
+
return SizeClass(UserInterfaceSizeClass.UNSPECIFIED, UserInterfaceSizeClass.UNSPECIFIED)
|
|
72
|
+
}
|
|
73
|
+
val widthDp = metrics.bounds.width() / density
|
|
74
|
+
val heightDp = metrics.bounds.height() / density
|
|
75
|
+
SizeClass(
|
|
76
|
+
if (widthDp < 600) UserInterfaceSizeClass.COMPACT else UserInterfaceSizeClass.REGULAR,
|
|
77
|
+
if (heightDp < 480) UserInterfaceSizeClass.COMPACT else UserInterfaceSizeClass.REGULAR
|
|
78
|
+
)
|
|
79
|
+
} catch (e: Exception) {
|
|
80
|
+
throw OneNativeError("E_ADAPTIVE_SIZE_CLASS", "Adaptive.getSizeClass: ${e.message}")
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private fun hasHingeSensor(): Boolean {
|
|
85
|
+
synchronized(this) {
|
|
86
|
+
if (hingeSensorChecked) return hingeSensor != null
|
|
87
|
+
hingeSensorChecked = true
|
|
88
|
+
hingeSensor =
|
|
89
|
+
try {
|
|
90
|
+
val manager = appContext()?.getSystemService(Context.SENSOR_SERVICE) as? SensorManager
|
|
91
|
+
manager?.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
|
|
92
|
+
} catch (e: Exception) {
|
|
93
|
+
null
|
|
94
|
+
}
|
|
95
|
+
return hingeSensor != null
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private fun currentFoldingFeatures(): List<FoldingFeature> {
|
|
100
|
+
synchronized(this) {
|
|
101
|
+
if (foldingFeatures.isNotEmpty()) return foldingFeatures
|
|
102
|
+
}
|
|
103
|
+
// one-shot read before any layout callback has landed.
|
|
104
|
+
return try {
|
|
105
|
+
val context = appContext()
|
|
106
|
+
val current = activity()
|
|
107
|
+
if (context == null || current == null) emptyList()
|
|
108
|
+
else if (WindowSdkExtensions.getInstance().extensionVersion < 9) emptyList()
|
|
109
|
+
else {
|
|
110
|
+
WindowInfoTracker.getOrCreate(context)
|
|
111
|
+
.getCurrentWindowLayoutInfo(current)
|
|
112
|
+
.displayFeatures.filterIsInstance<FoldingFeature>()
|
|
113
|
+
}
|
|
114
|
+
} catch (e: Exception) {
|
|
115
|
+
emptyList()
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private fun computeHinge(): HingeState? {
|
|
120
|
+
if (!hasHingeSensor()) return null
|
|
121
|
+
val angleRad =
|
|
122
|
+
synchronized(this) { lastAngleDeg }?.let { (it * Math.PI / 180.0) }
|
|
123
|
+
val features = currentFoldingFeatures()
|
|
124
|
+
val feature = features.firstOrNull()
|
|
125
|
+
return when (feature?.state) {
|
|
126
|
+
FoldingFeature.State.FLAT ->
|
|
127
|
+
HingeState(HingeStatus.FULLYOPEN, angleRad ?: Math.PI)
|
|
128
|
+
FoldingFeature.State.HALF_OPENED ->
|
|
129
|
+
HingeState(HingeStatus.PARTIALLYOPEN, angleRad ?: (Math.PI / 2.0))
|
|
130
|
+
else -> HingeState(HingeStatus.CLOSED, angleRad ?: 0.0)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
override fun getSizeClass(): Promise<SizeClass> =
|
|
135
|
+
Promise.async {
|
|
136
|
+
try {
|
|
137
|
+
computeSizeClass()
|
|
138
|
+
} catch (e: OneNativeError) {
|
|
139
|
+
throw e
|
|
140
|
+
} catch (e: Exception) {
|
|
141
|
+
throw OneNativeError("E_ADAPTIVE_SIZE_CLASS", "Adaptive.getSizeClass: ${e.message}")
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// synchronous seed for the JS import-time read: the same measurement as
|
|
146
|
+
// getSizeClass/getHinge, unspecified when no activity is attached yet.
|
|
147
|
+
override fun getInitialSizeClass(): SizeClass = computeSizeClass()
|
|
148
|
+
|
|
149
|
+
override fun getInitialHinge(): HingeState? = computeHinge()
|
|
150
|
+
|
|
151
|
+
override fun getHinge(): Promise<HingeState?> =
|
|
152
|
+
Promise.async {
|
|
153
|
+
try {
|
|
154
|
+
computeHinge()
|
|
155
|
+
} catch (e: OneNativeError) {
|
|
156
|
+
throw e
|
|
157
|
+
} catch (e: Exception) {
|
|
158
|
+
throw OneNativeError("E_ADAPTIVE_HINGE", "Adaptive.getHinge: ${e.message}")
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
override fun addSizeClassListener(listener: (sizeClass: SizeClass) -> Unit): () -> Unit {
|
|
163
|
+
val id: Int
|
|
164
|
+
val shouldStart: Boolean
|
|
165
|
+
synchronized(this) {
|
|
166
|
+
id = nextListenerId++
|
|
167
|
+
sizeClassListeners[id] = listener
|
|
168
|
+
shouldStart = sizeClassListeners.size + hingeListeners.size == 1
|
|
169
|
+
}
|
|
170
|
+
if (shouldStart) startMonitors()
|
|
171
|
+
// deliver the current value to the newcomer without racing the monitor.
|
|
172
|
+
try {
|
|
173
|
+
val current = computeSizeClass()
|
|
174
|
+
synchronized(this) {
|
|
175
|
+
if (lastSizeClass == null) lastSizeClass = current
|
|
176
|
+
}
|
|
177
|
+
listener(current)
|
|
178
|
+
} catch (e: Exception) {
|
|
179
|
+
// monitoring continues; the next change still emits.
|
|
180
|
+
}
|
|
181
|
+
return { removeSizeClassListener(id) }
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
override fun addHingeListener(listener: (hinge: HingeState?) -> Unit): () -> Unit {
|
|
185
|
+
val id: Int
|
|
186
|
+
val shouldStart: Boolean
|
|
187
|
+
synchronized(this) {
|
|
188
|
+
id = nextListenerId++
|
|
189
|
+
hingeListeners[id] = listener
|
|
190
|
+
shouldStart = sizeClassListeners.size + hingeListeners.size == 1
|
|
191
|
+
}
|
|
192
|
+
if (shouldStart) startMonitors() else startSensorIfNeeded()
|
|
193
|
+
try {
|
|
194
|
+
val current = computeHinge()
|
|
195
|
+
synchronized(this) {
|
|
196
|
+
if (!lastHingeSet) {
|
|
197
|
+
lastHinge = current
|
|
198
|
+
lastHingeSet = true
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
listener(current)
|
|
202
|
+
} catch (e: Exception) {
|
|
203
|
+
}
|
|
204
|
+
return { removeHingeListener(id) }
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
private fun removeSizeClassListener(id: Int) {
|
|
208
|
+
val shouldStop: Boolean
|
|
209
|
+
synchronized(this) {
|
|
210
|
+
sizeClassListeners.remove(id)
|
|
211
|
+
shouldStop = sizeClassListeners.isEmpty() && hingeListeners.isEmpty()
|
|
212
|
+
}
|
|
213
|
+
if (shouldStop) stopMonitors()
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
private fun removeHingeListener(id: Int) {
|
|
217
|
+
val shouldStop: Boolean
|
|
218
|
+
val stopSensor: Boolean
|
|
219
|
+
synchronized(this) {
|
|
220
|
+
hingeListeners.remove(id)
|
|
221
|
+
shouldStop = sizeClassListeners.isEmpty() && hingeListeners.isEmpty()
|
|
222
|
+
stopSensor = hingeListeners.isEmpty()
|
|
223
|
+
}
|
|
224
|
+
if (stopSensor) stopSensor()
|
|
225
|
+
if (shouldStop) stopMonitors()
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
private fun startMonitors() {
|
|
229
|
+
val context = appContext() ?: return
|
|
230
|
+
synchronized(this) {
|
|
231
|
+
if (configCallbacks == null) {
|
|
232
|
+
val callbacks =
|
|
233
|
+
object : ComponentCallbacks {
|
|
234
|
+
override fun onConfigurationChanged(newConfig: Configuration) {
|
|
235
|
+
emitSizeClassIfChanged()
|
|
236
|
+
emitHinge()
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
override fun onLowMemory() = Unit
|
|
240
|
+
}
|
|
241
|
+
configCallbacks = callbacks
|
|
242
|
+
context.registerComponentCallbacks(callbacks)
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
startLayoutTracking()
|
|
246
|
+
startSensorIfNeeded()
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private fun startLayoutTracking() {
|
|
250
|
+
synchronized(this) {
|
|
251
|
+
if (layoutTracker != null) return
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
val context = appContext() ?: return
|
|
255
|
+
val current = activity() ?: return
|
|
256
|
+
val tracker = WindowInfoTrackerCallbackAdapter(WindowInfoTracker.getOrCreate(context))
|
|
257
|
+
tracker.addWindowLayoutInfoListener(
|
|
258
|
+
current, ContextCompat.getMainExecutor(context), layoutConsumer
|
|
259
|
+
)
|
|
260
|
+
synchronized(this) {
|
|
261
|
+
layoutTracker = tracker
|
|
262
|
+
}
|
|
263
|
+
} catch (e: Exception) {
|
|
264
|
+
// window tracking is best-effort; configuration changes still emit.
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
private fun startSensorIfNeeded() {
|
|
269
|
+
val hasListeners: Boolean
|
|
270
|
+
synchronized(this) {
|
|
271
|
+
hasListeners = hingeListeners.isNotEmpty()
|
|
272
|
+
if (!hasListeners || sensorListener != null) return
|
|
273
|
+
}
|
|
274
|
+
if (!hasHingeSensor()) return
|
|
275
|
+
try {
|
|
276
|
+
val manager = appContext()?.getSystemService(Context.SENSOR_SERVICE) as? SensorManager
|
|
277
|
+
val sensor = synchronized(this) { hingeSensor } ?: return
|
|
278
|
+
val listener =
|
|
279
|
+
object : SensorEventListener {
|
|
280
|
+
override fun onSensorChanged(event: SensorEvent) {
|
|
281
|
+
val degrees = event.values.firstOrNull() ?: return
|
|
282
|
+
synchronized(this@HybridOneAdaptive) {
|
|
283
|
+
lastAngleDeg = degrees
|
|
284
|
+
}
|
|
285
|
+
emitHinge()
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) = Unit
|
|
289
|
+
}
|
|
290
|
+
manager?.registerListener(
|
|
291
|
+
listener, sensor, SensorManager.SENSOR_DELAY_NORMAL,
|
|
292
|
+
Handler(Looper.getMainLooper())
|
|
293
|
+
)
|
|
294
|
+
synchronized(this) {
|
|
295
|
+
// a second caller may have registered while we were working.
|
|
296
|
+
if (sensorListener == null) sensorListener = listener
|
|
297
|
+
else manager?.unregisterListener(listener)
|
|
298
|
+
}
|
|
299
|
+
} catch (e: Exception) {
|
|
300
|
+
// hinge angle stays at its default; status still reports.
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
private fun stopSensor() {
|
|
305
|
+
val listener: SensorEventListener?
|
|
306
|
+
synchronized(this) {
|
|
307
|
+
listener = sensorListener
|
|
308
|
+
sensorListener = null
|
|
309
|
+
}
|
|
310
|
+
if (listener != null) {
|
|
311
|
+
try {
|
|
312
|
+
val manager = appContext()?.getSystemService(Context.SENSOR_SERVICE) as? SensorManager
|
|
313
|
+
manager?.unregisterListener(listener)
|
|
314
|
+
} catch (e: Exception) {
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
private fun stopMonitors() {
|
|
320
|
+
val callbacks: ComponentCallbacks?
|
|
321
|
+
val tracker: WindowInfoTrackerCallbackAdapter?
|
|
322
|
+
synchronized(this) {
|
|
323
|
+
callbacks = configCallbacks
|
|
324
|
+
configCallbacks = null
|
|
325
|
+
tracker = layoutTracker
|
|
326
|
+
layoutTracker = null
|
|
327
|
+
}
|
|
328
|
+
if (callbacks != null) {
|
|
329
|
+
try {
|
|
330
|
+
appContext()?.unregisterComponentCallbacks(callbacks)
|
|
331
|
+
} catch (e: Exception) {
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
if (tracker != null) {
|
|
335
|
+
try {
|
|
336
|
+
tracker.removeWindowLayoutInfoListener(layoutConsumer)
|
|
337
|
+
} catch (e: Exception) {
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
stopSensor()
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
private fun emitSizeClassIfChanged() {
|
|
344
|
+
val next: SizeClass
|
|
345
|
+
try {
|
|
346
|
+
next = computeSizeClass()
|
|
347
|
+
} catch (e: Exception) {
|
|
348
|
+
return
|
|
349
|
+
}
|
|
350
|
+
// a rotation can detach the activity before the new window exists;
|
|
351
|
+
// reattach layout tracking once it is back.
|
|
352
|
+
if (next.horizontal != UserInterfaceSizeClass.UNSPECIFIED) startLayoutTracking()
|
|
353
|
+
val changed: Boolean
|
|
354
|
+
synchronized(this) {
|
|
355
|
+
changed = lastSizeClass == null || lastSizeClass != next
|
|
356
|
+
if (changed) lastSizeClass = next
|
|
357
|
+
}
|
|
358
|
+
if (!changed) return
|
|
359
|
+
val current = synchronized(this) { sizeClassListeners.values.toList() }
|
|
360
|
+
current.forEach {
|
|
361
|
+
try {
|
|
362
|
+
it(next)
|
|
363
|
+
} catch (e: Exception) {
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
private fun emitHinge() {
|
|
369
|
+
val next: HingeState?
|
|
370
|
+
try {
|
|
371
|
+
next = computeHinge()
|
|
372
|
+
} catch (e: Exception) {
|
|
373
|
+
return
|
|
374
|
+
}
|
|
375
|
+
val changed: Boolean
|
|
376
|
+
synchronized(this) {
|
|
377
|
+
changed = !lastHingeSet || lastHinge != next
|
|
378
|
+
if (changed) {
|
|
379
|
+
lastHinge = next
|
|
380
|
+
lastHingeSet = true
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (!changed) return
|
|
384
|
+
val current = synchronized(this) { hingeListeners.values.toList() }
|
|
385
|
+
current.forEach {
|
|
386
|
+
try {
|
|
387
|
+
it(next)
|
|
388
|
+
} catch (e: Exception) {
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
package com.margelo.nitro.one
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.ActivityNotFoundException
|
|
5
|
+
import android.content.Intent
|
|
6
|
+
import android.net.Uri
|
|
7
|
+
import android.provider.OpenableColumns
|
|
8
|
+
import com.facebook.react.bridge.ActivityEventListener
|
|
9
|
+
import com.margelo.nitro.NitroModules
|
|
10
|
+
import com.margelo.nitro.core.Promise
|
|
11
|
+
import java.io.File
|
|
12
|
+
import java.io.FileOutputStream
|
|
13
|
+
import java.util.UUID
|
|
14
|
+
|
|
15
|
+
// imperative document picker: ACTION_OPEN_DOCUMENT filtered by mime type.
|
|
16
|
+
// each picked file is copied into the app cache under its display name and
|
|
17
|
+
// returned as a file uri, so no provider grant outlives the pick. backing out
|
|
18
|
+
// resolves canceled; only runtime failures reject. calls arrive on the js
|
|
19
|
+
// thread and results on the ui thread, so the pending slot is only taken or
|
|
20
|
+
// settled under the lock.
|
|
21
|
+
class HybridOneDocumentPicker : HybridOneDocumentPickerSpec(), ActivityEventListener {
|
|
22
|
+
private val lock = Any()
|
|
23
|
+
private var pending: Promise<DocumentPickerNativeResult>? = null
|
|
24
|
+
|
|
25
|
+
init {
|
|
26
|
+
NitroModules.applicationContext?.addActivityEventListener(this)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override fun dispose() {
|
|
30
|
+
NitroModules.applicationContext?.removeActivityEventListener(this)
|
|
31
|
+
takePending()?.reject(OneNativeError(E_FAILED, "DocumentPicker.getDocument: torn down mid-request"))
|
|
32
|
+
super.dispose()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// a hybrid object has no lifecycle owner to register activity result
|
|
36
|
+
// launchers against, so it launches the intent the classic way and reads
|
|
37
|
+
// the result through the activity event listener.
|
|
38
|
+
@Suppress("DEPRECATION")
|
|
39
|
+
override fun getDocument(options: ResolvedDocumentPickerOptions): Promise<DocumentPickerNativeResult> {
|
|
40
|
+
val promise = Promise<DocumentPickerNativeResult>()
|
|
41
|
+
// one pick in flight: native owns the slot, so a second pick rejects
|
|
42
|
+
// instead of clobbering the pending promise.
|
|
43
|
+
synchronized(lock) {
|
|
44
|
+
if (pending != null) {
|
|
45
|
+
promise.reject(OneNativeError(E_FAILED, "DocumentPicker.getDocument: another request is already in flight"))
|
|
46
|
+
return promise
|
|
47
|
+
}
|
|
48
|
+
pending = promise
|
|
49
|
+
}
|
|
50
|
+
val activity = NitroModules.applicationContext?.currentActivity
|
|
51
|
+
if (activity == null) {
|
|
52
|
+
rejectPending("found no activity to present from")
|
|
53
|
+
return promise
|
|
54
|
+
}
|
|
55
|
+
val intent =
|
|
56
|
+
Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
|
|
57
|
+
addCategory(Intent.CATEGORY_OPENABLE)
|
|
58
|
+
if (options.types.size == 1) {
|
|
59
|
+
type = options.types[0]
|
|
60
|
+
} else {
|
|
61
|
+
type = "*/*"
|
|
62
|
+
putExtra(Intent.EXTRA_MIME_TYPES, options.types)
|
|
63
|
+
}
|
|
64
|
+
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, options.multiple)
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
activity.startActivityForResult(intent, REQUEST_DOCUMENT, null)
|
|
68
|
+
} catch (e: ActivityNotFoundException) {
|
|
69
|
+
rejectPending("found no document picker on this device")
|
|
70
|
+
} catch (e: Exception) {
|
|
71
|
+
rejectPending(e.message ?: "could not open the document picker")
|
|
72
|
+
}
|
|
73
|
+
return promise
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
|
|
77
|
+
if (requestCode != REQUEST_DOCUMENT) return
|
|
78
|
+
val uris = pickedUris(resultCode, data)
|
|
79
|
+
if (uris.isEmpty()) {
|
|
80
|
+
takePending()?.resolve(DocumentPickerNativeResult(true, null))
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
// copying can take a while for large files; keep it off the ui thread.
|
|
84
|
+
Thread {
|
|
85
|
+
try {
|
|
86
|
+
val assets = uris.map { copyToCache(it) }.toTypedArray()
|
|
87
|
+
takePending()?.resolve(DocumentPickerNativeResult(false, assets))
|
|
88
|
+
} catch (e: Exception) {
|
|
89
|
+
rejectPending(e.message ?: "could not copy a picked file")
|
|
90
|
+
}
|
|
91
|
+
}.start()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
override fun onNewIntent(intent: Intent) {}
|
|
95
|
+
|
|
96
|
+
private fun pickedUris(resultCode: Int, data: Intent?): List<Uri> {
|
|
97
|
+
if (resultCode != Activity.RESULT_OK || data == null) return emptyList()
|
|
98
|
+
val clip = data.clipData
|
|
99
|
+
if (clip != null) {
|
|
100
|
+
return (0 until clip.itemCount).mapNotNull { clip.getItemAt(it).uri }
|
|
101
|
+
}
|
|
102
|
+
return listOfNotNull(data.data)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// each pick gets its own directory so the display name survives as the
|
|
106
|
+
// file name without colliding with an earlier pick of the same name.
|
|
107
|
+
private fun copyToCache(source: Uri): DocumentPickerAsset {
|
|
108
|
+
val context =
|
|
109
|
+
NitroModules.applicationContext
|
|
110
|
+
?: throw IllegalStateException("the react context is not ready")
|
|
111
|
+
val resolver = context.contentResolver
|
|
112
|
+
var name: String? = null
|
|
113
|
+
resolver.query(source, arrayOf(OpenableColumns.DISPLAY_NAME), null, null, null)?.use {
|
|
114
|
+
val index = it.getColumnIndex(OpenableColumns.DISPLAY_NAME)
|
|
115
|
+
if (it.moveToFirst() && index >= 0) name = it.getString(index)
|
|
116
|
+
}
|
|
117
|
+
// a display name is the provider's word, so strip any path from it.
|
|
118
|
+
val fileName = name?.substringAfterLast('/')?.takeIf { it.isNotBlank() } ?: "document"
|
|
119
|
+
val dir = File(File(context.cacheDir, "one-native-document-picker"), UUID.randomUUID().toString())
|
|
120
|
+
dir.mkdirs()
|
|
121
|
+
val dest = File(dir, fileName)
|
|
122
|
+
(resolver.openInputStream(source) ?: throw IllegalStateException("cannot open $source")).use { input ->
|
|
123
|
+
FileOutputStream(dest).use { output -> input.copyTo(output) }
|
|
124
|
+
}
|
|
125
|
+
return DocumentPickerAsset(
|
|
126
|
+
Uri.fromFile(dest).toString(),
|
|
127
|
+
fileName,
|
|
128
|
+
resolver.getType(source),
|
|
129
|
+
dest.length().toDouble()
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private fun takePending(): Promise<DocumentPickerNativeResult>? = synchronized(lock) {
|
|
134
|
+
val promise = pending
|
|
135
|
+
pending = null
|
|
136
|
+
promise
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private fun rejectPending(message: String) {
|
|
140
|
+
takePending()?.reject(OneNativeError(E_FAILED, "DocumentPicker.getDocument: $message"))
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
companion object {
|
|
144
|
+
private const val E_FAILED = "E_DOCUMENT_PICKER_FAILED"
|
|
145
|
+
private const val REQUEST_DOCUMENT = 0x1B01
|
|
146
|
+
}
|
|
147
|
+
}
|
package/dist/cjs/one.cjs
CHANGED
|
@@ -83,6 +83,7 @@ const One = Object.freeze({
|
|
|
83
83
|
Network: import_platform.Network,
|
|
84
84
|
Browser: import_platform.Browser,
|
|
85
85
|
ImagePicker: import_platform.ImagePicker,
|
|
86
|
+
DocumentPicker: import_platform.DocumentPicker,
|
|
86
87
|
SecureStore: import_platform.SecureStore,
|
|
87
88
|
useNetworkState: import_platform.useNetworkState
|
|
88
89
|
});
|
package/dist/cjs/one.native.cjs
CHANGED
|
@@ -86,6 +86,7 @@ var One = Object.freeze({
|
|
|
86
86
|
Network: import_platform.Network,
|
|
87
87
|
Browser: import_platform.Browser,
|
|
88
88
|
ImagePicker: import_platform.ImagePicker,
|
|
89
|
+
DocumentPicker: import_platform.DocumentPicker,
|
|
89
90
|
SecureStore: import_platform.SecureStore,
|
|
90
91
|
useNetworkState: import_platform.useNetworkState
|
|
91
92
|
});
|
package/dist/cjs/one.native.js
CHANGED
|
@@ -86,6 +86,7 @@ var One = Object.freeze({
|
|
|
86
86
|
Network: import_platform.Network,
|
|
87
87
|
Browser: import_platform.Browser,
|
|
88
88
|
ImagePicker: import_platform.ImagePicker,
|
|
89
|
+
DocumentPicker: import_platform.DocumentPicker,
|
|
89
90
|
SecureStore: import_platform.SecureStore,
|
|
90
91
|
useNetworkState: import_platform.useNetworkState
|
|
91
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"one.native.js","names":[],"sources":["cjs/one.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar one_exports = {};\n__export(one_exports, {\n One: () => One\n});\nmodule.exports = __toCommonJS(one_exports);\nvar import_platform = require(\"./platform\");\nvar import_safe_area_context = require(\"./safe-area-context\");\nfunction currentPlatform() {\n var _Reflect_get;\n var defined = (_Reflect_get = Reflect.get(globalThis, \"__ONE_PLATFORM__\")) !== null && _Reflect_get !== void 0 ? _Reflect_get : typeof process !== \"undefined\" ? process.env.ONE_PLATFORM : void 0;\n return defined === \"ios\" || defined === \"android\" || defined === \"rnx\" ? defined : \"web\";\n}\nvar iOS = Object.freeze({\n ...import_platform.Swift,\n Widgets: import_platform.Widgets,\n LiveActivities: import_platform.LiveActivities,\n WidgetUI: import_platform.WidgetUI,\n Color: import_platform.Color.ios,\n MenuAction: import_platform.MenuAction,\n SplitView: import_platform.SplitView,\n ToolbarHost: import_platform.ToolbarHost,\n BarButtonItem: import_platform.ToolbarItem,\n ZoomTransitionAlignmentRectDetector: import_platform.ZoomTransitionAlignmentRectDetector,\n ZoomTransitionEnabler: import_platform.ZoomTransitionEnabler,\n ZoomTransitionSource: import_platform.ZoomTransitionSource\n});\nvar Android = Object.freeze({\n ...import_platform.Compose,\n Color: import_platform.Color.android,\n Menu: import_platform.Menu,\n ContextMenu: import_platform.ContextMenu\n});\nvar SafeArea = Object.freeze({\n Provider: import_safe_area_context.SafeAreaProvider,\n View: import_safe_area_context.SafeAreaView,\n initialMetrics: import_safe_area_context.initialWindowMetrics,\n useFrame: import_safe_area_context.useSafeAreaFrame,\n useInsets: import_safe_area_context.useSafeAreaInsets\n});\nvar UI = Object.freeze({\n ...import_platform.UI,\n Fonts: import_platform.Fonts,\n SafeArea,\n TextInput: import_platform.TextInput,\n useFonts: import_platform.useFonts,\n useNativeState: import_platform.useNativeState,\n useSizeClass: import_platform.useSizeClass,\n getSizeClass: import_platform.getSizeClass,\n useHinge: import_platform.useHinge,\n getHinge: import_platform.getHinge,\n onHingeChange: import_platform.onHingeChange,\n ReservedRegions: import_platform.ReservedRegions\n});\nvar One = Object.freeze({\n get platform() {\n return currentPlatform();\n },\n AppInfo: import_platform.AppInfo,\n Database: import_platform.Database,\n iOS,\n Android,\n UI,\n Notifications: import_platform.Notifications,\n Clipboard: import_platform.Clipboard,\n Haptics: import_platform.Haptics,\n Network: import_platform.Network,\n Browser: import_platform.Browser,\n ImagePicker: import_platform.ImagePicker,\n SecureStore: import_platform.SecureStore,\n useNetworkState: import_platform.useNetworkState\n});\n//# sourceMappingURL=one.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,cAAc,CAAC;AACnB,SAAS,aAAa,EACpB,WAAW,IACb,CAAC;AACD,OAAO,UAAU,aAAa,WAAW;AACzC,IAAI,kBAAkB,QAAQ,4BAAY;AAC1C,IAAI,2BAA2B,QAAQ,qCAAqB;AAC5D,SAAS,kBAAkB;CACzB,IAAI;CACJ,IAAI,WAAW,eAAe,QAAQ,IAAI,YAAY,kBAAkB,OAAO,QAAQ,iBAAiB,KAAK,IAAI,eAAe,OAAO,YAAY,cAAc,QAAQ,IAAI,eAAe,KAAK;CACjM,OAAO,YAAY,SAAS,YAAY,aAAa,YAAY,QAAQ,UAAU;AACrF;AACA,IAAI,MAAM,OAAO,OAAO;CACtB,GAAG,gBAAgB;CACnB,SAAS,gBAAgB;CACzB,gBAAgB,gBAAgB;CAChC,UAAU,gBAAgB;CAC1B,OAAO,gBAAgB,MAAM;CAC7B,YAAY,gBAAgB;CAC5B,WAAW,gBAAgB;CAC3B,aAAa,gBAAgB;CAC7B,eAAe,gBAAgB;CAC/B,qCAAqC,gBAAgB;CACrD,uBAAuB,gBAAgB;CACvC,sBAAsB,gBAAgB;AACxC,CAAC;AACD,IAAI,UAAU,OAAO,OAAO;CAC1B,GAAG,gBAAgB;CACnB,OAAO,gBAAgB,MAAM;CAC7B,MAAM,gBAAgB;CACtB,aAAa,gBAAgB;AAC/B,CAAC;AACD,IAAI,WAAW,OAAO,OAAO;CAC3B,UAAU,yBAAyB;CACnC,MAAM,yBAAyB;CAC/B,gBAAgB,yBAAyB;CACzC,UAAU,yBAAyB;CACnC,WAAW,yBAAyB;AACtC,CAAC;AACD,IAAI,KAAK,OAAO,OAAO;CACrB,GAAG,gBAAgB;CACnB,OAAO,gBAAgB;CACvB;CACA,WAAW,gBAAgB;CAC3B,UAAU,gBAAgB;CAC1B,gBAAgB,gBAAgB;CAChC,cAAc,gBAAgB;CAC9B,cAAc,gBAAgB;CAC9B,UAAU,gBAAgB;CAC1B,UAAU,gBAAgB;CAC1B,eAAe,gBAAgB;CAC/B,iBAAiB,gBAAgB;AACnC,CAAC;AACD,IAAI,MAAM,OAAO,OAAO;CACtB,IAAI,WAAW;EACb,OAAO,gBAAgB;CACzB;CACA,SAAS,gBAAgB;CACzB,UAAU,gBAAgB;CAC1B;CACA;CACA;CACA,eAAe,gBAAgB;CAC/B,WAAW,gBAAgB;CAC3B,SAAS,gBAAgB;CACzB,SAAS,gBAAgB;CACzB,SAAS,gBAAgB;CACzB,aAAa,gBAAgB;CAC7B,aAAa,gBAAgB;CAC7B,iBAAiB,gBAAgB;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"one.native.js","names":[],"sources":["cjs/one.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar one_exports = {};\n__export(one_exports, {\n One: () => One\n});\nmodule.exports = __toCommonJS(one_exports);\nvar import_platform = require(\"./platform\");\nvar import_safe_area_context = require(\"./safe-area-context\");\nfunction currentPlatform() {\n var _Reflect_get;\n var defined = (_Reflect_get = Reflect.get(globalThis, \"__ONE_PLATFORM__\")) !== null && _Reflect_get !== void 0 ? _Reflect_get : typeof process !== \"undefined\" ? process.env.ONE_PLATFORM : void 0;\n return defined === \"ios\" || defined === \"android\" || defined === \"rnx\" ? defined : \"web\";\n}\nvar iOS = Object.freeze({\n ...import_platform.Swift,\n Widgets: import_platform.Widgets,\n LiveActivities: import_platform.LiveActivities,\n WidgetUI: import_platform.WidgetUI,\n Color: import_platform.Color.ios,\n MenuAction: import_platform.MenuAction,\n SplitView: import_platform.SplitView,\n ToolbarHost: import_platform.ToolbarHost,\n BarButtonItem: import_platform.ToolbarItem,\n ZoomTransitionAlignmentRectDetector: import_platform.ZoomTransitionAlignmentRectDetector,\n ZoomTransitionEnabler: import_platform.ZoomTransitionEnabler,\n ZoomTransitionSource: import_platform.ZoomTransitionSource\n});\nvar Android = Object.freeze({\n ...import_platform.Compose,\n Color: import_platform.Color.android,\n Menu: import_platform.Menu,\n ContextMenu: import_platform.ContextMenu\n});\nvar SafeArea = Object.freeze({\n Provider: import_safe_area_context.SafeAreaProvider,\n View: import_safe_area_context.SafeAreaView,\n initialMetrics: import_safe_area_context.initialWindowMetrics,\n useFrame: import_safe_area_context.useSafeAreaFrame,\n useInsets: import_safe_area_context.useSafeAreaInsets\n});\nvar UI = Object.freeze({\n ...import_platform.UI,\n Fonts: import_platform.Fonts,\n SafeArea,\n TextInput: import_platform.TextInput,\n useFonts: import_platform.useFonts,\n useNativeState: import_platform.useNativeState,\n useSizeClass: import_platform.useSizeClass,\n getSizeClass: import_platform.getSizeClass,\n useHinge: import_platform.useHinge,\n getHinge: import_platform.getHinge,\n onHingeChange: import_platform.onHingeChange,\n ReservedRegions: import_platform.ReservedRegions\n});\nvar One = Object.freeze({\n get platform() {\n return currentPlatform();\n },\n AppInfo: import_platform.AppInfo,\n Database: import_platform.Database,\n iOS,\n Android,\n UI,\n Notifications: import_platform.Notifications,\n Clipboard: import_platform.Clipboard,\n Haptics: import_platform.Haptics,\n Network: import_platform.Network,\n Browser: import_platform.Browser,\n ImagePicker: import_platform.ImagePicker,\n DocumentPicker: import_platform.DocumentPicker,\n SecureStore: import_platform.SecureStore,\n useNetworkState: import_platform.useNetworkState\n});\n//# sourceMappingURL=one.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,cAAc,CAAC;AACnB,SAAS,aAAa,EACpB,WAAW,IACb,CAAC;AACD,OAAO,UAAU,aAAa,WAAW;AACzC,IAAI,kBAAkB,QAAQ,4BAAY;AAC1C,IAAI,2BAA2B,QAAQ,qCAAqB;AAC5D,SAAS,kBAAkB;CACzB,IAAI;CACJ,IAAI,WAAW,eAAe,QAAQ,IAAI,YAAY,kBAAkB,OAAO,QAAQ,iBAAiB,KAAK,IAAI,eAAe,OAAO,YAAY,cAAc,QAAQ,IAAI,eAAe,KAAK;CACjM,OAAO,YAAY,SAAS,YAAY,aAAa,YAAY,QAAQ,UAAU;AACrF;AACA,IAAI,MAAM,OAAO,OAAO;CACtB,GAAG,gBAAgB;CACnB,SAAS,gBAAgB;CACzB,gBAAgB,gBAAgB;CAChC,UAAU,gBAAgB;CAC1B,OAAO,gBAAgB,MAAM;CAC7B,YAAY,gBAAgB;CAC5B,WAAW,gBAAgB;CAC3B,aAAa,gBAAgB;CAC7B,eAAe,gBAAgB;CAC/B,qCAAqC,gBAAgB;CACrD,uBAAuB,gBAAgB;CACvC,sBAAsB,gBAAgB;AACxC,CAAC;AACD,IAAI,UAAU,OAAO,OAAO;CAC1B,GAAG,gBAAgB;CACnB,OAAO,gBAAgB,MAAM;CAC7B,MAAM,gBAAgB;CACtB,aAAa,gBAAgB;AAC/B,CAAC;AACD,IAAI,WAAW,OAAO,OAAO;CAC3B,UAAU,yBAAyB;CACnC,MAAM,yBAAyB;CAC/B,gBAAgB,yBAAyB;CACzC,UAAU,yBAAyB;CACnC,WAAW,yBAAyB;AACtC,CAAC;AACD,IAAI,KAAK,OAAO,OAAO;CACrB,GAAG,gBAAgB;CACnB,OAAO,gBAAgB;CACvB;CACA,WAAW,gBAAgB;CAC3B,UAAU,gBAAgB;CAC1B,gBAAgB,gBAAgB;CAChC,cAAc,gBAAgB;CAC9B,cAAc,gBAAgB;CAC9B,UAAU,gBAAgB;CAC1B,UAAU,gBAAgB;CAC1B,eAAe,gBAAgB;CAC/B,iBAAiB,gBAAgB;AACnC,CAAC;AACD,IAAI,MAAM,OAAO,OAAO;CACtB,IAAI,WAAW;EACb,OAAO,gBAAgB;CACzB;CACA,SAAS,gBAAgB;CACzB,UAAU,gBAAgB;CAC1B;CACA;CACA;CACA,eAAe,gBAAgB;CAC/B,WAAW,gBAAgB;CAC3B,SAAS,gBAAgB;CACzB,SAAS,gBAAgB;CACzB,SAAS,gBAAgB;CACzB,aAAa,gBAAgB;CAC7B,gBAAgB,gBAAgB;CAChC,aAAa,gBAAgB;CAC7B,iBAAiB,gBAAgB;AACnC,CAAC"}
|