@userflow-tech/react-native 0.5.0 → 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.
Files changed (153) hide show
  1. package/README.md +24 -0
  2. package/docs/custom-fonts.md +36 -0
  3. package/docs/troubleshooting.md +7 -6
  4. package/lib/commonjs/anchors/fiber/FiberScanRootStore.js +8 -0
  5. package/lib/commonjs/anchors/fiber/FiberScanRootStore.js.map +1 -1
  6. package/lib/commonjs/anchors/fiber/detectAppFontFamily.js +341 -0
  7. package/lib/commonjs/anchors/fiber/detectAppFontFamily.js.map +1 -0
  8. package/lib/commonjs/anchors/fiber/visibleScreens.js +6 -0
  9. package/lib/commonjs/anchors/fiber/visibleScreens.js.map +1 -1
  10. package/lib/commonjs/content/BannerStepButton.js +2 -1
  11. package/lib/commonjs/content/BannerStepButton.js.map +1 -1
  12. package/lib/commonjs/content/RichContentRenderer.js +17 -11
  13. package/lib/commonjs/content/RichContentRenderer.js.map +1 -1
  14. package/lib/commonjs/content/StepButton.js +2 -1
  15. package/lib/commonjs/content/StepButton.js.map +1 -1
  16. package/lib/commonjs/content/resolveContentFontFamily.js +96 -0
  17. package/lib/commonjs/content/resolveContentFontFamily.js.map +1 -0
  18. package/lib/commonjs/index.js +2 -0
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/commonjs/runtime/BannerHost.js +3 -3
  21. package/lib/commonjs/runtime/BannerHost.js.map +1 -1
  22. package/lib/commonjs/runtime/pushBannerLayoutContext.js +11 -8
  23. package/lib/commonjs/runtime/pushBannerLayoutContext.js.map +1 -1
  24. package/lib/commonjs/surfaces/BannerSurface.js +2 -6
  25. package/lib/commonjs/surfaces/BannerSurface.js.map +1 -1
  26. package/lib/commonjs/surfaces/ProgressBar.js +2 -1
  27. package/lib/commonjs/surfaces/ProgressBar.js.map +1 -1
  28. package/lib/commonjs/surfaces/TooltipSurface.js +5 -0
  29. package/lib/commonjs/surfaces/TooltipSurface.js.map +1 -1
  30. package/lib/commonjs/surfaces/bannerWebView/BannerWebViewBar.js +6 -4
  31. package/lib/commonjs/surfaces/bannerWebView/BannerWebViewBar.js.map +1 -1
  32. package/lib/commonjs/surfaces/bannerWebView/bannerNeedsWebView.js +3 -33
  33. package/lib/commonjs/surfaces/bannerWebView/bannerNeedsWebView.js.map +1 -1
  34. package/lib/commonjs/surfaces/bannerWebView/bannerThemeStyles.js +2 -1
  35. package/lib/commonjs/surfaces/bannerWebView/bannerThemeStyles.js.map +1 -1
  36. package/lib/commonjs/surfaces/bannerWebView/bannerWebViewHeight.js +33 -0
  37. package/lib/commonjs/surfaces/bannerWebView/bannerWebViewHeight.js.map +1 -0
  38. package/lib/commonjs/surfaces/bannerWebView/buildCustomBannerHtml.js +45 -12
  39. package/lib/commonjs/surfaces/bannerWebView/buildCustomBannerHtml.js.map +1 -1
  40. package/lib/commonjs/version.js +1 -1
  41. package/lib/module/anchors/fiber/FiberScanRootStore.js +8 -0
  42. package/lib/module/anchors/fiber/FiberScanRootStore.js.map +1 -1
  43. package/lib/module/anchors/fiber/detectAppFontFamily.js +330 -0
  44. package/lib/module/anchors/fiber/detectAppFontFamily.js.map +1 -0
  45. package/lib/module/anchors/fiber/visibleScreens.js +5 -0
  46. package/lib/module/anchors/fiber/visibleScreens.js.map +1 -1
  47. package/lib/module/content/BannerStepButton.js +2 -1
  48. package/lib/module/content/BannerStepButton.js.map +1 -1
  49. package/lib/module/content/RichContentRenderer.js +17 -11
  50. package/lib/module/content/RichContentRenderer.js.map +1 -1
  51. package/lib/module/content/StepButton.js +2 -1
  52. package/lib/module/content/StepButton.js.map +1 -1
  53. package/lib/module/content/resolveContentFontFamily.js +89 -0
  54. package/lib/module/content/resolveContentFontFamily.js.map +1 -0
  55. package/lib/module/index.js +2 -0
  56. package/lib/module/index.js.map +1 -1
  57. package/lib/module/runtime/BannerHost.js +3 -3
  58. package/lib/module/runtime/BannerHost.js.map +1 -1
  59. package/lib/module/runtime/pushBannerLayoutContext.js +11 -8
  60. package/lib/module/runtime/pushBannerLayoutContext.js.map +1 -1
  61. package/lib/module/surfaces/BannerSurface.js +2 -6
  62. package/lib/module/surfaces/BannerSurface.js.map +1 -1
  63. package/lib/module/surfaces/ProgressBar.js +2 -1
  64. package/lib/module/surfaces/ProgressBar.js.map +1 -1
  65. package/lib/module/surfaces/TooltipSurface.js +5 -0
  66. package/lib/module/surfaces/TooltipSurface.js.map +1 -1
  67. package/lib/module/surfaces/bannerWebView/BannerWebViewBar.js +6 -4
  68. package/lib/module/surfaces/bannerWebView/BannerWebViewBar.js.map +1 -1
  69. package/lib/module/surfaces/bannerWebView/bannerNeedsWebView.js +3 -31
  70. package/lib/module/surfaces/bannerWebView/bannerNeedsWebView.js.map +1 -1
  71. package/lib/module/surfaces/bannerWebView/bannerThemeStyles.js +2 -1
  72. package/lib/module/surfaces/bannerWebView/bannerThemeStyles.js.map +1 -1
  73. package/lib/module/surfaces/bannerWebView/bannerWebViewHeight.js +29 -0
  74. package/lib/module/surfaces/bannerWebView/bannerWebViewHeight.js.map +1 -0
  75. package/lib/module/surfaces/bannerWebView/buildCustomBannerHtml.js +45 -12
  76. package/lib/module/surfaces/bannerWebView/buildCustomBannerHtml.js.map +1 -1
  77. package/lib/module/version.js +1 -1
  78. package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts +5 -0
  79. package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/src/anchors/fiber/detectAppFontFamily.d.ts +30 -0
  81. package/lib/typescript/commonjs/src/anchors/fiber/detectAppFontFamily.d.ts.map +1 -0
  82. package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts +2 -0
  83. package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/src/content/BannerStepButton.d.ts.map +1 -1
  85. package/lib/typescript/commonjs/src/content/RichContentRenderer.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/src/content/StepButton.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/src/content/resolveContentFontFamily.d.ts +35 -0
  88. package/lib/typescript/commonjs/src/content/resolveContentFontFamily.d.ts.map +1 -0
  89. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  90. package/lib/typescript/commonjs/src/runtime/pushBannerLayoutContext.d.ts +5 -0
  91. package/lib/typescript/commonjs/src/runtime/pushBannerLayoutContext.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts +1 -4
  93. package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/src/surfaces/ProgressBar.d.ts.map +1 -1
  95. package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/src/surfaces/bannerWebView/BannerWebViewBar.d.ts.map +1 -1
  97. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts +3 -12
  98. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts.map +1 -1
  99. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerThemeStyles.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts +13 -0
  101. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts.map +1 -0
  102. package/lib/typescript/commonjs/src/surfaces/bannerWebView/buildCustomBannerHtml.d.ts.map +1 -1
  103. package/lib/typescript/commonjs/src/version.d.ts +1 -1
  104. package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts +5 -0
  105. package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -1
  106. package/lib/typescript/module/src/anchors/fiber/detectAppFontFamily.d.ts +30 -0
  107. package/lib/typescript/module/src/anchors/fiber/detectAppFontFamily.d.ts.map +1 -0
  108. package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts +2 -0
  109. package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts.map +1 -1
  110. package/lib/typescript/module/src/content/BannerStepButton.d.ts.map +1 -1
  111. package/lib/typescript/module/src/content/RichContentRenderer.d.ts.map +1 -1
  112. package/lib/typescript/module/src/content/StepButton.d.ts.map +1 -1
  113. package/lib/typescript/module/src/content/resolveContentFontFamily.d.ts +35 -0
  114. package/lib/typescript/module/src/content/resolveContentFontFamily.d.ts.map +1 -0
  115. package/lib/typescript/module/src/index.d.ts.map +1 -1
  116. package/lib/typescript/module/src/runtime/pushBannerLayoutContext.d.ts +5 -0
  117. package/lib/typescript/module/src/runtime/pushBannerLayoutContext.d.ts.map +1 -1
  118. package/lib/typescript/module/src/surfaces/BannerSurface.d.ts +1 -4
  119. package/lib/typescript/module/src/surfaces/BannerSurface.d.ts.map +1 -1
  120. package/lib/typescript/module/src/surfaces/ProgressBar.d.ts.map +1 -1
  121. package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts.map +1 -1
  122. package/lib/typescript/module/src/surfaces/bannerWebView/BannerWebViewBar.d.ts.map +1 -1
  123. package/lib/typescript/module/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts +3 -12
  124. package/lib/typescript/module/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts.map +1 -1
  125. package/lib/typescript/module/src/surfaces/bannerWebView/bannerThemeStyles.d.ts.map +1 -1
  126. package/lib/typescript/module/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts +13 -0
  127. package/lib/typescript/module/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts.map +1 -0
  128. package/lib/typescript/module/src/surfaces/bannerWebView/buildCustomBannerHtml.d.ts.map +1 -1
  129. package/lib/typescript/module/src/version.d.ts +1 -1
  130. package/package.json +1 -1
  131. package/src/anchors/fiber/FiberScanRootStore.ts +8 -0
  132. package/src/anchors/fiber/detectAppFontFamily.ts +400 -0
  133. package/src/anchors/fiber/visibleScreens.ts +5 -0
  134. package/src/content/BannerStepButton.tsx +2 -1
  135. package/src/content/RichContentRenderer.tsx +15 -10
  136. package/src/content/StepButton.tsx +2 -1
  137. package/src/content/resolveContentFontFamily.ts +119 -0
  138. package/src/index.ts +2 -0
  139. package/src/runtime/BannerHost.tsx +3 -3
  140. package/src/runtime/pushBannerLayoutContext.tsx +14 -9
  141. package/src/surfaces/BannerSurface.tsx +2 -6
  142. package/src/surfaces/ProgressBar.tsx +2 -1
  143. package/src/surfaces/TooltipSurface.tsx +15 -2
  144. package/src/surfaces/bannerWebView/BannerWebViewBar.tsx +6 -4
  145. package/src/surfaces/bannerWebView/bannerNeedsWebView.ts +4 -36
  146. package/src/surfaces/bannerWebView/bannerThemeStyles.ts +2 -1
  147. package/src/surfaces/bannerWebView/bannerWebViewHeight.ts +32 -0
  148. package/src/surfaces/bannerWebView/buildCustomBannerHtml.ts +48 -12
  149. package/src/version.ts +1 -1
  150. package/vendor/core/package.json +1 -1
  151. package/vendor/protocol/dist/flows.d.ts +2 -0
  152. package/vendor/protocol/dist/flows.d.ts.map +1 -1
  153. package/vendor/protocol/package.json +1 -1
