@bikdotai/bik-component-library 0.0.805-beta.5 → 0.0.805-beta.9

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 (325) hide show
  1. package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js +1 -1
  2. package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js.map +1 -1
  3. package/dist/cjs/components/BikGiftedChat/GiftedChat/types.js.map +1 -1
  4. package/dist/cjs/components/avatar/Avatar.js +1 -1
  5. package/dist/cjs/components/avatar/Avatar.js.map +1 -1
  6. package/dist/cjs/components/avatar/Avatar.styled.js +3 -3
  7. package/dist/cjs/components/avatar/Avatar.styled.js.map +1 -1
  8. package/dist/cjs/components/avatar/AvatarHelper.js +1 -1
  9. package/dist/cjs/components/avatar/AvatarHelper.js.map +1 -1
  10. package/dist/cjs/components/bik-layout/BikSidebar.js.map +1 -1
  11. package/dist/cjs/components/button/Button.js +1 -1
  12. package/dist/cjs/components/button/Button.js.map +1 -1
  13. package/dist/cjs/components/button/Button.styled.js +1 -1
  14. package/dist/cjs/components/button/Button.styled.js.map +1 -1
  15. package/dist/cjs/components/button/themes.js +1 -1
  16. package/dist/cjs/components/button/themes.js.map +1 -1
  17. package/dist/cjs/components/country-code-picker/CountryCodePicker.js.map +1 -1
  18. package/dist/cjs/components/country-code-picker/CountryPicker.js.map +1 -1
  19. package/dist/cjs/components/dropdown/Dropdown.js +1 -1
  20. package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
  21. package/dist/cjs/components/dropdown/DropdownPopover/index.js +1 -1
  22. package/dist/cjs/components/dropdown/DropdownPopover/index.js.map +1 -1
  23. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  24. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  25. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.js +5 -6
  26. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.js.map +1 -1
  27. package/dist/cjs/components/dropdown/OpenedDropdown/components/description/Description.js.map +1 -1
  28. package/dist/cjs/components/dropdown/OpenedDropdown/components/description/Description.styled.js.map +1 -1
  29. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.js.map +1 -1
  30. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +7 -7
  31. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.js.map +1 -1
  32. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
  33. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.js.map +1 -1
  34. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.js +4 -8
  35. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.js.map +1 -1
  36. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js.map +1 -1
  37. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
  38. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  39. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.js +1 -1
  40. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.js.map +1 -1
  41. package/dist/cjs/components/dropdown-button/DropdownButton.js +1 -1
  42. package/dist/cjs/components/dropdown-button/DropdownButton.js.map +1 -1
  43. package/dist/cjs/components/dropdown-button/DropdownButton.style.js +6 -10
  44. package/dist/cjs/components/dropdown-button/DropdownButton.style.js.map +1 -1
  45. package/dist/cjs/components/fab-menu/FABMenu.js.map +1 -1
  46. package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.js +1 -1
  47. package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.js.map +1 -1
  48. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js +1 -1
  49. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js.map +1 -1
  50. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js +1 -1
  51. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js.map +1 -1
  52. package/dist/cjs/components/icon-button/IconButton.js +1 -1
  53. package/dist/cjs/components/icon-button/IconButton.js.map +1 -1
  54. package/dist/cjs/components/icon-button/IconButton.styled.js +3 -3
  55. package/dist/cjs/components/icon-button/IconButton.styled.js.map +1 -1
  56. package/dist/cjs/components/icon-button/theme.js +1 -1
  57. package/dist/cjs/components/icon-button/theme.js.map +1 -1
  58. package/dist/cjs/components/input/Input.js +1 -1
  59. package/dist/cjs/components/input/Input.js.map +1 -1
  60. package/dist/cjs/components/input/Input.styled.js +1 -1
  61. package/dist/cjs/components/input/Input.styled.js.map +1 -1
  62. package/dist/cjs/components/list-item/ListItem.js +1 -1
  63. package/dist/cjs/components/list-item/ListItem.js.map +1 -1
  64. package/dist/cjs/components/list-item/ListItem.styled.js +1 -1
  65. package/dist/cjs/components/list-item/ListItem.styled.js.map +1 -1
  66. package/dist/cjs/components/list-item/themes.js +1 -1
  67. package/dist/cjs/components/list-item/themes.js.map +1 -1
  68. package/dist/cjs/components/multi-level-dropdown/GroupedMenuList.js +1 -1
  69. package/dist/cjs/components/multi-level-dropdown/GroupedMenuList.js.map +1 -1
  70. package/dist/cjs/components/multi-level-dropdown/MenuItem.js +1 -1
  71. package/dist/cjs/components/multi-level-dropdown/MenuItem.js.map +1 -1
  72. package/dist/cjs/components/multi-level-dropdown/MenuList.js +1 -1
  73. package/dist/cjs/components/multi-level-dropdown/MenuList.js.map +1 -1
  74. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.js +1 -1
  75. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.js.map +1 -1
  76. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.styled.js +30 -33
  77. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.styled.js.map +1 -1
  78. package/dist/cjs/components/tag/Tag.js +1 -1
  79. package/dist/cjs/components/tag/Tag.js.map +1 -1
  80. package/dist/cjs/components/tag/Tag.styled.js +1 -1
  81. package/dist/cjs/components/tag/Tag.styled.js.map +1 -1
  82. package/dist/cjs/components/tag/model.js.map +1 -1
  83. package/dist/cjs/components/whats-new/WhatsNew.js +1 -1
  84. package/dist/cjs/components/whats-new/WhatsNew.js.map +1 -1
  85. package/dist/cjs/components/whats-new/WhatsNewButton.js +1 -1
  86. package/dist/cjs/components/whats-new/WhatsNewButton.js.map +1 -1
  87. package/dist/cjs/components/whats-new/WhatsNewPanel.js +1 -1
  88. package/dist/cjs/components/whats-new/WhatsNewPanel.js.map +1 -1
  89. package/dist/cjs/constants/Theme.js +1 -1
  90. package/dist/cjs/constants/Theme.js.map +1 -1
  91. package/dist/cjs/icons/Arrows/Chevron/ChevronUp.js +1 -1
  92. package/dist/cjs/icons/Arrows/Chevron/ChevronUp.js.map +1 -1
  93. package/dist/cjs/index.js +1 -1
  94. package/dist/cjs/src/components/BikGiftedChat/GiftedChat/types.d.ts +2 -2
  95. package/dist/cjs/src/components/avatar/Avatar.d.ts +2 -3
  96. package/dist/cjs/src/components/avatar/AvatarHelper.d.ts +4 -5
  97. package/dist/cjs/src/components/bik-layout/MockMenus.d.ts +1 -0
  98. package/dist/cjs/src/components/bik-layout/index.d.ts +0 -2
  99. package/dist/cjs/src/components/button/Button.styled.d.ts +1 -1
  100. package/dist/cjs/src/components/button/model.d.ts +3 -3
  101. package/dist/cjs/src/components/button/themes.d.ts +2 -2
  102. package/dist/cjs/src/components/country-code-picker/CountryCodePicker.d.ts +1 -1
  103. package/dist/cjs/src/components/country-code-picker/CountryPicker.d.ts +1 -1
  104. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.d.ts +1 -1
  105. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/description/Description.d.ts +1 -1
  106. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/description/Description.styled.d.ts +1 -1
  107. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.d.ts +1 -1
  108. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +1 -1
  109. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +1 -1
  110. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.d.ts +1 -2
  111. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.d.ts +1 -1
  112. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +1 -1
  113. package/dist/cjs/src/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.d.ts +0 -1
  114. package/dist/cjs/src/components/dropdown/OpenedDropdown/utils/iterationOnOptions.d.ts +0 -2
  115. package/dist/cjs/src/components/dropdown/hooks/useDropdown.d.ts +0 -2
  116. package/dist/cjs/src/components/dropdown/type.d.ts +1 -2
  117. package/dist/cjs/src/components/dropdown-button/DropdownButton.d.ts +1 -3
  118. package/dist/cjs/src/components/dropdown-button/DropdownButton.style.d.ts +2 -9
  119. package/dist/cjs/src/components/fab-menu/FABMenu.d.ts +1 -1
  120. package/dist/cjs/src/components/feature-announcements/types/feature.types.d.ts +1 -1
  121. package/dist/cjs/src/components/icon-button/IconButton.styled.d.ts +1 -3
  122. package/dist/cjs/src/components/icon-button/model.d.ts +1 -12
  123. package/dist/cjs/src/components/input/Input.model.d.ts +1 -2
  124. package/dist/cjs/src/components/input/Input.styled.d.ts +1 -16
  125. package/dist/cjs/src/components/list-item/List.model.d.ts +1 -1
  126. package/dist/cjs/src/components/list-item/ListItem.styled.d.ts +1 -1
  127. package/dist/cjs/src/components/list-item/themes.d.ts +2 -2
  128. package/dist/cjs/src/components/multi-level-dropdown/GroupedMenuList.d.ts +0 -1
  129. package/dist/cjs/src/components/multi-level-dropdown/MenuItem.d.ts +0 -1
  130. package/dist/cjs/src/components/multi-level-dropdown/MenuList.d.ts +0 -1
  131. package/dist/cjs/src/components/multi-level-dropdown/MultiLevelDropdown.styled.d.ts +3 -13
  132. package/dist/cjs/src/components/multi-level-dropdown/type.d.ts +0 -1
  133. package/dist/cjs/src/components/tag/Tag.d.ts +1 -1
  134. package/dist/cjs/src/components/tag/Tag.stories.d.ts +5 -5
  135. package/dist/cjs/src/components/tag/Tag.styled.d.ts +1 -3
  136. package/dist/cjs/src/components/tag/model.d.ts +1 -5
  137. package/dist/cjs/src/components/whats-new/WhatsNew.d.ts +0 -2
  138. package/dist/cjs/src/components/whats-new/WhatsNew.types.d.ts +0 -2
  139. package/dist/cjs/src/constants/Theme.d.ts +0 -6
  140. package/dist/cjs/src/icons/Arrows/Chevron/ChevronUp.d.ts +2 -1
  141. package/dist/cjs/src/index.d.ts +0 -1
  142. package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js +1 -1
  143. package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js.map +1 -1
  144. package/dist/esm/components/BikGiftedChat/GiftedChat/types.js.map +1 -1
  145. package/dist/esm/components/avatar/Avatar.js +1 -1
  146. package/dist/esm/components/avatar/Avatar.js.map +1 -1
  147. package/dist/esm/components/avatar/Avatar.styled.js +6 -6
  148. package/dist/esm/components/avatar/Avatar.styled.js.map +1 -1
  149. package/dist/esm/components/avatar/AvatarHelper.js +1 -1
  150. package/dist/esm/components/avatar/AvatarHelper.js.map +1 -1
  151. package/dist/esm/components/bik-layout/BikSidebar.js.map +1 -1
  152. package/dist/esm/components/button/Button.js +1 -1
  153. package/dist/esm/components/button/Button.js.map +1 -1
  154. package/dist/esm/components/button/Button.styled.js +1 -1
  155. package/dist/esm/components/button/Button.styled.js.map +1 -1
  156. package/dist/esm/components/button/themes.js +1 -1
  157. package/dist/esm/components/button/themes.js.map +1 -1
  158. package/dist/esm/components/country-code-picker/CountryCodePicker.js.map +1 -1
  159. package/dist/esm/components/country-code-picker/CountryPicker.js.map +1 -1
  160. package/dist/esm/components/dropdown/Dropdown.js +1 -1
  161. package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
  162. package/dist/esm/components/dropdown/DropdownPopover/index.js +1 -1
  163. package/dist/esm/components/dropdown/DropdownPopover/index.js.map +1 -1
  164. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  165. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  166. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.js +2 -3
  167. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.js.map +1 -1
  168. package/dist/esm/components/dropdown/OpenedDropdown/components/description/Description.js.map +1 -1
  169. package/dist/esm/components/dropdown/OpenedDropdown/components/description/Description.styled.js.map +1 -1
  170. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.js.map +1 -1
  171. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +1 -1
  172. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.js.map +1 -1
  173. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
  174. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.js.map +1 -1
  175. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.js +2 -6
  176. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.js.map +1 -1
  177. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js.map +1 -1
  178. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
  179. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  180. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.js +1 -1
  181. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.js.map +1 -1
  182. package/dist/esm/components/dropdown-button/DropdownButton.js +1 -1
  183. package/dist/esm/components/dropdown-button/DropdownButton.js.map +1 -1
  184. package/dist/esm/components/dropdown-button/DropdownButton.style.js +4 -8
  185. package/dist/esm/components/dropdown-button/DropdownButton.style.js.map +1 -1
  186. package/dist/esm/components/fab-menu/FABMenu.js.map +1 -1
  187. package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.js +1 -1
  188. package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.js.map +1 -1
  189. package/dist/esm/components/feature-announcements/MajorUpdatePopup.js +1 -1
  190. package/dist/esm/components/feature-announcements/MajorUpdatePopup.js.map +1 -1
  191. package/dist/esm/components/feature-announcements/MinorUpdatePopup.js +1 -1
  192. package/dist/esm/components/feature-announcements/MinorUpdatePopup.js.map +1 -1
  193. package/dist/esm/components/icon-button/IconButton.js +1 -1
  194. package/dist/esm/components/icon-button/IconButton.js.map +1 -1
  195. package/dist/esm/components/icon-button/IconButton.styled.js +1 -1
  196. package/dist/esm/components/icon-button/IconButton.styled.js.map +1 -1
  197. package/dist/esm/components/icon-button/theme.js +1 -1
  198. package/dist/esm/components/icon-button/theme.js.map +1 -1
  199. package/dist/esm/components/input/Input.js +1 -1
  200. package/dist/esm/components/input/Input.js.map +1 -1
  201. package/dist/esm/components/input/Input.styled.js +1 -1
  202. package/dist/esm/components/input/Input.styled.js.map +1 -1
  203. package/dist/esm/components/list-item/ListItem.js +1 -1
  204. package/dist/esm/components/list-item/ListItem.js.map +1 -1
  205. package/dist/esm/components/list-item/ListItem.styled.js +1 -1
  206. package/dist/esm/components/list-item/ListItem.styled.js.map +1 -1
  207. package/dist/esm/components/list-item/themes.js +1 -1
  208. package/dist/esm/components/list-item/themes.js.map +1 -1
  209. package/dist/esm/components/multi-level-dropdown/GroupedMenuList.js +1 -1
  210. package/dist/esm/components/multi-level-dropdown/GroupedMenuList.js.map +1 -1
  211. package/dist/esm/components/multi-level-dropdown/MenuItem.js +1 -1
  212. package/dist/esm/components/multi-level-dropdown/MenuItem.js.map +1 -1
  213. package/dist/esm/components/multi-level-dropdown/MenuList.js +1 -1
  214. package/dist/esm/components/multi-level-dropdown/MenuList.js.map +1 -1
  215. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.js +1 -1
  216. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.js.map +1 -1
  217. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.js +29 -32
  218. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.js.map +1 -1
  219. package/dist/esm/components/tag/Tag.js +1 -1
  220. package/dist/esm/components/tag/Tag.js.map +1 -1
  221. package/dist/esm/components/tag/Tag.styled.js +1 -1
  222. package/dist/esm/components/tag/Tag.styled.js.map +1 -1
  223. package/dist/esm/components/tag/model.js.map +1 -1
  224. package/dist/esm/components/whats-new/WhatsNew.js +1 -1
  225. package/dist/esm/components/whats-new/WhatsNew.js.map +1 -1
  226. package/dist/esm/components/whats-new/WhatsNewButton.js +1 -1
  227. package/dist/esm/components/whats-new/WhatsNewButton.js.map +1 -1
  228. package/dist/esm/components/whats-new/WhatsNewPanel.js +1 -1
  229. package/dist/esm/components/whats-new/WhatsNewPanel.js.map +1 -1
  230. package/dist/esm/constants/Theme.js +1 -1
  231. package/dist/esm/constants/Theme.js.map +1 -1
  232. package/dist/esm/icons/Arrows/Chevron/ChevronUp.js +1 -1
  233. package/dist/esm/icons/Arrows/Chevron/ChevronUp.js.map +1 -1
  234. package/dist/esm/index.js +1 -1
  235. package/dist/esm/src/components/BikGiftedChat/GiftedChat/types.d.ts +2 -2
  236. package/dist/esm/src/components/avatar/Avatar.d.ts +2 -3
  237. package/dist/esm/src/components/avatar/AvatarHelper.d.ts +4 -5
  238. package/dist/esm/src/components/bik-layout/MockMenus.d.ts +1 -0
  239. package/dist/esm/src/components/bik-layout/index.d.ts +0 -2
  240. package/dist/esm/src/components/button/Button.styled.d.ts +1 -1
  241. package/dist/esm/src/components/button/model.d.ts +3 -3
  242. package/dist/esm/src/components/button/themes.d.ts +2 -2
  243. package/dist/esm/src/components/country-code-picker/CountryCodePicker.d.ts +1 -1
  244. package/dist/esm/src/components/country-code-picker/CountryPicker.d.ts +1 -1
  245. package/dist/esm/src/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.d.ts +1 -1
  246. package/dist/esm/src/components/dropdown/OpenedDropdown/components/description/Description.d.ts +1 -1
  247. package/dist/esm/src/components/dropdown/OpenedDropdown/components/description/Description.styled.d.ts +1 -1
  248. package/dist/esm/src/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.d.ts +1 -1
  249. package/dist/esm/src/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +1 -1
  250. package/dist/esm/src/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +1 -1
  251. package/dist/esm/src/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.d.ts +1 -2
  252. package/dist/esm/src/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.d.ts +1 -1
  253. package/dist/esm/src/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +1 -1
  254. package/dist/esm/src/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.d.ts +0 -1
  255. package/dist/esm/src/components/dropdown/OpenedDropdown/utils/iterationOnOptions.d.ts +0 -2
  256. package/dist/esm/src/components/dropdown/hooks/useDropdown.d.ts +0 -2
  257. package/dist/esm/src/components/dropdown/type.d.ts +1 -2
  258. package/dist/esm/src/components/dropdown-button/DropdownButton.d.ts +1 -3
  259. package/dist/esm/src/components/dropdown-button/DropdownButton.style.d.ts +2 -9
  260. package/dist/esm/src/components/fab-menu/FABMenu.d.ts +1 -1
  261. package/dist/esm/src/components/feature-announcements/types/feature.types.d.ts +1 -1
  262. package/dist/esm/src/components/icon-button/IconButton.styled.d.ts +1 -3
  263. package/dist/esm/src/components/icon-button/model.d.ts +1 -12
  264. package/dist/esm/src/components/input/Input.model.d.ts +1 -2
  265. package/dist/esm/src/components/input/Input.styled.d.ts +1 -16
  266. package/dist/esm/src/components/list-item/List.model.d.ts +1 -1
  267. package/dist/esm/src/components/list-item/ListItem.styled.d.ts +1 -1
  268. package/dist/esm/src/components/list-item/themes.d.ts +2 -2
  269. package/dist/esm/src/components/multi-level-dropdown/GroupedMenuList.d.ts +0 -1
  270. package/dist/esm/src/components/multi-level-dropdown/MenuItem.d.ts +0 -1
  271. package/dist/esm/src/components/multi-level-dropdown/MenuList.d.ts +0 -1
  272. package/dist/esm/src/components/multi-level-dropdown/MultiLevelDropdown.styled.d.ts +3 -13
  273. package/dist/esm/src/components/multi-level-dropdown/type.d.ts +0 -1
  274. package/dist/esm/src/components/tag/Tag.d.ts +1 -1
  275. package/dist/esm/src/components/tag/Tag.stories.d.ts +5 -5
  276. package/dist/esm/src/components/tag/Tag.styled.d.ts +1 -3
  277. package/dist/esm/src/components/tag/model.d.ts +1 -5
  278. package/dist/esm/src/components/whats-new/WhatsNew.d.ts +0 -2
  279. package/dist/esm/src/components/whats-new/WhatsNew.types.d.ts +0 -2
  280. package/dist/esm/src/constants/Theme.d.ts +0 -6
  281. package/dist/esm/src/icons/Arrows/Chevron/ChevronUp.d.ts +2 -1
  282. package/dist/esm/src/index.d.ts +0 -1
  283. package/package.json +2 -1
  284. package/dist/cjs/components/bik-layout/BikSidebarV2/BikSidebarV2.js +0 -2
  285. package/dist/cjs/components/bik-layout/BikSidebarV2/BikSidebarV2.js.map +0 -1
  286. package/dist/cjs/components/bik-layout/BikSidebarV2/SidebarV2Popup.js +0 -2
  287. package/dist/cjs/components/bik-layout/BikSidebarV2/SidebarV2Popup.js.map +0 -1
  288. package/dist/cjs/components/bik-layout/BikSidebarV2/SidebarV2Styles.js +0 -294
  289. package/dist/cjs/components/bik-layout/BikSidebarV2/SidebarV2Styles.js.map +0 -1
  290. package/dist/cjs/components/bik-layout/BikSidebarV2/SimpleSidebarV2.js +0 -2
  291. package/dist/cjs/components/bik-layout/BikSidebarV2/SimpleSidebarV2.js.map +0 -1
  292. package/dist/cjs/components/dual-icon-button/DualIconButton.js +0 -2
  293. package/dist/cjs/components/dual-icon-button/DualIconButton.js.map +0 -1
  294. package/dist/cjs/components/dual-icon-button/DualIconButton.styled.js +0 -26
  295. package/dist/cjs/components/dual-icon-button/DualIconButton.styled.js.map +0 -1
  296. package/dist/cjs/src/components/bik-layout/BikSidebarV2/BikSidebarV2.d.ts +0 -33
  297. package/dist/cjs/src/components/bik-layout/BikSidebarV2/SidebarV2.model.d.ts +0 -27
  298. package/dist/cjs/src/components/bik-layout/BikSidebarV2/SidebarV2Popup.d.ts +0 -13
  299. package/dist/cjs/src/components/bik-layout/BikSidebarV2/SidebarV2Styles.d.ts +0 -44
  300. package/dist/cjs/src/components/bik-layout/BikSidebarV2/SimpleSidebarV2.d.ts +0 -3
  301. package/dist/cjs/src/components/dual-icon-button/DualIconButton.d.ts +0 -3
  302. package/dist/cjs/src/components/dual-icon-button/DualIconButton.styled.d.ts +0 -7
  303. package/dist/cjs/src/components/dual-icon-button/index.d.ts +0 -2
  304. package/dist/cjs/src/components/dual-icon-button/model.d.ts +0 -12
  305. package/dist/esm/components/bik-layout/BikSidebarV2/BikSidebarV2.js +0 -2
  306. package/dist/esm/components/bik-layout/BikSidebarV2/BikSidebarV2.js.map +0 -1
  307. package/dist/esm/components/bik-layout/BikSidebarV2/SidebarV2Popup.js +0 -2
  308. package/dist/esm/components/bik-layout/BikSidebarV2/SidebarV2Popup.js.map +0 -1
  309. package/dist/esm/components/bik-layout/BikSidebarV2/SidebarV2Styles.js +0 -294
  310. package/dist/esm/components/bik-layout/BikSidebarV2/SidebarV2Styles.js.map +0 -1
  311. package/dist/esm/components/bik-layout/BikSidebarV2/SimpleSidebarV2.js +0 -2
  312. package/dist/esm/components/bik-layout/BikSidebarV2/SimpleSidebarV2.js.map +0 -1
  313. package/dist/esm/components/dual-icon-button/DualIconButton.js +0 -2
  314. package/dist/esm/components/dual-icon-button/DualIconButton.js.map +0 -1
  315. package/dist/esm/components/dual-icon-button/DualIconButton.styled.js +0 -26
  316. package/dist/esm/components/dual-icon-button/DualIconButton.styled.js.map +0 -1
  317. package/dist/esm/src/components/bik-layout/BikSidebarV2/BikSidebarV2.d.ts +0 -33
  318. package/dist/esm/src/components/bik-layout/BikSidebarV2/SidebarV2.model.d.ts +0 -27
  319. package/dist/esm/src/components/bik-layout/BikSidebarV2/SidebarV2Popup.d.ts +0 -13
  320. package/dist/esm/src/components/bik-layout/BikSidebarV2/SidebarV2Styles.d.ts +0 -44
  321. package/dist/esm/src/components/bik-layout/BikSidebarV2/SimpleSidebarV2.d.ts +0 -3
  322. package/dist/esm/src/components/dual-icon-button/DualIconButton.d.ts +0 -3
  323. package/dist/esm/src/components/dual-icon-button/DualIconButton.styled.d.ts +0 -7
  324. package/dist/esm/src/components/dual-icon-button/index.d.ts +0 -2
  325. package/dist/esm/src/components/dual-icon-button/model.d.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureAnnouncementProvider.js","sources":["../../../../src/components/feature-announcements/FeatureAnnouncementProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport Joyride, { ACTIONS } from 'react-joyride';\nimport { SELECTORS } from './constants';\nimport { useFeatureAnnouncements } from './hooks';\nimport MajorUpdatePopup from './MajorUpdatePopup';\nimport MinorUpdatePopup from './MinorUpdatePopup';\nimport { FeatureAnnouncement, FeatureAnnouncementProviderProps } from './types';\nimport { VideoModal } from './VideoModal';\n\nconst FeatureAnnouncementProvider: React.FC<\n\tFeatureAnnouncementProviderProps\n> = ({\n\tchildren,\n\tfetchVisibleFeatures,\n\tgetStoreFeatureProgress,\n\tfetchFeatureById,\n\tmarkFeatureAsViewedForStore,\n\tisFeatureApplicableToCurrentPage,\n\tmodule,\n\trouter,\n\tstoreId,\n\tonAnnouncementShown,\n\tonAnnouncementInteracted,\n}) => {\n\tconst {\n\t\tmajorUpdateFeatures,\n\t\tminorUpdateFeatures,\n\t\tisLoading,\n\t\tmarkFeatureAsViewed,\n\t} = useFeatureAnnouncements({\n\t\tfetchVisibleFeatures,\n\t\tgetStoreFeatureProgress,\n\t\tfetchFeatureById,\n\t\tmarkFeatureAsViewedForStore,\n\t\tisFeatureApplicableToCurrentPage,\n\t\tmodule,\n\t\trouter,\n\t});\n\n\tconst [currentMajorFeature, setCurrentMajorFeature] =\n\t\tuseState<FeatureAnnouncement | null>(null);\n\tconst [currentMinorFeature, setCurrentMinorFeature] =\n\t\tuseState<FeatureAnnouncement | null>(null);\n\tconst [runJoyride, setRunJoyride] = useState(false);\n\tconst [joyrideSteps, setJoyrideSteps] = useState<any[]>([]);\n\tconst [runMajorJoyride, setRunMajorJoyride] = useState(false);\n\tconst [majorJoyrideSteps, setMajorJoyrideSteps] = useState<any[]>([]);\n\tconst [isProcessingMajorUpdate, setIsProcessingMajorUpdate] = useState(false);\n\tconst [isProcessingMinorUpdate, setIsProcessingMinorUpdate] = useState(false);\n\tconst [availableMinorFeatures, setAvailableMinorFeatures] = useState<\n\t\tFeatureAnnouncement[]\n\t>([]);\n\tconst [minorFeaturesSkipped, setMinorFeaturesSkipped] = useState(false);\n\tconst [showMinorUpdates, setShowMinorUpdates] = useState(false);\n\tconst [isVideoModalOpen, setIsVideoModalOpen] = useState(false);\n\tconst [videoUrl, setVideoUrl] = useState('');\n\tconst [blockPopups, setBlockPopups] = useState(false);\n\tconst [isClosingMajor, setIsClosingMajor] = useState(false);\n\tconst [isClosingMinor, setIsClosingMinor] = useState(false);\n\tconst [majorJoyrideKey, setMajorJoyrideKey] = useState(0);\n\tconst [minorJoyrideKey, setMinorJoyrideKey] = useState(0);\n\tconst [shownMinorFeatureIds, setShownMinorFeatureIds] = useState<Set<string>>(\n\t\tnew Set(),\n\t);\n\n\t// Add custom style for spotlight cutout effect\n\tuseEffect(() => {\n\t\tconst styleId = 'minor-spotlight-cutout-style';\n\t\tlet styleElement = document.getElementById(styleId) as HTMLStyleElement;\n\n\t\tif (!styleElement) {\n\t\t\tstyleElement = document.createElement('style');\n\t\t\tstyleElement.id = styleId;\n\t\t\tdocument.head.appendChild(styleElement);\n\t\t}\n\n\t\tstyleElement.textContent = `\n\t\t\t.react-joyride__spotlight {\n\t\t\t\ttransition: box-shadow 0.3s ease-in-out !important;\n\t\t\t\twill-change: box-shadow, transform;\n\t\t\t\ttransform: translateZ(0);\n\t\t\t}\n\t\t\t.react-joyride__tooltip {\n\t\t\t\twill-change: transform, opacity;\n\t\t\t\ttransform: translateZ(0);\n\t\t\t}\n\t\t\t.react-joyride__floater {\n\t\t\t\tright: 12px !important;\n\t\t\t\tleft: auto !important;\n\t\t\t}\n\t\t`;\n\n\t\treturn () => {\n\t\t\tconst el = document.getElementById(styleId);\n\t\t\tif (el) {\n\t\t\t\tel.remove();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// Force Joyride remount on navigation to prevent stale state\n\tuseEffect(() => {\n\t\tsetMajorJoyrideKey((prev) => prev + 1);\n\t\tsetMinorJoyrideKey((prev) => prev + 1);\n\t\tsetIsClosingMajor(false);\n\t\tsetIsClosingMinor(false);\n\t\t// Reset session tracking on navigation to allow features to show on new pages\n\t\tsetShownMinorFeatureIds(new Set());\n\t}, [router?.pathname]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tmajorUpdateFeatures.length > 0 &&\n\t\t\t!currentMajorFeature &&\n\t\t\t!isLoading &&\n\t\t\t!isProcessingMajorUpdate &&\n\t\t\t!blockPopups\n\t\t) {\n\t\t\tsetShowMinorUpdates(false);\n\t\t\tsetMinorFeaturesSkipped(false);\n\t\t\tsetRunJoyride(false);\n\t\t\tsetJoyrideSteps([]);\n\t\t\tsetCurrentMinorFeature(null);\n\t\t\tsetAvailableMinorFeatures([]);\n\n\t\t\tlet attempts = 0;\n\t\t\tconst MAX_ATTEMPTS = 10;\n\n\t\t\tconst checkWhatsNewButton = () => {\n\t\t\t\tattempts++;\n\t\t\t\tconst whatsNewButton = document.querySelector(\n\t\t\t\t\t'[data-testid=\"whats-new-button\"]',\n\t\t\t\t);\n\n\t\t\t\tif (whatsNewButton) {\n\t\t\t\t\tshowMajorUpdateJoyride(majorUpdateFeatures[0]);\n\t\t\t\t} else if (attempts < MAX_ATTEMPTS) {\n\t\t\t\t\tsetTimeout(checkWhatsNewButton, 1000);\n\t\t\t\t} else {\n\t\t\t\t\tsetShowMinorUpdates(true);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcheckWhatsNewButton();\n\t\t} else if (majorUpdateFeatures.length === 0 && !isLoading) {\n\t\t\tsetShowMinorUpdates(true);\n\t\t}\n\t}, [\n\t\tmajorUpdateFeatures,\n\t\tcurrentMajorFeature,\n\t\tisLoading,\n\t\tisProcessingMajorUpdate,\n\t\tblockPopups,\n\t]);\n\n\tuseEffect(() => {\n\t\t// Only run this special logic if a feature is being forced via URL\n\t\tconst featureIdFromQuery = router?.query?.['featureId'] as string;\n\n\t\tif (!featureIdFromQuery || isLoading || minorUpdateFeatures.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst forcedFeature = minorUpdateFeatures.find(\n\t\t\t(f) => f.id === featureIdFromQuery,\n\t\t);\n\n\t\tif (!forcedFeature || !forcedFeature.featureTag) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Prevent the standard flow from interfering\n\t\tsetMinorFeaturesSkipped(true);\n\t\t// Mark that we're processing to prevent other effects from interfering\n\t\tsetIsProcessingMinorUpdate(true);\n\n\t\tlet attempts = 0;\n\t\tconst maxAttempts = 25; // 5 seconds\n\t\tconst interval = setInterval(() => {\n\t\t\tattempts++;\n\t\t\tconst targetSelector =\n\t\t\t\tforcedFeature.featureTag.startsWith('#') ||\n\t\t\t\tforcedFeature.featureTag.startsWith('.') ||\n\t\t\t\tforcedFeature.featureTag.startsWith('[')\n\t\t\t\t\t? forcedFeature.featureTag\n\t\t\t\t\t: `#${forcedFeature.featureTag}`;\n\n\t\t\tconst element = document.querySelector(targetSelector);\n\n\t\t\tif (element) {\n\t\t\t\t// In test mode, pass the feature array directly to avoid async state issues\n\t\t\t\tconst testModeFeatures = [forcedFeature];\n\t\t\t\tsetAvailableMinorFeatures(testModeFeatures);\n\t\t\t\tshowMinorUpdateJoyride(forcedFeature, testModeFeatures);\n\t\t\t\t// Don't reset processing flag here - let user interaction handle it\n\t\t\t\t// This prevents auto-closing when multiple popups exist or when scrolling\n\t\t\t\tclearInterval(interval);\n\t\t\t} else if (attempts >= maxAttempts) {\n\t\t\t\t// Fallback for safety, though user expects it to be there.\n\t\t\t\t// We could log an error here.\n\t\t\t\t// Only reset on timeout (element not found)\n\t\t\t\tsetIsProcessingMinorUpdate(false);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 200);\n\n\t\treturn () => {\n\t\t\tclearInterval(interval);\n\t\t\t// Don't reset processing flag on cleanup - it causes premature popup closure\n\t\t\t// The flag will be managed by user interactions (skip/explore handlers)\n\t\t};\n\t}, [minorUpdateFeatures, router?.query?.['featureId'], isLoading]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tminorUpdateFeatures.length > 0 &&\n\t\t\t!isLoading &&\n\t\t\t!runJoyride &&\n\t\t\t!isProcessingMinorUpdate &&\n\t\t\t!currentMinorFeature &&\n\t\t\t!minorFeaturesSkipped &&\n\t\t\tshowMinorUpdates &&\n\t\t\t!blockPopups\n\t\t) {\n\t\t\tlet observer: MutationObserver | null = null;\n\t\t\tlet scrollListener: (() => void) | null = null;\n\t\t\tlet checkTimeout: ReturnType<typeof setTimeout> | null = null;\n\t\t\tlet isCleanedUp = false;\n\n\t\t\tconst checkElementsAndStartTour = () => {\n\t\t\t\tif (\n\t\t\t\t\tisCleanedUp ||\n\t\t\t\t\tisProcessingMinorUpdate ||\n\t\t\t\t\tcurrentMinorFeature ||\n\t\t\t\t\tminorFeaturesSkipped ||\n\t\t\t\t\t!showMinorUpdates\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\tconst availableFeatures = minorUpdateFeatures.filter((feature) => {\n\t\t\t\t\tif (!feature.featureTag || feature.featureTag.trim() === '') {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip features already shown in this session\n\t\t\t\t\tif (shownMinorFeatureIds.has(feature.id)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst targetSelector =\n\t\t\t\t\t\tfeature.featureTag.startsWith('#') ||\n\t\t\t\t\t\tfeature.featureTag.startsWith('.') ||\n\t\t\t\t\t\tfeature.featureTag.startsWith('[')\n\t\t\t\t\t\t\t? feature.featureTag\n\t\t\t\t\t\t\t: `#${feature.featureTag}`;\n\n\t\t\t\t\tconst element = document.querySelector(targetSelector);\n\t\t\t\t\treturn element !== null;\n\t\t\t\t});\n\n\t\t\t\tif (availableFeatures.length > 0) {\n\t\t\t\t\tsetAvailableMinorFeatures(availableFeatures);\n\t\t\t\t\t// Pass features directly to avoid async state issues\n\t\t\t\t\tshowMinorUpdateJoyride(availableFeatures[0], availableFeatures);\n\n\t\t\t\t\tif (observer) {\n\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t\tobserver = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (scrollListener) {\n\t\t\t\t\t\twindow.removeEventListener('scroll', scrollListener);\n\t\t\t\t\t\tscrollListener = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (checkTimeout) {\n\t\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t\t\tcheckTimeout = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tobserver = new MutationObserver((mutations) => {\n\t\t\t\tlet shouldCheck = false;\n\t\t\t\tfor (const mutation of mutations) {\n\t\t\t\t\tif (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n\t\t\t\t\t\tfor (let i = 0; i < mutation.addedNodes.length; i++) {\n\t\t\t\t\t\t\tconst node = mutation.addedNodes[i];\n\t\t\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\t\t\tconst element = node as Element;\n\t\t\t\t\t\t\t\tif (element.id || element.querySelector('[id]')) {\n\t\t\t\t\t\t\t\t\tshouldCheck = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (shouldCheck) break;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!runJoyride &&\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates &&\n\t\t\t\t\tshouldCheck\n\t\t\t\t) {\n\t\t\t\t\tif (checkTimeout) {\n\t\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t\tcheckTimeout = setTimeout(() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\t\t\tshowMinorUpdates\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 200);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscrollListener = () => {\n\t\t\t\tif (\n\t\t\t\t\t!runJoyride &&\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tif (checkTimeout) {\n\t\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t\t// Use RAF for smoother performance synced with browser paint\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tcheckTimeout = setTimeout(() => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\t\t\t\tshowMinorUpdates\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (observer) {\n\t\t\t\tobserver.observe(document.body, {\n\t\t\t\t\tchildList: true,\n\t\t\t\t\tsubtree: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (scrollListener) {\n\t\t\t\twindow.addEventListener('scroll', scrollListener, { passive: true });\n\t\t\t}\n\n\t\t\tcheckElementsAndStartTour();\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t}\n\t\t\t}, 100);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t}\n\t\t\t}, 1000);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t}\n\t\t\t}, 500);\n\n\t\t\treturn () => {\n\t\t\t\tisCleanedUp = true;\n\t\t\t\tif (observer) {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t\tif (scrollListener) {\n\t\t\t\t\twindow.removeEventListener('scroll', scrollListener);\n\t\t\t\t}\n\t\t\t\tif (checkTimeout) {\n\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t}\n\t\t\t};\n\t\t} else if (minorUpdateFeatures.length === 0 || isLoading) {\n\t\t\t// Don't clear joyride if we're in test mode with an active feature\n\t\t\tconst featureIdFromQuery = router?.query?.['featureId'] as string;\n\t\t\tconst isTestModeWithActiveFeature =\n\t\t\t\tfeatureIdFromQuery && currentMinorFeature;\n\n\t\t\tif (!isTestModeWithActiveFeature) {\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetJoyrideSteps([]);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetAvailableMinorFeatures([]);\n\t\t\t\tsetMinorFeaturesSkipped(false);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tminorUpdateFeatures,\n\t\tisLoading,\n\t\trunJoyride,\n\t\tisProcessingMinorUpdate,\n\t\tcurrentMinorFeature,\n\t\tminorFeaturesSkipped,\n\t\tshowMinorUpdates,\n\t\tmarkFeatureAsViewed,\n\t\tblockPopups,\n\t]);\n\n\tconst showMajorUpdateJoyride = (feature) => {\n\t\tsetCurrentMajorFeature(feature);\n\n\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t(f) => f.id === feature.id,\n\t\t);\n\t\tconst totalFeatures = majorUpdateFeatures.length;\n\n\t\tconst majorSteps = [\n\t\t\t{\n\t\t\t\ttarget: SELECTORS.WHATS_NEW_BUTTON,\n\t\t\t\tcontent: (\n\t\t\t\t\t<MajorUpdatePopup\n\t\t\t\t\t\tfeature={feature}\n\t\t\t\t\t\tcurrentIndex={currentIndex}\n\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\tonSkip={() => handleSkipMajorUpdate(feature)}\n\t\t\t\t\t\tonExplore={() => handleExploreFeature(feature)}\n\t\t\t\t\t\tonPrevious={() => handlePreviousMajorUpdate(feature)}\n\t\t\t\t\t\tonNext={() => handleNextMajorUpdate(feature)}\n\t\t\t\t\t\tsetIsClosing={setIsClosingMajor}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tplacementBeacon: 'top-end',\n\t\t\t\tdisableBeacon: true,\n\t\t\t\thideCloseButton: true,\n\t\t\t\thideSkipButton: true,\n\t\t\t\thideFooter: true,\n\t\t\t\toffset: 0,\n\t\t\t\tdata: { feature, isMajor: true },\n\t\t\t\tstyles: {\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t},\n\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t},\n\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\tsetMajorJoyrideSteps(majorSteps);\n\t\tsetRunMajorJoyride(true);\n\n\t\t// Fire announcement shown callback\n\t\tif (onAnnouncementShown && storeId) {\n\t\t\tonAnnouncementShown({\n\t\t\t\tstoreId,\n\t\t\t\tannouncementId: feature.id,\n\t\t\t\tannouncementTitle: feature.title,\n\t\t\t\timageUrl: feature.displayImage || feature.image,\n\t\t\t\tvideoUrl: feature.productVideo,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst handleSkipMajorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMajorFeature;\n\n\t\t\tif (targetFeature) {\n\t\t\t\tsetIsProcessingMajorUpdate(true);\n\n\t\t\t\tmajorUpdateFeatures.forEach((majorFeature) => {\n\t\t\t\t\tmarkFeatureAsViewed(majorFeature.id);\n\t\t\t\t});\n\n\t\t\t\tsetRunMajorJoyride(false);\n\t\t\t\tsetCurrentMajorFeature(null);\n\t\t\t\tsetMajorJoyrideSteps([]);\n\n\t\t\t\tsetShowMinorUpdates(true);\n\n\t\t\t\t// Fire announcement interacted callback for Skip\n\t\t\t\tif (onAnnouncementInteracted && storeId) {\n\t\t\t\t\tonAnnouncementInteracted({\n\t\t\t\t\t\tstoreId,\n\t\t\t\t\t\tannouncementId: targetFeature.id,\n\t\t\t\t\t\tannouncementTitle: targetFeature.title,\n\t\t\t\t\t\timageUrl: targetFeature.displayImage || targetFeature.image,\n\t\t\t\t\t\tvideoUrl: targetFeature.productVideo,\n\t\t\t\t\t\tbuttonClicked: 'Skip',\n\t\t\t\t\t\tbuttonName: 'Skip',\n\t\t\t\t\t\tbuttonUrl: undefined,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t\t}, 500);\n\t\t\t} else {\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst handleExploreFeature = useCallback(\n\t\t(feature) => {\n\t\t\tsetIsProcessingMajorUpdate(true);\n\t\t\tmarkFeatureAsViewed(feature.id);\n\t\t\tif (feature.productVideo) {\n\t\t\t\tsetVideoUrl(feature.productVideo);\n\t\t\t\tsetIsVideoModalOpen(true);\n\t\t\t\tsetBlockPopups(true);\n\t\t\t}\n\t\t\tsetRunMajorJoyride(false);\n\t\t\tsetCurrentMajorFeature(null);\n\t\t\tsetMajorJoyrideSteps([]);\n\t\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t\t(f) => f.id === feature.id,\n\t\t\t);\n\t\t\tconst isLastMajorUpdate = currentIndex === majorUpdateFeatures.length - 1;\n\t\t\tif (isLastMajorUpdate) {\n\t\t\t\tsetShowMinorUpdates(true);\n\t\t\t}\n\n\t\t\t// Fire announcement interacted callback for Primary button\n\t\t\tif (onAnnouncementInteracted && storeId) {\n\t\t\t\tonAnnouncementInteracted({\n\t\t\t\t\tstoreId,\n\t\t\t\t\tannouncementId: feature.id,\n\t\t\t\t\tannouncementTitle: feature.title,\n\t\t\t\t\timageUrl: feature.displayImage || feature.image,\n\t\t\t\t\tvideoUrl: feature.productVideo,\n\t\t\t\t\tbuttonClicked: 'Primary',\n\t\t\t\t\tbuttonName: feature.buttonText || 'Explore',\n\t\t\t\t\tbuttonUrl: feature.redirectUrl || feature.productVideo,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t}, 500);\n\t\t},\n\t\t[majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst handlePreviousMajorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMajorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex > 0) {\n\t\t\t\tconst prevFeature = majorUpdateFeatures[currentIndex - 1];\n\t\t\t\tsetCurrentMajorFeature(prevFeature);\n\n\t\t\t\tconst prevIndex = currentIndex - 1;\n\t\t\t\tconst totalFeatures = majorUpdateFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: '[data-testid=\"whats-new-button\"]',\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MajorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={prevFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={prevIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMajorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreFeature(prevFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMajorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMajorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMajor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom-start',\n\t\t\t\t\t\tplacementBeacon: 'top-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: prevFeature, isMajor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetMajorJoyrideSteps(updatedSteps);\n\t\t\t} else {\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures],\n\t);\n\n\tconst handleNextMajorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMajorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex < majorUpdateFeatures.length - 1) {\n\t\t\t\tconst nextFeature = majorUpdateFeatures[currentIndex + 1];\n\t\t\t\tsetCurrentMajorFeature(nextFeature);\n\n\t\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\t\tconst totalFeatures = majorUpdateFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: '[data-testid=\"whats-new-button\"]',\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MajorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={nextFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={nextIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMajorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreFeature(nextFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMajorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMajorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMajor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom-start',\n\t\t\t\t\t\tplacementBeacon: 'top-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: nextFeature, isMajor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetMajorJoyrideSteps(updatedSteps);\n\t\t\t} else {\n\t\t\t\tsetIsProcessingMajorUpdate(true);\n\n\t\t\t\tmarkFeatureAsViewed(targetFeature.id);\n\t\t\t\tsetRunMajorJoyride(false);\n\t\t\t\tsetCurrentMajorFeature(null);\n\t\t\t\tsetMajorJoyrideSteps([]);\n\n\t\t\t\tsetShowMinorUpdates(true);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst showMajorUpdatePopup = () => {\n\t\tif (majorUpdateFeatures.length > 0 && !currentMajorFeature) {\n\t\t\tconst whatsNewButton = document.querySelector(\n\t\t\t\t'[data-testid=\"whats-new-button\"]',\n\t\t\t);\n\n\t\t\tif (whatsNewButton) {\n\t\t\t\tshowMajorUpdateJoyride(majorUpdateFeatures[0]);\n\t\t\t}\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\t(window as any).showMajorUpdatePopup = showMajorUpdatePopup;\n\t\treturn () => {\n\t\t\tdelete (window as any).showMajorUpdatePopup;\n\t\t};\n\t}, [majorUpdateFeatures, currentMajorFeature]);\n\tconst handleMajorJoyrideCallback = useCallback(\n\t\t(data) => {\n\t\t\tconst { action } = data;\n\n\t\t\tif (action === ACTIONS.CLOSE) {\n\t\t\t\tif (currentMajorFeature) {\n\t\t\t\t\tsetIsProcessingMajorUpdate(true);\n\n\t\t\t\t\tmajorUpdateFeatures.forEach((majorFeature) => {\n\t\t\t\t\t\tmarkFeatureAsViewed(majorFeature.id);\n\t\t\t\t\t});\n\n\t\t\t\t\tsetShowMinorUpdates(true);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\n\t\t\t\tsetRunMajorJoyride(false);\n\t\t\t\tsetCurrentMajorFeature(null);\n\t\t\t\tsetMajorJoyrideSteps([]);\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst handleMinorJoyrideCallback = useCallback(\n\t\t(data) => {\n\t\t\tconst { action } = data;\n\n\t\t\tif (action === ACTIONS.CLOSE) {\n\t\t\t\tif (currentMinorFeature) {\n\t\t\t\t\tsetIsProcessingMinorUpdate(true);\n\n\t\t\t\t\t// Only mark the current feature as viewed, not all features\n\t\t\t\t\tmarkFeatureAsViewed(currentMinorFeature.id);\n\n\t\t\t\t\t// Check if there are more features to show\n\t\t\t\t\tconst currentIndex = availableMinorFeatures.findIndex(\n\t\t\t\t\t\t(f) => f.id === currentMinorFeature.id,\n\t\t\t\t\t);\n\t\t\t\t\tconst isLastFeature =\n\t\t\t\t\t\tcurrentIndex === availableMinorFeatures.length - 1;\n\n\t\t\t\t\tif (isLastFeature) {\n\t\t\t\t\t\t// Only skip remaining features if this was the last one\n\t\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetIsProcessingMinorUpdate(false);\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetJoyrideSteps([]);\n\t\t\t}\n\t\t},\n\t\t[currentMinorFeature, availableMinorFeatures, markFeatureAsViewed],\n\t);\n\tconst showMinorUpdateJoyride = async (feature, featuresToUse?) => {\n\t\tsetCurrentMinorFeature(feature);\n\n\t\t// Use provided features array or fall back to state (for test mode)\n\t\tconst features = featuresToUse || availableMinorFeatures;\n\t\tconst currentIndex = features.findIndex((f) => f.id === feature.id);\n\t\tconst totalFeatures = features.length;\n\n\t\tconst targetSelector =\n\t\t\tfeature.featureTag.startsWith('#') ||\n\t\t\tfeature.featureTag.startsWith('.') ||\n\t\t\tfeature.featureTag.startsWith('[')\n\t\t\t\t? feature.featureTag\n\t\t\t\t: `#${feature.featureTag}`;\n\n\t\t// Scroll to target element smoothly before showing popup\n\t\tconst targetElement = document.querySelector(targetSelector);\n\t\tif (targetElement) {\n\t\t\ttry {\n\t\t\t\t// Dynamically import to avoid circular dependencies\n\t\t\t\tconst { scrollToElementSmooth } = await import(\n\t\t\t\t\t'./utils/elementHelpers'\n\t\t\t\t);\n\t\t\t\tawait scrollToElementSmooth(targetElement, 120);\n\t\t\t} catch (error) {\n\t\t\t\t// Scroll failed silently\n\t\t\t}\n\t\t}\n\n\t\tconst minorSteps = [\n\t\t\t{\n\t\t\t\ttarget: targetSelector,\n\t\t\t\tcontent: (\n\t\t\t\t\t<MinorUpdatePopup\n\t\t\t\t\t\tfeature={feature}\n\t\t\t\t\t\tcurrentIndex={currentIndex}\n\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\tonSkip={() => handleSkipMinorUpdate(feature)}\n\t\t\t\t\t\tonExplore={() => handleExploreMinorFeature(feature)}\n\t\t\t\t\t\tonPrevious={() => handlePreviousMinorUpdate(feature)}\n\t\t\t\t\t\tonNext={() => handleNextMinorUpdate(feature)}\n\t\t\t\t\t\tsetIsClosing={setIsClosingMinor}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tplacement: 'bottom',\n\t\t\t\tplacementBeacon: 'bottom-end',\n\t\t\t\tdisableBeacon: true,\n\t\t\t\thideCloseButton: true,\n\t\t\t\thideSkipButton: true,\n\t\t\t\thideFooter: true,\n\t\t\t\toffset: 0,\n\t\t\t\tdata: { feature, isMinor: true },\n\t\t\t\tstyles: {\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t},\n\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t},\n\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t\tsetJoyrideSteps(minorSteps);\n\t\tsetRunJoyride(true);\n\t};\n\n\tconst handleSkipMinorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMinorFeature;\n\n\t\t\tif (targetFeature) {\n\t\t\t\tsetIsProcessingMinorUpdate(true);\n\n\t\t\t\t// Only mark the current feature as viewed, not all features\n\t\t\t\tmarkFeatureAsViewed(targetFeature.id);\n\n\t\t\t\t// Add to session tracker to prevent re-showing\n\t\t\t\tsetShownMinorFeatureIds((prev) => new Set(prev).add(targetFeature.id));\n\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetJoyrideSteps([]);\n\n\t\t\t\t// Find next unshown feature\n\t\t\t\tconst nextFeature = availableMinorFeatures.find(\n\t\t\t\t\t(f) => f.id !== targetFeature.id && !shownMinorFeatureIds.has(f.id),\n\t\t\t\t);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMinorUpdate(false);\n\n\t\t\t\t\tif (nextFeature) {\n\t\t\t\t\t\t// Auto-advance to next feature\n\t\t\t\t\t\tshowMinorUpdateJoyride(nextFeature, availableMinorFeatures);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No more features to show\n\t\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tcurrentMinorFeature,\n\t\t\tavailableMinorFeatures,\n\t\t\tmarkFeatureAsViewed,\n\t\t\tshownMinorFeatureIds,\n\t\t],\n\t);\n\n\tconst handleExploreMinorFeature = useCallback(\n\t\t(feature) => {\n\t\t\tsetIsProcessingMinorUpdate(true);\n\n\t\t\t// Only mark the current feature as viewed\n\t\t\tmarkFeatureAsViewed(feature.id);\n\n\t\t\t// Add to session tracker to prevent re-showing\n\t\t\tsetShownMinorFeatureIds((prev) => new Set(prev).add(feature.id));\n\n\t\t\tif (feature.productVideo) {\n\t\t\t\tsetVideoUrl(feature.productVideo);\n\t\t\t\tsetIsVideoModalOpen(true);\n\t\t\t\tsetBlockPopups(true);\n\t\t\t}\n\n\t\t\tsetRunJoyride(false);\n\t\t\tsetCurrentMinorFeature(null);\n\t\t\tsetJoyrideSteps([]);\n\n\t\t\t// Find next unshown feature (only auto-advance if no video modal)\n\t\t\tconst nextFeature = availableMinorFeatures.find(\n\t\t\t\t(f) => f.id !== feature.id && !shownMinorFeatureIds.has(f.id),\n\t\t\t);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetIsProcessingMinorUpdate(false);\n\n\t\t\t\t// Only auto-advance if no video modal is opened\n\t\t\t\tif (nextFeature && !feature.productVideo) {\n\t\t\t\t\t// Auto-advance to next feature\n\t\t\t\t\tshowMinorUpdateJoyride(nextFeature, availableMinorFeatures);\n\t\t\t\t} else if (!nextFeature) {\n\t\t\t\t\t// No more features to show\n\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t}\n\t\t\t\t// If video modal opened, wait for user to close it before advancing\n\t\t\t}, 500);\n\t\t},\n\t\t[availableMinorFeatures, markFeatureAsViewed, shownMinorFeatureIds],\n\t);\n\n\tconst handlePreviousMinorUpdate = useCallback(\n\t\tasync (feature) => {\n\t\t\tconst targetFeature = feature || currentMinorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = availableMinorFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex > 0) {\n\t\t\t\tconst prevFeature = availableMinorFeatures[currentIndex - 1];\n\t\t\t\tsetCurrentMinorFeature(prevFeature);\n\n\t\t\t\tconst targetSelector =\n\t\t\t\t\tprevFeature.featureTag.startsWith('#') ||\n\t\t\t\t\tprevFeature.featureTag.startsWith('.') ||\n\t\t\t\t\tprevFeature.featureTag.startsWith('[')\n\t\t\t\t\t\t? prevFeature.featureTag\n\t\t\t\t\t\t: `#${prevFeature.featureTag}`;\n\n\t\t\t\t// Scroll to the previous feature element\n\t\t\t\tconst targetElement = document.querySelector(targetSelector);\n\t\t\t\tif (targetElement) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { scrollToElementSmooth } = await import(\n\t\t\t\t\t\t\t'./utils/elementHelpers'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait scrollToElementSmooth(targetElement, 120);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// Scroll failed silently\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst prevIndex = currentIndex - 1;\n\t\t\t\tconst totalFeatures = availableMinorFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: targetSelector,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MinorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={prevFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={prevIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMinorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreMinorFeature(prevFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMinorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMinorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMinor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\tplacementBeacon: 'bottom-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: prevFeature, isMinor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetJoyrideSteps(updatedSteps);\n\t\t\t}\n\t\t},\n\t\t[currentMinorFeature, availableMinorFeatures],\n\t);\n\n\tconst handleNextMinorUpdate = useCallback(\n\t\tasync (feature) => {\n\t\t\tconst targetFeature = feature || currentMinorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = availableMinorFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex < availableMinorFeatures.length - 1) {\n\t\t\t\tconst nextFeature = availableMinorFeatures[currentIndex + 1];\n\t\t\t\tsetCurrentMinorFeature(nextFeature);\n\n\t\t\t\tconst targetSelector =\n\t\t\t\t\tnextFeature.featureTag.startsWith('#') ||\n\t\t\t\t\tnextFeature.featureTag.startsWith('.') ||\n\t\t\t\t\tnextFeature.featureTag.startsWith('[')\n\t\t\t\t\t\t? nextFeature.featureTag\n\t\t\t\t\t\t: `#${nextFeature.featureTag}`;\n\n\t\t\t\t// Scroll to the next feature element\n\t\t\t\tconst targetElement = document.querySelector(targetSelector);\n\t\t\t\tif (targetElement) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { scrollToElementSmooth } = await import(\n\t\t\t\t\t\t\t'./utils/elementHelpers'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait scrollToElementSmooth(targetElement, 120);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// Scroll failed silently\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\t\tconst totalFeatures = availableMinorFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: targetSelector,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MinorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={nextFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={nextIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMinorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreMinorFeature(nextFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMinorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMinorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMinor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\tplacementBeacon: 'bottom-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: nextFeature, isMinor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetJoyrideSteps(updatedSteps);\n\t\t\t} else {\n\t\t\t\tsetIsProcessingMinorUpdate(true);\n\t\t\t\tsetMinorFeaturesSkipped(true);\n\n\t\t\t\tmarkFeatureAsViewed(targetFeature.id);\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetJoyrideSteps([]);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMinorUpdate(false);\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t[currentMinorFeature, availableMinorFeatures, markFeatureAsViewed],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{children}\n\n\t\t\t{majorJoyrideSteps.length > 0 && (\n\t\t\t\t<Joyride\n\t\t\t\t\tkey={`major-joyride-${majorJoyrideKey}`}\n\t\t\t\t\tsteps={majorJoyrideSteps}\n\t\t\t\t\trun={runMajorJoyride}\n\t\t\t\t\tcontinuous={false}\n\t\t\t\t\tshowProgress={false}\n\t\t\t\t\tshowSkipButton={false}\n\t\t\t\t\tcallback={handleMajorJoyrideCallback}\n\t\t\t\t\tdisableOverlayClose={true}\n\t\t\t\t\tdisableCloseOnEsc={false}\n\t\t\t\t\tdisableOverlay={false}\n\t\t\t\t\tspotlightClicks={false}\n\t\t\t\t\tstyles={{\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tprimaryColor: '#007bff',\n\t\t\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\t\tarrowColor: isClosingMajor ? 'transparent' : '#212121',\n\t\t\t\t\t\t},\n\t\t\t\t\t\toverlay: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspotlight: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\t\tfontSize: '14px',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tlocale={{\n\t\t\t\t\t\tback: 'Back',\n\t\t\t\t\t\tclose: 'Close',\n\t\t\t\t\t\tlast: 'Close',\n\t\t\t\t\t\tnext: 'Next',\n\t\t\t\t\t\tskip: 'Skip',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{joyrideSteps.length > 0 && (\n\t\t\t\t<Joyride\n\t\t\t\t\tkey={`minor-joyride-${minorJoyrideKey}`}\n\t\t\t\t\tsteps={joyrideSteps}\n\t\t\t\t\trun={runJoyride}\n\t\t\t\t\tcontinuous={false}\n\t\t\t\t\tshowProgress={false}\n\t\t\t\t\tshowSkipButton={false}\n\t\t\t\t\tcallback={handleMinorJoyrideCallback}\n\t\t\t\t\tdisableOverlayClose={true}\n\t\t\t\t\tdisableCloseOnEsc={false}\n\t\t\t\t\tdisableOverlay={false}\n\t\t\t\t\tscrollToFirstStep={true}\n\t\t\t\t\tscrollOffset={120}\n\t\t\t\t\tdisableScrolling={false}\n\t\t\t\t\tstyles={{\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tprimaryColor: '#007bff',\n\t\t\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\t\tarrowColor: isClosingMinor ? 'transparent' : '#ffffff',\n\t\t\t\t\t\t},\n\t\t\t\t\t\toverlay: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspotlight: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborderRadius: '8px',\n\t\t\t\t\t\t\tboxShadow: isClosingMinor\n\t\t\t\t\t\t\t\t? 'none'\n\t\t\t\t\t\t\t\t: '0 0 0 9999px rgba(0, 0, 0, 0.4), 0 0 0 3px rgba(255, 255, 255, 0.8), 0 0 20px 8px rgba(255, 255, 255, 0.4)',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\tfontSize: '14px',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tlocale={{\n\t\t\t\t\t\tback: 'Back',\n\t\t\t\t\t\tclose: 'Close',\n\t\t\t\t\t\tlast: 'Close',\n\t\t\t\t\t\tnext: 'Next',\n\t\t\t\t\t\tskip: 'Skip',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<VideoModal\n\t\t\t\tisOpen={isVideoModalOpen}\n\t\t\t\tvideoUrl={videoUrl}\n\t\t\t\tonClose={() => {\n\t\t\t\t\tsetIsVideoModalOpen(false);\n\t\t\t\t\tsetVideoUrl('');\n\t\t\t\t\tsetBlockPopups(false);\n\n\t\t\t\t\t// After video modal closes, check if there are more features to show\n\t\t\t\t\tconst nextFeature = availableMinorFeatures.find(\n\t\t\t\t\t\t(f) => !shownMinorFeatureIds.has(f.id),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (nextFeature) {\n\t\t\t\t\t\t// Auto-advance to next feature after video\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tshowMinorUpdateJoyride(nextFeature, availableMinorFeatures);\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No more features to show\n\t\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t);\n\n};\n\nexport default FeatureAnnouncementProvider;\n"],"names":["_ref","children","fetchVisibleFeatures","getStoreFeatureProgress","fetchFeatureById","markFeatureAsViewedForStore","isFeatureApplicableToCurrentPage","module","router","storeId","onAnnouncementShown","onAnnouncementInteracted","majorUpdateFeatures","minorUpdateFeatures","isLoading","markFeatureAsViewed","useFeatureAnnouncements","currentMajorFeature","setCurrentMajorFeature","useState","currentMinorFeature","setCurrentMinorFeature","runJoyride","setRunJoyride","joyrideSteps","setJoyrideSteps","runMajorJoyride","setRunMajorJoyride","majorJoyrideSteps","setMajorJoyrideSteps","isProcessingMajorUpdate","setIsProcessingMajorUpdate","isProcessingMinorUpdate","setIsProcessingMinorUpdate","availableMinorFeatures","setAvailableMinorFeatures","minorFeaturesSkipped","setMinorFeaturesSkipped","showMinorUpdates","setShowMinorUpdates","isVideoModalOpen","setIsVideoModalOpen","videoUrl","setVideoUrl","blockPopups","setBlockPopups","isClosingMajor","setIsClosingMajor","isClosingMinor","setIsClosingMinor","majorJoyrideKey","setMajorJoyrideKey","minorJoyrideKey","setMinorJoyrideKey","shownMinorFeatureIds","setShownMinorFeatureIds","Set","useEffect","styleId","styleElement","document","getElementById","createElement","id","head","appendChild","textContent","el","remove","prev","pathname","length","attempts","MAX_ATTEMPTS","checkWhatsNewButton","querySelector","showMajorUpdateJoyride","setTimeout","featureIdFromQuery","_a","query","forcedFeature","find","f","featureTag","interval","setInterval","targetSelector","startsWith","testModeFeatures","showMinorUpdateJoyride","clearInterval","observer","scrollListener","checkTimeout","isCleanedUp","checkElementsAndStartTour","availableFeatures","filter","feature","trim","has","disconnect","window","removeEventListener","clearTimeout","MutationObserver","mutations","shouldCheck","mutation","type","addedNodes","i","node","nodeType","Node","ELEMENT_NODE","element","requestAnimationFrame","observe","body","childList","subtree","addEventListener","passive","currentIndex","findIndex","totalFeatures","majorSteps","target","SELECTORS","WHATS_NEW_BUTTON","content","_jsx","jsx","MajorUpdatePopup","onSkip","handleSkipMajorUpdate","onExplore","handleExploreFeature","onPrevious","handlePreviousMajorUpdate","onNext","handleNextMajorUpdate","setIsClosing","placement","placementBeacon","disableBeacon","hideCloseButton","hideSkipButton","hideFooter","offset","data","isMajor","styles","tooltip","padding","backgroundColor","borderRadius","border","boxShadow","tooltipContent","buttonNext","display","buttonBack","buttonClose","buttonSkip","announcementId","announcementTitle","title","imageUrl","displayImage","image","productVideo","useCallback","targetFeature","forEach","majorFeature","buttonClicked","buttonName","buttonUrl","undefined","buttonText","redirectUrl","prevFeature","prevIndex","updatedSteps","nextFeature","nextIndex","showMajorUpdatePopup","handleMajorJoyrideCallback","action","ACTIONS","CLOSE","handleMinorJoyrideCallback","featuresToUse","__awaiter","features","targetElement","scrollToElementSmooth","Promise","resolve","then","require","error","minorSteps","MinorUpdatePopup","handleSkipMinorUpdate","handleExploreMinorFeature","handlePreviousMinorUpdate","handleNextMinorUpdate","isMinor","add","_jsxs","_Fragment","Joyride","steps","run","continuous","showProgress","showSkipButton","callback","disableOverlayClose","disableCloseOnEsc","disableOverlay","spotlightClicks","options","primaryColor","zIndex","width","arrowColor","overlay","spotlight","fontSize","locale","back","close","last","next","skip","scrollToFirstStep","scrollOffset","disableScrolling","VideoModal","isOpen","onClose"],"mappings":"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"}
1
+ {"version":3,"file":"FeatureAnnouncementProvider.js","sources":["../../../../src/components/feature-announcements/FeatureAnnouncementProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport Joyride, { ACTIONS } from 'react-joyride';\nimport { SELECTORS } from './constants';\nimport { useFeatureAnnouncements } from './hooks';\nimport MajorUpdatePopup from './MajorUpdatePopup';\nimport MinorUpdatePopup from './MinorUpdatePopup';\nimport { FeatureAnnouncement, FeatureAnnouncementProviderProps } from './types';\nimport { VideoModal } from './VideoModal';\n\nconst FeatureAnnouncementProvider: React.FC<\n\tFeatureAnnouncementProviderProps\n> = ({\n\tchildren,\n\tfetchVisibleFeatures,\n\tgetStoreFeatureProgress,\n\tfetchFeatureById,\n\tmarkFeatureAsViewedForStore,\n\tisFeatureApplicableToCurrentPage,\n\tmodule,\n\trouter,\n\tstoreId,\n\tonAnnouncementShown,\n\tonAnnouncementInteracted,\n}) => {\n\tconst {\n\t\tmajorUpdateFeatures,\n\t\tminorUpdateFeatures,\n\t\tisLoading,\n\t\tmarkFeatureAsViewed,\n\t} = useFeatureAnnouncements({\n\t\tfetchVisibleFeatures,\n\t\tgetStoreFeatureProgress,\n\t\tfetchFeatureById,\n\t\tmarkFeatureAsViewedForStore,\n\t\tisFeatureApplicableToCurrentPage,\n\t\tmodule,\n\t\trouter,\n\t});\n\n\tconst [currentMajorFeature, setCurrentMajorFeature] =\n\t\tuseState<FeatureAnnouncement | null>(null);\n\tconst [currentMinorFeature, setCurrentMinorFeature] =\n\t\tuseState<FeatureAnnouncement | null>(null);\n\tconst [runJoyride, setRunJoyride] = useState(false);\n\tconst [joyrideSteps, setJoyrideSteps] = useState<any[]>([]);\n\tconst [runMajorJoyride, setRunMajorJoyride] = useState(false);\n\tconst [majorJoyrideSteps, setMajorJoyrideSteps] = useState<any[]>([]);\n\tconst [isProcessingMajorUpdate, setIsProcessingMajorUpdate] = useState(false);\n\tconst [isProcessingMinorUpdate, setIsProcessingMinorUpdate] = useState(false);\n\tconst [availableMinorFeatures, setAvailableMinorFeatures] = useState<\n\t\tFeatureAnnouncement[]\n\t>([]);\n\tconst [minorFeaturesSkipped, setMinorFeaturesSkipped] = useState(false);\n\tconst [showMinorUpdates, setShowMinorUpdates] = useState(false);\n\tconst [isVideoModalOpen, setIsVideoModalOpen] = useState(false);\n\tconst [videoUrl, setVideoUrl] = useState('');\n\tconst [blockPopups, setBlockPopups] = useState(false);\n\tconst [isClosingMajor, setIsClosingMajor] = useState(false);\n\tconst [isClosingMinor, setIsClosingMinor] = useState(false);\n\tconst [majorJoyrideKey, setMajorJoyrideKey] = useState(0);\n\tconst [minorJoyrideKey, setMinorJoyrideKey] = useState(0);\n\tconst [shownMinorFeatureIds, setShownMinorFeatureIds] = useState<Set<string>>(\n\t\tnew Set(),\n\t);\n\n\t// Add custom style for spotlight cutout effect\n\tuseEffect(() => {\n\t\tconst styleId = 'minor-spotlight-cutout-style';\n\t\tlet styleElement = document.getElementById(styleId) as HTMLStyleElement;\n\n\t\tif (!styleElement) {\n\t\t\tstyleElement = document.createElement('style');\n\t\t\tstyleElement.id = styleId;\n\t\t\tdocument.head.appendChild(styleElement);\n\t\t}\n\n\t\tstyleElement.textContent = `\n\t\t\t.react-joyride__spotlight {\n\t\t\t\ttransition: box-shadow 0.3s ease-in-out !important;\n\t\t\t\twill-change: box-shadow, transform;\n\t\t\t\ttransform: translateZ(0);\n\t\t\t}\n\t\t\t.react-joyride__tooltip {\n\t\t\t\twill-change: transform, opacity;\n\t\t\t\ttransform: translateZ(0);\n\t\t\t}\n\t\t\t.react-joyride__floater {\n\t\t\t\tright: 12px !important;\n\t\t\t\tleft: auto !important;\n\t\t\t}\n\t\t`;\n\n\t\treturn () => {\n\t\t\tconst el = document.getElementById(styleId);\n\t\t\tif (el) {\n\t\t\t\tel.remove();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// Force Joyride remount on navigation to prevent stale state\n\tuseEffect(() => {\n\t\tsetMajorJoyrideKey((prev) => prev + 1);\n\t\tsetMinorJoyrideKey((prev) => prev + 1);\n\t\tsetIsClosingMajor(false);\n\t\tsetIsClosingMinor(false);\n\t\t// Reset session tracking on navigation to allow features to show on new pages\n\t\tsetShownMinorFeatureIds(new Set());\n\t}, [router?.pathname]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tmajorUpdateFeatures.length > 0 &&\n\t\t\t!currentMajorFeature &&\n\t\t\t!isLoading &&\n\t\t\t!isProcessingMajorUpdate &&\n\t\t\t!blockPopups\n\t\t) {\n\t\t\tsetShowMinorUpdates(false);\n\t\t\tsetMinorFeaturesSkipped(false);\n\t\t\tsetRunJoyride(false);\n\t\t\tsetJoyrideSteps([]);\n\t\t\tsetCurrentMinorFeature(null);\n\t\t\tsetAvailableMinorFeatures([]);\n\n\t\t\tlet attempts = 0;\n\t\t\tconst MAX_ATTEMPTS = 10;\n\n\t\t\tconst checkWhatsNewButton = () => {\n\t\t\t\tattempts++;\n\t\t\t\tconst whatsNewButton = document.querySelector(\n\t\t\t\t\t'[data-testid=\"whats-new-button\"]',\n\t\t\t\t);\n\n\t\t\t\tif (whatsNewButton) {\n\t\t\t\t\tshowMajorUpdateJoyride(majorUpdateFeatures[0]);\n\t\t\t\t} else if (attempts < MAX_ATTEMPTS) {\n\t\t\t\t\tsetTimeout(checkWhatsNewButton, 1000);\n\t\t\t\t} else {\n\t\t\t\t\tsetShowMinorUpdates(true);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcheckWhatsNewButton();\n\t\t} else if (majorUpdateFeatures.length === 0 && !isLoading) {\n\t\t\tsetShowMinorUpdates(true);\n\t\t}\n\t}, [\n\t\tmajorUpdateFeatures,\n\t\tcurrentMajorFeature,\n\t\tisLoading,\n\t\tisProcessingMajorUpdate,\n\t\tblockPopups,\n\t]);\n\n\tuseEffect(() => {\n\t\t// Only run this special logic if a feature is being forced via URL\n\t\tconst featureIdFromQuery = router?.query?.['featureId'] as string;\n\n\t\tif (!featureIdFromQuery || isLoading || minorUpdateFeatures.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst forcedFeature = minorUpdateFeatures.find(\n\t\t\t(f) => f.id === featureIdFromQuery,\n\t\t);\n\n\t\tif (!forcedFeature || !forcedFeature.featureTag) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Prevent the standard flow from interfering\n\t\tsetMinorFeaturesSkipped(true);\n\t\t// Mark that we're processing to prevent other effects from interfering\n\t\tsetIsProcessingMinorUpdate(true);\n\n\t\tlet attempts = 0;\n\t\tconst maxAttempts = 25; // 5 seconds\n\t\tconst interval = setInterval(() => {\n\t\t\tattempts++;\n\t\t\tconst targetSelector =\n\t\t\t\tforcedFeature.featureTag.startsWith('#') ||\n\t\t\t\tforcedFeature.featureTag.startsWith('.') ||\n\t\t\t\tforcedFeature.featureTag.startsWith('[')\n\t\t\t\t\t? forcedFeature.featureTag\n\t\t\t\t\t: `#${forcedFeature.featureTag}`;\n\n\t\t\tconst element = document.querySelector(targetSelector);\n\n\t\t\tif (element) {\n\t\t\t\t// In test mode, pass the feature array directly to avoid async state issues\n\t\t\t\tconst testModeFeatures = [forcedFeature];\n\t\t\t\tsetAvailableMinorFeatures(testModeFeatures);\n\t\t\t\tshowMinorUpdateJoyride(forcedFeature, testModeFeatures);\n\t\t\t\t// Don't reset processing flag here - let user interaction handle it\n\t\t\t\t// This prevents auto-closing when multiple popups exist or when scrolling\n\t\t\t\tclearInterval(interval);\n\t\t\t} else if (attempts >= maxAttempts) {\n\t\t\t\t// Fallback for safety, though user expects it to be there.\n\t\t\t\t// We could log an error here.\n\t\t\t\t// Only reset on timeout (element not found)\n\t\t\t\tsetIsProcessingMinorUpdate(false);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 200);\n\n\t\treturn () => {\n\t\t\tclearInterval(interval);\n\t\t\t// Don't reset processing flag on cleanup - it causes premature popup closure\n\t\t\t// The flag will be managed by user interactions (skip/explore handlers)\n\t\t};\n\t}, [minorUpdateFeatures, router?.query?.['featureId'], isLoading]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tminorUpdateFeatures.length > 0 &&\n\t\t\t!isLoading &&\n\t\t\t!runJoyride &&\n\t\t\t!isProcessingMinorUpdate &&\n\t\t\t!currentMinorFeature &&\n\t\t\t!minorFeaturesSkipped &&\n\t\t\tshowMinorUpdates &&\n\t\t\t!blockPopups\n\t\t) {\n\t\t\tlet observer: MutationObserver | null = null;\n\t\t\tlet scrollListener: (() => void) | null = null;\n\t\t\tlet checkTimeout: ReturnType<typeof setTimeout> | null = null;\n\t\t\tlet isCleanedUp = false;\n\n\t\t\tconst checkElementsAndStartTour = () => {\n\t\t\t\tif (\n\t\t\t\t\tisCleanedUp ||\n\t\t\t\t\tisProcessingMinorUpdate ||\n\t\t\t\t\tcurrentMinorFeature ||\n\t\t\t\t\tminorFeaturesSkipped ||\n\t\t\t\t\t!showMinorUpdates\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\tconst availableFeatures = minorUpdateFeatures.filter((feature) => {\n\t\t\t\t\tif (!feature.featureTag || feature.featureTag.trim() === '') {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Skip features already shown in this session\n\t\t\t\t\tif (shownMinorFeatureIds.has(feature.id)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst targetSelector =\n\t\t\t\t\t\tfeature.featureTag.startsWith('#') ||\n\t\t\t\t\t\tfeature.featureTag.startsWith('.') ||\n\t\t\t\t\t\tfeature.featureTag.startsWith('[')\n\t\t\t\t\t\t\t? feature.featureTag\n\t\t\t\t\t\t\t: `#${feature.featureTag}`;\n\n\t\t\t\t\tconst element = document.querySelector(targetSelector);\n\t\t\t\t\treturn element !== null;\n\t\t\t\t});\n\n\t\t\t\tif (availableFeatures.length > 0) {\n\t\t\t\t\tsetAvailableMinorFeatures(availableFeatures);\n\t\t\t\t\t// Pass features directly to avoid async state issues\n\t\t\t\t\tshowMinorUpdateJoyride(availableFeatures[0], availableFeatures);\n\n\t\t\t\t\tif (observer) {\n\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t\tobserver = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (scrollListener) {\n\t\t\t\t\t\twindow.removeEventListener('scroll', scrollListener);\n\t\t\t\t\t\tscrollListener = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (checkTimeout) {\n\t\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t\t\tcheckTimeout = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tobserver = new MutationObserver((mutations) => {\n\t\t\t\tlet shouldCheck = false;\n\t\t\t\tfor (const mutation of mutations) {\n\t\t\t\t\tif (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\n\t\t\t\t\t\tfor (let i = 0; i < mutation.addedNodes.length; i++) {\n\t\t\t\t\t\t\tconst node = mutation.addedNodes[i];\n\t\t\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\t\t\tconst element = node as Element;\n\t\t\t\t\t\t\t\tif (element.id || element.querySelector('[id]')) {\n\t\t\t\t\t\t\t\t\tshouldCheck = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (shouldCheck) break;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!runJoyride &&\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates &&\n\t\t\t\t\tshouldCheck\n\t\t\t\t) {\n\t\t\t\t\tif (checkTimeout) {\n\t\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t\tcheckTimeout = setTimeout(() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\t\t\tshowMinorUpdates\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 200);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscrollListener = () => {\n\t\t\t\tif (\n\t\t\t\t\t!runJoyride &&\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tif (checkTimeout) {\n\t\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t\t// Use RAF for smoother performance synced with browser paint\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tcheckTimeout = setTimeout(() => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\t\t\t\tshowMinorUpdates\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (observer) {\n\t\t\t\tobserver.observe(document.body, {\n\t\t\t\t\tchildList: true,\n\t\t\t\t\tsubtree: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (scrollListener) {\n\t\t\t\twindow.addEventListener('scroll', scrollListener, { passive: true });\n\t\t\t}\n\n\t\t\tcheckElementsAndStartTour();\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t}\n\t\t\t}, 100);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t}\n\t\t\t}, 1000);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (\n\t\t\t\t\t!isCleanedUp &&\n\t\t\t\t\t!isProcessingMinorUpdate &&\n\t\t\t\t\t!currentMinorFeature &&\n\t\t\t\t\t!minorFeaturesSkipped &&\n\t\t\t\t\tshowMinorUpdates\n\t\t\t\t) {\n\t\t\t\t\tcheckElementsAndStartTour();\n\t\t\t\t}\n\t\t\t}, 500);\n\n\t\t\treturn () => {\n\t\t\t\tisCleanedUp = true;\n\t\t\t\tif (observer) {\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t\tif (scrollListener) {\n\t\t\t\t\twindow.removeEventListener('scroll', scrollListener);\n\t\t\t\t}\n\t\t\t\tif (checkTimeout) {\n\t\t\t\t\tclearTimeout(checkTimeout);\n\t\t\t\t}\n\t\t\t};\n\t\t} else if (minorUpdateFeatures.length === 0 || isLoading) {\n\t\t\t// Don't clear joyride if we're in test mode with an active feature\n\t\t\tconst featureIdFromQuery = router?.query?.['featureId'] as string;\n\t\t\tconst isTestModeWithActiveFeature =\n\t\t\t\tfeatureIdFromQuery && currentMinorFeature;\n\n\t\t\tif (!isTestModeWithActiveFeature) {\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetJoyrideSteps([]);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetAvailableMinorFeatures([]);\n\t\t\t\tsetMinorFeaturesSkipped(false);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tminorUpdateFeatures,\n\t\tisLoading,\n\t\trunJoyride,\n\t\tisProcessingMinorUpdate,\n\t\tcurrentMinorFeature,\n\t\tminorFeaturesSkipped,\n\t\tshowMinorUpdates,\n\t\tmarkFeatureAsViewed,\n\t\tblockPopups,\n\t]);\n\n\tconst showMajorUpdateJoyride = (feature) => {\n\t\tsetCurrentMajorFeature(feature);\n\n\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t(f) => f.id === feature.id,\n\t\t);\n\t\tconst totalFeatures = majorUpdateFeatures.length;\n\n\t\tconst majorSteps = [\n\t\t\t{\n\t\t\t\ttarget: SELECTORS.WHATS_NEW_BUTTON,\n\t\t\t\tcontent: (\n\t\t\t\t\t<MajorUpdatePopup\n\t\t\t\t\t\tfeature={feature}\n\t\t\t\t\t\tcurrentIndex={currentIndex}\n\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\tonSkip={() => handleSkipMajorUpdate(feature)}\n\t\t\t\t\t\tonExplore={() => handleExploreFeature(feature)}\n\t\t\t\t\t\tonPrevious={() => handlePreviousMajorUpdate(feature)}\n\t\t\t\t\t\tonNext={() => handleNextMajorUpdate(feature)}\n\t\t\t\t\t\tsetIsClosing={setIsClosingMajor}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tplacementBeacon: 'top-end',\n\t\t\t\tdisableBeacon: true,\n\t\t\t\thideCloseButton: true,\n\t\t\t\thideSkipButton: true,\n\t\t\t\thideFooter: true,\n\t\t\t\toffset: 0,\n\t\t\t\tdata: { feature, isMajor: true },\n\t\t\t\tstyles: {\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t},\n\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t},\n\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\tsetMajorJoyrideSteps(majorSteps);\n\t\tsetRunMajorJoyride(true);\n\n\t\t// Fire announcement shown callback\n\t\tif (onAnnouncementShown && storeId) {\n\t\t\tonAnnouncementShown({\n\t\t\t\tstoreId,\n\t\t\t\tannouncementId: feature.id,\n\t\t\t\tannouncementTitle: feature.title,\n\t\t\t\timageUrl: feature.displayImage || feature.image,\n\t\t\t\tvideoUrl: feature.productVideo,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst handleSkipMajorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMajorFeature;\n\n\t\t\tif (targetFeature) {\n\t\t\t\tsetIsProcessingMajorUpdate(true);\n\n\t\t\t\tmajorUpdateFeatures.forEach((majorFeature) => {\n\t\t\t\t\tmarkFeatureAsViewed(majorFeature.id);\n\t\t\t\t});\n\n\t\t\t\tsetRunMajorJoyride(false);\n\t\t\t\tsetCurrentMajorFeature(null);\n\t\t\t\tsetMajorJoyrideSteps([]);\n\n\t\t\t\tsetShowMinorUpdates(true);\n\n\t\t\t\t// Fire announcement interacted callback for Skip\n\t\t\t\tif (onAnnouncementInteracted && storeId) {\n\t\t\t\t\tonAnnouncementInteracted({\n\t\t\t\t\t\tstoreId,\n\t\t\t\t\t\tannouncementId: targetFeature.id,\n\t\t\t\t\t\tannouncementTitle: targetFeature.title,\n\t\t\t\t\t\timageUrl: targetFeature.displayImage || targetFeature.image,\n\t\t\t\t\t\tvideoUrl: targetFeature.productVideo,\n\t\t\t\t\t\tbuttonClicked: 'Skip',\n\t\t\t\t\t\tbuttonName: 'Skip',\n\t\t\t\t\t\tbuttonUrl: undefined,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t\t}, 500);\n\t\t\t} else {\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst handleExploreFeature = useCallback(\n\t\t(feature) => {\n\t\t\tsetIsProcessingMajorUpdate(true);\n\t\t\tmarkFeatureAsViewed(feature.id);\n\t\t\tif (feature.productVideo) {\n\t\t\t\tsetVideoUrl(feature.productVideo);\n\t\t\t\tsetIsVideoModalOpen(true);\n\t\t\t\tsetBlockPopups(true);\n\t\t\t}\n\t\t\tsetRunMajorJoyride(false);\n\t\t\tsetCurrentMajorFeature(null);\n\t\t\tsetMajorJoyrideSteps([]);\n\t\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t\t(f) => f.id === feature.id,\n\t\t\t);\n\t\t\tconst isLastMajorUpdate = currentIndex === majorUpdateFeatures.length - 1;\n\t\t\tif (isLastMajorUpdate) {\n\t\t\t\tsetShowMinorUpdates(true);\n\t\t\t}\n\n\t\t\t// Fire announcement interacted callback for Primary button\n\t\t\tif (onAnnouncementInteracted && storeId) {\n\t\t\t\tonAnnouncementInteracted({\n\t\t\t\t\tstoreId,\n\t\t\t\t\tannouncementId: feature.id,\n\t\t\t\t\tannouncementTitle: feature.title,\n\t\t\t\t\timageUrl: feature.displayImage || feature.image,\n\t\t\t\t\tvideoUrl: feature.productVideo,\n\t\t\t\t\tbuttonClicked: 'Primary',\n\t\t\t\t\tbuttonName: feature.buttonText || 'Explore',\n\t\t\t\t\tbuttonUrl: feature.redirectUrl || feature.productVideo,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t}, 500);\n\t\t},\n\t\t[majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst handlePreviousMajorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMajorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex > 0) {\n\t\t\t\tconst prevFeature = majorUpdateFeatures[currentIndex - 1];\n\t\t\t\tsetCurrentMajorFeature(prevFeature);\n\n\t\t\t\tconst prevIndex = currentIndex - 1;\n\t\t\t\tconst totalFeatures = majorUpdateFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: '[data-testid=\"whats-new-button\"]',\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MajorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={prevFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={prevIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMajorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreFeature(prevFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMajorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMajorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMajor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom-start',\n\t\t\t\t\t\tplacementBeacon: 'top-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: prevFeature, isMajor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetMajorJoyrideSteps(updatedSteps);\n\t\t\t} else {\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures],\n\t);\n\n\tconst handleNextMajorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMajorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = majorUpdateFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex < majorUpdateFeatures.length - 1) {\n\t\t\t\tconst nextFeature = majorUpdateFeatures[currentIndex + 1];\n\t\t\t\tsetCurrentMajorFeature(nextFeature);\n\n\t\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\t\tconst totalFeatures = majorUpdateFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: '[data-testid=\"whats-new-button\"]',\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MajorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={nextFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={nextIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMajorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreFeature(nextFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMajorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMajorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMajor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom-start',\n\t\t\t\t\t\tplacementBeacon: 'top-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: nextFeature, isMajor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetMajorJoyrideSteps(updatedSteps);\n\t\t\t} else {\n\t\t\t\tsetIsProcessingMajorUpdate(true);\n\n\t\t\t\tmarkFeatureAsViewed(targetFeature.id);\n\t\t\t\tsetRunMajorJoyride(false);\n\t\t\t\tsetCurrentMajorFeature(null);\n\t\t\t\tsetMajorJoyrideSteps([]);\n\n\t\t\t\tsetShowMinorUpdates(true);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst showMajorUpdatePopup = () => {\n\t\tif (majorUpdateFeatures.length > 0 && !currentMajorFeature) {\n\t\t\tconst whatsNewButton = document.querySelector(\n\t\t\t\t'[data-testid=\"whats-new-button\"]',\n\t\t\t);\n\n\t\t\tif (whatsNewButton) {\n\t\t\t\tshowMajorUpdateJoyride(majorUpdateFeatures[0]);\n\t\t\t}\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\t(window as any).showMajorUpdatePopup = showMajorUpdatePopup;\n\t\treturn () => {\n\t\t\tdelete (window as any).showMajorUpdatePopup;\n\t\t};\n\t}, [majorUpdateFeatures, currentMajorFeature]);\n\tconst handleMajorJoyrideCallback = useCallback(\n\t\t(data) => {\n\t\t\tconst { action } = data;\n\n\t\t\tif (action === ACTIONS.CLOSE) {\n\t\t\t\tif (currentMajorFeature) {\n\t\t\t\t\tsetIsProcessingMajorUpdate(true);\n\n\t\t\t\t\tmajorUpdateFeatures.forEach((majorFeature) => {\n\t\t\t\t\t\tmarkFeatureAsViewed(majorFeature.id);\n\t\t\t\t\t});\n\n\t\t\t\t\tsetShowMinorUpdates(true);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetIsProcessingMajorUpdate(false);\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\n\t\t\t\tsetRunMajorJoyride(false);\n\t\t\t\tsetCurrentMajorFeature(null);\n\t\t\t\tsetMajorJoyrideSteps([]);\n\t\t\t}\n\t\t},\n\t\t[currentMajorFeature, majorUpdateFeatures, markFeatureAsViewed],\n\t);\n\n\tconst handleMinorJoyrideCallback = useCallback(\n\t\t(data) => {\n\t\t\tconst { action } = data;\n\n\t\t\tif (action === ACTIONS.CLOSE) {\n\t\t\t\tif (currentMinorFeature) {\n\t\t\t\t\tsetIsProcessingMinorUpdate(true);\n\n\t\t\t\t\t// Only mark the current feature as viewed, not all features\n\t\t\t\t\tmarkFeatureAsViewed(currentMinorFeature.id);\n\n\t\t\t\t\t// Check if there are more features to show\n\t\t\t\t\tconst currentIndex = availableMinorFeatures.findIndex(\n\t\t\t\t\t\t(f) => f.id === currentMinorFeature.id,\n\t\t\t\t\t);\n\t\t\t\t\tconst isLastFeature =\n\t\t\t\t\t\tcurrentIndex === availableMinorFeatures.length - 1;\n\n\t\t\t\t\tif (isLastFeature) {\n\t\t\t\t\t\t// Only skip remaining features if this was the last one\n\t\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tsetIsProcessingMinorUpdate(false);\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetJoyrideSteps([]);\n\t\t\t}\n\t\t},\n\t\t[currentMinorFeature, availableMinorFeatures, markFeatureAsViewed],\n\t);\n\tconst showMinorUpdateJoyride = async (feature, featuresToUse?) => {\n\t\tsetCurrentMinorFeature(feature);\n\n\t\t// Use provided features array or fall back to state (for test mode)\n\t\tconst features = featuresToUse || availableMinorFeatures;\n\t\tconst currentIndex = features.findIndex((f) => f.id === feature.id);\n\t\tconst totalFeatures = features.length;\n\n\t\tconst targetSelector =\n\t\t\tfeature.featureTag.startsWith('#') ||\n\t\t\tfeature.featureTag.startsWith('.') ||\n\t\t\tfeature.featureTag.startsWith('[')\n\t\t\t\t? feature.featureTag\n\t\t\t\t: `#${feature.featureTag}`;\n\n\t\t// Scroll to target element smoothly before showing popup\n\t\tconst targetElement = document.querySelector(targetSelector);\n\t\tif (targetElement) {\n\t\t\ttry {\n\t\t\t\t// Dynamically import to avoid circular dependencies\n\t\t\t\tconst { scrollToElementSmooth } = await import(\n\t\t\t\t\t'./utils/elementHelpers'\n\t\t\t\t);\n\t\t\t\tawait scrollToElementSmooth(targetElement, 120);\n\t\t\t} catch (error) {\n\t\t\t\t// Scroll failed silently\n\t\t\t}\n\t\t}\n\n\t\tconst minorSteps = [\n\t\t\t{\n\t\t\t\ttarget: targetSelector,\n\t\t\t\tcontent: (\n\t\t\t\t\t<MinorUpdatePopup\n\t\t\t\t\t\tfeature={feature}\n\t\t\t\t\t\tcurrentIndex={currentIndex}\n\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\tonSkip={() => handleSkipMinorUpdate(feature)}\n\t\t\t\t\t\tonExplore={() => handleExploreMinorFeature(feature)}\n\t\t\t\t\t\tonPrevious={() => handlePreviousMinorUpdate(feature)}\n\t\t\t\t\t\tonNext={() => handleNextMinorUpdate(feature)}\n\t\t\t\t\t\tsetIsClosing={setIsClosingMinor}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tplacement: 'bottom',\n\t\t\t\tplacementBeacon: 'bottom-end',\n\t\t\t\tdisableBeacon: true,\n\t\t\t\thideCloseButton: true,\n\t\t\t\thideSkipButton: true,\n\t\t\t\thideFooter: true,\n\t\t\t\toffset: 0,\n\t\t\t\tdata: { feature, isMinor: true },\n\t\t\t\tstyles: {\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t},\n\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t},\n\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t\tsetJoyrideSteps(minorSteps);\n\t\tsetRunJoyride(true);\n\t};\n\n\tconst handleSkipMinorUpdate = useCallback(\n\t\t(feature) => {\n\t\t\tconst targetFeature = feature || currentMinorFeature;\n\n\t\t\tif (targetFeature) {\n\t\t\t\tsetIsProcessingMinorUpdate(true);\n\n\t\t\t\t// Only mark the current feature as viewed, not all features\n\t\t\t\tmarkFeatureAsViewed(targetFeature.id);\n\n\t\t\t\t// Add to session tracker to prevent re-showing\n\t\t\t\tsetShownMinorFeatureIds((prev) => new Set(prev).add(targetFeature.id));\n\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetJoyrideSteps([]);\n\n\t\t\t\t// Find next unshown feature\n\t\t\t\tconst nextFeature = availableMinorFeatures.find(\n\t\t\t\t\t(f) => f.id !== targetFeature.id && !shownMinorFeatureIds.has(f.id),\n\t\t\t\t);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMinorUpdate(false);\n\n\t\t\t\t\tif (nextFeature) {\n\t\t\t\t\t\t// Auto-advance to next feature\n\t\t\t\t\t\tshowMinorUpdateJoyride(nextFeature, availableMinorFeatures);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No more features to show\n\t\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tcurrentMinorFeature,\n\t\t\tavailableMinorFeatures,\n\t\t\tmarkFeatureAsViewed,\n\t\t\tshownMinorFeatureIds,\n\t\t],\n\t);\n\n\tconst handleExploreMinorFeature = useCallback(\n\t\t(feature) => {\n\t\t\tsetIsProcessingMinorUpdate(true);\n\n\t\t\t// Only mark the current feature as viewed\n\t\t\tmarkFeatureAsViewed(feature.id);\n\n\t\t\t// Add to session tracker to prevent re-showing\n\t\t\tsetShownMinorFeatureIds((prev) => new Set(prev).add(feature.id));\n\n\t\t\tif (feature.productVideo) {\n\t\t\t\tsetVideoUrl(feature.productVideo);\n\t\t\t\tsetIsVideoModalOpen(true);\n\t\t\t\tsetBlockPopups(true);\n\t\t\t}\n\n\t\t\tsetRunJoyride(false);\n\t\t\tsetCurrentMinorFeature(null);\n\t\t\tsetJoyrideSteps([]);\n\n\t\t\t// Find next unshown feature (only auto-advance if no video modal)\n\t\t\tconst nextFeature = availableMinorFeatures.find(\n\t\t\t\t(f) => f.id !== feature.id && !shownMinorFeatureIds.has(f.id),\n\t\t\t);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetIsProcessingMinorUpdate(false);\n\n\t\t\t\t// Only auto-advance if no video modal is opened\n\t\t\t\tif (nextFeature && !feature.productVideo) {\n\t\t\t\t\t// Auto-advance to next feature\n\t\t\t\t\tshowMinorUpdateJoyride(nextFeature, availableMinorFeatures);\n\t\t\t\t} else if (!nextFeature) {\n\t\t\t\t\t// No more features to show\n\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t}\n\t\t\t\t// If video modal opened, wait for user to close it before advancing\n\t\t\t}, 500);\n\t\t},\n\t\t[availableMinorFeatures, markFeatureAsViewed, shownMinorFeatureIds],\n\t);\n\n\tconst handlePreviousMinorUpdate = useCallback(\n\t\tasync (feature) => {\n\t\t\tconst targetFeature = feature || currentMinorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = availableMinorFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex > 0) {\n\t\t\t\tconst prevFeature = availableMinorFeatures[currentIndex - 1];\n\t\t\t\tsetCurrentMinorFeature(prevFeature);\n\n\t\t\t\tconst targetSelector =\n\t\t\t\t\tprevFeature.featureTag.startsWith('#') ||\n\t\t\t\t\tprevFeature.featureTag.startsWith('.') ||\n\t\t\t\t\tprevFeature.featureTag.startsWith('[')\n\t\t\t\t\t\t? prevFeature.featureTag\n\t\t\t\t\t\t: `#${prevFeature.featureTag}`;\n\n\t\t\t\t// Scroll to the previous feature element\n\t\t\t\tconst targetElement = document.querySelector(targetSelector);\n\t\t\t\tif (targetElement) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { scrollToElementSmooth } = await import(\n\t\t\t\t\t\t\t'./utils/elementHelpers'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait scrollToElementSmooth(targetElement, 120);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// Scroll failed silently\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst prevIndex = currentIndex - 1;\n\t\t\t\tconst totalFeatures = availableMinorFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: targetSelector,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MinorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={prevFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={prevIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMinorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreMinorFeature(prevFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMinorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMinorUpdate(prevFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMinor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\tplacementBeacon: 'bottom-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: prevFeature, isMinor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetJoyrideSteps(updatedSteps);\n\t\t\t}\n\t\t},\n\t\t[currentMinorFeature, availableMinorFeatures],\n\t);\n\n\tconst handleNextMinorUpdate = useCallback(\n\t\tasync (feature) => {\n\t\t\tconst targetFeature = feature || currentMinorFeature;\n\n\t\t\tif (!targetFeature) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentIndex = availableMinorFeatures.findIndex(\n\t\t\t\t(f) => f.id === targetFeature.id,\n\t\t\t);\n\n\t\t\tif (currentIndex < availableMinorFeatures.length - 1) {\n\t\t\t\tconst nextFeature = availableMinorFeatures[currentIndex + 1];\n\t\t\t\tsetCurrentMinorFeature(nextFeature);\n\n\t\t\t\tconst targetSelector =\n\t\t\t\t\tnextFeature.featureTag.startsWith('#') ||\n\t\t\t\t\tnextFeature.featureTag.startsWith('.') ||\n\t\t\t\t\tnextFeature.featureTag.startsWith('[')\n\t\t\t\t\t\t? nextFeature.featureTag\n\t\t\t\t\t\t: `#${nextFeature.featureTag}`;\n\n\t\t\t\t// Scroll to the next feature element\n\t\t\t\tconst targetElement = document.querySelector(targetSelector);\n\t\t\t\tif (targetElement) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { scrollToElementSmooth } = await import(\n\t\t\t\t\t\t\t'./utils/elementHelpers'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait scrollToElementSmooth(targetElement, 120);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// Scroll failed silently\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\t\tconst totalFeatures = availableMinorFeatures.length;\n\n\t\t\t\tconst updatedSteps = [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: targetSelector,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<MinorUpdatePopup\n\t\t\t\t\t\t\t\tfeature={nextFeature}\n\t\t\t\t\t\t\t\tcurrentIndex={nextIndex}\n\t\t\t\t\t\t\t\ttotalFeatures={totalFeatures}\n\t\t\t\t\t\t\t\tonSkip={() => handleSkipMinorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonExplore={() => handleExploreMinorFeature(nextFeature)}\n\t\t\t\t\t\t\t\tonPrevious={() => handlePreviousMinorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tonNext={() => handleNextMinorUpdate(nextFeature)}\n\t\t\t\t\t\t\t\tsetIsClosing={setIsClosingMinor}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tplacement: 'bottom',\n\t\t\t\t\t\tplacementBeacon: 'bottom-end',\n\t\t\t\t\t\tdisableBeacon: true,\n\t\t\t\t\t\thideCloseButton: true,\n\t\t\t\t\t\thideSkipButton: true,\n\t\t\t\t\t\thideFooter: true,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tdata: { feature: nextFeature, isMinor: true },\n\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tsetJoyrideSteps(updatedSteps);\n\t\t\t} else {\n\t\t\t\tsetIsProcessingMinorUpdate(true);\n\t\t\t\tsetMinorFeaturesSkipped(true);\n\n\t\t\t\tmarkFeatureAsViewed(targetFeature.id);\n\t\t\t\tsetRunJoyride(false);\n\t\t\t\tsetCurrentMinorFeature(null);\n\t\t\t\tsetJoyrideSteps([]);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsProcessingMinorUpdate(false);\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t[currentMinorFeature, availableMinorFeatures, markFeatureAsViewed],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{children}\n\n\t\t\t{majorJoyrideSteps.length > 0 && (\n\t\t\t\t<Joyride\n\t\t\t\t\tkey={`major-joyride-${majorJoyrideKey}`}\n\t\t\t\t\tsteps={majorJoyrideSteps}\n\t\t\t\t\trun={runMajorJoyride}\n\t\t\t\t\tcontinuous={false}\n\t\t\t\t\tshowProgress={false}\n\t\t\t\t\tshowSkipButton={false}\n\t\t\t\t\tcallback={handleMajorJoyrideCallback}\n\t\t\t\t\tdisableOverlayClose={false}\n\t\t\t\t\tdisableCloseOnEsc={false}\n\t\t\t\t\tdisableOverlay={false}\n\t\t\t\t\tspotlightClicks={false}\n\t\t\t\t\tstyles={{\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tprimaryColor: '#007bff',\n\t\t\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\t\tarrowColor: isClosingMajor ? 'transparent' : '#212121',\n\t\t\t\t\t\t},\n\t\t\t\t\t\toverlay: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspotlight: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\t\tfontSize: '14px',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tlocale={{\n\t\t\t\t\t\tback: 'Back',\n\t\t\t\t\t\tclose: 'Close',\n\t\t\t\t\t\tlast: 'Close',\n\t\t\t\t\t\tnext: 'Next',\n\t\t\t\t\t\tskip: 'Skip',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{joyrideSteps.length > 0 && (\n\t\t\t\t<Joyride\n\t\t\t\t\tkey={`minor-joyride-${minorJoyrideKey}`}\n\t\t\t\t\tsteps={joyrideSteps}\n\t\t\t\t\trun={runJoyride}\n\t\t\t\t\tcontinuous={false}\n\t\t\t\t\tshowProgress={false}\n\t\t\t\t\tshowSkipButton={false}\n\t\t\t\t\tcallback={handleMinorJoyrideCallback}\n\t\t\t\t\tdisableOverlayClose={false}\n\t\t\t\t\tdisableCloseOnEsc={false}\n\t\t\t\t\tdisableOverlay={false}\n\t\t\t\t\tscrollToFirstStep={true}\n\t\t\t\t\tscrollOffset={120}\n\t\t\t\t\tdisableScrolling={false}\n\t\t\t\t\tstyles={{\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tprimaryColor: '#007bff',\n\t\t\t\t\t\t\tzIndex: 10000,\n\t\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\t\tarrowColor: isClosingMinor ? 'transparent' : '#ffffff',\n\t\t\t\t\t\t},\n\t\t\t\t\t\toverlay: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspotlight: {\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborderRadius: '8px',\n\t\t\t\t\t\t\tboxShadow: isClosingMinor\n\t\t\t\t\t\t\t\t? 'none'\n\t\t\t\t\t\t\t\t: '0 0 0 9999px rgba(0, 0, 0, 0.4), 0 0 0 3px rgba(255, 255, 255, 0.8), 0 0 20px 8px rgba(255, 255, 255, 0.4)',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\tborderRadius: '4px',\n\t\t\t\t\t\t\tfontSize: '14px',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\t\tboxShadow: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltipContent: {\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonNext: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonBack: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonSkip: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbuttonClose: {\n\t\t\t\t\t\t\tdisplay: 'none',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tlocale={{\n\t\t\t\t\t\tback: 'Back',\n\t\t\t\t\t\tclose: 'Close',\n\t\t\t\t\t\tlast: 'Close',\n\t\t\t\t\t\tnext: 'Next',\n\t\t\t\t\t\tskip: 'Skip',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<VideoModal\n\t\t\t\tisOpen={isVideoModalOpen}\n\t\t\t\tvideoUrl={videoUrl}\n\t\t\t\tonClose={() => {\n\t\t\t\t\tsetIsVideoModalOpen(false);\n\t\t\t\t\tsetVideoUrl('');\n\t\t\t\t\tsetBlockPopups(false);\n\n\t\t\t\t\t// After video modal closes, check if there are more features to show\n\t\t\t\t\tconst nextFeature = availableMinorFeatures.find(\n\t\t\t\t\t\t(f) => !shownMinorFeatureIds.has(f.id),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (nextFeature) {\n\t\t\t\t\t\t// Auto-advance to next feature after video\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tshowMinorUpdateJoyride(nextFeature, availableMinorFeatures);\n\t\t\t\t\t\t}, 300);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No more features to show\n\t\t\t\t\t\tsetMinorFeaturesSkipped(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t);\n\n};\n\nexport default FeatureAnnouncementProvider;\n"],"names":["_ref","children","fetchVisibleFeatures","getStoreFeatureProgress","fetchFeatureById","markFeatureAsViewedForStore","isFeatureApplicableToCurrentPage","module","router","storeId","onAnnouncementShown","onAnnouncementInteracted","majorUpdateFeatures","minorUpdateFeatures","isLoading","markFeatureAsViewed","useFeatureAnnouncements","currentMajorFeature","setCurrentMajorFeature","useState","currentMinorFeature","setCurrentMinorFeature","runJoyride","setRunJoyride","joyrideSteps","setJoyrideSteps","runMajorJoyride","setRunMajorJoyride","majorJoyrideSteps","setMajorJoyrideSteps","isProcessingMajorUpdate","setIsProcessingMajorUpdate","isProcessingMinorUpdate","setIsProcessingMinorUpdate","availableMinorFeatures","setAvailableMinorFeatures","minorFeaturesSkipped","setMinorFeaturesSkipped","showMinorUpdates","setShowMinorUpdates","isVideoModalOpen","setIsVideoModalOpen","videoUrl","setVideoUrl","blockPopups","setBlockPopups","isClosingMajor","setIsClosingMajor","isClosingMinor","setIsClosingMinor","majorJoyrideKey","setMajorJoyrideKey","minorJoyrideKey","setMinorJoyrideKey","shownMinorFeatureIds","setShownMinorFeatureIds","Set","useEffect","styleId","styleElement","document","getElementById","createElement","id","head","appendChild","textContent","el","remove","prev","pathname","length","attempts","MAX_ATTEMPTS","checkWhatsNewButton","querySelector","showMajorUpdateJoyride","setTimeout","featureIdFromQuery","_a","query","forcedFeature","find","f","featureTag","interval","setInterval","targetSelector","startsWith","testModeFeatures","showMinorUpdateJoyride","clearInterval","observer","scrollListener","checkTimeout","isCleanedUp","checkElementsAndStartTour","availableFeatures","filter","feature","trim","has","disconnect","window","removeEventListener","clearTimeout","MutationObserver","mutations","shouldCheck","mutation","type","addedNodes","i","node","nodeType","Node","ELEMENT_NODE","element","requestAnimationFrame","observe","body","childList","subtree","addEventListener","passive","currentIndex","findIndex","totalFeatures","majorSteps","target","SELECTORS","WHATS_NEW_BUTTON","content","_jsx","jsx","MajorUpdatePopup","onSkip","handleSkipMajorUpdate","onExplore","handleExploreFeature","onPrevious","handlePreviousMajorUpdate","onNext","handleNextMajorUpdate","setIsClosing","placement","placementBeacon","disableBeacon","hideCloseButton","hideSkipButton","hideFooter","offset","data","isMajor","styles","tooltip","padding","backgroundColor","borderRadius","border","boxShadow","tooltipContent","buttonNext","display","buttonBack","buttonClose","buttonSkip","announcementId","announcementTitle","title","imageUrl","displayImage","image","productVideo","useCallback","targetFeature","forEach","majorFeature","buttonClicked","buttonName","buttonUrl","undefined","buttonText","redirectUrl","prevFeature","prevIndex","updatedSteps","nextFeature","nextIndex","showMajorUpdatePopup","handleMajorJoyrideCallback","action","ACTIONS","CLOSE","handleMinorJoyrideCallback","featuresToUse","__awaiter","features","targetElement","scrollToElementSmooth","Promise","resolve","then","require","error","minorSteps","MinorUpdatePopup","handleSkipMinorUpdate","handleExploreMinorFeature","handlePreviousMinorUpdate","handleNextMinorUpdate","isMinor","add","_jsxs","_Fragment","Joyride","steps","run","continuous","showProgress","showSkipButton","callback","disableOverlayClose","disableCloseOnEsc","disableOverlay","spotlightClicks","options","primaryColor","zIndex","width","arrowColor","overlay","spotlight","fontSize","locale","back","close","last","next","skip","scrollToFirstStep","scrollOffset","disableScrolling","VideoModal","isOpen","onClose"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react/jsx-runtime"),e=require("react"),n=require("../../assets/icons/chevronRight2.svg.js"),s=require("../../assets/icons/play.svg.js"),r=require("./constants/index.js"),o=require("./styles/majorPopup.styles.js");require("../../constants/Theme.js"),require("./constants/animations.js");var a=require("./utils/htmlHelpers.js"),i=require("./utils/animationHelpers.js"),l=require("./utils/elementHelpers.js");exports.default=c=>{let{feature:u,currentIndex:d,totalFeatures:p,onSkip:g,onExplore:y,onPrevious:v,onNext:b,setIsClosing:j,onSecondaryAction:h,ratio:f="16:9",padding:x}=c;var O,B,m,T,M;const[k,E]=e.useState(!1),[P,w]=e.useState(!1),[C,L]=e.useState(""),W=e.useRef(null),[S,_]=e.useState(!1),[q,A]=e.useState(!0),U=e.useRef(null),[I,D]=e.useState(f),H=e.useRef(null);e.useEffect((()=>{k&&w(!0)}),[k]);const R=t=>{var e,n;t.preventDefault(),t.stopPropagation();const s=null===(e=u.secondaryButton)||void 0===e?void 0:e.action,r=h||g;if("Open link"===s){const t=null===(n=u.secondaryButton)||void 0===n?void 0:n.redirectionUrl;if(t){t.startsWith("http")?window.open(t,"_blank","noopener,noreferrer"):window.location.href=t}}i.hideJoyrideArrow(W.current);const o=l.findWhatsNewButton();if(o&&W.current){const t=i.calculateCloseTransform(W.current,o);L(t)}else L("scale(0)");null==j||j(!0),E(!0),i.executeAfterAnimation(r)},N=o.getMajorPopupStyles(P,C,I,x||u.padding,null===(O=u.primaryButton)||void 0===O?void 0:O.style,null===(B=u.secondaryButton)||void 0===B?void 0:B.style);return t.jsx("div",Object.assign({style:N.outerWrapper},{children:t.jsxs("div",Object.assign({ref:W,style:Object.assign(Object.assign({},N.container),{opacity:P?0:1,transition:"opacity 0.2s ease-in-out, transform 0.3s ease"})},{children:[t.jsx("style",{children:"\n\t\t\t\t[data-popup-content] ul {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding-left: 20px;\n\t\t\t\t\tlist-style-type: disc;\n\t\t\t\t}\n\t\t\t\t[data-popup-content] ul li {\n\t\t\t\t\tmargin-bottom: 8px;\n\t\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tline-height: 16px;\n\t\t\t\t\tfont-family: Inter, sans-serif;\n\t\t\t\t}\n\t\t\t"}),t.jsxs("div",Object.assign({style:N.contentWrapper},{children:[t.jsx("div",Object.assign({style:N.imageContainer},{children:u.productVideo?t.jsxs(t.Fragment,{children:[t.jsx("video",{ref:U,src:u.productVideo,style:N.image,autoPlay:!0,muted:!0,loop:!0,playsInline:!0,controls:!0,"aria-label":`Product video for ${u.title}`,onLoadedMetadata:t=>{const e=t.currentTarget,n=e.videoWidth,s=e.videoHeight;if(n&&s){const t=n/s;Math.abs(t-16/9)<.1?D("16:9"):Math.abs(t-1)<.1?D("1:1"):Math.abs(t-4/3)<.1?D("4:3"):D(t>1.5?"16:9":t<.9?"4:3":"1:1")}}}),(S||q)&&t.jsx("div",Object.assign({style:N.videoOverlay,onClick:t=>{t.stopPropagation(),U.current&&(U.current.paused?(U.current.play(),_(!1),A(!1)):(U.current.pause(),_(!0),A(!0)))},role:"button",tabIndex:0,"aria-label":S?"Play video":"Pause video",onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),t.stopPropagation(),U.current&&(U.current.paused?(U.current.play(),_(!1),A(!1)):(U.current.pause(),_(!0),A(!0))))}},{children:t.jsx(s.default,{width:20,height:20})}))]}):u.displayImage?t.jsx("img",{ref:H,src:u.displayImage,alt:u.title,style:N.image,onLoad:t=>{const e=t.currentTarget,n=e.naturalWidth,s=e.naturalHeight;if(n&&s){const t=n/s;Math.abs(t-16/9)<.1?D("16:9"):Math.abs(t-1)<.1?D("1:1"):Math.abs(t-4/3)<.1?D("4:3"):D(t>1.5?"16:9":t<.9?"4:3":"1:1")}},onError:t=>{u.image&&(t.target.src=u.image)}}):t.jsx("div",Object.assign({style:N.imagePlaceholder},{children:r.TEXT.FEATURE_PREVIEW_PLACEHOLDER}))})),t.jsxs("div",Object.assign({style:N.contentContainer},{children:[t.jsx("div",Object.assign({style:N.skipButtonContainer},{children:t.jsx("button",Object.assign({onClick:t=>{t.preventDefault(),t.stopPropagation(),(t=>{i.hideJoyrideArrow(W.current);const e=l.findWhatsNewButton();if(e&&W.current){const t=i.calculateCloseTransform(W.current,e);L(t)}else L("scale(0)");null==j||j(!0),E(!0),i.executeAfterAnimation(t)})(g)},style:N.skipButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.skipButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.skipButton.base),"aria-label":"Skip feature announcement"},{children:"Skip"}))})),t.jsx("h3",Object.assign({style:N.title},{children:u.title})),t.jsx("div",{"data-popup-content":!0,style:N.content,dangerouslySetInnerHTML:{__html:a.decodeHTMLEntities(u.content||u.body||"")}}),t.jsxs("div",Object.assign({style:N.actionsWrapper},{children:[t.jsxs("div",Object.assign({style:N.buttonsGroup},{children:[t.jsx("button",Object.assign({onClick:()=>{var t,e;const n=null===(t=u.primaryButton)||void 0===t?void 0:t.action;if("Play Video"===n)y();else if("Open link"===n){const t=(null===(e=u.primaryButton)||void 0===e?void 0:e.redirectionUrl)||u.redirectUrl;if(t){t.startsWith("http")?window.open(t,"_blank","noopener,noreferrer"):window.location.href=t}y()}else y();i.hideJoyrideArrow(W.current);const s=l.findWhatsNewButton();if(s&&W.current){const t=i.calculateCloseTransform(W.current,s);L(t)}else L("scale(0)");null==j||j(!0),E(!0)},style:N.exploreButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.exploreButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.exploreButton.base)},{children:(null===(m=u.primaryButton)||void 0===m?void 0:m.text)||u.buttonText||r.TEXT.DEFAULT_BUTTON_TEXT})),(null===(T=u.secondaryButton)||void 0===T?void 0:T.text)&&((null===(M=u.secondaryButton)||void 0===M?void 0:M.redirectionUrl)?t.jsx("a",Object.assign({href:u.secondaryButton.redirectionUrl,target:u.secondaryButton.redirectionUrl.startsWith("http")?"_blank":"_self",rel:u.secondaryButton.redirectionUrl.startsWith("http")?"noopener noreferrer":void 0,onClick:R,style:N.secondaryButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.secondaryButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.secondaryButton.base)},{children:u.secondaryButton.text})):t.jsx("button",Object.assign({onClick:R,style:N.secondaryButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.secondaryButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.secondaryButton.base)},{children:u.secondaryButton.text})))]})),p>1&&t.jsxs("div",Object.assign({style:N.navigationContainer},{children:[t.jsx("button",Object.assign({onClick:t=>{t.preventDefault(),t.stopPropagation(),v()},disabled:0===d,style:N.navigationButton(0===d).base,onMouseEnter:t=>{0!==d&&Object.assign(t.currentTarget.style,N.navigationButton(!1).hover)},onMouseLeave:t=>{0!==d&&Object.assign(t.currentTarget.style,N.navigationButton(!1).base)},"aria-label":"Previous feature"},{children:t.jsx(n.default,{style:{transform:"rotate(180deg)"}})})),t.jsx("button",Object.assign({onClick:t=>{t.preventDefault(),t.stopPropagation(),b()},disabled:d===p-1,style:N.navigationButton(d===p-1).base,onMouseEnter:t=>{d!==p-1&&Object.assign(t.currentTarget.style,N.navigationButton(!1).hover)},onMouseLeave:t=>{d!==p-1&&Object.assign(t.currentTarget.style,N.navigationButton(d===p-1).base)},"aria-label":"Next feature"},{children:t.jsx(n.default,{})}))]}))]}))]}))]}))]}))}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react/jsx-runtime"),e=require("react"),n=require("../../assets/icons/chevronRight2.svg.js"),s=require("../../assets/icons/play.svg.js"),r=require("./constants/index.js"),o=require("./styles/majorPopup.styles.js");require("../../constants/Theme.js"),require("./constants/animations.js");var a=require("./utils/htmlHelpers.js"),i=require("./utils/animationHelpers.js"),l=require("./utils/elementHelpers.js");exports.default=c=>{let{feature:u,currentIndex:d,totalFeatures:p,onSkip:g,onExplore:y,onPrevious:v,onNext:b,setIsClosing:j,onSecondaryAction:h,ratio:f="16:9",padding:x}=c;var O,B,m,T,M;const[k,E]=e.useState(!1),[P,w]=e.useState(!1),[C,L]=e.useState(""),W=e.useRef(null),[S,_]=e.useState(!1),[q,A]=e.useState(!0),U=e.useRef(null),[I,D]=e.useState(f),H=e.useRef(null);e.useEffect((()=>{k&&w(!0)}),[k]);const R=t=>{var e,n;t.preventDefault(),t.stopPropagation();const s=null===(e=u.secondaryButton)||void 0===e?void 0:e.action,r=h||g;if("Play Video"===s)y();else if("Open link"===s){const t=null===(n=u.secondaryButton)||void 0===n?void 0:n.redirectionUrl;if(t){t.startsWith("http")?window.open(t,"_blank","noopener,noreferrer"):window.location.href=t}}i.hideJoyrideArrow(W.current);const o=l.findWhatsNewButton();if(o&&W.current){const t=i.calculateCloseTransform(W.current,o);L(t)}else L("scale(0)");null==j||j(!0),E(!0),i.executeAfterAnimation(r)},N=o.getMajorPopupStyles(P,C,I,x||u.padding,null===(O=u.primaryButton)||void 0===O?void 0:O.style,null===(B=u.secondaryButton)||void 0===B?void 0:B.style);return t.jsx("div",Object.assign({style:N.outerWrapper},{children:t.jsxs("div",Object.assign({ref:W,style:Object.assign(Object.assign({},N.container),{opacity:P?0:1,transition:"opacity 0.2s ease-in-out, transform 0.3s ease"})},{children:[t.jsx("style",{children:"\n\t\t\t\t[data-popup-content] ul {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding-left: 20px;\n\t\t\t\t\tlist-style-type: disc;\n\t\t\t\t}\n\t\t\t\t[data-popup-content] ul li {\n\t\t\t\t\tmargin-bottom: 8px;\n\t\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tline-height: 16px;\n\t\t\t\t\tfont-family: Inter, sans-serif;\n\t\t\t\t}\n\t\t\t"}),t.jsxs("div",Object.assign({style:N.contentWrapper},{children:[t.jsx("div",Object.assign({style:N.imageContainer},{children:u.productVideo?t.jsxs(t.Fragment,{children:[t.jsx("video",{ref:U,src:u.productVideo,style:N.image,autoPlay:!0,muted:!0,loop:!0,playsInline:!0,controls:!0,"aria-label":`Product video for ${u.title}`,onLoadedMetadata:t=>{const e=t.currentTarget,n=e.videoWidth,s=e.videoHeight;if(n&&s){const t=n/s;Math.abs(t-16/9)<.1?D("16:9"):Math.abs(t-1)<.1?D("1:1"):Math.abs(t-4/3)<.1?D("4:3"):D(t>1.5?"16:9":t<.9?"4:3":"1:1")}}}),(S||q)&&t.jsx("div",Object.assign({style:N.videoOverlay,onClick:t=>{t.stopPropagation(),U.current&&(U.current.paused?(U.current.play(),_(!1),A(!1)):(U.current.pause(),_(!0),A(!0)))},role:"button",tabIndex:0,"aria-label":S?"Play video":"Pause video",onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),t.stopPropagation(),U.current&&(U.current.paused?(U.current.play(),_(!1),A(!1)):(U.current.pause(),_(!0),A(!0))))}},{children:t.jsx(s.default,{width:20,height:20})}))]}):u.displayImage?t.jsx("img",{ref:H,src:u.displayImage,alt:u.title,style:N.image,onLoad:t=>{const e=t.currentTarget,n=e.naturalWidth,s=e.naturalHeight;if(n&&s){const t=n/s;Math.abs(t-16/9)<.1?D("16:9"):Math.abs(t-1)<.1?D("1:1"):Math.abs(t-4/3)<.1?D("4:3"):D(t>1.5?"16:9":t<.9?"4:3":"1:1")}},onError:t=>{u.image&&(t.target.src=u.image)}}):t.jsx("div",Object.assign({style:N.imagePlaceholder},{children:r.TEXT.FEATURE_PREVIEW_PLACEHOLDER}))})),t.jsxs("div",Object.assign({style:N.contentContainer},{children:[t.jsx("div",Object.assign({style:N.skipButtonContainer},{children:t.jsx("button",Object.assign({onClick:t=>{t.preventDefault(),t.stopPropagation(),(t=>{i.hideJoyrideArrow(W.current);const e=l.findWhatsNewButton();if(e&&W.current){const t=i.calculateCloseTransform(W.current,e);L(t)}else L("scale(0)");null==j||j(!0),E(!0),i.executeAfterAnimation(t)})(g)},style:N.skipButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.skipButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.skipButton.base),"aria-label":"Skip feature announcement"},{children:"Skip"}))})),t.jsx("h3",Object.assign({style:N.title},{children:u.title})),t.jsx("div",{"data-popup-content":!0,style:N.content,dangerouslySetInnerHTML:{__html:a.decodeHTMLEntities(u.content||u.body||"")}}),t.jsxs("div",Object.assign({style:N.actionsWrapper},{children:[t.jsxs("div",Object.assign({style:N.buttonsGroup},{children:[t.jsx("button",Object.assign({onClick:()=>{var t,e;const n=null===(t=u.primaryButton)||void 0===t?void 0:t.action;if("Play Video"===n)y();else if("Open link"===n){const t=(null===(e=u.primaryButton)||void 0===e?void 0:e.redirectionUrl)||u.redirectUrl;if(t){t.startsWith("http")?window.open(t,"_blank","noopener,noreferrer"):window.location.href=t}}else y();i.hideJoyrideArrow(W.current);const s=l.findWhatsNewButton();if(s&&W.current){const t=i.calculateCloseTransform(W.current,s);L(t)}else L("scale(0)");null==j||j(!0),E(!0)},style:N.exploreButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.exploreButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.exploreButton.base)},{children:(null===(m=u.primaryButton)||void 0===m?void 0:m.text)||u.buttonText||r.TEXT.DEFAULT_BUTTON_TEXT})),(null===(T=u.secondaryButton)||void 0===T?void 0:T.text)&&((null===(M=u.secondaryButton)||void 0===M?void 0:M.redirectionUrl)?t.jsx("a",Object.assign({href:u.secondaryButton.redirectionUrl,target:u.secondaryButton.redirectionUrl.startsWith("http")?"_blank":"_self",rel:u.secondaryButton.redirectionUrl.startsWith("http")?"noopener noreferrer":void 0,onClick:R,style:N.secondaryButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.secondaryButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.secondaryButton.base)},{children:u.secondaryButton.text})):t.jsx("button",Object.assign({onClick:R,style:N.secondaryButton.base,onMouseEnter:t=>Object.assign(t.currentTarget.style,N.secondaryButton.hover),onMouseLeave:t=>Object.assign(t.currentTarget.style,N.secondaryButton.base)},{children:u.secondaryButton.text})))]})),p>1&&t.jsxs("div",Object.assign({style:N.navigationContainer},{children:[t.jsx("button",Object.assign({onClick:t=>{t.preventDefault(),t.stopPropagation(),v()},disabled:0===d,style:N.navigationButton(0===d).base,onMouseEnter:t=>{0!==d&&Object.assign(t.currentTarget.style,N.navigationButton(!1).hover)},onMouseLeave:t=>{0!==d&&Object.assign(t.currentTarget.style,N.navigationButton(!1).base)},"aria-label":"Previous feature"},{children:t.jsx(n.default,{style:{transform:"rotate(180deg)"}})})),t.jsx("button",Object.assign({onClick:t=>{t.preventDefault(),t.stopPropagation(),b()},disabled:d===p-1,style:N.navigationButton(d===p-1).base,onMouseEnter:t=>{d!==p-1&&Object.assign(t.currentTarget.style,N.navigationButton(!1).hover)},onMouseLeave:t=>{d!==p-1&&Object.assign(t.currentTarget.style,N.navigationButton(d===p-1).base)},"aria-label":"Next feature"},{children:t.jsx(n.default,{})}))]}))]}))]}))]}))]}))}))};
2
2
  //# sourceMappingURL=MajorUpdatePopup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MajorUpdatePopup.js","sources":["../../../../src/components/feature-announcements/MajorUpdatePopup.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport Arrow from '../../assets/icons/chevronRight2.svg';\nimport PlayIcon from '../../assets/icons/play.svg';\nimport { TEXT } from './constants';\nimport { getMajorPopupStyles } from './styles';\nimport { MajorUpdatePopupProps } from './types';\nimport {\n\tcalculateCloseTransform,\n\tdecodeHTMLEntities,\n\texecuteAfterAnimation,\n\tfindWhatsNewButton,\n\thideJoyrideArrow,\n} from './utils';\n\nconst MajorUpdatePopup: React.FC<MajorUpdatePopupProps> = ({\n\tfeature,\n\tcurrentIndex,\n\ttotalFeatures,\n\tonSkip,\n\tonExplore,\n\tonPrevious,\n\tonNext,\n\tsetIsClosing: setIsClosingParent,\n\tonSecondaryAction,\n\tratio = '16:9',\n\tpadding,\n}) => {\n\tconst [isClosing, setIsClosing] = useState(false);\n\tconst [startAnimation, setStartAnimation] = useState(false);\n\tconst [transform, setTransform] = useState('');\n\tconst popupRef = useRef<HTMLDivElement>(null);\n\tconst [isVideoPaused, setIsVideoPaused] = useState(false);\n\tconst [showPlayIcon, setShowPlayIcon] = useState(true);\n\tconst videoRef = useRef<HTMLVideoElement>(null);\n\tconst [imageAspectRatio, setImageAspectRatio] = useState<\n\t\t'16:9' | '1:1' | '4:3'\n\t>(ratio);\n\n\tconst imageRef = useRef<HTMLImageElement>(null);\n\n\tuseEffect(() => {\n\t\tif (isClosing) {\n\t\t\t// Start the shrink animation immediately\n\t\t\tsetStartAnimation(true);\n\t\t}\n\t}, [isClosing]);\n\n\tconst handleClose = (callback: () => void): void => {\n\t\thideJoyrideArrow(popupRef.current);\n\n\t\tconst targetButton = findWhatsNewButton();\n\n\t\tif (targetButton && popupRef.current) {\n\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\tpopupRef.current,\n\t\t\t\ttargetButton,\n\t\t\t);\n\t\t\tsetTransform(transformValue);\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t\texecuteAfterAnimation(callback);\n\t};\n\n\tconst handleImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n\t\tconst img = e.currentTarget;\n\t\tconst width = img.naturalWidth;\n\t\tconst height = img.naturalHeight;\n\n\t\tif (width && height) {\n\t\t\tconst aspectRatio = width / height;\n\n\t\t\t// Determine closest predefined ratio\n\t\t\tif (Math.abs(aspectRatio - 16 / 9) < 0.1) {\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (Math.abs(aspectRatio - 1) < 0.1) {\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t} else if (Math.abs(aspectRatio - 4 / 3) < 0.1) {\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else if (aspectRatio > 1.5) {\n\t\t\t\t// Wide images default to 16:9\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (aspectRatio < 0.9) {\n\t\t\t\t// Tall images default to 4:3\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else {\n\t\t\t\t// Close to square, use 1:1\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleVideoLoadedMetadata = (\n\t\te: React.SyntheticEvent<HTMLVideoElement>,\n\t) => {\n\t\tconst video = e.currentTarget;\n\t\tconst width = video.videoWidth;\n\t\tconst height = video.videoHeight;\n\n\t\tif (width && height) {\n\t\t\tconst aspectRatio = width / height;\n\n\t\t\tif (Math.abs(aspectRatio - 16 / 9) < 0.1) {\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (Math.abs(aspectRatio - 1) < 0.1) {\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t} else if (Math.abs(aspectRatio - 4 / 3) < 0.1) {\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else if (aspectRatio > 1.5) {\n\t\t\t\t// Wide videos default to 16:9\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (aspectRatio < 0.9) {\n\t\t\t\t// Tall videos default to 4:3\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else {\n\t\t\t\t// Close to square, use 1:1\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleExplore = (): void => {\n\t\tconst action = feature.primaryButton?.action;\n\n\t\tif (action === 'Play Video') {\n\t\t\tonExplore();\n\t\t} else if (action === 'Open link') {\n\t\t\t// Navigate to URL\n\t\t\tconst url = feature.primaryButton?.redirectionUrl || feature.redirectUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tonExplore();\n\t\t} else {\n\t\t\tonExplore();\n\t\t}\n\n\t\t// Run closing animation in background\n\t\thideJoyrideArrow(popupRef.current);\n\t\tconst targetButton = findWhatsNewButton();\n\t\tif (targetButton && popupRef.current) {\n\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\tpopupRef.current,\n\t\t\t\ttargetButton,\n\t\t\t);\n\t\t\tsetTransform(transformValue);\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t};\n\n\tconst handleSkipClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\thandleClose(onSkip);\n\t};\n\n\tconst handlePreviousClick = (\n\t\te: React.MouseEvent<HTMLButtonElement>,\n\t): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tonPrevious();\n\t};\n\n\tconst handleNextClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tonNext();\n\t};\n\n\tconst handleSecondaryAction = (e: React.MouseEvent): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tconst action = feature.secondaryButton?.action;\n\t\tconst closeCallback = onSecondaryAction || onSkip;\n\n\t\t// Handle based on action type\n\t\tif (action === 'Open link') {\n\t\t\t// Open URL but don't close popup\n\t\t\tconst url = feature.secondaryButton?.redirectionUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (action === 'Close popup' || action === '') {\n\t\t\t// Just close the popup (empty action also closes)\n\t\t\t// callback is executed after closing animation completes\n\t\t}\n\n\t\t// Always close popup after secondary action\n\t\thideJoyrideArrow(popupRef.current);\n\t\tconst targetButton = findWhatsNewButton();\n\t\tif (targetButton && popupRef.current) {\n\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\tpopupRef.current,\n\t\t\t\ttargetButton,\n\t\t\t);\n\t\t\tsetTransform(transformValue);\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t\texecuteAfterAnimation(closeCallback);\n\t};\n\n\tconst styles = getMajorPopupStyles(\n\t\tstartAnimation,\n\t\ttransform,\n\t\timageAspectRatio,\n\t\tpadding || feature.padding,\n\t\tfeature.primaryButton?.style,\n\t\tfeature.secondaryButton?.style,\n\t);\n\n\tconst handleVideoClick = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (videoRef.current) {\n\t\t\tif (videoRef.current.paused) {\n\t\t\t\tvideoRef.current.play();\n\t\t\t\tsetIsVideoPaused(false);\n\t\t\t\tsetShowPlayIcon(false);\n\t\t\t} else {\n\t\t\t\tvideoRef.current.pause();\n\t\t\t\tsetIsVideoPaused(true);\n\t\t\t\tsetShowPlayIcon(true);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleVideoKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (videoRef.current) {\n\t\t\t\tif (videoRef.current.paused) {\n\t\t\t\t\tvideoRef.current.play();\n\t\t\t\t\tsetIsVideoPaused(false);\n\t\t\t\t\tsetShowPlayIcon(false);\n\t\t\t\t} else {\n\t\t\t\t\tvideoRef.current.pause();\n\t\t\t\t\tsetIsVideoPaused(true);\n\t\t\t\t\tsetShowPlayIcon(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<div style={styles.outerWrapper}>\n\t\t\t<div\n\t\t\t\tref={popupRef}\n\t\t\t\tstyle={{\n\t\t\t\t\t...styles.container,\n\t\t\t\t\topacity: startAnimation ? 0 : 1,\n\t\t\t\t\ttransition: 'opacity 0.2s ease-in-out, transform 0.3s ease',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<style>{`\n\t\t\t\t[data-popup-content] ul {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding-left: 20px;\n\t\t\t\t\tlist-style-type: disc;\n\t\t\t\t}\n\t\t\t\t[data-popup-content] ul li {\n\t\t\t\t\tmargin-bottom: 8px;\n\t\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tline-height: 16px;\n\t\t\t\t\tfont-family: Inter, sans-serif;\n\t\t\t\t}\n\t\t\t`}</style>\n\t\t\t\t{/* Content Wrapper - contains image and text side by side */}\n\t\t\t\t<div style={styles.contentWrapper}>\n\t\t\t\t\t{/* Image/Video section */}\n\t\t\t\t\t<div style={styles.imageContainer}>\n\t\t\t\t\t\t{feature.productVideo ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<video\n\t\t\t\t\t\t\t\t\tref={videoRef}\n\t\t\t\t\t\t\t\t\tsrc={feature.productVideo}\n\t\t\t\t\t\t\t\t\tstyle={styles.image}\n\t\t\t\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\t\t\tloop\n\t\t\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\t\t\tcontrols\n\t\t\t\t\t\t\t\t\taria-label={`Product video for ${feature.title}`}\n\t\t\t\t\t\t\t\t\tonLoadedMetadata={handleVideoLoadedMetadata}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{(isVideoPaused || showPlayIcon) && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={styles.videoOverlay}\n\t\t\t\t\t\t\t\t\t\tonClick={handleVideoClick}\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\taria-label={isVideoPaused ? 'Play video' : 'Pause video'}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={handleVideoKeyDown}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<PlayIcon width={20} height={20} />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : feature.displayImage ? (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tref={imageRef}\n\t\t\t\t\t\t\t\tsrc={feature.displayImage}\n\t\t\t\t\t\t\t\talt={feature.title}\n\t\t\t\t\t\t\t\tstyle={styles.image}\n\t\t\t\t\t\t\t\tonLoad={handleImageLoad}\n\t\t\t\t\t\t\t\tonError={(e) => {\n\t\t\t\t\t\t\t\t\tif (feature.image) {\n\t\t\t\t\t\t\t\t\t\t(e.target as HTMLImageElement).src = feature.image;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div style={styles.imagePlaceholder}>\n\t\t\t\t\t\t\t\t{TEXT.FEATURE_PREVIEW_PLACEHOLDER}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Content section */}\n\t\t\t\t\t<div style={styles.contentContainer}>\n\t\t\t\t\t\t{/* Skip Button at top-right */}\n\t\t\t\t\t\t<div style={styles.skipButtonContainer}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={handleSkipClick}\n\t\t\t\t\t\t\t\tstyle={styles.skipButton.base}\n\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\tObject.assign(e.currentTarget.style, styles.skipButton.hover)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\tObject.assign(e.currentTarget.style, styles.skipButton.base)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\taria-label=\"Skip feature announcement\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tSkip\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Title */}\n\t\t\t\t\t\t<h3 style={styles.title}>{feature.title}</h3>\n\n\t\t\t\t\t\t{/* Content/Description */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tdata-popup-content\n\t\t\t\t\t\t\tstyle={styles.content}\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t__html: decodeHTMLEntities(\n\t\t\t\t\t\t\t\t\tfeature.content || feature.body || '',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Actions - Buttons and Navigation */}\n\t\t\t\t\t\t<div style={styles.actionsWrapper}>\n\t\t\t\t\t\t\t<div style={styles.buttonsGroup}>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleExplore}\n\t\t\t\t\t\t\t\t\tstyle={styles.exploreButton.base}\n\t\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\tstyles.exploreButton.hover,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\tstyles.exploreButton.base,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{feature.primaryButton?.text ||\n\t\t\t\t\t\t\t\t\t\tfeature.buttonText ||\n\t\t\t\t\t\t\t\t\t\tTEXT.DEFAULT_BUTTON_TEXT}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t{/* Secondary Button (Optional) */}\n\t\t\t\t\t\t\t\t{feature.secondaryButton?.text &&\n\t\t\t\t\t\t\t\t\t(feature.secondaryButton?.redirectionUrl ? (\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref={feature.secondaryButton.redirectionUrl}\n\t\t\t\t\t\t\t\t\t\t\ttarget={\n\t\t\t\t\t\t\t\t\t\t\t\tfeature.secondaryButton.redirectionUrl.startsWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'http',\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '_blank'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '_self'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\trel={\n\t\t\t\t\t\t\t\t\t\t\t\tfeature.secondaryButton.redirectionUrl.startsWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'http',\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'noopener noreferrer'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleSecondaryAction}\n\t\t\t\t\t\t\t\t\t\t\tstyle={styles.secondaryButton.base}\n\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.hover,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.base,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{feature.secondaryButton.text}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleSecondaryAction}\n\t\t\t\t\t\t\t\t\t\t\tstyle={styles.secondaryButton.base}\n\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.hover,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.base,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{feature.secondaryButton.text}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{/* Navigation arrows */}\n\t\t\t\t\t\t\t{totalFeatures > 1 && (\n\t\t\t\t\t\t\t\t<div style={styles.navigationContainer}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tonClick={handlePreviousClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={currentIndex === 0}\n\t\t\t\t\t\t\t\t\t\tstyle={styles.navigationButton(currentIndex === 0).base}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(false).hover,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(false).base,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Previous feature\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Arrow style={{ transform: 'rotate(180deg)' }} />\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tonClick={handleNextClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={currentIndex === totalFeatures - 1}\n\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentIndex === totalFeatures - 1,\n\t\t\t\t\t\t\t\t\t\t\t).base\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== totalFeatures - 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(false).hover,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== totalFeatures - 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentIndex === totalFeatures - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t).base,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Next feature\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Arrow />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{/* Close contentWrapper */}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default MajorUpdatePopup;\n"],"names":["_ref","feature","currentIndex","totalFeatures","onSkip","onExplore","onPrevious","onNext","setIsClosing","setIsClosingParent","onSecondaryAction","ratio","padding","isClosing","useState","startAnimation","setStartAnimation","transform","setTransform","popupRef","useRef","isVideoPaused","setIsVideoPaused","showPlayIcon","setShowPlayIcon","videoRef","imageAspectRatio","setImageAspectRatio","imageRef","useEffect","handleSecondaryAction","e","preventDefault","stopPropagation","action","_a","secondaryButton","closeCallback","url","_b","redirectionUrl","startsWith","window","open","location","href","hideJoyrideArrow","current","targetButton","findWhatsNewButton","transformValue","calculateCloseTransform","executeAfterAnimation","styles","getMajorPopupStyles","primaryButton","style","_jsx","Object","assign","outerWrapper","children","_jsxs","jsxs","ref","container","opacity","transition","jsx","contentWrapper","imageContainer","productVideo","_Fragment","src","image","autoPlay","muted","loop","playsInline","controls","title","onLoadedMetadata","video","currentTarget","width","videoWidth","height","videoHeight","aspectRatio","Math","abs","videoOverlay","onClick","paused","play","pause","role","tabIndex","onKeyDown","key","PlayIcon","displayImage","alt","onLoad","img","naturalWidth","naturalHeight","onError","target","imagePlaceholder","TEXT","FEATURE_PREVIEW_PLACEHOLDER","contentContainer","skipButtonContainer","callback","handleClose","skipButton","base","onMouseEnter","hover","onMouseLeave","content","dangerouslySetInnerHTML","__html","decodeHTMLEntities","body","actionsWrapper","buttonsGroup","handleExplore","redirectUrl","exploreButton","_c","text","buttonText","DEFAULT_BUTTON_TEXT","_d","_e","rel","undefined","navigationContainer","disabled","navigationButton","Arrow"],"mappings":"yfAc0DA,IAYrD,IAZsDC,QAC1DA,EAAOC,aACPA,EAAYC,cACZA,EAAaC,OACbA,EAAMC,UACNA,EAASC,WACTA,EAAUC,OACVA,EACAC,aAAcC,EAAkBC,kBAChCA,EAAiBC,MACjBA,EAAQ,OAAMC,QACdA,GACAZ,gBACA,MAAOa,EAAWL,GAAgBM,EAAQA,UAAC,IACpCC,EAAgBC,GAAqBF,EAAQA,UAAC,IAC9CG,EAAWC,GAAgBJ,EAAQA,SAAC,IACrCK,EAAWC,SAAuB,OACjCC,EAAeC,GAAoBR,EAAQA,UAAC,IAC5CS,EAAcC,GAAmBV,EAAQA,UAAC,GAC3CW,EAAWL,SAAyB,OACnCM,EAAkBC,GAAuBb,EAAQA,SAEtDH,GAEIiB,EAAWR,SAAyB,MAE1CS,EAAAA,WAAU,KACLhB,GAEHG,GAAkB,EAClB,GACC,CAACH,IAEJ,MAsIMiB,EAAyBC,YAC9BA,EAAEC,iBACFD,EAAEE,kBAEF,MAAMC,EAAgC,QAAvBC,EAAAlC,EAAQmC,uBAAe,IAAAD,OAAA,EAAAA,EAAED,OAClCG,EAAgB3B,GAAqBN,EAG3C,GAAe,cAAX8B,EAAwB,CAE3B,MAAMI,EAA6B,QAAvBC,EAAAtC,EAAQmC,uBAAe,IAAAG,OAAA,EAAAA,EAAEC,eACrC,GAAIF,EAAK,CACWA,EAAIG,WAAW,QAEjCC,OAAOC,KAAKL,EAAK,SAAU,uBAE3BI,OAAOE,SAASC,KAAOP,CAExB,CAGD,CAIDQ,mBAAiB3B,EAAS4B,SAC1B,MAAMC,EAAeC,EAAAA,qBACrB,GAAID,GAAgB7B,EAAS4B,QAAS,CACrC,MAAMG,EAAiBC,EAAuBA,wBAC7ChC,EAAS4B,QACTC,GAED9B,EAAagC,EACb,MACAhC,EAAa,YAEdT,SAAAA,GAAqB,GACrBD,GAAa,GACb4C,EAAqBA,sBAACf,EAAc,EAG/BgB,EAASC,EAAmBA,oBACjCvC,EACAE,EACAS,EACAd,GAAWX,EAAQW,QACE,QAArBuB,EAAAlC,EAAQsD,qBAAa,IAAApB,OAAA,EAAAA,EAAEqB,MACE,QAAzBjB,EAAAtC,EAAQmC,uBAAiB,IAAAG,OAAA,EAAAA,EAAAiB,OAoC1B,OACCC,MAAA,MAAAC,OAAAC,OAAA,CAAKH,MAAOH,EAAOO,cAClB,CAAAC,SAAAC,EAAAC,KAAA,MAAAL,OAAAC,OAAA,CACCK,IAAK7C,EACLqC,qCACIH,EAAOY,WAAS,CACnBC,QAASnD,EAAiB,EAAI,EAC9BoD,WAAY,8DAGbV,EAAQW,IAAA,QAAA,CAAAP,SAAA,mXAeRC,EAAKC,KAAA,MAAAL,OAAAC,OAAA,CAAAH,MAAOH,EAAOgB,gBAAc,CAAAR,SAAA,CAEhCJ,EAAKW,IAAA,MAAAV,OAAAC,OAAA,CAAAH,MAAOH,EAAOiB,gBAAc,CAAAT,SAC/B5D,EAAQsE,aACRT,EAAAA,KAAAU,EAAAA,SAAA,CAAAX,SAAA,CACCJ,EACCW,IAAA,QAAA,CAAAJ,IAAKvC,EACLgD,IAAKxE,EAAQsE,aACbf,MAAOH,EAAOqB,MACdC,UACA,EAAAC,OACA,EAAAC,QACAC,aAAW,EACXC,UAAQ,EAAA,kCACyB9E,EAAQ+E,QACzCC,iBAhNPlD,IAEA,MAAMmD,EAAQnD,EAAEoD,cACVC,EAAQF,EAAMG,WACdC,EAASJ,EAAMK,YAErB,GAAIH,GAASE,EAAQ,CACpB,MAAME,EAAcJ,EAAQE,EAExBG,KAAKC,IAAIF,EAAc,GAAK,GAAK,GACpC7D,EAAoB,QACV8D,KAAKC,IAAIF,EAAc,GAAK,GACtC7D,EAAoB,OACV8D,KAAKC,IAAIF,EAAc,EAAI,GAAK,GAC1C7D,EAAoB,OAGpBA,EAFU6D,EAAc,IAEJ,OACVA,EAAc,GAEJ,MAGA,MAErB,MA0LOnE,GAAiBE,IAClBkC,EACCW,IAAA,MAAAV,OAAAC,OAAA,CAAAH,MAAOH,EAAOsC,aACdC,QA/EiB7D,IACzBA,EAAEE,kBACER,EAASsB,UACRtB,EAASsB,QAAQ8C,QACpBpE,EAASsB,QAAQ+C,OACjBxE,GAAiB,GACjBE,GAAgB,KAEhBC,EAASsB,QAAQgD,QACjBzE,GAAiB,GACjBE,GAAgB,IAEjB,EAoEOwE,KAAK,SACLC,SAAU,eACE5E,EAAgB,aAAe,cAC3C6E,UApEmBnE,IACb,UAAVA,EAAEoE,KAA6B,MAAVpE,EAAEoE,MAC1BpE,EAAEC,iBACFD,EAAEE,kBACER,EAASsB,UACRtB,EAASsB,QAAQ8C,QACpBpE,EAASsB,QAAQ+C,OACjBxE,GAAiB,GACjBE,GAAgB,KAEhBC,EAASsB,QAAQgD,QACjBzE,GAAiB,GACjBE,GAAgB,KAGlB,GAqDoC,CAAAqC,SAE7BJ,MAAC2C,UAAQ,CAAChB,MAAO,GAAIE,OAAQ,WAI7BrF,EAAQoG,aACX5C,EAAAA,WACCO,IAAKpC,EACL6C,IAAKxE,EAAQoG,aACbC,IAAKrG,EAAQ+E,MACbxB,MAAOH,EAAOqB,MACd6B,OAnQkBxE,IACxB,MAAMyE,EAAMzE,EAAEoD,cACRC,EAAQoB,EAAIC,aACZnB,EAASkB,EAAIE,cAEnB,GAAItB,GAASE,EAAQ,CACpB,MAAME,EAAcJ,EAAQE,EAGxBG,KAAKC,IAAIF,EAAc,GAAK,GAAK,GACpC7D,EAAoB,QACV8D,KAAKC,IAAIF,EAAc,GAAK,GACtC7D,EAAoB,OACV8D,KAAKC,IAAIF,EAAc,EAAI,GAAK,GAC1C7D,EAAoB,OAGpBA,EAFU6D,EAAc,IAEJ,OACVA,EAAc,GAEJ,MAGA,MAErB,GA2OKmB,QAAU5E,IACL9B,EAAQyE,QACV3C,EAAE6E,OAA4BnC,IAAMxE,EAAQyE,MAC7C,IAIHjB,EAAAW,IAAA,MAAAV,OAAAC,OAAA,CAAKH,MAAOH,EAAOwD,kBAAgB,CAAAhD,SACjCiD,EAAIA,KAACC,kCAMTjD,EAAKC,KAAA,MAAAL,OAAAC,OAAA,CAAAH,MAAOH,EAAO2D,kBAElB,CAAAnD,SAAA,CAAAJ,EAAAW,IAAA,MAAAV,OAAAC,OAAA,CAAKH,MAAOH,EAAO4D,qBAClB,CAAApD,SAAAJ,EAAAW,IAAA,SAAAV,OAAAC,OAAA,CACCiC,QAxLkB7D,IACxBA,EAAEC,iBACFD,EAAEE,kBApHkBiF,KACpBpE,mBAAiB3B,EAAS4B,SAE1B,MAAMC,EAAeC,EAAAA,qBAErB,GAAID,GAAgB7B,EAAS4B,QAAS,CACrC,MAAMG,EAAiBC,EAAuBA,wBAC7ChC,EAAS4B,QACTC,GAED9B,EAAagC,EACb,MACAhC,EAAa,YAGdT,SAAAA,GAAqB,GACrBD,GAAa,GACb4C,EAAqBA,sBAAC8D,EAAS,EAoG/BC,CAAY/G,EAAO,EAsLboD,MAAOH,EAAO+D,WAAWC,KACzBC,aAAevF,GACd2B,OAAOC,OAAO5B,EAAEoD,cAAc3B,MAAOH,EAAO+D,WAAWG,OAExDC,aAAezF,GACd2B,OAAOC,OAAO5B,EAAEoD,cAAc3B,MAAOH,EAAO+D,WAAWC,MAAK,aAElD,6BAA2B,CAAAxD,SAAA,aAOxCJ,EAAIW,IAAA,KAAAV,OAAAC,OAAA,CAAAH,MAAOH,EAAO2B,OAAQ,CAAAnB,SAAA5D,EAAQ+E,SAGlCvB,EAECW,IAAA,MAAA,CAAA,sBAAA,EAAAZ,MAAOH,EAAOoE,QACdC,wBAAyB,CACxBC,OAAQC,EAAkBA,mBACzB3H,EAAQwH,SAAWxH,EAAQ4H,MAAQ,OAMtC/D,EAAKC,KAAA,MAAAL,OAAAC,OAAA,CAAAH,MAAOH,EAAOyE,gBAAc,CAAAjE,SAAA,CAChCC,EAAKC,KAAA,MAAAL,OAAAC,OAAA,CAAAH,MAAOH,EAAO0E,cAClB,CAAAlE,SAAA,CAAAJ,EAAAW,IAAA,SAAAV,OAAAC,OAAA,CACCiC,QA7PcoC,aACrB,MAAM9F,EAA8B,QAArBC,EAAAlC,EAAQsD,qBAAa,IAAApB,OAAA,EAAAA,EAAED,OAEtC,GAAe,eAAXA,EACH7B,SACM,GAAe,cAAX6B,EAAwB,CAElC,MAAMI,GAA2B,QAArBC,EAAAtC,EAAQsD,qBAAa,IAAAhB,OAAA,EAAAA,EAAEC,iBAAkBvC,EAAQgI,YAC7D,GAAI3F,EAAK,CACWA,EAAIG,WAAW,QAEjCC,OAAOC,KAAKL,EAAK,SAAU,uBAE3BI,OAAOE,SAASC,KAAOP,CAExB,CACDjC,GACA,MACAA,IAIDyC,mBAAiB3B,EAAS4B,SAC1B,MAAMC,EAAeC,EAAAA,qBACrB,GAAID,GAAgB7B,EAAS4B,QAAS,CACrC,MAAMG,EAAiBC,EAAuBA,wBAC7ChC,EAAS4B,QACTC,GAED9B,EAAagC,EACb,MACAhC,EAAa,YAEdT,SAAAA,GAAqB,GACrBD,GAAa,EAAK,EA4NXgD,MAAOH,EAAO6E,cAAcb,KAC5BC,aAAevF,GACd2B,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAO6E,cAAcX,OAGvBC,aAAezF,GACd2B,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAO6E,cAAcb,0BAItBc,EAAAlI,EAAQsD,oCAAe6E,OACvBnI,EAAQoI,YACRvB,EAAAA,KAAKwB,wBAGiB,UAAvBrI,EAAQmC,uBAAe,IAAAmG,OAAA,EAAAA,EAAEH,SACD,QAAvBI,EAAAvI,EAAQmC,uBAAe,IAAAoG,OAAA,EAAAA,EAAEhG,gBACzBiB,EAAAA,IAAA,IAAAC,OAAAC,OAAA,CACCd,KAAM5C,EAAQmC,gBAAgBI,eAC9BoE,OACC3G,EAAQmC,gBAAgBI,eAAeC,WACtC,QAEE,SACA,QAEJgG,IACCxI,EAAQmC,gBAAgBI,eAAeC,WACtC,QAEE,2BACAiG,EAEJ9C,QAAS9D,EACT0B,MAAOH,EAAOjB,gBAAgBiF,KAC9BC,aAAevF,GACd2B,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOjB,gBAAgBmF,OAGzBC,aAAezF,GACd2B,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOjB,gBAAgBiF,OACvB,CAAAxD,SAGD5D,EAAQmC,gBAAgBgG,QAG1B3E,EAAAW,IAAA,SAAAV,OAAAC,OAAA,CACCiC,QAAS9D,EACT0B,MAAOH,EAAOjB,gBAAgBiF,KAC9BC,aAAevF,GACd2B,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOjB,gBAAgBmF,OAGzBC,aAAezF,GACd2B,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOjB,gBAAgBiF,iBAIxBpH,EAAQmC,gBAAgBgG,aAM5BjI,EAAgB,GAChB2D,EAAKC,KAAA,MAAAL,OAAAC,OAAA,CAAAH,MAAOH,EAAOsF,qBAClB,CAAA9E,SAAA,CAAAJ,EAAAW,IAAA,SAAAV,OAAAC,OAAA,CACCiC,QAlSR7D,IAEAA,EAAEC,iBACFD,EAAEE,kBACF3B,GAAY,EA+RJsI,SAA2B,IAAjB1I,EACVsD,MAAOH,EAAOwF,iBAAkC,IAAjB3I,GAAoBmH,KACnDC,aAAevF,IACO,IAAjB7B,GACHwD,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOwF,kBAAiB,GAAOtB,MAEhC,EAEFC,aAAezF,IACO,IAAjB7B,GACHwD,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOwF,kBAAiB,GAAOxB,KAEhC,EACD,aACU,oBAEX,CAAAxD,SAAAJ,EAAAW,IAAC0E,UAAM,CAAAtF,MAAO,CAAEvC,UAAW,uBAG5BwC,EAAAW,IAAA,SAAAV,OAAAC,OAAA,CACCiC,QApTgB7D,IACxBA,EAAEC,iBACFD,EAAEE,kBACF1B,GAAQ,EAkTAqI,SAAU1I,IAAiBC,EAAgB,EAC3CqD,MACCH,EAAOwF,iBACN3I,IAAiBC,EAAgB,GAChCkH,KAEHC,aAAevF,IACV7B,IAAiBC,EAAgB,GACpCuD,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOwF,kBAAiB,GAAOtB,MAEhC,EAEFC,aAAezF,IACV7B,IAAiBC,EAAgB,GACpCuD,OAAOC,OACN5B,EAAEoD,cAAc3B,MAChBH,EAAOwF,iBACN3I,IAAiBC,EAAgB,GAChCkH,KAEH,EAES,aAAA,gBAEX,CAAAxD,SAAAJ,EAAAA,IAACqF,EAAK,QAAG,6BASX"}
