@userflow-tech/react-native 0.5.0 → 0.7.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 (328) hide show
  1. package/README.md +65 -33
  2. package/docs/custom-fonts.md +36 -0
  3. package/docs/troubleshooting.md +45 -44
  4. package/expo-plugin/hostDependencyWarnings.d.ts +5 -5
  5. package/expo-plugin/hostDependencyWarnings.js +7 -7
  6. package/expo-plugin/hostDependencyWarnings.js.map +1 -1
  7. package/lib/commonjs/anchors/AnchorRegistry.js +5 -0
  8. package/lib/commonjs/anchors/AnchorRegistry.js.map +1 -1
  9. package/lib/commonjs/anchors/ScrollContainerRegistry.js +8 -0
  10. package/lib/commonjs/anchors/ScrollContainerRegistry.js.map +1 -1
  11. package/lib/commonjs/anchors/fiber/FiberScanRootStore.js +8 -0
  12. package/lib/commonjs/anchors/fiber/FiberScanRootStore.js.map +1 -1
  13. package/lib/commonjs/anchors/fiber/detectAppFontFamily.js +341 -0
  14. package/lib/commonjs/anchors/fiber/detectAppFontFamily.js.map +1 -0
  15. package/lib/commonjs/anchors/fiber/presentedModal.js +215 -0
  16. package/lib/commonjs/anchors/fiber/presentedModal.js.map +1 -0
  17. package/lib/commonjs/anchors/fiber/touchTargetFiber.js +1 -0
  18. package/lib/commonjs/anchors/fiber/touchTargetFiber.js.map +1 -1
  19. package/lib/commonjs/anchors/fiber/visibleRect.js +12 -3
  20. package/lib/commonjs/anchors/fiber/visibleRect.js.map +1 -1
  21. package/lib/commonjs/anchors/fiber/visibleScreens.js +6 -0
  22. package/lib/commonjs/anchors/fiber/visibleScreens.js.map +1 -1
  23. package/lib/commonjs/anchors/useUserflowAnchor.js.map +1 -1
  24. package/lib/commonjs/anchors/useUserflowScrollContainer.js.map +1 -1
  25. package/lib/commonjs/authoring/ElementPickerOverlay.js +197 -138
  26. package/lib/commonjs/authoring/ElementPickerOverlay.js.map +1 -1
  27. package/lib/commonjs/authoring/hitTest.js +67 -10
  28. package/lib/commonjs/authoring/hitTest.js.map +1 -1
  29. package/lib/commonjs/authoring/hostAtPoint.js +45 -21
  30. package/lib/commonjs/authoring/hostAtPoint.js.map +1 -1
  31. package/lib/commonjs/content/BannerStepButton.js +2 -1
  32. package/lib/commonjs/content/BannerStepButton.js.map +1 -1
  33. package/lib/commonjs/content/RichContentRenderer.js +27 -9
  34. package/lib/commonjs/content/RichContentRenderer.js.map +1 -1
  35. package/lib/commonjs/content/StepButton.js +2 -1
  36. package/lib/commonjs/content/StepButton.js.map +1 -1
  37. package/lib/commonjs/content/resolveContentFontFamily.js +96 -0
  38. package/lib/commonjs/content/resolveContentFontFamily.js.map +1 -0
  39. package/lib/commonjs/deepLinking.js.map +1 -1
  40. package/lib/commonjs/deviceContext.js +39 -19
  41. package/lib/commonjs/deviceContext.js.map +1 -1
  42. package/lib/commonjs/index.js +13 -5
  43. package/lib/commonjs/index.js.map +1 -1
  44. package/lib/commonjs/installCheck.js +3 -3
  45. package/lib/commonjs/installCheck.js.map +1 -1
  46. package/lib/commonjs/lifecycle.js +2 -0
  47. package/lib/commonjs/lifecycle.js.map +1 -1
  48. package/lib/commonjs/pairing/PairingController.js.map +1 -1
  49. package/lib/commonjs/runtime/BannerHost.js +3 -3
  50. package/lib/commonjs/runtime/BannerHost.js.map +1 -1
  51. package/lib/commonjs/runtime/UserflowOverlay.js +17 -13
  52. package/lib/commonjs/runtime/UserflowOverlay.js.map +1 -1
  53. package/lib/commonjs/runtime/WindowOverlayHost.js +83 -0
  54. package/lib/commonjs/runtime/WindowOverlayHost.js.map +1 -0
  55. package/lib/commonjs/runtime/pushBannerLayoutContext.js +11 -8
  56. package/lib/commonjs/runtime/pushBannerLayoutContext.js.map +1 -1
  57. package/lib/commonjs/runtime/userflowCore.js +9 -2
  58. package/lib/commonjs/runtime/userflowCore.js.map +1 -1
  59. package/lib/commonjs/surfaces/BannerSurface.js +2 -6
  60. package/lib/commonjs/surfaces/BannerSurface.js.map +1 -1
  61. package/lib/commonjs/surfaces/ProgressBar.js +2 -1
  62. package/lib/commonjs/surfaces/ProgressBar.js.map +1 -1
  63. package/lib/commonjs/surfaces/TooltipSurface.js +114 -51
  64. package/lib/commonjs/surfaces/TooltipSurface.js.map +1 -1
  65. package/lib/commonjs/surfaces/bannerWebView/BannerWebViewBar.js +6 -4
  66. package/lib/commonjs/surfaces/bannerWebView/BannerWebViewBar.js.map +1 -1
  67. package/lib/commonjs/surfaces/bannerWebView/bannerNeedsWebView.js +3 -33
  68. package/lib/commonjs/surfaces/bannerWebView/bannerNeedsWebView.js.map +1 -1
  69. package/lib/commonjs/surfaces/bannerWebView/bannerThemeStyles.js +2 -1
  70. package/lib/commonjs/surfaces/bannerWebView/bannerThemeStyles.js.map +1 -1
  71. package/lib/commonjs/surfaces/bannerWebView/bannerWebViewHeight.js +33 -0
  72. package/lib/commonjs/surfaces/bannerWebView/bannerWebViewHeight.js.map +1 -0
  73. package/lib/commonjs/surfaces/bannerWebView/buildCustomBannerHtml.js +45 -12
  74. package/lib/commonjs/surfaces/bannerWebView/buildCustomBannerHtml.js.map +1 -1
  75. package/lib/commonjs/surfaces/tooltip/TooltipHighlight.js +6 -6
  76. package/lib/commonjs/surfaces/tooltip/TooltipHighlight.js.map +1 -1
  77. package/lib/commonjs/surfaces/tooltip/targetOrigin.js +74 -0
  78. package/lib/commonjs/surfaces/tooltip/targetOrigin.js.map +1 -0
  79. package/lib/commonjs/version.js +1 -1
  80. package/lib/module/anchors/AnchorRegistry.js +5 -0
  81. package/lib/module/anchors/AnchorRegistry.js.map +1 -1
  82. package/lib/module/anchors/ScrollContainerRegistry.js +8 -0
  83. package/lib/module/anchors/ScrollContainerRegistry.js.map +1 -1
  84. package/lib/module/anchors/fiber/FiberScanRootStore.js +8 -0
  85. package/lib/module/anchors/fiber/FiberScanRootStore.js.map +1 -1
  86. package/lib/module/anchors/fiber/detectAppFontFamily.js +330 -0
  87. package/lib/module/anchors/fiber/detectAppFontFamily.js.map +1 -0
  88. package/lib/module/anchors/fiber/presentedModal.js +206 -0
  89. package/lib/module/anchors/fiber/presentedModal.js.map +1 -0
  90. package/lib/module/anchors/fiber/touchTargetFiber.js +1 -0
  91. package/lib/module/anchors/fiber/touchTargetFiber.js.map +1 -1
  92. package/lib/module/anchors/fiber/visibleRect.js +12 -3
  93. package/lib/module/anchors/fiber/visibleRect.js.map +1 -1
  94. package/lib/module/anchors/fiber/visibleScreens.js +5 -0
  95. package/lib/module/anchors/fiber/visibleScreens.js.map +1 -1
  96. package/lib/module/anchors/useUserflowAnchor.js.map +1 -1
  97. package/lib/module/anchors/useUserflowScrollContainer.js.map +1 -1
  98. package/lib/module/authoring/ElementPickerOverlay.js +199 -140
  99. package/lib/module/authoring/ElementPickerOverlay.js.map +1 -1
  100. package/lib/module/authoring/hitTest.js +67 -11
  101. package/lib/module/authoring/hitTest.js.map +1 -1
  102. package/lib/module/authoring/hostAtPoint.js +45 -21
  103. package/lib/module/authoring/hostAtPoint.js.map +1 -1
  104. package/lib/module/content/BannerStepButton.js +2 -1
  105. package/lib/module/content/BannerStepButton.js.map +1 -1
  106. package/lib/module/content/RichContentRenderer.js +27 -9
  107. package/lib/module/content/RichContentRenderer.js.map +1 -1
  108. package/lib/module/content/StepButton.js +2 -1
  109. package/lib/module/content/StepButton.js.map +1 -1
  110. package/lib/module/content/resolveContentFontFamily.js +89 -0
  111. package/lib/module/content/resolveContentFontFamily.js.map +1 -0
  112. package/lib/module/deepLinking.js.map +1 -1
  113. package/lib/module/deviceContext.js +38 -17
  114. package/lib/module/deviceContext.js.map +1 -1
  115. package/lib/module/index.js +13 -5
  116. package/lib/module/index.js.map +1 -1
  117. package/lib/module/installCheck.js +3 -3
  118. package/lib/module/installCheck.js.map +1 -1
  119. package/lib/module/lifecycle.js +2 -0
  120. package/lib/module/lifecycle.js.map +1 -1
  121. package/lib/module/pairing/PairingController.js.map +1 -1
  122. package/lib/module/runtime/BannerHost.js +3 -3
  123. package/lib/module/runtime/BannerHost.js.map +1 -1
  124. package/lib/module/runtime/UserflowOverlay.js +18 -14
  125. package/lib/module/runtime/UserflowOverlay.js.map +1 -1
  126. package/lib/module/runtime/WindowOverlayHost.js +76 -0
  127. package/lib/module/runtime/WindowOverlayHost.js.map +1 -0
  128. package/lib/module/runtime/pushBannerLayoutContext.js +11 -8
  129. package/lib/module/runtime/pushBannerLayoutContext.js.map +1 -1
  130. package/lib/module/runtime/userflowCore.js +9 -2
  131. package/lib/module/runtime/userflowCore.js.map +1 -1
  132. package/lib/module/surfaces/BannerSurface.js +2 -6
  133. package/lib/module/surfaces/BannerSurface.js.map +1 -1
  134. package/lib/module/surfaces/ProgressBar.js +2 -1
  135. package/lib/module/surfaces/ProgressBar.js.map +1 -1
  136. package/lib/module/surfaces/TooltipSurface.js +114 -51
  137. package/lib/module/surfaces/TooltipSurface.js.map +1 -1
  138. package/lib/module/surfaces/bannerWebView/BannerWebViewBar.js +6 -4
  139. package/lib/module/surfaces/bannerWebView/BannerWebViewBar.js.map +1 -1
  140. package/lib/module/surfaces/bannerWebView/bannerNeedsWebView.js +3 -31
  141. package/lib/module/surfaces/bannerWebView/bannerNeedsWebView.js.map +1 -1
  142. package/lib/module/surfaces/bannerWebView/bannerThemeStyles.js +2 -1
  143. package/lib/module/surfaces/bannerWebView/bannerThemeStyles.js.map +1 -1
  144. package/lib/module/surfaces/bannerWebView/bannerWebViewHeight.js +29 -0
  145. package/lib/module/surfaces/bannerWebView/bannerWebViewHeight.js.map +1 -0
  146. package/lib/module/surfaces/bannerWebView/buildCustomBannerHtml.js +45 -12
  147. package/lib/module/surfaces/bannerWebView/buildCustomBannerHtml.js.map +1 -1
  148. package/lib/module/surfaces/tooltip/TooltipHighlight.js +6 -6
  149. package/lib/module/surfaces/tooltip/TooltipHighlight.js.map +1 -1
  150. package/lib/module/surfaces/tooltip/targetOrigin.js +67 -0
  151. package/lib/module/surfaces/tooltip/targetOrigin.js.map +1 -0
  152. package/lib/module/version.js +1 -1
  153. package/lib/typescript/commonjs/src/anchors/AnchorRegistry.d.ts +7 -0
  154. package/lib/typescript/commonjs/src/anchors/AnchorRegistry.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/src/anchors/ScrollContainerRegistry.d.ts +11 -2
  156. package/lib/typescript/commonjs/src/anchors/ScrollContainerRegistry.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts +5 -0
  158. package/lib/typescript/commonjs/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/src/anchors/fiber/detectAppFontFamily.d.ts +30 -0
  160. package/lib/typescript/commonjs/src/anchors/fiber/detectAppFontFamily.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/src/anchors/fiber/presentedModal.d.ts +45 -0
  162. package/lib/typescript/commonjs/src/anchors/fiber/presentedModal.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/src/anchors/fiber/visibleRect.d.ts +5 -2
  164. package/lib/typescript/commonjs/src/anchors/fiber/visibleRect.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts +2 -0
  166. package/lib/typescript/commonjs/src/anchors/fiber/visibleScreens.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/src/anchors/useUserflowAnchor.d.ts +2 -2
  168. package/lib/typescript/commonjs/src/anchors/useUserflowAnchor.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/src/anchors/useUserflowScrollContainer.d.ts +3 -2
  170. package/lib/typescript/commonjs/src/anchors/useUserflowScrollContainer.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/src/authoring/ElementPickerOverlay.d.ts +4 -0
  172. package/lib/typescript/commonjs/src/authoring/ElementPickerOverlay.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/src/authoring/hitTest.d.ts +25 -2
  174. package/lib/typescript/commonjs/src/authoring/hitTest.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/src/authoring/hostAtPoint.d.ts +6 -1
  176. package/lib/typescript/commonjs/src/authoring/hostAtPoint.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/src/content/BannerStepButton.d.ts.map +1 -1
  178. package/lib/typescript/commonjs/src/content/RichContentRenderer.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/src/content/StepButton.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/src/content/resolveContentFontFamily.d.ts +35 -0
  181. package/lib/typescript/commonjs/src/content/resolveContentFontFamily.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/src/deepLinking.d.ts +1 -1
  183. package/lib/typescript/commonjs/src/deepLinking.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/src/deviceContext.d.ts +14 -5
  185. package/lib/typescript/commonjs/src/deviceContext.d.ts.map +1 -1
  186. package/lib/typescript/commonjs/src/index.d.ts +11 -5
  187. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  188. package/lib/typescript/commonjs/src/installCheck.d.ts +2 -2
  189. package/lib/typescript/commonjs/src/installCheck.d.ts.map +1 -1
  190. package/lib/typescript/commonjs/src/lifecycle.d.ts +1 -0
  191. package/lib/typescript/commonjs/src/lifecycle.d.ts.map +1 -1
  192. package/lib/typescript/commonjs/src/pairing/PairingController.d.ts +1 -1
  193. package/lib/typescript/commonjs/src/pairing/PairingController.d.ts.map +1 -1
  194. package/lib/typescript/commonjs/src/runtime/UserflowOverlay.d.ts.map +1 -1
  195. package/lib/typescript/commonjs/src/runtime/WindowOverlayHost.d.ts +34 -0
  196. package/lib/typescript/commonjs/src/runtime/WindowOverlayHost.d.ts.map +1 -0
  197. package/lib/typescript/commonjs/src/runtime/pushBannerLayoutContext.d.ts +5 -0
  198. package/lib/typescript/commonjs/src/runtime/pushBannerLayoutContext.d.ts.map +1 -1
  199. package/lib/typescript/commonjs/src/runtime/userflowCore.d.ts.map +1 -1
  200. package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts +1 -4
  201. package/lib/typescript/commonjs/src/surfaces/BannerSurface.d.ts.map +1 -1
  202. package/lib/typescript/commonjs/src/surfaces/ProgressBar.d.ts.map +1 -1
  203. package/lib/typescript/commonjs/src/surfaces/TooltipSurface.d.ts.map +1 -1
  204. package/lib/typescript/commonjs/src/surfaces/bannerWebView/BannerWebViewBar.d.ts.map +1 -1
  205. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts +3 -12
  206. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts.map +1 -1
  207. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerThemeStyles.d.ts.map +1 -1
  208. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts +13 -0
  209. package/lib/typescript/commonjs/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts.map +1 -0
  210. package/lib/typescript/commonjs/src/surfaces/bannerWebView/buildCustomBannerHtml.d.ts.map +1 -1
  211. package/lib/typescript/commonjs/src/surfaces/tooltip/targetOrigin.d.ts +26 -0
  212. package/lib/typescript/commonjs/src/surfaces/tooltip/targetOrigin.d.ts.map +1 -0
  213. package/lib/typescript/commonjs/src/version.d.ts +1 -1
  214. package/lib/typescript/module/src/anchors/AnchorRegistry.d.ts +7 -0
  215. package/lib/typescript/module/src/anchors/AnchorRegistry.d.ts.map +1 -1
  216. package/lib/typescript/module/src/anchors/ScrollContainerRegistry.d.ts +11 -2
  217. package/lib/typescript/module/src/anchors/ScrollContainerRegistry.d.ts.map +1 -1
  218. package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts +5 -0
  219. package/lib/typescript/module/src/anchors/fiber/FiberScanRootStore.d.ts.map +1 -1
  220. package/lib/typescript/module/src/anchors/fiber/detectAppFontFamily.d.ts +30 -0
  221. package/lib/typescript/module/src/anchors/fiber/detectAppFontFamily.d.ts.map +1 -0
  222. package/lib/typescript/module/src/anchors/fiber/presentedModal.d.ts +45 -0
  223. package/lib/typescript/module/src/anchors/fiber/presentedModal.d.ts.map +1 -0
  224. package/lib/typescript/module/src/anchors/fiber/visibleRect.d.ts +5 -2
  225. package/lib/typescript/module/src/anchors/fiber/visibleRect.d.ts.map +1 -1
  226. package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts +2 -0
  227. package/lib/typescript/module/src/anchors/fiber/visibleScreens.d.ts.map +1 -1
  228. package/lib/typescript/module/src/anchors/useUserflowAnchor.d.ts +2 -2
  229. package/lib/typescript/module/src/anchors/useUserflowAnchor.d.ts.map +1 -1
  230. package/lib/typescript/module/src/anchors/useUserflowScrollContainer.d.ts +3 -2
  231. package/lib/typescript/module/src/anchors/useUserflowScrollContainer.d.ts.map +1 -1
  232. package/lib/typescript/module/src/authoring/ElementPickerOverlay.d.ts +4 -0
  233. package/lib/typescript/module/src/authoring/ElementPickerOverlay.d.ts.map +1 -1
  234. package/lib/typescript/module/src/authoring/hitTest.d.ts +25 -2
  235. package/lib/typescript/module/src/authoring/hitTest.d.ts.map +1 -1
  236. package/lib/typescript/module/src/authoring/hostAtPoint.d.ts +6 -1
  237. package/lib/typescript/module/src/authoring/hostAtPoint.d.ts.map +1 -1
  238. package/lib/typescript/module/src/content/BannerStepButton.d.ts.map +1 -1
  239. package/lib/typescript/module/src/content/RichContentRenderer.d.ts.map +1 -1
  240. package/lib/typescript/module/src/content/StepButton.d.ts.map +1 -1
  241. package/lib/typescript/module/src/content/resolveContentFontFamily.d.ts +35 -0
  242. package/lib/typescript/module/src/content/resolveContentFontFamily.d.ts.map +1 -0
  243. package/lib/typescript/module/src/deepLinking.d.ts +1 -1
  244. package/lib/typescript/module/src/deepLinking.d.ts.map +1 -1
  245. package/lib/typescript/module/src/deviceContext.d.ts +14 -5
  246. package/lib/typescript/module/src/deviceContext.d.ts.map +1 -1
  247. package/lib/typescript/module/src/index.d.ts +11 -5
  248. package/lib/typescript/module/src/index.d.ts.map +1 -1
  249. package/lib/typescript/module/src/installCheck.d.ts +2 -2
  250. package/lib/typescript/module/src/installCheck.d.ts.map +1 -1
  251. package/lib/typescript/module/src/lifecycle.d.ts +1 -0
  252. package/lib/typescript/module/src/lifecycle.d.ts.map +1 -1
  253. package/lib/typescript/module/src/pairing/PairingController.d.ts +1 -1
  254. package/lib/typescript/module/src/pairing/PairingController.d.ts.map +1 -1
  255. package/lib/typescript/module/src/runtime/UserflowOverlay.d.ts.map +1 -1
  256. package/lib/typescript/module/src/runtime/WindowOverlayHost.d.ts +34 -0
  257. package/lib/typescript/module/src/runtime/WindowOverlayHost.d.ts.map +1 -0
  258. package/lib/typescript/module/src/runtime/pushBannerLayoutContext.d.ts +5 -0
  259. package/lib/typescript/module/src/runtime/pushBannerLayoutContext.d.ts.map +1 -1
  260. package/lib/typescript/module/src/runtime/userflowCore.d.ts.map +1 -1
  261. package/lib/typescript/module/src/surfaces/BannerSurface.d.ts +1 -4
  262. package/lib/typescript/module/src/surfaces/BannerSurface.d.ts.map +1 -1
  263. package/lib/typescript/module/src/surfaces/ProgressBar.d.ts.map +1 -1
  264. package/lib/typescript/module/src/surfaces/TooltipSurface.d.ts.map +1 -1
  265. package/lib/typescript/module/src/surfaces/bannerWebView/BannerWebViewBar.d.ts.map +1 -1
  266. package/lib/typescript/module/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts +3 -12
  267. package/lib/typescript/module/src/surfaces/bannerWebView/bannerNeedsWebView.d.ts.map +1 -1
  268. package/lib/typescript/module/src/surfaces/bannerWebView/bannerThemeStyles.d.ts.map +1 -1
  269. package/lib/typescript/module/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts +13 -0
  270. package/lib/typescript/module/src/surfaces/bannerWebView/bannerWebViewHeight.d.ts.map +1 -0
  271. package/lib/typescript/module/src/surfaces/bannerWebView/buildCustomBannerHtml.d.ts.map +1 -1
  272. package/lib/typescript/module/src/surfaces/tooltip/targetOrigin.d.ts +26 -0
  273. package/lib/typescript/module/src/surfaces/tooltip/targetOrigin.d.ts.map +1 -0
  274. package/lib/typescript/module/src/version.d.ts +1 -1
  275. package/package.json +5 -4
  276. package/src/anchors/AnchorRegistry.ts +8 -0
  277. package/src/anchors/ScrollContainerRegistry.ts +15 -3
  278. package/src/anchors/fiber/FiberScanRootStore.ts +8 -0
  279. package/src/anchors/fiber/detectAppFontFamily.ts +400 -0
  280. package/src/anchors/fiber/presentedModal.ts +203 -0
  281. package/src/anchors/fiber/touchTargetFiber.ts +2 -1
  282. package/src/anchors/fiber/visibleRect.ts +12 -3
  283. package/src/anchors/fiber/visibleScreens.ts +5 -0
  284. package/src/anchors/useUserflowAnchor.ts +4 -5
  285. package/src/anchors/useUserflowScrollContainer.ts +5 -4
  286. package/src/authoring/ElementPickerOverlay.tsx +242 -166
  287. package/src/authoring/hitTest.ts +88 -13
  288. package/src/authoring/hostAtPoint.ts +67 -21
  289. package/src/content/BannerStepButton.tsx +2 -1
  290. package/src/content/RichContentRenderer.tsx +16 -9
  291. package/src/content/StepButton.tsx +2 -1
  292. package/src/content/resolveContentFontFamily.ts +119 -0
  293. package/src/deepLinking.ts +2 -1
  294. package/src/deviceContext.ts +50 -14
  295. package/src/index.ts +13 -5
  296. package/src/installCheck.ts +3 -3
  297. package/src/lifecycle.ts +2 -1
  298. package/src/pairing/PairingController.ts +2 -1
  299. package/src/runtime/BannerHost.tsx +3 -3
  300. package/src/runtime/UserflowOverlay.tsx +29 -21
  301. package/src/runtime/WindowOverlayHost.tsx +95 -0
  302. package/src/runtime/pushBannerLayoutContext.tsx +14 -9
  303. package/src/runtime/userflowCore.ts +8 -2
  304. package/src/surfaces/BannerSurface.tsx +2 -6
  305. package/src/surfaces/ProgressBar.tsx +2 -1
  306. package/src/surfaces/TooltipSurface.tsx +118 -47
  307. package/src/surfaces/bannerWebView/BannerWebViewBar.tsx +6 -4
  308. package/src/surfaces/bannerWebView/bannerNeedsWebView.ts +4 -36
  309. package/src/surfaces/bannerWebView/bannerThemeStyles.ts +2 -1
  310. package/src/surfaces/bannerWebView/bannerWebViewHeight.ts +32 -0
  311. package/src/surfaces/bannerWebView/buildCustomBannerHtml.ts +48 -12
  312. package/src/surfaces/tooltip/TooltipHighlight.tsx +3 -5
  313. package/src/surfaces/tooltip/targetOrigin.ts +74 -0
  314. package/src/version.ts +1 -1
  315. package/vendor/core/dist/engine/UserflowCore.d.ts +7 -0
  316. package/vendor/core/dist/engine/UserflowCore.d.ts.map +1 -1
  317. package/vendor/core/dist/engine/UserflowCore.js +3 -2
  318. package/vendor/core/dist/engine/UserflowCore.js.map +1 -1
  319. package/vendor/core/dist/transport/phoenix.d.ts +12 -2
  320. package/vendor/core/dist/transport/phoenix.d.ts.map +1 -1
  321. package/vendor/core/dist/transport/phoenix.js +7 -6
  322. package/vendor/core/dist/transport/phoenix.js.map +1 -1
  323. package/vendor/core/dist/version.d.ts +1 -1
  324. package/vendor/core/dist/version.js +1 -1
  325. package/vendor/core/package.json +1 -1
  326. package/vendor/protocol/dist/flows.d.ts +2 -0
  327. package/vendor/protocol/dist/flows.d.ts.map +1 -1
  328. package/vendor/protocol/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["AnchorRegistry","anchors","Map","listeners","Set","register","id","host","set","get","add","emit","unregister","delete","size","last","getAll","isAmbiguous","subscribe","listener","clear","exports","anchorRegistry"],"sourceRoot":"../../../src","sources":["anchors/AnchorRegistry.ts"],"mappings":";;;;;;AAAA;;AAmBA;AACA;AACA;AACA;AACA;AACO,MAAMA,cAAc,CAAC;EACTC,OAAO,GAAG,IAAIC,GAAG,CAA0B,CAAC;EAC5CC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAEhDC,QAAQA,CAACC,EAAU,EAAEC,IAAgB,EAAQ;IAC3C,IAAI,CAACD,EAAE,EAAE;IACT,IAAIE,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAC9B,IAAI,CAACE,GAAG,EAAE;MACRA,GAAG,GAAG,IAAIJ,GAAG,CAAC,CAAC;MACf,IAAI,CAACH,OAAO,CAACO,GAAG,CAACF,EAAE,EAAEE,GAAG,CAAC;IAC3B;IACAA,GAAG,CAACE,GAAG,CAACH,IAAI,CAAC;IACb,IAAI,CAACI,IAAI,CAAC,CAAC;EACb;EAEAC,UAAUA,CAACN,EAAU,EAAEC,IAAgB,EAAQ;IAC7C,MAAMC,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAChC,IAAI,CAACE,GAAG,EAAE;IACVA,GAAG,CAACK,MAAM,CAACN,IAAI,CAAC;IAChB,IAAIC,GAAG,CAACM,IAAI,KAAK,CAAC,EAAE;MAClB,IAAI,CAACb,OAAO,CAACY,MAAM,CAACP,EAAE,CAAC;IACzB;IACA,IAAI,CAACK,IAAI,CAAC,CAAC;EACb;EAEAF,GAAGA,CAACH,EAAU,EAAqB;IACjC,MAAME,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAChC,IAAI,CAACE,GAAG,IAAIA,GAAG,CAACM,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI;IACvC,IAAIC,IAAuB,GAAG,IAAI;IAClC,KAAK,MAAMR,IAAI,IAAIC,GAAG,EAAE;MACtBO,IAAI,GAAGR,IAAI;IACb;IACA,OAAOQ,IAAI;EACb;;EAEA;EACAC,MAAMA,CAACV,EAAU,EAAgB;IAC/B,MAAME,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAChC,IAAI,CAACE,GAAG,IAAIA,GAAG,CAACM,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE;IACrC,OAAO,CAAC,GAAGN,GAAG,CAAC;EACjB;;EAEA;EACAS,WAAWA,CAACX,EAAU,EAAW;IAC/B,OAAO,CAAC,IAAI,CAACL,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC,EAAEQ,IAAI,IAAI,CAAC,IAAI,CAAC;EAC9C;EAEAI,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAAChB,SAAS,CAACO,GAAG,CAACS,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAAChB,SAAS,CAACU,MAAM,CAACM,QAAQ,CAAC;IACjC,CAAC;EACH;;EAEA;EACAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACnB,OAAO,CAACmB,KAAK,CAAC,CAAC;IACpB,IAAI,CAACT,IAAI,CAAC,CAAC;EACb;EAEQA,IAAIA,CAAA,EAAS;IACnB,KAAK,MAAMQ,QAAQ,IAAI,IAAI,CAAChB,SAAS,EAAE;MACrCgB,QAAQ,CAAC,CAAC;IACZ;EACF;AACF;;AAEA;AAAAE,OAAA,CAAArB,cAAA,GAAAA,cAAA;AACO,MAAMsB,cAAc,GAAAD,OAAA,CAAAC,cAAA,GAAG,IAAItB,cAAc,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["AnchorRegistry","anchors","Map","listeners","Set","register","id","host","set","get","add","emit","unregister","delete","size","last","getAll","isAmbiguous","subscribe","listener","clear","exports","anchorRegistry"],"sourceRoot":"../../../src","sources":["anchors/AnchorRegistry.ts"],"mappings":";;;;;;AAAA;;AAiBA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACO,MAAMA,cAAc,CAAC;EACTC,OAAO,GAAG,IAAIC,GAAG,CAA0B,CAAC;EAC5CC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAEhDC,QAAQA,CAACC,EAAU,EAAEC,IAAgB,EAAQ;IAC3C,IAAI,CAACD,EAAE,EAAE;IACT,IAAIE,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAC9B,IAAI,CAACE,GAAG,EAAE;MACRA,GAAG,GAAG,IAAIJ,GAAG,CAAC,CAAC;MACf,IAAI,CAACH,OAAO,CAACO,GAAG,CAACF,EAAE,EAAEE,GAAG,CAAC;IAC3B;IACAA,GAAG,CAACE,GAAG,CAACH,IAAI,CAAC;IACb,IAAI,CAACI,IAAI,CAAC,CAAC;EACb;EAEAC,UAAUA,CAACN,EAAU,EAAEC,IAAgB,EAAQ;IAC7C,MAAMC,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAChC,IAAI,CAACE,GAAG,EAAE;IACVA,GAAG,CAACK,MAAM,CAACN,IAAI,CAAC;IAChB,IAAIC,GAAG,CAACM,IAAI,KAAK,CAAC,EAAE;MAClB,IAAI,CAACb,OAAO,CAACY,MAAM,CAACP,EAAE,CAAC;IACzB;IACA,IAAI,CAACK,IAAI,CAAC,CAAC;EACb;EAEAF,GAAGA,CAACH,EAAU,EAAqB;IACjC,MAAME,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAChC,IAAI,CAACE,GAAG,IAAIA,GAAG,CAACM,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI;IACvC,IAAIC,IAAuB,GAAG,IAAI;IAClC,KAAK,MAAMR,IAAI,IAAIC,GAAG,EAAE;MACtBO,IAAI,GAAGR,IAAI;IACb;IACA,OAAOQ,IAAI;EACb;;EAEA;EACAC,MAAMA,CAACV,EAAU,EAAgB;IAC/B,MAAME,GAAG,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC;IAChC,IAAI,CAACE,GAAG,IAAIA,GAAG,CAACM,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE;IACrC,OAAO,CAAC,GAAGN,GAAG,CAAC;EACjB;;EAEA;EACAS,WAAWA,CAACX,EAAU,EAAW;IAC/B,OAAO,CAAC,IAAI,CAACL,OAAO,CAACQ,GAAG,CAACH,EAAE,CAAC,EAAEQ,IAAI,IAAI,CAAC,IAAI,CAAC;EAC9C;EAEAI,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAAChB,SAAS,CAACO,GAAG,CAACS,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAAChB,SAAS,CAACU,MAAM,CAACM,QAAQ,CAAC;IACjC,CAAC;EACH;;EAEA;EACAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACnB,OAAO,CAACmB,KAAK,CAAC,CAAC;IACpB,IAAI,CAACT,IAAI,CAAC,CAAC;EACb;EAEQA,IAAIA,CAAA,EAAS;IACnB,KAAK,MAAMQ,QAAQ,IAAI,IAAI,CAAChB,SAAS,EAAE;MACrCgB,QAAQ,CAAC,CAAC;IACZ;EACF;AACF;;AAEA;AAAAE,OAAA,CAAArB,cAAA,GAAAA,cAAA;AACO,MAAMsB,cAAc,GAAAD,OAAA,CAAAC,cAAA,GAAG,IAAItB,cAAc,CAAC,CAAC","ignoreList":[]}
