@userflow-tech/react-native 0.1.0 → 0.2.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 +114 -68
- package/app.plugin.js +13 -0
- package/babel-plugin/index.d.ts +43 -0
- package/babel-plugin/index.d.ts.map +1 -0
- package/babel-plugin/index.js +862 -0
- package/babel-plugin/index.js.map +1 -0
- package/babel-plugin.js +13 -0
- package/docs/anchoring.md +141 -13
- package/docs/deep-linking.md +20 -17
- package/docs/theme-mapping.md +44 -15
- package/docs/troubleshooting.md +37 -30
- package/expo-plugin/withUserflow.d.ts +17 -0
- package/expo-plugin/withUserflow.d.ts.map +1 -0
- package/expo-plugin/withUserflow.js +99 -0
- package/expo-plugin/withUserflow.js.map +1 -0
- package/lib/commonjs/anchors/AutoAnchorRegistry.js +125 -3
- package/lib/commonjs/anchors/AutoAnchorRegistry.js.map +1 -1
- package/lib/commonjs/anchors/anchorChangeTicker.js +10 -0
- package/lib/commonjs/anchors/anchorChangeTicker.js.map +1 -1
- package/lib/commonjs/anchors/autoAnchor.js +1 -1
- package/lib/commonjs/anchors/elementConditionEvaluator.js +25 -12
- package/lib/commonjs/anchors/elementConditionEvaluator.js.map +1 -1
- package/lib/commonjs/anchors/fiber/FiberScanRoot.js +11 -47
- package/lib/commonjs/anchors/fiber/FiberScanRoot.js.map +1 -1
- package/lib/commonjs/anchors/fiber/FiberScanRootStore.js +50 -0
- package/lib/commonjs/anchors/fiber/FiberScanRootStore.js.map +1 -0
- package/lib/commonjs/anchors/fiber/fiberInternals.js +145 -3
- package/lib/commonjs/anchors/fiber/fiberInternals.js.map +1 -1
- package/lib/commonjs/anchors/fiber/indexHostFibers.js +129 -0
- package/lib/commonjs/anchors/fiber/indexHostFibers.js.map +1 -0
- package/lib/commonjs/anchors/fiber/readHostContent.js +131 -0
- package/lib/commonjs/anchors/fiber/readHostContent.js.map +1 -0
- package/lib/commonjs/anchors/fiberAnchorCache.js +50 -0
- package/lib/commonjs/anchors/fiberAnchorCache.js.map +1 -0
- package/lib/commonjs/anchors/hintsCodec.js +1 -1
- package/lib/commonjs/anchors/resolveAnchorHost.js +15 -21
- package/lib/commonjs/anchors/resolveAnchorHost.js.map +1 -1
- package/lib/commonjs/anchors/resolveAutoAnchorHost.js +171 -0
- package/lib/commonjs/anchors/resolveAutoAnchorHost.js.map +1 -0
- package/lib/commonjs/anchors/semanticMatcher.js +285 -0
- package/lib/commonjs/anchors/semanticMatcher.js.map +1 -0
- package/lib/commonjs/authoring/ElementPickerOverlay.js +490 -0
- package/lib/commonjs/authoring/ElementPickerOverlay.js.map +1 -0
- package/lib/commonjs/authoring/capturePickerScreenshot.js +73 -0
- package/lib/commonjs/authoring/capturePickerScreenshot.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeBarTransition.js +94 -0
- package/lib/commonjs/authoring/chrome/ChromeBarTransition.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeBottomSheet.js +64 -0
- package/lib/commonjs/authoring/chrome/ChromeBottomSheet.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeButton.js +94 -0
- package/lib/commonjs/authoring/chrome/ChromeButton.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeDialog.js +131 -0
- package/lib/commonjs/authoring/chrome/ChromeDialog.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeIcon.js +39 -0
- package/lib/commonjs/authoring/chrome/ChromeIcon.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeTooltip.js +88 -0
- package/lib/commonjs/authoring/chrome/ChromeTooltip.js.map +1 -0
- package/lib/commonjs/authoring/chrome/ChromeTopBar.js +110 -0
- package/lib/commonjs/authoring/chrome/ChromeTopBar.js.map +1 -0
- package/lib/commonjs/authoring/chrome/DoubleTapBridge.js +57 -0
- package/lib/commonjs/authoring/chrome/DoubleTapBridge.js.map +1 -0
- package/lib/commonjs/authoring/chrome/doubleTapMonitor.js +80 -0
- package/lib/commonjs/authoring/chrome/doubleTapMonitor.js.map +1 -0
- package/lib/commonjs/authoring/chrome/icons/arrow-left-from-bracket.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/arrow-left-from-bracket@2x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/arrow-left-from-bracket@3x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/arrow-rotate-left.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/arrow-rotate-left@2x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/arrow-rotate-left@3x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/userflow-logomark.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/userflow-logomark@2x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/userflow-logomark@3x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/xmark.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/xmark@2x.png +0 -0
- package/lib/commonjs/authoring/chrome/icons/xmark@3x.png +0 -0
- package/lib/commonjs/authoring/chrome/tokens.js +150 -0
- package/lib/commonjs/authoring/chrome/tokens.js.map +1 -0
- package/lib/commonjs/authoring/doubleTap.js +23 -0
- package/lib/commonjs/authoring/doubleTap.js.map +1 -0
- package/lib/commonjs/authoring/elementPickerController.js +102 -0
- package/lib/commonjs/authoring/elementPickerController.js.map +1 -0
- package/lib/commonjs/authoring/fingerprintFromInstance.js +195 -0
- package/lib/commonjs/authoring/fingerprintFromInstance.js.map +1 -0
- package/lib/commonjs/authoring/hitTest.js +106 -0
- package/lib/commonjs/authoring/hitTest.js.map +1 -0
- package/lib/commonjs/content/RichContentRenderer.js +12 -2
- package/lib/commonjs/content/RichContentRenderer.js.map +1 -1
- package/lib/commonjs/content/StepButton.js +19 -4
- package/lib/commonjs/content/StepButton.js.map +1 -1
- package/lib/commonjs/content/resolveStepButtonChrome.js +8 -6
- package/lib/commonjs/content/resolveStepButtonChrome.js.map +1 -1
- package/lib/commonjs/content/themeColor.js +11 -0
- package/lib/commonjs/content/themeColor.js.map +1 -1
- package/lib/commonjs/deviceContext.js +158 -0
- package/lib/commonjs/deviceContext.js.map +1 -0
- package/lib/commonjs/expo-router/useUserflowExpoRouter.js +40 -4
- package/lib/commonjs/expo-router/useUserflowExpoRouter.js.map +1 -1
- package/lib/commonjs/hostAppVersion.js +242 -0
- package/lib/commonjs/hostAppVersion.js.map +1 -0
- package/lib/commonjs/index.js +118 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/lifecycle.js +2 -0
- package/lib/commonjs/lifecycle.js.map +1 -1
- package/lib/commonjs/navigation/WithUserflowReactNavigation.js +17 -8
- package/lib/commonjs/navigation/WithUserflowReactNavigation.js.map +1 -1
- package/lib/commonjs/navigation/isOverlayPresentation.js +64 -0
- package/lib/commonjs/navigation/isOverlayPresentation.js.map +1 -0
- package/lib/commonjs/pairing/PairingController.js +29 -2
- package/lib/commonjs/pairing/PairingController.js.map +1 -1
- package/lib/commonjs/pairing/PreviewModeBanner.js +211 -84
- package/lib/commonjs/pairing/PreviewModeBanner.js.map +1 -1
- package/lib/commonjs/pairing/diagnostics.js +11 -2
- package/lib/commonjs/pairing/diagnostics.js.map +1 -1
- package/lib/commonjs/pairing/elementPickerRelay.js +91 -0
- package/lib/commonjs/pairing/elementPickerRelay.js.map +1 -0
- package/lib/commonjs/pairing/resolvePreviewChrome.js +52 -0
- package/lib/commonjs/pairing/resolvePreviewChrome.js.map +1 -0
- package/lib/commonjs/pairing/tokenStorage.js +25 -2
- package/lib/commonjs/pairing/tokenStorage.js.map +1 -1
- package/lib/commonjs/pairing/usePairingState.js +3 -1
- package/lib/commonjs/pairing/usePairingState.js.map +1 -1
- package/lib/commonjs/runtime/FlowRenderer.js +45 -21
- package/lib/commonjs/runtime/FlowRenderer.js.map +1 -1
- package/lib/commonjs/runtime/FlowSurfaceFade.js +47 -24
- package/lib/commonjs/runtime/FlowSurfaceFade.js.map +1 -1
- package/lib/commonjs/runtime/TargetPressBridge.js +13 -44
- package/lib/commonjs/runtime/TargetPressBridge.js.map +1 -1
- package/lib/commonjs/runtime/UserflowProvider.js +74 -20
- package/lib/commonjs/runtime/UserflowProvider.js.map +1 -1
- package/lib/commonjs/runtime/changedTouchPoints.js +48 -0
- package/lib/commonjs/runtime/changedTouchPoints.js.map +1 -0
- package/lib/commonjs/runtime/flowEngine.js +3 -1
- package/lib/commonjs/runtime/flowEngine.js.map +1 -1
- package/lib/commonjs/runtime/flowSessionViewState.js +32 -7
- package/lib/commonjs/runtime/flowSessionViewState.js.map +1 -1
- package/lib/commonjs/runtime/useFlowSessionState.js +2 -1
- package/lib/commonjs/runtime/useFlowSessionState.js.map +1 -1
- package/lib/commonjs/screenTracker.js +46 -4
- package/lib/commonjs/screenTracker.js.map +1 -1
- package/lib/commonjs/surfaces/CardFade.js +31 -0
- package/lib/commonjs/surfaces/CardFade.js.map +1 -0
- package/lib/commonjs/surfaces/CloseButton.js +11 -6
- package/lib/commonjs/surfaces/CloseButton.js.map +1 -1
- package/lib/commonjs/surfaces/ModalSurface.js +50 -34
- package/lib/commonjs/surfaces/ModalSurface.js.map +1 -1
- package/lib/commonjs/surfaces/TooltipSurface.js +366 -87
- package/lib/commonjs/surfaces/TooltipSurface.js.map +1 -1
- package/lib/commonjs/surfaces/cardTransition.js +70 -0
- package/lib/commonjs/surfaces/cardTransition.js.map +1 -0
- package/lib/commonjs/surfaces/resolveHighlightChrome.js +109 -0
- package/lib/commonjs/surfaces/resolveHighlightChrome.js.map +1 -0
- package/lib/commonjs/surfaces/resolveModalLayout.js +7 -3
- package/lib/commonjs/surfaces/resolveModalLayout.js.map +1 -1
- package/lib/commonjs/surfaces/resolveTooltipLayout.js +0 -4
- package/lib/commonjs/surfaces/resolveTooltipLayout.js.map +1 -1
- package/lib/commonjs/surfaces/surfaceInteractionConfig.js +33 -0
- package/lib/commonjs/surfaces/surfaceInteractionConfig.js.map +1 -0
- package/lib/commonjs/surfaces/surfaceLayoutInsets.js +128 -0
- package/lib/commonjs/surfaces/surfaceLayoutInsets.js.map +1 -0
- package/lib/commonjs/surfaces/themeChrome.js +4 -1
- package/lib/commonjs/surfaces/themeChrome.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/TooltipBubble.js +142 -21
- package/lib/commonjs/surfaces/tooltip/TooltipBubble.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/TooltipCutout.js +100 -47
- package/lib/commonjs/surfaces/tooltip/TooltipCutout.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/TooltipHighlight.js +124 -0
- package/lib/commonjs/surfaces/tooltip/TooltipHighlight.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/computeTooltipPosition.js +67 -13
- package/lib/commonjs/surfaces/tooltip/computeTooltipPosition.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/inferTooltipPlacement.js +88 -19
- package/lib/commonjs/surfaces/tooltip/inferTooltipPlacement.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/placementDiagnostics.js +52 -0
- package/lib/commonjs/surfaces/tooltip/placementDiagnostics.js.map +1 -0
- package/lib/commonjs/surfaces/tooltip/rect.js +12 -0
- package/lib/commonjs/surfaces/tooltip/rect.js.map +1 -1
- package/lib/commonjs/surfaces/tooltip/resolveSideCardWidth.js +103 -0
- package/lib/commonjs/surfaces/tooltip/resolveSideCardWidth.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/module/anchors/AutoAnchorRegistry.js +126 -3
- package/lib/module/anchors/AutoAnchorRegistry.js.map +1 -1
- package/lib/module/anchors/anchorChangeTicker.js +10 -0
- package/lib/module/anchors/anchorChangeTicker.js.map +1 -1
- package/lib/module/anchors/autoAnchor.js +1 -1
- package/lib/module/anchors/elementConditionEvaluator.js +25 -12
- package/lib/module/anchors/elementConditionEvaluator.js.map +1 -1
- package/lib/module/anchors/fiber/FiberScanRoot.js +2 -43
- package/lib/module/anchors/fiber/FiberScanRoot.js.map +1 -1
- package/lib/module/anchors/fiber/FiberScanRootStore.js +46 -0
- package/lib/module/anchors/fiber/FiberScanRootStore.js.map +1 -0
- package/lib/module/anchors/fiber/fiberInternals.js +139 -3
- package/lib/module/anchors/fiber/fiberInternals.js.map +1 -1
- package/lib/module/anchors/fiber/indexHostFibers.js +122 -0
- package/lib/module/anchors/fiber/indexHostFibers.js.map +1 -0
- package/lib/module/anchors/fiber/readHostContent.js +127 -0
- package/lib/module/anchors/fiber/readHostContent.js.map +1 -0
- package/lib/module/anchors/fiberAnchorCache.js +40 -0
- package/lib/module/anchors/fiberAnchorCache.js.map +1 -0
- package/lib/module/anchors/hintsCodec.js +1 -1
- package/lib/module/anchors/resolveAnchorHost.js +15 -21
- package/lib/module/anchors/resolveAnchorHost.js.map +1 -1
- package/lib/module/anchors/resolveAutoAnchorHost.js +167 -0
- package/lib/module/anchors/resolveAutoAnchorHost.js.map +1 -0
- package/lib/module/anchors/semanticMatcher.js +280 -0
- package/lib/module/anchors/semanticMatcher.js.map +1 -0
- package/lib/module/authoring/ElementPickerOverlay.js +485 -0
- package/lib/module/authoring/ElementPickerOverlay.js.map +1 -0
- package/lib/module/authoring/capturePickerScreenshot.js +68 -0
- package/lib/module/authoring/capturePickerScreenshot.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeBarTransition.js +88 -0
- package/lib/module/authoring/chrome/ChromeBarTransition.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeBottomSheet.js +59 -0
- package/lib/module/authoring/chrome/ChromeBottomSheet.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeButton.js +89 -0
- package/lib/module/authoring/chrome/ChromeButton.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeDialog.js +126 -0
- package/lib/module/authoring/chrome/ChromeDialog.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeIcon.js +33 -0
- package/lib/module/authoring/chrome/ChromeIcon.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeTooltip.js +82 -0
- package/lib/module/authoring/chrome/ChromeTooltip.js.map +1 -0
- package/lib/module/authoring/chrome/ChromeTopBar.js +104 -0
- package/lib/module/authoring/chrome/ChromeTopBar.js.map +1 -0
- package/lib/module/authoring/chrome/DoubleTapBridge.js +52 -0
- package/lib/module/authoring/chrome/DoubleTapBridge.js.map +1 -0
- package/lib/module/authoring/chrome/doubleTapMonitor.js +75 -0
- package/lib/module/authoring/chrome/doubleTapMonitor.js.map +1 -0
- package/lib/module/authoring/chrome/icons/arrow-left-from-bracket.png +0 -0
- package/lib/module/authoring/chrome/icons/arrow-left-from-bracket@2x.png +0 -0
- package/lib/module/authoring/chrome/icons/arrow-left-from-bracket@3x.png +0 -0
- package/lib/module/authoring/chrome/icons/arrow-rotate-left.png +0 -0
- package/lib/module/authoring/chrome/icons/arrow-rotate-left@2x.png +0 -0
- package/lib/module/authoring/chrome/icons/arrow-rotate-left@3x.png +0 -0
- package/lib/module/authoring/chrome/icons/userflow-logomark.png +0 -0
- package/lib/module/authoring/chrome/icons/userflow-logomark@2x.png +0 -0
- package/lib/module/authoring/chrome/icons/userflow-logomark@3x.png +0 -0
- package/lib/module/authoring/chrome/icons/xmark.png +0 -0
- package/lib/module/authoring/chrome/icons/xmark@2x.png +0 -0
- package/lib/module/authoring/chrome/icons/xmark@3x.png +0 -0
- package/lib/module/authoring/chrome/tokens.js +146 -0
- package/lib/module/authoring/chrome/tokens.js.map +1 -0
- package/lib/module/authoring/doubleTap.js +18 -0
- package/lib/module/authoring/doubleTap.js.map +1 -0
- package/lib/module/authoring/elementPickerController.js +97 -0
- package/lib/module/authoring/elementPickerController.js.map +1 -0
- package/lib/module/authoring/fingerprintFromInstance.js +187 -0
- package/lib/module/authoring/fingerprintFromInstance.js.map +1 -0
- package/lib/module/authoring/hitTest.js +100 -0
- package/lib/module/authoring/hitTest.js.map +1 -0
- package/lib/module/content/RichContentRenderer.js +12 -2
- package/lib/module/content/RichContentRenderer.js.map +1 -1
- package/lib/module/content/StepButton.js +19 -4
- package/lib/module/content/StepButton.js.map +1 -1
- package/lib/module/content/resolveStepButtonChrome.js +8 -6
- package/lib/module/content/resolveStepButtonChrome.js.map +1 -1
- package/lib/module/content/themeColor.js +10 -0
- package/lib/module/content/themeColor.js.map +1 -1
- package/lib/module/deviceContext.js +142 -0
- package/lib/module/deviceContext.js.map +1 -0
- package/lib/module/expo-router/useUserflowExpoRouter.js +42 -6
- package/lib/module/expo-router/useUserflowExpoRouter.js.map +1 -1
- package/lib/module/hostAppVersion.js +225 -0
- package/lib/module/hostAppVersion.js.map +1 -0
- package/lib/module/index.js +119 -6
- package/lib/module/index.js.map +1 -1
- package/lib/module/lifecycle.js +2 -0
- package/lib/module/lifecycle.js.map +1 -1
- package/lib/module/navigation/WithUserflowReactNavigation.js +18 -9
- package/lib/module/navigation/WithUserflowReactNavigation.js.map +1 -1
- package/lib/module/navigation/isOverlayPresentation.js +58 -0
- package/lib/module/navigation/isOverlayPresentation.js.map +1 -0
- package/lib/module/pairing/PairingController.js +30 -3
- package/lib/module/pairing/PairingController.js.map +1 -1
- package/lib/module/pairing/PreviewModeBanner.js +212 -85
- package/lib/module/pairing/PreviewModeBanner.js.map +1 -1
- package/lib/module/pairing/diagnostics.js +10 -2
- package/lib/module/pairing/diagnostics.js.map +1 -1
- package/lib/module/pairing/elementPickerRelay.js +87 -0
- package/lib/module/pairing/elementPickerRelay.js.map +1 -0
- package/lib/module/pairing/resolvePreviewChrome.js +48 -0
- package/lib/module/pairing/resolvePreviewChrome.js.map +1 -0
- package/lib/module/pairing/tokenStorage.js +24 -2
- package/lib/module/pairing/tokenStorage.js.map +1 -1
- package/lib/module/pairing/usePairingState.js +3 -1
- package/lib/module/pairing/usePairingState.js.map +1 -1
- package/lib/module/runtime/FlowRenderer.js +45 -21
- package/lib/module/runtime/FlowRenderer.js.map +1 -1
- package/lib/module/runtime/FlowSurfaceFade.js +49 -26
- package/lib/module/runtime/FlowSurfaceFade.js.map +1 -1
- package/lib/module/runtime/TargetPressBridge.js +12 -43
- package/lib/module/runtime/TargetPressBridge.js.map +1 -1
- package/lib/module/runtime/UserflowProvider.js +74 -20
- package/lib/module/runtime/UserflowProvider.js.map +1 -1
- package/lib/module/runtime/changedTouchPoints.js +43 -0
- package/lib/module/runtime/changedTouchPoints.js.map +1 -0
- package/lib/module/runtime/flowEngine.js +3 -1
- package/lib/module/runtime/flowEngine.js.map +1 -1
- package/lib/module/runtime/flowSessionViewState.js +32 -7
- package/lib/module/runtime/flowSessionViewState.js.map +1 -1
- package/lib/module/runtime/useFlowSessionState.js +2 -1
- package/lib/module/runtime/useFlowSessionState.js.map +1 -1
- package/lib/module/screenTracker.js +42 -4
- package/lib/module/screenTracker.js.map +1 -1
- package/lib/module/surfaces/CardFade.js +26 -0
- package/lib/module/surfaces/CardFade.js.map +1 -0
- package/lib/module/surfaces/CloseButton.js +10 -6
- package/lib/module/surfaces/CloseButton.js.map +1 -1
- package/lib/module/surfaces/ModalSurface.js +52 -36
- package/lib/module/surfaces/ModalSurface.js.map +1 -1
- package/lib/module/surfaces/TooltipSurface.js +368 -90
- package/lib/module/surfaces/TooltipSurface.js.map +1 -1
- package/lib/module/surfaces/cardTransition.js +64 -0
- package/lib/module/surfaces/cardTransition.js.map +1 -0
- package/lib/module/surfaces/resolveHighlightChrome.js +102 -0
- package/lib/module/surfaces/resolveHighlightChrome.js.map +1 -0
- package/lib/module/surfaces/resolveModalLayout.js +7 -3
- package/lib/module/surfaces/resolveModalLayout.js.map +1 -1
- package/lib/module/surfaces/resolveTooltipLayout.js +1 -4
- package/lib/module/surfaces/resolveTooltipLayout.js.map +1 -1
- package/lib/module/surfaces/surfaceInteractionConfig.js +27 -0
- package/lib/module/surfaces/surfaceInteractionConfig.js.map +1 -0
- package/lib/module/surfaces/surfaceLayoutInsets.js +119 -0
- package/lib/module/surfaces/surfaceLayoutInsets.js.map +1 -0
- package/lib/module/surfaces/themeChrome.js +3 -1
- package/lib/module/surfaces/themeChrome.js.map +1 -1
- package/lib/module/surfaces/tooltip/TooltipBubble.js +143 -22
- package/lib/module/surfaces/tooltip/TooltipBubble.js.map +1 -1
- package/lib/module/surfaces/tooltip/TooltipCutout.js +100 -47
- package/lib/module/surfaces/tooltip/TooltipCutout.js.map +1 -1
- package/lib/module/surfaces/tooltip/TooltipHighlight.js +118 -0
- package/lib/module/surfaces/tooltip/TooltipHighlight.js.map +1 -0
- package/lib/module/surfaces/tooltip/computeTooltipPosition.js +67 -13
- package/lib/module/surfaces/tooltip/computeTooltipPosition.js.map +1 -1
- package/lib/module/surfaces/tooltip/inferTooltipPlacement.js +87 -19
- package/lib/module/surfaces/tooltip/inferTooltipPlacement.js.map +1 -1
- package/lib/module/surfaces/tooltip/placementDiagnostics.js +43 -0
- package/lib/module/surfaces/tooltip/placementDiagnostics.js.map +1 -0
- package/lib/module/surfaces/tooltip/rect.js +11 -0
- package/lib/module/surfaces/tooltip/rect.js.map +1 -1
- package/lib/module/surfaces/tooltip/resolveSideCardWidth.js +96 -0
- package/lib/module/surfaces/tooltip/resolveSideCardWidth.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/commonjs/src/anchors/AutoAnchorRegistry.d.ts +27 -1
- package/lib/typescript/commonjs/src/anchors/AutoAnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/anchorChangeTicker.d.ts +2 -0
- package/lib/typescript/commonjs/src/anchors/anchorChangeTicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/autoAnchor.d.ts +1 -1
- package/lib/typescript/commonjs/src/anchors/elementConditionEvaluator.d.ts +14 -10
- package/lib/typescript/commonjs/src/anchors/elementConditionEvaluator.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRoot.d.ts +1 -20
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRoot.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts +21 -0
- package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/fiberInternals.d.ts +42 -1
- package/lib/typescript/commonjs/src/anchors/fiber/fiberInternals.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/fiber/indexHostFibers.d.ts +42 -0
- package/lib/typescript/commonjs/src/anchors/fiber/indexHostFibers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiber/readHostContent.d.ts +17 -0
- package/lib/typescript/commonjs/src/anchors/fiber/readHostContent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/fiberAnchorCache.d.ts +20 -0
- package/lib/typescript/commonjs/src/anchors/fiberAnchorCache.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/hintsCodec.d.ts +1 -1
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts +5 -5
- package/lib/typescript/commonjs/src/anchors/resolveAnchorHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/anchors/resolveAutoAnchorHost.d.ts +38 -0
- package/lib/typescript/commonjs/src/anchors/resolveAutoAnchorHost.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/anchors/semanticMatcher.d.ts +48 -0
- package/lib/typescript/commonjs/src/anchors/semanticMatcher.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/ElementPickerOverlay.d.ts +7 -0
- package/lib/typescript/commonjs/src/authoring/ElementPickerOverlay.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/capturePickerScreenshot.d.ts +11 -0
- package/lib/typescript/commonjs/src/authoring/capturePickerScreenshot.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeBarTransition.d.ts +32 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeBarTransition.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeBottomSheet.d.ts +13 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeBottomSheet.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeButton.d.ts +20 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeDialog.d.ts +14 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeDialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeIcon.d.ts +13 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeIcon.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeTooltip.d.ts +17 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeTooltip.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeTopBar.d.ts +25 -0
- package/lib/typescript/commonjs/src/authoring/chrome/ChromeTopBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/DoubleTapBridge.d.ts +12 -0
- package/lib/typescript/commonjs/src/authoring/chrome/DoubleTapBridge.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/doubleTapMonitor.d.ts +26 -0
- package/lib/typescript/commonjs/src/authoring/chrome/doubleTapMonitor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/chrome/tokens.d.ts +141 -0
- package/lib/typescript/commonjs/src/authoring/chrome/tokens.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/doubleTap.d.ts +14 -0
- package/lib/typescript/commonjs/src/authoring/doubleTap.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/elementPickerController.d.ts +59 -0
- package/lib/typescript/commonjs/src/authoring/elementPickerController.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/fingerprintFromInstance.d.ts +26 -0
- package/lib/typescript/commonjs/src/authoring/fingerprintFromInstance.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/authoring/hitTest.d.ts +31 -0
- package/lib/typescript/commonjs/src/authoring/hitTest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/content/RichContentRenderer.d.ts +6 -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/resolveStepButtonChrome.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/content/themeColor.d.ts +5 -0
- package/lib/typescript/commonjs/src/content/themeColor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/deviceContext.d.ts +66 -0
- package/lib/typescript/commonjs/src/deviceContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/expo-router/useUserflowExpoRouter.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hostAppVersion.d.ts +69 -0
- package/lib/typescript/commonjs/src/hostAppVersion.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +53 -2
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/lifecycle.d.ts +6 -0
- package/lib/typescript/commonjs/src/lifecycle.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/navigation/WithUserflowReactNavigation.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/navigation/isOverlayPresentation.d.ts +14 -0
- package/lib/typescript/commonjs/src/navigation/isOverlayPresentation.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/PairingController.d.ts +7 -0
- package/lib/typescript/commonjs/src/pairing/PairingController.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/PreviewModeBanner.d.ts +6 -1
- package/lib/typescript/commonjs/src/pairing/PreviewModeBanner.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/diagnostics.d.ts +5 -0
- package/lib/typescript/commonjs/src/pairing/diagnostics.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/elementPickerRelay.d.ts +11 -0
- package/lib/typescript/commonjs/src/pairing/elementPickerRelay.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/resolvePreviewChrome.d.ts +16 -0
- package/lib/typescript/commonjs/src/pairing/resolvePreviewChrome.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/pairing/tokenStorage.d.ts +2 -0
- package/lib/typescript/commonjs/src/pairing/tokenStorage.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/pairing/usePairingState.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/FlowRenderer.d.ts +6 -3
- package/lib/typescript/commonjs/src/runtime/FlowRenderer.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/FlowSurfaceFade.d.ts +20 -7
- package/lib/typescript/commonjs/src/runtime/FlowSurfaceFade.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts +5 -1
- package/lib/typescript/commonjs/src/runtime/TargetPressBridge.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/UserflowProvider.d.ts +6 -4
- package/lib/typescript/commonjs/src/runtime/UserflowProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/changedTouchPoints.d.ts +10 -0
- package/lib/typescript/commonjs/src/runtime/changedTouchPoints.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/runtime/flowEngine.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/flowSessionViewState.d.ts +12 -3
- package/lib/typescript/commonjs/src/runtime/flowSessionViewState.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/runtime/useFlowSessionState.d.ts +1 -0
- package/lib/typescript/commonjs/src/runtime/useFlowSessionState.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/screenTracker.d.ts +21 -3
- package/lib/typescript/commonjs/src/screenTracker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/CardFade.d.ts +12 -0
- package/lib/typescript/commonjs/src/surfaces/CardFade.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/CloseButton.d.ts +8 -2
- package/lib/typescript/commonjs/src/surfaces/CloseButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/MadeWithUserflow.d.ts +1 -1
- package/lib/typescript/commonjs/src/surfaces/ModalSurface.d.ts +1 -1
- package/lib/typescript/commonjs/src/surfaces/ModalSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts +12 -1
- package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/cardTransition.d.ts +31 -0
- package/lib/typescript/commonjs/src/surfaces/cardTransition.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/resolveHighlightChrome.d.ts +44 -0
- package/lib/typescript/commonjs/src/surfaces/resolveHighlightChrome.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/resolveModalLayout.d.ts +1 -1
- package/lib/typescript/commonjs/src/surfaces/resolveModalLayout.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/resolveTooltipLayout.d.ts +0 -7
- package/lib/typescript/commonjs/src/surfaces/resolveTooltipLayout.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/surfaceInteractionConfig.d.ts +15 -0
- package/lib/typescript/commonjs/src/surfaces/surfaceInteractionConfig.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/surfaceLayoutInsets.d.ts +38 -0
- package/lib/typescript/commonjs/src/surfaces/surfaceLayoutInsets.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/themeChrome.d.ts +3 -1
- package/lib/typescript/commonjs/src/surfaces/themeChrome.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipBubble.d.ts +21 -6
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipBubble.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipCutout.d.ts +18 -10
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipCutout.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipHighlight.d.ts +25 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/TooltipHighlight.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/computeTooltipPosition.d.ts +23 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/computeTooltipPosition.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/inferTooltipPlacement.d.ts +47 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/inferTooltipPlacement.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/placementDiagnostics.d.ts +39 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/placementDiagnostics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/rect.d.ts +2 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/rect.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/surfaces/tooltip/resolveSideCardWidth.d.ts +76 -0
- package/lib/typescript/commonjs/src/surfaces/tooltip/resolveSideCardWidth.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/version.d.ts +1 -1
- package/lib/typescript/module/src/anchors/AutoAnchorRegistry.d.ts +27 -1
- package/lib/typescript/module/src/anchors/AutoAnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/anchorChangeTicker.d.ts +2 -0
- package/lib/typescript/module/src/anchors/anchorChangeTicker.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/autoAnchor.d.ts +1 -1
- package/lib/typescript/module/src/anchors/elementConditionEvaluator.d.ts +14 -10
- package/lib/typescript/module/src/anchors/elementConditionEvaluator.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/FiberScanRoot.d.ts +1 -20
- package/lib/typescript/module/src/anchors/fiber/FiberScanRoot.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts +21 -0
- package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/fiberInternals.d.ts +42 -1
- package/lib/typescript/module/src/anchors/fiber/fiberInternals.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/fiber/indexHostFibers.d.ts +42 -0
- package/lib/typescript/module/src/anchors/fiber/indexHostFibers.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiber/readHostContent.d.ts +17 -0
- package/lib/typescript/module/src/anchors/fiber/readHostContent.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/fiberAnchorCache.d.ts +20 -0
- package/lib/typescript/module/src/anchors/fiberAnchorCache.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/hintsCodec.d.ts +1 -1
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts +5 -5
- package/lib/typescript/module/src/anchors/resolveAnchorHost.d.ts.map +1 -1
- package/lib/typescript/module/src/anchors/resolveAutoAnchorHost.d.ts +38 -0
- package/lib/typescript/module/src/anchors/resolveAutoAnchorHost.d.ts.map +1 -0
- package/lib/typescript/module/src/anchors/semanticMatcher.d.ts +48 -0
- package/lib/typescript/module/src/anchors/semanticMatcher.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/ElementPickerOverlay.d.ts +7 -0
- package/lib/typescript/module/src/authoring/ElementPickerOverlay.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/capturePickerScreenshot.d.ts +11 -0
- package/lib/typescript/module/src/authoring/capturePickerScreenshot.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeBarTransition.d.ts +32 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeBarTransition.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeBottomSheet.d.ts +13 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeBottomSheet.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeButton.d.ts +20 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeButton.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeDialog.d.ts +14 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeDialog.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeIcon.d.ts +13 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeIcon.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeTooltip.d.ts +17 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeTooltip.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeTopBar.d.ts +25 -0
- package/lib/typescript/module/src/authoring/chrome/ChromeTopBar.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/DoubleTapBridge.d.ts +12 -0
- package/lib/typescript/module/src/authoring/chrome/DoubleTapBridge.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/doubleTapMonitor.d.ts +26 -0
- package/lib/typescript/module/src/authoring/chrome/doubleTapMonitor.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/chrome/tokens.d.ts +141 -0
- package/lib/typescript/module/src/authoring/chrome/tokens.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/doubleTap.d.ts +14 -0
- package/lib/typescript/module/src/authoring/doubleTap.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/elementPickerController.d.ts +59 -0
- package/lib/typescript/module/src/authoring/elementPickerController.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/fingerprintFromInstance.d.ts +26 -0
- package/lib/typescript/module/src/authoring/fingerprintFromInstance.d.ts.map +1 -0
- package/lib/typescript/module/src/authoring/hitTest.d.ts +31 -0
- package/lib/typescript/module/src/authoring/hitTest.d.ts.map +1 -0
- package/lib/typescript/module/src/content/RichContentRenderer.d.ts +6 -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/resolveStepButtonChrome.d.ts.map +1 -1
- package/lib/typescript/module/src/content/themeColor.d.ts +5 -0
- package/lib/typescript/module/src/content/themeColor.d.ts.map +1 -1
- package/lib/typescript/module/src/deviceContext.d.ts +66 -0
- package/lib/typescript/module/src/deviceContext.d.ts.map +1 -0
- package/lib/typescript/module/src/expo-router/useUserflowExpoRouter.d.ts.map +1 -1
- package/lib/typescript/module/src/hostAppVersion.d.ts +69 -0
- package/lib/typescript/module/src/hostAppVersion.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +53 -2
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/lifecycle.d.ts +6 -0
- package/lib/typescript/module/src/lifecycle.d.ts.map +1 -1
- package/lib/typescript/module/src/navigation/WithUserflowReactNavigation.d.ts.map +1 -1
- package/lib/typescript/module/src/navigation/isOverlayPresentation.d.ts +14 -0
- package/lib/typescript/module/src/navigation/isOverlayPresentation.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/PairingController.d.ts +7 -0
- package/lib/typescript/module/src/pairing/PairingController.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/PreviewModeBanner.d.ts +6 -1
- package/lib/typescript/module/src/pairing/PreviewModeBanner.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/diagnostics.d.ts +5 -0
- package/lib/typescript/module/src/pairing/diagnostics.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/elementPickerRelay.d.ts +11 -0
- package/lib/typescript/module/src/pairing/elementPickerRelay.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/resolvePreviewChrome.d.ts +16 -0
- package/lib/typescript/module/src/pairing/resolvePreviewChrome.d.ts.map +1 -0
- package/lib/typescript/module/src/pairing/tokenStorage.d.ts +2 -0
- package/lib/typescript/module/src/pairing/tokenStorage.d.ts.map +1 -1
- package/lib/typescript/module/src/pairing/usePairingState.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/FlowRenderer.d.ts +6 -3
- package/lib/typescript/module/src/runtime/FlowRenderer.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/FlowSurfaceFade.d.ts +20 -7
- package/lib/typescript/module/src/runtime/FlowSurfaceFade.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts +5 -1
- package/lib/typescript/module/src/runtime/TargetPressBridge.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/UserflowProvider.d.ts +6 -4
- package/lib/typescript/module/src/runtime/UserflowProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/changedTouchPoints.d.ts +10 -0
- package/lib/typescript/module/src/runtime/changedTouchPoints.d.ts.map +1 -0
- package/lib/typescript/module/src/runtime/flowEngine.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/flowSessionViewState.d.ts +12 -3
- package/lib/typescript/module/src/runtime/flowSessionViewState.d.ts.map +1 -1
- package/lib/typescript/module/src/runtime/useFlowSessionState.d.ts +1 -0
- package/lib/typescript/module/src/runtime/useFlowSessionState.d.ts.map +1 -1
- package/lib/typescript/module/src/screenTracker.d.ts +21 -3
- package/lib/typescript/module/src/screenTracker.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/CardFade.d.ts +12 -0
- package/lib/typescript/module/src/surfaces/CardFade.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/CloseButton.d.ts +8 -2
- package/lib/typescript/module/src/surfaces/CloseButton.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/MadeWithUserflow.d.ts +1 -1
- package/lib/typescript/module/src/surfaces/ModalSurface.d.ts +1 -1
- package/lib/typescript/module/src/surfaces/ModalSurface.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts +12 -1
- package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/cardTransition.d.ts +31 -0
- package/lib/typescript/module/src/surfaces/cardTransition.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/resolveHighlightChrome.d.ts +44 -0
- package/lib/typescript/module/src/surfaces/resolveHighlightChrome.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/resolveModalLayout.d.ts +1 -1
- package/lib/typescript/module/src/surfaces/resolveModalLayout.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/resolveTooltipLayout.d.ts +0 -7
- package/lib/typescript/module/src/surfaces/resolveTooltipLayout.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/surfaceInteractionConfig.d.ts +15 -0
- package/lib/typescript/module/src/surfaces/surfaceInteractionConfig.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/surfaceLayoutInsets.d.ts +38 -0
- package/lib/typescript/module/src/surfaces/surfaceLayoutInsets.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/themeChrome.d.ts +3 -1
- package/lib/typescript/module/src/surfaces/themeChrome.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/TooltipBubble.d.ts +21 -6
- package/lib/typescript/module/src/surfaces/tooltip/TooltipBubble.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/TooltipCutout.d.ts +18 -10
- package/lib/typescript/module/src/surfaces/tooltip/TooltipCutout.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/TooltipHighlight.d.ts +25 -0
- package/lib/typescript/module/src/surfaces/tooltip/TooltipHighlight.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/computeTooltipPosition.d.ts +23 -0
- package/lib/typescript/module/src/surfaces/tooltip/computeTooltipPosition.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/inferTooltipPlacement.d.ts +47 -1
- package/lib/typescript/module/src/surfaces/tooltip/inferTooltipPlacement.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/placementDiagnostics.d.ts +39 -0
- package/lib/typescript/module/src/surfaces/tooltip/placementDiagnostics.d.ts.map +1 -0
- package/lib/typescript/module/src/surfaces/tooltip/rect.d.ts +2 -0
- package/lib/typescript/module/src/surfaces/tooltip/rect.d.ts.map +1 -1
- package/lib/typescript/module/src/surfaces/tooltip/resolveSideCardWidth.d.ts +76 -0
- package/lib/typescript/module/src/surfaces/tooltip/resolveSideCardWidth.d.ts.map +1 -0
- package/lib/typescript/module/src/version.d.ts +1 -1
- package/package.json +32 -18
- package/src/anchors/AutoAnchorRegistry.ts +140 -3
- package/src/anchors/anchorChangeTicker.ts +10 -0
- package/src/anchors/autoAnchor.ts +1 -1
- package/src/anchors/elementConditionEvaluator.ts +29 -16
- package/src/anchors/fiber/FiberScanRoot.tsx +2 -50
- package/src/anchors/fiber/FiberScanRootStore.ts +51 -0
- package/src/anchors/fiber/fiberInternals.ts +166 -3
- package/src/anchors/fiber/indexHostFibers.ts +136 -0
- package/src/anchors/fiber/readHostContent.ts +146 -0
- package/src/anchors/fiberAnchorCache.ts +45 -0
- package/src/anchors/hintsCodec.ts +1 -1
- package/src/anchors/resolveAnchorHost.ts +23 -23
- package/src/anchors/resolveAutoAnchorHost.ts +180 -0
- package/src/anchors/semanticMatcher.ts +361 -0
- package/src/authoring/ElementPickerOverlay.tsx +553 -0
- package/src/authoring/capturePickerScreenshot.ts +90 -0
- package/src/authoring/chrome/ChromeBarTransition.tsx +106 -0
- package/src/authoring/chrome/ChromeBottomSheet.tsx +69 -0
- package/src/authoring/chrome/ChromeButton.tsx +103 -0
- package/src/authoring/chrome/ChromeDialog.tsx +121 -0
- package/src/authoring/chrome/ChromeIcon.tsx +40 -0
- package/src/authoring/chrome/ChromeTooltip.tsx +89 -0
- package/src/authoring/chrome/ChromeTopBar.tsx +126 -0
- package/src/authoring/chrome/DoubleTapBridge.tsx +60 -0
- package/src/authoring/chrome/doubleTapMonitor.ts +80 -0
- package/src/authoring/chrome/icons/arrow-left-from-bracket.png +0 -0
- package/src/authoring/chrome/icons/arrow-left-from-bracket@2x.png +0 -0
- package/src/authoring/chrome/icons/arrow-left-from-bracket@3x.png +0 -0
- package/src/authoring/chrome/icons/arrow-rotate-left.png +0 -0
- package/src/authoring/chrome/icons/arrow-rotate-left@2x.png +0 -0
- package/src/authoring/chrome/icons/arrow-rotate-left@3x.png +0 -0
- package/src/authoring/chrome/icons/userflow-logomark.png +0 -0
- package/src/authoring/chrome/icons/userflow-logomark@2x.png +0 -0
- package/src/authoring/chrome/icons/userflow-logomark@3x.png +0 -0
- package/src/authoring/chrome/icons/xmark.png +0 -0
- package/src/authoring/chrome/icons/xmark@2x.png +0 -0
- package/src/authoring/chrome/icons/xmark@3x.png +0 -0
- package/src/authoring/chrome/tokens.ts +106 -0
- package/src/authoring/doubleTap.ts +27 -0
- package/src/authoring/elementPickerController.ts +135 -0
- package/src/authoring/fingerprintFromInstance.ts +152 -0
- package/src/authoring/hitTest.ts +133 -0
- package/src/content/RichContentRenderer.tsx +22 -1
- package/src/content/StepButton.tsx +17 -2
- package/src/content/resolveStepButtonChrome.ts +12 -6
- package/src/content/themeColor.ts +10 -0
- package/src/deviceContext.ts +168 -0
- package/src/expo-router/useUserflowExpoRouter.ts +47 -4
- package/src/hostAppVersion.ts +258 -0
- package/src/index.ts +148 -4
- package/src/lifecycle.ts +8 -0
- package/src/navigation/WithUserflowReactNavigation.tsx +23 -7
- package/src/navigation/isOverlayPresentation.ts +76 -0
- package/src/pairing/PairingController.ts +32 -3
- package/src/pairing/PreviewModeBanner.tsx +250 -94
- package/src/pairing/diagnostics.ts +10 -2
- package/src/pairing/elementPickerRelay.ts +100 -0
- package/src/pairing/resolvePreviewChrome.ts +57 -0
- package/src/pairing/tokenStorage.ts +31 -2
- package/src/pairing/usePairingState.ts +2 -0
- package/src/runtime/FlowRenderer.tsx +55 -27
- package/src/runtime/FlowSurfaceFade.tsx +51 -30
- package/src/runtime/TargetPressBridge.tsx +14 -32
- package/src/runtime/UserflowProvider.tsx +76 -13
- package/src/runtime/changedTouchPoints.ts +34 -0
- package/src/runtime/flowEngine.ts +2 -0
- package/src/runtime/flowSessionViewState.ts +42 -4
- package/src/runtime/useFlowSessionState.ts +2 -0
- package/src/screenTracker.ts +46 -4
- package/src/surfaces/CardFade.tsx +18 -0
- package/src/surfaces/CloseButton.tsx +17 -7
- package/src/surfaces/MadeWithUserflow.tsx +1 -1
- package/src/surfaces/ModalSurface.tsx +48 -35
- package/src/surfaces/TooltipSurface.tsx +406 -86
- package/src/surfaces/cardTransition.ts +67 -0
- package/src/surfaces/resolveHighlightChrome.ts +139 -0
- package/src/surfaces/resolveModalLayout.ts +16 -8
- package/src/surfaces/resolveTooltipLayout.ts +1 -14
- package/src/surfaces/surfaceInteractionConfig.ts +25 -0
- package/src/surfaces/surfaceLayoutInsets.tsx +135 -0
- package/src/surfaces/themeChrome.ts +5 -3
- package/src/surfaces/tooltip/TooltipBubble.tsx +154 -19
- package/src/surfaces/tooltip/TooltipCutout.tsx +106 -49
- package/src/surfaces/tooltip/TooltipHighlight.tsx +144 -0
- package/src/surfaces/tooltip/computeTooltipPosition.ts +98 -12
- package/src/surfaces/tooltip/inferTooltipPlacement.ts +107 -18
- package/src/surfaces/tooltip/placementDiagnostics.ts +70 -0
- package/src/surfaces/tooltip/rect.ts +11 -0
- package/src/surfaces/tooltip/resolveSideCardWidth.ts +121 -0
- package/src/version.ts +1 -1
- package/vendor/core/LICENSE +76 -0
- package/vendor/core/README.md +9 -0
- package/vendor/core/dist/attributes.d.ts +15 -0
- package/vendor/core/dist/attributes.d.ts.map +1 -0
- package/vendor/core/dist/attributes.js +55 -0
- package/vendor/core/dist/attributes.js.map +1 -0
- package/vendor/core/dist/constants.d.ts +21 -0
- package/vendor/core/dist/constants.d.ts.map +1 -0
- package/vendor/core/dist/constants.js +21 -0
- package/vendor/core/dist/constants.js.map +1 -0
- package/vendor/core/dist/engine/ClientConditionEngine.d.ts +68 -0
- package/vendor/core/dist/engine/ClientConditionEngine.d.ts.map +1 -0
- package/vendor/core/dist/engine/ClientConditionEngine.js +197 -0
- package/vendor/core/dist/engine/ClientConditionEngine.js.map +1 -0
- package/vendor/core/dist/engine/FlowSessionEngine.d.ts +160 -0
- package/vendor/core/dist/engine/FlowSessionEngine.d.ts.map +1 -0
- package/vendor/core/dist/engine/FlowSessionEngine.js +571 -0
- package/vendor/core/dist/engine/FlowSessionEngine.js.map +1 -0
- package/vendor/core/dist/engine/PairingEngine.d.ts +135 -0
- package/vendor/core/dist/engine/PairingEngine.d.ts.map +1 -0
- package/vendor/core/dist/engine/PairingEngine.js +396 -0
- package/vendor/core/dist/engine/PairingEngine.js.map +1 -0
- package/vendor/core/dist/engine/UserflowCore.d.ts +145 -0
- package/vendor/core/dist/engine/UserflowCore.d.ts.map +1 -0
- package/vendor/core/dist/engine/UserflowCore.js +329 -0
- package/vendor/core/dist/engine/UserflowCore.js.map +1 -0
- package/vendor/core/dist/engine/conditionOperators.d.ts +16 -0
- package/vendor/core/dist/engine/conditionOperators.d.ts.map +1 -0
- package/vendor/core/dist/engine/conditionOperators.js +168 -0
- package/vendor/core/dist/engine/conditionOperators.js.map +1 -0
- package/vendor/core/dist/engine/handleActions.d.ts +42 -0
- package/vendor/core/dist/engine/handleActions.d.ts.map +1 -0
- package/vendor/core/dist/engine/handleActions.js +198 -0
- package/vendor/core/dist/engine/handleActions.js.map +1 -0
- package/vendor/core/dist/engine/interpolateSessionData.d.ts +7 -0
- package/vendor/core/dist/engine/interpolateSessionData.d.ts.map +1 -0
- package/vendor/core/dist/engine/interpolateSessionData.js +29 -0
- package/vendor/core/dist/engine/interpolateSessionData.js.map +1 -0
- package/vendor/core/dist/engine/simpleObservable.d.ts +13 -0
- package/vendor/core/dist/engine/simpleObservable.d.ts.map +1 -0
- package/vendor/core/dist/engine/simpleObservable.js +29 -0
- package/vendor/core/dist/engine/simpleObservable.js.map +1 -0
- package/vendor/core/dist/engine/trackCondition.d.ts +25 -0
- package/vendor/core/dist/engine/trackCondition.d.ts.map +1 -0
- package/vendor/core/dist/engine/trackCondition.js +177 -0
- package/vendor/core/dist/engine/trackCondition.js.map +1 -0
- package/vendor/core/dist/engine/trackStepTriggers.d.ts +21 -0
- package/vendor/core/dist/engine/trackStepTriggers.d.ts.map +1 -0
- package/vendor/core/dist/engine/trackStepTriggers.js +49 -0
- package/vendor/core/dist/engine/trackStepTriggers.js.map +1 -0
- package/vendor/core/dist/errors.d.ts +9 -0
- package/vendor/core/dist/errors.d.ts.map +1 -0
- package/vendor/core/dist/errors.js +15 -0
- package/vendor/core/dist/errors.js.map +1 -0
- package/vendor/core/dist/eventAttributes.d.ts +7 -0
- package/vendor/core/dist/eventAttributes.d.ts.map +1 -0
- package/vendor/core/dist/eventAttributes.js +31 -0
- package/vendor/core/dist/eventAttributes.js.map +1 -0
- package/vendor/core/dist/index.d.ts +31 -0
- package/vendor/core/dist/index.d.ts.map +1 -0
- package/vendor/core/dist/index.js +22 -0
- package/vendor/core/dist/index.js.map +1 -0
- package/vendor/core/dist/normalizeAttributes.d.ts +8 -0
- package/vendor/core/dist/normalizeAttributes.d.ts.map +1 -0
- package/vendor/core/dist/normalizeAttributes.js +127 -0
- package/vendor/core/dist/normalizeAttributes.js.map +1 -0
- package/vendor/core/dist/transport/backoff.d.ts +11 -0
- package/vendor/core/dist/transport/backoff.d.ts.map +1 -0
- package/vendor/core/dist/transport/backoff.js +17 -0
- package/vendor/core/dist/transport/backoff.js.map +1 -0
- package/vendor/core/dist/transport/pairing.d.ts +121 -0
- package/vendor/core/dist/transport/pairing.d.ts.map +1 -0
- package/vendor/core/dist/transport/pairing.js +551 -0
- package/vendor/core/dist/transport/pairing.js.map +1 -0
- package/vendor/core/dist/transport/phoenix.d.ts +228 -0
- package/vendor/core/dist/transport/phoenix.d.ts.map +1 -0
- package/vendor/core/dist/transport/phoenix.js +811 -0
- package/vendor/core/dist/transport/phoenix.js.map +1 -0
- package/vendor/core/dist/transport/rateLimiter.d.ts +17 -0
- package/vendor/core/dist/transport/rateLimiter.d.ts.map +1 -0
- package/vendor/core/dist/transport/rateLimiter.js +30 -0
- package/vendor/core/dist/transport/rateLimiter.js.map +1 -0
- package/vendor/core/dist/transport/scheduler.d.ts +12 -0
- package/vendor/core/dist/transport/scheduler.d.ts.map +1 -0
- package/vendor/core/dist/transport/scheduler.js +11 -0
- package/vendor/core/dist/transport/scheduler.js.map +1 -0
- package/vendor/core/dist/types.d.ts +60 -0
- package/vendor/core/dist/types.d.ts.map +1 -0
- package/vendor/core/dist/types.js +2 -0
- package/vendor/core/dist/types.js.map +1 -0
- package/vendor/core/dist/version.d.ts +3 -0
- package/vendor/core/dist/version.d.ts.map +1 -0
- package/vendor/core/dist/version.js +3 -0
- package/vendor/core/dist/version.js.map +1 -0
- package/vendor/core/package.json +20 -0
- package/vendor/protocol/LICENSE +76 -0
- package/vendor/protocol/README.md +8 -0
- package/vendor/protocol/dist/attributes.d.ts +43 -0
- package/vendor/protocol/dist/attributes.d.ts.map +1 -0
- package/vendor/protocol/dist/attributes.js +15 -0
- package/vendor/protocol/dist/attributes.js.map +1 -0
- package/vendor/protocol/dist/autoData.d.ts +232 -0
- package/vendor/protocol/dist/autoData.d.ts.map +1 -0
- package/vendor/protocol/dist/autoData.js +78 -0
- package/vendor/protocol/dist/autoData.js.map +1 -0
- package/vendor/protocol/dist/events.d.ts +24 -0
- package/vendor/protocol/dist/events.d.ts.map +1 -0
- package/vendor/protocol/dist/events.js +8 -0
- package/vendor/protocol/dist/events.js.map +1 -0
- package/vendor/protocol/dist/flows.d.ts +360 -0
- package/vendor/protocol/dist/flows.d.ts.map +1 -0
- package/vendor/protocol/dist/flows.js +201 -0
- package/vendor/protocol/dist/flows.js.map +1 -0
- package/vendor/protocol/dist/index.d.ts +25 -0
- package/vendor/protocol/dist/index.d.ts.map +1 -0
- package/vendor/protocol/dist/index.js +17 -0
- package/vendor/protocol/dist/index.js.map +1 -0
- package/vendor/protocol/dist/messages.d.ts +187 -0
- package/vendor/protocol/dist/messages.d.ts.map +1 -0
- package/vendor/protocol/dist/messages.js +61 -0
- package/vendor/protocol/dist/messages.js.map +1 -0
- package/vendor/protocol/dist/pairing.d.ts +82 -0
- package/vendor/protocol/dist/pairing.d.ts.map +1 -0
- package/vendor/protocol/dist/pairing.js +146 -0
- package/vendor/protocol/dist/pairing.js.map +1 -0
- package/vendor/protocol/package.json +17 -0
|
@@ -14,13 +14,73 @@ export interface NotchPosition {
|
|
|
14
14
|
right?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
export interface ViewportInsets {
|
|
18
|
+
top: number;
|
|
19
|
+
right: number;
|
|
20
|
+
bottom: number;
|
|
21
|
+
left: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
17
24
|
export interface TooltipLayout {
|
|
18
25
|
cardPosition: Position;
|
|
19
26
|
notchPosition: NotchPosition;
|
|
27
|
+
/**
|
|
28
|
+
* False when the clamped card is no longer adjacent to the target, or the
|
|
29
|
+
* target's centre on the cross axis has left the card's span. Callers should
|
|
30
|
+
* hide the pointer rather than aim it at empty space.
|
|
31
|
+
*/
|
|
32
|
+
showNotch: boolean;
|
|
20
33
|
/** Padded target rect used for the cutout hole. */
|
|
21
34
|
targetHighlightRect: { top: number; left: number; width: number; height: number };
|
|
22
35
|
}
|
|
23
36
|
|
|
37
|
+
/** Pixel slack so a card that sits exactly on the target edge still counts. */
|
|
38
|
+
const ADJACENCY_EPSILON = 0.5;
|
|
39
|
+
|
|
40
|
+
function notchCanPointAtTarget(opts: {
|
|
41
|
+
placement: TooltipPlacementSide;
|
|
42
|
+
cx: number;
|
|
43
|
+
cy: number;
|
|
44
|
+
bw: number;
|
|
45
|
+
bh: number;
|
|
46
|
+
targetRect: { top: number; right: number; bottom: number; left: number };
|
|
47
|
+
notchSize: number;
|
|
48
|
+
}): boolean {
|
|
49
|
+
if (opts.notchSize <= 0) return false;
|
|
50
|
+
const { placement, cx, cy, bw, bh, targetRect } = opts;
|
|
51
|
+
const targetMidX = targetRect.left + (targetRect.right - targetRect.left) / 2;
|
|
52
|
+
const targetMidY = targetRect.top + (targetRect.bottom - targetRect.top) / 2;
|
|
53
|
+
const reachableX =
|
|
54
|
+
targetMidX >= cx - ADJACENCY_EPSILON && targetMidX <= cx + bw + ADJACENCY_EPSILON;
|
|
55
|
+
const reachableY =
|
|
56
|
+
targetMidY >= cy - ADJACENCY_EPSILON && targetMidY <= cy + bh + ADJACENCY_EPSILON;
|
|
57
|
+
|
|
58
|
+
switch (placement) {
|
|
59
|
+
case 'BELOW':
|
|
60
|
+
return cy + ADJACENCY_EPSILON >= targetRect.bottom && reachableX;
|
|
61
|
+
case 'ABOVE':
|
|
62
|
+
return cy + bh <= targetRect.top + ADJACENCY_EPSILON && reachableX;
|
|
63
|
+
case 'RIGHT':
|
|
64
|
+
return cx + ADJACENCY_EPSILON >= targetRect.right && reachableY;
|
|
65
|
+
case 'LEFT':
|
|
66
|
+
return cx + bw <= targetRect.left + ADJACENCY_EPSILON && reachableY;
|
|
67
|
+
default:
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function resolveViewportInsets(
|
|
73
|
+
viewportPadding: number,
|
|
74
|
+
viewportInsets?: Partial<ViewportInsets>,
|
|
75
|
+
): ViewportInsets {
|
|
76
|
+
return {
|
|
77
|
+
top: viewportInsets?.top ?? viewportPadding,
|
|
78
|
+
right: viewportInsets?.right ?? viewportPadding,
|
|
79
|
+
bottom: viewportInsets?.bottom ?? viewportPadding,
|
|
80
|
+
left: viewportInsets?.left ?? viewportPadding,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
24
84
|
/**
|
|
25
85
|
* Side length of the axis-aligned square that, when rotated 45°, yields a
|
|
26
86
|
* tip that protrudes `notchSize` beyond the card edge (half-diagonal = N).
|
|
@@ -43,10 +103,21 @@ export function computeTooltipPosition(opts: {
|
|
|
43
103
|
placement: TooltipPlacementSide;
|
|
44
104
|
notchSize: number;
|
|
45
105
|
backdropPadding?: number;
|
|
106
|
+
/**
|
|
107
|
+
* Extra placement inset when the highlight ring is outside the hole
|
|
108
|
+
* (`backdropHighlightType: OUTSIDE`). Includes theme spread plus the painted
|
|
109
|
+
* stroke and halo so the notch aims at the ring's outer edge.
|
|
110
|
+
*/
|
|
111
|
+
outsideHighlightSpread?: number;
|
|
46
112
|
windowSize: WindowSize;
|
|
47
113
|
bubbleBorderRadius: number;
|
|
48
114
|
bubbleBorderWidth?: number;
|
|
49
115
|
viewportPadding?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Per-edge screen margin. When omitted, {@link viewportPadding} is used on
|
|
118
|
+
* every side so ABOVE/BELOW keep the same 24px gap as LEFT/RIGHT.
|
|
119
|
+
*/
|
|
120
|
+
viewportInsets?: Partial<ViewportInsets>;
|
|
50
121
|
}): TooltipLayout {
|
|
51
122
|
const {
|
|
52
123
|
target,
|
|
@@ -54,21 +125,25 @@ export function computeTooltipPosition(opts: {
|
|
|
54
125
|
placement,
|
|
55
126
|
notchSize,
|
|
56
127
|
backdropPadding = 0,
|
|
128
|
+
outsideHighlightSpread = 0,
|
|
57
129
|
windowSize,
|
|
58
130
|
bubbleBorderRadius,
|
|
59
131
|
bubbleBorderWidth = 0,
|
|
60
132
|
viewportPadding = VIEWPORT_PADDING,
|
|
133
|
+
viewportInsets,
|
|
61
134
|
} = opts;
|
|
62
135
|
const { width: cw, height: ch } = windowSize;
|
|
63
136
|
const { width: bw, height: bh } = bubbleSize;
|
|
137
|
+
const pad = resolveViewportInsets(viewportPadding, viewportInsets);
|
|
64
138
|
|
|
139
|
+
const placementPad = backdropPadding + outsideHighlightSpread;
|
|
65
140
|
const targetRect = {
|
|
66
|
-
top: target.y -
|
|
67
|
-
right: target.x + target.width +
|
|
68
|
-
bottom: target.y + target.height +
|
|
69
|
-
left: target.x -
|
|
70
|
-
width: target.width +
|
|
71
|
-
height: target.height +
|
|
141
|
+
top: target.y - placementPad,
|
|
142
|
+
right: target.x + target.width + placementPad,
|
|
143
|
+
bottom: target.y + target.height + placementPad,
|
|
144
|
+
left: target.x - placementPad,
|
|
145
|
+
width: target.width + placementPad * 2,
|
|
146
|
+
height: target.height + placementPad * 2,
|
|
72
147
|
};
|
|
73
148
|
|
|
74
149
|
let cx = 0;
|
|
@@ -80,34 +155,36 @@ export function computeTooltipPosition(opts: {
|
|
|
80
155
|
|
|
81
156
|
if (placement === 'BELOW' || placement === 'ABOVE') {
|
|
82
157
|
cx = targetRect.left + targetRect.width / 2 - bw / 2;
|
|
83
|
-
cx = Math.max(
|
|
158
|
+
cx = Math.max(pad.left, Math.min(cw - bw - pad.right, cx));
|
|
84
159
|
|
|
85
160
|
const rawLeft = targetRect.left + targetRect.width / 2 - half - cx;
|
|
86
161
|
notch.left = Math.max(bubbleBorderRadius, Math.min(bw - bubbleBorderRadius - side, rawLeft));
|
|
87
162
|
|
|
88
163
|
if (placement === 'BELOW') {
|
|
89
164
|
cy = targetRect.bottom + notchSize;
|
|
90
|
-
cy = Math.max(
|
|
165
|
+
cy = Math.max(pad.top, Math.min(ch - bh - pad.bottom, cy));
|
|
91
166
|
notch.top = edgeOffset;
|
|
92
167
|
} else {
|
|
93
168
|
cy = targetRect.top - notchSize - bh;
|
|
94
|
-
cy = Math.max(
|
|
169
|
+
cy = Math.max(pad.top, Math.min(ch - bh - pad.bottom, cy));
|
|
95
170
|
notch.bottom = edgeOffset;
|
|
96
171
|
}
|
|
97
172
|
} else {
|
|
98
173
|
cy = targetRect.top + targetRect.height / 2 - bh / 2;
|
|
99
|
-
cy = Math.max(
|
|
174
|
+
cy = Math.max(pad.top, Math.min(ch - bh - pad.bottom, cy));
|
|
100
175
|
|
|
101
176
|
const rawTop = targetRect.top + targetRect.height / 2 - half - cy;
|
|
102
177
|
notch.top = Math.max(bubbleBorderRadius, Math.min(bh - bubbleBorderRadius - side, rawTop));
|
|
103
178
|
|
|
179
|
+
// LEFT keeps pad.left; RIGHT used to min at notchSize, which sat inside the
|
|
180
|
+
// screen margin when the target was near the left edge.
|
|
104
181
|
if (placement === 'RIGHT') {
|
|
105
182
|
cx = targetRect.right + notchSize;
|
|
106
|
-
cx = Math.max(
|
|
183
|
+
cx = Math.max(pad.left, Math.min(cw - bw - pad.right, cx));
|
|
107
184
|
notch.left = edgeOffset;
|
|
108
185
|
} else {
|
|
109
186
|
cx = targetRect.left - notchSize - bw;
|
|
110
|
-
cx = Math.max(
|
|
187
|
+
cx = Math.max(pad.left, Math.min(cw - bw - notchSize, cx));
|
|
111
188
|
notch.right = edgeOffset;
|
|
112
189
|
}
|
|
113
190
|
}
|
|
@@ -115,6 +192,15 @@ export function computeTooltipPosition(opts: {
|
|
|
115
192
|
return {
|
|
116
193
|
cardPosition: { x: cx, y: cy },
|
|
117
194
|
notchPosition: notch,
|
|
195
|
+
showNotch: notchCanPointAtTarget({
|
|
196
|
+
placement,
|
|
197
|
+
cx,
|
|
198
|
+
cy,
|
|
199
|
+
bw,
|
|
200
|
+
bh,
|
|
201
|
+
targetRect,
|
|
202
|
+
notchSize,
|
|
203
|
+
}),
|
|
118
204
|
targetHighlightRect: {
|
|
119
205
|
top: target.y - backdropPadding,
|
|
120
206
|
left: target.x - backdropPadding,
|
|
@@ -27,9 +27,95 @@ import { TOOLTIP_VIEWPORT_PADDING } from '../resolveTooltipLayout';
|
|
|
27
27
|
|
|
28
28
|
export const VIEWPORT_PADDING = TOOLTIP_VIEWPORT_PADDING;
|
|
29
29
|
|
|
30
|
+
/** Per-edge screen margin; each omitted edge falls back to `viewportPadding`. */
|
|
31
|
+
export interface TooltipViewportInsets {
|
|
32
|
+
top?: number;
|
|
33
|
+
right?: number;
|
|
34
|
+
bottom?: number;
|
|
35
|
+
left?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface TooltipPlacementFitsOpts {
|
|
39
|
+
target: Rect;
|
|
40
|
+
bubbleSize: Size;
|
|
41
|
+
notchSize: number;
|
|
42
|
+
windowSize: WindowSize;
|
|
43
|
+
placement: TooltipPlacementSide;
|
|
44
|
+
viewportPadding?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Per-edge screen margin. When omitted, `viewportPadding` is used on every
|
|
47
|
+
* side so this agrees with `computeTooltipPosition`'s clamp.
|
|
48
|
+
*/
|
|
49
|
+
viewportInsets?: TooltipViewportInsets;
|
|
50
|
+
/**
|
|
51
|
+
* When set, ABOVE/BELOW compare against `min(height, minHeight)` so a
|
|
52
|
+
* scrollable card that can shrink is allowed to fit. Omit to keep the
|
|
53
|
+
* historical full-height check used by {@link inferTooltipPlacement}.
|
|
54
|
+
*/
|
|
55
|
+
minHeight?: number;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Whether `placement` has room beside `target` for `bubbleSize`.
|
|
60
|
+
*
|
|
61
|
+
* Inclusive: a card that exactly fills the remaining gap (LEFT/RIGHT after
|
|
62
|
+
* side-narrowing) still fits. Every side reserves the matching edge margin so
|
|
63
|
+
* this agrees with the clamp in `computeTooltipPosition`; when the two
|
|
64
|
+
* disagree, a placement passes here and is then drawn somewhere else.
|
|
65
|
+
*/
|
|
66
|
+
export function tooltipPlacementFits({
|
|
67
|
+
target,
|
|
68
|
+
bubbleSize,
|
|
69
|
+
notchSize,
|
|
70
|
+
windowSize,
|
|
71
|
+
placement,
|
|
72
|
+
viewportPadding = VIEWPORT_PADDING,
|
|
73
|
+
viewportInsets,
|
|
74
|
+
minHeight,
|
|
75
|
+
}: TooltipPlacementFitsOpts): boolean {
|
|
76
|
+
const { width: cw, height: ch } = windowSize;
|
|
77
|
+
const { width: bw, height: bh } = bubbleSize;
|
|
78
|
+
const clip = { top: 0, right: cw, bottom: ch, left: 0 };
|
|
79
|
+
const targetRect = {
|
|
80
|
+
top: target.y,
|
|
81
|
+
right: target.x + target.width,
|
|
82
|
+
bottom: target.y + target.height,
|
|
83
|
+
left: target.x,
|
|
84
|
+
width: target.width,
|
|
85
|
+
height: target.height,
|
|
86
|
+
};
|
|
87
|
+
const midX = targetRect.left + targetRect.width / 2;
|
|
88
|
+
const midY = targetRect.top + targetRect.height / 2;
|
|
89
|
+
const midXIn = midX >= clip.left && midX <= clip.right;
|
|
90
|
+
const midYIn = midY >= clip.top && midY <= clip.bottom;
|
|
91
|
+
const verticalHeight =
|
|
92
|
+
minHeight != null && Number.isFinite(minHeight) ? Math.min(bh, Math.max(0, minHeight)) : bh;
|
|
93
|
+
const padTop = viewportInsets?.top ?? viewportPadding;
|
|
94
|
+
const padRight = viewportInsets?.right ?? viewportPadding;
|
|
95
|
+
const padBottom = viewportInsets?.bottom ?? viewportPadding;
|
|
96
|
+
const padLeft = viewportInsets?.left ?? viewportPadding;
|
|
97
|
+
|
|
98
|
+
switch (placement) {
|
|
99
|
+
case 'BELOW':
|
|
100
|
+
return ch - targetRect.bottom >= verticalHeight + notchSize + padBottom && midXIn;
|
|
101
|
+
case 'ABOVE':
|
|
102
|
+
return targetRect.top >= verticalHeight + notchSize + padTop && midXIn;
|
|
103
|
+
case 'RIGHT':
|
|
104
|
+
return cw - targetRect.right >= bw + notchSize + padRight && midYIn;
|
|
105
|
+
case 'LEFT':
|
|
106
|
+
return targetRect.left >= bw + notchSize + padLeft && midYIn;
|
|
107
|
+
default:
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
30
112
|
/**
|
|
31
113
|
* Port of web FlowChrome `inferTooltipPlacement` with distance-sorted flip
|
|
32
114
|
* (not the prototype's fixed BELOW→ABOVE→RIGHT→LEFT priority).
|
|
115
|
+
*
|
|
116
|
+
* When no side fits, returns `desiredPlacement` (or BELOW) as a last resort —
|
|
117
|
+
* callers must check {@link tooltipPlacementFits} on the result to tell a real
|
|
118
|
+
* fit from that fallback.
|
|
33
119
|
*/
|
|
34
120
|
export function inferTooltipPlacement({
|
|
35
121
|
target,
|
|
@@ -38,6 +124,9 @@ export function inferTooltipPlacement({
|
|
|
38
124
|
windowSize,
|
|
39
125
|
currentPlacement,
|
|
40
126
|
desiredPlacement,
|
|
127
|
+
viewportPadding = VIEWPORT_PADDING,
|
|
128
|
+
viewportInsets,
|
|
129
|
+
minHeight,
|
|
41
130
|
}: {
|
|
42
131
|
target: Rect;
|
|
43
132
|
bubbleSize: Size;
|
|
@@ -45,6 +134,13 @@ export function inferTooltipPlacement({
|
|
|
45
134
|
windowSize: WindowSize;
|
|
46
135
|
currentPlacement: TooltipPlacementSide | null;
|
|
47
136
|
desiredPlacement: TooltipPlacementSide | null;
|
|
137
|
+
viewportPadding?: number;
|
|
138
|
+
/**
|
|
139
|
+
* Per-edge screen margin. When omitted, `viewportPadding` is used on every
|
|
140
|
+
* side so infer agrees with `computeTooltipPosition`'s clamp.
|
|
141
|
+
*/
|
|
142
|
+
viewportInsets?: TooltipViewportInsets;
|
|
143
|
+
minHeight?: number;
|
|
48
144
|
}): TooltipPlacementSide {
|
|
49
145
|
const { width: cw, height: ch } = windowSize;
|
|
50
146
|
const { width: bw, height: bh } = bubbleSize;
|
|
@@ -72,24 +168,17 @@ export function inferTooltipPlacement({
|
|
|
72
168
|
return clip.right > bw + notchSize ? 'LEFT' : 'RIGHT';
|
|
73
169
|
}
|
|
74
170
|
|
|
75
|
-
const fits = (p: TooltipPlacementSide): boolean =>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return cw - targetRect.right > bw + notchSize && midYIn;
|
|
87
|
-
case 'LEFT':
|
|
88
|
-
return targetRect.left > bw + notchSize && midYIn;
|
|
89
|
-
default:
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
};
|
|
171
|
+
const fits = (p: TooltipPlacementSide): boolean =>
|
|
172
|
+
tooltipPlacementFits({
|
|
173
|
+
target,
|
|
174
|
+
bubbleSize,
|
|
175
|
+
notchSize,
|
|
176
|
+
windowSize,
|
|
177
|
+
placement: p,
|
|
178
|
+
viewportPadding,
|
|
179
|
+
...(viewportInsets != null ? { viewportInsets } : {}),
|
|
180
|
+
...(minHeight != null ? { minHeight } : {}),
|
|
181
|
+
});
|
|
93
182
|
|
|
94
183
|
if (desiredPlacement && fits(desiredPlacement)) return desiredPlacement;
|
|
95
184
|
if (currentPlacement && fits(currentPlacement)) return currentPlacement;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { TooltipPlacementSide } from './inferTooltipPlacement';
|
|
2
|
+
|
|
3
|
+
const PREFIX = '[Userflow]';
|
|
4
|
+
|
|
5
|
+
/** Sink for placement diagnostics. Injected in tests. */
|
|
6
|
+
export type PlacementLogger = (message: string) => void;
|
|
7
|
+
|
|
8
|
+
export const defaultPlacementLogger: PlacementLogger = (message) => {
|
|
9
|
+
// eslint-disable-next-line no-console -- intentional development diagnostic
|
|
10
|
+
console.warn(message);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A Builder-requested LEFT/RIGHT side could not be drawn at all: the room
|
|
15
|
+
* beside the target is smaller than the card's own chrome, so no width is left
|
|
16
|
+
* to lay content out in. Draft/preview and `__DEV__` only.
|
|
17
|
+
*
|
|
18
|
+
* The caller must not emit this when the side was honored at a reduced width —
|
|
19
|
+
* shrinking is the expected outcome now, and whether it looks good is the
|
|
20
|
+
* author's call — nor for keyboard / off-screen vertical flips, whose cause is
|
|
21
|
+
* not the room beside the target.
|
|
22
|
+
*/
|
|
23
|
+
export function tooltipSidePlacementDroppedMessage(opts: {
|
|
24
|
+
requested: 'LEFT' | 'RIGHT';
|
|
25
|
+
used: TooltipPlacementSide;
|
|
26
|
+
availableGap: number;
|
|
27
|
+
minWidth: number;
|
|
28
|
+
}): string {
|
|
29
|
+
const gap = Number.isFinite(opts.availableGap) ? Math.max(0, Math.floor(opts.availableGap)) : 0;
|
|
30
|
+
const minWidth = Number.isFinite(opts.minWidth) ? Math.max(0, Math.ceil(opts.minWidth)) : 0;
|
|
31
|
+
return (
|
|
32
|
+
`${PREFIX} Tooltip placement "${opts.requested}" could not be drawn beside the target ` +
|
|
33
|
+
`(${gap}pt of room beside it; the card needs ${minWidth}pt for its padding and border). ` +
|
|
34
|
+
`Placed ${opts.used} instead.`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function warnTooltipSidePlacementDropped(
|
|
39
|
+
opts: {
|
|
40
|
+
requested: 'LEFT' | 'RIGHT';
|
|
41
|
+
used: TooltipPlacementSide;
|
|
42
|
+
availableGap: number;
|
|
43
|
+
minWidth: number;
|
|
44
|
+
},
|
|
45
|
+
log: PlacementLogger = defaultPlacementLogger,
|
|
46
|
+
): void {
|
|
47
|
+
log(tooltipSidePlacementDroppedMessage(opts));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* No side had room for the card — including the authored LEFT/RIGHT — so
|
|
52
|
+
* {@link inferTooltipPlacement} returned the requested side as a last resort.
|
|
53
|
+
* Draft/preview and `__DEV__` only. Distinct from
|
|
54
|
+
* {@link tooltipSidePlacementDroppedMessage}, which reports a successful flip.
|
|
55
|
+
*/
|
|
56
|
+
export function tooltipPlacementUnanchoredMessage(opts: {
|
|
57
|
+
requested: TooltipPlacementSide;
|
|
58
|
+
}): string {
|
|
59
|
+
return (
|
|
60
|
+
`${PREFIX} Tooltip placement "${opts.requested}" could not be drawn on any side of the target. ` +
|
|
61
|
+
`The card is on-screen but the pointer is hidden because it cannot point at the target.`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function warnTooltipPlacementUnanchored(
|
|
66
|
+
opts: { requested: TooltipPlacementSide },
|
|
67
|
+
log: PlacementLogger = defaultPlacementLogger,
|
|
68
|
+
): void {
|
|
69
|
+
log(tooltipPlacementUnanchoredMessage(opts));
|
|
70
|
+
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { Rect, WindowSize } from './inferTooltipPlacement';
|
|
2
2
|
|
|
3
|
+
/** Grow or shrink `rect` by `padding` on every side. */
|
|
4
|
+
export function expandRect(rect: Rect, padding: number): Rect {
|
|
5
|
+
if (padding === 0) return rect;
|
|
6
|
+
return {
|
|
7
|
+
x: rect.x - padding,
|
|
8
|
+
y: rect.y - padding,
|
|
9
|
+
width: rect.width + padding * 2,
|
|
10
|
+
height: rect.height + padding * 2,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
3
14
|
/** True when two rects are identical (used to avoid redundant setState). */
|
|
4
15
|
export function rectsEqual(a: Rect | null, b: Rect | null): boolean {
|
|
5
16
|
if (a === b) return true;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { Rect } from './inferTooltipPlacement';
|
|
2
|
+
import { VIEWPORT_PADDING } from './inferTooltipPlacement';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Narrowest a side card may get: the width it spends on its own chrome, so
|
|
6
|
+
* content padding on both edges plus the border. Below this there is nothing
|
|
7
|
+
* left to lay text out in, and React Native overflows the card instead of
|
|
8
|
+
* shrinking it — the preview would stop showing the author what ships.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately structural, not a readability judgment. How narrow is *too*
|
|
11
|
+
* narrow to read is the author's call, made against the device preview.
|
|
12
|
+
*/
|
|
13
|
+
export function tooltipMinSideCardWidth(opts: {
|
|
14
|
+
contentPadding: number;
|
|
15
|
+
borderWidth?: number;
|
|
16
|
+
cardMaxWidth: number;
|
|
17
|
+
}): number {
|
|
18
|
+
const contentPadding = Number.isFinite(opts.contentPadding)
|
|
19
|
+
? Math.max(0, opts.contentPadding)
|
|
20
|
+
: 0;
|
|
21
|
+
const borderWidth =
|
|
22
|
+
opts.borderWidth != null && Number.isFinite(opts.borderWidth)
|
|
23
|
+
? Math.max(0, opts.borderWidth)
|
|
24
|
+
: 0;
|
|
25
|
+
const chromeWidth = contentPadding * 2 + borderWidth * 2;
|
|
26
|
+
// Never demand more width than the card itself: a 40pt step card can still
|
|
27
|
+
// sit on the side even though its own padding would ask for more.
|
|
28
|
+
if (!Number.isFinite(opts.cardMaxWidth) || opts.cardMaxWidth <= 0) return chromeWidth;
|
|
29
|
+
return Math.min(chromeWidth, opts.cardMaxWidth);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Horizontal room beside an expanded target for a LEFT/RIGHT tooltip.
|
|
34
|
+
*
|
|
35
|
+
* Reserves `viewportPadding` on the screen edge the card grows toward, matching
|
|
36
|
+
* the LEFT/RIGHT clamp in `computeTooltipPosition`. Web clamps side placements
|
|
37
|
+
* to the raw edge instead; RN keeps the screen margin because an edge-to-edge
|
|
38
|
+
* card reads as broken on a phone-width viewport.
|
|
39
|
+
*/
|
|
40
|
+
export function tooltipSideGap(opts: {
|
|
41
|
+
placement: 'LEFT' | 'RIGHT';
|
|
42
|
+
target: Rect;
|
|
43
|
+
windowWidth: number;
|
|
44
|
+
notchSize: number;
|
|
45
|
+
viewportPadding?: number;
|
|
46
|
+
}): number {
|
|
47
|
+
const { placement, target, windowWidth, notchSize, viewportPadding = VIEWPORT_PADDING } = opts;
|
|
48
|
+
if (placement === 'LEFT') {
|
|
49
|
+
return target.x - notchSize - viewportPadding;
|
|
50
|
+
}
|
|
51
|
+
return windowWidth - (target.x + target.width) - notchSize - viewportPadding;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Width a LEFT/RIGHT tooltip may use: the room beside the target, capped at the
|
|
56
|
+
* theme width. The card takes whatever is left and grows taller to compensate.
|
|
57
|
+
* Null when not even {@link tooltipMinSideCardWidth} fits, so placement falls
|
|
58
|
+
* back to the vertical flip.
|
|
59
|
+
*
|
|
60
|
+
* `target` must already be expanded by backdrop padding and outside highlight
|
|
61
|
+
* spread — the same rect passed to `inferTooltipPlacement`.
|
|
62
|
+
*/
|
|
63
|
+
export function resolveTooltipSideCardWidth(opts: {
|
|
64
|
+
placement: 'LEFT' | 'RIGHT';
|
|
65
|
+
target: Rect;
|
|
66
|
+
windowWidth: number;
|
|
67
|
+
notchSize: number;
|
|
68
|
+
cardMaxWidth: number;
|
|
69
|
+
minWidth: number;
|
|
70
|
+
viewportPadding?: number;
|
|
71
|
+
}): number | null {
|
|
72
|
+
const gap = tooltipSideGap(opts);
|
|
73
|
+
const width = Math.min(opts.cardMaxWidth, Math.floor(gap));
|
|
74
|
+
if (!Number.isFinite(width) || width <= 0 || width < opts.minWidth) return null;
|
|
75
|
+
return width;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Shortest a card may get: the height it spends on its own chrome, so
|
|
80
|
+
* content padding on both edges plus the border. Mirrors
|
|
81
|
+
* {@link tooltipMinSideCardWidth} on the vertical axis.
|
|
82
|
+
*/
|
|
83
|
+
export function tooltipMinCardHeight(opts: {
|
|
84
|
+
contentPadding: number;
|
|
85
|
+
borderWidth?: number;
|
|
86
|
+
cardMaxHeight: number;
|
|
87
|
+
}): number {
|
|
88
|
+
const contentPadding = Number.isFinite(opts.contentPadding)
|
|
89
|
+
? Math.max(0, opts.contentPadding)
|
|
90
|
+
: 0;
|
|
91
|
+
const borderWidth =
|
|
92
|
+
opts.borderWidth != null && Number.isFinite(opts.borderWidth)
|
|
93
|
+
? Math.max(0, opts.borderWidth)
|
|
94
|
+
: 0;
|
|
95
|
+
const chromeHeight = contentPadding * 2 + borderWidth * 2;
|
|
96
|
+
if (!Number.isFinite(opts.cardMaxHeight) || opts.cardMaxHeight <= 0) return chromeHeight;
|
|
97
|
+
return Math.min(chromeHeight, opts.cardMaxHeight);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Vertical room above or below an expanded target for an ABOVE/BELOW tooltip.
|
|
102
|
+
*
|
|
103
|
+
* Reserves the matching viewport inset on the edge the card grows toward,
|
|
104
|
+
* matching the ABOVE/BELOW clamp in `computeTooltipPosition`.
|
|
105
|
+
*/
|
|
106
|
+
export function tooltipVerticalGap(opts: {
|
|
107
|
+
placement: 'ABOVE' | 'BELOW';
|
|
108
|
+
target: Rect;
|
|
109
|
+
windowHeight: number;
|
|
110
|
+
notchSize: number;
|
|
111
|
+
viewportPadding?: number;
|
|
112
|
+
viewportInsets?: { top?: number; bottom?: number };
|
|
113
|
+
}): number {
|
|
114
|
+
const { placement, target, windowHeight, notchSize, viewportPadding = VIEWPORT_PADDING } = opts;
|
|
115
|
+
const top = opts.viewportInsets?.top ?? viewportPadding;
|
|
116
|
+
const bottom = opts.viewportInsets?.bottom ?? viewportPadding;
|
|
117
|
+
if (placement === 'ABOVE') {
|
|
118
|
+
return target.y - notchSize - top;
|
|
119
|
+
}
|
|
120
|
+
return windowHeight - (target.y + target.height) - notchSize - bottom;
|
|
121
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Generated by scripts/write-version.mjs — do not edit. */
|
|
2
|
-
export const SDK_VERSION = '0.
|
|
2
|
+
export const SDK_VERSION = '0.2.0';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
Userflow React Native SDK
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Userflow Inc. All rights reserved.
|
|
4
|
+
|
|
5
|
+
PROPRIETARY AND CONFIDENTIAL
|
|
6
|
+
|
|
7
|
+
This software and its source code (the "Software") are the proprietary and
|
|
8
|
+
confidential property of Userflow Inc. ("Userflow"). The Software is licensed,
|
|
9
|
+
not sold.
|
|
10
|
+
|
|
11
|
+
1. Grant of License
|
|
12
|
+
|
|
13
|
+
Use of the Software is permitted only by parties who have entered into a
|
|
14
|
+
written agreement with Userflow that expressly covers the Software (the
|
|
15
|
+
"Agreement"), and only for the duration, purposes, and scope set out in
|
|
16
|
+
that Agreement. Where the Software is provided for evaluation or as part
|
|
17
|
+
of an early-access or design-partner program, use is limited to internal
|
|
18
|
+
evaluation and integration testing unless the Agreement states otherwise.
|
|
19
|
+
|
|
20
|
+
If you have not entered into such an Agreement with Userflow, you are
|
|
21
|
+
granted no rights to use, copy, modify, or distribute the Software.
|
|
22
|
+
|
|
23
|
+
2. Restrictions
|
|
24
|
+
|
|
25
|
+
Except as expressly permitted by the Agreement or by applicable law, you
|
|
26
|
+
may not:
|
|
27
|
+
|
|
28
|
+
(a) redistribute, sublicense, sell, rent, lease, or otherwise transfer the
|
|
29
|
+
Software or any portion of it to any third party, except that you may
|
|
30
|
+
ship the Software in compiled or bundled form as an integral part of
|
|
31
|
+
your own applications distributed to your end users, provided you do
|
|
32
|
+
not redistribute the Software as a standalone library or SDK;
|
|
33
|
+
(b) modify or create derivative works of the Software, except for
|
|
34
|
+
automated transformations performed by ordinary build tooling
|
|
35
|
+
(including transpilation, bundling, minification, tree-shaking, and
|
|
36
|
+
source-map generation) and other modifications reasonably necessary
|
|
37
|
+
to integrate the Software into your applications, provided that any
|
|
38
|
+
such modifications remain subject to this notice;
|
|
39
|
+
(c) remove or obscure any copyright, trademark, or other proprietary
|
|
40
|
+
notices contained in the Software;
|
|
41
|
+
(d) disclose the Software's source code to any third party, except to your
|
|
42
|
+
employees and contractors who need access for a purpose permitted by
|
|
43
|
+
the Agreement and who are bound by written confidentiality
|
|
44
|
+
obligations no less protective than those in the Agreement.
|
|
45
|
+
|
|
46
|
+
3. Pre-Release Software
|
|
47
|
+
|
|
48
|
+
The Software may be provided prior to general availability. It may be
|
|
49
|
+
incomplete, may change without notice, and may not be backward compatible
|
|
50
|
+
between versions. Userflow is under no obligation to provide maintenance,
|
|
51
|
+
support, updates, or future releases except as set out in the Agreement.
|
|
52
|
+
|
|
53
|
+
4. No Warranty
|
|
54
|
+
|
|
55
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
56
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
57
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
|
|
58
|
+
|
|
59
|
+
5. Limitation of Liability
|
|
60
|
+
|
|
61
|
+
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
|
|
62
|
+
USERFLOW BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN
|
|
63
|
+
AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN
|
|
64
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
65
|
+
|
|
66
|
+
6. Precedence
|
|
67
|
+
|
|
68
|
+
In the event of a conflict between this notice and the Agreement, the
|
|
69
|
+
Agreement governs.
|
|
70
|
+
|
|
71
|
+
For licensing enquiries, contact:
|
|
72
|
+
|
|
73
|
+
Userflow Inc.
|
|
74
|
+
548 Market St PMB 69598
|
|
75
|
+
San Francisco, CA 94104-5401
|
|
76
|
+
United States
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# `@userflow-tech/core`
|
|
2
|
+
|
|
3
|
+
Platform-agnostic engine for the Userflow React Native SDK (transport, identity,
|
|
4
|
+
flow session, client conditions).
|
|
5
|
+
|
|
6
|
+
**This package is an implementation detail and is not published.** It is
|
|
7
|
+
vendored into `@userflow-tech/react-native` at pack time. Host apps should
|
|
8
|
+
depend on that package only. Do not import `@userflow-tech/core` from
|
|
9
|
+
application code.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Attribute scope used when validating names. Matches backend scopes. */
|
|
2
|
+
export type AttributeScope = 'user' | 'group' | 'group_membership' | 'event';
|
|
3
|
+
/** Keep in sync with `Flows.validate_attribute_name` / `validateAttributeDefinitionName`. */
|
|
4
|
+
export declare const MAX_ATTRIBUTE_NAME_LENGTH = 100;
|
|
5
|
+
/** Keep in sync with `Flows.validate_event_name` max length. */
|
|
6
|
+
export declare const MAX_EVENT_NAME_LENGTH = 255;
|
|
7
|
+
/** Returns true when `name` only contains supported attribute name characters. */
|
|
8
|
+
export declare function isAttributeNameSoftValid(name: string): boolean;
|
|
9
|
+
/** Returns an error message when invalid, or `null` when the name is allowed. */
|
|
10
|
+
export declare function validateAttributeName(scope: AttributeScope, name: string): string | null;
|
|
11
|
+
/** Throws when any attribute name is invalid for the given scope. */
|
|
12
|
+
export declare function assertValidAttributeNames(scope: AttributeScope, attributes: Record<string, unknown>): void;
|
|
13
|
+
/** Throws when the custom event name is invalid. */
|
|
14
|
+
export declare function assertValidEventName(name: string): void;
|
|
15
|
+
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,kBAAkB,GAAG,OAAO,CAAC;AAE7E,6FAA6F;AAC7F,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAczC,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcxF;AAED,qEAAqE;AACrE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAQN;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAcvD"}
|