one 2.0.0-beta.103.1 → 2.0.0-beta.105.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/build.gradle +1 -1
- package/android/src/main/AndroidManifest.xml +7 -0
- package/android/src/main/java/com/margelo/nitro/one/HybridOneAppleAuth.kt +19 -0
- package/android/src/main/java/com/margelo/nitro/one/HybridOneBrowser.kt +156 -20
- package/android/src/main/java/com/margelo/nitro/one/HybridOneSpeech.kt +270 -0
- package/android/src/main/java/com/margelo/nitro/one/OneNativeError.kt +6 -3
- package/dist/cjs/one.cjs +2 -0
- package/dist/cjs/one.native.cjs +2 -0
- package/dist/cjs/one.native.js +2 -0
- package/dist/cjs/one.native.js.map +1 -1
- package/dist/cjs/platform/Tabs.native.cjs +1 -0
- package/dist/cjs/platform/Tabs.native.js +1 -0
- package/dist/cjs/platform/Tabs.native.js.map +1 -1
- package/dist/cjs/platform/auth/index.cjs +29 -0
- package/dist/cjs/platform/auth/index.native.cjs +73 -0
- package/dist/cjs/platform/auth/index.native.js +75 -0
- package/dist/cjs/platform/auth/index.native.js.map +1 -0
- package/dist/cjs/platform/auth/types.cjs +16 -0
- package/dist/cjs/platform/auth/types.native.cjs +18 -0
- package/dist/cjs/platform/auth/types.native.js +20 -0
- package/dist/cjs/platform/auth/types.native.js.map +1 -0
- package/dist/cjs/platform/browser/index.cjs +9 -1
- package/dist/cjs/platform/browser/index.native.cjs +15 -18
- package/dist/cjs/platform/browser/index.native.js +15 -18
- package/dist/cjs/platform/browser/index.native.js.map +1 -1
- package/dist/cjs/platform/browser/validate.cjs +9 -0
- package/dist/cjs/platform/browser/validate.native.cjs +9 -0
- package/dist/cjs/platform/browser/validate.native.js +9 -0
- package/dist/cjs/platform/browser/validate.native.js.map +1 -1
- package/dist/cjs/platform/extras.cjs +4 -0
- package/dist/cjs/platform/extras.native.cjs +4 -0
- package/dist/cjs/platform/extras.native.js +4 -0
- package/dist/cjs/platform/extras.native.js.map +1 -1
- package/dist/cjs/platform/generated/Controls.native.cjs +6 -3
- package/dist/cjs/platform/generated/Controls.native.js +6 -3
- package/dist/cjs/platform/generated/Controls.native.js.map +1 -1
- package/dist/cjs/platform/nativeError.cjs +4 -5
- package/dist/cjs/platform/nativeError.native.cjs +4 -5
- package/dist/cjs/platform/nativeError.native.js +4 -5
- package/dist/cjs/platform/nativeError.native.js.map +1 -1
- package/dist/cjs/platform/specs/OneAppleAuth.nitro.cjs +16 -0
- package/dist/cjs/platform/specs/OneAppleAuth.nitro.native.cjs +18 -0
- package/dist/cjs/platform/specs/OneAppleAuth.nitro.native.js +20 -0
- package/dist/cjs/platform/specs/OneAppleAuth.nitro.native.js.map +1 -0
- package/dist/cjs/platform/specs/OneNativeImageNativeComponent.cjs +1 -0
- package/dist/cjs/platform/specs/OneNativeImageNativeComponent.native.cjs +1 -0
- package/dist/cjs/platform/specs/OneNativeImageNativeComponent.native.js +1 -0
- package/dist/cjs/platform/specs/OneNativeImageNativeComponent.native.js.map +2 -2
- package/dist/cjs/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.cjs +1 -0
- package/dist/cjs/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.native.cjs +1 -0
- package/dist/cjs/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.native.js +1 -0
- package/dist/cjs/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.native.js.map +2 -2
- package/dist/cjs/platform/specs/OneSpeech.nitro.cjs +16 -0
- package/dist/cjs/platform/specs/OneSpeech.nitro.native.cjs +18 -0
- package/dist/cjs/platform/specs/OneSpeech.nitro.native.js +20 -0
- package/dist/cjs/platform/specs/OneSpeech.nitro.native.js.map +1 -0
- package/dist/cjs/platform/speech/index.cjs +36 -0
- package/dist/cjs/platform/speech/index.native.cjs +60 -0
- package/dist/cjs/platform/speech/index.native.js +62 -0
- package/dist/cjs/platform/speech/index.native.js.map +1 -0
- package/dist/cjs/platform/speech/types.cjs +16 -0
- package/dist/cjs/platform/speech/types.native.cjs +18 -0
- package/dist/cjs/platform/speech/types.native.js +20 -0
- package/dist/cjs/platform/speech/types.native.js.map +1 -0
- package/dist/cjs/safe-area-context/SafeAreaContext.cjs +15 -1
- package/dist/cjs/safe-area-context/SafeAreaContext.native.cjs +15 -1
- package/dist/cjs/safe-area-context/SafeAreaContext.native.js +15 -1
- package/dist/cjs/safe-area-context/SafeAreaContext.native.js.map +1 -1
- package/dist/cjs/safe-area-context/tamaguiSafeArea.cjs +24 -0
- package/dist/cjs/safe-area-context/tamaguiSafeArea.native.cjs +50 -0
- package/dist/cjs/safe-area-context/tamaguiSafeArea.native.js +52 -0
- package/dist/cjs/safe-area-context/tamaguiSafeArea.native.js.map +1 -0
- package/dist/cjs/utils/absorbedPackages.cjs +12 -3
- package/dist/cjs/utils/absorbedPackages.native.cjs +15 -3
- package/dist/cjs/utils/absorbedPackages.native.js +15 -3
- package/dist/cjs/utils/absorbedPackages.native.js.map +1 -1
- package/dist/esm/one.mjs +3 -1
- package/dist/esm/one.mjs.map +1 -1
- package/dist/esm/one.native.js +3 -1
- package/dist/esm/one.native.js.map +1 -1
- package/dist/esm/platform/Tabs.native.js +1 -0
- package/dist/esm/platform/Tabs.native.js.map +1 -1
- package/dist/esm/platform/auth/index.mjs +9 -0
- package/dist/esm/platform/auth/index.mjs.map +1 -0
- package/dist/esm/platform/auth/index.native.js +52 -0
- package/dist/esm/platform/auth/index.native.js.map +1 -0
- package/dist/esm/platform/auth/types.mjs +0 -0
- package/dist/esm/platform/auth/types.native.js +0 -0
- package/dist/esm/platform/browser/index.mjs +9 -1
- package/dist/esm/platform/browser/index.mjs.map +1 -1
- package/dist/esm/platform/browser/index.native.js +15 -18
- package/dist/esm/platform/browser/index.native.js.map +1 -1
- package/dist/esm/platform/browser/validate.mjs +9 -0
- package/dist/esm/platform/browser/validate.mjs.map +1 -1
- package/dist/esm/platform/browser/validate.native.js +9 -0
- package/dist/esm/platform/browser/validate.native.js.map +1 -1
- package/dist/esm/platform/extras.mjs +3 -1
- package/dist/esm/platform/extras.native.js +3 -1
- package/dist/esm/platform/generated/Controls.native.js +6 -3
- package/dist/esm/platform/generated/Controls.native.js.map +1 -1
- package/dist/esm/platform/nativeError.mjs +4 -5
- package/dist/esm/platform/nativeError.mjs.map +1 -1
- package/dist/esm/platform/nativeError.native.js +4 -5
- package/dist/esm/platform/nativeError.native.js.map +1 -1
- package/dist/esm/platform/specs/OneAppleAuth.nitro.mjs +0 -0
- package/dist/esm/platform/specs/OneAppleAuth.nitro.native.js +0 -0
- package/dist/esm/platform/specs/OneNativeImageNativeComponent.mjs +1 -0
- package/dist/esm/platform/specs/OneNativeImageNativeComponent.mjs.map +2 -2
- package/dist/esm/platform/specs/OneNativeImageNativeComponent.native.js +1 -0
- package/dist/esm/platform/specs/OneNativeImageNativeComponent.native.js.map +2 -2
- package/dist/esm/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.mjs +1 -0
- package/dist/esm/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.mjs.map +2 -2
- package/dist/esm/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.native.js +1 -0
- package/dist/esm/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.native.js.map +2 -2
- package/dist/esm/platform/specs/OneSpeech.nitro.mjs +0 -0
- package/dist/esm/platform/specs/OneSpeech.nitro.native.js +0 -0
- package/dist/esm/platform/speech/index.mjs +16 -0
- package/dist/esm/platform/speech/index.mjs.map +1 -0
- package/dist/esm/platform/speech/index.native.js +39 -0
- package/dist/esm/platform/speech/index.native.js.map +1 -0
- package/dist/esm/platform/speech/types.mjs +0 -0
- package/dist/esm/platform/speech/types.native.js +0 -0
- package/dist/esm/safe-area-context/SafeAreaContext.mjs +15 -1
- package/dist/esm/safe-area-context/SafeAreaContext.mjs.map +1 -1
- package/dist/esm/safe-area-context/SafeAreaContext.native.js +15 -1
- package/dist/esm/safe-area-context/SafeAreaContext.native.js.map +1 -1
- package/dist/esm/safe-area-context/tamaguiSafeArea.mjs +4 -0
- package/dist/esm/safe-area-context/tamaguiSafeArea.mjs.map +1 -0
- package/dist/esm/safe-area-context/tamaguiSafeArea.native.js +28 -0
- package/dist/esm/safe-area-context/tamaguiSafeArea.native.js.map +1 -0
- package/dist/esm/utils/absorbedPackages.mjs +9 -3
- package/dist/esm/utils/absorbedPackages.mjs.map +1 -1
- package/dist/esm/utils/absorbedPackages.native.js +12 -3
- package/dist/esm/utils/absorbedPackages.native.js.map +1 -1
- package/ios/Generated/OneNativeImageComponentView.mm +1 -1
- package/ios/Generated/OneNativeImageView.swift +6 -2
- package/ios/Generated/OneNativeSignInWithAppleButtonComponentView.mm +1 -1
- package/ios/Generated/OneNativeSignInWithAppleButtonView.swift +13 -2
- package/ios/Nitro/HybridOneAppleAuth.swift +159 -0
- package/ios/Nitro/HybridOneBrowser.swift +41 -3
- package/ios/Nitro/HybridOneSpeech.swift +275 -0
- package/ios/OneNativeRemoteImage.swift +51 -0
- package/ios/OneNativeTabsView.swift +23 -4
- package/nitrogen/generated/android/One+autolinking.cmake +4 -0
- package/nitrogen/generated/android/OneOnLoad.cpp +34 -0
- package/nitrogen/generated/android/c++/JAppleAuthCredential.hpp +86 -0
- package/nitrogen/generated/android/c++/JAppleAuthFullName.hpp +78 -0
- package/nitrogen/generated/android/c++/JAppleAuthResult.hpp +70 -0
- package/nitrogen/generated/android/c++/JAppleAuthResultType.hpp +58 -0
- package/nitrogen/generated/android/c++/JAppleAuthScope.hpp +58 -0
- package/nitrogen/generated/android/c++/JAppleAuthSignInOptions.hpp +87 -0
- package/nitrogen/generated/android/c++/JAppleCredentialState.hpp +64 -0
- package/nitrogen/generated/android/c++/JAppleRealUserStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JBrowserAuthResultType.hpp +3 -3
- package/nitrogen/generated/android/c++/JBrowserColorScheme.hpp +61 -0
- package/nitrogen/generated/android/c++/JBrowserNativeOptions.hpp +13 -3
- package/nitrogen/generated/android/c++/JFunc_void_SpeechEvent.hpp +83 -0
- package/nitrogen/generated/android/c++/JHybridOneAppleAuthSpec.cpp +120 -0
- package/nitrogen/generated/android/c++/JHybridOneAppleAuthSpec.hpp +65 -0
- package/nitrogen/generated/android/c++/JHybridOneBrowserSpec.cpp +36 -0
- package/nitrogen/generated/android/c++/JHybridOneBrowserSpec.hpp +2 -0
- package/nitrogen/generated/android/c++/JHybridOneSpeechSpec.cpp +126 -0
- package/nitrogen/generated/android/c++/JHybridOneSpeechSpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JSpeechErrorCode.hpp +76 -0
- package/nitrogen/generated/android/c++/JSpeechEvent.hpp +74 -0
- package/nitrogen/generated/android/c++/JSpeechEventType.hpp +64 -0
- package/nitrogen/generated/android/c++/JSpeechPermissionResponse.hpp +71 -0
- package/nitrogen/generated/android/c++/JSpeechPermissionStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JSpeechStartOptions.hpp +58 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleAuthCredential.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleAuthFullName.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleAuthResult.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleAuthResultType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleAuthScope.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleAuthSignInOptions.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleCredentialState.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AppleRealUserStatus.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/BrowserAuthResultType.kt +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/BrowserColorScheme.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/BrowserNativeOptions.kt +14 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/Func_void_SpeechEvent.kt +78 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneAppleAuthSpec.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneBrowserSpec.kt +8 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneSpeechSpec.kt +82 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SpeechErrorCode.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SpeechEvent.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SpeechEventType.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SpeechPermissionResponse.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SpeechPermissionStatus.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SpeechStartOptions.kt +51 -0
- package/nitrogen/generated/ios/One-Swift-Cxx-Bridge.cpp +74 -8
- package/nitrogen/generated/ios/One-Swift-Cxx-Bridge.hpp +362 -52
- package/nitrogen/generated/ios/One-Swift-Cxx-Umbrella.hpp +55 -0
- package/nitrogen/generated/ios/OneAutolinking.mm +16 -0
- package/nitrogen/generated/ios/OneAutolinking.swift +24 -0
- package/nitrogen/generated/ios/c++/HybridOneAppleAuthSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridOneAppleAuthSpecSwift.hpp +124 -0
- package/nitrogen/generated/ios/c++/HybridOneBrowserSpecSwift.hpp +19 -0
- package/nitrogen/generated/ios/c++/HybridOneSpeechSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridOneSpeechSpecSwift.hpp +136 -0
- package/nitrogen/generated/ios/swift/AppleAuthCredential.swift +117 -0
- package/nitrogen/generated/ios/swift/AppleAuthFullName.swift +132 -0
- package/nitrogen/generated/ios/swift/AppleAuthResult.swift +40 -0
- package/nitrogen/generated/ios/swift/AppleAuthResultType.swift +40 -0
- package/nitrogen/generated/ios/swift/AppleAuthScope.swift +40 -0
- package/nitrogen/generated/ios/swift/AppleAuthSignInOptions.swift +84 -0
- package/nitrogen/generated/ios/swift/AppleCredentialState.swift +48 -0
- package/nitrogen/generated/ios/swift/AppleRealUserStatus.swift +44 -0
- package/nitrogen/generated/ios/swift/BrowserAuthResultType.swift +4 -4
- package/nitrogen/generated/ios/swift/BrowserColorScheme.swift +44 -0
- package/nitrogen/generated/ios/swift/BrowserNativeOptions.swift +30 -1
- package/nitrogen/generated/ios/swift/Func_void_AppleAuthResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_AppleCredentialState.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_SpeechEvent.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_SpeechPermissionResponse.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridOneAppleAuthSpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridOneAppleAuthSpec_cxx.swift +176 -0
- package/nitrogen/generated/ios/swift/HybridOneBrowserSpec.swift +2 -0
- package/nitrogen/generated/ios/swift/HybridOneBrowserSpec_cxx.swift +52 -0
- package/nitrogen/generated/ios/swift/HybridOneSpeechSpec.swift +60 -0
- package/nitrogen/generated/ios/swift/HybridOneSpeechSpec_cxx.swift +214 -0
- package/nitrogen/generated/ios/swift/SpeechErrorCode.swift +64 -0
- package/nitrogen/generated/ios/swift/SpeechEvent.swift +63 -0
- package/nitrogen/generated/ios/swift/SpeechEventType.swift +48 -0
- package/nitrogen/generated/ios/swift/SpeechPermissionResponse.swift +57 -0
- package/nitrogen/generated/ios/swift/SpeechPermissionStatus.swift +44 -0
- package/nitrogen/generated/ios/swift/SpeechStartOptions.swift +42 -0
- package/nitrogen/generated/shared/c++/AppleAuthCredential.hpp +113 -0
- package/nitrogen/generated/shared/c++/AppleAuthFullName.hpp +104 -0
- package/nitrogen/generated/shared/c++/AppleAuthResult.hpp +92 -0
- package/nitrogen/generated/shared/c++/AppleAuthResultType.hpp +76 -0
- package/nitrogen/generated/shared/c++/AppleAuthScope.hpp +76 -0
- package/nitrogen/generated/shared/c++/AppleAuthSignInOptions.hpp +95 -0
- package/nitrogen/generated/shared/c++/AppleCredentialState.hpp +84 -0
- package/nitrogen/generated/shared/c++/AppleRealUserStatus.hpp +80 -0
- package/nitrogen/generated/shared/c++/BrowserAuthResultType.hpp +8 -8
- package/nitrogen/generated/shared/c++/BrowserColorScheme.hpp +80 -0
- package/nitrogen/generated/shared/c++/BrowserNativeOptions.hpp +13 -2
- package/nitrogen/generated/shared/c++/HybridOneAppleAuthSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridOneAppleAuthSpec.hpp +73 -0
- package/nitrogen/generated/shared/c++/HybridOneBrowserSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridOneBrowserSpec.hpp +2 -0
- package/nitrogen/generated/shared/c++/HybridOneSpeechSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridOneSpeechSpec.hpp +76 -0
- package/nitrogen/generated/shared/c++/SpeechErrorCode.hpp +100 -0
- package/nitrogen/generated/shared/c++/SpeechEvent.hpp +101 -0
- package/nitrogen/generated/shared/c++/SpeechEventType.hpp +84 -0
- package/nitrogen/generated/shared/c++/SpeechPermissionResponse.hpp +97 -0
- package/nitrogen/generated/shared/c++/SpeechPermissionStatus.hpp +80 -0
- package/nitrogen/generated/shared/c++/SpeechStartOptions.hpp +84 -0
- package/package.json +10 -10
- package/react-native-config.cjs +24 -4
- package/schema.json +6 -0
- package/src/native/packedClosure.test.ts +7 -0
- package/src/nativeCoverage.test.ts +193 -0
- package/src/one.ts +6 -0
- package/src/platform/README.md +79 -2
- package/src/platform/Tabs.native.tsx +2 -0
- package/src/platform/auth/index.native.ts +61 -0
- package/src/platform/auth/index.ts +16 -0
- package/src/platform/auth/types.ts +49 -0
- package/src/platform/browser/index.native.ts +26 -26
- package/src/platform/browser/index.ts +16 -1
- package/src/platform/browser/types.ts +5 -0
- package/src/platform/browser/validate.ts +12 -0
- package/src/platform/extras.ts +21 -0
- package/src/platform/generated/Controls.native.tsx +12 -2
- package/src/platform/generated/controlTypes.ts +2 -0
- package/src/platform/nativeError.ts +7 -7
- package/src/platform/specs/OneAppleAuth.nitro.ts +49 -0
- package/src/platform/specs/OneBrowser.nitro.ts +6 -1
- package/src/platform/specs/OneNativeImageNativeComponent.ts +1 -0
- package/src/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.ts +1 -0
- package/src/platform/specs/OneSpeech.nitro.ts +14 -0
- package/src/platform/speech/index.native.ts +50 -0
- package/src/platform/speech/index.ts +25 -0
- package/src/platform/speech/types.ts +46 -0
- package/src/platform/types.ts +4 -1
- package/src/safe-area-context/SafeAreaContext.tsx +12 -1
- package/src/safe-area-context/tamaguiSafeArea.native.ts +56 -0
- package/src/safe-area-context/tamaguiSafeArea.ts +8 -0
- package/src/utils/absorbedPackages.ts +16 -5
- package/types/one.d.ts +3 -1
- package/types/one.d.ts.map +1 -1
- package/types/platform/Tabs.native.d.ts.map +1 -1
- package/types/platform/auth/index.d.ts +6 -0
- package/types/platform/auth/index.d.ts.map +1 -0
- package/types/platform/auth/index.native.d.ts +6 -0
- package/types/platform/auth/index.native.d.ts.map +1 -0
- package/types/platform/auth/types.d.ts +37 -0
- package/types/platform/auth/types.d.ts.map +1 -0
- package/types/platform/browser/index.d.ts +4 -0
- package/types/platform/browser/index.d.ts.map +1 -1
- package/types/platform/browser/index.native.d.ts +4 -0
- package/types/platform/browser/index.native.d.ts.map +1 -1
- package/types/platform/browser/types.d.ts +3 -0
- package/types/platform/browser/types.d.ts.map +1 -1
- package/types/platform/browser/validate.d.ts.map +1 -1
- package/types/platform/extras.d.ts +4 -0
- package/types/platform/extras.d.ts.map +1 -1
- package/types/platform/generated/Controls.native.d.ts +2 -2
- package/types/platform/generated/Controls.native.d.ts.map +1 -1
- package/types/platform/generated/controlTypes.d.ts +2 -0
- package/types/platform/generated/controlTypes.d.ts.map +1 -1
- package/types/platform/index.native.d.ts +2 -2
- package/types/platform/nativeError.d.ts.map +1 -1
- package/types/platform/specs/OneAppleAuth.nitro.d.ts +40 -0
- package/types/platform/specs/OneAppleAuth.nitro.d.ts.map +1 -0
- package/types/platform/specs/OneBrowser.nitro.d.ts +5 -1
- package/types/platform/specs/OneBrowser.nitro.d.ts.map +1 -1
- package/types/platform/specs/OneNativeImageNativeComponent.d.ts +1 -0
- package/types/platform/specs/OneNativeImageNativeComponent.d.ts.map +1 -1
- package/types/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.d.ts +1 -0
- package/types/platform/specs/OneNativeSignInWithAppleButtonNativeComponent.d.ts.map +1 -1
- package/types/platform/specs/OneSpeech.nitro.d.ts +14 -0
- package/types/platform/specs/OneSpeech.nitro.d.ts.map +1 -0
- package/types/platform/speech/index.d.ts +9 -0
- package/types/platform/speech/index.d.ts.map +1 -0
- package/types/platform/speech/index.native.d.ts +10 -0
- package/types/platform/speech/index.native.d.ts.map +1 -0
- package/types/platform/speech/types.d.ts +23 -0
- package/types/platform/speech/types.d.ts.map +1 -0
- package/types/platform/types.d.ts +2 -1
- package/types/platform/types.d.ts.map +1 -1
- package/types/safe-area-context/SafeAreaContext.d.ts.map +1 -1
- package/types/safe-area-context/tamaguiSafeArea.d.ts +6 -0
- package/types/safe-area-context/tamaguiSafeArea.d.ts.map +1 -0
- package/types/safe-area-context/tamaguiSafeArea.native.d.ts +6 -0
- package/types/safe-area-context/tamaguiSafeArea.native.d.ts.map +1 -0
- package/types/utils/absorbedPackages.d.ts +1 -0
- package/types/utils/absorbedPackages.d.ts.map +1 -1
package/android/build.gradle
CHANGED
|
@@ -129,7 +129,7 @@ def kotlinVersion = safeExtGet("kotlinVersion", "2.1.20")
|
|
|
129
129
|
|
|
130
130
|
dependencies {
|
|
131
131
|
implementation "com.facebook.react:react-android"
|
|
132
|
-
implementation "androidx.browser:browser:1.
|
|
132
|
+
implementation "androidx.browser:browser:1.9.0"
|
|
133
133
|
implementation "com.google.android.material:material:1.13.0"
|
|
134
134
|
implementation "androidx.activity:activity:1.9.3"
|
|
135
135
|
implementation "androidx.core:core:1.13.1"
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
<!-- normal install-time permission, merged into the app manifest;
|
|
3
3
|
the api-conventions section 6 exception for install-time permissions -->
|
|
4
4
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
5
|
+
<!-- android 11 package visibility: Browser finds the Custom Tabs browser
|
|
6
|
+
through this service action -->
|
|
7
|
+
<queries>
|
|
8
|
+
<intent>
|
|
9
|
+
<action android:name="android.support.customtabs.action.CustomTabsService" />
|
|
10
|
+
</intent>
|
|
11
|
+
</queries>
|
|
5
12
|
<!-- camera captures write into the app cache through this provider; the
|
|
6
13
|
manifest merger carries it into the app, with the app's own id. -->
|
|
7
14
|
<application>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.margelo.nitro.one
|
|
2
|
+
|
|
3
|
+
import com.margelo.nitro.core.Promise
|
|
4
|
+
|
|
5
|
+
// android has no native sign in with apple, so it answers the way the web entry
|
|
6
|
+
// does: unavailable, and every request rejects without a code.
|
|
7
|
+
class HybridOneAppleAuth : HybridOneAppleAuthSpec() {
|
|
8
|
+
override fun isAvailable(): Boolean {
|
|
9
|
+
return false
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
override fun signIn(options: AppleAuthSignInOptions): Promise<AppleAuthResult> {
|
|
13
|
+
return Promise.rejected(OneNativeError("Auth.Apple.signIn needs an iOS build"))
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
override fun getCredentialState(user: String): Promise<AppleCredentialState> {
|
|
17
|
+
return Promise.rejected(OneNativeError("Auth.Apple.getCredentialState needs an iOS build"))
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,30 +1,45 @@
|
|
|
1
1
|
package com.margelo.nitro.one
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
|
+
import android.content.ComponentName
|
|
5
|
+
import android.content.Context
|
|
4
6
|
import android.content.Intent
|
|
5
7
|
import android.graphics.Color
|
|
6
8
|
import android.net.Uri
|
|
9
|
+
import androidx.browser.auth.AuthTabColorSchemeParams
|
|
10
|
+
import androidx.browser.auth.AuthTabIntent
|
|
7
11
|
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
|
12
|
+
import androidx.browser.customtabs.CustomTabsClient
|
|
8
13
|
import androidx.browser.customtabs.CustomTabsIntent
|
|
14
|
+
import androidx.browser.customtabs.CustomTabsServiceConnection
|
|
15
|
+
import androidx.browser.customtabs.CustomTabsSession
|
|
9
16
|
import com.facebook.react.bridge.ActivityEventListener
|
|
10
17
|
import com.facebook.react.bridge.LifecycleEventListener
|
|
11
18
|
import com.margelo.nitro.NitroModules
|
|
12
19
|
import com.margelo.nitro.core.Promise
|
|
13
20
|
|
|
14
|
-
// in-app browser matching expo-web-browser's result shapes:
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
21
|
+
// in-app browser matching expo-web-browser's result shapes:
|
|
22
|
+
// plain pages in Custom Tabs, auth in modern androidx.browser AuthTabIntent
|
|
23
|
+
// (with graceful fallback to Custom Tabs on older browsers).
|
|
24
|
+
// supports warmup, mayLaunchUrl, and dark appearance color scheme params.
|
|
18
25
|
class HybridOneBrowser : HybridOneBrowserSpec(), ActivityEventListener, LifecycleEventListener {
|
|
19
26
|
private val lock = Any()
|
|
20
27
|
private var authPromise: Promise<BrowserAuthResult>? = null
|
|
21
28
|
private var authScheme: String? = null
|
|
22
29
|
|
|
30
|
+
private var customTabsClient: CustomTabsClient? = null
|
|
31
|
+
private var customTabsSession: CustomTabsSession? = null
|
|
32
|
+
|
|
33
|
+
companion object {
|
|
34
|
+
private const val AUTH_TAB_REQUEST_CODE = 4281
|
|
35
|
+
}
|
|
36
|
+
|
|
23
37
|
init {
|
|
24
38
|
NitroModules.applicationContext?.let {
|
|
25
39
|
it.addActivityEventListener(this)
|
|
26
40
|
it.addLifecycleEventListener(this)
|
|
27
41
|
}
|
|
42
|
+
ensureClient(null)
|
|
28
43
|
}
|
|
29
44
|
|
|
30
45
|
override fun dispose() {
|
|
@@ -79,10 +94,12 @@ class HybridOneBrowser : HybridOneBrowserSpec(), ActivityEventListener, Lifecycl
|
|
|
79
94
|
try {
|
|
80
95
|
authScheme = redirectUrl?.let { Uri.parse(it)?.scheme }
|
|
81
96
|
authPromise = promise
|
|
82
|
-
|
|
83
|
-
// the promise settles on
|
|
84
|
-
//
|
|
85
|
-
//
|
|
97
|
+
launchAuthTab(activity, url, redirectUrl, options)
|
|
98
|
+
// the promise settles on:
|
|
99
|
+
// 1. onActivityResult when AuthTab completes with direct result
|
|
100
|
+
// 2. onNewIntent when fallback CustomTab redirects back
|
|
101
|
+
// 3. onHostResume when user closes tab without redirect
|
|
102
|
+
// 4. dismissAuthSession
|
|
86
103
|
} catch (e: Exception) {
|
|
87
104
|
authPromise = null
|
|
88
105
|
authScheme = null
|
|
@@ -93,11 +110,25 @@ class HybridOneBrowser : HybridOneBrowserSpec(), ActivityEventListener, Lifecycl
|
|
|
93
110
|
}
|
|
94
111
|
|
|
95
112
|
override fun dismissAuthSession() {
|
|
96
|
-
// the tab itself stays open, like dismiss; the pending session
|
|
97
|
-
// settles as dismiss on both platforms.
|
|
98
113
|
takeAuth()?.resolve(result(BrowserAuthResultType.DISMISS))
|
|
99
114
|
}
|
|
100
115
|
|
|
116
|
+
override fun warmup(browserPackage: String?): Promise<Boolean> {
|
|
117
|
+
val promise = Promise<Boolean>()
|
|
118
|
+
ensureClient(browserPackage) { client -> promise.resolve(client?.warmup(0L) ?: false) }
|
|
119
|
+
return promise
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
override fun mayLaunchUrl(url: String, browserPackage: String?): Promise<Boolean> {
|
|
123
|
+
val promise = Promise<Boolean>()
|
|
124
|
+
ensureClient(browserPackage) { client ->
|
|
125
|
+
val session = customTabsSession ?: client?.newSession(null)
|
|
126
|
+
customTabsSession = session
|
|
127
|
+
promise.resolve(session?.mayLaunchUrl(Uri.parse(url), null, null) ?: false)
|
|
128
|
+
}
|
|
129
|
+
return promise
|
|
130
|
+
}
|
|
131
|
+
|
|
101
132
|
override fun onNewIntent(intent: Intent) {
|
|
102
133
|
val data = intent.data ?: return
|
|
103
134
|
val pending = synchronized(lock) {
|
|
@@ -117,11 +148,29 @@ class HybridOneBrowser : HybridOneBrowserSpec(), ActivityEventListener, Lifecycl
|
|
|
117
148
|
resultCode: Int,
|
|
118
149
|
data: Intent?
|
|
119
150
|
) {
|
|
151
|
+
if (requestCode == AUTH_TAB_REQUEST_CODE) {
|
|
152
|
+
val pending = synchronized(lock) {
|
|
153
|
+
val p = authPromise ?: return
|
|
154
|
+
authPromise = null
|
|
155
|
+
authScheme = null
|
|
156
|
+
p
|
|
157
|
+
}
|
|
158
|
+
if (resultCode == Activity.RESULT_OK) {
|
|
159
|
+
val resultUri = data?.data?.toString()
|
|
160
|
+
if (resultUri != null) {
|
|
161
|
+
pending.resolve(result(BrowserAuthResultType.SUCCESS, resultUri))
|
|
162
|
+
} else {
|
|
163
|
+
pending.resolve(result(BrowserAuthResultType.CANCEL))
|
|
164
|
+
}
|
|
165
|
+
} else {
|
|
166
|
+
pending.resolve(result(BrowserAuthResultType.CANCEL))
|
|
167
|
+
}
|
|
168
|
+
}
|
|
120
169
|
}
|
|
121
170
|
|
|
122
171
|
override fun onHostResume() {
|
|
123
|
-
// onNewIntent
|
|
124
|
-
// promise here means the user closed the tab without redirecting.
|
|
172
|
+
// onActivityResult and onNewIntent run before onHostResume,
|
|
173
|
+
// so a pending promise here means the user closed the tab without redirecting.
|
|
125
174
|
takeAuth()?.resolve(result(BrowserAuthResultType.CANCEL))
|
|
126
175
|
}
|
|
127
176
|
|
|
@@ -139,23 +188,110 @@ class HybridOneBrowser : HybridOneBrowserSpec(), ActivityEventListener, Lifecycl
|
|
|
139
188
|
pending
|
|
140
189
|
}
|
|
141
190
|
|
|
191
|
+
// calls onReady exactly once: with the bound client, or with null when no
|
|
192
|
+
// installed browser offers the Custom Tabs service or binding it fails
|
|
193
|
+
private fun ensureClient(browserPackage: String?, onReady: (CustomTabsClient?) -> Unit = {}) {
|
|
194
|
+
customTabsClient?.let { return onReady(it) }
|
|
195
|
+
val context = NitroModules.applicationContext ?: return onReady(null)
|
|
196
|
+
val targetPackage = browserPackage ?: CustomTabsClient.getPackageName(context, null)
|
|
197
|
+
?: return onReady(null)
|
|
198
|
+
val connection = object : CustomTabsServiceConnection() {
|
|
199
|
+
override fun onCustomTabsServiceConnected(name: ComponentName, connectedClient: CustomTabsClient) {
|
|
200
|
+
customTabsClient = connectedClient
|
|
201
|
+
customTabsSession = connectedClient.newSession(null)
|
|
202
|
+
onReady(connectedClient)
|
|
203
|
+
}
|
|
204
|
+
override fun onServiceDisconnected(name: ComponentName) {
|
|
205
|
+
customTabsClient = null
|
|
206
|
+
customTabsSession = null
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (!CustomTabsClient.bindCustomTabsService(context, targetPackage, connection)) onReady(null)
|
|
210
|
+
}
|
|
211
|
+
|
|
142
212
|
private fun launchCustomTab(activity: Activity, url: String, options: BrowserNativeOptions) {
|
|
143
|
-
val
|
|
213
|
+
val session = customTabsSession
|
|
214
|
+
val builder = if (session != null) CustomTabsIntent.Builder(session) else CustomTabsIntent.Builder()
|
|
144
215
|
if (options.showTitle == true) {
|
|
145
216
|
builder.setShowTitle(true)
|
|
146
217
|
}
|
|
147
|
-
options
|
|
148
|
-
colorForHex(raw)?.let { toolbar ->
|
|
149
|
-
builder.setDefaultColorSchemeParams(
|
|
150
|
-
CustomTabColorSchemeParams.Builder().setToolbarColor(toolbar).build()
|
|
151
|
-
)
|
|
152
|
-
}
|
|
153
|
-
}
|
|
218
|
+
applyColorScheme(builder, options)
|
|
154
219
|
val customTabs = builder.build()
|
|
155
220
|
options.browserPackage?.let { customTabs.intent.setPackage(it) }
|
|
156
221
|
customTabs.launchUrl(activity, Uri.parse(url))
|
|
157
222
|
}
|
|
158
223
|
|
|
224
|
+
private fun launchAuthTab(
|
|
225
|
+
activity: Activity,
|
|
226
|
+
url: String,
|
|
227
|
+
redirectUrl: String?,
|
|
228
|
+
options: BrowserNativeOptions
|
|
229
|
+
) {
|
|
230
|
+
val authBuilder = AuthTabIntent.Builder()
|
|
231
|
+
if (options.preferEphemeralSession == true) {
|
|
232
|
+
authBuilder.setEphemeralBrowsingEnabled(true)
|
|
233
|
+
}
|
|
234
|
+
when (options.colorScheme) {
|
|
235
|
+
BrowserColorScheme.DARK -> authBuilder.setColorScheme(CustomTabsIntent.COLOR_SCHEME_DARK)
|
|
236
|
+
BrowserColorScheme.LIGHT -> authBuilder.setColorScheme(CustomTabsIntent.COLOR_SCHEME_LIGHT)
|
|
237
|
+
BrowserColorScheme.SYSTEM, null -> authBuilder.setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM)
|
|
238
|
+
}
|
|
239
|
+
val defaultParams = AuthTabColorSchemeParams.Builder()
|
|
240
|
+
options.toolbarColor?.let { raw ->
|
|
241
|
+
colorForHex(raw)?.let { defaultParams.setToolbarColor(it) }
|
|
242
|
+
}
|
|
243
|
+
authBuilder.setDefaultColorSchemeParams(defaultParams.build())
|
|
244
|
+
|
|
245
|
+
val authTabIntent = authBuilder.build()
|
|
246
|
+
val intent = authTabIntent.intent
|
|
247
|
+
intent.data = Uri.parse(url)
|
|
248
|
+
options.browserPackage?.let { intent.setPackage(it) }
|
|
249
|
+
|
|
250
|
+
if (redirectUrl != null) {
|
|
251
|
+
val redirectUri = Uri.parse(redirectUrl)
|
|
252
|
+
val scheme = redirectUri.scheme?.lowercase()
|
|
253
|
+
if (scheme == "https" || scheme == "http") {
|
|
254
|
+
val host = redirectUri.host
|
|
255
|
+
val path = redirectUri.path ?: "/"
|
|
256
|
+
if (host != null) {
|
|
257
|
+
intent.putExtra(AuthTabIntent.EXTRA_HTTPS_REDIRECT_HOST, host)
|
|
258
|
+
intent.putExtra(AuthTabIntent.EXTRA_HTTPS_REDIRECT_PATH, path)
|
|
259
|
+
}
|
|
260
|
+
} else if (scheme != null && scheme.isNotEmpty()) {
|
|
261
|
+
intent.putExtra(AuthTabIntent.EXTRA_REDIRECT_SCHEME, scheme)
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
activity.startActivityForResult(intent, AUTH_TAB_REQUEST_CODE)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
private fun applyColorScheme(builder: CustomTabsIntent.Builder, options: BrowserNativeOptions) {
|
|
269
|
+
when (options.colorScheme) {
|
|
270
|
+
BrowserColorScheme.DARK -> builder.setColorScheme(CustomTabsIntent.COLOR_SCHEME_DARK)
|
|
271
|
+
BrowserColorScheme.LIGHT -> builder.setColorScheme(CustomTabsIntent.COLOR_SCHEME_LIGHT)
|
|
272
|
+
BrowserColorScheme.SYSTEM, null -> builder.setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM)
|
|
273
|
+
}
|
|
274
|
+
val defaultParams = CustomTabColorSchemeParams.Builder()
|
|
275
|
+
options.toolbarColor?.let { raw ->
|
|
276
|
+
colorForHex(raw)?.let { defaultParams.setToolbarColor(it) }
|
|
277
|
+
}
|
|
278
|
+
options.secondaryToolbarColor?.let { raw ->
|
|
279
|
+
colorForHex(raw)?.let { defaultParams.setSecondaryToolbarColor(it) }
|
|
280
|
+
}
|
|
281
|
+
builder.setDefaultColorSchemeParams(defaultParams.build())
|
|
282
|
+
|
|
283
|
+
if (options.colorScheme == BrowserColorScheme.DARK || options.colorScheme == BrowserColorScheme.SYSTEM) {
|
|
284
|
+
val darkParams = CustomTabColorSchemeParams.Builder()
|
|
285
|
+
options.toolbarColor?.let { raw ->
|
|
286
|
+
colorForHex(raw)?.let { darkParams.setToolbarColor(it) }
|
|
287
|
+
}
|
|
288
|
+
options.secondaryToolbarColor?.let { raw ->
|
|
289
|
+
colorForHex(raw)?.let { darkParams.setSecondaryToolbarColor(it) }
|
|
290
|
+
}
|
|
291
|
+
builder.setColorSchemeParams(CustomTabsIntent.COLOR_SCHEME_DARK, darkParams.build())
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
159
295
|
private fun colorForHex(value: String): Int? {
|
|
160
296
|
return try {
|
|
161
297
|
Color.parseColor(value)
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
package com.margelo.nitro.one
|
|
2
|
+
|
|
3
|
+
import android.Manifest
|
|
4
|
+
import android.app.Activity
|
|
5
|
+
import android.content.Intent
|
|
6
|
+
import android.content.pm.PackageManager
|
|
7
|
+
import android.os.Build
|
|
8
|
+
import android.os.Bundle
|
|
9
|
+
import android.os.Handler
|
|
10
|
+
import android.os.Looper
|
|
11
|
+
import android.speech.RecognitionListener
|
|
12
|
+
import android.speech.RecognizerIntent
|
|
13
|
+
import android.speech.SpeechRecognizer
|
|
14
|
+
import androidx.core.app.ActivityCompat
|
|
15
|
+
import androidx.core.content.ContextCompat
|
|
16
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
17
|
+
import com.facebook.react.modules.core.PermissionAwareActivity
|
|
18
|
+
import com.facebook.react.modules.core.PermissionListener
|
|
19
|
+
import com.margelo.nitro.NitroModules
|
|
20
|
+
import com.margelo.nitro.core.Promise
|
|
21
|
+
|
|
22
|
+
// dictation behind One.Speech: the system SpeechRecognizer with partial
|
|
23
|
+
// results, one utterance per session, ending on the recognizer's own
|
|
24
|
+
// end-of-speech detection or on stop. needs RECORD_AUDIO, which one prebuild
|
|
25
|
+
// writes from native.app speech. SpeechRecognizer must be driven from the
|
|
26
|
+
// main thread, so every call hops there and all session state lives on it.
|
|
27
|
+
// the system shares one recognition service connection per app, and
|
|
28
|
+
// destroying any recognizer drops it under whichever session runs next, so
|
|
29
|
+
// recognizers are destroyed only on dispose. a session that ends on its own
|
|
30
|
+
// leaves its recognizer for the next one. cancelling a live session makes the
|
|
31
|
+
// service report the cancellation late, through the recognizer's single
|
|
32
|
+
// listener binder, so a cancelled recognizer is retired and never reused.
|
|
33
|
+
class HybridOneSpeech : HybridOneSpeechSpec(), PermissionListener {
|
|
34
|
+
private class Session(val onEvent: (SpeechEvent) -> Unit) {
|
|
35
|
+
var transcript = ""
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private val main = Handler(Looper.getMainLooper())
|
|
39
|
+
private var recognizer: SpeechRecognizer? = null
|
|
40
|
+
private val retired = mutableListOf<SpeechRecognizer>()
|
|
41
|
+
private var session: Session? = null
|
|
42
|
+
private var pendingPermission: Promise<SpeechPermissionResponse>? = null
|
|
43
|
+
|
|
44
|
+
private val context: ReactApplicationContext
|
|
45
|
+
get() = NitroModules.applicationContext
|
|
46
|
+
?: throw IllegalStateException("Speech: the react context is not ready")
|
|
47
|
+
|
|
48
|
+
override fun isAvailable(): Boolean = SpeechRecognizer.isRecognitionAvailable(context)
|
|
49
|
+
|
|
50
|
+
override fun getPermissions(): Promise<SpeechPermissionResponse> =
|
|
51
|
+
Promise.resolved(permissionResponse())
|
|
52
|
+
|
|
53
|
+
override fun requestPermissions(): Promise<SpeechPermissionResponse> {
|
|
54
|
+
if (!isMicrophoneDeclared()) {
|
|
55
|
+
return Promise.rejected(
|
|
56
|
+
OneNativeError(
|
|
57
|
+
E_FAILED,
|
|
58
|
+
"Speech.requestPermissions: dictation needs the RECORD_AUDIO permission: " +
|
|
59
|
+
"set native.app speech and rerun one prebuild"
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
if (isGranted()) return Promise.resolved(permissionResponse())
|
|
64
|
+
val aware = context.currentActivity as? PermissionAwareActivity
|
|
65
|
+
?: return Promise.rejected(
|
|
66
|
+
OneNativeError(E_FAILED, "Speech.requestPermissions: found no activity to prompt from")
|
|
67
|
+
)
|
|
68
|
+
val promise = Promise<SpeechPermissionResponse>()
|
|
69
|
+
synchronized(this) {
|
|
70
|
+
if (pendingPermission != null) {
|
|
71
|
+
return Promise.rejected(
|
|
72
|
+
OneNativeError(E_FAILED, "Speech.requestPermissions: another request is already in flight")
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
pendingPermission = promise
|
|
76
|
+
}
|
|
77
|
+
context.getSharedPreferences(PREFS, Activity.MODE_PRIVATE)
|
|
78
|
+
.edit()
|
|
79
|
+
.putBoolean(ASKED_KEY, true)
|
|
80
|
+
.apply()
|
|
81
|
+
aware.requestPermissions(arrayOf(Manifest.permission.RECORD_AUDIO), REQUEST_PERMISSION, this)
|
|
82
|
+
return promise
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
override fun onRequestPermissionsResult(
|
|
86
|
+
requestCode: Int,
|
|
87
|
+
permissions: Array<String>,
|
|
88
|
+
grantResults: IntArray
|
|
89
|
+
): Boolean {
|
|
90
|
+
if (requestCode != REQUEST_PERMISSION) return false
|
|
91
|
+
val pending = synchronized(this) {
|
|
92
|
+
val pending = pendingPermission
|
|
93
|
+
pendingPermission = null
|
|
94
|
+
pending
|
|
95
|
+
}
|
|
96
|
+
pending?.resolve(permissionResponse())
|
|
97
|
+
return true
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
override fun dispose() {
|
|
101
|
+
main.post {
|
|
102
|
+
session = null
|
|
103
|
+
retire()
|
|
104
|
+
retired.forEach { it.destroy() }
|
|
105
|
+
retired.clear()
|
|
106
|
+
}
|
|
107
|
+
super.dispose()
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
override fun start(options: SpeechStartOptions, onEvent: (SpeechEvent) -> Unit) {
|
|
111
|
+
main.post { begin(options, onEvent) }
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
override fun stop() {
|
|
115
|
+
// the recognizer answers with its final result, which ends the session
|
|
116
|
+
main.post { if (session != null) recognizer?.stopListening() }
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
override fun abort() {
|
|
120
|
+
main.post {
|
|
121
|
+
if (session == null) return@post
|
|
122
|
+
session = null
|
|
123
|
+
retire()
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
private fun begin(options: SpeechStartOptions, onEvent: (SpeechEvent) -> Unit) {
|
|
128
|
+
if (session != null) retire()
|
|
129
|
+
val current = Session(onEvent)
|
|
130
|
+
session = current
|
|
131
|
+
if (!SpeechRecognizer.isRecognitionAvailable(context)) {
|
|
132
|
+
fail(SpeechErrorCode.SERVICE_NOT_ALLOWED, "Speech recognition is unavailable on this device.")
|
|
133
|
+
return
|
|
134
|
+
}
|
|
135
|
+
if (!isGranted()) {
|
|
136
|
+
fail(SpeechErrorCode.NOT_ALLOWED, "Dictation needs microphone permission.")
|
|
137
|
+
return
|
|
138
|
+
}
|
|
139
|
+
val active = recognizer
|
|
140
|
+
?: SpeechRecognizer.createSpeechRecognizer(context).also { recognizer = it }
|
|
141
|
+
active.setRecognitionListener(object : RecognitionListener {
|
|
142
|
+
override fun onReadyForSpeech(params: Bundle?) {
|
|
143
|
+
if (session !== current) return
|
|
144
|
+
current.onEvent(SpeechEvent(SpeechEventType.START, "", null, null))
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
override fun onPartialResults(partialResults: Bundle?) {
|
|
148
|
+
if (session !== current) return
|
|
149
|
+
val text = best(partialResults) ?: return
|
|
150
|
+
if (text == current.transcript) return
|
|
151
|
+
current.transcript = text
|
|
152
|
+
current.onEvent(SpeechEvent(SpeechEventType.TRANSCRIPT, text, null, null))
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
override fun onResults(results: Bundle?) {
|
|
156
|
+
if (session !== current) return
|
|
157
|
+
val text = best(results)
|
|
158
|
+
if (text != null && text != current.transcript) {
|
|
159
|
+
current.transcript = text
|
|
160
|
+
current.onEvent(SpeechEvent(SpeechEventType.TRANSCRIPT, text, null, null))
|
|
161
|
+
}
|
|
162
|
+
finish()
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
override fun onError(error: Int) {
|
|
166
|
+
if (session !== current) return
|
|
167
|
+
when (error) {
|
|
168
|
+
// nothing heard ends the session with what it has
|
|
169
|
+
SpeechRecognizer.ERROR_NO_MATCH, SpeechRecognizer.ERROR_SPEECH_TIMEOUT -> finish()
|
|
170
|
+
SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS ->
|
|
171
|
+
fail(SpeechErrorCode.NOT_ALLOWED, "Dictation needs microphone permission.")
|
|
172
|
+
SpeechRecognizer.ERROR_NETWORK,
|
|
173
|
+
SpeechRecognizer.ERROR_NETWORK_TIMEOUT,
|
|
174
|
+
SpeechRecognizer.ERROR_SERVER,
|
|
175
|
+
SpeechRecognizer.ERROR_SERVER_DISCONNECTED ->
|
|
176
|
+
fail(SpeechErrorCode.NETWORK, "The speech service could not be reached.")
|
|
177
|
+
SpeechRecognizer.ERROR_AUDIO ->
|
|
178
|
+
fail(SpeechErrorCode.AUDIO_CAPTURE, "Audio recording failed.")
|
|
179
|
+
SpeechRecognizer.ERROR_RECOGNIZER_BUSY, SpeechRecognizer.ERROR_TOO_MANY_REQUESTS ->
|
|
180
|
+
fail(SpeechErrorCode.BUSY, "The speech service is busy.")
|
|
181
|
+
SpeechRecognizer.ERROR_LANGUAGE_NOT_SUPPORTED, SpeechRecognizer.ERROR_LANGUAGE_UNAVAILABLE ->
|
|
182
|
+
fail(SpeechErrorCode.LANGUAGE_NOT_SUPPORTED, "Speech recognition does not support this language.")
|
|
183
|
+
else -> fail(SpeechErrorCode.UNKNOWN, "Speech recognition failed with code $error.")
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
override fun onBeginningOfSpeech() {}
|
|
188
|
+
override fun onRmsChanged(rmsdB: Float) {}
|
|
189
|
+
override fun onBufferReceived(buffer: ByteArray?) {}
|
|
190
|
+
override fun onEndOfSpeech() {}
|
|
191
|
+
override fun onEvent(eventType: Int, params: Bundle?) {}
|
|
192
|
+
})
|
|
193
|
+
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
|
|
194
|
+
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
|
|
195
|
+
putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true)
|
|
196
|
+
putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1)
|
|
197
|
+
putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.packageName)
|
|
198
|
+
options.lang?.let { putExtra(RecognizerIntent.EXTRA_LANGUAGE, it) }
|
|
199
|
+
}
|
|
200
|
+
active.startListening(intent)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private fun retire() {
|
|
204
|
+
val live = recognizer ?: return
|
|
205
|
+
recognizer = null
|
|
206
|
+
live.cancel()
|
|
207
|
+
retired += live
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private fun best(results: Bundle?): String? =
|
|
211
|
+
results?.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)?.firstOrNull()
|
|
212
|
+
|
|
213
|
+
private fun finish() {
|
|
214
|
+
val current = session ?: return
|
|
215
|
+
session = null
|
|
216
|
+
current.onEvent(SpeechEvent(SpeechEventType.END, current.transcript, null, null))
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private fun fail(code: SpeechErrorCode, message: String) {
|
|
220
|
+
val current = session ?: return
|
|
221
|
+
session = null
|
|
222
|
+
current.onEvent(SpeechEvent(SpeechEventType.ERROR, current.transcript, code, message))
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private fun isGranted(): Boolean =
|
|
226
|
+
ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) ==
|
|
227
|
+
PackageManager.PERMISSION_GRANTED
|
|
228
|
+
|
|
229
|
+
// granted, or denied with rationale: both are known states. otherwise
|
|
230
|
+
// the asked flag separates the undetermined first run from a permanent
|
|
231
|
+
// denial, which the platform reports identically.
|
|
232
|
+
private fun permissionResponse(): SpeechPermissionResponse {
|
|
233
|
+
if (isGranted()) {
|
|
234
|
+
return SpeechPermissionResponse(SpeechPermissionStatus.GRANTED, true, true, false)
|
|
235
|
+
}
|
|
236
|
+
val activity = context.currentActivity
|
|
237
|
+
if (
|
|
238
|
+
activity != null &&
|
|
239
|
+
ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.RECORD_AUDIO)
|
|
240
|
+
) {
|
|
241
|
+
return SpeechPermissionResponse(SpeechPermissionStatus.DENIED, false, true, false)
|
|
242
|
+
}
|
|
243
|
+
val asked = context.getSharedPreferences(PREFS, Activity.MODE_PRIVATE).getBoolean(ASKED_KEY, false)
|
|
244
|
+
return if (asked) {
|
|
245
|
+
SpeechPermissionResponse(SpeechPermissionStatus.DENIED, false, false, false)
|
|
246
|
+
} else {
|
|
247
|
+
SpeechPermissionResponse(SpeechPermissionStatus.UNDETERMINED, false, true, false)
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private fun isMicrophoneDeclared(): Boolean {
|
|
252
|
+
val info = if (Build.VERSION.SDK_INT >= 33) {
|
|
253
|
+
context.packageManager.getPackageInfo(
|
|
254
|
+
context.packageName,
|
|
255
|
+
PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS.toLong())
|
|
256
|
+
)
|
|
257
|
+
} else {
|
|
258
|
+
@Suppress("DEPRECATION")
|
|
259
|
+
context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS)
|
|
260
|
+
}
|
|
261
|
+
return info.requestedPermissions?.contains(Manifest.permission.RECORD_AUDIO) == true
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
companion object {
|
|
265
|
+
private const val E_FAILED = "E_SPEECH_FAILED"
|
|
266
|
+
private const val PREFS = "one-native-speech"
|
|
267
|
+
private const val ASKED_KEY = "microphone-asked"
|
|
268
|
+
private const val REQUEST_PERMISSION = 0x1C01
|
|
269
|
+
}
|
|
270
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
package com.margelo.nitro.one
|
|
2
2
|
|
|
3
3
|
// nitro hands js the printed stack trace of a rejected throwable as the error
|
|
4
|
-
// message. this one prints as exactly
|
|
5
|
-
//
|
|
6
|
-
|
|
4
|
+
// message. this one prints as exactly its message, with no class name or
|
|
5
|
+
// frames: "<code>: <message>" for a failure, whose stable code the js entries
|
|
6
|
+
// split back out, or the bare message for a call the platform cannot answer.
|
|
7
|
+
class OneNativeError(message: String) : Exception(message) {
|
|
8
|
+
constructor(code: String, message: String) : this("$code: $message")
|
|
9
|
+
|
|
7
10
|
override fun fillInStackTrace(): Throwable = this
|
|
8
11
|
|
|
9
12
|
override fun toString(): String = message ?: ""
|
package/dist/cjs/one.cjs
CHANGED
|
@@ -81,9 +81,11 @@ const One = Object.freeze({
|
|
|
81
81
|
Clipboard: import_platform.Clipboard,
|
|
82
82
|
Haptics: import_platform.Haptics,
|
|
83
83
|
Network: import_platform.Network,
|
|
84
|
+
Auth: import_platform.Auth,
|
|
84
85
|
Browser: import_platform.Browser,
|
|
85
86
|
ImagePicker: import_platform.ImagePicker,
|
|
86
87
|
DocumentPicker: import_platform.DocumentPicker,
|
|
87
88
|
SecureStore: import_platform.SecureStore,
|
|
89
|
+
Speech: import_platform.Speech,
|
|
88
90
|
useNetworkState: import_platform.useNetworkState
|
|
89
91
|
});
|
package/dist/cjs/one.native.cjs
CHANGED
|
@@ -84,9 +84,11 @@ var One = Object.freeze({
|
|
|
84
84
|
Clipboard: import_platform.Clipboard,
|
|
85
85
|
Haptics: import_platform.Haptics,
|
|
86
86
|
Network: import_platform.Network,
|
|
87
|
+
Auth: import_platform.Auth,
|
|
87
88
|
Browser: import_platform.Browser,
|
|
88
89
|
ImagePicker: import_platform.ImagePicker,
|
|
89
90
|
DocumentPicker: import_platform.DocumentPicker,
|
|
90
91
|
SecureStore: import_platform.SecureStore,
|
|
92
|
+
Speech: import_platform.Speech,
|
|
91
93
|
useNetworkState: import_platform.useNetworkState
|
|
92
94
|
});
|
package/dist/cjs/one.native.js
CHANGED
|
@@ -84,10 +84,12 @@ var One = Object.freeze({
|
|
|
84
84
|
Clipboard: import_platform.Clipboard,
|
|
85
85
|
Haptics: import_platform.Haptics,
|
|
86
86
|
Network: import_platform.Network,
|
|
87
|
+
Auth: import_platform.Auth,
|
|
87
88
|
Browser: import_platform.Browser,
|
|
88
89
|
ImagePicker: import_platform.ImagePicker,
|
|
89
90
|
DocumentPicker: import_platform.DocumentPicker,
|
|
90
91
|
SecureStore: import_platform.SecureStore,
|
|
92
|
+
Speech: import_platform.Speech,
|
|
91
93
|
useNetworkState: import_platform.useNetworkState
|
|
92
94
|
});
|
|
93
95
|
|
|
@@ -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 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"}
|
|
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 Auth: import_platform.Auth,\n Browser: import_platform.Browser,\n ImagePicker: import_platform.ImagePicker,\n DocumentPicker: import_platform.DocumentPicker,\n SecureStore: import_platform.SecureStore,\n Speech: import_platform.Speech,\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,MAAM,gBAAgB;CACtB,SAAS,gBAAgB;CACzB,aAAa,gBAAgB;CAC7B,gBAAgB,gBAAgB;CAChC,aAAa,gBAAgB;CAC7B,QAAQ,gBAAgB;CACxB,iBAAiB,gBAAgB;AACnC,CAAC"}
|
|
@@ -101,6 +101,7 @@ function tabContentModifiers(owner, props, iosVersion) {
|
|
|
101
101
|
if (props.defaultSectionExpansion) (0, import_swiftui.assertSwiftUIValue)("TabSectionExpansion", props.defaultSectionExpansion, iosVersion);
|
|
102
102
|
return JSON.stringify({
|
|
103
103
|
image: props.image,
|
|
104
|
+
labelStyle: props.labelStyle,
|
|
104
105
|
section: props.section,
|
|
105
106
|
disabled: props.disabled,
|
|
106
107
|
hidden: props.hidden,
|
|
@@ -101,6 +101,7 @@ function tabContentModifiers(owner, props, iosVersion) {
|
|
|
101
101
|
if (props.defaultSectionExpansion) (0, import_swiftui.assertSwiftUIValue)("TabSectionExpansion", props.defaultSectionExpansion, iosVersion);
|
|
102
102
|
return JSON.stringify({
|
|
103
103
|
image: props.image,
|
|
104
|
+
labelStyle: props.labelStyle,
|
|
104
105
|
section: props.section,
|
|
105
106
|
disabled: props.disabled,
|
|
106
107
|
hidden: props.hidden,
|