@userflow-tech/react-native 0.4.5 → 0.6.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/README.md +31 -2
- package/docs/anchoring.md +6 -1
- package/docs/custom-fonts.md +36 -0
- package/docs/troubleshooting.md +33 -6
- package/lib/commonjs/anchors/AutoAnchorRegistry.js +144 -34
- package/lib/commonjs/anchors/AutoAnchorRegistry.js.map +1 -1
- package/lib/commonjs/anchors/animationFrame.js +29 -1
- package/lib/commonjs/anchors/animationFrame.js.map +1 -1
- package/lib/commonjs/anchors/appActive.js +61 -0
- package/lib/commonjs/anchors/appActive.js.map +1 -0
- package/lib/commonjs/anchors/elementConditionEvaluator.js +25 -8
- package/lib/commonjs/anchors/elementConditionEvaluator.js.map +1 -1
- package/lib/commonjs/anchors/elementTapMonitor.js +67 -12
- package/lib/commonjs/anchors/elementTapMonitor.js.map +1 -1
- package/lib/commonjs/anchors/elementTargetMatch.js +33 -7
- package/lib/commonjs/anchors/elementTargetMatch.js.map +1 -1
- package/lib/commonjs/anchors/fiber/FiberScanRootStore.js +8 -0
- package/lib/commonjs/anchors/fiber/FiberScanRootStore.js.map +1 -1
- package/lib/commonjs/anchors/fiber/detectAppFontFamily.js +341 -0
- package/lib/commonjs/anchors/fiber/detectAppFontFamily.js.map +1 -0
- package/lib/commonjs/anchors/fiber/fiberInternals.js +66 -0
- package/lib/commonjs/anchors/fiber/fiberInternals.js.map +1 -1
- package/lib/commonjs/anchors/fiber/indexHostFibers.js +4 -3
- package/lib/commonjs/anchors/fiber/indexHostFibers.js.map +1 -1
- package/lib/commonjs/anchors/fiber/resolveFiberPath.js +30 -15
- package/lib/commonjs/anchors/fiber/resolveFiberPath.js.map +1 -1
- package/lib/commonjs/anchors/fiber/visibleScreens.js +6 -0
- package/lib/commonjs/anchors/fiber/visibleScreens.js.map +1 -1
- package/lib/commonjs/anchors/fiberAnchorCache.js +20 -0
- package/lib/commonjs/anchors/fiberAnchorCache.js.map +1 -1
- package/lib/commonjs/anchors/gestureHandlerHandoff.js +304 -0
- package/lib/commonjs/anchors/gestureHandlerHandoff.js.map +1 -0
- package/lib/commonjs/anchors/resolveAnchorHost.js +6 -0
- package/lib/commonjs/anchors/resolveAnchorHost.js.map +1 -1
- package/lib/commonjs/anchors/resolveAutoAnchorHost.js +11 -6
- package/lib/commonjs/anchors/resolveAutoAnchorHost.js.map +1 -1
- package/lib/commonjs/anchors/resolveElementTargets.js +63 -8
- package/lib/commonjs/anchors/resolveElementTargets.js.map +1 -1
- package/lib/commonjs/anchors/semanticMatcher.js +43 -21
- package/lib/commonjs/anchors/semanticMatcher.js.map +1 -1
- package/lib/commonjs/anchors/tapSlop.js +16 -0
- package/lib/commonjs/anchors/tapSlop.js.map +1 -0
- package/lib/commonjs/anchors/targetPressMonitor.js +66 -12
- package/lib/commonjs/anchors/targetPressMonitor.js.map +1 -1
- package/lib/commonjs/authoring/fingerprintFromInstance.js +5 -9
- package/lib/commonjs/authoring/fingerprintFromInstance.js.map +1 -1
- package/lib/commonjs/content/BannerStepButton.js +2 -1
- package/lib/commonjs/content/BannerStepButton.js.map +1 -1
- package/lib/commonjs/content/RichContentRenderer.js +20 -14
- package/lib/commonjs/content/RichContentRenderer.js.map +1 -1
- package/lib/commonjs/content/StepButton.js +2 -1
- package/lib/commonjs/content/StepButton.js.map +1 -1
- package/lib/commonjs/content/openSafeUrl.js +3 -1
- package/lib/commonjs/content/openSafeUrl.js.map +1 -1
- package/lib/commonjs/content/resolveContentFontFamily.js +96 -0
- package/lib/commonjs/content/resolveContentFontFamily.js.map +1 -0
- package/lib/commonjs/expo-router/useUserflowExpoRouter.js +6 -0
- package/lib/commonjs/expo-router/useUserflowExpoRouter.js.map +1 -1
- package/lib/commonjs/index.js +21 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/navigation/navigateUrlUtils.js +105 -0
- package/lib/commonjs/navigation/navigateUrlUtils.js.map +1 -0
- package/lib/commonjs/navigation/openExternalNavigateUrl.js +14 -0
- package/lib/commonjs/navigation/openExternalNavigateUrl.js.map +1 -0
- package/lib/commonjs/navigation/openFlowNavigateUrl.js +47 -41
- package/lib/commonjs/navigation/openFlowNavigateUrl.js.map +1 -1
- package/lib/commonjs/pairing/PairingController.js +3 -1
- package/lib/commonjs/pairing/PairingController.js.map +1 -1
- package/lib/commonjs/runtime/BannerHost.js +38 -29
- package/lib/commonjs/runtime/BannerHost.js.map +1 -1
- package/lib/commonjs/runtime/TargetPressBridge.js +55 -7
- package/lib/commonjs/runtime/TargetPressBridge.js.map +1 -1
- package/lib/commonjs/runtime/UserflowOverlay.js +5 -11
- package/lib/commonjs/runtime/UserflowOverlay.js.map +1 -1
- package/lib/commonjs/runtime/UserflowProvider.js +66 -40
- package/lib/commonjs/runtime/UserflowProvider.js.map +1 -1
- package/lib/commonjs/runtime/bannerEngine.js +8 -2
- package/lib/commonjs/runtime/bannerEngine.js.map +1 -1
- package/lib/commonjs/runtime/bannerFlowSpacer.js +71 -0
- package/lib/commonjs/runtime/bannerFlowSpacer.js.map +1 -0
- package/lib/commonjs/runtime/flowEngine.js +11 -0
- package/lib/commonjs/runtime/flowEngine.js.map +1 -1
- package/lib/commonjs/runtime/previewStart.js +39 -0
- package/lib/commonjs/runtime/previewStart.js.map +1 -0
- package/lib/commonjs/runtime/pushBannerLayoutContext.js +101 -0
- package/lib/commonjs/runtime/pushBannerLayoutContext.js.map +1 -0
- package/lib/commonjs/screenTracker.js +12 -0
- package/lib/commonjs/screenTracker.js.map +1 -1
- package/lib/commonjs/surfaces/BannerBar.js +79 -61
- package/lib/commonjs/surfaces/BannerBar.js.map +1 -1
- package/lib/commonjs/surfaces/BannerSurface.js +28 -6
- package/lib/commonjs/surfaces/BannerSurface.js.map +1 -1
- package/lib/commonjs/surfaces/ProgressBar.js +2 -1
- package/lib/commonjs/surfaces/ProgressBar.js.map +1 -1
- package/lib/commonjs/surfaces/TooltipSurface.js +48 -41
- package/lib/commonjs/surfaces/TooltipSurface.js.map +1 -1
- package/lib/commonjs/surfaces/bannerBarLayout.js +77 -10
- package/lib/commonjs/surfaces/bannerBarLayout.js.map +1 -1
- package/lib/commonjs/surfaces/bannerWebView/BannerWebViewBar.js +114 -63
- package/lib/commonjs/surfaces/bannerWebView/BannerWebViewBar.js.map +1 -1
- package/lib/commonjs/surfaces/bannerWebView/bannerNeedsWebView.js +3 -33
- package/lib/commonjs/surfaces/bannerWebView/bannerNeedsWebView.js.map +1 -1
- package/lib/commonjs/surfaces/bannerWebView/bannerThemeStyles.js +2 -1
- package/lib/commonjs/surfaces/bannerWebView/bannerThemeStyles.js.map +1 -1
- package/lib/commonjs/surfaces/bannerWebView/bannerWebViewHeight.js +33 -0
- package/lib/commonjs/surfaces/bannerWebView/bannerWebViewHeight.js.map +1 -0
- package/lib/commonjs/surfaces/bannerWebView/buildCustomBannerHtml.js +104 -23
- package/lib/commonjs/surfaces/bannerWebView/buildCustomBannerHtml.js.map +1 -1
- package/lib/commonjs/surfaces/hostAccessibilityTrap.js +28 -0
- package/lib/commonjs/surfaces/hostAccessibilityTrap.js.map +1 -0
- package/lib/commonjs/surfaces/resolveBannerTheme.js +6 -3
- package/lib/commonjs/surfaces/resolveBannerTheme.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/TooltipBubble.js +3 -2
- package/lib/commonjs/surfaces/tooltip/TooltipBubble.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/targetSearchSchedule.js +134 -0
- package/lib/commonjs/surfaces/tooltip/targetSearchSchedule.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/module/anchors/AutoAnchorRegistry.js +145 -35
- package/lib/module/anchors/AutoAnchorRegistry.js.map +1 -1
- package/lib/module/anchors/animationFrame.js +29 -2
- package/lib/module/anchors/animationFrame.js.map +1 -1
- package/lib/module/anchors/appActive.js +57 -0
- package/lib/module/anchors/appActive.js.map +1 -0
- package/lib/module/anchors/elementConditionEvaluator.js +26 -9
- package/lib/module/anchors/elementConditionEvaluator.js.map +1 -1
- package/lib/module/anchors/elementTapMonitor.js +67 -12
- package/lib/module/anchors/elementTapMonitor.js.map +1 -1
- package/lib/module/anchors/elementTargetMatch.js +32 -7
- package/lib/module/anchors/elementTargetMatch.js.map +1 -1
- package/lib/module/anchors/fiber/FiberScanRootStore.js +8 -0
- package/lib/module/anchors/fiber/FiberScanRootStore.js.map +1 -1
- package/lib/module/anchors/fiber/detectAppFontFamily.js +330 -0
- package/lib/module/anchors/fiber/detectAppFontFamily.js.map +1 -0
- package/lib/module/anchors/fiber/fiberInternals.js +65 -0
- package/lib/module/anchors/fiber/fiberInternals.js.map +1 -1
- package/lib/module/anchors/fiber/indexHostFibers.js +4 -3
- package/lib/module/anchors/fiber/indexHostFibers.js.map +1 -1
- package/lib/module/anchors/fiber/resolveFiberPath.js +30 -15
- package/lib/module/anchors/fiber/resolveFiberPath.js.map +1 -1
- package/lib/module/anchors/fiber/visibleScreens.js +5 -0
- package/lib/module/anchors/fiber/visibleScreens.js.map +1 -1
- package/lib/module/anchors/fiberAnchorCache.js +19 -0
- package/lib/module/anchors/fiberAnchorCache.js.map +1 -1
- package/lib/module/anchors/gestureHandlerHandoff.js +298 -0
- package/lib/module/anchors/gestureHandlerHandoff.js.map +1 -0
- package/lib/module/anchors/resolveAnchorHost.js +1 -0
- package/lib/module/anchors/resolveAnchorHost.js.map +1 -1
- package/lib/module/anchors/resolveAutoAnchorHost.js +11 -6
- package/lib/module/anchors/resolveAutoAnchorHost.js.map +1 -1
- package/lib/module/anchors/resolveElementTargets.js +63 -8
- package/lib/module/anchors/resolveElementTargets.js.map +1 -1
- package/lib/module/anchors/semanticMatcher.js +43 -21
- package/lib/module/anchors/semanticMatcher.js.map +1 -1
- package/lib/module/anchors/tapSlop.js +11 -0
- package/lib/module/anchors/tapSlop.js.map +1 -0
- package/lib/module/anchors/targetPressMonitor.js +53 -8
- package/lib/module/anchors/targetPressMonitor.js.map +1 -1
- package/lib/module/authoring/fingerprintFromInstance.js +6 -10
- package/lib/module/authoring/fingerprintFromInstance.js.map +1 -1
- package/lib/module/content/BannerStepButton.js +2 -1
- package/lib/module/content/BannerStepButton.js.map +1 -1
- package/lib/module/content/RichContentRenderer.js +20 -14
- package/lib/module/content/RichContentRenderer.js.map +1 -1
- package/lib/module/content/StepButton.js +2 -1
- package/lib/module/content/StepButton.js.map +1 -1
- package/lib/module/content/openSafeUrl.js +3 -1
- package/lib/module/content/openSafeUrl.js.map +1 -1
- package/lib/module/content/resolveContentFontFamily.js +89 -0
- package/lib/module/content/resolveContentFontFamily.js.map +1 -0
- package/lib/module/expo-router/useUserflowExpoRouter.js +7 -1
- package/lib/module/expo-router/useUserflowExpoRouter.js.map +1 -1
- package/lib/module/index.js +24 -7
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigation/navigateUrlUtils.js +94 -0
- package/lib/module/navigation/navigateUrlUtils.js.map +1 -0
- package/lib/module/navigation/openExternalNavigateUrl.js +11 -0
- package/lib/module/navigation/openExternalNavigateUrl.js.map +1 -0
- package/lib/module/navigation/openFlowNavigateUrl.js +22 -36
- package/lib/module/navigation/openFlowNavigateUrl.js.map +1 -1
- package/lib/module/pairing/PairingController.js +3 -1
- package/lib/module/pairing/PairingController.js.map +1 -1
- package/lib/module/runtime/BannerHost.js +38 -29
- package/lib/module/runtime/BannerHost.js.map +1 -1
- package/lib/module/runtime/TargetPressBridge.js +56 -8
- package/lib/module/runtime/TargetPressBridge.js.map +1 -1
- package/lib/module/runtime/UserflowOverlay.js +5 -11
- package/lib/module/runtime/UserflowOverlay.js.map +1 -1
- package/lib/module/runtime/UserflowProvider.js +66 -40
- package/lib/module/runtime/UserflowProvider.js.map +1 -1
- package/lib/module/runtime/bannerEngine.js +7 -2
- package/lib/module/runtime/bannerEngine.js.map +1 -1
- package/lib/module/runtime/bannerFlowSpacer.js +65 -0
- package/lib/module/runtime/bannerFlowSpacer.js.map +1 -0
- package/lib/module/runtime/flowEngine.js +11 -0
- package/lib/module/runtime/flowEngine.js.map +1 -1
- package/lib/module/runtime/previewStart.js +35 -0
- package/lib/module/runtime/previewStart.js.map +1 -0
- package/lib/module/runtime/pushBannerLayoutContext.js +94 -0
- package/lib/module/runtime/pushBannerLayoutContext.js.map +1 -0
- package/lib/module/screenTracker.js +11 -0
- package/lib/module/screenTracker.js.map +1 -1
- package/lib/module/surfaces/BannerBar.js +80 -62
- package/lib/module/surfaces/BannerBar.js.map +1 -1
- package/lib/module/surfaces/BannerSurface.js +28 -6
- package/lib/module/surfaces/BannerSurface.js.map +1 -1
- package/lib/module/surfaces/ProgressBar.js +2 -1
- package/lib/module/surfaces/ProgressBar.js.map +1 -1
- package/lib/module/surfaces/TooltipSurface.js +49 -42
- package/lib/module/surfaces/TooltipSurface.js.map +1 -1
- package/lib/module/surfaces/bannerBarLayout.js +72 -11
- package/lib/module/surfaces/bannerBarLayout.js.map +1 -1
- package/lib/module/surfaces/bannerWebView/BannerWebViewBar.js +115 -64
- package/lib/module/surfaces/bannerWebView/BannerWebViewBar.js.map +1 -1
- package/lib/module/surfaces/bannerWebView/bannerNeedsWebView.js +3 -31
- package/lib/module/surfaces/bannerWebView/bannerNeedsWebView.js.map +1 -1
- package/lib/module/surfaces/bannerWebView/bannerThemeStyles.js +2 -1
- package/lib/module/surfaces/bannerWebView/bannerThemeStyles.js.map +1 -1
- package/lib/module/surfaces/bannerWebView/bannerWebViewHeight.js +29 -0
- package/lib/module/surfaces/bannerWebView/bannerWebViewHeight.js.map +1 -0
- package/lib/module/surfaces/bannerWebView/buildCustomBannerHtml.js +104 -23
- package/lib/module/surfaces/bannerWebView/buildCustomBannerHtml.js.map +1 -1
- package/lib/module/surfaces/hostAccessibilityTrap.js +24 -0
- package/lib/module/surfaces/hostAccessibilityTrap.js.map +1 -0
- package/lib/module/surfaces/resolveBannerTheme.js +6 -3
- package/lib/module/surfaces/resolveBannerTheme.js.map +1 -1
- package/lib/module/surfaces/tooltip/TooltipBubble.js +3 -2
- package/lib/module/surfaces/tooltip/TooltipBubble.js.map +1 -1
- package/lib/module/surfaces/tooltip/targetSearchSchedule.js +128 -0
- package/lib/module/surfaces/tooltip/targetSearchSchedule.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/src/anchors/AutoAnchorRegistry.d.ts +36 -2
- package/lib/typescript/commonjs/src/anchors/AutoAnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/animationFrame.d.ts +0 -4
- package/lib/typescript/commonjs/src/anchors/animationFrame.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/appActive.d.ts +8 -0
- package/lib/typescript/commonjs/src/anchors/appActive.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/elementTapMonitor.d.ts +17 -0
- package/lib/typescript/commonjs/src/anchors/elementTapMonitor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/elementTargetMatch.d.ts +7 -0
- package/lib/typescript/commonjs/src/anchors/elementTargetMatch.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts +5 -0
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/detectAppFontFamily.d.ts +30 -0
- package/lib/typescript/commonjs/src/anchors/fiber/detectAppFontFamily.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/fiberInternals.d.ts +7 -0
- package/lib/typescript/commonjs/src/anchors/fiber/fiberInternals.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/indexHostFibers.d.ts +3 -2
- package/lib/typescript/commonjs/src/anchors/fiber/indexHostFibers.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/resolveFiberPath.d.ts +3 -0
- package/lib/typescript/commonjs/src/anchors/fiber/resolveFiberPath.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts +2 -0
- package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiberAnchorCache.d.ts +5 -0
- package/lib/typescript/commonjs/src/anchors/fiberAnchorCache.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/gestureHandlerHandoff.d.ts +70 -0
- package/lib/typescript/commonjs/src/anchors/gestureHandlerHandoff.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts +1 -0
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/resolveAutoAnchorHost.d.ts +11 -4
- package/lib/typescript/commonjs/src/anchors/resolveAutoAnchorHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/resolveElementTargets.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/semanticMatcher.d.ts +2 -0
- package/lib/typescript/commonjs/src/anchors/semanticMatcher.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/tapSlop.d.ts +9 -0
- package/lib/typescript/commonjs/src/anchors/tapSlop.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/targetPressMonitor.d.ts +13 -8
- package/lib/typescript/commonjs/src/anchors/targetPressMonitor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/authoring/fingerprintFromInstance.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/content/BannerStepButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/content/RichContentRenderer.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/content/StepButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/content/openSafeUrl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/content/resolveContentFontFamily.d.ts +35 -0
- package/lib/typescript/commonjs/src/content/resolveContentFontFamily.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/expo-router/useUserflowExpoRouter.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +6 -5
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/navigation/navigateUrlUtils.d.ts +15 -0
- package/lib/typescript/commonjs/src/navigation/navigateUrlUtils.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/openExternalNavigateUrl.d.ts +3 -0
- package/lib/typescript/commonjs/src/navigation/openExternalNavigateUrl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigation/openFlowNavigateUrl.d.ts +2 -5
- package/lib/typescript/commonjs/src/navigation/openFlowNavigateUrl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/PairingController.d.ts +6 -0
- package/lib/typescript/commonjs/src/pairing/PairingController.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/BannerHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts +3 -0
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/UserflowOverlay.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/UserflowProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/bannerEngine.d.ts +5 -1
- package/lib/typescript/commonjs/src/runtime/bannerEngine.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/bannerFlowSpacer.d.ts +15 -0
- package/lib/typescript/commonjs/src/runtime/bannerFlowSpacer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/flowEngine.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/previewStart.d.ts +13 -0
- package/lib/typescript/commonjs/src/runtime/previewStart.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/pushBannerLayoutContext.d.ts +22 -0
- package/lib/typescript/commonjs/src/runtime/pushBannerLayoutContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/screenTracker.d.ts +6 -0
- package/lib/typescript/commonjs/src/screenTracker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/BannerBar.d.ts +3 -1
- package/lib/typescript/commonjs/src/surfaces/BannerBar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts +6 -5
- package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/ProgressBar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts +1 -1
- package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/bannerBarLayout.d.ts +17 -0
- package/lib/typescript/commonjs/src/surfaces/bannerBarLayout.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/BannerWebViewBar.d.ts +3 -1
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/BannerWebViewBar.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts +3 -12
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerThemeStyles.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts +13 -0
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/bannerWebView/buildCustomBannerHtml.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/hostAccessibilityTrap.d.ts +14 -0
- package/lib/typescript/commonjs/src/surfaces/hostAccessibilityTrap.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/resolveBannerTheme.d.ts +4 -1
- package/lib/typescript/commonjs/src/surfaces/resolveBannerTheme.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipBubble.d.ts +7 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipBubble.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/targetSearchSchedule.d.ts +60 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/targetSearchSchedule.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/version.d.ts +1 -1
- package/lib/typescript/module/src/anchors/AutoAnchorRegistry.d.ts +36 -2
- package/lib/typescript/module/src/anchors/AutoAnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/animationFrame.d.ts +0 -4
- package/lib/typescript/module/src/anchors/animationFrame.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/appActive.d.ts +8 -0
- package/lib/typescript/module/src/anchors/appActive.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/elementTapMonitor.d.ts +17 -0
- package/lib/typescript/module/src/anchors/elementTapMonitor.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/elementTargetMatch.d.ts +7 -0
- package/lib/typescript/module/src/anchors/elementTargetMatch.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts +5 -0
- package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/detectAppFontFamily.d.ts +30 -0
- package/lib/typescript/module/src/anchors/fiber/detectAppFontFamily.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/fiberInternals.d.ts +7 -0
- package/lib/typescript/module/src/anchors/fiber/fiberInternals.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/indexHostFibers.d.ts +3 -2
- package/lib/typescript/module/src/anchors/fiber/indexHostFibers.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/resolveFiberPath.d.ts +3 -0
- package/lib/typescript/module/src/anchors/fiber/resolveFiberPath.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts +2 -0
- package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiberAnchorCache.d.ts +5 -0
- package/lib/typescript/module/src/anchors/fiberAnchorCache.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/gestureHandlerHandoff.d.ts +70 -0
- package/lib/typescript/module/src/anchors/gestureHandlerHandoff.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts +1 -0
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/resolveAutoAnchorHost.d.ts +11 -4
- package/lib/typescript/module/src/anchors/resolveAutoAnchorHost.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/resolveElementTargets.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/semanticMatcher.d.ts +2 -0
- package/lib/typescript/module/src/anchors/semanticMatcher.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/tapSlop.d.ts +9 -0
- package/lib/typescript/module/src/anchors/tapSlop.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/targetPressMonitor.d.ts +13 -8
- package/lib/typescript/module/src/anchors/targetPressMonitor.d.ts.map +1 -1
- package/lib/typescript/module/src/authoring/fingerprintFromInstance.d.ts.map +1 -1
- package/lib/typescript/module/src/content/BannerStepButton.d.ts.map +1 -1
- package/lib/typescript/module/src/content/RichContentRenderer.d.ts.map +1 -1
- package/lib/typescript/module/src/content/StepButton.d.ts.map +1 -1
- package/lib/typescript/module/src/content/openSafeUrl.d.ts.map +1 -1
- package/lib/typescript/module/src/content/resolveContentFontFamily.d.ts +35 -0
- package/lib/typescript/module/src/content/resolveContentFontFamily.d.ts.map +1 -0
- package/lib/typescript/module/src/expo-router/useUserflowExpoRouter.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +6 -5
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/navigation/navigateUrlUtils.d.ts +15 -0
- package/lib/typescript/module/src/navigation/navigateUrlUtils.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/openExternalNavigateUrl.d.ts +3 -0
- package/lib/typescript/module/src/navigation/openExternalNavigateUrl.d.ts.map +1 -0
- package/lib/typescript/module/src/navigation/openFlowNavigateUrl.d.ts +2 -5
- package/lib/typescript/module/src/navigation/openFlowNavigateUrl.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/PairingController.d.ts +6 -0
- package/lib/typescript/module/src/pairing/PairingController.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/BannerHost.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts +3 -0
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/UserflowOverlay.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/UserflowProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/bannerEngine.d.ts +5 -1
- package/lib/typescript/module/src/runtime/bannerEngine.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/bannerFlowSpacer.d.ts +15 -0
- package/lib/typescript/module/src/runtime/bannerFlowSpacer.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/flowEngine.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/previewStart.d.ts +13 -0
- package/lib/typescript/module/src/runtime/previewStart.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/pushBannerLayoutContext.d.ts +22 -0
- package/lib/typescript/module/src/runtime/pushBannerLayoutContext.d.ts.map +1 -0
- package/lib/typescript/module/src/screenTracker.d.ts +6 -0
- package/lib/typescript/module/src/screenTracker.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/BannerBar.d.ts +3 -1
- package/lib/typescript/module/src/surfaces/BannerBar.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/BannerSurface.d.ts +6 -5
- package/lib/typescript/module/src/surfaces/BannerSurface.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/ProgressBar.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts +1 -1
- package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/bannerBarLayout.d.ts +17 -0
- package/lib/typescript/module/src/surfaces/bannerBarLayout.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/bannerWebView/BannerWebViewBar.d.ts +3 -1
- package/lib/typescript/module/src/surfaces/bannerWebView/BannerWebViewBar.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts +3 -12
- package/lib/typescript/module/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/bannerWebView/bannerThemeStyles.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts +13 -0
- package/lib/typescript/module/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/bannerWebView/buildCustomBannerHtml.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/hostAccessibilityTrap.d.ts +14 -0
- package/lib/typescript/module/src/surfaces/hostAccessibilityTrap.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/resolveBannerTheme.d.ts +4 -1
- package/lib/typescript/module/src/surfaces/resolveBannerTheme.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/TooltipBubble.d.ts +7 -1
- package/lib/typescript/module/src/surfaces/tooltip/TooltipBubble.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/targetSearchSchedule.d.ts +60 -0
- package/lib/typescript/module/src/surfaces/tooltip/targetSearchSchedule.d.ts.map +1 -0
- package/lib/typescript/module/src/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/anchors/AutoAnchorRegistry.ts +166 -35
- package/src/anchors/animationFrame.ts +31 -1
- package/src/anchors/appActive.ts +63 -0
- package/src/anchors/elementConditionEvaluator.ts +29 -12
- package/src/anchors/elementTapMonitor.ts +68 -10
- package/src/anchors/elementTargetMatch.ts +34 -7
- package/src/anchors/fiber/FiberScanRootStore.ts +8 -0
- package/src/anchors/fiber/detectAppFontFamily.ts +400 -0
- package/src/anchors/fiber/fiberInternals.ts +68 -0
- package/src/anchors/fiber/indexHostFibers.ts +8 -3
- package/src/anchors/fiber/resolveFiberPath.ts +25 -16
- package/src/anchors/fiber/visibleScreens.ts +5 -0
- package/src/anchors/fiberAnchorCache.ts +19 -0
- package/src/anchors/gestureHandlerHandoff.ts +356 -0
- package/src/anchors/resolveAnchorHost.ts +2 -0
- package/src/anchors/resolveAutoAnchorHost.ts +18 -8
- package/src/anchors/resolveElementTargets.ts +64 -7
- package/src/anchors/semanticMatcher.ts +48 -27
- package/src/anchors/tapSlop.ts +18 -0
- package/src/anchors/targetPressMonitor.ts +56 -19
- package/src/authoring/fingerprintFromInstance.ts +4 -5
- package/src/content/BannerStepButton.tsx +2 -1
- package/src/content/RichContentRenderer.tsx +19 -13
- package/src/content/StepButton.tsx +2 -1
- package/src/content/openSafeUrl.ts +3 -1
- package/src/content/resolveContentFontFamily.ts +119 -0
- package/src/expo-router/useUserflowExpoRouter.ts +10 -1
- package/src/index.ts +22 -9
- package/src/navigation/navigateUrlUtils.ts +100 -0
- package/src/navigation/openExternalNavigateUrl.ts +9 -0
- package/src/navigation/openFlowNavigateUrl.ts +36 -36
- package/src/pairing/PairingController.ts +9 -1
- package/src/runtime/BannerHost.tsx +41 -23
- package/src/runtime/TargetPressBridge.tsx +66 -9
- package/src/runtime/UserflowOverlay.tsx +7 -9
- package/src/runtime/UserflowProvider.tsx +56 -32
- package/src/runtime/bannerEngine.ts +10 -2
- package/src/runtime/bannerFlowSpacer.tsx +70 -0
- package/src/runtime/flowEngine.ts +11 -0
- package/src/runtime/previewStart.ts +49 -0
- package/src/runtime/pushBannerLayoutContext.tsx +126 -0
- package/src/screenTracker.ts +11 -0
- package/src/surfaces/BannerBar.tsx +93 -55
- package/src/surfaces/BannerSurface.tsx +61 -9
- package/src/surfaces/ProgressBar.tsx +2 -1
- package/src/surfaces/TooltipSurface.tsx +78 -53
- package/src/surfaces/bannerBarLayout.ts +80 -7
- package/src/surfaces/bannerWebView/BannerWebViewBar.tsx +151 -57
- package/src/surfaces/bannerWebView/bannerNeedsWebView.ts +4 -36
- package/src/surfaces/bannerWebView/bannerThemeStyles.ts +2 -1
- package/src/surfaces/bannerWebView/bannerWebViewHeight.ts +32 -0
- package/src/surfaces/bannerWebView/buildCustomBannerHtml.ts +111 -23
- package/src/surfaces/hostAccessibilityTrap.ts +25 -0
- package/src/surfaces/resolveBannerTheme.ts +14 -3
- package/src/surfaces/tooltip/TooltipBubble.tsx +8 -1
- package/src/surfaces/tooltip/targetSearchSchedule.ts +140 -0
- package/src/version.ts +1 -1
- package/vendor/core/dist/engine/BannerSessionEngine.d.ts +29 -2
- package/vendor/core/dist/engine/BannerSessionEngine.d.ts.map +1 -1
- package/vendor/core/dist/engine/BannerSessionEngine.js +87 -6
- package/vendor/core/dist/engine/BannerSessionEngine.js.map +1 -1
- package/vendor/core/dist/engine/ClientConditionEngine.d.ts.map +1 -1
- package/vendor/core/dist/engine/ClientConditionEngine.js +30 -7
- package/vendor/core/dist/engine/ClientConditionEngine.js.map +1 -1
- package/vendor/core/dist/engine/PairingEngine.d.ts +6 -1
- package/vendor/core/dist/engine/PairingEngine.d.ts.map +1 -1
- package/vendor/core/dist/engine/PairingEngine.js +23 -3
- package/vendor/core/dist/engine/PairingEngine.js.map +1 -1
- package/vendor/core/dist/engine/handleActions.d.ts.map +1 -1
- package/vendor/core/dist/engine/handleActions.js +67 -2
- package/vendor/core/dist/engine/handleActions.js.map +1 -1
- package/vendor/core/dist/version.d.ts +1 -1
- package/vendor/core/dist/version.js +1 -1
- package/vendor/core/package.json +1 -1
- package/vendor/protocol/dist/flows.d.ts +2 -0
- package/vendor/protocol/dist/flows.d.ts.map +1 -1
- package/vendor/protocol/package.json +1 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { FlowSessionEngine } from '@userflow-tech/core';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import {
|
|
3
|
+
decodeMobileAutoData,
|
|
4
|
+
type EndFlowReasonInput,
|
|
5
|
+
type FlowSessionFragment,
|
|
6
|
+
type FlowStepFragment,
|
|
7
|
+
type ThemeFragment,
|
|
7
8
|
} from '@userflow-tech/protocol';
|
|
8
9
|
import * as React from 'react';
|
|
9
10
|
import {
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
import { anchorRegistry } from '../anchors/AnchorRegistry';
|
|
21
22
|
import { autoAnchorRegistry } from '../anchors/AutoAnchorRegistry';
|
|
22
23
|
import { addAnimationFrameCallback, removeAnimationFrameCallback } from '../anchors/animationFrame';
|
|
24
|
+
import { isAppActive, subscribeAppActive } from '../anchors/appActive';
|
|
23
25
|
import { fiberScanRoot } from '../anchors/fiber/FiberScanRoot';
|
|
24
26
|
import type { AnyFiber } from '../anchors/fiber/fiberInternals';
|
|
25
27
|
import { clipToScrollViewports } from '../anchors/fiber/visibleRect';
|
|
@@ -27,6 +29,7 @@ import {
|
|
|
27
29
|
clearFiberAnchorCache,
|
|
28
30
|
invalidateFiberAnchor,
|
|
29
31
|
resolveAnchorHost,
|
|
32
|
+
subscribeAnchorScreenChange,
|
|
30
33
|
} from '../anchors/resolveAnchorHost';
|
|
31
34
|
import { resolveAutoAnchorHost } from '../anchors/resolveAutoAnchorHost';
|
|
32
35
|
import { resolveManualAnchorId } from '../anchors/resolveManualAnchorId';
|
|
@@ -34,6 +37,7 @@ import { scrollAnchorIntoView } from '../anchors/scrollAnchorIntoView';
|
|
|
34
37
|
import { getScrollPadding } from '../anchors/scrollConfig';
|
|
35
38
|
import { targetPressMonitor } from '../anchors/targetPressMonitor';
|
|
36
39
|
import { RichContentRenderer } from '../content/RichContentRenderer';
|
|
40
|
+
import { resolveContentFontFamily } from '../content/resolveContentFontFamily';
|
|
37
41
|
import type { LookupAttribute } from '../content/types';
|
|
38
42
|
|
|
39
43
|
import { CardFade } from './CardFade';
|
|
@@ -42,6 +46,7 @@ import { MADE_WITH_USERFLOW_GAP, MadeWithUserflow } from './MadeWithUserflow';
|
|
|
42
46
|
import { ProgressBar } from './ProgressBar';
|
|
43
47
|
import { ABSOLUTE_FILL } from './absoluteFill';
|
|
44
48
|
import { useCardTransitionPhase } from './cardTransition';
|
|
49
|
+
import { stepTrapsHostAccessibility } from './hostAccessibilityTrap';
|
|
45
50
|
import { parseBackdropOpacity } from './parseBackdropOpacity';
|
|
46
51
|
import { resolveStepProgress } from './progress';
|
|
47
52
|
import { resolveCloseButtonColor } from './resolveCloseButtonColor';
|
|
@@ -77,6 +82,7 @@ import {
|
|
|
77
82
|
tooltipSideGap,
|
|
78
83
|
tooltipVerticalGap,
|
|
79
84
|
} from './tooltip/resolveSideCardWidth';
|
|
85
|
+
import { TargetSearchSchedule } from './tooltip/targetSearchSchedule';
|
|
80
86
|
|
|
81
87
|
export interface TooltipSurfaceProps {
|
|
82
88
|
engine: FlowSessionEngine;
|
|
@@ -94,10 +100,6 @@ export interface TooltipSurfaceProps {
|
|
|
94
100
|
|
|
95
101
|
type MissingMode = 'waiting' | 'reported';
|
|
96
102
|
|
|
97
|
-
/** Interval for re-resolving a missing / remounted anchor (not for live measure). */
|
|
98
|
-
const RESOLVE_MS = 250;
|
|
99
|
-
/** Slower resolve poll after FLAG/ERROR report so a late-mounting target can recover. */
|
|
100
|
-
const RESOLVE_SLOW_MS = 1000;
|
|
101
103
|
/**
|
|
102
104
|
* One-frame delay before the first resolve after a step/reset so dialog
|
|
103
105
|
* teardown cannot arm the missing-target timer with a 0-size measure.
|
|
@@ -155,6 +157,7 @@ export function TooltipSurface({
|
|
|
155
157
|
}: TooltipSurfaceProps): React.ReactElement | null {
|
|
156
158
|
const version = session.version;
|
|
157
159
|
const chrome = resolveBubbleChrome(theme, 'tooltip');
|
|
160
|
+
const contentFontFamily = resolveContentFontFamily(theme);
|
|
158
161
|
const progress = resolveStepProgress(version, currentStep.id);
|
|
159
162
|
const showClose = !version.closeDisabled;
|
|
160
163
|
const backdropOpacity = parseBackdropOpacity(theme.backdropOpacity);
|
|
@@ -162,6 +165,11 @@ export function TooltipSurface({
|
|
|
162
165
|
const selector = currentStep.selector;
|
|
163
166
|
const isAuto = (selector?.type as string | null) === 'AUTO';
|
|
164
167
|
const autoData = selector?.autoData ?? null;
|
|
168
|
+
// Decoded once per step rather than on every search.
|
|
169
|
+
const decodedAutoData = React.useMemo(
|
|
170
|
+
() => (isAuto ? decodeMobileAutoData(autoData) : null),
|
|
171
|
+
[isAuto, autoData],
|
|
172
|
+
);
|
|
165
173
|
const anchorId = isAuto ? null : resolveManualAnchorId(selector?.css);
|
|
166
174
|
const targetKey = isAuto ? `auto:${autoData ?? ''}` : (anchorId ?? '');
|
|
167
175
|
const highlight = currentStep.backdrop ? resolveHighlightChrome(theme, backdropPadding) : null;
|
|
@@ -191,7 +199,6 @@ export function TooltipSurface({
|
|
|
191
199
|
desiredPlacement ?? 'BELOW',
|
|
192
200
|
);
|
|
193
201
|
const [missingMode, setMissingMode] = React.useState<MissingMode>('waiting');
|
|
194
|
-
const [registryTick, setRegistryTick] = React.useState(0);
|
|
195
202
|
/** True after at least one *failed* measure for the current step/anchor. */
|
|
196
203
|
const [measureAttempted, setMeasureAttempted] = React.useState(false);
|
|
197
204
|
/**
|
|
@@ -272,18 +279,6 @@ export function TooltipSurface({
|
|
|
272
279
|
};
|
|
273
280
|
}, []);
|
|
274
281
|
|
|
275
|
-
React.useEffect(() => {
|
|
276
|
-
const bump = () => setRegistryTick((n) => n + 1);
|
|
277
|
-
const unsubRegistry = anchorRegistry.subscribe(bump);
|
|
278
|
-
const unsubAuto = autoAnchorRegistry.subscribe(bump);
|
|
279
|
-
const unsubScan = fiberScanRoot.subscribe(bump);
|
|
280
|
-
return () => {
|
|
281
|
-
unsubRegistry();
|
|
282
|
-
unsubAuto();
|
|
283
|
-
unsubScan();
|
|
284
|
-
};
|
|
285
|
-
}, []);
|
|
286
|
-
|
|
287
282
|
React.useEffect(() => {
|
|
288
283
|
reportedRef.current = false;
|
|
289
284
|
scrollAttemptsRef.current = 0;
|
|
@@ -426,14 +421,14 @@ export function TooltipSurface({
|
|
|
426
421
|
);
|
|
427
422
|
|
|
428
423
|
/**
|
|
429
|
-
* Resolve the anchor host (registry / fiber scan).
|
|
430
|
-
*
|
|
424
|
+
* Resolve the anchor host (registry / fiber scan). Driven by
|
|
425
|
+
* {@link TargetSearchSchedule} — intentionally NOT on every animation frame.
|
|
431
426
|
*/
|
|
432
427
|
const resolveTarget = React.useCallback(() => {
|
|
433
428
|
if (!mountedRef.current) return;
|
|
434
429
|
|
|
435
430
|
const resolution = isAuto
|
|
436
|
-
? resolveAutoAnchorHost(
|
|
431
|
+
? resolveAutoAnchorHost(decodedAutoData)
|
|
437
432
|
: anchorId
|
|
438
433
|
? resolveAnchorHost(anchorId)
|
|
439
434
|
: null;
|
|
@@ -474,7 +469,7 @@ export function TooltipSurface({
|
|
|
474
469
|
maybeScrollIntoView(rect);
|
|
475
470
|
applyTarget(rect);
|
|
476
471
|
});
|
|
477
|
-
}, [anchorId, applyTarget,
|
|
472
|
+
}, [anchorId, applyTarget, decodedAutoData, dropHost, isAuto, maybeScrollIntoView]);
|
|
478
473
|
|
|
479
474
|
/**
|
|
480
475
|
* Live re-measure of an already-resolved host. Driven by the shared rAF hub
|
|
@@ -509,45 +504,60 @@ export function TooltipSurface({
|
|
|
509
504
|
});
|
|
510
505
|
}, [applyTarget, dropHost, maybeScrollIntoView]);
|
|
511
506
|
|
|
507
|
+
const resolveTargetRef = React.useRef(resolveTarget);
|
|
508
|
+
resolveTargetRef.current = resolveTarget;
|
|
509
|
+
const searchRef = React.useRef<TargetSearchSchedule | null>(null);
|
|
510
|
+
const searchAllowsRecovery =
|
|
511
|
+
behavior === 'FLAG' || behavior === 'ERROR' || (behavior === 'END' && session.draftMode);
|
|
512
|
+
const searchStopped = missingMode === 'reported' && !searchAllowsRecovery;
|
|
513
|
+
|
|
514
|
+
// Target search: steady poll while anchored, backoff while missing, nothing
|
|
515
|
+
// while the app is in the background. Live measurement is on rAF. A new step
|
|
516
|
+
// or target restarts it right away; a same-step restart (`resetNonce`) goes
|
|
517
|
+
// through `resolveArmed`, after the first-resolve delay.
|
|
512
518
|
React.useEffect(() => {
|
|
513
|
-
if (!resolveArmed)
|
|
514
|
-
resolveTarget();
|
|
515
|
-
}, [resolveTarget, registryTick, resolveArmed]);
|
|
516
|
-
|
|
517
|
-
// Resolve poll: recover missing / remounted anchors. Live measurement is on rAF.
|
|
518
|
-
React.useEffect(() => {
|
|
519
|
-
if (!resolveArmed) {
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
|
-
const allowsRecovery =
|
|
523
|
-
behavior === 'FLAG' || behavior === 'ERROR' || (behavior === 'END' && session.draftMode);
|
|
524
|
-
const pauseAfterReport = missingMode === 'reported' && !allowsRecovery;
|
|
525
|
-
|
|
526
|
-
if (pauseAfterReport) {
|
|
519
|
+
if (!resolveArmed || searchStopped) {
|
|
527
520
|
return;
|
|
528
521
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
const
|
|
522
|
+
const search = new TargetSearchSchedule(() => resolveTargetRef.current());
|
|
523
|
+
searchRef.current = search;
|
|
524
|
+
search.setMode(targetRef.current ? 'anchored' : 'missing');
|
|
525
|
+
|
|
526
|
+
const trigger = () => search.trigger();
|
|
527
|
+
const unsubscribers = [
|
|
528
|
+
anchorRegistry.subscribe(trigger),
|
|
529
|
+
autoAnchorRegistry.subscribe(trigger),
|
|
530
|
+
fiberScanRoot.subscribe(trigger),
|
|
531
|
+
subscribeAnchorScreenChange(() => search.rearm()),
|
|
532
|
+
subscribeAppActive((active) => (active ? search.resume() : search.pause())),
|
|
533
|
+
];
|
|
534
|
+
if (!isAppActive()) search.pause();
|
|
535
|
+
search.runNow();
|
|
536
|
+
|
|
537
|
+
const dimSub = Dimensions.addEventListener('change', () => search.runNow());
|
|
534
538
|
const onKeyboardShow = (event: { endCoordinates?: { height?: number } }) => {
|
|
535
539
|
setKeyboardBottomInset(Math.max(0, event.endCoordinates?.height ?? 0));
|
|
536
|
-
|
|
540
|
+
search.runNow();
|
|
537
541
|
};
|
|
538
542
|
const onKeyboardHide = () => {
|
|
539
543
|
setKeyboardBottomInset(0);
|
|
540
|
-
|
|
544
|
+
search.runNow();
|
|
541
545
|
};
|
|
542
546
|
const kbShow = Keyboard.addListener('keyboardDidShow', onKeyboardShow);
|
|
543
547
|
const kbHide = Keyboard.addListener('keyboardDidHide', onKeyboardHide);
|
|
544
548
|
return () => {
|
|
545
|
-
|
|
549
|
+
for (const unsubscribe of unsubscribers) unsubscribe();
|
|
546
550
|
dimSub.remove();
|
|
547
551
|
kbShow.remove();
|
|
548
552
|
kbHide.remove();
|
|
553
|
+
search.dispose();
|
|
554
|
+
if (searchRef.current === search) searchRef.current = null;
|
|
549
555
|
};
|
|
550
|
-
}, [
|
|
556
|
+
}, [resolveArmed, searchStopped, currentStep.id, targetKey]);
|
|
557
|
+
|
|
558
|
+
React.useEffect(() => {
|
|
559
|
+
searchRef.current?.setMode(target ? 'anchored' : 'missing');
|
|
560
|
+
}, [target]);
|
|
551
561
|
|
|
552
562
|
// rAF tracking while a host is resolved (and we are not paused after report).
|
|
553
563
|
React.useEffect(() => {
|
|
@@ -864,6 +874,9 @@ export function TooltipSurface({
|
|
|
864
874
|
|
|
865
875
|
const showBranding = session.flow.company.flowBranding;
|
|
866
876
|
const contentPadding = chrome.contentPadding;
|
|
877
|
+
// Modal only while the host is trapped too. Otherwise VoiceOver would skip
|
|
878
|
+
// the host app, including the target this step asks the user to press.
|
|
879
|
+
const cardIsModal = stepTrapsHostAccessibility(currentStep);
|
|
867
880
|
|
|
868
881
|
// Still pending the first measure attempt — only the blocker shows.
|
|
869
882
|
if (isMissing && missingMode === 'waiting' && !measureAttempted) {
|
|
@@ -877,7 +890,7 @@ export function TooltipSurface({
|
|
|
877
890
|
<View style={[styles.center, centerPaddingStyle]} pointerEvents="box-none">
|
|
878
891
|
<CardFade
|
|
879
892
|
testID="userflow-tooltip-waiting"
|
|
880
|
-
accessibilityViewIsModal
|
|
893
|
+
accessibilityViewIsModal={cardIsModal}
|
|
881
894
|
pointerEvents="auto"
|
|
882
895
|
style={[
|
|
883
896
|
chrome.shadowStyle,
|
|
@@ -904,6 +917,7 @@ export function TooltipSurface({
|
|
|
904
917
|
<Text
|
|
905
918
|
style={{
|
|
906
919
|
color: theme.fontColor,
|
|
920
|
+
fontFamily: contentFontFamily,
|
|
907
921
|
fontSize: theme.fontSize,
|
|
908
922
|
marginTop: 12,
|
|
909
923
|
textAlign: 'center',
|
|
@@ -951,11 +965,21 @@ export function TooltipSurface({
|
|
|
951
965
|
{showMissingUi ? (
|
|
952
966
|
<View testID="userflow-tooltip-missing">
|
|
953
967
|
<Text
|
|
954
|
-
style={[
|
|
968
|
+
style={[
|
|
969
|
+
styles.missingTitle,
|
|
970
|
+
{ color: theme.fontColor, fontFamily: contentFontFamily, fontSize: theme.fontSize },
|
|
971
|
+
]}
|
|
955
972
|
>
|
|
956
973
|
Target not found
|
|
957
974
|
</Text>
|
|
958
|
-
<Text
|
|
975
|
+
<Text
|
|
976
|
+
style={{
|
|
977
|
+
color: theme.fontColor,
|
|
978
|
+
fontFamily: contentFontFamily,
|
|
979
|
+
fontSize: theme.fontSize,
|
|
980
|
+
opacity: 0.8,
|
|
981
|
+
}}
|
|
982
|
+
>
|
|
959
983
|
This step's anchor is missing. Close to continue, or wait if the screen is still
|
|
960
984
|
loading.
|
|
961
985
|
</Text>
|
|
@@ -990,7 +1014,7 @@ export function TooltipSurface({
|
|
|
990
1014
|
<View style={[styles.center, centerPaddingStyle]} pointerEvents="box-none">
|
|
991
1015
|
<CardFade
|
|
992
1016
|
testID="userflow-tooltip-card"
|
|
993
|
-
accessibilityViewIsModal
|
|
1017
|
+
accessibilityViewIsModal={cardIsModal}
|
|
994
1018
|
pointerEvents="auto"
|
|
995
1019
|
onLayout={onCardLayout}
|
|
996
1020
|
style={[
|
|
@@ -1032,6 +1056,7 @@ export function TooltipSurface({
|
|
|
1032
1056
|
onLayout={onCardLayout}
|
|
1033
1057
|
maxHeight={layout.maxCardHeight}
|
|
1034
1058
|
showNotch={layout.showNotch}
|
|
1059
|
+
accessibilityViewIsModal={cardIsModal}
|
|
1035
1060
|
style={{
|
|
1036
1061
|
position: 'absolute',
|
|
1037
1062
|
left: layout.cardPosition.x,
|
|
@@ -3,10 +3,12 @@ import { BannerContentLayout } from '@userflow-tech/protocol';
|
|
|
3
3
|
import type { ViewStyle } from 'react-native';
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
|
+
BANNER_CLOSE_SLOT_SIZE,
|
|
6
7
|
BANNER_INNER_COLUMN_GAP,
|
|
7
8
|
BANNER_INNER_MARGIN_HORIZONTAL,
|
|
8
9
|
BANNER_INNER_ROW_GAP,
|
|
9
10
|
BANNER_OVERLAY_SCREEN_INSET_HORIZONTAL,
|
|
11
|
+
BANNER_ROOT_PADDING,
|
|
10
12
|
} from './bannerBarTokens';
|
|
11
13
|
import type { EdgeInsets } from './safeArea';
|
|
12
14
|
|
|
@@ -16,13 +18,50 @@ function optionalMargin(value: number | null | undefined): number | undefined {
|
|
|
16
18
|
return value == null ? undefined : value;
|
|
17
19
|
}
|
|
18
20
|
|
|
21
|
+
/** Fixed horizontal chrome inside the embed width (padding, close/spacer slots, inner margins). */
|
|
22
|
+
export function bannerHorizontalChromeWidth(): number {
|
|
23
|
+
return BANNER_ROOT_PADDING * 2 + BANNER_CLOSE_SLOT_SIZE * 2 + BANNER_INNER_MARGIN_HORIZONTAL * 2;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Outer bar cap — max embed width only (max content width limits the inner row on web). */
|
|
27
|
+
export function resolveBannerFrameMaxWidth(banner: BannerFragment): number | null {
|
|
28
|
+
return banner.maxWidth;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function bannerHasMaxContentWidth(banner: BannerFragment): boolean {
|
|
32
|
+
return banner.maxContentWidth != null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Cap for the native inner row and WebView HTML `.userflowjs-banner-inner` only.
|
|
37
|
+
* Returns null when max content width is unset. May be 0 when embed width is narrower than chrome.
|
|
38
|
+
*/
|
|
39
|
+
export function resolveBannerInnerMaxWidth(banner: BannerFragment): number | null {
|
|
40
|
+
if (!bannerHasMaxContentWidth(banner)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
let cap = banner.maxContentWidth!;
|
|
44
|
+
if (banner.maxWidth != null) {
|
|
45
|
+
const embedInnerCap = Math.max(0, banner.maxWidth - bannerHorizontalChromeWidth());
|
|
46
|
+
cap = Math.min(cap, embedInnerCap);
|
|
47
|
+
}
|
|
48
|
+
return cap;
|
|
49
|
+
}
|
|
50
|
+
|
|
19
51
|
/** Outer frame: max embed width and builder outer margin (web `userflowjs-banner-frame`). */
|
|
20
52
|
export function bannerFrameStyle(banner: BannerFragment): ViewStyle {
|
|
21
|
-
const
|
|
53
|
+
const frameMaxWidth = resolveBannerFrameMaxWidth(banner);
|
|
54
|
+
const hasFrameCap = frameMaxWidth != null;
|
|
22
55
|
|
|
23
56
|
return {
|
|
24
|
-
alignSelf:
|
|
25
|
-
...(
|
|
57
|
+
alignSelf: hasFrameCap ? 'center' : 'stretch',
|
|
58
|
+
...(hasFrameCap
|
|
59
|
+
? {
|
|
60
|
+
maxWidth: frameMaxWidth!,
|
|
61
|
+
width: '100%' as const,
|
|
62
|
+
overflow: 'hidden' as const,
|
|
63
|
+
}
|
|
64
|
+
: null),
|
|
26
65
|
marginTop: optionalMargin(banner.marginTop),
|
|
27
66
|
marginRight: optionalMargin(banner.marginRight),
|
|
28
67
|
marginBottom: optionalMargin(banner.marginBottom),
|
|
@@ -56,12 +95,45 @@ export function bannerInnerJustifyContent(
|
|
|
56
95
|
}
|
|
57
96
|
}
|
|
58
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Push-layout chrome: safe-area pad + bar background on the same node as the
|
|
100
|
+
* fade so an animated banner does not leave a visible status-bar strip at opacity 0.
|
|
101
|
+
*/
|
|
102
|
+
export function bannerPushLayoutChrome(
|
|
103
|
+
edge: 'top' | 'bottom',
|
|
104
|
+
insets: EdgeInsets,
|
|
105
|
+
backgroundColor: string,
|
|
106
|
+
): ViewStyle {
|
|
107
|
+
return {
|
|
108
|
+
backgroundColor,
|
|
109
|
+
paddingTop: edge === 'top' ? insets.top : 0,
|
|
110
|
+
paddingBottom: edge === 'bottom' ? insets.bottom : 0,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Matches web `.userflowjs-banner-inner { flex(1000000) }` vs start-spacer `flex(1)`. */
|
|
115
|
+
const BANNER_INNER_FLEX_GROW = 1_000_000;
|
|
116
|
+
|
|
117
|
+
/** Painted bar (`userflow-banner`) — fill the frame so max embed width clips chrome, not just margins. */
|
|
118
|
+
export function bannerBarRootStyle(banner: BannerFragment): ViewStyle {
|
|
119
|
+
if (resolveBannerFrameMaxWidth(banner) == null) {
|
|
120
|
+
return {};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
width: '100%',
|
|
124
|
+
maxWidth: '100%',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
59
128
|
export function bannerInnerStyle(banner: BannerFragment): ViewStyle {
|
|
60
|
-
const hasMaxContentWidth = banner
|
|
129
|
+
const hasMaxContentWidth = bannerHasMaxContentWidth(banner);
|
|
130
|
+
const innerMaxWidth = resolveBannerInnerMaxWidth(banner);
|
|
61
131
|
return {
|
|
62
|
-
|
|
132
|
+
// Web `.userflowjs-banner-inner { flex(1000000) }` — grow with shrink so text wraps and close stays visible.
|
|
133
|
+
flexGrow: BANNER_INNER_FLEX_GROW,
|
|
63
134
|
flexShrink: 1,
|
|
64
|
-
flexBasis: 0
|
|
135
|
+
// `auto` avoids the old `flexBasis: 0` + inner `width: 100%` sliver; `minWidth: 0` lets shrink wrap text.
|
|
136
|
+
flexBasis: hasMaxContentWidth ? ('auto' as const) : 0,
|
|
65
137
|
flexDirection: 'row',
|
|
66
138
|
flexWrap: 'wrap',
|
|
67
139
|
alignItems: 'center',
|
|
@@ -69,6 +141,7 @@ export function bannerInnerStyle(banner: BannerFragment): ViewStyle {
|
|
|
69
141
|
rowGap: BANNER_INNER_ROW_GAP,
|
|
70
142
|
marginHorizontal: BANNER_INNER_MARGIN_HORIZONTAL,
|
|
71
143
|
justifyContent: bannerInnerJustifyContent(banner.contentLayout),
|
|
72
|
-
|
|
144
|
+
minWidth: hasMaxContentWidth ? 0 : undefined,
|
|
145
|
+
...(innerMaxWidth != null && innerMaxWidth > 0 ? { maxWidth: innerMaxWidth } : null),
|
|
73
146
|
};
|
|
74
147
|
}
|