@@ -92,6 +92,11 @@ export function usePushBannerLayoutRegistration(
92
92
  * Clears the host top/bottom safe-area override only after push-layout chrome
93
93
  * has laid out, so a session without visible chrome cannot leave a white strip.
94
94
  *
95
+ * Remembers which edge laid out instead of resetting a flag in an effect: on
96
+ * Fabric the chrome's first onLayout can run before the mount's passive effects
97
+ * flush, and a reset there would discard it until the banner happened to
98
+ * re-layout, leaving already-mounted host screens on the old inset.
99
+ *
95
100
  * @internal
96
101
  */
97
102
  export function usePushBannerHostInsetRegistration(
@@ -99,23 +104,23 @@ export function usePushBannerHostInsetRegistration(
99
104
  sessionId: string,
100
105
  enabled: boolean,
101
106
  ): (event: LayoutChangeEvent) => void {
102
- const [laidOut, setLaidOut] = React.useState(false);
103
-
104
- React.useEffect(() => {
105
- setLaidOut(false);
106
- }, [edge, enabled]);
107
+ const activeEdge = enabled && edge ? edge : null;
108
+ const [laidOutEdge, setLaidOutEdge] = React.useState<PushBannerLayoutEdge | null>(null);
107
109
 
108
- usePushBannerLayoutRegistration(enabled && laidOut && edge ? edge : null, sessionId);
110
+ usePushBannerLayoutRegistration(
111
+ activeEdge && laidOutEdge === activeEdge ? activeEdge : null,
112
+ sessionId,
113
+ );
109
114
 
110
115
  return React.useCallback(
111
116
  (event: LayoutChangeEvent) => {
112
- if (!enabled || !edge) {
117
+ if (!activeEdge) {
113
118
  return;
114
119
  }
115
120
  if (event.nativeEvent.layout.height > 0) {
116
- setLaidOut(true);
121
+ setLaidOutEdge(activeEdge);
117
122
  }
118
123
  },
119
- [edge, enabled],
124
+ [activeEdge],
120
125
  );
121
126
  }
@@ -25,10 +25,7 @@ export interface BannerSurfaceProps {
25
25
 
26
26
  let warnedMissingWebView = false;
27
27
 
28
- /**
29
- * Native banner bar, or a WebView when a button runs Evaluate JavaScript or the
30
- * theme has published custom CSS (same CDN stylesheet as userflow.js iframes).
31
- */
28
+ /** Native banner bar, or a WebView when `customBannerEnabled` is set on the banner. */
32
29
  export function BannerSurface({
33
30
  session,
34
31
  pushLayoutEdge = null,
@@ -37,8 +34,7 @@ export function BannerSurface({
37
34
  onDismiss,
38
35
  }: BannerSurfaceProps): React.ReactElement | null {
39
36
  const banner = session.version.banner;
40
- const theme = session.version.theme;
41
- const needsWebView = banner != null && bannerNeedsWebView(banner, theme);
37
+ const needsWebView = banner != null && bannerNeedsWebView(banner);
42
38
  const webView = needsWebView ? getEvalJsWebView() : null;
43
39
 
44
40
  React.useEffect(() => {
@@ -2,6 +2,7 @@ import type { ThemeFragment } from '@userflow-tech/protocol';
2
2
  import * as React from 'react';
3
3
  import { StyleSheet, Text, View } from 'react-native';
4
4
 
5
+ import { resolveContentFontFamily } from '../content/resolveContentFontFamily';
5
6
  import { foregroundAlpha } from '../content/themeColor';
6
7
 
7
8
  export type ProgressBarPlacement = 'TOP' | 'BOTTOM';
@@ -72,7 +73,7 @@ export function ProgressBar({
72
73
  styles.numberedLabel,
73
74
  {
74
75
  color: foregroundAlpha(theme.fontColor, 0.55),
75
- fontFamily: theme.fontFamily || undefined,
76
+ fontFamily: resolveContentFontFamily(theme),
76
77
  fontSize: Math.max(12, Math.round(theme.fontSize * 0.875)),
77
78
  },
78
79
  ]}
@@ -37,6 +37,7 @@ import { scrollAnchorIntoView } from '../anchors/scrollAnchorIntoView';
37
37
  import { getScrollPadding } from '../anchors/scrollConfig';
38
38
  import { targetPressMonitor } from '../anchors/targetPressMonitor';
39
39
  import { RichContentRenderer } from '../content/RichContentRenderer';
40
+ import { resolveContentFontFamily } from '../content/resolveContentFontFamily';
40
41
  import type { LookupAttribute } from '../content/types';
41
42
 
42
43
  import { CardFade } from './CardFade';
@@ -156,6 +157,7 @@ export function TooltipSurface({
156
157
  }: TooltipSurfaceProps): React.ReactElement | null {
157
158
  const version = session.version;
158
159
  const chrome = resolveBubbleChrome(theme, 'tooltip');
160
+ const contentFontFamily = resolveContentFontFamily(theme);
159
161
  const progress = resolveStepProgress(version, currentStep.id);
160
162
  const showClose = !version.closeDisabled;
161
163
  const backdropOpacity = parseBackdropOpacity(theme.backdropOpacity);
@@ -915,6 +917,7 @@ export function TooltipSurface({
915
917
  <Text
916
918
  style={{
917
919
  color: theme.fontColor,
920
+ fontFamily: contentFontFamily,
918
921
  fontSize: theme.fontSize,
919
922
  marginTop: 12,
920
923
  textAlign: 'center',
@@ -962,11 +965,21 @@ export function TooltipSurface({
962
965
  {showMissingUi ? (
963
966
  <View testID="userflow-tooltip-missing">
964
967
  <Text
965
- style={[styles.missingTitle, { color: theme.fontColor, fontSize: theme.fontSize }]}
968
+ style={[
969
+ styles.missingTitle,
970
+ { color: theme.fontColor, fontFamily: contentFontFamily, fontSize: theme.fontSize },
971
+ ]}
966
972
  >
967
973
  Target not found
968
974
  </Text>
969
- <Text style={{ color: theme.fontColor, fontSize: theme.fontSize, opacity: 0.8 }}>
975
+ <Text
976
+ style={{
977
+ color: theme.fontColor,
978
+ fontFamily: contentFontFamily,
979
+ fontSize: theme.fontSize,
980
+ opacity: 0.8,
981
+ }}
982
+ >
970
983
  This step's anchor is missing. Close to continue, or wait if the screen is still
971
984
  loading.
972
985
  </Text>
@@ -34,7 +34,6 @@ import {
34
34
  resolveBannerBarBorderRadius,
35
35
  } from '../bannerBarLayout';
36
36
  import { bannerOverlayShadowStyle } from '../bannerBarTokens';
37
- import { resolveBannerBackgroundColor } from '../resolveBannerTheme';
38
37
  import { useUserflowSafeAreaInsets } from '../safeArea';
39
38
 
40
39
  import { collectBannerAutoRunEvalCodes } from './bannerAutoRunEvalJs';
@@ -311,15 +310,18 @@ export function BannerWebViewBar({
311
310
  const frameStyle = bannerFrameStyle(banner);
312
311
  const overlayEdge = banner.embedMode === BannerEmbedMode.BODY_LAST ? 'bottom' : 'top';
313
312
  const barRadius = resolveBannerBarBorderRadius(banner);
314
- const backgroundColor = resolveBannerBackgroundColor(session.version.theme);
313
+ // Custom CSS paints the card, often with its own radius. The theme color
314
+ // (brand blue when banner tokens are unset) would otherwise fill the
315
+ // status-bar pad and the corners outside that radius.
316
+ const shellBackground = 'transparent';
315
317
  const webStyle: ViewStyle = {
316
318
  width: '100%',
317
319
  height: contentHeight,
318
- backgroundColor,
320
+ backgroundColor: shellBackground,
319
321
  };
320
322
  const debugging = typeof __DEV__ !== 'undefined' && __DEV__ ? true : undefined;
321
323
  const insetChrome = safeAreaEdge
322
- ? bannerPushLayoutChrome(safeAreaEdge, insets, backgroundColor)
324
+ ? bannerPushLayoutChrome(safeAreaEdge, insets, shellBackground)
323
325
  : null;
324
326
  const insetChromeOutsideFade = insetChrome != null && fadeIn;
325
327
 
@@ -1,38 +1,6 @@
1
- import type { BannerFragment, ThemeFragment } from '@userflow-tech/protocol';
2
- import { FlowActionType } from '@userflow-tech/protocol';
1
+ import type { BannerFragment } from '@userflow-tech/protocol';
3
2
 
4
- import { themeHasPublishedCustomCss } from './resolveCdnHost';
5
-
6
- let debugForceWebViewBanner = false;
7
-
8
- /** POC / local testing when the builder flag is not on the wire yet. */
9
- export function setDebugForceWebViewBanner(enabled: boolean): void {
10
- debugForceWebViewBanner = enabled;
11
- }
12
-
13
- /** @internal */
14
- export function resetDebugForceWebViewBannerForTests(): void {
15
- debugForceWebViewBanner = false;
16
- }
17
-
18
- function bannerHasEvalJsAction(banner: BannerFragment): boolean {
19
- return banner.buttons.some((button) =>
20
- button.actions.some((action) => action.type === FlowActionType.EVAL_JS),
21
- );
22
- }
23
-
24
- /**
25
- * Use the WebView banner renderer when any button runs Evaluate JavaScript
26
- * (needs the shared eval page), when the theme has published custom CSS
27
- * (`.userflow-custom-container-*` / `.userflow-custom-button-*` via CDN),
28
- * or when {@link setDebugForceWebViewBanner} is true.
29
- */
30
- export function bannerNeedsWebView(banner: BannerFragment, theme?: ThemeFragment | null): boolean {
31
- if (debugForceWebViewBanner) {
32
- return true;
33
- }
34
- if (theme != null && themeHasPublishedCustomCss(theme)) {
35
- return true;
36
- }
37
- return bannerHasEvalJsAction(banner);
3
+ /** Use the WebView banner renderer when the builder enabled custom banners. */
4
+ export function bannerNeedsWebView(banner: BannerFragment): boolean {
5
+ return banner.customBannerEnabled === true;
38
6
  }
@@ -1,5 +1,6 @@
1
1
  import type { ThemeFragment } from '@userflow-tech/protocol';
2
2
 
3
+ import { contentFontFamilyCss } from '../../content/resolveContentFontFamily';
3
4
  import { resolveBannerBackgroundColor, resolveBannerForegroundColor } from '../resolveBannerTheme';
4
5
 
5
6
  function readString(theme: ThemeFragment, key: string, fallback: string): string {
@@ -68,7 +69,7 @@ export function bannerThemeInlineStyles(theme: ThemeFragment): Record<string, st
68
69
  'bannerActiveForegroundColor',
69
70
  bannerFg,
70
71
  ),
71
- '--userflow-font-family': readString(theme, 'fontFamily', 'system-ui, sans-serif'),
72
+ '--userflow-font-family': contentFontFamilyCss(theme),
72
73
  '--userflow-font-size': `${fontSize}px`,
73
74
  '--userflow-line-height': `${lineHeight}px`,
74
75
  '--userflow-button-height': readCssLength(theme, 'buttonHeight', 32),
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Height the native WebView should use for a custom banner.
3
+ *
4
+ * Custom CSS often sizes the card with `min-height` and takes the copy and
5
+ * buttons out of flow (`position: absolute`). The WebView is created shorter
6
+ * than that card, so a root that only looks as tall as the viewport because of
7
+ * `min-height` must not be replaced with the close button's box.
8
+ *
9
+ * When the root really is stretching to fill a taller viewport (`height: 100%`),
10
+ * fall back to in-flow content, and never below `min-height`.
11
+ */
12
+ export function resolveBannerWebViewHeight(
13
+ rectHeight: number,
14
+ scrollHeight: number,
15
+ viewportHeight: number,
16
+ minHeight: number,
17
+ contentHeight: number,
18
+ ): number {
19
+ const rect = rectHeight > 0 ? rectHeight : 0;
20
+ const scroll = scrollHeight > 0 ? scrollHeight : 0;
21
+ let height = Math.ceil(Math.max(rect, scroll));
22
+ const floor = minHeight > 0 ? Math.ceil(minHeight) : 0;
23
+ if (viewportHeight > 0 && height >= viewportHeight - 2 && height > floor + 1) {
24
+ if (contentHeight > 0 && contentHeight < height) {
25
+ height = Math.ceil(contentHeight > floor ? contentHeight : floor);
26
+ }
27
+ }
28
+ if (floor > height) {
29
+ height = floor;
30
+ }
31
+ return height;
32
+ }
@@ -2,6 +2,10 @@ import { interpolateVariables } from '@userflow-tech/core';
2
2
  import type { BannerFragment, BannerSessionFragment } from '@userflow-tech/protocol';
3
3
  import { BannerContentLayout } from '@userflow-tech/protocol';
4
4
 
5
+ import {
6
+ bannerContentFontLockCss,
7
+ contentFontFaceCss,
8
+ } from '../../content/resolveContentFontFamily';
5
9
  import { buildBootstrapHtml, wrapCode } from '../../evalJs/bootstrap';
6
10
  import type { EvalJsContext } from '../../evalJs/types';
7
11
 
@@ -27,26 +31,45 @@ function contentLayoutClass(layout: BannerContentLayout): string {
27
31
  }
28
32
 
29
33
  function layoutMeasureScript(): string {
34
+ // Inlined on purpose. Hermes' Function#toString is not the source text, so
35
+ // interpolating resolveBannerWebViewHeight.toString() ships a dead function.
36
+ // Keep this body in sync with resolveBannerWebViewHeight.
30
37
  return `
31
38
  (function(){
39
+ function resolveBannerWebViewHeight(rectHeight,scrollHeight,viewportHeight,minHeight,contentHeight){
40
+ var rect=rectHeight>0?rectHeight:0;
41
+ var scroll=scrollHeight>0?scrollHeight:0;
42
+ var height=Math.ceil(Math.max(rect,scroll));
43
+ var floor=minHeight>0?Math.ceil(minHeight):0;
44
+ if(viewportHeight>0&&height>=viewportHeight-2&&height>floor+1){
45
+ if(contentHeight>0&&contentHeight<height){
46
+ height=Math.ceil(contentHeight>floor?contentHeight:floor);
47
+ }
48
+ }
49
+ if(floor>height) height=floor;
50
+ return height;
51
+ }
32
52
  function postLayout(){
33
53
  var root=document.querySelector('.userflowjs-banner-root');
34
54
  if(!root||!window.ReactNativeWebView||!window.ReactNativeWebView.postMessage)return;
35
55
  var rectH=root.getBoundingClientRect().height;
36
56
  var scrollH=root.scrollHeight;
37
- var h=Math.ceil(Math.max(scrollH,rectH));
57
+ var minH=parseFloat(window.getComputedStyle(root).minHeight);
58
+ if(!(minH>0)) minH=0;
38
59
  var vh=window.innerHeight||0;
39
- if(vh>0&&h>=vh-2){
40
- var sum=0;
41
- for(var i=0;i<root.childNodes.length;i++){
42
- var node=root.childNodes[i];
43
- if(node&&node.nodeType===1){
44
- var el=node;
45
- sum+=el.scrollHeight||el.offsetHeight||0;
46
- }
47
- }
48
- if(sum>0&&sum<h) h=Math.ceil(sum);
60
+ var inFlow=0;
61
+ var all=0;
62
+ for(var i=0;i<root.childNodes.length;i++){
63
+ var node=root.childNodes[i];
64
+ if(!node||node.nodeType!==1) continue;
65
+ var box=node.scrollHeight||node.offsetHeight||0;
66
+ all+=box;
67
+ var cs=window.getComputedStyle(node);
68
+ if(cs.display==='none'||cs.position==='absolute'||cs.position==='fixed') continue;
69
+ inFlow+=box;
49
70
  }
71
+ var content=inFlow>0?inFlow:all;
72
+ var h=resolveBannerWebViewHeight(rectH,scrollH,vh,minH,content);
50
73
  window.ReactNativeWebView.postMessage(JSON.stringify({__userflow:1,type:'bannerLayout',height:h}));
51
74
  }
52
75
  window.__userflowBannerLayout=postLayout;
@@ -54,8 +77,18 @@ function layoutMeasureScript(): string {
54
77
  var root=document.querySelector('.userflowjs-banner-root');
55
78
  if(root){new ResizeObserver(postLayout).observe(root);}
56
79
  }
80
+ var links=document.querySelectorAll('link[rel="stylesheet"]');
81
+ for(var s=0;s<links.length;s++){
82
+ links[s].addEventListener('load',postLayout);
83
+ links[s].addEventListener('error',postLayout);
84
+ }
57
85
  window.addEventListener('load',postLayout);
86
+ // Custom CSS is often still applying on the first pass. A short WebView
87
+ // then clamps used height, so min-height never changes the box and
88
+ // ResizeObserver does not fire. Measure again after the stylesheet can apply.
58
89
  setTimeout(postLayout,0);
90
+ setTimeout(postLayout,60);
91
+ setTimeout(postLayout,250);
59
92
  })();
60
93
  `;
61
94
  }
@@ -171,6 +204,8 @@ export function buildCustomBannerBodyHtml(
171
204
  const theme = session.version.theme;
172
205
  const layoutClass = contentLayoutClass(banner.contentLayout);
173
206
  const themeStyle = bannerThemeStyleAttribute(theme);
207
+ const fontFaceCss = contentFontFaceCss(theme);
208
+ const fontLockCss = bannerContentFontLockCss(theme);
174
209
  const customCssUrl = resolveCustomStylesheetUrl(serverEndpoint, theme);
175
210
  const innerMaxWidth = resolveBannerInnerMaxWidth(banner);
176
211
  const maxInner =
@@ -200,8 +235,9 @@ export function buildCustomBannerBodyHtml(
200
235
  : '';
201
236
 
202
237
  return `
203
- <style>${BANNER_WEB_FRAME_CSS}</style>
238
+ <style>${fontFaceCss}${BANNER_WEB_FRAME_CSS}</style>
204
239
  ${customLink}
240
+ <style>${fontLockCss}</style>
205
241
  <div class="userflowjs-banner-root userflowjs-theme-root ${layoutClass}" style="${themeStyle}">
206
242
  <div class="userflowjs-banner-start-spacer"></div>
207
243
  <div class="userflowjs-banner-inner"${maxInner}>
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.5.0';
2
+ export const SDK_VERSION = '0.6.0';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@userflow-tech/core",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Userflow React Native SDK core — platform-agnostic engine and protocol client.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -322,6 +322,8 @@ export interface BannerFragment {
322
322
  marginRight: number | null;
323
323
  marginBottom: number | null;
324
324
  marginLeft: number | null;
325
+ /** When true, render the banner in a WebView (custom banner). Omitted when off. */
326
+ customBannerEnabled?: boolean;
325
327
  }
326
328
  export interface FlowButtonFragment {
327
329
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../src/flows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../src/flows.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@userflow-tech/protocol",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Userflow React Native SDK protocol — wire contracts and shared types.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",