@userflow-tech/react-native 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +76 -0
- package/README.md +337 -0
- package/docs/anchoring.md +264 -0
- package/docs/deep-linking.md +271 -0
- package/docs/identity-verification.md +95 -0
- package/docs/theme-mapping.md +101 -0
- package/docs/troubleshooting.md +107 -0
- package/lib/commonjs/anchors/AnchorRegistry.js +72 -0
- package/lib/commonjs/anchors/AnchorRegistry.js.map +1 -0
- package/lib/commonjs/anchors/AutoAnchorRegistry.js +315 -0
- package/lib/commonjs/anchors/AutoAnchorRegistry.js.map +1 -0
- package/lib/commonjs/anchors/ScrollContainerRegistry.js +93 -0
- package/lib/commonjs/anchors/ScrollContainerRegistry.js.map +1 -0
- package/lib/commonjs/anchors/anchorChangeTicker.js +83 -0
- package/lib/commonjs/anchors/anchorChangeTicker.js.map +1 -0
- package/lib/commonjs/anchors/animationFrame.js +90 -0
- package/lib/commonjs/anchors/animationFrame.js.map +1 -0
- package/lib/commonjs/anchors/autoAnchor.js +253 -0
- package/lib/commonjs/anchors/autoAnchor.js.map +1 -0
- package/lib/commonjs/anchors/elementConditionEvaluator.js +82 -0
- package/lib/commonjs/anchors/elementConditionEvaluator.js.map +1 -0
- package/lib/commonjs/anchors/fiber/FiberScanRoot.js +90 -0
- package/lib/commonjs/anchors/fiber/FiberScanRoot.js.map +1 -0
- package/lib/commonjs/anchors/fiber/fiberInternals.js +180 -0
- package/lib/commonjs/anchors/fiber/fiberInternals.js.map +1 -0
- package/lib/commonjs/anchors/fiber/findAnchorFiber.js +214 -0
- package/lib/commonjs/anchors/fiber/findAnchorFiber.js.map +1 -0
- package/lib/commonjs/anchors/fiber/findScrollAncestors.js +176 -0
- package/lib/commonjs/anchors/fiber/findScrollAncestors.js.map +1 -0
- package/lib/commonjs/anchors/fiber/measureHostFiber.js +75 -0
- package/lib/commonjs/anchors/fiber/measureHostFiber.js.map +1 -0
- package/lib/commonjs/anchors/fiber/visibleScreens.js +165 -0
- package/lib/commonjs/anchors/fiber/visibleScreens.js.map +1 -0
- package/lib/commonjs/anchors/hintsCodec.js +120 -0
- package/lib/commonjs/anchors/hintsCodec.js.map +1 -0
- package/lib/commonjs/anchors/resolveAnchorHost.js +112 -0
- package/lib/commonjs/anchors/resolveAnchorHost.js.map +1 -0
- package/lib/commonjs/anchors/resolveManualAnchorId.js +17 -0
- package/lib/commonjs/anchors/resolveManualAnchorId.js.map +1 -0
- package/lib/commonjs/anchors/scrollAnchorIntoView.js +227 -0
- package/lib/commonjs/anchors/scrollAnchorIntoView.js.map +1 -0
- package/lib/commonjs/anchors/scrollConfig.js +48 -0
- package/lib/commonjs/anchors/scrollConfig.js.map +1 -0
- package/lib/commonjs/anchors/targetPressMonitor.js +113 -0
- package/lib/commonjs/anchors/targetPressMonitor.js.map +1 -0
- package/lib/commonjs/anchors/useUserflowAnchor.js +91 -0
- package/lib/commonjs/anchors/useUserflowAnchor.js.map +1 -0
- package/lib/commonjs/anchors/useUserflowScrollContainer.js +76 -0
- package/lib/commonjs/anchors/useUserflowScrollContainer.js.map +1 -0
- package/lib/commonjs/anonymousId.js +42 -0
- package/lib/commonjs/anonymousId.js.map +1 -0
- package/lib/commonjs/content/RichContentRenderer.js +675 -0
- package/lib/commonjs/content/RichContentRenderer.js.map +1 -0
- package/lib/commonjs/content/StepButton.js +57 -0
- package/lib/commonjs/content/StepButton.js.map +1 -0
- package/lib/commonjs/content/buttonAppearance.js +18 -0
- package/lib/commonjs/content/buttonAppearance.js.map +1 -0
- package/lib/commonjs/content/deserialize.js +129 -0
- package/lib/commonjs/content/deserialize.js.map +1 -0
- package/lib/commonjs/content/imageLayout.js +24 -0
- package/lib/commonjs/content/imageLayout.js.map +1 -0
- package/lib/commonjs/content/migrateFlowBlocks.js +39 -0
- package/lib/commonjs/content/migrateFlowBlocks.js.map +1 -0
- package/lib/commonjs/content/openSafeUrl.js +37 -0
- package/lib/commonjs/content/openSafeUrl.js.map +1 -0
- package/lib/commonjs/content/resolveStepButtonChrome.js +95 -0
- package/lib/commonjs/content/resolveStepButtonChrome.js.map +1 -0
- package/lib/commonjs/content/themeColor.js +106 -0
- package/lib/commonjs/content/themeColor.js.map +1 -0
- package/lib/commonjs/content/types.js +2 -0
- package/lib/commonjs/content/types.js.map +1 -0
- package/lib/commonjs/deepLinking.js +162 -0
- package/lib/commonjs/deepLinking.js.map +1 -0
- package/lib/commonjs/expo-router/UserflowExpoRouterScreenTracker.js +13 -0
- package/lib/commonjs/expo-router/UserflowExpoRouterScreenTracker.js.map +1 -0
- package/lib/commonjs/expo-router/getExpoRouterScreenTracker.js +44 -0
- package/lib/commonjs/expo-router/getExpoRouterScreenTracker.js.map +1 -0
- package/lib/commonjs/expo-router/index.js +20 -0
- package/lib/commonjs/expo-router/index.js.map +1 -0
- package/lib/commonjs/expo-router/useUserflowExpoRouter.js +45 -0
- package/lib/commonjs/expo-router/useUserflowExpoRouter.js.map +1 -0
- package/lib/commonjs/index.js +356 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lifecycle.js +200 -0
- package/lib/commonjs/lifecycle.js.map +1 -0
- package/lib/commonjs/navigation/WithUserflowReactNavigation.js +69 -0
- package/lib/commonjs/navigation/WithUserflowReactNavigation.js.map +1 -0
- package/lib/commonjs/navigation/chainCallbacks.js +16 -0
- package/lib/commonjs/navigation/chainCallbacks.js.map +1 -0
- package/lib/commonjs/navigation/getActiveRouteName.js +18 -0
- package/lib/commonjs/navigation/getActiveRouteName.js.map +1 -0
- package/lib/commonjs/navigation/index.js +50 -0
- package/lib/commonjs/navigation/index.js.map +1 -0
- package/lib/commonjs/navigation/openFlowNavigateUrl.js +110 -0
- package/lib/commonjs/navigation/openFlowNavigateUrl.js.map +1 -0
- package/lib/commonjs/network.js +90 -0
- package/lib/commonjs/network.js.map +1 -0
- package/lib/commonjs/pairing/PairingController.js +290 -0
- package/lib/commonjs/pairing/PairingController.js.map +1 -0
- package/lib/commonjs/pairing/PreviewModeBanner.js +118 -0
- package/lib/commonjs/pairing/PreviewModeBanner.js.map +1 -0
- package/lib/commonjs/pairing/deepLink.js +141 -0
- package/lib/commonjs/pairing/deepLink.js.map +1 -0
- package/lib/commonjs/pairing/diagnostics.js +115 -0
- package/lib/commonjs/pairing/diagnostics.js.map +1 -0
- package/lib/commonjs/pairing/index.js +58 -0
- package/lib/commonjs/pairing/index.js.map +1 -0
- package/lib/commonjs/pairing/pairingRuntime.js +85 -0
- package/lib/commonjs/pairing/pairingRuntime.js.map +1 -0
- package/lib/commonjs/pairing/tokenStorage.js +70 -0
- package/lib/commonjs/pairing/tokenStorage.js.map +1 -0
- package/lib/commonjs/pairing/usePairingState.js +40 -0
- package/lib/commonjs/pairing/usePairingState.js.map +1 -0
- package/lib/commonjs/runtime/FlowRenderer.js +57 -0
- package/lib/commonjs/runtime/FlowRenderer.js.map +1 -0
- package/lib/commonjs/runtime/FlowSurfaceFade.js +53 -0
- package/lib/commonjs/runtime/FlowSurfaceFade.js.map +1 -0
- package/lib/commonjs/runtime/TargetPressBridge.js +96 -0
- package/lib/commonjs/runtime/TargetPressBridge.js.map +1 -0
- package/lib/commonjs/runtime/UserflowProvider.js +91 -0
- package/lib/commonjs/runtime/UserflowProvider.js.map +1 -0
- package/lib/commonjs/runtime/clientConditions.js +50 -0
- package/lib/commonjs/runtime/clientConditions.js.map +1 -0
- package/lib/commonjs/runtime/flowEngine.js +63 -0
- package/lib/commonjs/runtime/flowEngine.js.map +1 -0
- package/lib/commonjs/runtime/flowSessionViewState.js +48 -0
- package/lib/commonjs/runtime/flowSessionViewState.js.map +1 -0
- package/lib/commonjs/runtime/useFlowSessionState.js +25 -0
- package/lib/commonjs/runtime/useFlowSessionState.js.map +1 -0
- package/lib/commonjs/runtime/userflowCore.js +13 -0
- package/lib/commonjs/runtime/userflowCore.js.map +1 -0
- package/lib/commonjs/screenTracker.js +87 -0
- package/lib/commonjs/screenTracker.js.map +1 -0
- package/lib/commonjs/surfaces/CloseButton.js +52 -0
- package/lib/commonjs/surfaces/CloseButton.js.map +1 -0
- package/lib/commonjs/surfaces/MadeWithUserflow.js +90 -0
- package/lib/commonjs/surfaces/MadeWithUserflow.js.map +1 -0
- package/lib/commonjs/surfaces/ModalSurface.js +170 -0
- package/lib/commonjs/surfaces/ModalSurface.js.map +1 -0
- package/lib/commonjs/surfaces/ProgressBar.js +116 -0
- package/lib/commonjs/surfaces/ProgressBar.js.map +1 -0
- package/lib/commonjs/surfaces/TooltipSurface.js +638 -0
- package/lib/commonjs/surfaces/TooltipSurface.js.map +1 -0
- package/lib/commonjs/surfaces/absoluteFill.js +29 -0
- package/lib/commonjs/surfaces/absoluteFill.js.map +1 -0
- package/lib/commonjs/surfaces/assets/png.d.js +2 -0
- package/lib/commonjs/surfaces/assets/png.d.js.map +1 -0
- package/lib/commonjs/surfaces/assets/userflow-logomark.png +0 -0
- package/lib/commonjs/surfaces/parseBackdropOpacity.js +20 -0
- package/lib/commonjs/surfaces/parseBackdropOpacity.js.map +1 -0
- package/lib/commonjs/surfaces/progress.js +35 -0
- package/lib/commonjs/surfaces/progress.js.map +1 -0
- package/lib/commonjs/surfaces/resolveCloseButtonColor.js +24 -0
- package/lib/commonjs/surfaces/resolveCloseButtonColor.js.map +1 -0
- package/lib/commonjs/surfaces/resolveModalLayout.js +67 -0
- package/lib/commonjs/surfaces/resolveModalLayout.js.map +1 -0
- package/lib/commonjs/surfaces/resolveTooltipLayout.js +64 -0
- package/lib/commonjs/surfaces/resolveTooltipLayout.js.map +1 -0
- package/lib/commonjs/surfaces/safeArea.js +46 -0
- package/lib/commonjs/surfaces/safeArea.js.map +1 -0
- package/lib/commonjs/surfaces/themeChrome.js +90 -0
- package/lib/commonjs/surfaces/themeChrome.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/TooltipBubble.js +108 -0
- package/lib/commonjs/surfaces/tooltip/TooltipBubble.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/TooltipCutout.js +103 -0
- package/lib/commonjs/surfaces/tooltip/TooltipCutout.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/TooltipNotch.js +64 -0
- package/lib/commonjs/surfaces/tooltip/TooltipNotch.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/computeTooltipPosition.js +102 -0
- package/lib/commonjs/surfaces/tooltip/computeTooltipPosition.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/inferTooltipPlacement.js +100 -0
- package/lib/commonjs/surfaces/tooltip/inferTooltipPlacement.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/parseBackdropPadding.js +15 -0
- package/lib/commonjs/surfaces/tooltip/parseBackdropPadding.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/rect.js +51 -0
- package/lib/commonjs/surfaces/tooltip/rect.js.map +1 -0
- package/lib/commonjs/useUserflowScreen.js +24 -0
- package/lib/commonjs/useUserflowScreen.js.map +1 -0
- package/lib/commonjs/version.js +9 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/anchors/AnchorRegistry.js +67 -0
- package/lib/module/anchors/AnchorRegistry.js.map +1 -0
- package/lib/module/anchors/AutoAnchorRegistry.js +309 -0
- package/lib/module/anchors/AutoAnchorRegistry.js.map +1 -0
- package/lib/module/anchors/ScrollContainerRegistry.js +86 -0
- package/lib/module/anchors/ScrollContainerRegistry.js.map +1 -0
- package/lib/module/anchors/anchorChangeTicker.js +79 -0
- package/lib/module/anchors/anchorChangeTicker.js.map +1 -0
- package/lib/module/anchors/animationFrame.js +83 -0
- package/lib/module/anchors/animationFrame.js.map +1 -0
- package/lib/module/anchors/autoAnchor.js +248 -0
- package/lib/module/anchors/autoAnchor.js.map +1 -0
- package/lib/module/anchors/elementConditionEvaluator.js +79 -0
- package/lib/module/anchors/elementConditionEvaluator.js.map +1 -0
- package/lib/module/anchors/fiber/FiberScanRoot.js +84 -0
- package/lib/module/anchors/fiber/FiberScanRoot.js.map +1 -0
- package/lib/module/anchors/fiber/fiberInternals.js +164 -0
- package/lib/module/anchors/fiber/fiberInternals.js.map +1 -0
- package/lib/module/anchors/fiber/findAnchorFiber.js +210 -0
- package/lib/module/anchors/fiber/findAnchorFiber.js.map +1 -0
- package/lib/module/anchors/fiber/findScrollAncestors.js +172 -0
- package/lib/module/anchors/fiber/findScrollAncestors.js.map +1 -0
- package/lib/module/anchors/fiber/measureHostFiber.js +70 -0
- package/lib/module/anchors/fiber/measureHostFiber.js.map +1 -0
- package/lib/module/anchors/fiber/visibleScreens.js +159 -0
- package/lib/module/anchors/fiber/visibleScreens.js.map +1 -0
- package/lib/module/anchors/hintsCodec.js +111 -0
- package/lib/module/anchors/hintsCodec.js.map +1 -0
- package/lib/module/anchors/resolveAnchorHost.js +105 -0
- package/lib/module/anchors/resolveAnchorHost.js.map +1 -0
- package/lib/module/anchors/resolveManualAnchorId.js +13 -0
- package/lib/module/anchors/resolveManualAnchorId.js.map +1 -0
- package/lib/module/anchors/scrollAnchorIntoView.js +222 -0
- package/lib/module/anchors/scrollAnchorIntoView.js.map +1 -0
- package/lib/module/anchors/scrollConfig.js +40 -0
- package/lib/module/anchors/scrollConfig.js.map +1 -0
- package/lib/module/anchors/targetPressMonitor.js +105 -0
- package/lib/module/anchors/targetPressMonitor.js.map +1 -0
- package/lib/module/anchors/useUserflowAnchor.js +87 -0
- package/lib/module/anchors/useUserflowAnchor.js.map +1 -0
- package/lib/module/anchors/useUserflowScrollContainer.js +71 -0
- package/lib/module/anchors/useUserflowScrollContainer.js.map +1 -0
- package/lib/module/anonymousId.js +36 -0
- package/lib/module/anonymousId.js.map +1 -0
- package/lib/module/content/RichContentRenderer.js +670 -0
- package/lib/module/content/RichContentRenderer.js.map +1 -0
- package/lib/module/content/StepButton.js +52 -0
- package/lib/module/content/StepButton.js.map +1 -0
- package/lib/module/content/buttonAppearance.js +14 -0
- package/lib/module/content/buttonAppearance.js.map +1 -0
- package/lib/module/content/deserialize.js +116 -0
- package/lib/module/content/deserialize.js.map +1 -0
- package/lib/module/content/imageLayout.js +20 -0
- package/lib/module/content/imageLayout.js.map +1 -0
- package/lib/module/content/migrateFlowBlocks.js +35 -0
- package/lib/module/content/migrateFlowBlocks.js.map +1 -0
- package/lib/module/content/openSafeUrl.js +32 -0
- package/lib/module/content/openSafeUrl.js.map +1 -0
- package/lib/module/content/resolveStepButtonChrome.js +90 -0
- package/lib/module/content/resolveStepButtonChrome.js.map +1 -0
- package/lib/module/content/themeColor.js +99 -0
- package/lib/module/content/themeColor.js.map +1 -0
- package/lib/module/content/types.js +2 -0
- package/lib/module/content/types.js.map +1 -0
- package/lib/module/deepLinking.js +152 -0
- package/lib/module/deepLinking.js.map +1 -0
- package/lib/module/expo-router/UserflowExpoRouterScreenTracker.js +10 -0
- package/lib/module/expo-router/UserflowExpoRouterScreenTracker.js.map +1 -0
- package/lib/module/expo-router/getExpoRouterScreenTracker.js +39 -0
- package/lib/module/expo-router/getExpoRouterScreenTracker.js.map +1 -0
- package/lib/module/expo-router/index.js +5 -0
- package/lib/module/expo-router/index.js.map +1 -0
- package/lib/module/expo-router/useUserflowExpoRouter.js +42 -0
- package/lib/module/expo-router/useUserflowExpoRouter.js.map +1 -0
- package/lib/module/index.js +259 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/lifecycle.js +195 -0
- package/lib/module/lifecycle.js.map +1 -0
- package/lib/module/navigation/WithUserflowReactNavigation.js +65 -0
- package/lib/module/navigation/WithUserflowReactNavigation.js.map +1 -0
- package/lib/module/navigation/chainCallbacks.js +12 -0
- package/lib/module/navigation/chainCallbacks.js.map +1 -0
- package/lib/module/navigation/getActiveRouteName.js +14 -0
- package/lib/module/navigation/getActiveRouteName.js.map +1 -0
- package/lib/module/navigation/index.js +5 -0
- package/lib/module/navigation/index.js.map +1 -0
- package/lib/module/navigation/openFlowNavigateUrl.js +100 -0
- package/lib/module/navigation/openFlowNavigateUrl.js.map +1 -0
- package/lib/module/network.js +85 -0
- package/lib/module/network.js.map +1 -0
- package/lib/module/pairing/PairingController.js +286 -0
- package/lib/module/pairing/PairingController.js.map +1 -0
- package/lib/module/pairing/PreviewModeBanner.js +113 -0
- package/lib/module/pairing/PreviewModeBanner.js.map +1 -0
- package/lib/module/pairing/deepLink.js +134 -0
- package/lib/module/pairing/deepLink.js.map +1 -0
- package/lib/module/pairing/diagnostics.js +101 -0
- package/lib/module/pairing/diagnostics.js.map +1 -0
- package/lib/module/pairing/index.js +7 -0
- package/lib/module/pairing/index.js.map +1 -0
- package/lib/module/pairing/pairingRuntime.js +77 -0
- package/lib/module/pairing/pairingRuntime.js.map +1 -0
- package/lib/module/pairing/tokenStorage.js +65 -0
- package/lib/module/pairing/tokenStorage.js.map +1 -0
- package/lib/module/pairing/usePairingState.js +35 -0
- package/lib/module/pairing/usePairingState.js.map +1 -0
- package/lib/module/runtime/FlowRenderer.js +52 -0
- package/lib/module/runtime/FlowRenderer.js.map +1 -0
- package/lib/module/runtime/FlowSurfaceFade.js +48 -0
- package/lib/module/runtime/FlowSurfaceFade.js.map +1 -0
- package/lib/module/runtime/TargetPressBridge.js +91 -0
- package/lib/module/runtime/TargetPressBridge.js.map +1 -0
- package/lib/module/runtime/UserflowProvider.js +85 -0
- package/lib/module/runtime/UserflowProvider.js.map +1 -0
- package/lib/module/runtime/clientConditions.js +43 -0
- package/lib/module/runtime/clientConditions.js.map +1 -0
- package/lib/module/runtime/flowEngine.js +54 -0
- package/lib/module/runtime/flowEngine.js.map +1 -0
- package/lib/module/runtime/flowSessionViewState.js +42 -0
- package/lib/module/runtime/flowSessionViewState.js.map +1 -0
- package/lib/module/runtime/useFlowSessionState.js +21 -0
- package/lib/module/runtime/useFlowSessionState.js.map +1 -0
- package/lib/module/runtime/userflowCore.js +10 -0
- package/lib/module/runtime/userflowCore.js.map +1 -0
- package/lib/module/screenTracker.js +79 -0
- package/lib/module/screenTracker.js.map +1 -0
- package/lib/module/surfaces/CloseButton.js +47 -0
- package/lib/module/surfaces/CloseButton.js.map +1 -0
- package/lib/module/surfaces/MadeWithUserflow.js +83 -0
- package/lib/module/surfaces/MadeWithUserflow.js.map +1 -0
- package/lib/module/surfaces/ModalSurface.js +165 -0
- package/lib/module/surfaces/ModalSurface.js.map +1 -0
- package/lib/module/surfaces/ProgressBar.js +111 -0
- package/lib/module/surfaces/ProgressBar.js.map +1 -0
- package/lib/module/surfaces/TooltipSurface.js +633 -0
- package/lib/module/surfaces/TooltipSurface.js.map +1 -0
- package/lib/module/surfaces/absoluteFill.js +25 -0
- package/lib/module/surfaces/absoluteFill.js.map +1 -0
- package/lib/module/surfaces/assets/png.d.js +2 -0
- package/lib/module/surfaces/assets/png.d.js.map +1 -0
- package/lib/module/surfaces/assets/userflow-logomark.png +0 -0
- package/lib/module/surfaces/parseBackdropOpacity.js +16 -0
- package/lib/module/surfaces/parseBackdropOpacity.js.map +1 -0
- package/lib/module/surfaces/progress.js +31 -0
- package/lib/module/surfaces/progress.js.map +1 -0
- package/lib/module/surfaces/resolveCloseButtonColor.js +20 -0
- package/lib/module/surfaces/resolveCloseButtonColor.js.map +1 -0
- package/lib/module/surfaces/resolveModalLayout.js +59 -0
- package/lib/module/surfaces/resolveModalLayout.js.map +1 -0
- package/lib/module/surfaces/resolveTooltipLayout.js +57 -0
- package/lib/module/surfaces/resolveTooltipLayout.js.map +1 -0
- package/lib/module/surfaces/safeArea.js +41 -0
- package/lib/module/surfaces/safeArea.js.map +1 -0
- package/lib/module/surfaces/themeChrome.js +86 -0
- package/lib/module/surfaces/themeChrome.js.map +1 -0
- package/lib/module/surfaces/tooltip/TooltipBubble.js +103 -0
- package/lib/module/surfaces/tooltip/TooltipBubble.js.map +1 -0
- package/lib/module/surfaces/tooltip/TooltipCutout.js +98 -0
- package/lib/module/surfaces/tooltip/TooltipCutout.js.map +1 -0
- package/lib/module/surfaces/tooltip/TooltipNotch.js +55 -0
- package/lib/module/surfaces/tooltip/TooltipNotch.js.map +1 -0
- package/lib/module/surfaces/tooltip/computeTooltipPosition.js +97 -0
- package/lib/module/surfaces/tooltip/computeTooltipPosition.js.map +1 -0
- package/lib/module/surfaces/tooltip/inferTooltipPlacement.js +95 -0
- package/lib/module/surfaces/tooltip/inferTooltipPlacement.js.map +1 -0
- package/lib/module/surfaces/tooltip/parseBackdropPadding.js +11 -0
- package/lib/module/surfaces/tooltip/parseBackdropPadding.js.map +1 -0
- package/lib/module/surfaces/tooltip/rect.js +44 -0
- package/lib/module/surfaces/tooltip/rect.js.map +1 -0
- package/lib/module/useUserflowScreen.js +21 -0
- package/lib/module/useUserflowScreen.js.map +1 -0
- package/lib/module/version.js +5 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/anchors/AnchorRegistry.d.ts +32 -0
- package/lib/typescript/commonjs/src/anchors/AnchorRegistry.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/AutoAnchorRegistry.d.ts +113 -0
- package/lib/typescript/commonjs/src/anchors/AutoAnchorRegistry.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/ScrollContainerRegistry.d.ts +46 -0
- package/lib/typescript/commonjs/src/anchors/ScrollContainerRegistry.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/anchorChangeTicker.d.ts +30 -0
- package/lib/typescript/commonjs/src/anchors/anchorChangeTicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/animationFrame.d.ts +21 -0
- package/lib/typescript/commonjs/src/anchors/animationFrame.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/autoAnchor.d.ts +31 -0
- package/lib/typescript/commonjs/src/anchors/autoAnchor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/elementConditionEvaluator.d.ts +21 -0
- package/lib/typescript/commonjs/src/anchors/elementConditionEvaluator.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRoot.d.ts +41 -0
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRoot.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/fiberInternals.d.ts +48 -0
- package/lib/typescript/commonjs/src/anchors/fiber/fiberInternals.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/findAnchorFiber.d.ts +33 -0
- package/lib/typescript/commonjs/src/anchors/fiber/findAnchorFiber.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/findScrollAncestors.d.ts +47 -0
- package/lib/typescript/commonjs/src/anchors/fiber/findScrollAncestors.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/measureHostFiber.d.ts +20 -0
- package/lib/typescript/commonjs/src/anchors/fiber/measureHostFiber.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts +42 -0
- package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/hintsCodec.d.ts +40 -0
- package/lib/typescript/commonjs/src/anchors/hintsCodec.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts +32 -0
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/resolveManualAnchorId.d.ts +6 -0
- package/lib/typescript/commonjs/src/anchors/resolveManualAnchorId.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/scrollAnchorIntoView.d.ts +59 -0
- package/lib/typescript/commonjs/src/anchors/scrollAnchorIntoView.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/scrollConfig.d.ts +30 -0
- package/lib/typescript/commonjs/src/anchors/scrollConfig.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/targetPressMonitor.d.ts +64 -0
- package/lib/typescript/commonjs/src/anchors/targetPressMonitor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/useUserflowAnchor.d.ts +30 -0
- package/lib/typescript/commonjs/src/anchors/useUserflowAnchor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/useUserflowScrollContainer.d.ts +34 -0
- package/lib/typescript/commonjs/src/anchors/useUserflowScrollContainer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anonymousId.d.ts +5 -0
- package/lib/typescript/commonjs/src/anonymousId.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/RichContentRenderer.d.ts +21 -0
- package/lib/typescript/commonjs/src/content/RichContentRenderer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/StepButton.d.ts +13 -0
- package/lib/typescript/commonjs/src/content/StepButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/buttonAppearance.d.ts +8 -0
- package/lib/typescript/commonjs/src/content/buttonAppearance.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/deserialize.d.ts +27 -0
- package/lib/typescript/commonjs/src/content/deserialize.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/imageLayout.d.ts +13 -0
- package/lib/typescript/commonjs/src/content/imageLayout.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/migrateFlowBlocks.d.ts +12 -0
- package/lib/typescript/commonjs/src/content/migrateFlowBlocks.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/openSafeUrl.d.ts +12 -0
- package/lib/typescript/commonjs/src/content/openSafeUrl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/resolveStepButtonChrome.d.ts +24 -0
- package/lib/typescript/commonjs/src/content/resolveStepButtonChrome.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/themeColor.d.ts +43 -0
- package/lib/typescript/commonjs/src/content/themeColor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/types.d.ts +144 -0
- package/lib/typescript/commonjs/src/content/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/deepLinking.d.ts +54 -0
- package/lib/typescript/commonjs/src/deepLinking.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/expo-router/UserflowExpoRouterScreenTracker.d.ts +3 -0
- package/lib/typescript/commonjs/src/expo-router/UserflowExpoRouterScreenTracker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/expo-router/getExpoRouterScreenTracker.d.ts +13 -0
- package/lib/typescript/commonjs/src/expo-router/getExpoRouterScreenTracker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/expo-router/index.d.ts +3 -0
- package/lib/typescript/commonjs/src/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/expo-router/useUserflowExpoRouter.d.ts +17 -0
- package/lib/typescript/commonjs/src/expo-router/useUserflowExpoRouter.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +112 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/lifecycle.d.ts +96 -0
- package/lib/typescript/commonjs/src/lifecycle.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/WithUserflowReactNavigation.d.ts +21 -0
- package/lib/typescript/commonjs/src/navigation/WithUserflowReactNavigation.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/chainCallbacks.d.ts +3 -0
- package/lib/typescript/commonjs/src/navigation/chainCallbacks.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/getActiveRouteName.d.ts +6 -0
- package/lib/typescript/commonjs/src/navigation/getActiveRouteName.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/index.d.ts +5 -0
- package/lib/typescript/commonjs/src/navigation/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/openFlowNavigateUrl.d.ts +33 -0
- package/lib/typescript/commonjs/src/navigation/openFlowNavigateUrl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/network.d.ts +42 -0
- package/lib/typescript/commonjs/src/network.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/PairingController.d.ts +104 -0
- package/lib/typescript/commonjs/src/pairing/PairingController.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/PreviewModeBanner.d.ts +11 -0
- package/lib/typescript/commonjs/src/pairing/PreviewModeBanner.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/deepLink.d.ts +53 -0
- package/lib/typescript/commonjs/src/pairing/deepLink.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/diagnostics.d.ts +52 -0
- package/lib/typescript/commonjs/src/pairing/diagnostics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/index.d.ts +10 -0
- package/lib/typescript/commonjs/src/pairing/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/pairingRuntime.d.ts +24 -0
- package/lib/typescript/commonjs/src/pairing/pairingRuntime.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/tokenStorage.d.ts +16 -0
- package/lib/typescript/commonjs/src/pairing/tokenStorage.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/usePairingState.d.ts +4 -0
- package/lib/typescript/commonjs/src/pairing/usePairingState.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/FlowRenderer.d.ts +13 -0
- package/lib/typescript/commonjs/src/runtime/FlowRenderer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/FlowSurfaceFade.d.ts +13 -0
- package/lib/typescript/commonjs/src/runtime/FlowSurfaceFade.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts +16 -0
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/UserflowProvider.d.ts +32 -0
- package/lib/typescript/commonjs/src/runtime/UserflowProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/clientConditions.d.ts +10 -0
- package/lib/typescript/commonjs/src/runtime/clientConditions.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/flowEngine.d.ts +17 -0
- package/lib/typescript/commonjs/src/runtime/flowEngine.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/flowSessionViewState.d.ts +18 -0
- package/lib/typescript/commonjs/src/runtime/flowSessionViewState.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/useFlowSessionState.d.ts +10 -0
- package/lib/typescript/commonjs/src/runtime/useFlowSessionState.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/userflowCore.d.ts +3 -0
- package/lib/typescript/commonjs/src/runtime/userflowCore.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/screenTracker.d.ts +28 -0
- package/lib/typescript/commonjs/src/screenTracker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/CloseButton.d.ts +8 -0
- package/lib/typescript/commonjs/src/surfaces/CloseButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/MadeWithUserflow.d.ts +28 -0
- package/lib/typescript/commonjs/src/surfaces/MadeWithUserflow.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/ModalSurface.d.ts +23 -0
- package/lib/typescript/commonjs/src/surfaces/ModalSurface.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/ProgressBar.d.ts +19 -0
- package/lib/typescript/commonjs/src/surfaces/ProgressBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts +17 -0
- package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/absoluteFill.d.ts +18 -0
- package/lib/typescript/commonjs/src/surfaces/absoluteFill.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/parseBackdropOpacity.d.ts +5 -0
- package/lib/typescript/commonjs/src/surfaces/parseBackdropOpacity.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/progress.d.ts +14 -0
- package/lib/typescript/commonjs/src/surfaces/progress.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/resolveCloseButtonColor.d.ts +9 -0
- package/lib/typescript/commonjs/src/surfaces/resolveCloseButtonColor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/resolveModalLayout.d.ts +36 -0
- package/lib/typescript/commonjs/src/surfaces/resolveModalLayout.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/resolveTooltipLayout.d.ts +24 -0
- package/lib/typescript/commonjs/src/surfaces/resolveTooltipLayout.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/safeArea.d.ts +11 -0
- package/lib/typescript/commonjs/src/surfaces/safeArea.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/themeChrome.d.ts +36 -0
- package/lib/typescript/commonjs/src/surfaces/themeChrome.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipBubble.d.ts +23 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipBubble.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipCutout.d.ts +31 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipCutout.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipNotch.d.ts +29 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipNotch.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/computeTooltipPosition.d.ts +43 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/computeTooltipPosition.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/inferTooltipPlacement.d.ts +34 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/inferTooltipPlacement.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/parseBackdropPadding.d.ts +3 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/parseBackdropPadding.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/rect.d.ts +29 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/rect.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/useUserflowScreen.d.ts +10 -0
- package/lib/typescript/commonjs/src/useUserflowScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/version.d.ts +3 -0
- package/lib/typescript/commonjs/src/version.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/anchors/AnchorRegistry.d.ts +32 -0
- package/lib/typescript/module/src/anchors/AnchorRegistry.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/AutoAnchorRegistry.d.ts +113 -0
- package/lib/typescript/module/src/anchors/AutoAnchorRegistry.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/ScrollContainerRegistry.d.ts +46 -0
- package/lib/typescript/module/src/anchors/ScrollContainerRegistry.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/anchorChangeTicker.d.ts +30 -0
- package/lib/typescript/module/src/anchors/anchorChangeTicker.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/animationFrame.d.ts +21 -0
- package/lib/typescript/module/src/anchors/animationFrame.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/autoAnchor.d.ts +31 -0
- package/lib/typescript/module/src/anchors/autoAnchor.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/elementConditionEvaluator.d.ts +21 -0
- package/lib/typescript/module/src/anchors/elementConditionEvaluator.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/FiberScanRoot.d.ts +41 -0
- package/lib/typescript/module/src/anchors/fiber/FiberScanRoot.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/fiberInternals.d.ts +48 -0
- package/lib/typescript/module/src/anchors/fiber/fiberInternals.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/findAnchorFiber.d.ts +33 -0
- package/lib/typescript/module/src/anchors/fiber/findAnchorFiber.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/findScrollAncestors.d.ts +47 -0
- package/lib/typescript/module/src/anchors/fiber/findScrollAncestors.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/measureHostFiber.d.ts +20 -0
- package/lib/typescript/module/src/anchors/fiber/measureHostFiber.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts +42 -0
- package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/hintsCodec.d.ts +40 -0
- package/lib/typescript/module/src/anchors/hintsCodec.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts +32 -0
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/resolveManualAnchorId.d.ts +6 -0
- package/lib/typescript/module/src/anchors/resolveManualAnchorId.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/scrollAnchorIntoView.d.ts +59 -0
- package/lib/typescript/module/src/anchors/scrollAnchorIntoView.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/scrollConfig.d.ts +30 -0
- package/lib/typescript/module/src/anchors/scrollConfig.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/targetPressMonitor.d.ts +64 -0
- package/lib/typescript/module/src/anchors/targetPressMonitor.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/useUserflowAnchor.d.ts +30 -0
- package/lib/typescript/module/src/anchors/useUserflowAnchor.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/useUserflowScrollContainer.d.ts +34 -0
- package/lib/typescript/module/src/anchors/useUserflowScrollContainer.d.ts.map +1 -0
- package/lib/typescript/module/src/anonymousId.d.ts +5 -0
- package/lib/typescript/module/src/anonymousId.d.ts.map +1 -0
- package/lib/typescript/module/src/content/RichContentRenderer.d.ts +21 -0
- package/lib/typescript/module/src/content/RichContentRenderer.d.ts.map +1 -0
- package/lib/typescript/module/src/content/StepButton.d.ts +13 -0
- package/lib/typescript/module/src/content/StepButton.d.ts.map +1 -0
- package/lib/typescript/module/src/content/buttonAppearance.d.ts +8 -0
- package/lib/typescript/module/src/content/buttonAppearance.d.ts.map +1 -0
- package/lib/typescript/module/src/content/deserialize.d.ts +27 -0
- package/lib/typescript/module/src/content/deserialize.d.ts.map +1 -0
- package/lib/typescript/module/src/content/imageLayout.d.ts +13 -0
- package/lib/typescript/module/src/content/imageLayout.d.ts.map +1 -0
- package/lib/typescript/module/src/content/migrateFlowBlocks.d.ts +12 -0
- package/lib/typescript/module/src/content/migrateFlowBlocks.d.ts.map +1 -0
- package/lib/typescript/module/src/content/openSafeUrl.d.ts +12 -0
- package/lib/typescript/module/src/content/openSafeUrl.d.ts.map +1 -0
- package/lib/typescript/module/src/content/resolveStepButtonChrome.d.ts +24 -0
- package/lib/typescript/module/src/content/resolveStepButtonChrome.d.ts.map +1 -0
- package/lib/typescript/module/src/content/themeColor.d.ts +43 -0
- package/lib/typescript/module/src/content/themeColor.d.ts.map +1 -0
- package/lib/typescript/module/src/content/types.d.ts +144 -0
- package/lib/typescript/module/src/content/types.d.ts.map +1 -0
- package/lib/typescript/module/src/deepLinking.d.ts +54 -0
- package/lib/typescript/module/src/deepLinking.d.ts.map +1 -0
- package/lib/typescript/module/src/expo-router/UserflowExpoRouterScreenTracker.d.ts +3 -0
- package/lib/typescript/module/src/expo-router/UserflowExpoRouterScreenTracker.d.ts.map +1 -0
- package/lib/typescript/module/src/expo-router/getExpoRouterScreenTracker.d.ts +13 -0
- package/lib/typescript/module/src/expo-router/getExpoRouterScreenTracker.d.ts.map +1 -0
- package/lib/typescript/module/src/expo-router/index.d.ts +3 -0
- package/lib/typescript/module/src/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/module/src/expo-router/useUserflowExpoRouter.d.ts +17 -0
- package/lib/typescript/module/src/expo-router/useUserflowExpoRouter.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +112 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/lifecycle.d.ts +96 -0
- package/lib/typescript/module/src/lifecycle.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/WithUserflowReactNavigation.d.ts +21 -0
- package/lib/typescript/module/src/navigation/WithUserflowReactNavigation.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/chainCallbacks.d.ts +3 -0
- package/lib/typescript/module/src/navigation/chainCallbacks.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/getActiveRouteName.d.ts +6 -0
- package/lib/typescript/module/src/navigation/getActiveRouteName.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/index.d.ts +5 -0
- package/lib/typescript/module/src/navigation/index.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/openFlowNavigateUrl.d.ts +33 -0
- package/lib/typescript/module/src/navigation/openFlowNavigateUrl.d.ts.map +1 -0
- package/lib/typescript/module/src/network.d.ts +42 -0
- package/lib/typescript/module/src/network.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/PairingController.d.ts +104 -0
- package/lib/typescript/module/src/pairing/PairingController.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/PreviewModeBanner.d.ts +11 -0
- package/lib/typescript/module/src/pairing/PreviewModeBanner.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/deepLink.d.ts +53 -0
- package/lib/typescript/module/src/pairing/deepLink.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/diagnostics.d.ts +52 -0
- package/lib/typescript/module/src/pairing/diagnostics.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/index.d.ts +10 -0
- package/lib/typescript/module/src/pairing/index.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/pairingRuntime.d.ts +24 -0
- package/lib/typescript/module/src/pairing/pairingRuntime.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/tokenStorage.d.ts +16 -0
- package/lib/typescript/module/src/pairing/tokenStorage.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/usePairingState.d.ts +4 -0
- package/lib/typescript/module/src/pairing/usePairingState.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/FlowRenderer.d.ts +13 -0
- package/lib/typescript/module/src/runtime/FlowRenderer.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/FlowSurfaceFade.d.ts +13 -0
- package/lib/typescript/module/src/runtime/FlowSurfaceFade.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts +16 -0
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/UserflowProvider.d.ts +32 -0
- package/lib/typescript/module/src/runtime/UserflowProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/clientConditions.d.ts +10 -0
- package/lib/typescript/module/src/runtime/clientConditions.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/flowEngine.d.ts +17 -0
- package/lib/typescript/module/src/runtime/flowEngine.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/flowSessionViewState.d.ts +18 -0
- package/lib/typescript/module/src/runtime/flowSessionViewState.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/useFlowSessionState.d.ts +10 -0
- package/lib/typescript/module/src/runtime/useFlowSessionState.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/userflowCore.d.ts +3 -0
- package/lib/typescript/module/src/runtime/userflowCore.d.ts.map +1 -0
- package/lib/typescript/module/src/screenTracker.d.ts +28 -0
- package/lib/typescript/module/src/screenTracker.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/CloseButton.d.ts +8 -0
- package/lib/typescript/module/src/surfaces/CloseButton.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/MadeWithUserflow.d.ts +28 -0
- package/lib/typescript/module/src/surfaces/MadeWithUserflow.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/ModalSurface.d.ts +23 -0
- package/lib/typescript/module/src/surfaces/ModalSurface.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/ProgressBar.d.ts +19 -0
- package/lib/typescript/module/src/surfaces/ProgressBar.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts +17 -0
- package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/absoluteFill.d.ts +18 -0
- package/lib/typescript/module/src/surfaces/absoluteFill.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/parseBackdropOpacity.d.ts +5 -0
- package/lib/typescript/module/src/surfaces/parseBackdropOpacity.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/progress.d.ts +14 -0
- package/lib/typescript/module/src/surfaces/progress.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/resolveCloseButtonColor.d.ts +9 -0
- package/lib/typescript/module/src/surfaces/resolveCloseButtonColor.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/resolveModalLayout.d.ts +36 -0
- package/lib/typescript/module/src/surfaces/resolveModalLayout.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/resolveTooltipLayout.d.ts +24 -0
- package/lib/typescript/module/src/surfaces/resolveTooltipLayout.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/safeArea.d.ts +11 -0
- package/lib/typescript/module/src/surfaces/safeArea.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/themeChrome.d.ts +36 -0
- package/lib/typescript/module/src/surfaces/themeChrome.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipBubble.d.ts +23 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipBubble.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipCutout.d.ts +31 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipCutout.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipNotch.d.ts +29 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipNotch.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/computeTooltipPosition.d.ts +43 -0
- package/lib/typescript/module/src/surfaces/tooltip/computeTooltipPosition.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/inferTooltipPlacement.d.ts +34 -0
- package/lib/typescript/module/src/surfaces/tooltip/inferTooltipPlacement.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/parseBackdropPadding.d.ts +3 -0
- package/lib/typescript/module/src/surfaces/tooltip/parseBackdropPadding.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/rect.d.ts +29 -0
- package/lib/typescript/module/src/surfaces/tooltip/rect.d.ts.map +1 -0
- package/lib/typescript/module/src/useUserflowScreen.d.ts +10 -0
- package/lib/typescript/module/src/useUserflowScreen.d.ts.map +1 -0
- package/lib/typescript/module/src/version.d.ts +3 -0
- package/lib/typescript/module/src/version.d.ts.map +1 -0
- package/package.json +144 -0
- package/src/anchors/AnchorRegistry.ts +81 -0
- package/src/anchors/AutoAnchorRegistry.ts +439 -0
- package/src/anchors/ScrollContainerRegistry.ts +108 -0
- package/src/anchors/anchorChangeTicker.ts +84 -0
- package/src/anchors/animationFrame.ts +88 -0
- package/src/anchors/autoAnchor.ts +310 -0
- package/src/anchors/elementConditionEvaluator.ts +108 -0
- package/src/anchors/fiber/FiberScanRoot.tsx +98 -0
- package/src/anchors/fiber/fiberInternals.ts +181 -0
- package/src/anchors/fiber/findAnchorFiber.ts +225 -0
- package/src/anchors/fiber/findScrollAncestors.ts +229 -0
- package/src/anchors/fiber/measureHostFiber.ts +85 -0
- package/src/anchors/fiber/visibleScreens.ts +173 -0
- package/src/anchors/hintsCodec.ts +125 -0
- package/src/anchors/resolveAnchorHost.ts +102 -0
- package/src/anchors/resolveManualAnchorId.ts +10 -0
- package/src/anchors/scrollAnchorIntoView.ts +251 -0
- package/src/anchors/scrollConfig.ts +61 -0
- package/src/anchors/targetPressMonitor.ts +127 -0
- package/src/anchors/useUserflowAnchor.ts +88 -0
- package/src/anchors/useUserflowScrollContainer.ts +86 -0
- package/src/anonymousId.ts +38 -0
- package/src/content/RichContentRenderer.tsx +721 -0
- package/src/content/StepButton.tsx +70 -0
- package/src/content/buttonAppearance.ts +11 -0
- package/src/content/deserialize.ts +147 -0
- package/src/content/imageLayout.ts +29 -0
- package/src/content/migrateFlowBlocks.ts +39 -0
- package/src/content/openSafeUrl.ts +30 -0
- package/src/content/resolveStepButtonChrome.ts +122 -0
- package/src/content/themeColor.ts +98 -0
- package/src/content/types.ts +189 -0
- package/src/deepLinking.ts +182 -0
- package/src/expo-router/UserflowExpoRouterScreenTracker.tsx +7 -0
- package/src/expo-router/getExpoRouterScreenTracker.ts +49 -0
- package/src/expo-router/index.ts +2 -0
- package/src/expo-router/useUserflowExpoRouter.ts +40 -0
- package/src/index.ts +362 -0
- package/src/lifecycle.ts +253 -0
- package/src/navigation/WithUserflowReactNavigation.tsx +87 -0
- package/src/navigation/chainCallbacks.ts +12 -0
- package/src/navigation/getActiveRouteName.ts +18 -0
- package/src/navigation/index.ts +11 -0
- package/src/navigation/openFlowNavigateUrl.ts +113 -0
- package/src/network.ts +113 -0
- package/src/pairing/PairingController.ts +356 -0
- package/src/pairing/PreviewModeBanner.tsx +130 -0
- package/src/pairing/deepLink.ts +128 -0
- package/src/pairing/diagnostics.ts +135 -0
- package/src/pairing/index.ts +19 -0
- package/src/pairing/pairingRuntime.ts +76 -0
- package/src/pairing/tokenStorage.ts +76 -0
- package/src/pairing/usePairingState.ts +43 -0
- package/src/runtime/FlowRenderer.tsx +60 -0
- package/src/runtime/FlowSurfaceFade.tsx +55 -0
- package/src/runtime/TargetPressBridge.tsx +86 -0
- package/src/runtime/UserflowProvider.tsx +89 -0
- package/src/runtime/clientConditions.ts +42 -0
- package/src/runtime/flowEngine.ts +53 -0
- package/src/runtime/flowSessionViewState.ts +55 -0
- package/src/runtime/useFlowSessionState.ts +36 -0
- package/src/runtime/userflowCore.ts +8 -0
- package/src/screenTracker.ts +83 -0
- package/src/surfaces/CloseButton.tsx +41 -0
- package/src/surfaces/MadeWithUserflow.tsx +103 -0
- package/src/surfaces/ModalSurface.tsx +215 -0
- package/src/surfaces/ProgressBar.tsx +142 -0
- package/src/surfaces/TooltipSurface.tsx +743 -0
- package/src/surfaces/absoluteFill.ts +24 -0
- package/src/surfaces/assets/png.d.ts +4 -0
- package/src/surfaces/assets/userflow-logomark.png +0 -0
- package/src/surfaces/parseBackdropOpacity.ts +13 -0
- package/src/surfaces/progress.ts +37 -0
- package/src/surfaces/resolveCloseButtonColor.ts +23 -0
- package/src/surfaces/resolveModalLayout.ts +85 -0
- package/src/surfaces/resolveTooltipLayout.ts +73 -0
- package/src/surfaces/safeArea.ts +48 -0
- package/src/surfaces/themeChrome.ts +126 -0
- package/src/surfaces/tooltip/TooltipBubble.tsx +123 -0
- package/src/surfaces/tooltip/TooltipCutout.tsx +110 -0
- package/src/surfaces/tooltip/TooltipNotch.tsx +67 -0
- package/src/surfaces/tooltip/computeTooltipPosition.ts +125 -0
- package/src/surfaces/tooltip/inferTooltipPlacement.ts +109 -0
- package/src/surfaces/tooltip/parseBackdropPadding.ts +8 -0
- package/src/surfaces/tooltip/rect.ts +62 -0
- package/src/useUserflowScreen.ts +17 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { PairingEngineState } from '@userflow-tech/core';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Pressable, StyleSheet, Text, View } from 'react-native';
|
|
4
|
+
|
|
5
|
+
export interface PreviewModeBannerProps {
|
|
6
|
+
state: PairingEngineState;
|
|
7
|
+
onExit: () => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Overlay chrome for Builder pairing preview mode.
|
|
12
|
+
*/
|
|
13
|
+
export function PreviewModeBanner({
|
|
14
|
+
state,
|
|
15
|
+
onExit,
|
|
16
|
+
}: PreviewModeBannerProps): React.ReactElement | null {
|
|
17
|
+
if (!state.previewActive && state.status === 'idle') return null;
|
|
18
|
+
if (
|
|
19
|
+
!state.previewActive &&
|
|
20
|
+
state.status !== 'token_expired' &&
|
|
21
|
+
state.status !== 'device_already_paired' &&
|
|
22
|
+
state.status !== 'error'
|
|
23
|
+
) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const needsRescan = state.needsRescan;
|
|
28
|
+
// No pairing id means the session never started (e.g. init failed), so
|
|
29
|
+
// "Pairing ended" would misdescribe it.
|
|
30
|
+
const neverPaired = state.status === 'error' && !state.previewActive && state.pairingId === null;
|
|
31
|
+
const title = neverPaired
|
|
32
|
+
? 'Preview unavailable'
|
|
33
|
+
: needsRescan
|
|
34
|
+
? 'Pairing ended'
|
|
35
|
+
: 'Preview mode';
|
|
36
|
+
const detail =
|
|
37
|
+
state.lastError ??
|
|
38
|
+
(state.status === 'reconnecting'
|
|
39
|
+
? 'Reconnecting…'
|
|
40
|
+
: state.status === 'connecting'
|
|
41
|
+
? 'Connecting to Builder…'
|
|
42
|
+
: // Mirrors the Builder's own wording. Without this the banner reads
|
|
43
|
+
// "Paired" while the flow is absent, which looks like a broken preview
|
|
44
|
+
// rather than a condition that has not matched yet.
|
|
45
|
+
state.awaitingStartCondition
|
|
46
|
+
? 'Waiting for auto-start condition to trigger…'
|
|
47
|
+
: 'Paired with Userflow Builder');
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<View style={styles.wrap} pointerEvents="box-none">
|
|
51
|
+
<View style={[styles.banner, needsRescan ? styles.bannerWarn : styles.bannerActive]}>
|
|
52
|
+
<View style={styles.textCol}>
|
|
53
|
+
<Text style={styles.title}>{title}</Text>
|
|
54
|
+
<Text style={styles.detail} numberOfLines={2}>
|
|
55
|
+
{needsRescan ? `${detail} Re-scan the QR code to continue.` : detail}
|
|
56
|
+
</Text>
|
|
57
|
+
</View>
|
|
58
|
+
{!needsRescan ? (
|
|
59
|
+
<Pressable
|
|
60
|
+
accessibilityRole="button"
|
|
61
|
+
accessibilityLabel="Exit preview"
|
|
62
|
+
onPress={onExit}
|
|
63
|
+
style={styles.button}
|
|
64
|
+
>
|
|
65
|
+
<Text style={styles.buttonLabel}>Exit preview</Text>
|
|
66
|
+
</Pressable>
|
|
67
|
+
) : (
|
|
68
|
+
<Pressable
|
|
69
|
+
accessibilityRole="button"
|
|
70
|
+
accessibilityLabel="Dismiss pairing message"
|
|
71
|
+
onPress={onExit}
|
|
72
|
+
style={styles.button}
|
|
73
|
+
>
|
|
74
|
+
<Text style={styles.buttonLabel}>Dismiss</Text>
|
|
75
|
+
</Pressable>
|
|
76
|
+
)}
|
|
77
|
+
</View>
|
|
78
|
+
</View>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const styles = StyleSheet.create({
|
|
83
|
+
wrap: {
|
|
84
|
+
position: 'absolute',
|
|
85
|
+
top: 0,
|
|
86
|
+
left: 0,
|
|
87
|
+
right: 0,
|
|
88
|
+
zIndex: 1000,
|
|
89
|
+
},
|
|
90
|
+
banner: {
|
|
91
|
+
marginTop: 48,
|
|
92
|
+
marginHorizontal: 12,
|
|
93
|
+
borderRadius: 10,
|
|
94
|
+
paddingHorizontal: 12,
|
|
95
|
+
paddingVertical: 10,
|
|
96
|
+
flexDirection: 'row',
|
|
97
|
+
alignItems: 'center',
|
|
98
|
+
gap: 10,
|
|
99
|
+
},
|
|
100
|
+
bannerActive: {
|
|
101
|
+
backgroundColor: 'rgba(17, 24, 39, 0.92)',
|
|
102
|
+
},
|
|
103
|
+
bannerWarn: {
|
|
104
|
+
backgroundColor: 'rgba(127, 29, 29, 0.94)',
|
|
105
|
+
},
|
|
106
|
+
textCol: {
|
|
107
|
+
flex: 1,
|
|
108
|
+
},
|
|
109
|
+
title: {
|
|
110
|
+
color: '#ffffff',
|
|
111
|
+
fontSize: 13,
|
|
112
|
+
fontWeight: '700',
|
|
113
|
+
},
|
|
114
|
+
detail: {
|
|
115
|
+
color: 'rgba(255,255,255,0.85)',
|
|
116
|
+
fontSize: 12,
|
|
117
|
+
marginTop: 2,
|
|
118
|
+
},
|
|
119
|
+
button: {
|
|
120
|
+
paddingHorizontal: 10,
|
|
121
|
+
paddingVertical: 8,
|
|
122
|
+
borderRadius: 8,
|
|
123
|
+
backgroundColor: 'rgba(255,255,255,0.14)',
|
|
124
|
+
},
|
|
125
|
+
buttonLabel: {
|
|
126
|
+
color: '#ffffff',
|
|
127
|
+
fontSize: 12,
|
|
128
|
+
fontWeight: '600',
|
|
129
|
+
},
|
|
130
|
+
});
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse Builder pairing deep links:
|
|
3
|
+
* {scheme_id}://?pairing_token=<jwt>
|
|
4
|
+
*
|
|
5
|
+
* `scheme_id` is typically `userflow-<digits>`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export interface PairingDeepLink {
|
|
9
|
+
scheme: string;
|
|
10
|
+
pairingToken: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Scheme prefix shared by preview and pairing links. */
|
|
14
|
+
const USERFLOW_SCHEME_PREFIX = 'userflow-';
|
|
15
|
+
const USERFLOW_SCHEME = /^userflow-\d+$/i;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Why a URL was not treated as a pairing link.
|
|
19
|
+
*
|
|
20
|
+
* `bad-scheme-shape` and `missing-token` are only reported for URLs that
|
|
21
|
+
* actually target pairing (root with a `pairing_token` query), so callers can
|
|
22
|
+
* tell a misconfigured pairing attempt apart from an unrelated link. See
|
|
23
|
+
* {@link isPairingAttempt}.
|
|
24
|
+
*/
|
|
25
|
+
export type PairingDeepLinkRejection =
|
|
26
|
+
| 'not-userflow'
|
|
27
|
+
| 'foreign-scheme'
|
|
28
|
+
| 'bad-scheme-shape'
|
|
29
|
+
| 'unparseable'
|
|
30
|
+
| 'not-pair-path'
|
|
31
|
+
| 'missing-token';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Rejections where the URL was a recognisable pairing attempt that could not be
|
|
35
|
+
* used. These are worth reporting; everything else belongs to the host app.
|
|
36
|
+
*/
|
|
37
|
+
export type PairingAttemptRejection = 'foreign-scheme' | 'bad-scheme-shape' | 'missing-token';
|
|
38
|
+
|
|
39
|
+
export type PairingDeepLinkResult =
|
|
40
|
+
| { ok: true; link: PairingDeepLink }
|
|
41
|
+
| { ok: false; reason: PairingDeepLinkRejection };
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* True when a rejected URL was nonetheless a recognisable pairing attempt rather
|
|
45
|
+
* than someone else's deep link.
|
|
46
|
+
*
|
|
47
|
+
* Callers use this to decide whether a rejection is worth reporting. Preview
|
|
48
|
+
* links accept any `userflow-*` scheme, so scheme shape alone cannot be the
|
|
49
|
+
* signal — reporting on it would flag valid preview links as broken pairing.
|
|
50
|
+
*/
|
|
51
|
+
export function isPairingAttempt(
|
|
52
|
+
reason: PairingDeepLinkRejection,
|
|
53
|
+
): reason is PairingAttemptRejection {
|
|
54
|
+
return reason === 'foreign-scheme' || reason === 'bad-scheme-shape' || reason === 'missing-token';
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Parse `url` as a pairing deep link, reporting why it was rejected.
|
|
59
|
+
* Prefer this over {@link parsePairingDeepLink} when the reason matters.
|
|
60
|
+
*/
|
|
61
|
+
export function inspectPairingDeepLink(url: string | null | undefined): PairingDeepLinkResult {
|
|
62
|
+
if (typeof url !== 'string' || url.length === 0) {
|
|
63
|
+
return { ok: false, reason: 'not-userflow' };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const schemeMatch = /^([a-z][a-z0-9+.-]*):/i.exec(url);
|
|
67
|
+
if (!schemeMatch?.[1]) return { ok: false, reason: 'not-userflow' };
|
|
68
|
+
const scheme = schemeMatch[1];
|
|
69
|
+
const isUserflowScheme = scheme.toLowerCase().startsWith(USERFLOW_SCHEME_PREFIX);
|
|
70
|
+
|
|
71
|
+
// Parse before judging the scheme: a pairing link opened with the host app's
|
|
72
|
+
// own scheme still needs to be recognisable so it can be reported.
|
|
73
|
+
//
|
|
74
|
+
// Custom schemes are not valid WHATWG URLs on their own. Strip the scheme
|
|
75
|
+
// and re-parse as https. Root forms (`://?…`, `://`) use a placeholder base
|
|
76
|
+
// so the query survives — a bare `https://?…` is an invalid URL.
|
|
77
|
+
const remainder = url.slice(scheme.length + 1).replace(/^\/\//, '');
|
|
78
|
+
let parsed: URL;
|
|
79
|
+
try {
|
|
80
|
+
if (remainder === '' || remainder.startsWith('?') || remainder.startsWith('/')) {
|
|
81
|
+
parsed = new URL(remainder === '' ? '/' : remainder, 'https://userflow.local');
|
|
82
|
+
} else {
|
|
83
|
+
parsed = new URL(`https://${remainder}`);
|
|
84
|
+
}
|
|
85
|
+
} catch {
|
|
86
|
+
return { ok: false, reason: isUserflowScheme ? 'unparseable' : 'not-userflow' };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const pairingToken = parsed.searchParams.get('pairing_token');
|
|
90
|
+
const hasPairingTokenParam = parsed.searchParams.has('pairing_token');
|
|
91
|
+
const isRoot =
|
|
92
|
+
(parsed.hostname === '' || parsed.hostname === 'userflow.local') &&
|
|
93
|
+
(parsed.pathname === '' || parsed.pathname === '/');
|
|
94
|
+
// Only the root query form is pairing. A host `/pair` route (or any other
|
|
95
|
+
// path) is left alone even when it carries `pairing_token`.
|
|
96
|
+
const isPair = isRoot && hasPairingTokenParam;
|
|
97
|
+
|
|
98
|
+
if (!isUserflowScheme) {
|
|
99
|
+
// Claim a scheme we do not own only when the URL is unmistakably ours: root
|
|
100
|
+
// form *and* our query parameter. That combination means someone swapped
|
|
101
|
+
// the environment's scheme_id for the app's own scheme.
|
|
102
|
+
return isPair ? { ok: false, reason: 'foreign-scheme' } : { ok: false, reason: 'not-userflow' };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!isPair) return { ok: false, reason: 'not-pair-path' };
|
|
106
|
+
|
|
107
|
+
// Only once the URL is known to target pairing does the scheme shape matter.
|
|
108
|
+
// Checking it earlier would misreport preview links on non-numeric schemes.
|
|
109
|
+
if (!USERFLOW_SCHEME.test(scheme)) return { ok: false, reason: 'bad-scheme-shape' };
|
|
110
|
+
|
|
111
|
+
if (!pairingToken) return { ok: false, reason: 'missing-token' };
|
|
112
|
+
|
|
113
|
+
return { ok: true, link: { scheme, pairingToken } };
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Returns pairing token details when `url` is a Userflow pairing deep link.
|
|
118
|
+
* Accepts only `userflow-*` schemes.
|
|
119
|
+
*/
|
|
120
|
+
export function parsePairingDeepLink(url: string | null | undefined): PairingDeepLink | null {
|
|
121
|
+
const result = inspectPairingDeepLink(url);
|
|
122
|
+
return result.ok ? result.link : null;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** True when the URL looks like a Userflow pairing deep link. */
|
|
126
|
+
export function isUserflowPairingUrl(url: string | null | undefined): boolean {
|
|
127
|
+
return parsePairingDeepLink(url) != null;
|
|
128
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics for Builder pairing deep links.
|
|
3
|
+
*
|
|
4
|
+
* Pairing failures are unusually easy to miss. The URL scheme is registered in
|
|
5
|
+
* the native project at build time, so the OS launches the host app from a
|
|
6
|
+
* Builder QR code whether or not the SDK is listening. When the SDK then drops
|
|
7
|
+
* the link, the app looks like it simply "opened and did nothing".
|
|
8
|
+
*
|
|
9
|
+
* Every drop path routes through a message below so the reason is visible.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { PairingAttemptRejection } from './deepLink';
|
|
13
|
+
|
|
14
|
+
const PREFIX = '[Userflow]';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Hide the pairing token before a URL reaches the console. It is a bearer
|
|
18
|
+
* credential for the pairing session, and these messages are printed verbatim.
|
|
19
|
+
*/
|
|
20
|
+
function redactPairingToken(url: string): string {
|
|
21
|
+
return url.replace(/(pairing_token=)[^&]+/i, '$1<redacted>');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Sink for pairing diagnostics. Injected in tests. */
|
|
25
|
+
export type PairingLogger = (message: string) => void;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Default logger. Pairing links only ever arrive from a deliberate developer
|
|
29
|
+
* action (scanning or opening a Builder QR code), so these warn unconditionally
|
|
30
|
+
* rather than behind `__DEV__` — a swallowed pairing link is otherwise
|
|
31
|
+
* undiagnosable, and this cannot fire for real end users.
|
|
32
|
+
*/
|
|
33
|
+
export const defaultPairingLogger: PairingLogger = (message) => {
|
|
34
|
+
// eslint-disable-next-line no-console -- intentional pairing diagnostic
|
|
35
|
+
console.warn(message);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** A pairing link arrived while `Userflow.init()` was still in flight. */
|
|
39
|
+
export function pairingLinkDeferredMessage(): string {
|
|
40
|
+
return (
|
|
41
|
+
`${PREFIX} Builder pairing link received before Userflow.init() finished. ` +
|
|
42
|
+
`Holding it and will connect as soon as init resolves.`
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A pairing link arrived but `Userflow.init()` rejected, so there is no session
|
|
48
|
+
* to attach the preview to.
|
|
49
|
+
*/
|
|
50
|
+
export function pairingLinkInitFailedMessage(reason: string): string {
|
|
51
|
+
return (
|
|
52
|
+
`${PREFIX} Builder pairing link received, but Userflow.init() failed so pairing ` +
|
|
53
|
+
`cannot start: ${reason}. Fix the init error — most often an invalid clientToken ` +
|
|
54
|
+
`or an unreachable serverEndpoint — then re-open the pairing link.`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Pairing was reachable but the connection itself failed (expired token, device
|
|
60
|
+
* already paired, backend unreachable). Never fatal to the host app.
|
|
61
|
+
*/
|
|
62
|
+
export function pairingConnectFailedMessage(reason: string): string {
|
|
63
|
+
return (
|
|
64
|
+
`${PREFIX} Builder pairing could not connect: ${reason}. The app is unaffected — ` +
|
|
65
|
+
`re-open the pairing link from the Builder to try again.`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** A pairing link arrived without the `pairing_token` query parameter. */
|
|
70
|
+
export function pairingMissingTokenMessage(url: string): string {
|
|
71
|
+
return (
|
|
72
|
+
`${PREFIX} Ignoring Builder pairing link "${redactPairingToken(url)}": no ` +
|
|
73
|
+
`"pairing_token" query parameter. Open the link straight from the Builder QR ` +
|
|
74
|
+
`code rather than reconstructing it by hand.`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* A pairing link arrived on a scheme Userflow does not own — almost always the
|
|
80
|
+
* host app's own scheme substituted for the environment's `scheme_id`.
|
|
81
|
+
*/
|
|
82
|
+
export function pairingForeignSchemeMessage(url: string): string {
|
|
83
|
+
return (
|
|
84
|
+
`${PREFIX} Ignoring "${redactPairingToken(url)}": this is a Builder pairing ` +
|
|
85
|
+
`link, but it was opened with a scheme Userflow does not own. Use your ` +
|
|
86
|
+
`environment's scheme_id ("userflow-" followed by digits) exactly as the ` +
|
|
87
|
+
`pairing QR code provides it — do not substitute your app's own scheme. ` +
|
|
88
|
+
`Register it via the @userflow-tech/expo plugin ({ schemeId: 'userflow-…' }) and ` +
|
|
89
|
+
`rebuild the native app; a Metro reload is not enough.`
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Message for a pairing attempt that could not be used. */
|
|
94
|
+
export function pairingAttemptRejectionMessage(
|
|
95
|
+
reason: PairingAttemptRejection,
|
|
96
|
+
url: string,
|
|
97
|
+
): string {
|
|
98
|
+
switch (reason) {
|
|
99
|
+
case 'foreign-scheme':
|
|
100
|
+
return pairingForeignSchemeMessage(url);
|
|
101
|
+
case 'bad-scheme-shape':
|
|
102
|
+
return pairingSchemeShapeMessage(url);
|
|
103
|
+
case 'missing-token':
|
|
104
|
+
return pairingMissingTokenMessage(url);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Clearing the persisted pairing token failed. Best-effort, never fatal. */
|
|
109
|
+
export function pairingTokenStoreClearFailedMessage(reason: string): string {
|
|
110
|
+
return (
|
|
111
|
+
`${PREFIX} Could not clear the stored pairing token: ${reason}. Continuing — ` +
|
|
112
|
+
`a stale preview may survive an app restart until you exit preview manually.`
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Attaching the deep-link listeners failed, which disables pairing entirely. */
|
|
117
|
+
export function pairingListenerSetupFailedMessage(reason: string): string {
|
|
118
|
+
return (
|
|
119
|
+
`${PREFIX} Could not start Builder pairing listeners: ${reason}. Pairing deep ` +
|
|
120
|
+
`links will be ignored for this session; the rest of the SDK is unaffected.`
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The URL used a `userflow-` scheme that is not a valid `scheme_id`. Pairing
|
|
126
|
+
* requires `userflow-` followed by digits, so an arbitrary `userflow-*` scheme
|
|
127
|
+
* can match preview links but not pairing ones.
|
|
128
|
+
*/
|
|
129
|
+
export function pairingSchemeShapeMessage(url: string): string {
|
|
130
|
+
return (
|
|
131
|
+
`${PREFIX} Ignoring Builder pairing link "${redactPairingToken(url)}": the scheme must be your ` +
|
|
132
|
+
`environment's scheme_id — "userflow-" followed by digits (e.g. userflow-257587). ` +
|
|
133
|
+
`Check the schemeId passed to the @userflow-tech/expo plugin.`
|
|
134
|
+
);
|
|
135
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export {
|
|
2
|
+
inspectPairingDeepLink,
|
|
3
|
+
isPairingAttempt,
|
|
4
|
+
parsePairingDeepLink,
|
|
5
|
+
isUserflowPairingUrl,
|
|
6
|
+
} from './deepLink';
|
|
7
|
+
export type {
|
|
8
|
+
PairingAttemptRejection,
|
|
9
|
+
PairingDeepLink,
|
|
10
|
+
PairingDeepLinkRejection,
|
|
11
|
+
PairingDeepLinkResult,
|
|
12
|
+
} from './deepLink';
|
|
13
|
+
export type { PairingLogger } from './diagnostics';
|
|
14
|
+
export { PairingController } from './PairingController';
|
|
15
|
+
export type { PairingControllerOptions, PairingControllerListener } from './PairingController';
|
|
16
|
+
export { PreviewModeBanner } from './PreviewModeBanner';
|
|
17
|
+
export type { PreviewModeBannerProps } from './PreviewModeBanner';
|
|
18
|
+
export { createMemoryPairingTokenStore, createPairingTokenStore } from './tokenStorage';
|
|
19
|
+
export type { PairingTokenStore } from './tokenStorage';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { UserflowCore } from '@userflow-tech/core';
|
|
2
|
+
|
|
3
|
+
import { PairingController, type PairingControllerOptions } from './PairingController';
|
|
4
|
+
|
|
5
|
+
let controller: PairingController | null = null;
|
|
6
|
+
const installListeners = new Set<(controller: PairingController) => void>();
|
|
7
|
+
|
|
8
|
+
/** Return the singleton if it already exists — never creates one. */
|
|
9
|
+
export function peekPairingController(): PairingController | null {
|
|
10
|
+
return controller;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function getPairingController(core: UserflowCore): PairingController {
|
|
14
|
+
if (!controller) {
|
|
15
|
+
controller = new PairingController({ core });
|
|
16
|
+
notifyInstall(controller);
|
|
17
|
+
}
|
|
18
|
+
return controller;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Ensure the singleton exists with init-time options. Idempotent once the
|
|
23
|
+
* controller has started listening — subsequent {@link Userflow.init} calls
|
|
24
|
+
* reuse it so AppState/Linking listeners are not stacked.
|
|
25
|
+
*
|
|
26
|
+
* If a bare controller was created early (e.g. a hook peek race that used
|
|
27
|
+
* {@link getPairingController}) but has not started yet, it is replaced so
|
|
28
|
+
* init-time options such as `pairingEndpoint` / `clearLocalSession` apply.
|
|
29
|
+
*/
|
|
30
|
+
export function installPairingController(
|
|
31
|
+
core: UserflowCore,
|
|
32
|
+
options?: Omit<PairingControllerOptions, 'core'>,
|
|
33
|
+
): PairingController {
|
|
34
|
+
if (!controller) {
|
|
35
|
+
controller = new PairingController({ core, ...options });
|
|
36
|
+
notifyInstall(controller);
|
|
37
|
+
return controller;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!controller.hasStarted()) {
|
|
41
|
+
controller.stop();
|
|
42
|
+
controller = new PairingController({ core, ...options });
|
|
43
|
+
notifyInstall(controller);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return controller;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Subscribe to singleton install/replace. Immediately invokes `listener` when
|
|
51
|
+
* a controller already exists. Used by hooks that must not create the
|
|
52
|
+
* singleton before {@link Userflow.init}.
|
|
53
|
+
*/
|
|
54
|
+
export function onPairingController(listener: (controller: PairingController) => void): () => void {
|
|
55
|
+
if (controller) listener(controller);
|
|
56
|
+
installListeners.add(listener);
|
|
57
|
+
return () => {
|
|
58
|
+
installListeners.delete(listener);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function notifyInstall(next: PairingController): void {
|
|
63
|
+
for (const listener of installListeners) {
|
|
64
|
+
try {
|
|
65
|
+
listener(next);
|
|
66
|
+
} catch {
|
|
67
|
+
// ignore
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Test helper: drop the singleton. */
|
|
73
|
+
export function __resetPairingControllerForTests(): void {
|
|
74
|
+
controller?.stop();
|
|
75
|
+
controller = null;
|
|
76
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persist the pairing JWT for reconnect within the current app session.
|
|
3
|
+
* Cleared on SDK init / exit preview / app restart (pairing exits on restart).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const STORAGE_KEY = 'userflow:pairingToken';
|
|
7
|
+
|
|
8
|
+
export interface PairingTokenStore {
|
|
9
|
+
get(): Promise<string | null>;
|
|
10
|
+
set(token: string): Promise<void>;
|
|
11
|
+
clear(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type SecureStoreModule = {
|
|
15
|
+
getItemAsync(key: string): Promise<string | null>;
|
|
16
|
+
setItemAsync(key: string, value: string): Promise<void>;
|
|
17
|
+
deleteItemAsync(key: string): Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
function tryLoadExpoSecureStore(): SecureStoreModule | null {
|
|
21
|
+
try {
|
|
22
|
+
// Optional peer — absent in bare RN without expo-secure-store.
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires -- optional peer at import time
|
|
24
|
+
return require('expo-secure-store') as SecureStoreModule;
|
|
25
|
+
} catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** In-memory store used when SecureStore is unavailable (and in tests). */
|
|
31
|
+
export function createMemoryPairingTokenStore(): PairingTokenStore {
|
|
32
|
+
let value: string | null = null;
|
|
33
|
+
return {
|
|
34
|
+
async get() {
|
|
35
|
+
return value;
|
|
36
|
+
},
|
|
37
|
+
async set(token: string) {
|
|
38
|
+
value = token;
|
|
39
|
+
},
|
|
40
|
+
async clear() {
|
|
41
|
+
value = null;
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Prefer expo-secure-store (Keychain / Keystore); fall back to memory.
|
|
48
|
+
*/
|
|
49
|
+
export function createPairingTokenStore(): PairingTokenStore {
|
|
50
|
+
const secure = tryLoadExpoSecureStore();
|
|
51
|
+
if (!secure) return createMemoryPairingTokenStore();
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
async get() {
|
|
55
|
+
try {
|
|
56
|
+
return await secure.getItemAsync(STORAGE_KEY);
|
|
57
|
+
} catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
async set(token: string) {
|
|
62
|
+
try {
|
|
63
|
+
await secure.setItemAsync(STORAGE_KEY, token);
|
|
64
|
+
} catch {
|
|
65
|
+
// Best-effort; reconnect still works from in-memory PairingEngine token.
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
async clear() {
|
|
69
|
+
try {
|
|
70
|
+
await secure.deleteItemAsync(STORAGE_KEY);
|
|
71
|
+
} catch {
|
|
72
|
+
// ignore
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { PairingEngineState } from '@userflow-tech/core';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import type { PairingController } from './PairingController';
|
|
5
|
+
import { onPairingController, peekPairingController } from './pairingRuntime';
|
|
6
|
+
|
|
7
|
+
const IDLE: PairingEngineState = {
|
|
8
|
+
status: 'idle',
|
|
9
|
+
pairingId: null,
|
|
10
|
+
deviceId: null,
|
|
11
|
+
previewActive: false,
|
|
12
|
+
lastError: null,
|
|
13
|
+
needsRescan: false,
|
|
14
|
+
awaitingStartCondition: false,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/** Subscribe to Builder pairing / preview-mode state (dev builds only). */
|
|
18
|
+
export function usePairingState(): PairingEngineState {
|
|
19
|
+
const [state, setState] = React.useState<PairingEngineState>(
|
|
20
|
+
() => peekPairingController()?.getState() ?? IDLE,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
let unsubState: (() => void) | undefined;
|
|
25
|
+
|
|
26
|
+
const bind = (controller: PairingController) => {
|
|
27
|
+
unsubState?.();
|
|
28
|
+
setState(controller.getState());
|
|
29
|
+
unsubState = controller.onStateChange(setState);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const existing = peekPairingController();
|
|
33
|
+
if (existing) bind(existing);
|
|
34
|
+
const unsubInstall = onPairingController(bind);
|
|
35
|
+
|
|
36
|
+
return () => {
|
|
37
|
+
unsubInstall();
|
|
38
|
+
unsubState?.();
|
|
39
|
+
};
|
|
40
|
+
}, []);
|
|
41
|
+
|
|
42
|
+
return state;
|
|
43
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { genSessionDataLookup } from '@userflow-tech/core';
|
|
2
|
+
import type { FlowSessionEngine } from '@userflow-tech/core';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
|
|
5
|
+
import { ModalSurface } from '../surfaces/ModalSurface';
|
|
6
|
+
import { TooltipSurface } from '../surfaces/TooltipSurface';
|
|
7
|
+
|
|
8
|
+
import { FlowSurfaceFade } from './FlowSurfaceFade';
|
|
9
|
+
import { useFlowSessionState } from './useFlowSessionState';
|
|
10
|
+
|
|
11
|
+
export interface FlowRendererProps {
|
|
12
|
+
engine: FlowSessionEngine;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function appearanceOf(step: { appearance: unknown }): string {
|
|
16
|
+
return String(step.appearance).toUpperCase();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Renders the active flow step.
|
|
21
|
+
*
|
|
22
|
+
* TOOLTIP → {@link TooltipSurface}; everything else → {@link ModalSurface}
|
|
23
|
+
* (BUBBLE/HIDDEN remain centered-card fallbacks until dedicated surfaces).
|
|
24
|
+
*/
|
|
25
|
+
export function FlowRenderer({ engine }: FlowRendererProps): React.ReactElement | null {
|
|
26
|
+
const { session, currentStep } = useFlowSessionState(engine);
|
|
27
|
+
const lookupAttribute = React.useMemo(
|
|
28
|
+
() => genSessionDataLookup(session?.data ?? []),
|
|
29
|
+
[session?.data],
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
if (!session || !currentStep) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const theme = currentStep.theme ?? session.version.theme;
|
|
37
|
+
const appearance = appearanceOf(currentStep);
|
|
38
|
+
const animationKey = `${session.id}:${currentStep.id}:${appearance}`;
|
|
39
|
+
|
|
40
|
+
const surface =
|
|
41
|
+
appearance === 'TOOLTIP' ? (
|
|
42
|
+
<TooltipSurface
|
|
43
|
+
engine={engine}
|
|
44
|
+
session={session}
|
|
45
|
+
currentStep={currentStep}
|
|
46
|
+
theme={theme}
|
|
47
|
+
lookupAttribute={lookupAttribute}
|
|
48
|
+
/>
|
|
49
|
+
) : (
|
|
50
|
+
<ModalSurface
|
|
51
|
+
engine={engine}
|
|
52
|
+
session={session}
|
|
53
|
+
currentStep={currentStep}
|
|
54
|
+
theme={theme}
|
|
55
|
+
lookupAttribute={lookupAttribute}
|
|
56
|
+
/>
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return <FlowSurfaceFade animationKey={animationKey}>{surface}</FlowSurfaceFade>;
|
|
60
|
+
}
|