@razorpay/blade 12.111.0 → 12.120.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 (352) hide show
  1. package/assets/spark/colorama-center-gradient-map-dark.jpg +0 -0
  2. package/assets/spark/colorama-gradient-map-dark.png +0 -0
  3. package/build/lib/native/components/Button/BaseButton/BaseButton.js +3 -3
  4. package/build/lib/native/components/Button/BaseButton/BaseButton.js.map +1 -1
  5. package/build/lib/native/components/Button/BaseButton/buttonTokens.js +1 -1
  6. package/build/lib/native/components/Button/BaseButton/buttonTokens.js.map +1 -1
  7. package/build/lib/native/components/Charts/AreaChart/AreaChart.native.js +2 -1
  8. package/build/lib/native/components/Charts/AreaChart/AreaChart.native.js.map +1 -1
  9. package/build/lib/native/components/Charts/CommonChartComponents/CommonChartComponents.native.js +2 -2
  10. package/build/lib/native/components/Charts/CommonChartComponents/CommonChartComponents.native.js.map +1 -1
  11. package/build/lib/native/components/Charts/CommonChartComponents/index.js +1 -1
  12. package/build/lib/native/components/Charts/CommonChartComponents/tokens.js +2 -2
  13. package/build/lib/native/components/Charts/CommonChartComponents/tokens.js.map +1 -1
  14. package/build/lib/native/components/Charts/LineChart/LineChart.native.js +4 -2
  15. package/build/lib/native/components/Charts/LineChart/LineChart.native.js.map +1 -1
  16. package/build/lib/native/components/Charts/utils/nullBridgeUtils.js +4 -0
  17. package/build/lib/native/components/Charts/utils/nullBridgeUtils.js.map +1 -0
  18. package/build/lib/native/components/Charts/utils/referenceBandUtils.js +6 -0
  19. package/build/lib/native/components/Charts/utils/referenceBandUtils.js.map +1 -0
  20. package/build/lib/native/components/CounterInput/CounterInput.native.js +3 -2
  21. package/build/lib/native/components/CounterInput/CounterInput.native.js.map +1 -1
  22. package/build/lib/native/components/CounterInput/token.js +2 -2
  23. package/build/lib/native/components/CounterInput/token.js.map +1 -1
  24. package/build/lib/native/components/DatePicker/Calendar.native.js +2 -2
  25. package/build/lib/native/components/DatePicker/Calendar.native.js.map +1 -1
  26. package/build/lib/native/components/DatePicker/utils.js +2 -2
  27. package/build/lib/native/components/DatePicker/utils.js.map +1 -1
  28. package/build/lib/native/components/Dropdown/Dropdown.js +1 -1
  29. package/build/lib/native/components/Dropdown/Dropdown.js.map +1 -1
  30. package/build/lib/native/components/Dropdown/FilterChipSelectInput.native.js +1 -1
  31. package/build/lib/native/components/Dropdown/FilterChipSelectInput.native.js.map +1 -1
  32. package/build/lib/native/components/Dropdown/dropdownUtils.js +1 -1
  33. package/build/lib/native/components/Dropdown/dropdownUtils.js.map +1 -1
  34. package/build/lib/native/components/Dropdown/filterChipSelectInputUtils.js +1 -1
  35. package/build/lib/native/components/Dropdown/filterChipSelectInputUtils.js.map +1 -1
  36. package/build/lib/native/components/Dropdown/useDropdown.js +1 -1
  37. package/build/lib/native/components/Dropdown/useDropdown.js.map +1 -1
  38. package/build/lib/native/components/FloatingActionButton/FloatingActionButton.js +14 -0
  39. package/build/lib/native/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
  40. package/build/lib/native/components/FloatingActionButton/FloatingActionButtonContainer.native.js +20 -0
  41. package/build/lib/native/components/FloatingActionButton/FloatingActionButtonContainer.native.js.map +1 -0
  42. package/build/lib/native/components/FloatingActionButton/index.js +2 -0
  43. package/build/lib/native/components/FloatingActionButton/index.js.map +1 -0
  44. package/build/lib/native/components/GenUI/GenUIContext.native.js +2 -2
  45. package/build/lib/native/components/GenUI/GenUIContext.native.js.map +1 -1
  46. package/build/lib/native/components/GenUI/index.js +1 -1
  47. package/build/lib/native/components/Icons/BookmarkFilledIcon/BookmarkFilledIcon.js +14 -0
  48. package/build/lib/native/components/Icons/BookmarkFilledIcon/BookmarkFilledIcon.js.map +1 -0
  49. package/build/lib/native/components/Icons/BookmarkFilledIcon/index.js +2 -0
  50. package/build/lib/native/components/Icons/BookmarkFilledIcon/index.js.map +1 -0
  51. package/build/lib/native/components/Icons/index.js +1 -0
  52. package/build/lib/native/components/Icons/index.js.map +1 -1
  53. package/build/lib/native/components/Input/BaseInput/StyledBaseInput.native.js +1 -1
  54. package/build/lib/native/components/Input/BaseInput/StyledBaseInput.native.js.map +1 -1
  55. package/build/lib/native/components/Input/OTPInput/OTPInput.js +1 -1
  56. package/build/lib/native/components/Input/OTPInput/OTPInput.js.map +1 -1
  57. package/build/lib/native/components/Spark/RzpGlass/utils.native.js +1 -1
  58. package/build/lib/native/components/Spark/RzpGlass/utils.native.js.map +1 -1
  59. package/build/lib/native/components/TreeView/TreeView.native.js +4 -0
  60. package/build/lib/native/components/TreeView/TreeView.native.js.map +1 -0
  61. package/build/lib/native/components/TreeView/index.native.js +2 -0
  62. package/build/lib/native/components/TreeView/index.native.js.map +1 -0
  63. package/build/lib/native/components/index.js +7 -2
  64. package/build/lib/native/components/index.js.map +1 -1
  65. package/build/lib/native/tokens/global/colors.js +1 -1
  66. package/build/lib/native/tokens/global/colors.js.map +1 -1
  67. package/build/lib/native/tokens/index.js +1 -0
  68. package/build/lib/native/tokens/index.js.map +1 -1
  69. package/build/lib/native/tokens/theme/bladeNeutralTheme.js +15 -0
  70. package/build/lib/native/tokens/theme/bladeNeutralTheme.js.map +1 -0
  71. package/build/lib/native/tokens/theme/bladeTheme.js +1 -1
  72. package/build/lib/native/tokens/theme/bladeTheme.js.map +1 -1
  73. package/build/lib/native/tokens/theme/index.js +1 -0
  74. package/build/lib/native/tokens/theme/index.js.map +1 -1
  75. package/build/lib/native/tokens/theme/theme.js.map +1 -1
  76. package/build/lib/native/utils/componentZIndices.js +1 -1
  77. package/build/lib/native/utils/componentZIndices.js.map +1 -1
  78. package/build/lib/native/utils/metaAttribute/metaConstants.js +1 -1
  79. package/build/lib/native/utils/metaAttribute/metaConstants.js.map +1 -1
  80. package/build/lib/native/utils/useControlledDropdownInput/useControlledDropdownInput.js +1 -1
  81. package/build/lib/native/utils/useControlledDropdownInput/useControlledDropdownInput.js.map +1 -1
  82. package/build/lib/web/development/_virtual/cloneDeep.js +1 -1
  83. package/build/lib/web/development/_virtual/cloneDeep3.js +1 -1
  84. package/build/lib/web/development/components/Button/BaseButton/BaseButton.js +124 -73
  85. package/build/lib/web/development/components/Button/BaseButton/BaseButton.js.map +1 -1
  86. package/build/lib/web/development/components/Button/BaseButton/buttonTokens.js +68 -2
  87. package/build/lib/web/development/components/Button/BaseButton/buttonTokens.js.map +1 -1
  88. package/build/lib/web/development/components/Charts/AreaChart/AreaChart.web.js +206 -18
  89. package/build/lib/web/development/components/Charts/AreaChart/AreaChart.web.js.map +1 -1
  90. package/build/lib/web/development/components/Charts/CommonChartComponents/CommonChartComponents.web.js +159 -43
  91. package/build/lib/web/development/components/Charts/CommonChartComponents/CommonChartComponents.web.js.map +1 -1
  92. package/build/lib/web/development/components/Charts/CommonChartComponents/index.js +1 -1
  93. package/build/lib/web/development/components/Charts/CommonChartComponents/tokens.js +15 -2
  94. package/build/lib/web/development/components/Charts/CommonChartComponents/tokens.js.map +1 -1
  95. package/build/lib/web/development/components/Charts/LineChart/LineChart.web.js +272 -15
  96. package/build/lib/web/development/components/Charts/LineChart/LineChart.web.js.map +1 -1
  97. package/build/lib/web/development/components/Charts/LineChart/useReferenceBand.js +195 -0
  98. package/build/lib/web/development/components/Charts/LineChart/useReferenceBand.js.map +1 -0
  99. package/build/lib/web/development/components/Charts/utils/nullBridgeUtils.js +175 -0
  100. package/build/lib/web/development/components/Charts/utils/nullBridgeUtils.js.map +1 -0
  101. package/build/lib/web/development/components/Charts/utils/referenceBandUtils.js +66 -0
  102. package/build/lib/web/development/components/Charts/utils/referenceBandUtils.js.map +1 -0
  103. package/build/lib/web/development/components/CounterInput/CounterInput.web.js +29 -5
  104. package/build/lib/web/development/components/CounterInput/CounterInput.web.js.map +1 -1
  105. package/build/lib/web/development/components/CounterInput/StyledCounterInput.js +20 -4
  106. package/build/lib/web/development/components/CounterInput/StyledCounterInput.js.map +1 -1
  107. package/build/lib/web/development/components/CounterInput/token.js +6 -1
  108. package/build/lib/web/development/components/CounterInput/token.js.map +1 -1
  109. package/build/lib/web/development/components/DatePicker/BaseDatePicker.web.js +20 -0
  110. package/build/lib/web/development/components/DatePicker/BaseDatePicker.web.js.map +1 -1
  111. package/build/lib/web/development/components/DatePicker/Calendar.web.js +9 -2
  112. package/build/lib/web/development/components/DatePicker/Calendar.web.js.map +1 -1
  113. package/build/lib/web/development/components/DatePicker/utils.js +21 -1
  114. package/build/lib/web/development/components/DatePicker/utils.js.map +1 -1
  115. package/build/lib/web/development/components/Dropdown/Dropdown.js +4 -1
  116. package/build/lib/web/development/components/Dropdown/Dropdown.js.map +1 -1
  117. package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js +20 -12
  118. package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
  119. package/build/lib/web/development/components/Dropdown/dropdownUtils.js +28 -2
  120. package/build/lib/web/development/components/Dropdown/dropdownUtils.js.map +1 -1
  121. package/build/lib/web/development/components/Dropdown/filterChipSelectInputUtils.js +15 -1
  122. package/build/lib/web/development/components/Dropdown/filterChipSelectInputUtils.js.map +1 -1
  123. package/build/lib/web/development/components/Dropdown/useDropdown.js +91 -5
  124. package/build/lib/web/development/components/Dropdown/useDropdown.js.map +1 -1
  125. package/build/lib/web/development/components/FloatingActionButton/FloatingActionButton.js +126 -0
  126. package/build/lib/web/development/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
  127. package/build/lib/web/development/components/FloatingActionButton/FloatingActionButtonContainer.web.js +45 -0
  128. package/build/lib/web/development/components/FloatingActionButton/FloatingActionButtonContainer.web.js.map +1 -0
  129. package/build/lib/web/development/components/FloatingActionButton/index.js +2 -0
  130. package/build/lib/web/development/components/FloatingActionButton/index.js.map +1 -0
  131. package/build/lib/web/development/components/GenUI/GenUIComponents.web.js.map +1 -1
  132. package/build/lib/web/development/components/GenUI/GenUIContext.web.js +9 -1
  133. package/build/lib/web/development/components/GenUI/GenUIContext.web.js.map +1 -1
  134. package/build/lib/web/development/components/GenUI/GenUIProvider.web.js +17 -0
  135. package/build/lib/web/development/components/GenUI/GenUIProvider.web.js.map +1 -1
  136. package/build/lib/web/development/components/GenUI/GenUISchemaRenderer.web.js +31 -6
  137. package/build/lib/web/development/components/GenUI/GenUISchemaRenderer.web.js.map +1 -1
  138. package/build/lib/web/development/components/GenUI/index.js +1 -1
  139. package/build/lib/web/development/components/Icons/BookmarkFilledIcon/BookmarkFilledIcon.js +44 -0
  140. package/build/lib/web/development/components/Icons/BookmarkFilledIcon/BookmarkFilledIcon.js.map +1 -0
  141. package/build/lib/web/development/components/Icons/BookmarkFilledIcon/index.js +2 -0
  142. package/build/lib/web/development/components/Icons/BookmarkFilledIcon/index.js.map +1 -0
  143. package/build/lib/web/development/components/Icons/index.js +1 -0
  144. package/build/lib/web/development/components/Icons/index.js.map +1 -1
  145. package/build/lib/web/development/components/Input/OTPInput/OTPInput.js +3 -0
  146. package/build/lib/web/development/components/Input/OTPInput/OTPInput.js.map +1 -1
  147. package/build/lib/web/development/components/PopupArrow/PopupArrow.web.js +7 -1
  148. package/build/lib/web/development/components/PopupArrow/PopupArrow.web.js.map +1 -1
  149. package/build/lib/web/development/components/RollingText/RollingText.web.js +27 -20
  150. package/build/lib/web/development/components/RollingText/RollingText.web.js.map +1 -1
  151. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js +16 -7
  152. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js.map +1 -1
  153. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js +24 -6
  154. package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -1
  155. package/build/lib/web/development/components/Spark/RzpGlass/presets.js +30 -1
  156. package/build/lib/web/development/components/Spark/RzpGlass/presets.js.map +1 -1
  157. package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js +1 -1
  158. package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -1
  159. package/build/lib/web/development/components/Spark/RzpGlass/utils.js +26 -10
  160. package/build/lib/web/development/components/Spark/RzpGlass/utils.js.map +1 -1
  161. package/build/lib/web/development/components/SpotlightPopoverTour/Tour.web.js +31 -18
  162. package/build/lib/web/development/components/SpotlightPopoverTour/Tour.web.js.map +1 -1
  163. package/build/lib/web/development/components/SpotlightPopoverTour/TourMask.web.js +14 -3
  164. package/build/lib/web/development/components/SpotlightPopoverTour/TourMask.web.js.map +1 -1
  165. package/build/lib/web/development/components/SpotlightPopoverTour/TourPopover.web.js +23 -4
  166. package/build/lib/web/development/components/SpotlightPopoverTour/TourPopover.web.js.map +1 -1
  167. package/build/lib/web/development/components/SpotlightPopoverTour/utils.js +58 -1
  168. package/build/lib/web/development/components/SpotlightPopoverTour/utils.js.map +1 -1
  169. package/build/lib/web/development/components/TreeView/StyledTreeViewRow.web.js +41 -0
  170. package/build/lib/web/development/components/TreeView/StyledTreeViewRow.web.js.map +1 -0
  171. package/build/lib/web/development/components/TreeView/TreeView.web.js +696 -0
  172. package/build/lib/web/development/components/TreeView/TreeView.web.js.map +1 -0
  173. package/build/lib/web/development/components/TreeView/TreeViewAnimator.web.js +184 -0
  174. package/build/lib/web/development/components/TreeView/TreeViewAnimator.web.js.map +1 -0
  175. package/build/lib/web/development/components/TreeView/TreeViewChevron.web.js +73 -0
  176. package/build/lib/web/development/components/TreeView/TreeViewChevron.web.js.map +1 -0
  177. package/build/lib/web/development/components/TreeView/TreeViewItem.web.js +295 -0
  178. package/build/lib/web/development/components/TreeView/TreeViewItem.web.js.map +1 -0
  179. package/build/lib/web/development/components/TreeView/TreeViewLoadMore.web.js +173 -0
  180. package/build/lib/web/development/components/TreeView/TreeViewLoadMore.web.js.map +1 -0
  181. package/build/lib/web/development/components/TreeView/componentIds.js +8 -0
  182. package/build/lib/web/development/components/TreeView/componentIds.js.map +1 -0
  183. package/build/lib/web/development/components/TreeView/index.web.js +4 -0
  184. package/build/lib/web/development/components/TreeView/index.web.js.map +1 -0
  185. package/build/lib/web/development/components/TreeView/treeViewUtils.js +475 -0
  186. package/build/lib/web/development/components/TreeView/treeViewUtils.js.map +1 -0
  187. package/build/lib/web/development/components/TreeView/useTreeView.js +24 -0
  188. package/build/lib/web/development/components/TreeView/useTreeView.js.map +1 -0
  189. package/build/lib/web/development/components/index.js +9 -2
  190. package/build/lib/web/development/components/index.js.map +1 -1
  191. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +1 -1
  192. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/predicate/matches.js +2 -2
  193. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +2 -2
  194. package/build/lib/web/development/node_modules/es-toolkit/dist/object/cloneDeep.js +1 -1
  195. package/build/lib/web/development/tokens/global/colors.js +2 -2
  196. package/build/lib/web/development/tokens/global/colors.js.map +1 -1
  197. package/build/lib/web/development/tokens/index.js +1 -0
  198. package/build/lib/web/development/tokens/index.js.map +1 -1
  199. package/build/lib/web/development/tokens/theme/bladeNeutralTheme.js +1439 -0
  200. package/build/lib/web/development/tokens/theme/bladeNeutralTheme.js.map +1 -0
  201. package/build/lib/web/development/tokens/theme/bladeTheme.js +48 -12
  202. package/build/lib/web/development/tokens/theme/bladeTheme.js.map +1 -1
  203. package/build/lib/web/development/tokens/theme/index.js +1 -0
  204. package/build/lib/web/development/tokens/theme/index.js.map +1 -1
  205. package/build/lib/web/development/tokens/theme/theme.js.map +1 -1
  206. package/build/lib/web/development/utils/componentZIndices.js +2 -0
  207. package/build/lib/web/development/utils/componentZIndices.js.map +1 -1
  208. package/build/lib/web/development/utils/metaAttribute/metaConstants.js +4 -0
  209. package/build/lib/web/development/utils/metaAttribute/metaConstants.js.map +1 -1
  210. package/build/lib/web/development/utils/useControlledDropdownInput/useControlledDropdownInput.js +12 -4
  211. package/build/lib/web/development/utils/useControlledDropdownInput/useControlledDropdownInput.js.map +1 -1
  212. package/build/lib/web/development/utils/useTruncationTitle/useTruncationTitle.web.js +2 -2
  213. package/build/lib/web/development/utils/useTruncationTitle/useTruncationTitle.web.js.map +1 -1
  214. package/build/lib/web/production/_virtual/flatten.js +1 -1
  215. package/build/lib/web/production/_virtual/flatten3.js +1 -1
  216. package/build/lib/web/production/components/Button/BaseButton/BaseButton.js +124 -73
  217. package/build/lib/web/production/components/Button/BaseButton/BaseButton.js.map +1 -1
  218. package/build/lib/web/production/components/Button/BaseButton/buttonTokens.js +68 -2
  219. package/build/lib/web/production/components/Button/BaseButton/buttonTokens.js.map +1 -1
  220. package/build/lib/web/production/components/Charts/AreaChart/AreaChart.web.js +206 -18
  221. package/build/lib/web/production/components/Charts/AreaChart/AreaChart.web.js.map +1 -1
  222. package/build/lib/web/production/components/Charts/CommonChartComponents/CommonChartComponents.web.js +159 -43
  223. package/build/lib/web/production/components/Charts/CommonChartComponents/CommonChartComponents.web.js.map +1 -1
  224. package/build/lib/web/production/components/Charts/CommonChartComponents/index.js +1 -1
  225. package/build/lib/web/production/components/Charts/CommonChartComponents/tokens.js +15 -2
  226. package/build/lib/web/production/components/Charts/CommonChartComponents/tokens.js.map +1 -1
  227. package/build/lib/web/production/components/Charts/LineChart/LineChart.web.js +272 -15
  228. package/build/lib/web/production/components/Charts/LineChart/LineChart.web.js.map +1 -1
  229. package/build/lib/web/production/components/Charts/LineChart/useReferenceBand.js +195 -0
  230. package/build/lib/web/production/components/Charts/LineChart/useReferenceBand.js.map +1 -0
  231. package/build/lib/web/production/components/Charts/utils/nullBridgeUtils.js +175 -0
  232. package/build/lib/web/production/components/Charts/utils/nullBridgeUtils.js.map +1 -0
  233. package/build/lib/web/production/components/Charts/utils/referenceBandUtils.js +66 -0
  234. package/build/lib/web/production/components/Charts/utils/referenceBandUtils.js.map +1 -0
  235. package/build/lib/web/production/components/CounterInput/CounterInput.web.js +29 -5
  236. package/build/lib/web/production/components/CounterInput/CounterInput.web.js.map +1 -1
  237. package/build/lib/web/production/components/CounterInput/StyledCounterInput.js +20 -4
  238. package/build/lib/web/production/components/CounterInput/StyledCounterInput.js.map +1 -1
  239. package/build/lib/web/production/components/CounterInput/token.js +6 -1
  240. package/build/lib/web/production/components/CounterInput/token.js.map +1 -1
  241. package/build/lib/web/production/components/DatePicker/BaseDatePicker.web.js +20 -0
  242. package/build/lib/web/production/components/DatePicker/BaseDatePicker.web.js.map +1 -1
  243. package/build/lib/web/production/components/DatePicker/Calendar.web.js +9 -2
  244. package/build/lib/web/production/components/DatePicker/Calendar.web.js.map +1 -1
  245. package/build/lib/web/production/components/DatePicker/utils.js +21 -1
  246. package/build/lib/web/production/components/DatePicker/utils.js.map +1 -1
  247. package/build/lib/web/production/components/Dropdown/Dropdown.js +4 -1
  248. package/build/lib/web/production/components/Dropdown/Dropdown.js.map +1 -1
  249. package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js +20 -12
  250. package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
  251. package/build/lib/web/production/components/Dropdown/dropdownUtils.js +28 -2
  252. package/build/lib/web/production/components/Dropdown/dropdownUtils.js.map +1 -1
  253. package/build/lib/web/production/components/Dropdown/filterChipSelectInputUtils.js +15 -1
  254. package/build/lib/web/production/components/Dropdown/filterChipSelectInputUtils.js.map +1 -1
  255. package/build/lib/web/production/components/Dropdown/useDropdown.js +91 -5
  256. package/build/lib/web/production/components/Dropdown/useDropdown.js.map +1 -1
  257. package/build/lib/web/production/components/FloatingActionButton/FloatingActionButton.js +126 -0
  258. package/build/lib/web/production/components/FloatingActionButton/FloatingActionButton.js.map +1 -0
  259. package/build/lib/web/production/components/FloatingActionButton/FloatingActionButtonContainer.web.js +45 -0
  260. package/build/lib/web/production/components/FloatingActionButton/FloatingActionButtonContainer.web.js.map +1 -0
  261. package/build/lib/web/production/components/FloatingActionButton/index.js +2 -0
  262. package/build/lib/web/production/components/FloatingActionButton/index.js.map +1 -0
  263. package/build/lib/web/production/components/GenUI/GenUIComponents.web.js.map +1 -1
  264. package/build/lib/web/production/components/GenUI/GenUIContext.web.js +9 -1
  265. package/build/lib/web/production/components/GenUI/GenUIContext.web.js.map +1 -1
  266. package/build/lib/web/production/components/GenUI/GenUIProvider.web.js +17 -0
  267. package/build/lib/web/production/components/GenUI/GenUIProvider.web.js.map +1 -1
  268. package/build/lib/web/production/components/GenUI/GenUISchemaRenderer.web.js +31 -6
  269. package/build/lib/web/production/components/GenUI/GenUISchemaRenderer.web.js.map +1 -1
  270. package/build/lib/web/production/components/GenUI/index.js +1 -1
  271. package/build/lib/web/production/components/Icons/BookmarkFilledIcon/BookmarkFilledIcon.js +44 -0
  272. package/build/lib/web/production/components/Icons/BookmarkFilledIcon/BookmarkFilledIcon.js.map +1 -0
  273. package/build/lib/web/production/components/Icons/BookmarkFilledIcon/index.js +2 -0
  274. package/build/lib/web/production/components/Icons/BookmarkFilledIcon/index.js.map +1 -0
  275. package/build/lib/web/production/components/Icons/index.js +1 -0
  276. package/build/lib/web/production/components/Icons/index.js.map +1 -1
  277. package/build/lib/web/production/components/Input/OTPInput/OTPInput.js +3 -0
  278. package/build/lib/web/production/components/Input/OTPInput/OTPInput.js.map +1 -1
  279. package/build/lib/web/production/components/PopupArrow/PopupArrow.web.js +7 -1
  280. package/build/lib/web/production/components/PopupArrow/PopupArrow.web.js.map +1 -1
  281. package/build/lib/web/production/components/RollingText/RollingText.web.js +27 -20
  282. package/build/lib/web/production/components/RollingText/RollingText.web.js.map +1 -1
  283. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js +16 -7
  284. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js.map +1 -1
  285. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js +24 -6
  286. package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -1
  287. package/build/lib/web/production/components/Spark/RzpGlass/presets.js +30 -1
  288. package/build/lib/web/production/components/Spark/RzpGlass/presets.js.map +1 -1
  289. package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js +1 -1
  290. package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -1
  291. package/build/lib/web/production/components/Spark/RzpGlass/utils.js +26 -10
  292. package/build/lib/web/production/components/Spark/RzpGlass/utils.js.map +1 -1
  293. package/build/lib/web/production/components/SpotlightPopoverTour/Tour.web.js +31 -18
  294. package/build/lib/web/production/components/SpotlightPopoverTour/Tour.web.js.map +1 -1
  295. package/build/lib/web/production/components/SpotlightPopoverTour/TourMask.web.js +14 -3
  296. package/build/lib/web/production/components/SpotlightPopoverTour/TourMask.web.js.map +1 -1
  297. package/build/lib/web/production/components/SpotlightPopoverTour/TourPopover.web.js +23 -4
  298. package/build/lib/web/production/components/SpotlightPopoverTour/TourPopover.web.js.map +1 -1
  299. package/build/lib/web/production/components/SpotlightPopoverTour/utils.js +58 -1
  300. package/build/lib/web/production/components/SpotlightPopoverTour/utils.js.map +1 -1
  301. package/build/lib/web/production/components/TreeView/StyledTreeViewRow.web.js +41 -0
  302. package/build/lib/web/production/components/TreeView/StyledTreeViewRow.web.js.map +1 -0
  303. package/build/lib/web/production/components/TreeView/TreeView.web.js +696 -0
  304. package/build/lib/web/production/components/TreeView/TreeView.web.js.map +1 -0
  305. package/build/lib/web/production/components/TreeView/TreeViewAnimator.web.js +184 -0
  306. package/build/lib/web/production/components/TreeView/TreeViewAnimator.web.js.map +1 -0
  307. package/build/lib/web/production/components/TreeView/TreeViewChevron.web.js +73 -0
  308. package/build/lib/web/production/components/TreeView/TreeViewChevron.web.js.map +1 -0
  309. package/build/lib/web/production/components/TreeView/TreeViewItem.web.js +295 -0
  310. package/build/lib/web/production/components/TreeView/TreeViewItem.web.js.map +1 -0
  311. package/build/lib/web/production/components/TreeView/TreeViewLoadMore.web.js +173 -0
  312. package/build/lib/web/production/components/TreeView/TreeViewLoadMore.web.js.map +1 -0
  313. package/build/lib/web/production/components/TreeView/componentIds.js +8 -0
  314. package/build/lib/web/production/components/TreeView/componentIds.js.map +1 -0
  315. package/build/lib/web/production/components/TreeView/index.web.js +4 -0
  316. package/build/lib/web/production/components/TreeView/index.web.js.map +1 -0
  317. package/build/lib/web/production/components/TreeView/treeViewUtils.js +475 -0
  318. package/build/lib/web/production/components/TreeView/treeViewUtils.js.map +1 -0
  319. package/build/lib/web/production/components/TreeView/useTreeView.js +24 -0
  320. package/build/lib/web/production/components/TreeView/useTreeView.js.map +1 -0
  321. package/build/lib/web/production/components/index.js +9 -2
  322. package/build/lib/web/production/components/index.js.map +1 -1
  323. package/build/lib/web/production/node_modules/es-toolkit/dist/array/flatten.js +1 -1
  324. package/build/lib/web/production/node_modules/es-toolkit/dist/compat/array/flatten.js +1 -1
  325. package/build/lib/web/production/node_modules/es-toolkit/dist/compat/array/sortBy.js +2 -2
  326. package/build/lib/web/production/node_modules/es-toolkit/dist/compat/object/omit.js +2 -2
  327. package/build/lib/web/production/tokens/global/colors.js +2 -2
  328. package/build/lib/web/production/tokens/global/colors.js.map +1 -1
  329. package/build/lib/web/production/tokens/index.js +1 -0
  330. package/build/lib/web/production/tokens/index.js.map +1 -1
  331. package/build/lib/web/production/tokens/theme/bladeNeutralTheme.js +1439 -0
  332. package/build/lib/web/production/tokens/theme/bladeNeutralTheme.js.map +1 -0
  333. package/build/lib/web/production/tokens/theme/bladeTheme.js +48 -12
  334. package/build/lib/web/production/tokens/theme/bladeTheme.js.map +1 -1
  335. package/build/lib/web/production/tokens/theme/index.js +1 -0
  336. package/build/lib/web/production/tokens/theme/index.js.map +1 -1
  337. package/build/lib/web/production/tokens/theme/theme.js.map +1 -1
  338. package/build/lib/web/production/utils/componentZIndices.js +2 -0
  339. package/build/lib/web/production/utils/componentZIndices.js.map +1 -1
  340. package/build/lib/web/production/utils/metaAttribute/metaConstants.js +4 -0
  341. package/build/lib/web/production/utils/metaAttribute/metaConstants.js.map +1 -1
  342. package/build/lib/web/production/utils/useControlledDropdownInput/useControlledDropdownInput.js +12 -4
  343. package/build/lib/web/production/utils/useControlledDropdownInput/useControlledDropdownInput.js.map +1 -1
  344. package/build/lib/web/production/utils/useTruncationTitle/useTruncationTitle.web.js +2 -2
  345. package/build/lib/web/production/utils/useTruncationTitle/useTruncationTitle.web.js.map +1 -1
  346. package/build/types/components/index.d.ts +557 -18
  347. package/build/types/components/index.native.d.ts +463 -16
  348. package/build/types/tokens/index.d.ts +11 -4
  349. package/build/types/tokens/index.native.d.ts +11 -4
  350. package/build/types/utils/index.d.ts +8 -3
  351. package/build/types/utils/index.native.d.ts +8 -3
  352. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../src/components/Spark/RzpGlass/utils.ts"],"sourcesContent":["/**\n * RzpGlass Utility Functions\n */\n\nimport type { RzpGlassPreset } from './presets';\nimport { getPresets } from './presets';\nimport type {\n RzpGlassAssets,\n RzpGlassConfig,\n RzpGlassPresetDefinition,\n RzpGlassProps,\n} from './types';\n\nconst DEFAULT_CDN_PATH = 'https://cdn.jsdelivr.net/npm/@razorpay/blade@latest/assets/spark';\n\nconst getDefaultAssets = (assetsPath: string): Required<RzpGlassAssets> => ({\n videoSrc: `${assetsPath}/spark-base-video.mp4`,\n imageSrc: `${assetsPath}/bottom-frame.jpg`,\n gradientMapSrc: `${assetsPath}/colorama-gradient-map-green.jpg`,\n gradientMap2Src: `${assetsPath}/colorama-gradient-map-blue.jpg`,\n centerGradientMapSrc: `${assetsPath}/colorama-center-gradient-map.jpg`,\n});\n\n/**\n * Extract config from props (exclude non-config props).\n * Strips undefined values so they don't clobber preset defaults.\n */\nfunction extractConfig(props: RzpGlassProps): Partial<RzpGlassConfig> {\n const {\n width: _width,\n height: _height,\n className: _className,\n style: _style,\n onLoad: _onLoad,\n onError: _onError,\n preset: _preset,\n assetsPath: _assetsPath,\n gradientMapSrc: _gradientMapSrc,\n gradientMap2Src: _gradientMap2Src,\n gradientMapCanvas: _gradientMapCanvas,\n imageSrc: _imageSrc,\n ...config\n } = props;\n\n // Drop keys with undefined values so preset config isn't overridden by unset props\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n Object.entries(config).filter(([, v]) => v !== undefined),\n ) as Partial<RzpGlassConfig>;\n}\n\nconst ASSET_KEYS = new Set<string>([\n 'videoSrc',\n 'imageSrc',\n 'gradientMapSrc',\n 'gradientMap2Src',\n 'centerGradientMapSrc',\n]);\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return */\nfunction getPresetDefinition(\n preset: RzpGlassPreset | undefined,\n assetsPath: string,\n): RzpGlassPresetDefinition {\n const presets = getPresets(assetsPath);\n if (preset && preset in presets) return { ...presets[preset] };\n return {};\n}\n\nfunction getPresetConfig(\n preset: RzpGlassPreset | undefined,\n assetsPath: string,\n): Partial<RzpGlassConfig> {\n const def = getPresetDefinition(preset, assetsPath) as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(def).filter(([k]) => !ASSET_KEYS.has(k)),\n ) as Partial<RzpGlassConfig>;\n}\n\nfunction getPresetAssets(\n preset: RzpGlassPreset | undefined,\n assetsPath: string,\n): Partial<RzpGlassAssets> {\n const def = getPresetDefinition(preset, assetsPath) as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(def).filter(([k]) => ASSET_KEYS.has(k)),\n ) as Partial<RzpGlassAssets>;\n}\n\n/**\n * Merge preset config with user-provided config.\n * Preset values are used as base; any explicit prop overrides them.\n */\nfunction resolveConfig(props: RzpGlassProps, assetsPath: string): Partial<RzpGlassConfig> {\n return {\n ...getPresetConfig(props.preset, assetsPath),\n ...extractConfig(props),\n };\n}\n\n/**\n * Load an image from URL\n */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error(`Failed to load image: ${src}`));\n img.src = src;\n });\n}\n\n/**\n * Load a video from URL\n */\nfunction loadVideo(src: string): Promise<HTMLVideoElement> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.src = src;\n video.crossOrigin = 'anonymous';\n video.loop = true;\n video.muted = true;\n video.playsInline = true;\n video.preload = 'auto';\n video.oncanplaythrough = () => resolve(video);\n video.onerror = () => reject(new Error(`Failed to load video: ${src}`));\n video.load();\n });\n}\n\n/**\n * Check if browser is Safari\n */\nfunction isSafari(): boolean {\n const ua = navigator.userAgent.toLowerCase();\n return ua.includes('safari') && !ua.includes('chrome') && !ua.includes('android');\n}\n\n/**\n * Best guess browser zoom level (for Safari which doesn't include zoom in devicePixelRatio)\n */\nfunction bestGuessBrowserZoom(): number {\n const viewportScale = visualViewport?.scale ?? 1;\n const viewportWidth = visualViewport?.width ?? window.innerWidth;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const innerWidth = viewportScale * viewportWidth + scrollbarWidth;\n\n const ratio = outerWidth / innerWidth;\n const zoomPercentageRounded = Math.round(100 * ratio);\n\n // Common zoom levels divisible by 5%\n if (zoomPercentageRounded % 5 === 0) {\n return zoomPercentageRounded / 100;\n }\n\n // Handle special zoom levels\n if (zoomPercentageRounded === 33) return 1 / 3;\n if (zoomPercentageRounded === 67) return 2 / 3;\n if (zoomPercentageRounded === 133) return 4 / 3;\n\n return ratio;\n}\n\n/**\n * Preload all assets for a given RazorSense preset.\n * This ensures videos and images are fully loaded before the component mounts,\n * preventing frame skipping in one-shot animations.\n *\n * @param preset - The preset name to preload assets for\n * @param assetsPath - Optional CDN path for assets (defaults to Blade CDN)\n * @returns Promise that resolves when all assets are loaded\n *\n * @example\n * ```tsx\n * // Preload before showing the animation\n * await preloadRazorSenseAssets('circleSlideUp');\n *\n * // Now mount the component - assets are already cached\n * <RazorSense preset=\"circleSlideUp\" />\n * ```\n */\nasync function preloadRazorSenseAssets(\n preset: RzpGlassPreset = 'default',\n assetsPath: string = DEFAULT_CDN_PATH,\n): Promise<void> {\n const presets = getPresets(assetsPath);\n const presetDef = presets[preset] || {};\n const defaultAssets = getDefaultAssets(assetsPath);\n\n const videoSrc = presetDef.videoSrc ?? defaultAssets.videoSrc;\n const imageSrc = presetDef.imageSrc;\n const gradientMapSrc = presetDef.gradientMapSrc ?? defaultAssets.gradientMapSrc;\n const gradientMap2Src = presetDef.gradientMap2Src ?? defaultAssets.gradientMap2Src;\n const centerGradientMapSrc = presetDef.centerGradientMapSrc ?? defaultAssets.centerGradientMapSrc;\n\n const loadPromises: Promise<unknown>[] = [];\n\n if (imageSrc) {\n loadPromises.push(loadImage(imageSrc));\n } else if (videoSrc) {\n loadPromises.push(loadVideo(videoSrc));\n }\n\n loadPromises.push(\n loadImage(gradientMapSrc),\n loadImage(gradientMap2Src),\n loadImage(centerGradientMapSrc),\n );\n\n await Promise.all(loadPromises);\n}\n\nexport {\n DEFAULT_CDN_PATH,\n getDefaultAssets,\n loadImage,\n loadVideo,\n isSafari,\n bestGuessBrowserZoom,\n preloadRazorSenseAssets,\n getPresetAssets,\n resolveConfig,\n};\n"],"names":["DEFAULT_CDN_PATH","getDefaultAssets","assetsPath","videoSrc","concat","imageSrc","gradientMapSrc","gradientMap2Src","centerGradientMapSrc","extractConfig","props","_width","width","_height","height","_className","className","_style","style","_onLoad","onLoad","_onError","onError","_preset","preset","_assetsPath","_gradientMapSrc","_gradientMap2Src","_gradientMapCanvas","gradientMapCanvas","_imageSrc","config","_objectWithoutProperties","_excluded","Object","fromEntries","entries","filter","_ref","_ref2","_slicedToArray","v","undefined","ASSET_KEYS","Set","getPresetDefinition","presets","getPresets","_objectSpread","getPresetConfig","def","_ref3","_ref4","k","has","getPresetAssets","_ref5","_ref6","resolveConfig","loadImage","src","Promise","resolve","reject","img","Image","crossOrigin","onload","onerror","Error","loadVideo","video","document","createElement","loop","muted","playsInline","preload","oncanplaythrough","load","isSafari","ua","navigator","userAgent","toLowerCase","includes","bestGuessBrowserZoom","_visualViewport$scale","_visualViewport","_visualViewport$width","_visualViewport2","viewportScale","visualViewport","scale","viewportWidth","window","innerWidth","scrollbarWidth","documentElement","clientWidth","ratio","outerWidth","zoomPercentageRounded","Math","round","preloadRazorSenseAssets","_preloadRazorSenseAssets","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_presetDef$videoSrc","_presetDef$gradientMa","_presetDef$gradientMa2","_presetDef$centerGrad","presetDef","defaultAssets","loadPromises","_args","wrap","_context","prev","next","length","push","all","stop"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../src/components/Spark/RzpGlass/utils.ts"],"sourcesContent":["/**\n * RzpGlass Utility Functions\n */\n\nimport type { RzpGlassPreset } from './presets';\nimport { getDarkOverlay, getPresets } from './presets';\nimport type {\n RzpGlassAssets,\n RzpGlassConfig,\n RzpGlassPresetDefinition,\n RzpGlassProps,\n} from './types';\n\nconst DEFAULT_CDN_PATH = 'https://cdn.jsdelivr.net/npm/@razorpay/blade@latest/assets/spark';\n\nconst getDefaultAssets = (assetsPath: string): Required<RzpGlassAssets> => ({\n videoSrc: `${assetsPath}/spark-base-video.mp4`,\n imageSrc: `${assetsPath}/bottom-frame.jpg`,\n gradientMapSrc: `${assetsPath}/colorama-gradient-map-green.jpg`,\n gradientMap2Src: `${assetsPath}/colorama-gradient-map-blue.jpg`,\n centerGradientMapSrc: `${assetsPath}/colorama-center-gradient-map.jpg`,\n});\n\n/**\n * Extract config from props (exclude non-config props).\n * Strips undefined values so they don't clobber preset defaults.\n */\nfunction extractConfig(props: RzpGlassProps): Partial<RzpGlassConfig> {\n const {\n width: _width,\n height: _height,\n className: _className,\n style: _style,\n onLoad: _onLoad,\n onError: _onError,\n preset: _preset,\n assetsPath: _assetsPath,\n gradientMapSrc: _gradientMapSrc,\n gradientMap2Src: _gradientMap2Src,\n gradientMapCanvas: _gradientMapCanvas,\n imageSrc: _imageSrc,\n ...config\n } = props;\n\n // Drop keys with undefined values so preset config isn't overridden by unset props\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n Object.entries(config).filter(([, v]) => v !== undefined),\n ) as Partial<RzpGlassConfig>;\n}\n\nconst ASSET_KEYS = new Set<string>([\n 'videoSrc',\n 'imageSrc',\n 'gradientMapSrc',\n 'gradientMap2Src',\n 'centerGradientMapSrc',\n]);\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return */\nfunction getPresetDefinition(\n preset: RzpGlassPreset | undefined,\n assetsPath: string,\n isDark = false,\n): RzpGlassPresetDefinition {\n const presets = getPresets(assetsPath);\n const definition: RzpGlassPresetDefinition =\n preset && preset in presets ? { ...presets[preset] } : {};\n\n // In dark mode every preset gets its dark counterpart layered on top. The\n // overlay reads the preset's own gamma so the ccWhitePoint guard stays correct.\n if (!isDark) return definition;\n return { ...definition, ...getDarkOverlay(assetsPath, definition) };\n}\n\nfunction getPresetConfig(\n preset: RzpGlassPreset | undefined,\n assetsPath: string,\n isDark = false,\n): Partial<RzpGlassConfig> {\n const def = getPresetDefinition(preset, assetsPath, isDark) as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(def).filter(([k]) => !ASSET_KEYS.has(k)),\n ) as Partial<RzpGlassConfig>;\n}\n\nfunction getPresetAssets(\n preset: RzpGlassPreset | undefined,\n assetsPath: string,\n isDark = false,\n): Partial<RzpGlassAssets> {\n const def = getPresetDefinition(preset, assetsPath, isDark) as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(def).filter(([k]) => ASSET_KEYS.has(k)),\n ) as Partial<RzpGlassAssets>;\n}\n\n/**\n * Merge preset config with user-provided config.\n * Preset values (plus the dark overlay when the color scheme is dark) are used as\n * base; any explicit prop overrides them.\n */\nfunction resolveConfig(\n props: RzpGlassProps,\n assetsPath: string,\n isDark = false,\n): Partial<RzpGlassConfig> {\n return {\n ...getPresetConfig(props.preset, assetsPath, isDark),\n ...extractConfig(props),\n };\n}\n\n/**\n * Load an image from URL\n */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error(`Failed to load image: ${src}`));\n img.src = src;\n });\n}\n\n/**\n * Load a video from URL\n */\nfunction loadVideo(src: string): Promise<HTMLVideoElement> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.src = src;\n video.crossOrigin = 'anonymous';\n video.loop = true;\n video.muted = true;\n video.playsInline = true;\n video.preload = 'auto';\n video.oncanplaythrough = () => resolve(video);\n video.onerror = () => reject(new Error(`Failed to load video: ${src}`));\n video.load();\n });\n}\n\n/**\n * Check if browser is Safari\n */\nfunction isSafari(): boolean {\n const ua = navigator.userAgent.toLowerCase();\n return ua.includes('safari') && !ua.includes('chrome') && !ua.includes('android');\n}\n\n/**\n * Best guess browser zoom level (for Safari which doesn't include zoom in devicePixelRatio)\n */\nfunction bestGuessBrowserZoom(): number {\n const viewportScale = visualViewport?.scale ?? 1;\n const viewportWidth = visualViewport?.width ?? window.innerWidth;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const innerWidth = viewportScale * viewportWidth + scrollbarWidth;\n\n const ratio = outerWidth / innerWidth;\n const zoomPercentageRounded = Math.round(100 * ratio);\n\n // Common zoom levels divisible by 5%\n if (zoomPercentageRounded % 5 === 0) {\n return zoomPercentageRounded / 100;\n }\n\n // Handle special zoom levels\n if (zoomPercentageRounded === 33) return 1 / 3;\n if (zoomPercentageRounded === 67) return 2 / 3;\n if (zoomPercentageRounded === 133) return 4 / 3;\n\n return ratio;\n}\n\n/**\n * Preload all assets for a given RazorSense preset.\n * This ensures videos and images are fully loaded before the component mounts,\n * preventing frame skipping in one-shot animations.\n *\n * @param preset - The preset name to preload assets for\n * @param assetsPath - Optional CDN path for assets (defaults to Blade CDN)\n * @param colorScheme - Color scheme to preload for. Pass `'dark'` to preload the\n * dark gradient maps. Since this runs outside React it cannot read Blade's color\n * scheme itself, so pass the value from `useTheme()` when preloading in dark mode.\n * @returns Promise that resolves when all assets are loaded\n *\n * @example\n * ```tsx\n * // Preload before showing the animation\n * await preloadRazorSenseAssets('circleSlideUp');\n *\n * // Now mount the component - assets are already cached\n * <RazorSense preset=\"circleSlideUp\" />\n *\n * // In dark mode, preload the dark asset set\n * const { colorScheme } = useTheme();\n * await preloadRazorSenseAssets('circleSlideUp', undefined, colorScheme);\n * ```\n */\nasync function preloadRazorSenseAssets(\n preset: RzpGlassPreset = 'default',\n assetsPath: string = DEFAULT_CDN_PATH,\n colorScheme: 'light' | 'dark' = 'light',\n): Promise<void> {\n const presetDef = getPresetDefinition(preset, assetsPath, colorScheme === 'dark');\n const defaultAssets = getDefaultAssets(assetsPath);\n\n const videoSrc = presetDef.videoSrc ?? defaultAssets.videoSrc;\n const imageSrc = presetDef.imageSrc;\n const gradientMapSrc = presetDef.gradientMapSrc ?? defaultAssets.gradientMapSrc;\n const gradientMap2Src = presetDef.gradientMap2Src ?? defaultAssets.gradientMap2Src;\n const centerGradientMapSrc = presetDef.centerGradientMapSrc ?? defaultAssets.centerGradientMapSrc;\n\n const loadPromises: Promise<unknown>[] = [];\n\n if (imageSrc) {\n loadPromises.push(loadImage(imageSrc));\n } else if (videoSrc) {\n loadPromises.push(loadVideo(videoSrc));\n }\n\n loadPromises.push(\n loadImage(gradientMapSrc),\n loadImage(gradientMap2Src),\n loadImage(centerGradientMapSrc),\n );\n\n await Promise.all(loadPromises);\n}\n\nexport {\n DEFAULT_CDN_PATH,\n getDefaultAssets,\n loadImage,\n loadVideo,\n isSafari,\n bestGuessBrowserZoom,\n preloadRazorSenseAssets,\n getPresetAssets,\n resolveConfig,\n};\n"],"names":["DEFAULT_CDN_PATH","getDefaultAssets","assetsPath","videoSrc","concat","imageSrc","gradientMapSrc","gradientMap2Src","centerGradientMapSrc","extractConfig","props","_width","width","_height","height","_className","className","_style","style","_onLoad","onLoad","_onError","onError","_preset","preset","_assetsPath","_gradientMapSrc","_gradientMap2Src","_gradientMapCanvas","gradientMapCanvas","_imageSrc","config","_objectWithoutProperties","_excluded","Object","fromEntries","entries","filter","_ref","_ref2","_slicedToArray","v","undefined","ASSET_KEYS","Set","getPresetDefinition","isDark","arguments","length","presets","getPresets","definition","_objectSpread","getDarkOverlay","getPresetConfig","def","_ref3","_ref4","k","has","getPresetAssets","_ref5","_ref6","resolveConfig","loadImage","src","Promise","resolve","reject","img","Image","crossOrigin","onload","onerror","Error","loadVideo","video","document","createElement","loop","muted","playsInline","preload","oncanplaythrough","load","isSafari","ua","navigator","userAgent","toLowerCase","includes","bestGuessBrowserZoom","_visualViewport$scale","_visualViewport","_visualViewport$width","_visualViewport2","viewportScale","visualViewport","scale","viewportWidth","window","innerWidth","scrollbarWidth","documentElement","clientWidth","ratio","outerWidth","zoomPercentageRounded","Math","round","preloadRazorSenseAssets","_preloadRazorSenseAssets","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_presetDef$videoSrc","_presetDef$gradientMa","_presetDef$gradientMa2","_presetDef$centerGrad","colorScheme","presetDef","defaultAssets","loadPromises","_args","wrap","_context","prev","next","push","all","stop"],"mappings":"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"}
@@ -3,13 +3,15 @@ import { useState, useMemo, useCallback } from 'react';
3
3
  import { FloatingPortal } from '@floating-ui/react';
4
4
  import { TourContext } from './TourContext.js';
5
5
  import { TourPopover } from './TourPopover.web.js';
6
- import { useDelayedState, useIsTransitioningBetweenSteps, useIntersectionObserver, smoothScroll, useLockBodyScroll } from './utils.js';
6
+ import { useDelayedState, useIsTransitioningBetweenSteps, useIntersectionObserver, resolveSpotlightTarget, readBorderRadius, smoothScroll, useLockBodyScroll } from './utils.js';
7
7
  import { SpotlightPopoverTourMask } from './TourMask.web.js';
8
8
  import { transitionDelay } from './tourTokens.js';
9
9
  import '../BladeProvider/index.js';
10
+ import '../../utils/index.js';
10
11
  import { useIsomorphicLayoutEffect } from '../../utils/useIsomorphicLayoutEffect.js';
11
12
  import { jsxs, jsx } from 'react/jsx-runtime';
12
13
  import useTheme from '../BladeProvider/useTheme.js';
14
+ import { isBrowser } from '../../utils/platform/isBrowser.js';
13
15
 
14
16
  var asHTMLElement = function asHTMLElement(el) {
15
17
  return el;
@@ -54,8 +56,10 @@ var SpotlightPopoverTour = function SpotlightPopoverTour(_ref) {
54
56
  isScrolling = _useState6[0],
55
57
  setIsScrolling = _useState6[1];
56
58
  var currentStepRef = refIdMap.get((_steps$activeStep = steps[activeStep]) === null || _steps$activeStep === void 0 ? void 0 : _steps$activeStep.name);
59
+ // Anchors taller than the viewport can never reach 50% visibility, so we also observe the
60
+ // 0% crossing as a fallback threshold for those cases (see scrollToStep below).
57
61
  var intersection = useIntersectionObserver(currentStepRef, {
58
- threshold: 0.5
62
+ threshold: [0, 0.5]
59
63
  });
60
64
  // main step logic
61
65
  var totalSteps = steps.length;
@@ -102,34 +106,42 @@ var SpotlightPopoverTour = function SpotlightPopoverTour(_ref) {
102
106
  var ref = refIdMap.get((_steps$activeStep2 = steps[activeStep]) === null || _steps$activeStep2 === void 0 ? void 0 : _steps$activeStep2.name);
103
107
  var el = asHTMLElement((_ref$current = ref === null || ref === void 0 ? void 0 : ref.current) !== null && _ref$current !== void 0 ? _ref$current : null);
104
108
  if (!el) return;
105
- var rect = el.getBoundingClientRect();
106
- setSize({
109
+
110
+ // Trace the component the merchant sees, not the layout wrapper around it, so the
111
+ // spotlight's padding stays even on all four sides.
112
+ var target = resolveSpotlightTarget(el);
113
+ var rect = target.getBoundingClientRect();
114
+ var nextSize = {
107
115
  x: rect.x,
108
116
  y: rect.y,
109
117
  width: rect.width,
110
- height: rect.height
111
- });
118
+ height: rect.height,
119
+ borderRadius: readBorderRadius(target)
120
+ };
121
+ setSize(nextSize);
112
122
  if (shouldSkipDelay) {
113
- setDelayedSize({
114
- x: rect.x,
115
- y: rect.y,
116
- width: rect.width,
117
- height: rect.height
118
- });
123
+ setDelayedSize(nextSize);
119
124
  }
120
125
  }, [activeStep, refIdMap, setDelayedSize, steps]);
121
126
  var scrollToStep = useCallback(function () {
122
- var _steps$delayedActiveS, _ref$current2;
127
+ var _steps$delayedActiveS, _ref$current2, _intersection$interse;
128
+ if (!isBrowser()) return;
123
129
  var ref = refIdMap.get((_steps$delayedActiveS = steps[delayedActiveStep]) === null || _steps$delayedActiveS === void 0 ? void 0 : _steps$delayedActiveS.name);
124
130
  var el = asHTMLElement((_ref$current2 = ref === null || ref === void 0 ? void 0 : ref.current) !== null && _ref$current2 !== void 0 ? _ref$current2 : null);
125
131
  if (!el) return;
132
+ var viewportHeight = window.innerHeight || document.documentElement.clientHeight;
133
+ var isAnchorTallerThanViewport = el.getBoundingClientRect().height > viewportHeight;
126
134
 
127
- // If the element is already in view, don't scroll
128
- if (intersection !== null && intersection !== void 0 && intersection.isIntersecting) return;
135
+ // An anchor taller than the viewport can never satisfy the 0.5 threshold, so require only
136
+ // partial visibility (ratio > 0) for it instead of waiting on an unreachable isIntersecting.
137
+ var isVisibleEnough = isAnchorTallerThanViewport ? ((_intersection$interse = intersection === null || intersection === void 0 ? void 0 : intersection.intersectionRatio) !== null && _intersection$interse !== void 0 ? _intersection$interse : 0) > 0 : Boolean(intersection === null || intersection === void 0 ? void 0 : intersection.isIntersecting);
138
+ if (isVisibleEnough) return;
129
139
  setIsScrolling(true);
130
140
  smoothScroll(el, {
131
141
  behavior: 'smooth',
132
- block: 'center',
142
+ // Centering an anchor taller than the viewport pushes its edges (and the popover
143
+ // attached near them) outside the viewport, so align to the top instead.
144
+ block: isAnchorTallerThanViewport ? 'start' : 'center',
133
145
  inline: 'center'
134
146
  }).then(function () {
135
147
  // wait for the scroll to finish before updating the mask size
@@ -138,7 +150,7 @@ var SpotlightPopoverTour = function SpotlightPopoverTour(_ref) {
138
150
  })["finally"](function () {
139
151
  setIsScrolling(false);
140
152
  });
141
- }, [delayedActiveStep, refIdMap, steps, updateMaskSize, intersection === null || intersection === void 0 ? void 0 : intersection.isIntersecting]);
153
+ }, [delayedActiveStep, refIdMap, steps, updateMaskSize, intersection]);
142
154
 
143
155
  // Update the size of the mask when the active step changes
144
156
  useIsomorphicLayoutEffect(function () {
@@ -171,7 +183,8 @@ var SpotlightPopoverTour = function SpotlightPopoverTour(_ref) {
171
183
  x: 0,
172
184
  y: 0,
173
185
  width: 0,
174
- height: 0
186
+ height: 0,
187
+ borderRadius: 0
175
188
  });
176
189
  }
177
190
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -1 +1 @@
1
- {"version":3,"file":"Tour.web.js","sources":["../../../../../../src/components/SpotlightPopoverTour/Tour.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable consistent-return */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { FloatingPortal } from '@floating-ui/react';\nimport { TourContext } from './TourContext';\nimport type { TourElement } from './TourContext';\nimport { TourPopover } from './TourPopover';\nimport {\n smoothScroll,\n useDelayedState,\n useIntersectionObserver,\n useIsTransitioningBetweenSteps,\n useLockBodyScroll,\n} from './utils';\nimport type { SpotlightPopoverTourMaskRect, SpotlightPopoverTourProps } from './types';\nimport { SpotlightPopoverTourMask } from './TourMask';\nimport { transitionDelay } from './tourTokens';\nimport { useTheme } from '~components/BladeProvider';\nimport { useIsomorphicLayoutEffect } from '~utils/useIsomorphicLayoutEffect';\n\nconst asHTMLElement = (el: TourElement | null): HTMLElement | null => el as HTMLElement | null;\n\nconst SpotlightPopoverTour = ({\n steps,\n activeStep,\n isOpen,\n onFinish,\n onOpenChange,\n onStepChange,\n children,\n}: SpotlightPopoverTourProps): React.ReactElement => {\n const { theme } = useTheme();\n const [refIdMap, setRefIdMap] = useState(new Map<string, React.RefObject<TourElement>>());\n const [size, setSize] = useState<SpotlightPopoverTourMaskRect>({\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n });\n\n // delayed state is used to let the transition finish before reacting to the state changes\n const [delayedActiveStep] = useDelayedState(activeStep, transitionDelay);\n const [delayedSize, setDelayedSize] = useDelayedState(size, transitionDelay);\n // keep track of when we are transitioning between steps\n const isTransitioning = useIsTransitioningBetweenSteps(activeStep, transitionDelay);\n const [isScrolling, setIsScrolling] = useState(false);\n\n const currentStepRef = refIdMap.get(steps[activeStep]?.name);\n const intersection = useIntersectionObserver(\n (currentStepRef as React.RefObject<Element> | undefined)!,\n {\n threshold: 0.5,\n },\n );\n // main step logic\n const totalSteps = steps.length;\n const currentStepData = useMemo(() => {\n return steps[activeStep];\n }, [activeStep, steps]);\n\n const goToStep = useCallback(\n (step: number) => {\n if (step < 0 || step >= steps.length) return;\n onStepChange?.(step);\n },\n [onStepChange, steps.length],\n );\n\n const goToNext = useCallback(() => {\n let nextState = activeStep + 1;\n if (nextState >= steps.length) {\n nextState = steps.length - 1;\n }\n onStepChange?.(nextState);\n }, [activeStep, onStepChange, steps.length]);\n\n const goToPrevious = useCallback(() => {\n let nextState = activeStep - 1;\n if (nextState < 0) {\n nextState = 0;\n }\n onStepChange?.(nextState);\n }, [activeStep, onStepChange]);\n\n const stopTour = useCallback(() => {\n onFinish?.();\n }, [onFinish]);\n\n const attachStep = useCallback((id: string, ref: React.RefObject<TourElement>) => {\n if (!ref) return;\n setRefIdMap((prev) => {\n return new Map(prev).set(id, ref);\n });\n }, []);\n\n const removeStep = useCallback((id: string) => {\n setRefIdMap((prev) => {\n const newMap = new Map(prev);\n newMap.delete(id);\n return newMap;\n });\n }, []);\n\n const updateMaskSize = useCallback(\n (shouldSkipDelay = false) => {\n const ref = refIdMap.get(steps[activeStep]?.name);\n const el = asHTMLElement(ref?.current ?? null);\n if (!el) return;\n\n const rect = el.getBoundingClientRect();\n setSize({\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n });\n if (shouldSkipDelay) {\n setDelayedSize({\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n });\n }\n },\n [activeStep, refIdMap, setDelayedSize, steps],\n );\n\n const scrollToStep = useCallback(() => {\n const ref = refIdMap.get(steps[delayedActiveStep]?.name);\n const el = asHTMLElement(ref?.current ?? null);\n if (!el) return;\n\n // If the element is already in view, don't scroll\n if (intersection?.isIntersecting) return;\n\n setIsScrolling(true);\n smoothScroll(el, {\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n })\n .then(() => {\n // wait for the scroll to finish before updating the mask size\n // We also don't want to delay the size update since its already delayed by the scroll\n updateMaskSize(true);\n })\n .finally(() => {\n setIsScrolling(false);\n });\n }, [delayedActiveStep, refIdMap, steps, updateMaskSize, intersection?.isIntersecting]);\n\n // Update the size of the mask when the active step changes\n useIsomorphicLayoutEffect(() => {\n updateMaskSize();\n }, [activeStep, updateMaskSize]);\n\n // Scroll into view when the active step changes\n useIsomorphicLayoutEffect(() => {\n // We need to wait for the transition to finish before scrolling\n // Otherwise the browser sometimes interrupts the scroll\n const scrollDelay = 100;\n setTimeout(() => {\n if (!isOpen) return;\n if (isTransitioning) return;\n scrollToStep();\n }, scrollDelay);\n }, [isOpen, scrollToStep, isTransitioning]);\n\n // reset the mask size when the tour is closed\n useIsomorphicLayoutEffect(() => {\n if (isOpen) {\n // on initial mount, we don't want to delay the size update\n updateMaskSize(true);\n onOpenChange?.({ isOpen });\n }\n if (!isOpen) {\n setSize({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n useLockBodyScroll(isOpen);\n\n const contextValue = useMemo(() => {\n return { attachStep, removeStep };\n }, [attachStep, removeStep]);\n\n return (\n <TourContext.Provider value={contextValue}>\n <FloatingPortal>\n {isOpen ? (\n <SpotlightPopoverTourMask\n isTransitioning={isTransitioning || isScrolling}\n padding={theme.spacing[4]}\n size={delayedSize}\n />\n ) : null}\n </FloatingPortal>\n\n {steps.map((step) => {\n const isStepActive = currentStepData.name === step.name;\n const attachTo = isStepActive ? currentStepRef : undefined;\n // 1. only show popover if the tour is opened\n // 2. only show the popover if the step is active\n // 3. do not show the popover if we are transitioning between steps\n // this ensures popover suddenly doesn't jump to the next step,\n // instead it waits for the transition to finish\n const isPopoverVisible = isOpen && isStepActive && !isTransitioning;\n\n return (\n <TourPopover\n key={step.name}\n isTransitioning={delayedActiveStep !== activeStep}\n placement={step.placement}\n isOpen={isPopoverVisible}\n onOpenChange={onOpenChange}\n title={step.title}\n titleLeading={step.titleLeading}\n content={step?.content?.({\n activeStep: delayedActiveStep,\n goToPrevious,\n goToNext,\n goToStep,\n totalSteps,\n stopTour,\n })}\n footer={step?.footer?.({\n activeStep: delayedActiveStep,\n goToPrevious,\n goToNext,\n goToStep,\n totalSteps,\n stopTour,\n })}\n attachTo={attachTo as React.RefObject<HTMLElement> | undefined}\n />\n );\n })}\n\n {children}\n </TourContext.Provider>\n );\n};\n\nexport { SpotlightPopoverTour };\n"],"names":["asHTMLElement","el","SpotlightPopoverTour","_ref","_steps$activeStep","steps","activeStep","isOpen","onFinish","onOpenChange","onStepChange","children","_useTheme","useTheme","theme","_useState","useState","Map","_useState2","_slicedToArray","refIdMap","setRefIdMap","_useState3","x","y","height","width","_useState4","size","setSize","_useDelayedState","useDelayedState","transitionDelay","_useDelayedState2","delayedActiveStep","_useDelayedState3","_useDelayedState4","delayedSize","setDelayedSize","isTransitioning","useIsTransitioningBetweenSteps","_useState5","_useState6","isScrolling","setIsScrolling","currentStepRef","get","name","intersection","useIntersectionObserver","threshold","totalSteps","length","currentStepData","useMemo","goToStep","useCallback","step","goToNext","nextState","goToPrevious","stopTour","attachStep","id","ref","prev","set","removeStep","newMap","updateMaskSize","_steps$activeStep2","_ref$current","shouldSkipDelay","arguments","undefined","current","rect","getBoundingClientRect","scrollToStep","_steps$delayedActiveS","_ref$current2","isIntersecting","smoothScroll","behavior","block","inline","then","useIsomorphicLayoutEffect","scrollDelay","setTimeout","useLockBodyScroll","contextValue","_jsxs","TourContext","Provider","value","_jsx","FloatingPortal","SpotlightPopoverTourMask","padding","spacing","map","_step$content","_step$footer","isStepActive","attachTo","isPopoverVisible","TourPopover","placement","title","titleLeading","content","call","footer"],"mappings":"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"}
1
+ {"version":3,"file":"Tour.web.js","sources":["../../../../../../src/components/SpotlightPopoverTour/Tour.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable consistent-return */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { FloatingPortal } from '@floating-ui/react';\nimport { TourContext } from './TourContext';\nimport type { TourElement } from './TourContext';\nimport { TourPopover } from './TourPopover';\nimport {\n readBorderRadius,\n resolveSpotlightTarget,\n smoothScroll,\n useDelayedState,\n useIntersectionObserver,\n useIsTransitioningBetweenSteps,\n useLockBodyScroll,\n} from './utils';\nimport type { SpotlightPopoverTourMaskRect, SpotlightPopoverTourProps } from './types';\nimport { SpotlightPopoverTourMask } from './TourMask';\nimport { transitionDelay } from './tourTokens';\nimport { useTheme } from '~components/BladeProvider';\nimport { isBrowser } from '~utils';\nimport { useIsomorphicLayoutEffect } from '~utils/useIsomorphicLayoutEffect';\n\nconst asHTMLElement = (el: TourElement | null): HTMLElement | null => el as HTMLElement | null;\n\nconst SpotlightPopoverTour = ({\n steps,\n activeStep,\n isOpen,\n onFinish,\n onOpenChange,\n onStepChange,\n children,\n}: SpotlightPopoverTourProps): React.ReactElement => {\n const { theme } = useTheme();\n const [refIdMap, setRefIdMap] = useState(new Map<string, React.RefObject<TourElement>>());\n const [size, setSize] = useState<SpotlightPopoverTourMaskRect>({\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n });\n\n // delayed state is used to let the transition finish before reacting to the state changes\n const [delayedActiveStep] = useDelayedState(activeStep, transitionDelay);\n const [delayedSize, setDelayedSize] = useDelayedState(size, transitionDelay);\n // keep track of when we are transitioning between steps\n const isTransitioning = useIsTransitioningBetweenSteps(activeStep, transitionDelay);\n const [isScrolling, setIsScrolling] = useState(false);\n\n const currentStepRef = refIdMap.get(steps[activeStep]?.name);\n // Anchors taller than the viewport can never reach 50% visibility, so we also observe the\n // 0% crossing as a fallback threshold for those cases (see scrollToStep below).\n const intersection = useIntersectionObserver(\n (currentStepRef as React.RefObject<Element> | undefined)!,\n {\n threshold: [0, 0.5],\n },\n );\n // main step logic\n const totalSteps = steps.length;\n const currentStepData = useMemo(() => {\n return steps[activeStep];\n }, [activeStep, steps]);\n\n const goToStep = useCallback(\n (step: number) => {\n if (step < 0 || step >= steps.length) return;\n onStepChange?.(step);\n },\n [onStepChange, steps.length],\n );\n\n const goToNext = useCallback(() => {\n let nextState = activeStep + 1;\n if (nextState >= steps.length) {\n nextState = steps.length - 1;\n }\n onStepChange?.(nextState);\n }, [activeStep, onStepChange, steps.length]);\n\n const goToPrevious = useCallback(() => {\n let nextState = activeStep - 1;\n if (nextState < 0) {\n nextState = 0;\n }\n onStepChange?.(nextState);\n }, [activeStep, onStepChange]);\n\n const stopTour = useCallback(() => {\n onFinish?.();\n }, [onFinish]);\n\n const attachStep = useCallback((id: string, ref: React.RefObject<TourElement>) => {\n if (!ref) return;\n setRefIdMap((prev) => {\n return new Map(prev).set(id, ref);\n });\n }, []);\n\n const removeStep = useCallback((id: string) => {\n setRefIdMap((prev) => {\n const newMap = new Map(prev);\n newMap.delete(id);\n return newMap;\n });\n }, []);\n\n const updateMaskSize = useCallback(\n (shouldSkipDelay = false) => {\n const ref = refIdMap.get(steps[activeStep]?.name);\n const el = asHTMLElement(ref?.current ?? null);\n if (!el) return;\n\n // Trace the component the merchant sees, not the layout wrapper around it, so the\n // spotlight's padding stays even on all four sides.\n const target = resolveSpotlightTarget(el);\n const rect = target.getBoundingClientRect();\n const nextSize = {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n borderRadius: readBorderRadius(target),\n };\n\n setSize(nextSize);\n if (shouldSkipDelay) {\n setDelayedSize(nextSize);\n }\n },\n [activeStep, refIdMap, setDelayedSize, steps],\n );\n\n const scrollToStep = useCallback(() => {\n if (!isBrowser()) return;\n\n const ref = refIdMap.get(steps[delayedActiveStep]?.name);\n const el = asHTMLElement(ref?.current ?? null);\n if (!el) return;\n\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const isAnchorTallerThanViewport = el.getBoundingClientRect().height > viewportHeight;\n\n // An anchor taller than the viewport can never satisfy the 0.5 threshold, so require only\n // partial visibility (ratio > 0) for it instead of waiting on an unreachable isIntersecting.\n const isVisibleEnough = isAnchorTallerThanViewport\n ? (intersection?.intersectionRatio ?? 0) > 0\n : Boolean(intersection?.isIntersecting);\n if (isVisibleEnough) return;\n\n setIsScrolling(true);\n smoothScroll(el, {\n behavior: 'smooth',\n // Centering an anchor taller than the viewport pushes its edges (and the popover\n // attached near them) outside the viewport, so align to the top instead.\n block: isAnchorTallerThanViewport ? 'start' : 'center',\n inline: 'center',\n })\n .then(() => {\n // wait for the scroll to finish before updating the mask size\n // We also don't want to delay the size update since its already delayed by the scroll\n updateMaskSize(true);\n })\n .finally(() => {\n setIsScrolling(false);\n });\n }, [delayedActiveStep, refIdMap, steps, updateMaskSize, intersection]);\n\n // Update the size of the mask when the active step changes\n useIsomorphicLayoutEffect(() => {\n updateMaskSize();\n }, [activeStep, updateMaskSize]);\n\n // Scroll into view when the active step changes\n useIsomorphicLayoutEffect(() => {\n // We need to wait for the transition to finish before scrolling\n // Otherwise the browser sometimes interrupts the scroll\n const scrollDelay = 100;\n setTimeout(() => {\n if (!isOpen) return;\n if (isTransitioning) return;\n scrollToStep();\n }, scrollDelay);\n }, [isOpen, scrollToStep, isTransitioning]);\n\n // reset the mask size when the tour is closed\n useIsomorphicLayoutEffect(() => {\n if (isOpen) {\n // on initial mount, we don't want to delay the size update\n updateMaskSize(true);\n onOpenChange?.({ isOpen });\n }\n if (!isOpen) {\n setSize({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n borderRadius: 0,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n useLockBodyScroll(isOpen);\n\n const contextValue = useMemo(() => {\n return { attachStep, removeStep };\n }, [attachStep, removeStep]);\n\n return (\n <TourContext.Provider value={contextValue}>\n <FloatingPortal>\n {isOpen ? (\n <SpotlightPopoverTourMask\n isTransitioning={isTransitioning || isScrolling}\n padding={theme.spacing[4]}\n size={delayedSize}\n />\n ) : null}\n </FloatingPortal>\n\n {steps.map((step) => {\n const isStepActive = currentStepData.name === step.name;\n const attachTo = isStepActive ? currentStepRef : undefined;\n // 1. only show popover if the tour is opened\n // 2. only show the popover if the step is active\n // 3. do not show the popover if we are transitioning between steps\n // this ensures popover suddenly doesn't jump to the next step,\n // instead it waits for the transition to finish\n const isPopoverVisible = isOpen && isStepActive && !isTransitioning;\n\n return (\n <TourPopover\n key={step.name}\n isTransitioning={delayedActiveStep !== activeStep}\n placement={step.placement}\n isOpen={isPopoverVisible}\n onOpenChange={onOpenChange}\n title={step.title}\n titleLeading={step.titleLeading}\n content={step?.content?.({\n activeStep: delayedActiveStep,\n goToPrevious,\n goToNext,\n goToStep,\n totalSteps,\n stopTour,\n })}\n footer={step?.footer?.({\n activeStep: delayedActiveStep,\n goToPrevious,\n goToNext,\n goToStep,\n totalSteps,\n stopTour,\n })}\n attachTo={attachTo as React.RefObject<HTMLElement> | undefined}\n />\n );\n })}\n\n {children}\n </TourContext.Provider>\n );\n};\n\nexport { SpotlightPopoverTour };\n"],"names":["asHTMLElement","el","SpotlightPopoverTour","_ref","_steps$activeStep","steps","activeStep","isOpen","onFinish","onOpenChange","onStepChange","children","_useTheme","useTheme","theme","_useState","useState","Map","_useState2","_slicedToArray","refIdMap","setRefIdMap","_useState3","x","y","height","width","_useState4","size","setSize","_useDelayedState","useDelayedState","transitionDelay","_useDelayedState2","delayedActiveStep","_useDelayedState3","_useDelayedState4","delayedSize","setDelayedSize","isTransitioning","useIsTransitioningBetweenSteps","_useState5","_useState6","isScrolling","setIsScrolling","currentStepRef","get","name","intersection","useIntersectionObserver","threshold","totalSteps","length","currentStepData","useMemo","goToStep","useCallback","step","goToNext","nextState","goToPrevious","stopTour","attachStep","id","ref","prev","set","removeStep","newMap","updateMaskSize","_steps$activeStep2","_ref$current","shouldSkipDelay","arguments","undefined","current","target","resolveSpotlightTarget","rect","getBoundingClientRect","nextSize","borderRadius","readBorderRadius","scrollToStep","_steps$delayedActiveS","_ref$current2","_intersection$interse","isBrowser","viewportHeight","window","innerHeight","document","documentElement","clientHeight","isAnchorTallerThanViewport","isVisibleEnough","intersectionRatio","Boolean","isIntersecting","smoothScroll","behavior","block","inline","then","useIsomorphicLayoutEffect","scrollDelay","setTimeout","useLockBodyScroll","contextValue","_jsxs","TourContext","Provider","value","_jsx","FloatingPortal","SpotlightPopoverTourMask","padding","spacing","map","_step$content","_step$footer","isStepActive","attachTo","isPopoverVisible","TourPopover","placement","title","titleLeading","content","call","footer"],"mappings":";;;;;;;;;;;;;;;AAwBA,IAAMA,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,EAAsB,EAAA;AAAA,EAAA,OAAyBA,EAAE,CAAA;AAAA,CAAsB,CAAA;AAE9F,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAAC,IAAA,EAQ2B;AAAA,EAAA,IAAAC,iBAAA,CAAA;AAAA,EAAA,IAPnDC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,UAAU,GAAAH,IAAA,CAAVG,UAAU;IACVC,MAAM,GAAAJ,IAAA,CAANI,MAAM;IACNC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,YAAY,GAAAN,IAAA,CAAZM,YAAY;IACZC,YAAY,GAAAP,IAAA,CAAZO,YAAY;IACZC,QAAQ,GAAAR,IAAA,CAARQ,QAAQ,CAAA;AAER,EAAA,IAAAC,SAAA,GAAkBC,QAAQ,EAAE;IAApBC,KAAK,GAAAF,SAAA,CAALE,KAAK,CAAA;EACb,IAAAC,SAAA,GAAgCC,QAAQ,CAAC,IAAIC,GAAG,EAAwC,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAJ,SAAA,EAAA,CAAA,CAAA;AAAlFK,IAAAA,QAAQ,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,WAAW,GAAAH,UAAA,CAAA,CAAA,CAAA,CAAA;EAC5B,IAAAI,UAAA,GAAwBN,QAAQ,CAA+B;AAC7DO,MAAAA,CAAC,EAAE,CAAC;AACJC,MAAAA,CAAC,EAAE,CAAC;AACJC,MAAAA,MAAM,EAAE,CAAC;AACTC,MAAAA,KAAK,EAAE,CAAA;AACT,KAAC,CAAC;IAAAC,UAAA,GAAAR,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AALKM,IAAAA,IAAI,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,OAAO,GAAAF,UAAA,CAAA,CAAA,CAAA,CAAA;;AAOpB;AACA,EAAA,IAAAG,gBAAA,GAA4BC,eAAe,CAACzB,UAAU,EAAE0B,eAAe,CAAC;IAAAC,iBAAA,GAAAd,cAAA,CAAAW,gBAAA,EAAA,CAAA,CAAA;AAAjEI,IAAAA,iBAAiB,GAAAD,iBAAA,CAAA,CAAA,CAAA,CAAA;AACxB,EAAA,IAAAE,iBAAA,GAAsCJ,eAAe,CAACH,IAAI,EAAEI,eAAe,CAAC;IAAAI,iBAAA,GAAAjB,cAAA,CAAAgB,iBAAA,EAAA,CAAA,CAAA;AAArEE,IAAAA,WAAW,GAAAD,iBAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,cAAc,GAAAF,iBAAA,CAAA,CAAA,CAAA,CAAA;AAClC;AACA,EAAA,IAAMG,eAAe,GAAGC,8BAA8B,CAAClC,UAAU,EAAE0B,eAAe,CAAC,CAAA;AACnF,EAAA,IAAAS,UAAA,GAAsCzB,QAAQ,CAAC,KAAK,CAAC;IAAA0B,UAAA,GAAAvB,cAAA,CAAAsB,UAAA,EAAA,CAAA,CAAA;AAA9CE,IAAAA,WAAW,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,cAAc,GAAAF,UAAA,CAAA,CAAA,CAAA,CAAA;AAElC,EAAA,IAAMG,cAAc,GAAGzB,QAAQ,CAAC0B,GAAG,CAAA,CAAA1C,iBAAA,GAACC,KAAK,CAACC,UAAU,CAAC,MAAAF,IAAAA,IAAAA,iBAAA,uBAAjBA,iBAAA,CAAmB2C,IAAI,CAAC,CAAA;AAC5D;AACA;AACA,EAAA,IAAMC,YAAY,GAAGC,uBAAuB,CACzCJ,cAAc,EACf;AACEK,IAAAA,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,CAAA;AACpB,GACF,CAAC,CAAA;AACD;AACA,EAAA,IAAMC,UAAU,GAAG9C,KAAK,CAAC+C,MAAM,CAAA;AAC/B,EAAA,IAAMC,eAAe,GAAGC,OAAO,CAAC,YAAM;IACpC,OAAOjD,KAAK,CAACC,UAAU,CAAC,CAAA;AAC1B,GAAC,EAAE,CAACA,UAAU,EAAED,KAAK,CAAC,CAAC,CAAA;AAEvB,EAAA,IAAMkD,QAAQ,GAAGC,WAAW,CAC1B,UAACC,IAAY,EAAK;IAChB,IAAIA,IAAI,GAAG,CAAC,IAAIA,IAAI,IAAIpD,KAAK,CAAC+C,MAAM,EAAE,OAAA;AACtC1C,IAAAA,YAAY,aAAZA,YAAY,KAAA,KAAA,CAAA,IAAZA,YAAY,CAAG+C,IAAI,CAAC,CAAA;GACrB,EACD,CAAC/C,YAAY,EAAEL,KAAK,CAAC+C,MAAM,CAC7B,CAAC,CAAA;AAED,EAAA,IAAMM,QAAQ,GAAGF,WAAW,CAAC,YAAM;AACjC,IAAA,IAAIG,SAAS,GAAGrD,UAAU,GAAG,CAAC,CAAA;AAC9B,IAAA,IAAIqD,SAAS,IAAItD,KAAK,CAAC+C,MAAM,EAAE;AAC7BO,MAAAA,SAAS,GAAGtD,KAAK,CAAC+C,MAAM,GAAG,CAAC,CAAA;AAC9B,KAAA;AACA1C,IAAAA,YAAY,aAAZA,YAAY,KAAA,KAAA,CAAA,IAAZA,YAAY,CAAGiD,SAAS,CAAC,CAAA;GAC1B,EAAE,CAACrD,UAAU,EAAEI,YAAY,EAAEL,KAAK,CAAC+C,MAAM,CAAC,CAAC,CAAA;AAE5C,EAAA,IAAMQ,YAAY,GAAGJ,WAAW,CAAC,YAAM;AACrC,IAAA,IAAIG,SAAS,GAAGrD,UAAU,GAAG,CAAC,CAAA;IAC9B,IAAIqD,SAAS,GAAG,CAAC,EAAE;AACjBA,MAAAA,SAAS,GAAG,CAAC,CAAA;AACf,KAAA;AACAjD,IAAAA,YAAY,aAAZA,YAAY,KAAA,KAAA,CAAA,IAAZA,YAAY,CAAGiD,SAAS,CAAC,CAAA;AAC3B,GAAC,EAAE,CAACrD,UAAU,EAAEI,YAAY,CAAC,CAAC,CAAA;AAE9B,EAAA,IAAMmD,QAAQ,GAAGL,WAAW,CAAC,YAAM;AACjChD,IAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,EAAI,CAAA;AACd,GAAC,EAAE,CAACA,QAAQ,CAAC,CAAC,CAAA;EAEd,IAAMsD,UAAU,GAAGN,WAAW,CAAC,UAACO,EAAU,EAAEC,GAAiC,EAAK;IAChF,IAAI,CAACA,GAAG,EAAE,OAAA;IACV3C,WAAW,CAAC,UAAC4C,IAAI,EAAK;MACpB,OAAO,IAAIhD,GAAG,CAACgD,IAAI,CAAC,CAACC,GAAG,CAACH,EAAE,EAAEC,GAAG,CAAC,CAAA;AACnC,KAAC,CAAC,CAAA;GACH,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,IAAMG,UAAU,GAAGX,WAAW,CAAC,UAACO,EAAU,EAAK;IAC7C1C,WAAW,CAAC,UAAC4C,IAAI,EAAK;AACpB,MAAA,IAAMG,MAAM,GAAG,IAAInD,GAAG,CAACgD,IAAI,CAAC,CAAA;MAC5BG,MAAM,CAAA,QAAA,CAAO,CAACL,EAAE,CAAC,CAAA;AACjB,MAAA,OAAOK,MAAM,CAAA;AACf,KAAC,CAAC,CAAA;GACH,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,IAAMC,cAAc,GAAGb,WAAW,CAChC,YAA6B;IAAA,IAAAc,kBAAA,EAAAC,YAAA,CAAA;AAAA,IAAA,IAA5BC,eAAe,GAAAC,SAAA,CAAArB,MAAA,GAAA,CAAA,IAAAqB,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;AACtB,IAAA,IAAMT,GAAG,GAAG5C,QAAQ,CAAC0B,GAAG,CAAA,CAAAwB,kBAAA,GAACjE,KAAK,CAACC,UAAU,CAAC,MAAAgE,IAAAA,IAAAA,kBAAA,uBAAjBA,kBAAA,CAAmBvB,IAAI,CAAC,CAAA;AACjD,IAAA,IAAM9C,EAAE,GAAGD,aAAa,EAAAuE,YAAA,GAACP,GAAG,KAAHA,IAAAA,IAAAA,GAAG,uBAAHA,GAAG,CAAEW,OAAO,MAAAJ,IAAAA,IAAAA,YAAA,cAAAA,YAAA,GAAI,IAAI,CAAC,CAAA;IAC9C,IAAI,CAACtE,EAAE,EAAE,OAAA;;AAET;AACA;AACA,IAAA,IAAM2E,MAAM,GAAGC,sBAAsB,CAAC5E,EAAE,CAAC,CAAA;AACzC,IAAA,IAAM6E,IAAI,GAAGF,MAAM,CAACG,qBAAqB,EAAE,CAAA;AAC3C,IAAA,IAAMC,QAAQ,GAAG;MACfzD,CAAC,EAAEuD,IAAI,CAACvD,CAAC;MACTC,CAAC,EAAEsD,IAAI,CAACtD,CAAC;MACTE,KAAK,EAAEoD,IAAI,CAACpD,KAAK;MACjBD,MAAM,EAAEqD,IAAI,CAACrD,MAAM;MACnBwD,YAAY,EAAEC,gBAAgB,CAACN,MAAM,CAAA;KACtC,CAAA;IAED/C,OAAO,CAACmD,QAAQ,CAAC,CAAA;AACjB,IAAA,IAAIR,eAAe,EAAE;MACnBlC,cAAc,CAAC0C,QAAQ,CAAC,CAAA;AAC1B,KAAA;GACD,EACD,CAAC1E,UAAU,EAAEc,QAAQ,EAAEkB,cAAc,EAAEjC,KAAK,CAC9C,CAAC,CAAA;AAED,EAAA,IAAM8E,YAAY,GAAG3B,WAAW,CAAC,YAAM;AAAA,IAAA,IAAA4B,qBAAA,EAAAC,aAAA,EAAAC,qBAAA,CAAA;AACrC,IAAA,IAAI,CAACC,SAAS,EAAE,EAAE,OAAA;AAElB,IAAA,IAAMvB,GAAG,GAAG5C,QAAQ,CAAC0B,GAAG,CAAA,CAAAsC,qBAAA,GAAC/E,KAAK,CAAC6B,iBAAiB,CAAC,MAAAkD,IAAAA,IAAAA,qBAAA,uBAAxBA,qBAAA,CAA0BrC,IAAI,CAAC,CAAA;AACxD,IAAA,IAAM9C,EAAE,GAAGD,aAAa,EAAAqF,aAAA,GAACrB,GAAG,KAAHA,IAAAA,IAAAA,GAAG,uBAAHA,GAAG,CAAEW,OAAO,MAAAU,IAAAA,IAAAA,aAAA,cAAAA,aAAA,GAAI,IAAI,CAAC,CAAA;IAC9C,IAAI,CAACpF,EAAE,EAAE,OAAA;IAET,IAAMuF,cAAc,GAAGC,MAAM,CAACC,WAAW,IAAIC,QAAQ,CAACC,eAAe,CAACC,YAAY,CAAA;IAClF,IAAMC,0BAA0B,GAAG7F,EAAE,CAAC8E,qBAAqB,EAAE,CAACtD,MAAM,GAAG+D,cAAc,CAAA;;AAErF;AACA;AACA,IAAA,IAAMO,eAAe,GAAGD,0BAA0B,GAC9C,EAAAR,qBAAA,GAACtC,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZA,YAAY,CAAEgD,iBAAiB,MAAAV,IAAAA,IAAAA,qBAAA,KAAAA,KAAAA,CAAAA,GAAAA,qBAAA,GAAI,CAAC,IAAI,CAAC,GAC1CW,OAAO,CAACjD,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZA,YAAY,CAAEkD,cAAc,CAAC,CAAA;AACzC,IAAA,IAAIH,eAAe,EAAE,OAAA;IAErBnD,cAAc,CAAC,IAAI,CAAC,CAAA;IACpBuD,YAAY,CAAClG,EAAE,EAAE;AACfmG,MAAAA,QAAQ,EAAE,QAAQ;AAClB;AACA;AACAC,MAAAA,KAAK,EAAEP,0BAA0B,GAAG,OAAO,GAAG,QAAQ;AACtDQ,MAAAA,MAAM,EAAE,QAAA;AACV,KAAC,CAAC,CACCC,IAAI,CAAC,YAAM;AACV;AACA;MACAlC,cAAc,CAAC,IAAI,CAAC,CAAA;KACrB,CAAC,CACM,SAAA,CAAA,CAAC,YAAM;MACbzB,cAAc,CAAC,KAAK,CAAC,CAAA;AACvB,KAAC,CAAC,CAAA;AACN,GAAC,EAAE,CAACV,iBAAiB,EAAEd,QAAQ,EAAEf,KAAK,EAAEgE,cAAc,EAAErB,YAAY,CAAC,CAAC,CAAA;;AAEtE;AACAwD,EAAAA,yBAAyB,CAAC,YAAM;AAC9BnC,IAAAA,cAAc,EAAE,CAAA;AAClB,GAAC,EAAE,CAAC/D,UAAU,EAAE+D,cAAc,CAAC,CAAC,CAAA;;AAEhC;AACAmC,EAAAA,yBAAyB,CAAC,YAAM;AAC9B;AACA;IACA,IAAMC,WAAW,GAAG,GAAG,CAAA;AACvBC,IAAAA,UAAU,CAAC,YAAM;MACf,IAAI,CAACnG,MAAM,EAAE,OAAA;AACb,MAAA,IAAIgC,eAAe,EAAE,OAAA;AACrB4C,MAAAA,YAAY,EAAE,CAAA;KACf,EAAEsB,WAAW,CAAC,CAAA;GAChB,EAAE,CAAClG,MAAM,EAAE4E,YAAY,EAAE5C,eAAe,CAAC,CAAC,CAAA;;AAE3C;AACAiE,EAAAA,yBAAyB,CAAC,YAAM;AAC9B,IAAA,IAAIjG,MAAM,EAAE;AACV;MACA8D,cAAc,CAAC,IAAI,CAAC,CAAA;AACpB5D,MAAAA,YAAY,KAAZA,IAAAA,IAAAA,YAAY,KAAZA,KAAAA,CAAAA,IAAAA,YAAY,CAAG;AAAEF,QAAAA,MAAM,EAANA,MAAAA;AAAO,OAAC,CAAC,CAAA;AAC5B,KAAA;IACA,IAAI,CAACA,MAAM,EAAE;AACXsB,MAAAA,OAAO,CAAC;AACNN,QAAAA,CAAC,EAAE,CAAC;AACJC,QAAAA,CAAC,EAAE,CAAC;AACJE,QAAAA,KAAK,EAAE,CAAC;AACRD,QAAAA,MAAM,EAAE,CAAC;AACTwD,QAAAA,YAAY,EAAE,CAAA;AAChB,OAAC,CAAC,CAAA;AACJ,KAAA;AACA;AACF,GAAC,EAAE,CAAC1E,MAAM,CAAC,CAAC,CAAA;EAEZoG,iBAAiB,CAACpG,MAAM,CAAC,CAAA;AAEzB,EAAA,IAAMqG,YAAY,GAAGtD,OAAO,CAAC,YAAM;IACjC,OAAO;AAAEQ,MAAAA,UAAU,EAAVA,UAAU;AAAEK,MAAAA,UAAU,EAAVA,UAAAA;KAAY,CAAA;AACnC,GAAC,EAAE,CAACL,UAAU,EAAEK,UAAU,CAAC,CAAC,CAAA;AAE5B,EAAA,oBACE0C,IAAA,CAACC,WAAW,CAACC,QAAQ,EAAA;AAACC,IAAAA,KAAK,EAAEJ,YAAa;IAAAjG,QAAA,EAAA,cACxCsG,GAAA,CAACC,cAAc,EAAA;AAAAvG,MAAAA,QAAA,EACZJ,MAAM,gBACL0G,GAAA,CAACE,wBAAwB,EAAA;QACvB5E,eAAe,EAAEA,eAAe,IAAII,WAAY;AAChDyE,QAAAA,OAAO,EAAEtG,KAAK,CAACuG,OAAO,CAAC,CAAC,CAAE;AAC1BzF,QAAAA,IAAI,EAAES,WAAAA;AAAY,OACnB,CAAC,GACA,IAAA;KACU,CAAC,EAEhBhC,KAAK,CAACiH,GAAG,CAAC,UAAC7D,IAAI,EAAK;MAAA,IAAA8D,aAAA,EAAAC,YAAA,CAAA;MACnB,IAAMC,YAAY,GAAGpE,eAAe,CAACN,IAAI,KAAKU,IAAI,CAACV,IAAI,CAAA;AACvD,MAAA,IAAM2E,QAAQ,GAAGD,YAAY,GAAG5E,cAAc,GAAG6B,SAAS,CAAA;AAC1D;AACA;AACA;AACA;AACA;AACA,MAAA,IAAMiD,gBAAgB,GAAGpH,MAAM,IAAIkH,YAAY,IAAI,CAAClF,eAAe,CAAA;MAEnE,oBACE0E,GAAA,CAACW,WAAW,EAAA;QAEVrF,eAAe,EAAEL,iBAAiB,KAAK5B,UAAW;QAClDuH,SAAS,EAAEpE,IAAI,CAACoE,SAAU;AAC1BtH,QAAAA,MAAM,EAAEoH,gBAAiB;AACzBlH,QAAAA,YAAY,EAAEA,YAAa;QAC3BqH,KAAK,EAAErE,IAAI,CAACqE,KAAM;QAClBC,YAAY,EAAEtE,IAAI,CAACsE,YAAa;AAChCC,QAAAA,OAAO,EAAEvE,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA8D,KAAAA,CAAAA,IAAAA,CAAAA,aAAA,GAAJ9D,IAAI,CAAEuE,OAAO,MAAA,IAAA,IAAAT,aAAA,KAAbA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,aAAA,CAAAU,IAAA,CAAAxE,IAAI,EAAY;AACvBnD,UAAAA,UAAU,EAAE4B,iBAAiB;AAC7B0B,UAAAA,YAAY,EAAZA,YAAY;AACZF,UAAAA,QAAQ,EAARA,QAAQ;AACRH,UAAAA,QAAQ,EAARA,QAAQ;AACRJ,UAAAA,UAAU,EAAVA,UAAU;AACVU,UAAAA,QAAQ,EAARA,QAAAA;AACF,SAAC,CAAE;AACHqE,QAAAA,MAAM,EAAEzE,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA+D,KAAAA,CAAAA,IAAAA,CAAAA,YAAA,GAAJ/D,IAAI,CAAEyE,MAAM,MAAA,IAAA,IAAAV,YAAA,KAAZA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAA,CAAAS,IAAA,CAAAxE,IAAI,EAAW;AACrBnD,UAAAA,UAAU,EAAE4B,iBAAiB;AAC7B0B,UAAAA,YAAY,EAAZA,YAAY;AACZF,UAAAA,QAAQ,EAARA,QAAQ;AACRH,UAAAA,QAAQ,EAARA,QAAQ;AACRJ,UAAAA,UAAU,EAAVA,UAAU;AACVU,UAAAA,QAAQ,EAARA,QAAAA;AACF,SAAC,CAAE;AACH6D,QAAAA,QAAQ,EAAEA,QAAAA;OAvBLjE,EAAAA,IAAI,CAACV,IAwBX,CAAC,CAAA;KAEL,CAAC,EAEDpC,QAAQ,CAAA;AAAA,GACW,CAAC,CAAA;AAE3B;;;;"}
@@ -81,6 +81,7 @@ var absoluteFill = {
81
81
  zIndex: componentZIndices.tourMask
82
82
  };
83
83
  var _SpotlightPopoverTourMask = function _SpotlightPopoverTourMask(_ref4) {
84
+ var _size$borderRadius;
84
85
  var padding = _ref4.padding,
85
86
  size = _ref4.size,
86
87
  isTransitioning = _ref4.isTransitioning;
@@ -94,7 +95,17 @@ var _SpotlightPopoverTourMask = function _SpotlightPopoverTourMask(_ref4) {
94
95
  var x = size.x - (width - size.width) / 2;
95
96
  var y = size.y - (height - size.height) / 2;
96
97
  var borderWidth = theme.spacing[1];
97
- var borderRadius = theme.spacing[2];
98
+ /**
99
+ * The spotlight takes the corner radius of the component it highlights, so it reads as a
100
+ * halo on that element rather than as a box of its own. When the step highlights content
101
+ * that draws no corner at all (plain text), there is nothing to inherit — we agree with
102
+ * the popover's radius instead of squaring off to a hard corner.
103
+ *
104
+ * Note this is the target's radius verbatim, not `radius + padding / 2`: matching the
105
+ * component is the intended rule, and the small corner offset that leaves is deliberate.
106
+ */
107
+ var spotlightRadius = (_size$borderRadius = size.borderRadius) !== null && _size$borderRadius !== void 0 ? _size$borderRadius : 0;
108
+ var borderRadius = spotlightRadius > 0 ? spotlightRadius : theme.border.radius.large;
98
109
  var isSizeZero = size.width === 0 || size.height === 0;
99
110
  return /*#__PURE__*/jsxs("svg", _objectSpread(_objectSpread({
100
111
  style: absoluteFill,
@@ -111,8 +122,8 @@ var _SpotlightPopoverTourMask = function _SpotlightPopoverTourMask(_ref4) {
111
122
  height: height - borderWidth,
112
123
  stroke: theme.colors.surface.background.primary.intense,
113
124
  strokeWidth: makeSpace(borderWidth),
114
- rx: borderRadius - 1,
115
- ry: borderRadius - 1,
125
+ rx: borderRadius - borderWidth / 2,
126
+ ry: borderRadius - borderWidth / 2,
116
127
  fill: "transparent",
117
128
  opacity: isSizeZero ? 0 : 1
118
129
  }), /*#__PURE__*/jsxs("mask", {
@@ -1 +1 @@
1
- {"version":3,"file":"TourMask.web.js","sources":["../../../../../../src/components/SpotlightPopoverTour/TourMask.web.tsx"],"sourcesContent":["/* eslint-disable react/jsx-no-useless-fragment */\nimport React from 'react';\nimport type { FlattenSimpleInterpolation } from 'styled-components';\nimport styled, { css, keyframes } from 'styled-components';\nimport usePresence from 'use-presence';\nimport type { SpotlightPopoverTourMaskRect } from './types';\nimport { useTheme } from '~components/BladeProvider';\nimport { useWindowSize } from '~utils/useWindowSize';\nimport { makeSpace } from '~utils';\nimport { makeMotionTime } from '~utils/makeMotionTime';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { componentZIndices } from '~utils/componentZIndices';\n\nconst scaleIn = keyframes`\n from {\n fill-opacity: 0;\n }\n to {\n fill-opacity: 1;\n }\n`;\nconst fadeOut = keyframes`\n from {\n fill-opacity: 1;\n }\n to {\n fill-opacity: 0;\n }\n`;\n\nconst pulsingAnimation = keyframes`\n 0% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst AnimatedFade = styled.rect<{ animationType: FlattenSimpleInterpolation | null }>(\n ({ animationType }) =>\n animationType === null\n ? ''\n : css`\n ${animationType}\n `,\n);\n\nconst StyledPlusing = styled.rect<{ animationType: FlattenSimpleInterpolation | null }>(\n ({ animationType }) => {\n return animationType === null\n ? ''\n : css`\n ${animationType}\n `;\n },\n);\n\ntype FadeRectProps = React.ComponentProps<'rect'> & {\n show: boolean;\n};\nconst FadeRect = React.memo(\n ({ show, children, ...rest }: FadeRectProps): React.ReactElement => {\n const { theme } = useTheme();\n\n const duration = theme.motion.duration.gentle;\n const enter = css`\n animation: ${scaleIn} ${makeMotionTime(duration)}\n ${(theme.motion.easing.entrance as unknown) as string};\n animation-fill-mode: forwards;\n `;\n\n const exit = css`\n animation: ${fadeOut} ${makeMotionTime(duration)}\n ${(theme.motion.easing.exit as unknown) as string};\n animation-fill-mode: forwards;\n `;\n\n const { isVisible } = usePresence(Boolean(show), {\n transitionDuration: duration,\n initialEnter: false,\n });\n\n return (\n // @ts-expect-error styled compoennt types are different from react types\n <AnimatedFade animationType={isVisible ? enter : exit} {...rest}>\n {children}\n </AnimatedFade>\n );\n },\n);\n\nconst PulsingRect = React.memo(\n (props: React.ComponentProps<'rect'>): React.ReactElement => {\n const pulsing = css`\n animation: ${pulsingAnimation} 2s;\n animation-iteration-count: infinite;\n animation-direction: alternate;\n `;\n\n return (\n // @ts-expect-error styled compoennt types are different from react types\n <StyledPlusing animationType={pulsing} {...props} />\n );\n },\n);\n\ntype SpotlightPopoverTourMaskProps = {\n padding: number;\n size: SpotlightPopoverTourMaskRect;\n isTransitioning: boolean;\n};\n\nconst absoluteFill = {\n position: 'fixed',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: componentZIndices.tourMask,\n} as const;\n\nconst _SpotlightPopoverTourMask = ({\n padding,\n size,\n isTransitioning,\n}: SpotlightPopoverTourMaskProps): React.ReactElement => {\n const { theme } = useTheme();\n const { width: windowWidth, height: windowHeight } = useWindowSize();\n\n const width = size.width + padding;\n const height = size.height + padding;\n const x = size.x - (width - size.width) / 2;\n const y = size.y - (height - size.height) / 2;\n\n const borderWidth = theme.spacing[1];\n const borderRadius = theme.spacing[2];\n\n const isSizeZero = size.width === 0 || size.height === 0;\n\n return (\n <svg\n style={absoluteFill}\n viewBox={`0 0 ${windowWidth} ${windowHeight}`}\n fill=\"none\"\n stroke=\"none\"\n {...metaAttribute({ name: MetaConstants.TourMask })}\n >\n <PulsingRect\n x={x + borderWidth / 2}\n y={y + borderWidth / 2}\n width={width - borderWidth}\n height={height - borderWidth}\n stroke={theme.colors.surface.background.primary.intense}\n strokeWidth={makeSpace(borderWidth)}\n rx={borderRadius - 1}\n ry={borderRadius - 1}\n fill=\"transparent\"\n opacity={isSizeZero ? 0 : 1}\n />\n\n <mask id=\"tour-mask\" x={0} y={0} height=\"100%\" width=\"100%\" stroke=\"none\">\n <rect height=\"100%\" width=\"100%\" fill=\"#fff\" />\n {!isSizeZero && (\n <FadeRect\n show={!isTransitioning}\n x={x}\n y={y}\n width={width}\n height={height}\n rx={borderRadius}\n ry={borderRadius}\n fill=\"#000\"\n />\n )}\n </mask>\n <rect\n height=\"100%\"\n width=\"100%\"\n mask=\"url(#tour-mask)\"\n fill={theme.colors.overlay.background.subtle}\n />\n </svg>\n );\n};\n\nconst SpotlightPopoverTourMask = assignWithoutSideEffects(React.memo(_SpotlightPopoverTourMask), {\n displayName: 'TourMask',\n});\nexport { SpotlightPopoverTourMask };\n"],"names":["scaleIn","keyframes","fadeOut","pulsingAnimation","AnimatedFade","styled","rect","withConfig","displayName","componentId","_ref","animationType","css","StyledPlusing","_ref2","FadeRect","React","memo","_ref3","show","children","rest","_objectWithoutProperties","_excluded","_useTheme","useTheme","theme","duration","motion","gentle","enter","makeMotionTime","easing","entrance","exit","_usePresence","usePresence","Boolean","transitionDuration","initialEnter","isVisible","_jsx","_objectSpread","PulsingRect","props","pulsing","absoluteFill","position","top","left","bottom","right","zIndex","componentZIndices","tourMask","_SpotlightPopoverTourMask","_ref4","padding","size","isTransitioning","_useTheme2","_useWindowSize","useWindowSize","windowWidth","width","windowHeight","height","x","y","borderWidth","spacing","borderRadius","isSizeZero","_jsxs","style","viewBox","concat","fill","stroke","metaAttribute","name","MetaConstants","TourMask","colors","surface","background","primary","intense","strokeWidth","makeSpace","rx","ry","opacity","id","mask","overlay","subtle","SpotlightPopoverTourMask","assignWithoutSideEffects"],"mappings":"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"}
1
+ {"version":3,"file":"TourMask.web.js","sources":["../../../../../../src/components/SpotlightPopoverTour/TourMask.web.tsx"],"sourcesContent":["/* eslint-disable react/jsx-no-useless-fragment */\nimport React from 'react';\nimport type { FlattenSimpleInterpolation } from 'styled-components';\nimport styled, { css, keyframes } from 'styled-components';\nimport usePresence from 'use-presence';\nimport type { SpotlightPopoverTourMaskRect } from './types';\nimport { useTheme } from '~components/BladeProvider';\nimport { useWindowSize } from '~utils/useWindowSize';\nimport { makeSpace } from '~utils';\nimport { makeMotionTime } from '~utils/makeMotionTime';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { componentZIndices } from '~utils/componentZIndices';\n\nconst scaleIn = keyframes`\n from {\n fill-opacity: 0;\n }\n to {\n fill-opacity: 1;\n }\n`;\nconst fadeOut = keyframes`\n from {\n fill-opacity: 1;\n }\n to {\n fill-opacity: 0;\n }\n`;\n\nconst pulsingAnimation = keyframes`\n 0% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst AnimatedFade = styled.rect<{ animationType: FlattenSimpleInterpolation | null }>(\n ({ animationType }) =>\n animationType === null\n ? ''\n : css`\n ${animationType}\n `,\n);\n\nconst StyledPlusing = styled.rect<{ animationType: FlattenSimpleInterpolation | null }>(\n ({ animationType }) => {\n return animationType === null\n ? ''\n : css`\n ${animationType}\n `;\n },\n);\n\ntype FadeRectProps = React.ComponentProps<'rect'> & {\n show: boolean;\n};\nconst FadeRect = React.memo(\n ({ show, children, ...rest }: FadeRectProps): React.ReactElement => {\n const { theme } = useTheme();\n\n const duration = theme.motion.duration.gentle;\n const enter = css`\n animation: ${scaleIn} ${makeMotionTime(duration)}\n ${(theme.motion.easing.entrance as unknown) as string};\n animation-fill-mode: forwards;\n `;\n\n const exit = css`\n animation: ${fadeOut} ${makeMotionTime(duration)}\n ${(theme.motion.easing.exit as unknown) as string};\n animation-fill-mode: forwards;\n `;\n\n const { isVisible } = usePresence(Boolean(show), {\n transitionDuration: duration,\n initialEnter: false,\n });\n\n return (\n // @ts-expect-error styled compoennt types are different from react types\n <AnimatedFade animationType={isVisible ? enter : exit} {...rest}>\n {children}\n </AnimatedFade>\n );\n },\n);\n\nconst PulsingRect = React.memo(\n (props: React.ComponentProps<'rect'>): React.ReactElement => {\n const pulsing = css`\n animation: ${pulsingAnimation} 2s;\n animation-iteration-count: infinite;\n animation-direction: alternate;\n `;\n\n return (\n // @ts-expect-error styled compoennt types are different from react types\n <StyledPlusing animationType={pulsing} {...props} />\n );\n },\n);\n\ntype SpotlightPopoverTourMaskProps = {\n padding: number;\n size: SpotlightPopoverTourMaskRect;\n isTransitioning: boolean;\n};\n\nconst absoluteFill = {\n position: 'fixed',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n zIndex: componentZIndices.tourMask,\n} as const;\n\nconst _SpotlightPopoverTourMask = ({\n padding,\n size,\n isTransitioning,\n}: SpotlightPopoverTourMaskProps): React.ReactElement => {\n const { theme } = useTheme();\n const { width: windowWidth, height: windowHeight } = useWindowSize();\n\n const width = size.width + padding;\n const height = size.height + padding;\n const x = size.x - (width - size.width) / 2;\n const y = size.y - (height - size.height) / 2;\n\n const borderWidth = theme.spacing[1];\n /**\n * The spotlight takes the corner radius of the component it highlights, so it reads as a\n * halo on that element rather than as a box of its own. When the step highlights content\n * that draws no corner at all (plain text), there is nothing to inherit — we agree with\n * the popover's radius instead of squaring off to a hard corner.\n *\n * Note this is the target's radius verbatim, not `radius + padding / 2`: matching the\n * component is the intended rule, and the small corner offset that leaves is deliberate.\n */\n const spotlightRadius = size.borderRadius ?? 0;\n const borderRadius = spotlightRadius > 0 ? spotlightRadius : theme.border.radius.large;\n\n const isSizeZero = size.width === 0 || size.height === 0;\n\n return (\n <svg\n style={absoluteFill}\n viewBox={`0 0 ${windowWidth} ${windowHeight}`}\n fill=\"none\"\n stroke=\"none\"\n {...metaAttribute({ name: MetaConstants.TourMask })}\n >\n <PulsingRect\n x={x + borderWidth / 2}\n y={y + borderWidth / 2}\n width={width - borderWidth}\n height={height - borderWidth}\n stroke={theme.colors.surface.background.primary.intense}\n strokeWidth={makeSpace(borderWidth)}\n rx={borderRadius - borderWidth / 2}\n ry={borderRadius - borderWidth / 2}\n fill=\"transparent\"\n opacity={isSizeZero ? 0 : 1}\n />\n\n <mask id=\"tour-mask\" x={0} y={0} height=\"100%\" width=\"100%\" stroke=\"none\">\n <rect height=\"100%\" width=\"100%\" fill=\"#fff\" />\n {!isSizeZero && (\n <FadeRect\n show={!isTransitioning}\n x={x}\n y={y}\n width={width}\n height={height}\n rx={borderRadius}\n ry={borderRadius}\n fill=\"#000\"\n />\n )}\n </mask>\n <rect\n height=\"100%\"\n width=\"100%\"\n mask=\"url(#tour-mask)\"\n fill={theme.colors.overlay.background.subtle}\n />\n </svg>\n );\n};\n\nconst SpotlightPopoverTourMask = assignWithoutSideEffects(React.memo(_SpotlightPopoverTourMask), {\n displayName: 'TourMask',\n});\nexport { SpotlightPopoverTourMask };\n"],"names":["scaleIn","keyframes","fadeOut","pulsingAnimation","AnimatedFade","styled","rect","withConfig","displayName","componentId","_ref","animationType","css","StyledPlusing","_ref2","FadeRect","React","memo","_ref3","show","children","rest","_objectWithoutProperties","_excluded","_useTheme","useTheme","theme","duration","motion","gentle","enter","makeMotionTime","easing","entrance","exit","_usePresence","usePresence","Boolean","transitionDuration","initialEnter","isVisible","_jsx","_objectSpread","PulsingRect","props","pulsing","absoluteFill","position","top","left","bottom","right","zIndex","componentZIndices","tourMask","_SpotlightPopoverTourMask","_ref4","_size$borderRadius","padding","size","isTransitioning","_useTheme2","_useWindowSize","useWindowSize","windowWidth","width","windowHeight","height","x","y","borderWidth","spacing","spotlightRadius","borderRadius","border","radius","large","isSizeZero","_jsxs","style","viewBox","concat","fill","stroke","metaAttribute","name","MetaConstants","TourMask","colors","surface","background","primary","intense","strokeWidth","makeSpace","rx","ry","opacity","id","mask","overlay","subtle","SpotlightPopoverTourMask","assignWithoutSideEffects"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { PopoverContent } from '../Popover/PopoverContent.js';
6
6
  import { ARROW_HEIGHT, ARROW_WIDTH } from '../Popover/constants.js';
7
7
  import { PopoverContext } from '../Popover/PopoverContext.js';
8
8
  import { transitionDelay } from './tourTokens.js';
9
+ import { resolveSpotlightTarget } from './utils.js';
9
10
  import '../BladeProvider/index.js';
10
11
  import '../Box/BaseBox/index.js';
11
12
  import '../../utils/metaAttribute/index.js';
@@ -138,8 +139,13 @@ var TourPopover = function TourPopover(_ref) {
138
139
  React__default.useLayoutEffect(function () {
139
140
  window.setTimeout(function () {
140
141
  if (!attachTo) return;
141
- refs.setReference(attachTo.current);
142
- refs.setPositionReference(attachTo.current);
142
+ var element = attachTo.current;
143
+ refs.setReference(element);
144
+ // The spotlight traces the painted component rather than the layout wrapper the step's
145
+ // ref happens to sit on, so `GAP` has to be measured from that same rectangle. Anchoring
146
+ // to the wrapper instead leaks its overhang — a wrapper stretched by a flex row is taller
147
+ // than the card inside it — into the gap between the arrow tip and the spotlight.
148
+ refs.setPositionReference(element ? resolveSpotlightTarget(element) : null);
143
149
  });
144
150
  }, [attachTo, refs, isOpen]);
145
151
  return /*#__PURE__*/jsx(PopoverContext.Provider, {
@@ -171,12 +177,25 @@ var TourPopover = function TourPopover(_ref) {
171
177
  titleLeading: titleLeading,
172
178
  footer: footer,
173
179
  style: styles,
174
- arrow: /*#__PURE__*/jsx(PopupArrow, {
180
+ arrow:
181
+ /*#__PURE__*/
182
+ // Kept at parity with Popover's arrow. The stroke matters beyond the arrow's
183
+ // own outline: the popup's surface carries a 1px inset hairline on every edge,
184
+ // including the one the arrow sits on, so without a stroke that hairline is
185
+ // drawn straight across the join and the arrow reads as a separate shape. A
186
+ // non-zero strokeWidth also offsets the arrow onto that edge, letting its fill
187
+ // cover the hairline underneath it.
188
+ jsx(PopupArrow, {
175
189
  ref: arrowRef,
176
190
  context: context,
177
191
  width: ARROW_WIDTH,
178
192
  height: ARROW_HEIGHT,
179
- fillColor: theme.colors.popup.background.gray.subtle
193
+ fillColor: theme.colors.popup.background.gray.moderate,
194
+ strokeColor: theme.colors.popup.border.gray.moderate,
195
+ strokeWidth: theme.border.width.thin,
196
+ style: {
197
+ transform: 'translateY(-1px)'
198
+ }
180
199
  }),
181
200
  children: content
182
201
  })
@@ -1 +1 @@
1
- {"version":3,"file":"TourPopover.web.js","sources":["../../../../../../src/components/SpotlightPopoverTour/TourPopover.web.tsx"],"sourcesContent":["/* eslint-disable react/jsx-no-useless-fragment */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\nimport {\n shift,\n FloatingPortal,\n arrow,\n flip,\n offset,\n useFloating,\n useInteractions,\n useRole,\n useTransitionStyles,\n autoUpdate,\n useClick,\n FloatingFocusManager,\n} from '@floating-ui/react';\nimport React from 'react';\nimport { PopoverContent } from '../Popover/PopoverContent';\nimport { ARROW_HEIGHT, ARROW_WIDTH } from '../Popover/constants';\nimport { PopoverContext } from '../Popover/PopoverContext';\nimport { transitionDelay } from './tourTokens';\nimport { useTheme } from '~components/BladeProvider';\nimport BaseBox from '~components/Box/BaseBox';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { size } from '~tokens/global';\nimport { useControllableState } from '~utils/useControllable';\nimport { PopupArrow } from '~components/PopupArrow';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { useId } from '~utils/useId';\nimport { getFloatingPlacementParts } from '~utils/getFloatingPlacementParts';\nimport type { PopoverProps } from '~components/Popover';\nimport { componentZIndices } from '~utils/componentZIndices';\n\ntype TourPopoverProps = Omit<PopoverProps, 'children' | 'initialFocusRef'> & {\n attachTo: React.RefObject<HTMLElement> | undefined;\n isTransitioning: boolean;\n};\n\n// TODO: Refactor out Popover/FloatingUI logic to a reusable hook/component later on\nconst TourPopover = ({\n attachTo,\n content,\n title,\n titleLeading,\n footer,\n placement = 'top',\n onOpenChange,\n zIndex = componentZIndices.popover,\n isOpen,\n defaultIsOpen,\n isTransitioning,\n}: TourPopoverProps): React.ReactElement => {\n const { theme } = useTheme();\n const defaultInitialFocusRef = React.useRef<HTMLButtonElement>(null);\n const arrowRef = React.useRef<SVGSVGElement>(null);\n const titleId = useId('popover-title');\n\n const GAP = theme.spacing[4];\n const [side] = getFloatingPlacementParts(placement);\n const isHorizontal = side === 'left' || side === 'right';\n const isOppositeAxis = side === 'right' || side === 'bottom';\n\n const [controllableIsOpen, controllableSetIsOpen] = useControllableState({\n value: isOpen,\n defaultValue: defaultIsOpen,\n onChange: (isOpen) => onOpenChange?.({ isOpen }),\n });\n\n const { refs, floatingStyles, context, placement: computedPlacement } = useFloating({\n open: controllableIsOpen,\n onOpenChange: (isOpen) => controllableSetIsOpen(() => isOpen),\n placement,\n strategy: 'fixed',\n middleware: [\n shift({ crossAxis: false, padding: GAP }),\n flip({ padding: GAP, fallbackAxisSideDirection: 'end' }),\n offset(GAP + ARROW_HEIGHT),\n arrow({\n element: arrowRef,\n padding: isHorizontal ? GAP + ARROW_HEIGHT : ARROW_WIDTH,\n }),\n ],\n transform: true,\n whileElementsMounted: autoUpdate,\n });\n\n const close = React.useCallback(() => {\n controllableSetIsOpen(() => false);\n }, [controllableSetIsOpen]);\n\n // we need to animate from the offset of the computed placement\n // because placement can change dynamically based on available space\n const [computedSide] = getFloatingPlacementParts(computedPlacement);\n const computedIsHorizontal = computedSide === 'left' || computedSide === 'right';\n const animationOffset = isOppositeAxis ? -size[4] : size[4];\n\n const { isMounted, styles } = useTransitionStyles(context, {\n duration: {\n open: transitionDelay,\n close: theme.motion.duration.xquick,\n },\n initial: {\n opacity: 0,\n transform: `translate${computedIsHorizontal ? 'X' : 'Y'}(${animationOffset}px)`,\n },\n });\n\n // remove click handler if popover is controlled\n const isControlled = isOpen !== undefined;\n const click = useClick(context, { enabled: !isControlled });\n const role = useRole(context);\n\n const { getFloatingProps } = useInteractions([click, role]);\n\n const contextValue = React.useMemo(() => {\n return {\n close,\n defaultInitialFocusRef,\n titleId,\n openInteraction: 'click' as const,\n };\n }, [close, titleId]);\n\n // https://github.com/floating-ui/floating-ui/discussions/2352#discussioncomment-6044834\n React.useLayoutEffect(() => {\n window.setTimeout(() => {\n if (!attachTo) return;\n refs.setReference(attachTo.current);\n refs.setPositionReference(attachTo.current);\n });\n }, [attachTo, refs, isOpen]);\n\n return (\n <PopoverContext.Provider value={contextValue}>\n <FloatingPortal>\n <FloatingFocusManager\n // TODO: check if isTransitioning is enough since scrolling can take longer\n disabled={isOpen === false || !isMounted || isTransitioning}\n initialFocus={defaultInitialFocusRef}\n context={context}\n modal={true}\n guards={true}\n >\n {isMounted ? (\n <BaseBox\n ref={refs.setFloating}\n style={{ ...floatingStyles, pointerEvents: isMounted ? 'auto' : 'none' }}\n // TODO: Tokenize zIndex values\n zIndex={zIndex}\n {...getFloatingProps()}\n {...metaAttribute({ name: MetaConstants.TourPopover })}\n {...makeAccessible({ labelledBy: titleId })}\n >\n <PopoverContent\n title={title}\n titleLeading={titleLeading}\n footer={footer}\n style={styles}\n arrow={\n <PopupArrow\n ref={arrowRef}\n context={context}\n width={ARROW_WIDTH}\n height={ARROW_HEIGHT}\n fillColor={theme.colors.popup.background.gray.subtle}\n />\n }\n >\n {content}\n </PopoverContent>\n </BaseBox>\n ) : (\n <></>\n )}\n </FloatingFocusManager>\n </FloatingPortal>\n </PopoverContext.Provider>\n );\n};\n\nexport { TourPopover };\n"],"names":["TourPopover","_ref","attachTo","content","title","titleLeading","footer","_ref$placement","placement","onOpenChange","_ref$zIndex","zIndex","componentZIndices","popover","isOpen","defaultIsOpen","isTransitioning","_useTheme","useTheme","theme","defaultInitialFocusRef","React","useRef","arrowRef","titleId","useId","GAP","spacing","_getFloatingPlacement","getFloatingPlacementParts","_getFloatingPlacement2","_slicedToArray","side","isHorizontal","isOppositeAxis","_useControllableState","useControllableState","value","defaultValue","onChange","_useControllableState2","controllableIsOpen","controllableSetIsOpen","_useFloating","useFloating","open","strategy","middleware","shift","crossAxis","padding","flip","fallbackAxisSideDirection","offset","ARROW_HEIGHT","arrow","element","ARROW_WIDTH","transform","whileElementsMounted","autoUpdate","refs","floatingStyles","context","computedPlacement","close","useCallback","_getFloatingPlacement3","_getFloatingPlacement4","computedSide","computedIsHorizontal","animationOffset","size","_useTransitionStyles","useTransitionStyles","duration","transitionDelay","motion","xquick","initial","opacity","concat","isMounted","styles","isControlled","undefined","click","useClick","enabled","role","useRole","_useInteractions","useInteractions","getFloatingProps","contextValue","useMemo","openInteraction","useLayoutEffect","window","setTimeout","setReference","current","setPositionReference","_jsx","PopoverContext","Provider","children","FloatingPortal","FloatingFocusManager","disabled","initialFocus","modal","guards","BaseBox","_objectSpread","ref","setFloating","style","pointerEvents","metaAttribute","name","MetaConstants","makeAccessible","labelledBy","PopoverContent","PopupArrow","width","height","fillColor","colors","popup","background","gray","subtle","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"TourPopover.web.js","sources":["../../../../../../src/components/SpotlightPopoverTour/TourPopover.web.tsx"],"sourcesContent":["/* eslint-disable react/jsx-no-useless-fragment */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\nimport {\n shift,\n FloatingPortal,\n arrow,\n flip,\n offset,\n useFloating,\n useInteractions,\n useRole,\n useTransitionStyles,\n autoUpdate,\n useClick,\n FloatingFocusManager,\n} from '@floating-ui/react';\nimport React from 'react';\nimport { PopoverContent } from '../Popover/PopoverContent';\nimport { ARROW_HEIGHT, ARROW_WIDTH } from '../Popover/constants';\nimport { PopoverContext } from '../Popover/PopoverContext';\nimport { transitionDelay } from './tourTokens';\nimport { resolveSpotlightTarget } from './utils';\nimport { useTheme } from '~components/BladeProvider';\nimport BaseBox from '~components/Box/BaseBox';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { size } from '~tokens/global';\nimport { useControllableState } from '~utils/useControllable';\nimport { PopupArrow } from '~components/PopupArrow';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { useId } from '~utils/useId';\nimport { getFloatingPlacementParts } from '~utils/getFloatingPlacementParts';\nimport type { PopoverProps } from '~components/Popover';\nimport { componentZIndices } from '~utils/componentZIndices';\n\ntype TourPopoverProps = Omit<PopoverProps, 'children' | 'initialFocusRef'> & {\n attachTo: React.RefObject<HTMLElement> | undefined;\n isTransitioning: boolean;\n};\n\n// TODO: Refactor out Popover/FloatingUI logic to a reusable hook/component later on\nconst TourPopover = ({\n attachTo,\n content,\n title,\n titleLeading,\n footer,\n placement = 'top',\n onOpenChange,\n zIndex = componentZIndices.popover,\n isOpen,\n defaultIsOpen,\n isTransitioning,\n}: TourPopoverProps): React.ReactElement => {\n const { theme } = useTheme();\n const defaultInitialFocusRef = React.useRef<HTMLButtonElement>(null);\n const arrowRef = React.useRef<SVGSVGElement>(null);\n const titleId = useId('popover-title');\n\n const GAP = theme.spacing[4];\n const [side] = getFloatingPlacementParts(placement);\n const isHorizontal = side === 'left' || side === 'right';\n const isOppositeAxis = side === 'right' || side === 'bottom';\n\n const [controllableIsOpen, controllableSetIsOpen] = useControllableState({\n value: isOpen,\n defaultValue: defaultIsOpen,\n onChange: (isOpen) => onOpenChange?.({ isOpen }),\n });\n\n const { refs, floatingStyles, context, placement: computedPlacement } = useFloating({\n open: controllableIsOpen,\n onOpenChange: (isOpen) => controllableSetIsOpen(() => isOpen),\n placement,\n strategy: 'fixed',\n middleware: [\n shift({ crossAxis: false, padding: GAP }),\n flip({ padding: GAP, fallbackAxisSideDirection: 'end' }),\n offset(GAP + ARROW_HEIGHT),\n arrow({\n element: arrowRef,\n padding: isHorizontal ? GAP + ARROW_HEIGHT : ARROW_WIDTH,\n }),\n ],\n transform: true,\n whileElementsMounted: autoUpdate,\n });\n\n const close = React.useCallback(() => {\n controllableSetIsOpen(() => false);\n }, [controllableSetIsOpen]);\n\n // we need to animate from the offset of the computed placement\n // because placement can change dynamically based on available space\n const [computedSide] = getFloatingPlacementParts(computedPlacement);\n const computedIsHorizontal = computedSide === 'left' || computedSide === 'right';\n const animationOffset = isOppositeAxis ? -size[4] : size[4];\n\n const { isMounted, styles } = useTransitionStyles(context, {\n duration: {\n open: transitionDelay,\n close: theme.motion.duration.xquick,\n },\n initial: {\n opacity: 0,\n transform: `translate${computedIsHorizontal ? 'X' : 'Y'}(${animationOffset}px)`,\n },\n });\n\n // remove click handler if popover is controlled\n const isControlled = isOpen !== undefined;\n const click = useClick(context, { enabled: !isControlled });\n const role = useRole(context);\n\n const { getFloatingProps } = useInteractions([click, role]);\n\n const contextValue = React.useMemo(() => {\n return {\n close,\n defaultInitialFocusRef,\n titleId,\n openInteraction: 'click' as const,\n };\n }, [close, titleId]);\n\n // https://github.com/floating-ui/floating-ui/discussions/2352#discussioncomment-6044834\n React.useLayoutEffect(() => {\n window.setTimeout(() => {\n if (!attachTo) return;\n const element = attachTo.current;\n refs.setReference(element);\n // The spotlight traces the painted component rather than the layout wrapper the step's\n // ref happens to sit on, so `GAP` has to be measured from that same rectangle. Anchoring\n // to the wrapper instead leaks its overhang — a wrapper stretched by a flex row is taller\n // than the card inside it — into the gap between the arrow tip and the spotlight.\n refs.setPositionReference(element ? resolveSpotlightTarget(element) : null);\n });\n }, [attachTo, refs, isOpen]);\n\n return (\n <PopoverContext.Provider value={contextValue}>\n <FloatingPortal>\n <FloatingFocusManager\n // TODO: check if isTransitioning is enough since scrolling can take longer\n disabled={isOpen === false || !isMounted || isTransitioning}\n initialFocus={defaultInitialFocusRef}\n context={context}\n modal={true}\n guards={true}\n >\n {isMounted ? (\n <BaseBox\n ref={refs.setFloating}\n style={{ ...floatingStyles, pointerEvents: isMounted ? 'auto' : 'none' }}\n // TODO: Tokenize zIndex values\n zIndex={zIndex}\n {...getFloatingProps()}\n {...metaAttribute({ name: MetaConstants.TourPopover })}\n {...makeAccessible({ labelledBy: titleId })}\n >\n <PopoverContent\n title={title}\n titleLeading={titleLeading}\n footer={footer}\n style={styles}\n arrow={\n // Kept at parity with Popover's arrow. The stroke matters beyond the arrow's\n // own outline: the popup's surface carries a 1px inset hairline on every edge,\n // including the one the arrow sits on, so without a stroke that hairline is\n // drawn straight across the join and the arrow reads as a separate shape. A\n // non-zero strokeWidth also offsets the arrow onto that edge, letting its fill\n // cover the hairline underneath it.\n <PopupArrow\n ref={arrowRef}\n context={context}\n width={ARROW_WIDTH}\n height={ARROW_HEIGHT}\n fillColor={theme.colors.popup.background.gray.moderate}\n strokeColor={theme.colors.popup.border.gray.moderate}\n strokeWidth={theme.border.width.thin}\n style={{ transform: 'translateY(-1px)' }}\n />\n }\n >\n {content}\n </PopoverContent>\n </BaseBox>\n ) : (\n <></>\n )}\n </FloatingFocusManager>\n </FloatingPortal>\n </PopoverContext.Provider>\n );\n};\n\nexport { TourPopover };\n"],"names":["TourPopover","_ref","attachTo","content","title","titleLeading","footer","_ref$placement","placement","onOpenChange","_ref$zIndex","zIndex","componentZIndices","popover","isOpen","defaultIsOpen","isTransitioning","_useTheme","useTheme","theme","defaultInitialFocusRef","React","useRef","arrowRef","titleId","useId","GAP","spacing","_getFloatingPlacement","getFloatingPlacementParts","_getFloatingPlacement2","_slicedToArray","side","isHorizontal","isOppositeAxis","_useControllableState","useControllableState","value","defaultValue","onChange","_useControllableState2","controllableIsOpen","controllableSetIsOpen","_useFloating","useFloating","open","strategy","middleware","shift","crossAxis","padding","flip","fallbackAxisSideDirection","offset","ARROW_HEIGHT","arrow","element","ARROW_WIDTH","transform","whileElementsMounted","autoUpdate","refs","floatingStyles","context","computedPlacement","close","useCallback","_getFloatingPlacement3","_getFloatingPlacement4","computedSide","computedIsHorizontal","animationOffset","size","_useTransitionStyles","useTransitionStyles","duration","transitionDelay","motion","xquick","initial","opacity","concat","isMounted","styles","isControlled","undefined","click","useClick","enabled","role","useRole","_useInteractions","useInteractions","getFloatingProps","contextValue","useMemo","openInteraction","useLayoutEffect","window","setTimeout","current","setReference","setPositionReference","resolveSpotlightTarget","_jsx","PopoverContext","Provider","children","FloatingPortal","FloatingFocusManager","disabled","initialFocus","modal","guards","BaseBox","_objectSpread","ref","setFloating","style","pointerEvents","metaAttribute","name","MetaConstants","makeAccessible","labelledBy","PopoverContent","PopupArrow","width","height","fillColor","colors","popup","background","gray","moderate","strokeColor","border","strokeWidth","thin","_Fragment"],"mappings":"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"}
@@ -132,6 +132,63 @@ function useIntersectionObserver(elementRef, _ref) {
132
132
  }, [elementRef === null || elementRef === void 0 ? void 0 : elementRef.current, JSON.stringify(threshold), root, rootMargin]);
133
133
  return entry;
134
134
  }
135
+ var readBorderRadius = function readBorderRadius(el) {
136
+ var _window$getComputedSt = window.getComputedStyle(el),
137
+ borderTopLeftRadius = _window$getComputedSt.borderTopLeftRadius;
138
+ var parsed = Number.parseFloat(borderTopLeftRadius);
139
+ if (Number.isNaN(parsed)) return 0;
140
+ // Percentage radii (e.g. `50%` on a circular avatar) resolve against the box itself.
141
+ if (borderTopLeftRadius.includes('%')) {
142
+ var _el$getBoundingClient = el.getBoundingClientRect(),
143
+ width = _el$getBoundingClient.width,
144
+ height = _el$getBoundingClient.height;
145
+ return Math.min(width, height) * parsed / 100;
146
+ }
147
+ return parsed;
148
+ };
149
+
150
+ // `getComputedStyle` reports unset properties as an empty string in some environments
151
+ // (notably jsdom), so treat "unset" the same as "not painted" rather than as a value.
152
+ var isPainted = function isPainted(value) {
153
+ return Boolean(value) && value !== 'none' && value !== 'transparent' && value !== 'rgba(0, 0, 0, 0)';
154
+ };
155
+
156
+ /** Whether an element paints anything of its own, or is a bare layout shell. */
157
+ var drawsOwnShape = function drawsOwnShape(el) {
158
+ var _window$getComputedSt2 = window.getComputedStyle(el),
159
+ borderTopWidth = _window$getComputedSt2.borderTopWidth,
160
+ backgroundColor = _window$getComputedSt2.backgroundColor,
161
+ backgroundImage = _window$getComputedSt2.backgroundImage;
162
+ return readBorderRadius(el) > 0 || Number.parseFloat(borderTopWidth) > 0 || isPainted(backgroundColor) || isPainted(backgroundImage);
163
+ };
164
+
165
+ /**
166
+ * Resolves the element a step should actually be measured against.
167
+ *
168
+ * `SpotlightPopoverTourStep` clones its child to attach a ref, so consumers commonly wrap
169
+ * their UI in a layout element just to forward one. Measuring that wrapper is wrong twice
170
+ * over: it has no corner radius to inherit, and a wrapper stretched by its parent's layout
171
+ * (e.g. `alignItems="stretch"` in a flex row) is taller than the component inside it, which
172
+ * makes the spotlight's padding look uneven — 6px on three sides and more at the bottom.
173
+ *
174
+ * So when the step's element paints nothing itself and simply wraps a single child that
175
+ * fills it on at least one axis, we trace that child instead. The fill check keeps us from
176
+ * shrinking onto an inner element that merely happens to be first — a wrapper around
177
+ * narrower content is still measured as the wrapper.
178
+ *
179
+ * Both the spotlight and the popover must resolve through this, or they anchor to different
180
+ * rectangles and the overhang between them shows up as an uneven arrow-to-spotlight gap.
181
+ */
182
+ var resolveSpotlightTarget = function resolveSpotlightTarget(element) {
183
+ if (drawsOwnShape(element)) return element;
184
+ var children = element.children;
185
+ if (children.length !== 1) return element;
186
+ var child = children[0];
187
+ var parentRect = element.getBoundingClientRect();
188
+ var childRect = child.getBoundingClientRect();
189
+ var fillsAnAxis = Math.abs(childRect.width - parentRect.width) <= 1 || Math.abs(childRect.height - parentRect.height) <= 1;
190
+ return fillsAnAxis ? child : element;
191
+ };
135
192
  var useLockBodyScroll = function useLockBodyScroll(shouldLock) {
136
193
  var scrollLockRef = useScrollLock({
137
194
  enabled: true,
@@ -150,5 +207,5 @@ var useLockBodyScroll = function useLockBodyScroll(shouldLock) {
150
207
  }, [shouldLock, scrollLockRef]);
151
208
  };
152
209
 
153
- export { smoothScroll, useDelayedState, useIntersectionObserver, useIsTransitioningBetweenSteps, useLockBodyScroll };
210
+ export { readBorderRadius, resolveSpotlightTarget, smoothScroll, useDelayedState, useIntersectionObserver, useIsTransitioningBetweenSteps, useLockBodyScroll };
154
211
  //# sourceMappingURL=utils.js.map