1
+ {"version":3,"file":"MajorUpdatePopup.js","sources":["../../../../src/components/feature-announcements/MajorUpdatePopup.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport Arrow from '../../assets/icons/chevronRight2.svg';\nimport PlayIcon from '../../assets/icons/play.svg';\nimport { TEXT } from './constants';\nimport { getMajorPopupStyles } from './styles';\nimport { MajorUpdatePopupProps } from './types';\nimport {\n\tcalculateCloseTransform,\n\tdecodeHTMLEntities,\n\texecuteAfterAnimation,\n\tfindWhatsNewButton,\n\thideJoyrideArrow,\n} from './utils';\n\nconst MajorUpdatePopup: React.FC<MajorUpdatePopupProps> = ({\n\tfeature,\n\tcurrentIndex,\n\ttotalFeatures,\n\tonSkip,\n\tonExplore,\n\tonPrevious,\n\tonNext,\n\tsetIsClosing: setIsClosingParent,\n\tonSecondaryAction,\n\tratio = '16:9',\n\tpadding,\n}) => {\n\tconst [isClosing, setIsClosing] = useState(false);\n\tconst [startAnimation, setStartAnimation] = useState(false);\n\tconst [transform, setTransform] = useState('');\n\tconst popupRef = useRef<HTMLDivElement>(null);\n\tconst [isVideoPaused, setIsVideoPaused] = useState(false);\n\tconst [showPlayIcon, setShowPlayIcon] = useState(true);\n\tconst videoRef = useRef<HTMLVideoElement>(null);\n\tconst [imageAspectRatio, setImageAspectRatio] = useState<\n\t\t'16:9' | '1:1' | '4:3'\n\t>(ratio);\n\n\tconst imageRef = useRef<HTMLImageElement>(null);\n\n\tuseEffect(() => {\n\t\tif (isClosing) {\n\t\t\t// Start the shrink animation immediately\n\t\t\tsetStartAnimation(true);\n\t\t}\n\t}, [isClosing]);\n\n\tconst handleClose = (callback: () => void): void => {\n\t\thideJoyrideArrow(popupRef.current);\n\n\t\tconst targetButton = findWhatsNewButton();\n\n\t\tif (targetButton && popupRef.current) {\n\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\tpopupRef.current,\n\t\t\t\ttargetButton,\n\t\t\t);\n\t\t\tsetTransform(transformValue);\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t\texecuteAfterAnimation(callback);\n\t};\n\n\tconst handleImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n\t\tconst img = e.currentTarget;\n\t\tconst width = img.naturalWidth;\n\t\tconst height = img.naturalHeight;\n\n\t\tif (width && height) {\n\t\t\tconst aspectRatio = width / height;\n\n\t\t\t// Determine closest predefined ratio\n\t\t\tif (Math.abs(aspectRatio - 16 / 9) < 0.1) {\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (Math.abs(aspectRatio - 1) < 0.1) {\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t} else if (Math.abs(aspectRatio - 4 / 3) < 0.1) {\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else if (aspectRatio > 1.5) {\n\t\t\t\t// Wide images default to 16:9\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (aspectRatio < 0.9) {\n\t\t\t\t// Tall images default to 4:3\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else {\n\t\t\t\t// Close to square, use 1:1\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleVideoLoadedMetadata = (\n\t\te: React.SyntheticEvent<HTMLVideoElement>,\n\t) => {\n\t\tconst video = e.currentTarget;\n\t\tconst width = video.videoWidth;\n\t\tconst height = video.videoHeight;\n\n\t\tif (width && height) {\n\t\t\tconst aspectRatio = width / height;\n\n\t\t\tif (Math.abs(aspectRatio - 16 / 9) < 0.1) {\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (Math.abs(aspectRatio - 1) < 0.1) {\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t} else if (Math.abs(aspectRatio - 4 / 3) < 0.1) {\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else if (aspectRatio > 1.5) {\n\t\t\t\t// Wide videos default to 16:9\n\t\t\t\tsetImageAspectRatio('16:9');\n\t\t\t} else if (aspectRatio < 0.9) {\n\t\t\t\t// Tall videos default to 4:3\n\t\t\t\tsetImageAspectRatio('4:3');\n\t\t\t} else {\n\t\t\t\t// Close to square, use 1:1\n\t\t\t\tsetImageAspectRatio('1:1');\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleExplore = (): void => {\n\t\tconst action = feature.primaryButton?.action;\n\n\t\tif (action === 'Play Video') {\n\t\t\tonExplore();\n\t\t} else if (action === 'Open link') {\n\t\t\t// Navigate to URL\n\t\t\tconst url = feature.primaryButton?.redirectionUrl || feature.redirectUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tonExplore();\n\t\t}\n\n\t\t// Run closing animation in background\n\t\thideJoyrideArrow(popupRef.current);\n\t\tconst targetButton = findWhatsNewButton();\n\t\tif (targetButton && popupRef.current) {\n\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\tpopupRef.current,\n\t\t\t\ttargetButton,\n\t\t\t);\n\t\t\tsetTransform(transformValue);\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t};\n\n\tconst handleSkipClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\thandleClose(onSkip);\n\t};\n\n\tconst handlePreviousClick = (\n\t\te: React.MouseEvent<HTMLButtonElement>,\n\t): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tonPrevious();\n\t};\n\n\tconst handleNextClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tonNext();\n\t};\n\n\tconst handleSecondaryAction = (e: React.MouseEvent): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tconst action = feature.secondaryButton?.action;\n\t\tconst closeCallback = onSecondaryAction || onSkip;\n\n\t\t// Handle based on action type\n\t\tif (action === 'Play Video') {\n\t\t\tonExplore();\n\t\t} else if (action === 'Open link') {\n\t\t\t// Open URL but don't close popup\n\t\t\tconst url = feature.secondaryButton?.redirectionUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (action === 'Close popup' || action === '') {\n\t\t\t// Just close the popup (empty action also closes)\n\t\t\t// callback is executed after closing animation completes\n\t\t}\n\n\t\t// Always close popup after secondary action\n\t\thideJoyrideArrow(popupRef.current);\n\t\tconst targetButton = findWhatsNewButton();\n\t\tif (targetButton && popupRef.current) {\n\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\tpopupRef.current,\n\t\t\t\ttargetButton,\n\t\t\t);\n\t\t\tsetTransform(transformValue);\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t\texecuteAfterAnimation(closeCallback);\n\t};\n\n\tconst styles = getMajorPopupStyles(\n\t\tstartAnimation,\n\t\ttransform,\n\t\timageAspectRatio,\n\t\tpadding || feature.padding,\n\t\tfeature.primaryButton?.style,\n\t\tfeature.secondaryButton?.style,\n\t);\n\n\tconst handleVideoClick = (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tif (videoRef.current) {\n\t\t\tif (videoRef.current.paused) {\n\t\t\t\tvideoRef.current.play();\n\t\t\t\tsetIsVideoPaused(false);\n\t\t\t\tsetShowPlayIcon(false);\n\t\t\t} else {\n\t\t\t\tvideoRef.current.pause();\n\t\t\t\tsetIsVideoPaused(true);\n\t\t\t\tsetShowPlayIcon(true);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleVideoKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (videoRef.current) {\n\t\t\t\tif (videoRef.current.paused) {\n\t\t\t\t\tvideoRef.current.play();\n\t\t\t\t\tsetIsVideoPaused(false);\n\t\t\t\t\tsetShowPlayIcon(false);\n\t\t\t\t} else {\n\t\t\t\t\tvideoRef.current.pause();\n\t\t\t\t\tsetIsVideoPaused(true);\n\t\t\t\t\tsetShowPlayIcon(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<div style={styles.outerWrapper}>\n\t\t\t<div\n\t\t\t\tref={popupRef}\n\t\t\t\tstyle={{\n\t\t\t\t\t...styles.container,\n\t\t\t\t\topacity: startAnimation ? 0 : 1,\n\t\t\t\t\ttransition: 'opacity 0.2s ease-in-out, transform 0.3s ease',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<style>{`\n\t\t\t\t[data-popup-content] ul {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding-left: 20px;\n\t\t\t\t\tlist-style-type: disc;\n\t\t\t\t}\n\t\t\t\t[data-popup-content] ul li {\n\t\t\t\t\tmargin-bottom: 8px;\n\t\t\t\t\tcolor: rgba(255, 255, 255, 0.8);\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tline-height: 16px;\n\t\t\t\t\tfont-family: Inter, sans-serif;\n\t\t\t\t}\n\t\t\t`}</style>\n\t\t\t\t{/* Content Wrapper - contains image and text side by side */}\n\t\t\t\t<div style={styles.contentWrapper}>\n\t\t\t\t\t{/* Image/Video section */}\n\t\t\t\t\t<div style={styles.imageContainer}>\n\t\t\t\t\t\t{feature.productVideo ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<video\n\t\t\t\t\t\t\t\t\tref={videoRef}\n\t\t\t\t\t\t\t\t\tsrc={feature.productVideo}\n\t\t\t\t\t\t\t\t\tstyle={styles.image}\n\t\t\t\t\t\t\t\t\tautoPlay\n\t\t\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\t\t\tloop\n\t\t\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\t\t\tcontrols\n\t\t\t\t\t\t\t\t\taria-label={`Product video for ${feature.title}`}\n\t\t\t\t\t\t\t\t\tonLoadedMetadata={handleVideoLoadedMetadata}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{(isVideoPaused || showPlayIcon) && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={styles.videoOverlay}\n\t\t\t\t\t\t\t\t\t\tonClick={handleVideoClick}\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\taria-label={isVideoPaused ? 'Play video' : 'Pause video'}\n\t\t\t\t\t\t\t\t\t\tonKeyDown={handleVideoKeyDown}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<PlayIcon width={20} height={20} />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : feature.displayImage ? (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tref={imageRef}\n\t\t\t\t\t\t\t\tsrc={feature.displayImage}\n\t\t\t\t\t\t\t\talt={feature.title}\n\t\t\t\t\t\t\t\tstyle={styles.image}\n\t\t\t\t\t\t\t\tonLoad={handleImageLoad}\n\t\t\t\t\t\t\t\tonError={(e) => {\n\t\t\t\t\t\t\t\t\tif (feature.image) {\n\t\t\t\t\t\t\t\t\t\t(e.target as HTMLImageElement).src = feature.image;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div style={styles.imagePlaceholder}>\n\t\t\t\t\t\t\t\t{TEXT.FEATURE_PREVIEW_PLACEHOLDER}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Content section */}\n\t\t\t\t\t<div style={styles.contentContainer}>\n\t\t\t\t\t\t{/* Skip Button at top-right */}\n\t\t\t\t\t\t<div style={styles.skipButtonContainer}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={handleSkipClick}\n\t\t\t\t\t\t\t\tstyle={styles.skipButton.base}\n\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\tObject.assign(e.currentTarget.style, styles.skipButton.hover)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\tObject.assign(e.currentTarget.style, styles.skipButton.base)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\taria-label=\"Skip feature announcement\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tSkip\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Title */}\n\t\t\t\t\t\t<h3 style={styles.title}>{feature.title}</h3>\n\n\t\t\t\t\t\t{/* Content/Description */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tdata-popup-content\n\t\t\t\t\t\t\tstyle={styles.content}\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t__html: decodeHTMLEntities(\n\t\t\t\t\t\t\t\t\tfeature.content || feature.body || '',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Actions - Buttons and Navigation */}\n\t\t\t\t\t\t<div style={styles.actionsWrapper}>\n\t\t\t\t\t\t\t<div style={styles.buttonsGroup}>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonClick={handleExplore}\n\t\t\t\t\t\t\t\t\tstyle={styles.exploreButton.base}\n\t\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\tstyles.exploreButton.hover,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\tstyles.exploreButton.base,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{feature.primaryButton?.text ||\n\t\t\t\t\t\t\t\t\t\tfeature.buttonText ||\n\t\t\t\t\t\t\t\t\t\tTEXT.DEFAULT_BUTTON_TEXT}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t{/* Secondary Button (Optional) */}\n\t\t\t\t\t\t\t\t{feature.secondaryButton?.text &&\n\t\t\t\t\t\t\t\t\t(feature.secondaryButton?.redirectionUrl ? (\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref={feature.secondaryButton.redirectionUrl}\n\t\t\t\t\t\t\t\t\t\t\ttarget={\n\t\t\t\t\t\t\t\t\t\t\t\tfeature.secondaryButton.redirectionUrl.startsWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'http',\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '_blank'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '_self'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\trel={\n\t\t\t\t\t\t\t\t\t\t\t\tfeature.secondaryButton.redirectionUrl.startsWith(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'http',\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'noopener noreferrer'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleSecondaryAction}\n\t\t\t\t\t\t\t\t\t\t\tstyle={styles.secondaryButton.base}\n\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.hover,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.base,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{feature.secondaryButton.text}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleSecondaryAction}\n\t\t\t\t\t\t\t\t\t\t\tstyle={styles.secondaryButton.base}\n\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.hover,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) =>\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.secondaryButton.base,\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{feature.secondaryButton.text}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{/* Navigation arrows */}\n\t\t\t\t\t\t\t{totalFeatures > 1 && (\n\t\t\t\t\t\t\t\t<div style={styles.navigationContainer}>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tonClick={handlePreviousClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={currentIndex === 0}\n\t\t\t\t\t\t\t\t\t\tstyle={styles.navigationButton(currentIndex === 0).base}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(false).hover,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(false).base,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Previous feature\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Arrow style={{ transform: 'rotate(180deg)' }} />\n\t\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tonClick={handleNextClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={currentIndex === totalFeatures - 1}\n\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentIndex === totalFeatures - 1,\n\t\t\t\t\t\t\t\t\t\t\t).base\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== totalFeatures - 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(false).hover,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\tif (currentIndex !== totalFeatures - 1) {\n\t\t\t\t\t\t\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.navigationButton(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentIndex === totalFeatures - 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t).base,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\taria-label=\"Next feature\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Arrow />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{/* Close contentWrapper */}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default MajorUpdatePopup;\n"],"names":["_ref","feature","currentIndex","totalFeatures","onSkip","onExplore","onPrevious","onNext","setIsClosing","setIsClosingParent","onSecondaryAction","ratio","padding","isClosing","useState","startAnimation","setStartAnimation","transform","setTransform","popupRef","useRef","isVideoPaused","setIsVideoPaused","showPlayIcon","setShowPlayIcon","videoRef","imageAspectRatio","setImageAspectRatio","imageRef","useEffect","handleSecondaryAction","e","preventDefault","stopPropagation","action","_a","secondaryButton","closeCallback","url","_b","redirectionUrl","startsWith","window","open","location","href","hideJoyrideArrow","current","targetButton","findWhatsNewButton","transformValue","calculateCloseTransform","executeAfterAnimation","styles","getMajorPopupStyles","primaryButton","style","_jsx","Object","assign","outerWrapper","children","_jsxs","jsxs","ref","container","opacity","transition","jsx","contentWrapper","imageContainer","productVideo","_Fragment","src","image","autoPlay","muted","loop","playsInline","controls","title","onLoadedMetadata","video","currentTarget","width","videoWidth","height","videoHeight","aspectRatio","Math","abs","videoOverlay","onClick","paused","play","pause","role","tabIndex","onKeyDown","key","PlayIcon","displayImage","alt","onLoad","img","naturalWidth","naturalHeight","onError","target","imagePlaceholder","TEXT","FEATURE_PREVIEW_PLACEHOLDER","contentContainer","skipButtonContainer","callback","handleClose","skipButton","base","onMouseEnter","hover","onMouseLeave","content","dangerouslySetInnerHTML","__html","decodeHTMLEntities","body","actionsWrapper","buttonsGroup","handleExplore","redirectUrl","exploreButton","_c","text","buttonText","DEFAULT_BUTTON_TEXT","_d","_e","rel","undefined","navigationContainer","disabled","navigationButton","Arrow"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("./constants/index.js");require("../../constants/Theme.js"),require("./constants/animations.js");var n=require("./styles/minorPopup.styles.js"),s=require("./utils/htmlHelpers.js"),i=require("./utils/animationHelpers.js"),o=require("./utils/elementHelpers.js");exports.default=a=>{let{feature:l,currentIndex:c,totalFeatures:u,onSkip:d,onExplore:f,onPrevious:p,onNext:g,setIsClosing:y}=a;var j,v;const[h,x]=t.useState(!1),[T,m]=t.useState(!1),[b,E]=t.useState(""),O=t.useRef(null);t.useEffect((()=>{h&&m(!0)}),[h]);const q=n.getMinorPopupStyles(T,b);return e.jsxs("div",Object.assign({ref:O,style:q.container},{children:[e.jsx("div",Object.assign({style:q.imageContainer},{children:l.displayImage?e.jsx("div",Object.assign({style:q.imageWrapper},{children:e.jsx("img",{src:l.displayImage,alt:l.title,style:q.image,onError:e=>{l.image&&(e.target.src=l.image)}})})):e.jsx("div",Object.assign({style:q.imagePlaceholder},{children:r.TEXT.FEATURE_PREVIEW_PLACEHOLDER}))})),e.jsxs("div",Object.assign({style:q.contentContainer},{children:[e.jsxs("div",{children:[e.jsx("h3",Object.assign({style:q.title},{children:l.title})),e.jsx("div",{style:q.content,dangerouslySetInnerHTML:{__html:s.decodeHTMLEntities(l.content||l.body||"")}})]}),e.jsxs("div",Object.assign({style:q.actionsContainer},{children:[(null===(j=l.secondaryButton)||void 0===j?void 0:j.text)&&e.jsx("span",Object.assign({onClick:()=>{var e,t,r;const n=null===(e=l.secondaryButton)||void 0===e?void 0:e.action,s=d;if("Open link"===n){const e=null===(t=l.secondaryButton)||void 0===t?void 0:t.redirectionUrl;if(e){e.startsWith("http")?window.open(e,"_blank","noopener,noreferrer"):window.location.href=e}}else"Close popup"!==n&&""!==n||null===(r=l.secondaryButton)||void 0===r||r.action;if(i.hideJoyrideArrow(O.current),O.current&&l.featureTag){const e=o.findFeatureTagElement(l.featureTag);if(e){const t=i.calculateCloseTransform(O.current,e);E(t)}else E("scale(0)")}else E("scale(0)");null==y||y(!0),x(!0),i.executeAfterAnimation(s)},style:q.understoodText},{children:l.secondaryButton.text})),e.jsx("button",Object.assign({onClick:()=>{var e,t;const r=null===(e=l.primaryButton)||void 0===e?void 0:e.action;if("Play Video"===r)f();else if("Open link"===r){const e=(null===(t=l.primaryButton)||void 0===t?void 0:t.redirectionUrl)||l.redirectUrl;if(e){e.startsWith("http")?window.open(e,"_blank","noopener,noreferrer"):window.location.href=e}f()}else f();if(i.hideJoyrideArrow(O.current),O.current&&l.featureTag){const e=l.featureTag.startsWith("#")||l.featureTag.startsWith(".")||l.featureTag.startsWith("[")?l.featureTag:`#${l.featureTag}`,t=document.querySelector(e);if(t){const e=i.calculateCloseTransform(O.current,t);E(e)}else E("scale(0)")}else E("scale(0)");null==y||y(!0),x(!0)},style:q.exploreButton},{children:(null===(v=l.primaryButton)||void 0===v?void 0:v.text)||l.buttonText||r.TEXT.DEFAULT_BUTTON_TEXT}))]}))]}))]}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("./constants/index.js");require("../../constants/Theme.js"),require("./constants/animations.js");var n=require("./styles/minorPopup.styles.js"),s=require("./utils/htmlHelpers.js"),i=require("./utils/animationHelpers.js"),o=require("./utils/elementHelpers.js");exports.default=l=>{let{feature:a,currentIndex:c,totalFeatures:u,onSkip:d,onExplore:f,onPrevious:p,onNext:y,setIsClosing:g}=l;var j,v;const[h,x]=t.useState(!1),[T,m]=t.useState(!1),[b,E]=t.useState(""),O=t.useRef(null);t.useEffect((()=>{h&&m(!0)}),[h]);const q=n.getMinorPopupStyles(T,b);return e.jsxs("div",Object.assign({ref:O,style:q.container},{children:[e.jsx("div",Object.assign({style:q.imageContainer},{children:a.displayImage?e.jsx("div",Object.assign({style:q.imageWrapper},{children:e.jsx("img",{src:a.displayImage,alt:a.title,style:q.image,onError:e=>{a.image&&(e.target.src=a.image)}})})):e.jsx("div",Object.assign({style:q.imagePlaceholder},{children:r.TEXT.FEATURE_PREVIEW_PLACEHOLDER}))})),e.jsxs("div",Object.assign({style:q.contentContainer},{children:[e.jsxs("div",{children:[e.jsx("h3",Object.assign({style:q.title},{children:a.title})),e.jsx("div",{style:q.content,dangerouslySetInnerHTML:{__html:s.decodeHTMLEntities(a.content||a.body||"")}})]}),e.jsxs("div",Object.assign({style:q.actionsContainer},{children:[(null===(j=a.secondaryButton)||void 0===j?void 0:j.text)&&e.jsx("span",Object.assign({onClick:()=>{var e,t,r;const n=null===(e=a.secondaryButton)||void 0===e?void 0:e.action,s=d;if("Play Video"===n)f();else if("Open link"===n){const e=null===(t=a.secondaryButton)||void 0===t?void 0:t.redirectionUrl;if(e){e.startsWith("http")?window.open(e,"_blank","noopener,noreferrer"):window.location.href=e}}else"Close popup"!==n&&""!==n||null===(r=a.secondaryButton)||void 0===r||r.action;if(i.hideJoyrideArrow(O.current),O.current&&a.featureTag){const e=o.findFeatureTagElement(a.featureTag);if(e){const t=i.calculateCloseTransform(O.current,e);E(t)}else E("scale(0)")}else E("scale(0)");null==g||g(!0),x(!0),i.executeAfterAnimation(s)},style:q.understoodText},{children:a.secondaryButton.text})),e.jsx("button",Object.assign({onClick:()=>{var e,t;const r=null===(e=a.primaryButton)||void 0===e?void 0:e.action;if("Play Video"===r)f();else if("Open link"===r){const e=(null===(t=a.primaryButton)||void 0===t?void 0:t.redirectionUrl)||a.redirectUrl;if(e){e.startsWith("http")?window.open(e,"_blank","noopener,noreferrer"):window.location.href=e}}else f();if(i.hideJoyrideArrow(O.current),O.current&&a.featureTag){const e=a.featureTag.startsWith("#")||a.featureTag.startsWith(".")||a.featureTag.startsWith("[")?a.featureTag:`#${a.featureTag}`,t=document.querySelector(e);if(t){const e=i.calculateCloseTransform(O.current,t);E(e)}else E("scale(0)")}else E("scale(0)");null==g||g(!0),x(!0)},style:q.exploreButton},{children:(null===(v=a.primaryButton)||void 0===v?void 0:v.text)||a.buttonText||r.TEXT.DEFAULT_BUTTON_TEXT}))]}))]}))]}))};
2
2
  //# sourceMappingURL=MinorUpdatePopup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MinorUpdatePopup.js","sources":["../../../../src/components/feature-announcements/MinorUpdatePopup.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { TEXT } from './constants';\nimport { getMinorPopupStyles } from './styles';\nimport { MinorUpdatePopupProps } from './types';\nimport {\n\tcalculateCloseTransform,\n\tdecodeHTMLEntities,\n\texecuteAfterAnimation,\n\tfindFeatureTagElement,\n\thideJoyrideArrow,\n} from './utils';\n\nconst MinorUpdatePopup: React.FC<MinorUpdatePopupProps> = ({\n\tfeature,\n\tcurrentIndex,\n\ttotalFeatures,\n\tonSkip,\n\tonExplore,\n\tonPrevious,\n\tonNext,\n\tsetIsClosing: setIsClosingParent,\n}) => {\n\tconst [isClosing, setIsClosing] = useState(false);\n\tconst [startAnimation, setStartAnimation] = useState(false);\n\tconst [transform, setTransform] = useState('');\n\tconst popupRef = useRef<HTMLDivElement>(null);\n\n\t// Hide Joyride arrow when closing starts, then trigger animation immediately\n\tuseEffect(() => {\n\t\tif (isClosing) {\n\t\t\t// Start the shrink animation immediately\n\t\t\tsetStartAnimation(true);\n\t\t}\n\t}, [isClosing]);\n\n\tconst handleExplore = (): void => {\n\t\tconst action = feature.primaryButton?.action;\n\n\t\tif (action === 'Play Video') {\n\t\t\t// Open video modal\n\t\t\tonExplore();\n\t\t} else if (action === 'Open link') {\n\t\t\t// Navigate to URL\n\t\t\tconst url = feature.primaryButton?.redirectionUrl || feature.redirectUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tonExplore();\n\t\t} else {\n\t\t\t// Default action - call onExplore callback\n\t\t\tonExplore();\n\t\t}\n\n\t\t// Run closing animation in background\n\t\thideJoyrideArrow(popupRef.current);\n\t\tif (popupRef.current && feature.featureTag) {\n\t\t\tconst targetSelector =\n\t\t\t\tfeature.featureTag.startsWith('#') ||\n\t\t\t\tfeature.featureTag.startsWith('.') ||\n\t\t\t\tfeature.featureTag.startsWith('[')\n\t\t\t\t\t? feature.featureTag\n\t\t\t\t\t: `#${feature.featureTag}`;\n\t\t\tconst targetElement = document.querySelector(targetSelector);\n\t\t\tif (targetElement) {\n\t\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\t\tpopupRef.current,\n\t\t\t\t\ttargetElement,\n\t\t\t\t);\n\t\t\t\tsetTransform(transformValue);\n\t\t\t} else {\n\t\t\t\tsetTransform('scale(0)');\n\t\t\t}\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t};\n\n\tconst handleSecondaryAction = (): void => {\n\t\tconst action = feature.secondaryButton?.action;\n\t\tconst closeCallback = onSkip;\n\n\t\t// Handle based on action type\n\t\tif (action === 'Open link') {\n\t\t\t// Open URL\n\t\t\tconst url = feature.secondaryButton?.redirectionUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (action === 'Close popup' || action === '') {\n\t\t\t// Just close the popup\n\t\t\tif (feature.secondaryButton?.action) {\n\t\t\t\t// Call onSecondaryAction if needed\n\t\t\t}\n\t\t}\n\n\t\t// Always close popup after secondary action\n\t\thideJoyrideArrow(popupRef.current);\n\t\tif (popupRef.current && feature.featureTag) {\n\t\t\tconst targetElement = findFeatureTagElement(feature.featureTag);\n\t\t\tif (targetElement) {\n\t\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\t\tpopupRef.current,\n\t\t\t\t\ttargetElement,\n\t\t\t\t);\n\t\t\t\tsetTransform(transformValue);\n\t\t\t} else {\n\t\t\t\tsetTransform('scale(0)');\n\t\t\t}\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t\texecuteAfterAnimation(closeCallback);\n\t};\n\n\tconst styles = getMinorPopupStyles(startAnimation, transform);\n\n\treturn (\n\t\t<div ref={popupRef} style={styles.container}>\n\t\t\t{/* Image section */}\n\t\t\t<div style={styles.imageContainer}>\n\t\t\t\t{feature.displayImage ? (\n\t\t\t\t\t<div style={styles.imageWrapper}>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={feature.displayImage}\n\t\t\t\t\t\t\talt={feature.title}\n\t\t\t\t\t\t\tstyle={styles.image}\n\t\t\t\t\t\t\tonError={(e) => {\n\t\t\t\t\t\t\t\tif (feature.image) {\n\t\t\t\t\t\t\t\t\t(e.target as HTMLImageElement).src = feature.image;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div style={styles.imagePlaceholder}>\n\t\t\t\t\t\t{TEXT.FEATURE_PREVIEW_PLACEHOLDER}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Content section */}\n\t\t\t<div style={styles.contentContainer}>\n\t\t\t\t<div>\n\t\t\t\t\t<h3 style={styles.title}>{feature.title}</h3>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={styles.content}\n\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t__html: decodeHTMLEntities(feature.content || feature.body || ''),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Action buttons */}\n\t\t\t\t<div style={styles.actionsContainer}>\n\t\t\t\t\t{/* Secondary Button (if configured, shows as text link on left) */}\n\t\t\t\t\t{feature.secondaryButton?.text && (\n\t\t\t\t\t\t<span onClick={handleSecondaryAction} style={styles.understoodText}>\n\t\t\t\t\t\t\t{feature.secondaryButton.text}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Primary Button (always shows) */}\n\t\t\t\t\t<button onClick={handleExplore} style={styles.exploreButton}>\n\t\t\t\t\t\t{feature.primaryButton?.text ||\n\t\t\t\t\t\t\tfeature.buttonText ||\n\t\t\t\t\t\t\tTEXT.DEFAULT_BUTTON_TEXT}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default MinorUpdatePopup;\n"],"names":["_ref","feature","currentIndex","totalFeatures","onSkip","onExplore","onPrevious","onNext","setIsClosing","setIsClosingParent","isClosing","useState","startAnimation","setStartAnimation","transform","setTransform","popupRef","useRef","useEffect","styles","getMinorPopupStyles","_jsxs","Object","assign","ref","style","container","children","_jsx","jsx","imageContainer","displayImage","imageWrapper","src","alt","title","image","onError","e","target","imagePlaceholder","TEXT","FEATURE_PREVIEW_PLACEHOLDER","jsxs","contentContainer","content","dangerouslySetInnerHTML","__html","decodeHTMLEntities","body","actionsContainer","_a","secondaryButton","text","onClick","handleSecondaryAction","action","closeCallback","url","_b","redirectionUrl","startsWith","window","open","location","href","_c","hideJoyrideArrow","current","featureTag","targetElement","findFeatureTagElement","transformValue","calculateCloseTransform","executeAfterAnimation","understoodText","handleExplore","primaryButton","redirectUrl","targetSelector","document","querySelector","exploreButton","buttonText","DEFAULT_BUTTON_TEXT"],"mappings":"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"}
1
+ {"version":3,"file":"MinorUpdatePopup.js","sources":["../../../../src/components/feature-announcements/MinorUpdatePopup.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { TEXT } from './constants';\nimport { getMinorPopupStyles } from './styles';\nimport { MinorUpdatePopupProps } from './types';\nimport {\n\tcalculateCloseTransform,\n\tdecodeHTMLEntities,\n\texecuteAfterAnimation,\n\tfindFeatureTagElement,\n\thideJoyrideArrow,\n} from './utils';\n\nconst MinorUpdatePopup: React.FC<MinorUpdatePopupProps> = ({\n\tfeature,\n\tcurrentIndex,\n\ttotalFeatures,\n\tonSkip,\n\tonExplore,\n\tonPrevious,\n\tonNext,\n\tsetIsClosing: setIsClosingParent,\n}) => {\n\tconst [isClosing, setIsClosing] = useState(false);\n\tconst [startAnimation, setStartAnimation] = useState(false);\n\tconst [transform, setTransform] = useState('');\n\tconst popupRef = useRef<HTMLDivElement>(null);\n\n\t// Hide Joyride arrow when closing starts, then trigger animation immediately\n\tuseEffect(() => {\n\t\tif (isClosing) {\n\t\t\t// Start the shrink animation immediately\n\t\t\tsetStartAnimation(true);\n\t\t}\n\t}, [isClosing]);\n\n\tconst handleExplore = (): void => {\n\t\tconst action = feature.primaryButton?.action;\n\n\t\tif (action === 'Play Video') {\n\t\t\tonExplore();\n\t\t} else if (action === 'Open link') {\n\t\t\t// Navigate to URL\n\t\t\tconst url = feature.primaryButton?.redirectionUrl || feature.redirectUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Default action - call onExplore callback\n\t\t\tonExplore();\n\t\t}\n\n\t\t// Run closing animation in background\n\t\thideJoyrideArrow(popupRef.current);\n\t\tif (popupRef.current && feature.featureTag) {\n\t\t\tconst targetSelector =\n\t\t\t\tfeature.featureTag.startsWith('#') ||\n\t\t\t\tfeature.featureTag.startsWith('.') ||\n\t\t\t\tfeature.featureTag.startsWith('[')\n\t\t\t\t\t? feature.featureTag\n\t\t\t\t\t: `#${feature.featureTag}`;\n\t\t\tconst targetElement = document.querySelector(targetSelector);\n\t\t\tif (targetElement) {\n\t\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\t\tpopupRef.current,\n\t\t\t\t\ttargetElement,\n\t\t\t\t);\n\t\t\t\tsetTransform(transformValue);\n\t\t\t} else {\n\t\t\t\tsetTransform('scale(0)');\n\t\t\t}\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t};\n\n\tconst handleSecondaryAction = (): void => {\n\t\tconst action = feature.secondaryButton?.action;\n\t\tconst closeCallback = onSkip;\n\n\t\t// Handle based on action type\n\t\tif (action === 'Play Video') {\n\t\t\tonExplore();\n\t\t} else if (action === 'Open link') {\n\t\t\t// Open URL\n\t\t\tconst url = feature.secondaryButton?.redirectionUrl;\n\t\t\tif (url) {\n\t\t\t\tconst isExternal = url.startsWith('http');\n\t\t\t\tif (isExternal) {\n\t\t\t\t\twindow.open(url, '_blank', 'noopener,noreferrer');\n\t\t\t\t} else {\n\t\t\t\t\twindow.location.href = url;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (action === 'Close popup' || action === '') {\n\t\t\t// Just close the popup\n\t\t\tif (feature.secondaryButton?.action) {\n\t\t\t\t// Call onSecondaryAction if needed\n\t\t\t}\n\t\t}\n\n\t\t// Always close popup after secondary action\n\t\thideJoyrideArrow(popupRef.current);\n\t\tif (popupRef.current && feature.featureTag) {\n\t\t\tconst targetElement = findFeatureTagElement(feature.featureTag);\n\t\t\tif (targetElement) {\n\t\t\t\tconst transformValue = calculateCloseTransform(\n\t\t\t\t\tpopupRef.current,\n\t\t\t\t\ttargetElement,\n\t\t\t\t);\n\t\t\t\tsetTransform(transformValue);\n\t\t\t} else {\n\t\t\t\tsetTransform('scale(0)');\n\t\t\t}\n\t\t} else {\n\t\t\tsetTransform('scale(0)');\n\t\t}\n\t\tsetIsClosingParent?.(true);\n\t\tsetIsClosing(true);\n\t\texecuteAfterAnimation(closeCallback);\n\t};\n\n\tconst styles = getMinorPopupStyles(startAnimation, transform);\n\n\treturn (\n\t\t<div ref={popupRef} style={styles.container}>\n\t\t\t{/* Image section */}\n\t\t\t<div style={styles.imageContainer}>\n\t\t\t\t{feature.displayImage ? (\n\t\t\t\t\t<div style={styles.imageWrapper}>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={feature.displayImage}\n\t\t\t\t\t\t\talt={feature.title}\n\t\t\t\t\t\t\tstyle={styles.image}\n\t\t\t\t\t\t\tonError={(e) => {\n\t\t\t\t\t\t\t\tif (feature.image) {\n\t\t\t\t\t\t\t\t\t(e.target as HTMLImageElement).src = feature.image;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div style={styles.imagePlaceholder}>\n\t\t\t\t\t\t{TEXT.FEATURE_PREVIEW_PLACEHOLDER}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Content section */}\n\t\t\t<div style={styles.contentContainer}>\n\t\t\t\t<div>\n\t\t\t\t\t<h3 style={styles.title}>{feature.title}</h3>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={styles.content}\n\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t__html: decodeHTMLEntities(feature.content || feature.body || ''),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Action buttons */}\n\t\t\t\t<div style={styles.actionsContainer}>\n\t\t\t\t\t{/* Secondary Button (if configured, shows as text link on left) */}\n\t\t\t\t\t{feature.secondaryButton?.text && (\n\t\t\t\t\t\t<span onClick={handleSecondaryAction} style={styles.understoodText}>\n\t\t\t\t\t\t\t{feature.secondaryButton.text}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Primary Button (always shows) */}\n\t\t\t\t\t<button onClick={handleExplore} style={styles.exploreButton}>\n\t\t\t\t\t\t{feature.primaryButton?.text ||\n\t\t\t\t\t\t\tfeature.buttonText ||\n\t\t\t\t\t\t\tTEXT.DEFAULT_BUTTON_TEXT}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default MinorUpdatePopup;\n"],"names":["_ref","feature","currentIndex","totalFeatures","onSkip","onExplore","onPrevious","onNext","setIsClosing","setIsClosingParent","isClosing","useState","startAnimation","setStartAnimation","transform","setTransform","popupRef","useRef","useEffect","styles","getMinorPopupStyles","_jsxs","Object","assign","ref","style","container","children","_jsx","jsx","imageContainer","displayImage","imageWrapper","src","alt","title","image","onError","e","target","imagePlaceholder","TEXT","FEATURE_PREVIEW_PLACEHOLDER","jsxs","contentContainer","content","dangerouslySetInnerHTML","__html","decodeHTMLEntities","body","actionsContainer","_a","secondaryButton","text","onClick","handleSecondaryAction","action","closeCallback","url","_b","redirectionUrl","startsWith","window","open","location","href","_c","hideJoyrideArrow","current","featureTag","targetElement","findFeatureTagElement","transformValue","calculateCloseTransform","executeAfterAnimation","understoodText","handleExplore","primaryButton","redirectUrl","targetSelector","document","querySelector","exploreButton","buttonText","DEFAULT_BUTTON_TEXT"],"mappings":"wZAY0DA,IASrD,IATsDC,QAC1DA,EAAOC,aACPA,EAAYC,cACZA,EAAaC,OACbA,EAAMC,UACNA,EAASC,WACTA,EAAUC,OACVA,EACAC,aAAcC,GACdT,UACA,MAAOU,EAAWF,GAAgBG,EAAQA,UAAC,IACpCC,EAAgBC,GAAqBF,EAAQA,UAAC,IAC9CG,EAAWC,GAAgBJ,EAAQA,SAAC,IACrCK,EAAWC,SAAuB,MAGxCC,EAAAA,WAAU,KACLR,GAEHG,GAAkB,EAClB,GACC,CAACH,IAEJ,MA6FMS,EAASC,EAAAA,oBAAoBR,EAAgBE,GAEnD,OACCO,OAAK,MAAAC,OAAAC,OAAA,CAAAC,IAAKR,EAAUS,MAAON,EAAOO,WAEjC,CAAAC,SAAA,CAAAC,EAAAC,IAAA,MAAAP,OAAAC,OAAA,CAAKE,MAAON,EAAOW,gBACjB,CAAAH,SAAA1B,EAAQ8B,aACRH,EAAKC,IAAA,MAAAP,OAAAC,OAAA,CAAAE,MAAON,EAAOa,cAAY,CAAAL,SAC9BC,EACCC,IAAA,MAAA,CAAAI,IAAKhC,EAAQ8B,aACbG,IAAKjC,EAAQkC,MACbV,MAAON,EAAOiB,MACdC,QAAUC,IACLrC,EAAQmC,QACVE,EAAEC,OAA4BN,IAAMhC,EAAQmC,MAC7C,OAKJR,EAAKC,IAAA,MAAAP,OAAAC,OAAA,CAAAE,MAAON,EAAOqB,kBAAgB,CAAAb,SACjCc,EAAIA,KAACC,kCAMTrB,EAAAsB,KAAA,MAAArB,OAAAC,OAAA,CAAKE,MAAON,EAAOyB,6BAClBvB,EACCsB,KAAA,MAAA,CAAAhB,SAAA,CAAAC,EAAAC,IAAA,KAAAP,OAAAC,OAAA,CAAIE,MAAON,EAAOgB,OAAQ,CAAAR,SAAA1B,EAAQkC,SAClCP,EAAAC,IAAA,MAAA,CACCJ,MAAON,EAAO0B,QACdC,wBAAyB,CACxBC,OAAQC,EAAkBA,mBAAC/C,EAAQ4C,SAAW5C,EAAQgD,MAAQ,UAMjE5B,EAAAsB,KAAA,MAAArB,OAAAC,OAAA,CAAKE,MAAON,EAAO+B,kBAEjB,CAAAvB,SAAA,EAAuB,QAAvBwB,EAAAlD,EAAQmD,uBAAe,IAAAD,OAAA,EAAAA,EAAEE,OACzBzB,EAAAC,IAAA,OAAAP,OAAAC,OAAA,CAAM+B,QAxFmBC,eAC7B,MAAMC,EAAgC,QAAvBL,EAAAlD,EAAQmD,uBAAe,IAAAD,OAAA,EAAAA,EAAEK,OAClCC,EAAgBrD,EAGtB,GAAe,eAAXoD,EACHnD,SACM,GAAe,cAAXmD,EAAwB,CAElC,MAAME,EAA6B,QAAvBC,EAAA1D,EAAQmD,uBAAe,IAAAO,OAAA,EAAAA,EAAEC,eACrC,GAAIF,EAAK,CACWA,EAAIG,WAAW,QAEjCC,OAAOC,KAAKL,EAAK,SAAU,uBAE3BI,OAAOE,SAASC,KAAOP,CAExB,CACD,KAAqB,gBAAXF,GAAuC,KAAXA,GAEX,UAAvBvD,EAAQmD,uBAAe,IAAAc,GAAAA,EAAEV,OAO9B,GADAW,mBAAiBnD,EAASoD,SACtBpD,EAASoD,SAAWnE,EAAQoE,WAAY,CAC3C,MAAMC,EAAgBC,EAAAA,sBAAsBtE,EAAQoE,YACpD,GAAIC,EAAe,CAClB,MAAME,EAAiBC,EAAuBA,wBAC7CzD,EAASoD,QACTE,GAEDvD,EAAayD,EACb,MACAzD,EAAa,WAEd,MACAA,EAAa,YAEdN,SAAAA,GAAqB,GACrBD,GAAa,GACbkE,EAAqBA,sBAACjB,EAAc,EA6CMhC,MAAON,EAAOwD,gBAClD,CAAAhD,SAAA1B,EAAQmD,gBAAgBC,QAK3BzB,EAAQC,IAAA,SAAAP,OAAAC,OAAA,CAAA+B,QA7IUsB,aACrB,MAAMpB,EAA8B,QAArBL,EAAAlD,EAAQ4E,qBAAa,IAAA1B,OAAA,EAAAA,EAAEK,OAEtC,GAAe,eAAXA,EACHnD,SACM,GAAe,cAAXmD,EAAwB,CAElC,MAAME,GAA2B,QAArBC,EAAA1D,EAAQ4E,qBAAa,IAAAlB,OAAA,EAAAA,EAAEC,iBAAkB3D,EAAQ6E,YAC7D,GAAIpB,EAAK,CACWA,EAAIG,WAAW,QAEjCC,OAAOC,KAAKL,EAAK,SAAU,uBAE3BI,OAAOE,SAASC,KAAOP,CAExB,CACD,MAEArD,IAKD,GADA8D,mBAAiBnD,EAASoD,SACtBpD,EAASoD,SAAWnE,EAAQoE,WAAY,CAC3C,MAAMU,EACL9E,EAAQoE,WAAWR,WAAW,MAC9B5D,EAAQoE,WAAWR,WAAW,MAC9B5D,EAAQoE,WAAWR,WAAW,KAC3B5D,EAAQoE,WACJ,IAAApE,EAAQoE,aACVC,EAAgBU,SAASC,cAAcF,GAC7C,GAAIT,EAAe,CAClB,MAAME,EAAiBC,EAAuBA,wBAC7CzD,EAASoD,QACTE,GAEDvD,EAAayD,EACb,MACAzD,EAAa,WAEd,MACAA,EAAa,YAEdN,SAAAA,GAAqB,GACrBD,GAAa,EAAK,EAiGiBiB,MAAON,EAAO+D,eAAa,CAAAvD,UACpC,QAArBgC,EAAA1D,EAAQ4E,qBAAa,IAAAlB,OAAA,EAAAA,EAAEN,OACvBpD,EAAQkF,YACR1C,EAAAA,KAAK2C,kCAIJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/_tslib.js"),t=require("react/jsx-runtime"),i=require("react"),o=require("../tooltips/Tooltip.js"),l=require("./IconButton.styled.js"),s=require("./theme.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=n(i);const r=i.forwardRef(((i,n)=>{var{id:r,iconButtonType:c="default",size:a="default",Icon:u,height:b,width:y,bordered:p,disabled:j,isSelected:g,style:h,svgStyle:f,iconColor:v,iconPadding:x,disabledTooltip:B}=i,I=e.__rest(i,["id","iconButtonType","size","Icon","height","width","bordered","disabled","isSelected","style","svgStyle","iconColor","iconPadding","disabledTooltip"]);const T="xs"===a?16:20,q=null!=b?b:T,_=null!=y?y:T,w=s.getIconColor(c,j,g),O=t.jsx(l.IconButton,Object.assign({id:r,ref:n,style:h,iconButtonType:c,bordered:p,disabled:j,isSelected:g,iconPadding:x,size:a},I,{children:d.default.createElement(u,{height:q,width:_,color:v||w,style:Object.assign({display:"block"},null!=f?f:{})})}));return j&&B?t.jsx(o.Tooltip,Object.assign({body:B},{children:t.jsx("span",Object.assign({style:{display:"inline-block",cursor:"not-allowed"}},{children:O}))})):O}));r.displayName="IconButton",exports.IconButton=r;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/_tslib.js"),t=require("react/jsx-runtime"),o=require("react"),i=require("../tooltips/Tooltip.js"),r=require("./IconButton.styled.js"),l=require("./theme.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=s(o);const n=o.forwardRef(((o,s)=>{var{id:n,iconButtonType:c="default",Icon:a,height:u=20,width:b=20,bordered:y,disabled:p,isSelected:j,style:h,svgStyle:f,iconColor:g,disabledTooltip:v}=o,B=e.__rest(o,["id","iconButtonType","Icon","height","width","bordered","disabled","isSelected","style","svgStyle","iconColor","disabledTooltip"]);const I=l.getIconColor(c,p,j),T=t.jsx(r.IconButton,Object.assign({id:n,ref:s,style:h,iconButtonType:c,bordered:y,disabled:p,isSelected:j},B,{children:d.default.createElement(a,{height:u,width:b,color:g||I,style:Object.assign({display:"block"},null!=f?f:{})})}));return p&&v?t.jsx(i.Tooltip,Object.assign({body:v},{children:t.jsx("span",Object.assign({style:{display:"inline-block",cursor:"not-allowed"}},{children:T}))})):T}));n.displayName="IconButton",exports.IconButton=n;
2
2
  //# sourceMappingURL=IconButton.js.map