@@ -8,6 +8,14 @@ exports.createScrollContainerHost = createScrollContainerHost;
8
8
  exports.scrollContainerRegistry = void 0;
9
9
  /** Padding applied when scrolling a target into the visible region of a container. */
10
10
  const INTO_VIEW_PADDING = 24;
11
+
12
+ /**
13
+ * The ScrollView instance a scroll container ref receives. Structural rather
14
+ * than `ScrollView`, which React Native 0.88 types as a function component.
15
+ * Older React Native types leave measureInWindow off the ScrollView instance,
16
+ * so it is not required here.
17
+ */
18
+
11
19
  /**
12
20
  * Registry of host {@link ScrollView}s used as an explicit override when
13
21
  * scrolling tooltip anchors into view. Prefer automatic fiber discovery for
@@ -1 +1 @@
1
- {"version":3,"names":["INTO_VIEW_PADDING","ScrollContainerRegistry","containers","Set","listeners","register","host","add","emit","unregister","delete","list","scrollTargetIntoView","target","measureInWindow","x","y","width","height","offset","getContentOffset","targetContentY","nextY","Math","max","abs","scrollTo","animated","subscribe","listener","clear","exports","scrollContainerRegistry","createScrollContainerHost","node","measurable","callback","options"],"sourceRoot":"../../../src","sources":["anchors/ScrollContainerRegistry.ts"],"mappings":";;;;;;;;AAIA;AACA,MAAMA,iBAAiB,GAAG,EAAE;AAY5B;AACA;AACA;AACA;AACA;AACO,MAAMC,uBAAuB,CAAC;EAClBC,UAAU,GAAG,IAAIC,GAAG,CAAsB,CAAC;EAC3CC,SAAS,GAAG,IAAID,GAAG,CAAW,CAAC;EAEhDE,QAAQA,CAACC,IAAyB,EAAQ;IACxC,IAAI,CAACJ,UAAU,CAACK,GAAG,CAACD,IAAI,CAAC;IACzB,IAAI,CAACE,IAAI,CAAC,CAAC;EACb;EAEAC,UAAUA,CAACH,IAAyB,EAAQ;IAC1C,IAAI,CAACJ,UAAU,CAACQ,MAAM,CAACJ,IAAI,CAAC;IAC5B,IAAI,CAACE,IAAI,CAAC,CAAC;EACb;;EAEA;EACAG,IAAIA,CAAA,EAA0B;IAC5B,OAAO,CAAC,GAAG,IAAI,CAACT,UAAU,CAAC;EAC7B;;EAEA;AACF;AACA;AACA;EACEU,oBAAoBA,CAACC,MAAY,EAAQ;IACvC,KAAK,MAAMP,IAAI,IAAI,IAAI,CAACJ,UAAU,EAAE;MAClCI,IAAI,CAACQ,eAAe,CAAC,CAACC,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,KAAK;QAC5C,IAAID,KAAK,IAAI,CAAC,IAAIC,MAAM,IAAI,CAAC,EAAE;QAE/B,MAAMC,MAAM,GAAGb,IAAI,CAACc,gBAAgB,CAAC,CAAC;QACtC,MAAMC,cAAc,GAAGF,MAAM,CAACH,CAAC,IAAIH,MAAM,CAACG,CAAC,GAAGA,CAAC,CAAC;QAChD,IAAIM,KAAoB,GAAG,IAAI;QAE/B,IAAIT,MAAM,CAACG,CAAC,GAAGA,CAAC,GAAGhB,iBAAiB,EAAE;UACpCsB,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,cAAc,GAAGrB,iBAAiB,CAAC;QACzD,CAAC,MAAM,IAAIa,MAAM,CAACG,CAAC,GAAGH,MAAM,CAACK,MAAM,GAAGF,CAAC,GAAGE,MAAM,GAAGlB,iBAAiB,EAAE;UACpEsB,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,cAAc,GAAGR,MAAM,CAACK,MAAM,GAAGA,MAAM,GAAGlB,iBAAiB,CAAC;QAClF;QAEA,IAAIsB,KAAK,IAAI,IAAI,IAAIC,IAAI,CAACE,GAAG,CAACH,KAAK,GAAGH,MAAM,CAACH,CAAC,CAAC,GAAG,CAAC,EAAE;QACrDV,IAAI,CAACoB,QAAQ,CAAC;UAAEV,CAAC,EAAEM,KAAK;UAAEK,QAAQ,EAAE;QAAK,CAAC,CAAC;MAC7C,CAAC,CAAC;MACF;MACA;IACF;EACF;EAEAC,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAACzB,SAAS,CAACG,GAAG,CAACsB,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAACzB,SAAS,CAACM,MAAM,CAACmB,QAAQ,CAAC;IACjC,CAAC;EACH;EAEAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAAC5B,UAAU,CAAC4B,KAAK,CAAC,CAAC;IACvB,IAAI,CAACtB,IAAI,CAAC,CAAC;EACb;EAEQA,IAAIA,CAAA,EAAS;IACnB,KAAK,MAAMqB,QAAQ,IAAI,IAAI,CAACzB,SAAS,EAAE;MACrCyB,QAAQ,CAAC,CAAC;IACZ;EACF;AACF;;AAEA;AAAAE,OAAA,CAAA9B,uBAAA,GAAAA,uBAAA;AACO,MAAM+B,uBAAuB,GAAAD,OAAA,CAAAC,uBAAA,GAAG,IAAI/B,uBAAuB,CAAC,CAAC;;AAEpE;AACO,SAASgC,yBAAyBA,CACvCC,IAAgB,EAChBd,gBAAgD,EAC3B;EACrB,MAAMe,UAAU,GAAGD,IAAyB;EAC5C,OAAO;IACLpB,eAAe,EAAGsB,QAAQ,IAAK;MAC7BD,UAAU,CAACrB,eAAe,CAACsB,QAAQ,CAAC;IACtC,CAAC;IACDhB,gBAAgB;IAChBM,QAAQ,EAAGW,OAAO,IAAK;MACrBH,IAAI,CAACR,QAAQ,CAACW,OAAO,CAAC;IACxB;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["INTO_VIEW_PADDING","ScrollContainerRegistry","containers","Set","listeners","register","host","add","emit","unregister","delete","list","scrollTargetIntoView","target","measureInWindow","x","y","width","height","offset","getContentOffset","targetContentY","nextY","Math","max","abs","scrollTo","animated","subscribe","listener","clear","exports","scrollContainerRegistry","createScrollContainerHost","node","measurable","callback","options"],"sourceRoot":"../../../src","sources":["anchors/ScrollContainerRegistry.ts"],"mappings":"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","ignoreList":[]}
@@ -28,6 +28,14 @@ class FiberScanRootStore {
28
28
  if (!fiber) return null;
29
29
  return (0, _fiberInternals.resolveCurrentFiber)(fiber);
30
30
  }
31
+
32
+ /**
33
+ * Mounted scan-root instance. Font detection caches against this identity
34
+ * so a remount scans again and an update of the same root does not.
35
+ */
36
+ getInstance() {
37
+ return this.instance;
38
+ }
31
39
  subscribe(listener) {
32
40
  this.listeners.add(listener);
33
41
  return () => {
@@ -1 +1 @@
1
- {"version":3,"names":["_fiberInternals","require","FiberScanRootStore","instance","listeners","Set","set","emit","clear","getFiber","fiber","fiberFromPublicInstance","resolveCurrentFiber","subscribe","listener","add","delete","resetForTests","fiberScanRoot","exports"],"sourceRoot":"../../../../src","sources":["anchors/fiber/FiberScanRootStore.ts"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAIA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,CAAC;EACfC,QAAQ,GAAY,IAAI;EACfC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAEhDC,GAAGA,CAACH,QAAiB,EAAQ;IAC3B,IAAI,CAACA,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACI,IAAI,CAAC,CAAC;EACb;EAEAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACL,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACI,IAAI,CAAC,CAAC;EACb;;EAEA;EACAE,QAAQA,CAAA,EAAoB;IAC1B,IAAI,CAAC,IAAI,CAACN,QAAQ,EAAE,OAAO,IAAI;IAC/B,MAAMO,KAAK,GAAG,IAAAC,uCAAuB,EAAC,IAAI,CAACR,QAAQ,CAAC;IACpD,IAAI,CAACO,KAAK,EAAE,OAAO,IAAI;IACvB,OAAO,IAAAE,mCAAmB,EAACF,KAAK,CAAC;EACnC;EAEAG,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAACV,SAAS,CAACW,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAACV,SAAS,CAACY,MAAM,CAACF,QAAQ,CAAC;IACjC,CAAC;EACH;;EAEA;EACAG,aAAaA,CAAA,EAAS;IACpB,IAAI,CAACd,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,SAAS,CAACI,KAAK,CAAC,CAAC;EACxB;EAEQD,IAAIA,CAAA,EAAS;IACnB,KAAK,MAAMO,QAAQ,IAAI,IAAI,CAACV,SAAS,EAAE;MACrCU,QAAQ,CAAC,CAAC;IACZ;EACF;AACF;AAEO,MAAMI,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,IAAIhB,kBAAkB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_fiberInternals","require","FiberScanRootStore","instance","listeners","Set","set","emit","clear","getFiber","fiber","fiberFromPublicInstance","resolveCurrentFiber","getInstance","subscribe","listener","add","delete","resetForTests","fiberScanRoot","exports"],"sourceRoot":"../../../../src","sources":["anchors/fiber/FiberScanRootStore.ts"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAIA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,CAAC;EACfC,QAAQ,GAAY,IAAI;EACfC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAEhDC,GAAGA,CAACH,QAAiB,EAAQ;IAC3B,IAAI,CAACA,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACI,IAAI,CAAC,CAAC;EACb;EAEAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACL,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACI,IAAI,CAAC,CAAC;EACb;;EAEA;EACAE,QAAQA,CAAA,EAAoB;IAC1B,IAAI,CAAC,IAAI,CAACN,QAAQ,EAAE,OAAO,IAAI;IAC/B,MAAMO,KAAK,GAAG,IAAAC,uCAAuB,EAAC,IAAI,CAACR,QAAQ,CAAC;IACpD,IAAI,CAACO,KAAK,EAAE,OAAO,IAAI;IACvB,OAAO,IAAAE,mCAAmB,EAACF,KAAK,CAAC;EACnC;;EAEA;AACF;AACA;AACA;EACEG,WAAWA,CAAA,EAAY;IACrB,OAAO,IAAI,CAACV,QAAQ;EACtB;EAEAW,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAACX,SAAS,CAACY,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAACX,SAAS,CAACa,MAAM,CAACF,QAAQ,CAAC;IACjC,CAAC;EACH;;EAEA;EACAG,aAAaA,CAAA,EAAS;IACpB,IAAI,CAACf,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,SAAS,CAACI,KAAK,CAAC,CAAC;EACxB;EAEQD,IAAIA,CAAA,EAAS;IACnB,KAAK,MAAMQ,QAAQ,IAAI,IAAI,CAACX,SAAS,EAAE;MACrCW,QAAQ,CAAC,CAAC;IACZ;EACF;AACF;AAEO,MAAMI,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,IAAIjB,kBAAkB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.concreteFontFamily = concreteFontFamily;
7
+ exports.detectAppFontFamily = detectAppFontFamily;
8
+ exports.isBareCssFamily = isBareCssFamily;
9
+ exports.isIconFontFamily = isIconFontFamily;
10
+ exports.resetDetectedAppFont = resetDetectedAppFont;
11
+ exports.splitCssFamilies = splitCssFamilies;
12
+ exports.themeConcreteFontFamily = themeConcreteFontFamily;
13
+ var _screenTracker = require("../../screenTracker.js");
14
+ var _FiberScanRootStore = require("./FiberScanRootStore.js");
15
+ var _fiberInternals = require("./fiberInternals.js");
16
+ var _visibleScreens = require("./visibleScreens.js");
17
+ var _walkVisibleFibers = require("./walkVisibleFibers.js");
18
+ /**
19
+ * Host-app font used when a theme is still on the default CSS stack.
20
+ *
21
+ * React Native does not inherit `fontFamily` from a parent view, so the family
22
+ * actually in use is the one set on `Text`. The primary font is whichever
23
+ * family appears on the most visible host text under the scan root (the SDK
24
+ * overlay is a sibling and is not walked). Embedded banners are inside that
25
+ * root; their hosts use a `userflow-` testID and are not votes, or the bar's
26
+ * own text would win. Text with no family counts as the platform font. Icon
27
+ * faces are not content. Nested text with no family does not vote: the
28
+ * ancestor text already does, and a child run must not add another vote for
29
+ * that family or for the platform font.
30
+ *
31
+ * A finished walk is cached until the visible screen changes, the reported
32
+ * screen changes, or `Userflow.reset()`. A walk that hits the node cap is not
33
+ * cached. Failures return null.
34
+ */
35
+
36
+ const TEXT_HOST_NAMES = new Set(['Text', 'RCTText', 'RCTVirtualText']);
37
+
38
+ /** SDK hosts inside the scan root (embedded banners). Not the app's font. */
39
+ const SDK_HOST_TEST_ID_PREFIX = 'userflow-';
40
+
41
+ /** Cycle guard for nested-text inheritance. Real trees are only a few levels deep. */
42
+ const MAX_FONT_ANCESTORS = 50;
43
+ const CSS_GENERIC_FAMILIES = new Set(['sans-serif', 'serif', 'monospace', 'system-ui', 'ui-sans-serif', 'ui-serif', 'ui-monospace', 'ui-rounded', 'cursive', 'fantasy', 'emoji', 'math', 'fangsong', 'inherit', 'initial', 'unset']);
44
+
45
+ /** Short vector-icon families. Matched after stripping spaces and punctuation. */
46
+ const ICON_FONT_EXACT = new Set(['feather', 'antdesign', 'entypo', 'fontisto', 'simplelineicons', 'octicons', 'zocial', 'foundation', 'evilicons']);
47
+ let cache = null;
48
+
49
+ /** Drop the cached app font. Called from `Userflow.reset()`. */
50
+ function resetDetectedAppFont() {
51
+ cache = null;
52
+ }
53
+
54
+ /**
55
+ * Family to apply, or null when the app font is the platform face or could
56
+ * not be read. Never throws.
57
+ */
58
+ function detectAppFontFamily() {
59
+ try {
60
+ const instance = _FiberScanRootStore.fiberScanRoot.getInstance();
61
+ if (!instance || typeof instance !== 'object') return null;
62
+ const root = _FiberScanRootStore.fiberScanRoot.getFiber();
63
+ if (!root) return null;
64
+ if (cache?.instance === instance && cacheStillCurrent(cache, root)) return cache.family;
65
+ const tally = tallyHostText(root);
66
+ if (tally.truncated) {
67
+ if (!tally.voted) return null;
68
+ return pickMajority(tally.counts);
69
+ }
70
+ const family = tally.voted ? pickMajority(tally.counts) : null;
71
+ cache = {
72
+ instance,
73
+ family,
74
+ screens: tally.screens,
75
+ screenKey: reportedScreenKey()
76
+ };
77
+ return family;
78
+ } catch {
79
+ return null;
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Faces that appear in the builder's default system stack. A comma-separated
85
+ * list made only of these and generic keywords is that default, not a custom
86
+ * font. A single concrete name is still kept, including `Roboto`.
87
+ */
88
+ const DEFAULT_STACK_FACES = new Set(['blinkmacsystemfont', 'segoe ui', 'roboto', 'helvetica', 'arial', 'apple color emoji', 'segoe ui emoji', 'segoe ui symbol']);
89
+
90
+ /**
91
+ * A single React Native family name. CSS stacks and generic keywords are not
92
+ * usable as a host `fontFamily` — RN treats the whole string as one face.
93
+ * Theme stacks are parsed by {@link themeConcreteFontFamily}.
94
+ */
95
+ function concreteFontFamily(value) {
96
+ if (typeof value !== 'string') return undefined;
97
+ const name = unwrapFontName(value);
98
+ if (!name || name.includes(',') || name.startsWith('-')) return undefined;
99
+ if (CSS_GENERIC_FAMILIES.has(name.toLowerCase())) return undefined;
100
+ return name;
101
+ }
102
+
103
+ /**
104
+ * Family a theme author chose. A single concrete name is kept. A comma-separated
105
+ * list keeps the first family that is not a generic or a default-stack face,
106
+ * so `"Source Sans Pro", sans-serif` stays Source Sans Pro and the system
107
+ * stack still resolves to undefined.
108
+ */
109
+ function themeConcreteFontFamily(value) {
110
+ if (typeof value !== 'string') return undefined;
111
+ const parts = splitCssFamilies(value);
112
+ if (parts.length === 0) return undefined;
113
+ if (parts.length === 1) return concreteFontFamily(parts[0]);
114
+ for (const part of parts) {
115
+ const name = concreteFontFamily(part);
116
+ if (!name || DEFAULT_STACK_FACES.has(name.toLowerCase())) continue;
117
+ return name;
118
+ }
119
+ return undefined;
120
+ }
121
+
122
+ /**
123
+ * Split a CSS `font-family` list. A quote that opens a family is wrapping and
124
+ * is removed; a quote inside a name stays, so `Foo"Bar` is one family.
125
+ * Commas inside wrapping quotes are not separators.
126
+ */
127
+ function splitCssFamilies(value) {
128
+ const parts = [];
129
+ let current = '';
130
+ let quote = null;
131
+ for (const char of value) {
132
+ if (quote) {
133
+ if (char === quote) quote = null;else current += char;
134
+ continue;
135
+ }
136
+ if ((char === '"' || char === "'") && current.trim() === '') {
137
+ quote = char;
138
+ continue;
139
+ }
140
+ if (char === ',') {
141
+ const name = current.trim();
142
+ if (name) parts.push(name);
143
+ current = '';
144
+ continue;
145
+ }
146
+ current += char;
147
+ }
148
+ const name = current.trim();
149
+ if (name) parts.push(name);
150
+ return parts;
151
+ }
152
+
153
+ /** Generic keywords and vendor-prefixed faces stay unquoted in CSS. */
154
+ function isBareCssFamily(name) {
155
+ return name.startsWith('-') || CSS_GENERIC_FAMILIES.has(name.toLowerCase());
156
+ }
157
+ function isIconFontFamily(name) {
158
+ const key = name.toLowerCase().replace(/[^a-z0-9]/g, '');
159
+ if (ICON_FONT_EXACT.has(key)) return true;
160
+ return key.startsWith('fontawesome') || key.startsWith('ionicons') || key.startsWith('materialcommunityicons') || key.startsWith('materialicons') || key.startsWith('materialsymbols');
161
+ }
162
+ function tallyHostText(root) {
163
+ const counts = new Map();
164
+ const screens = [];
165
+ let voted = false;
166
+ const {
167
+ truncated
168
+ } = (0, _walkVisibleFibers.walkVisibleFibers)(root, fiber => {
169
+ try {
170
+ if ((0, _visibleScreens.isScreenHostFiber)(fiber)) screens.push(fiber);
171
+ if (!isTextHost(fiber)) return;
172
+ const vote = voteFor(fiber, root);
173
+ if (vote === 'skip') return;
174
+ voted = true;
175
+ counts.set(vote, (counts.get(vote) ?? 0) + 1);
176
+ } catch {
177
+ // One unreadable node is not a vote.
178
+ }
179
+ });
180
+ return {
181
+ voted,
182
+ truncated,
183
+ screens,
184
+ counts
185
+ };
186
+ }
187
+
188
+ /** Usable family, null for the platform font, or skip for an icon face. */
189
+ function voteFor(fiber, root) {
190
+ if (isUnderSdkHost(fiber, root)) return 'skip';
191
+ const own = classifyFamily(readFontFamily(fiber));
192
+ if (own.kind === 'icon') return 'skip';
193
+ if (own.kind === 'family') return own.name;
194
+ if (own.kind === 'unusable') return null;
195
+ // No family of its own. The ancestor text node casts the vote for this run.
196
+ if (hasAncestorText(fiber, root)) return 'skip';
197
+ return null;
198
+ }
199
+ function hasAncestorText(fiber, root) {
200
+ let parent = (0, _fiberInternals.getReturn)(fiber);
201
+ for (let depth = 0; parent && parent !== root && depth < MAX_FONT_ANCESTORS; depth += 1) {
202
+ if (isTextHost(parent)) return true;
203
+ parent = (0, _fiberInternals.getReturn)(parent);
204
+ }
205
+ return false;
206
+ }
207
+ function cacheStillCurrent(cached, root) {
208
+ if (cached.screenKey !== reportedScreenKey()) return false;
209
+ if (cached.screens.length === 0) return true;
210
+ return cached.screens.every(screen => screenStillCurrent(screen, root));
211
+ }
212
+ function screenStillCurrent(screen, root) {
213
+ if (!(0, _visibleScreens.isFiberOnVisibleScreen)(screen)) return false;
214
+ let current = screen;
215
+ for (let depth = 0; current && depth < _fiberInternals.MAX_ANCESTOR_WALK; depth += 1) {
216
+ if (current === root) return true;
217
+ current = (0, _fiberInternals.getReturn)(current);
218
+ }
219
+ return false;
220
+ }
221
+ function reportedScreenKey() {
222
+ const location = (0, _screenTracker.getCurrentScreenLocation)();
223
+ if (!location) return null;
224
+ const key = 'path' in location ? location.path : location.screen;
225
+ return key || null;
226
+ }
227
+ function classifyFamily(raw) {
228
+ if (!raw) return {
229
+ kind: 'absent'
230
+ };
231
+ if (isIconFontFamily(raw)) return {
232
+ kind: 'icon'
233
+ };
234
+ const concrete = concreteFontFamily(raw);
235
+ if (!concrete) return {
236
+ kind: 'unusable'
237
+ };
238
+ return {
239
+ kind: 'family',
240
+ name: concrete
241
+ };
242
+ }
243
+ function pickMajority(counts) {
244
+ const platform = counts.get(null) ?? 0;
245
+ let bestName = null;
246
+ let bestCount = 0;
247
+ for (const [name, count] of counts) {
248
+ if (name == null) continue;
249
+ if (bestName == null || count > bestCount || count === bestCount && name < bestName) {
250
+ bestName = name;
251
+ bestCount = count;
252
+ }
253
+ }
254
+ if (bestName == null || platform > bestCount) return null;
255
+ return bestName;
256
+ }
257
+ function isUnderSdkHost(fiber, root) {
258
+ let parent = (0, _fiberInternals.getReturn)(fiber);
259
+ for (let depth = 0; parent && parent !== root && depth < MAX_FONT_ANCESTORS; depth += 1) {
260
+ try {
261
+ const testID = (0, _fiberInternals.getLiveHostProps)(parent)?.testID;
262
+ if (typeof testID === 'string' && testID.startsWith(SDK_HOST_TEST_ID_PREFIX)) {
263
+ return true;
264
+ }
265
+ } catch {
266
+ // An unreadable ancestor is not an SDK host.
267
+ }
268
+ parent = (0, _fiberInternals.getReturn)(parent);
269
+ }
270
+ return false;
271
+ }
272
+ function isTextHost(fiber) {
273
+ const typeName = (0, _fiberInternals.getHostTypeName)(fiber);
274
+ if (typeName && TEXT_HOST_NAMES.has(typeName)) return true;
275
+ const elementType = fiber?.elementType;
276
+ if (typeof elementType === 'string' && TEXT_HOST_NAMES.has(elementType)) return true;
277
+ try {
278
+ const node = (0, _fiberInternals.getStateNode)(fiber);
279
+ const className = node?.viewConfig?.uiViewClassName ?? node?.__viewConfig?.uiViewClassName;
280
+ return typeof className === 'string' && TEXT_HOST_NAMES.has(className);
281
+ } catch {
282
+ return false;
283
+ }
284
+ }
285
+ function readFontFamily(fiber) {
286
+ try {
287
+ const flat = flattenFontStyle((0, _fiberInternals.getLiveHostProps)(fiber)?.style);
288
+ const family = flat?.fontFamily;
289
+ if (typeof family !== 'string') return undefined;
290
+ const trimmed = family.trim();
291
+ return trimmed.length > 0 ? trimmed : undefined;
292
+ } catch {
293
+ return undefined;
294
+ }
295
+ }
296
+ function flattenFontStyle(style) {
297
+ if (style == null || style === false) return null;
298
+ if (typeof style === 'number') return flattenRegisteredStyle(style);
299
+ if (Array.isArray(style)) {
300
+ let family;
301
+ for (const entry of style) {
302
+ const flat = flattenFontStyle(entry);
303
+ if (flat && flat.fontFamily != null) family = flat.fontFamily;
304
+ }
305
+ return {
306
+ fontFamily: family
307
+ };
308
+ }
309
+ if (typeof style === 'object') return style;
310
+ return null;
311
+ }
312
+
313
+ /**
314
+ * StyleSheet ids are numbers. Resolve them only when one shows up so tests
315
+ * that pass plain style objects do not load react-native.
316
+ */
317
+ function flattenRegisteredStyle(styleId) {
318
+ try {
319
+ // Lazy require so unit tests that pass plain style objects do not load RN.
320
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
321
+ const {
322
+ StyleSheet
323
+ } = require('react-native');
324
+ const flat = StyleSheet?.flatten?.(styleId);
325
+ return flat ?? null;
326
+ } catch {
327
+ return null;
328
+ }
329
+ }
330
+ function unwrapFontName(value) {
331
+ const trimmed = value.trim();
332
+ if (trimmed.length >= 2) {
333
+ const first = trimmed[0];
334
+ const last = trimmed[trimmed.length - 1];
335
+ if (first === '"' && last === '"' || first === "'" && last === "'") {
336
+ return trimmed.slice(1, -1).trim();
337
+ }
338
+ }
339
+ return trimmed;
340
+ }
341
+ //# sourceMappingURL=detectAppFontFamily.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_screenTracker","require","_FiberScanRootStore","_fiberInternals","_visibleScreens","_walkVisibleFibers","TEXT_HOST_NAMES","Set","SDK_HOST_TEST_ID_PREFIX","MAX_FONT_ANCESTORS","CSS_GENERIC_FAMILIES","ICON_FONT_EXACT","cache","resetDetectedAppFont","detectAppFontFamily","instance","fiberScanRoot","getInstance","root","getFiber","cacheStillCurrent","family","tally","tallyHostText","truncated","voted","pickMajority","counts","screens","screenKey","reportedScreenKey","DEFAULT_STACK_FACES","concreteFontFamily","value","undefined","name","unwrapFontName","includes","startsWith","has","toLowerCase","themeConcreteFontFamily","parts","splitCssFamilies","length","part","current","quote","char","trim","push","isBareCssFamily","isIconFontFamily","key","replace","Map","walkVisibleFibers","fiber","isScreenHostFiber","isTextHost","vote","voteFor","set","get","isUnderSdkHost","own","classifyFamily","readFontFamily","kind","hasAncestorText","parent","getReturn","depth","cached","every","screen","screenStillCurrent","isFiberOnVisibleScreen","MAX_ANCESTOR_WALK","location","getCurrentScreenLocation","path","raw","concrete","platform","bestName","bestCount","count","testID","getLiveHostProps","typeName","getHostTypeName","elementType","node","getStateNode","className","viewConfig","uiViewClassName","__viewConfig","flat","flattenFontStyle","style","fontFamily","trimmed","flattenRegisteredStyle","Array","isArray","entry","styleId","StyleSheet","flatten","first","last","slice"],"sourceRoot":"../../../../src","sources":["anchors/fiber/detectAppFontFamily.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isOutsideModal = isOutsideModal;
7
+ exports.locatePresentedModal = locatePresentedModal;
8
+ exports.measureOriginOf = measureOriginOf;
9
+ exports.modalOriginInWindow = modalOriginInWindow;
10
+ exports.rectInWindow = rectInWindow;
11
+ var _reactNative = require("react-native");
12
+ var _measureHostFiber = require("./measureHostFiber.js");
13
+ var _visibleRect = require("./visibleRect.js");
14
+ /**
15
+ * Where a natively presented modal sits in the window.
16
+ *
17
+ * Fabric measures and hit-tests content inside a react-native-screens modal
18
+ * screen (`RNSModalScreen`) or a React Native `<Modal>` relative to the modal,
19
+ * not the window: both shadow nodes are `RootNodeKind`, and the native side
20
+ * reports only their size. That is the window for full-screen presentations,
21
+ * but a page sheet or form sheet starts below the top of the window, so window
22
+ * points and measured rects disagree by the sheet's origin.
23
+ *
24
+ * The SDK has no native code to ask UIKit where the sheet is, so the origin is
25
+ * derived from sizes: a sheet as wide as the window is anchored to its bottom.
26
+ * Measured on iOS 17.4 and 26.5 and an iPadOS 26.5 portrait iPad: page sheets
27
+ * at 852 − 783 = 69, 874 − 812 = 62 and 1210 − 1104 = 106, a `fitToContents`
28
+ * form sheet at 852 − 424 = 428.
29
+ *
30
+ * A narrower sheet (an iPad form sheet) cannot be placed from sizes. One
31
+ * measured 580×376 on a 834×1210 window sat at y = 549, neither centered (417)
32
+ * nor bottom-anchored (834): its detent is anchored inside a taller container
33
+ * the shadow tree never sees. It gets no origin, so picks on it fail closed.
34
+ *
35
+ * Only a sheet at its full-height detent is reliably on the bottom edge. A
36
+ * shorter one is not, in two cases, and also gets no origin:
37
+ * - From iOS 26 it floats. On iOS 26.5 the `fitToContents` trade ticket
38
+ * measured 402×424 on a 402×874 window, but UIKit drew it about 8pt in from
39
+ * the sides and bottom at about 0.96 scale, so a bottom-anchored origin was
40
+ * up to 8pt off. Page sheets there stay edge to edge (origin 62, exact).
41
+ * - While the keyboard is up, a sheet that fits above the keyboard may have
42
+ * been lifted to clear it. One that is taller than the space above the
43
+ * keyboard was not: on iOS 26.5 a page sheet stayed at 62 with a 335pt
44
+ * keyboard, and on iOS 17.4 the trade ticket grew from 424 to 715 under a
45
+ * 291pt keyboard and stayed on the bottom edge (852 − 715 = 137, exact).
46
+ *
47
+ * Paper measures with UIKit, in window coordinates, so its origin is zero.
48
+ * Outside iOS the modal is measured where it sits, as before this lookup.
49
+ */
50
+
51
+ const ZERO = {
52
+ x: 0,
53
+ y: 0
54
+ };
55
+ const MEASURE_TIMEOUT_MS = 400;
56
+
57
+ /** Layout sizes are fractional and may miss the window size by a hair. */
58
+ const SIZE_SLACK = 1;
59
+
60
+ /**
61
+ * A sheet whose top is within this fraction of the window height is at its
62
+ * full-height detent. Measured: 69/852 (iOS 17.4), 62/874 (iOS 26.5) and
63
+ * 106/1210 (iPadOS 26.5). Medium and `fitToContents` detents start far lower.
64
+ */
65
+ const FULL_HEIGHT_SHEET_MAX_TOP = 0.15;
66
+
67
+ /** First iOS release that floats sheets shorter than full height. */
68
+ const FLOATING_SHEETS_IOS = 26;
69
+ function isFabric() {
70
+ const manager = globalThis.nativeFabricUIManager;
71
+ return manager != null && typeof manager === 'object';
72
+ }
73
+ function readWindowSize() {
74
+ try {
75
+ const {
76
+ width,
77
+ height
78
+ } = _reactNative.Dimensions.get('window');
79
+ if (width > 0 && height > 0) return {
80
+ width,
81
+ height
82
+ };
83
+ } catch {
84
+ // Tests and odd hosts.
85
+ }
86
+ return null;
87
+ }
88
+ function floatsShortSheets() {
89
+ const major = parseInt(String(_reactNative.Platform.Version), 10);
90
+ return Number.isFinite(major) && major >= FLOATING_SHEETS_IOS;
91
+ }
92
+
93
+ /** Window y of the keyboard's top edge, or null when it is down. Unknown counts as up at the bottom. */
94
+ function keyboardTop(windowSize) {
95
+ try {
96
+ if (typeof _reactNative.Keyboard?.isVisible !== 'function' || !_reactNative.Keyboard.isVisible()) return null;
97
+ const metrics = typeof _reactNative.Keyboard.metrics === 'function' ? _reactNative.Keyboard.metrics() : undefined;
98
+ return metrics && metrics.height > 0 ? metrics.screenY : windowSize.height;
99
+ } catch {
100
+ return null;
101
+ }
102
+ }
103
+ function measureSize(fiber) {
104
+ return new Promise(resolve => {
105
+ let settled = false;
106
+ const timer = setTimeout(() => {
107
+ if (settled) return;
108
+ settled = true;
109
+ resolve(null);
110
+ }, MEASURE_TIMEOUT_MS);
111
+ try {
112
+ (0, _measureHostFiber.measureHostFiber)(fiber, (_x, _y, width, height) => {
113
+ if (settled) return;
114
+ settled = true;
115
+ clearTimeout(timer);
116
+ resolve(width > 0 && height > 0 ? {
117
+ width,
118
+ height
119
+ } : null);
120
+ });
121
+ } catch {
122
+ if (settled) return;
123
+ settled = true;
124
+ clearTimeout(timer);
125
+ resolve(null);
126
+ }
127
+ });
128
+ }
129
+
130
+ /**
131
+ * Window origin of a presented modal of `size`, bottom-anchored. Null when it
132
+ * is narrower than the window (see above) or does not fit in it, as
133
+ * mid-rotation.
134
+ */
135
+ function modalOriginInWindow(size, windowSize) {
136
+ if (size.width <= 0 || size.height <= 0) return null;
137
+ if (size.width > windowSize.width + SIZE_SLACK || size.height > windowSize.height + SIZE_SLACK) {
138
+ return null;
139
+ }
140
+ if (size.width < windowSize.width - SIZE_SLACK) return null;
141
+ return {
142
+ x: 0,
143
+ y: Math.max(0, windowSize.height - size.height)
144
+ };
145
+ }
146
+
147
+ /** {@link modalOriginInWindow}, or null when a short sheet may be off the bottom edge (see above). */
148
+ function placeModal(size, windowSize) {
149
+ const origin = modalOriginInWindow(size, windowSize);
150
+ if (!origin || origin.y <= windowSize.height * FULL_HEIGHT_SHEET_MAX_TOP) return origin;
151
+ if (floatsShortSheets()) return null;
152
+ const keyboard = keyboardTop(windowSize);
153
+ if (keyboard != null && size.height <= keyboard) return null;
154
+ return origin;
155
+ }
156
+
157
+ /**
158
+ * The modal drawn on top of the app and where its content space sits in the
159
+ * window, or null when nothing is presented. Look it up per tap: a
160
+ * `fitToContents` sheet resizes as its content changes.
161
+ */
162
+ async function locatePresentedModal(root) {
163
+ const host = (0, _visibleRect.topmostVisibleModalHost)(root);
164
+ if (!host) return null;
165
+ if (_reactNative.Platform.OS !== 'ios' || !isFabric()) {
166
+ return {
167
+ host,
168
+ origin: ZERO,
169
+ size: null,
170
+ modalSpace: false
171
+ };
172
+ }
173
+ const size = await measureSize(host);
174
+ const windowSize = readWindowSize();
175
+ const origin = size && windowSize ? placeModal(size, windowSize) : null;
176
+ return {
177
+ host,
178
+ origin,
179
+ size,
180
+ modalSpace: true
181
+ };
182
+ }
183
+
184
+ /** True when window point `(x, y)` is outside a placed modal, on the screen it covers. */
185
+ function isOutsideModal(x, y, modal) {
186
+ const {
187
+ origin,
188
+ size
189
+ } = modal;
190
+ if (!origin || !size) return false;
191
+ return x < origin.x || y < origin.y || x > origin.x + size.width || y > origin.y + size.height;
192
+ }
193
+
194
+ /**
195
+ * Window position of `(0, 0)` in the space `fiber` is measured in, given what
196
+ * {@link locatePresentedModal} returned. Null when `modal` covers `fiber`, or
197
+ * `fiber` is inside a modal that cannot be placed.
198
+ */
199
+ function measureOriginOf(fiber, modal) {
200
+ if (!modal) return ZERO;
201
+ if (!(0, _visibleRect.fiberIsUnder)(fiber, modal.host)) return null;
202
+ return modal.origin;
203
+ }
204
+
205
+ /** `rect`, measured in `modal`'s content space, in window coordinates. */
206
+ function rectInWindow(rect, modal) {
207
+ const origin = modal.origin ?? ZERO;
208
+ if (origin.x === 0 && origin.y === 0) return rect;
209
+ return {
210
+ ...rect,
211
+ x: rect.x + origin.x,
212
+ y: rect.y + origin.y
213
+ };
214
+ }
215
+ //# sourceMappingURL=presentedModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_measureHostFiber","_visibleRect","ZERO","x","y","MEASURE_TIMEOUT_MS","SIZE_SLACK","FULL_HEIGHT_SHEET_MAX_TOP","FLOATING_SHEETS_IOS","isFabric","manager","globalThis","nativeFabricUIManager","readWindowSize","width","height","Dimensions","get","floatsShortSheets","major","parseInt","String","Platform","Version","Number","isFinite","keyboardTop","windowSize","Keyboard","isVisible","metrics","undefined","screenY","measureSize","fiber","Promise","resolve","settled","timer","setTimeout","measureHostFiber","_x","_y","clearTimeout","modalOriginInWindow","size","Math","max","placeModal","origin","keyboard","locatePresentedModal","root","host","topmostVisibleModalHost","OS","modalSpace","isOutsideModal","modal","measureOriginOf","fiberIsUnder","rectInWindow","rect"],"sourceRoot":"../../../../src","sources":["anchors/fiber/presentedModal.ts"],"mappings":"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","ignoreList":[]}