@shopgate/engage 7.32.0-beta.2 → 7.32.0-beta.20

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 (662) hide show
  1. package/account/components/Profile/Profile.provider.d.ts +1 -1
  2. package/account/components/Profile/ProfileAddressBook.d.ts.map +1 -1
  3. package/account/components/Profile/ProfileAddressBook.js +13 -22
  4. package/account/components/Profile/ProfileAddressCard.d.ts.map +1 -1
  5. package/account/components/Profile/ProfileAddressCard.js +9 -18
  6. package/account/components/Profile/ProfileForm.d.ts.map +1 -1
  7. package/account/components/Profile/ProfileForm.js +15 -42
  8. package/account/components/ProfileContact/ProfileContact.js +13 -21
  9. package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.d.ts +2 -1
  10. package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.d.ts.map +1 -1
  11. package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.js +61 -5
  12. package/admin-preview/components/FrontendSettingsPreviewBridge/helpers.d.ts +7 -1
  13. package/admin-preview/components/FrontendSettingsPreviewBridge/helpers.d.ts.map +1 -1
  14. package/admin-preview/components/FrontendSettingsPreviewBridge/helpers.js +14 -2
  15. package/admin-preview/components/FrontendSettingsPreviewBridge/types.d.ts +15 -2
  16. package/admin-preview/components/FrontendSettingsPreviewBridge/types.d.ts.map +1 -1
  17. package/admin-preview/constants/index.d.ts +9 -22
  18. package/admin-preview/constants/index.d.ts.map +1 -1
  19. package/admin-preview/constants/index.js +10 -27
  20. package/admin-preview/{detection.d.ts → helpers/_internal/detection.d.ts} +12 -8
  21. package/admin-preview/helpers/_internal/detection.d.ts.map +1 -0
  22. package/admin-preview/helpers/_internal/detection.js +93 -0
  23. package/admin-preview/helpers/_internal/origins.d.ts +20 -0
  24. package/admin-preview/helpers/_internal/origins.d.ts.map +1 -0
  25. package/admin-preview/helpers/_internal/origins.js +72 -0
  26. package/admin-preview/helpers/index.d.ts +20 -0
  27. package/admin-preview/helpers/index.d.ts.map +1 -1
  28. package/admin-preview/helpers/index.js +26 -2
  29. package/admin-preview/hooks/index.d.ts +9 -7
  30. package/admin-preview/hooks/index.d.ts.map +1 -1
  31. package/admin-preview/hooks/index.js +21 -18
  32. package/admin-preview/initialization/_internal/initialFrontendSettings.d.ts +32 -0
  33. package/admin-preview/initialization/_internal/initialFrontendSettings.d.ts.map +1 -0
  34. package/admin-preview/initialization/_internal/initialFrontendSettings.js +43 -0
  35. package/admin-preview/initialization/awaitInitialFrontendSettings.d.ts +23 -0
  36. package/admin-preview/initialization/awaitInitialFrontendSettings.d.ts.map +1 -0
  37. package/admin-preview/initialization/awaitInitialFrontendSettings.js +88 -0
  38. package/back-in-stock/components/BackInStockButton/index.js +5 -5
  39. package/back-in-stock/components/Subscriptions/components/Subscription/index.js +2 -5
  40. package/cart/components/CartItem/CartItemProductLayout.js +2 -1
  41. package/cart/components/CartItem/CartItemProductLayoutWide.js +2 -2
  42. package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.js +7 -14
  43. package/cart/components/CartItem/CartItemQuantityPicker.js +3 -2
  44. package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.js +6 -24
  45. package/cart/components/CartItems/CartItems.js +8 -10
  46. package/cart/components/CartItems/CartItemsSubstitution.js +3 -2
  47. package/cart/components/CartSummaryWide/CartSummaryWide.js +2 -2
  48. package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.js +9 -23
  49. package/cart/components/PaymentBar/PaymentBarCheckoutButton.js +8 -30
  50. package/cart/components/PaymentBar/testUtils/mockFactories.js +4 -11
  51. package/category/components/CategoryImage/index.js +24 -17
  52. package/checkout/components/AddressBook/AddressList.js +14 -23
  53. package/checkout/components/Checkout/CheckoutActions.js +4 -3
  54. package/checkout/components/Checkout/CheckoutAddress.js +8 -0
  55. package/checkout/components/Checkout/CheckoutSection.js +6 -2
  56. package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.js +6 -7
  57. package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.js +7 -17
  58. package/components/Badge/Badge.d.ts +30 -0
  59. package/components/Badge/Badge.d.ts.map +1 -0
  60. package/components/Badge/Badge.js +49 -0
  61. package/components/Badge/index.d.ts +3 -0
  62. package/components/Badge/index.d.ts.map +1 -0
  63. package/components/Badge/index.js +1 -0
  64. package/components/Card/Card.d.ts +27 -0
  65. package/components/Card/Card.d.ts.map +1 -0
  66. package/components/Card/Card.js +57 -0
  67. package/components/Card/index.d.ts +4 -0
  68. package/components/Card/index.d.ts.map +1 -0
  69. package/components/Card/index.js +2 -0
  70. package/components/Card/useCardAppearance.d.ts +11 -0
  71. package/components/Card/useCardAppearance.d.ts.map +1 -0
  72. package/components/Card/useCardAppearance.js +22 -0
  73. package/components/ChipLayout/index.js +2 -4
  74. package/components/NavigationHandler/connector.js +1 -1
  75. package/components/NavigationHandler/index.d.ts +2 -2
  76. package/components/Paper/Paper.d.ts +48 -0
  77. package/components/Paper/Paper.d.ts.map +1 -0
  78. package/components/Paper/Paper.js +64 -0
  79. package/components/Paper/index.d.ts +3 -0
  80. package/components/Paper/index.d.ts.map +1 -0
  81. package/components/Paper/index.js +1 -0
  82. package/components/RadioCard/RadioCard.d.ts.map +1 -1
  83. package/components/RadioCard/RadioCard.js +2 -1
  84. package/components/SheetList/components/Item/index.js +8 -8
  85. package/components/Tabs/components/Tab.d.ts.map +1 -1
  86. package/components/Tabs/components/Tab.js +14 -16
  87. package/components/Typography/Typography.d.ts +1 -1
  88. package/components/Typography/Typography.d.ts.map +1 -1
  89. package/components/Typography/Typography.js +2 -0
  90. package/components/View/components/Content/index.d.ts.map +1 -1
  91. package/components/View/components/Content/index.js +4 -1
  92. package/components/constants.d.ts +6 -0
  93. package/components/constants.d.ts.map +1 -0
  94. package/components/index.d.ts +6 -1
  95. package/components/index.d.ts.map +1 -1
  96. package/components/index.js +6 -2
  97. package/components/v2/Button/Button.d.ts +24 -13
  98. package/components/v2/Button/Button.d.ts.map +1 -1
  99. package/components/v2/Button/Button.js +139 -41
  100. package/components/v2/ButtonBase/ButtonBase.d.ts +50 -10
  101. package/components/v2/ButtonBase/ButtonBase.d.ts.map +1 -1
  102. package/components/v2/ButtonBase/ButtonBase.js +192 -17
  103. package/components/v2/ButtonBase/hooks.d.ts +0 -1
  104. package/components/v2/ButtonBase/hooks.d.ts.map +1 -1
  105. package/components/v2/ButtonBase/hooks.js +36 -12
  106. package/components/v2/ButtonGroup/ButtonGroup.d.ts +11 -5
  107. package/components/v2/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  108. package/components/v2/ButtonGroup/ButtonGroup.js +49 -26
  109. package/components/v2/CircularProgress/CircularProgress.d.ts.map +1 -1
  110. package/components/v2/CircularProgress/CircularProgress.js +10 -5
  111. package/components/v2/IconButton/IconButton.d.ts +72 -0
  112. package/components/v2/IconButton/IconButton.d.ts.map +1 -0
  113. package/components/v2/IconButton/IconButton.js +169 -0
  114. package/components/v2/IconButton/index.d.ts +3 -0
  115. package/components/v2/IconButton/index.d.ts.map +1 -0
  116. package/components/v2/IconButton/index.js +1 -0
  117. package/components/v2/index.d.ts +1 -0
  118. package/components/v2/index.d.ts.map +1 -1
  119. package/components/v2/index.js +1 -0
  120. package/core/helpers/getFullImageSource.d.ts +5 -1
  121. package/core/helpers/getFullImageSource.d.ts.map +1 -1
  122. package/core/helpers/getFullImageSource.js +30 -14
  123. package/core/helpers/i18n.d.ts +4 -0
  124. package/core/helpers/i18n.d.ts.map +1 -1
  125. package/core/helpers/i18n.js +3 -0
  126. package/core/hooks/events/appEvents.d.ts +31 -46
  127. package/core/hooks/events/appEvents.d.ts.map +1 -0
  128. package/core/hooks/events/appEvents.js +26 -29
  129. package/core/hooks/events/index.d.ts +4 -4
  130. package/core/hooks/events/index.d.ts.map +1 -1
  131. package/core/hooks/events/useLongPress.d.ts +55 -58
  132. package/core/hooks/events/useLongPress.d.ts.map +1 -0
  133. package/core/hooks/events/useLongPress.js +23 -16
  134. package/core/hooks/events/usePressHandler.d.ts +32 -21
  135. package/core/hooks/events/usePressHandler.d.ts.map +1 -1
  136. package/core/hooks/events/usePressHandler.js +12 -10
  137. package/core/hooks/events/useScrollDirectionChange.d.ts +72 -61
  138. package/core/hooks/events/useScrollDirectionChange.d.ts.map +1 -0
  139. package/core/hooks/events/useScrollDirectionChange.js +36 -43
  140. package/core/hooks/html/useLoadImage.d.ts +3 -3
  141. package/core/hooks/html/useLoadImage.d.ts.map +1 -1
  142. package/core/hooks/html/useLoadImage.js +2 -2
  143. package/core/hooks/useLocalStorage.d.ts +8 -0
  144. package/core/hooks/useLocalStorage.d.ts.map +1 -1
  145. package/core/hooks/useLocalStorage.js +22 -15
  146. package/core/hooks/useNavigation.d.ts +10 -2
  147. package/core/hooks/useNavigation.d.ts.map +1 -1
  148. package/core/hooks/useNavigation.js +1 -2
  149. package/core/initialization/fetchSettings.d.ts +12 -0
  150. package/core/initialization/fetchSettings.d.ts.map +1 -0
  151. package/core/initialization/fetchSettings.js +134 -0
  152. package/core/initialization/index.d.ts +33 -2
  153. package/core/initialization/index.d.ts.map +1 -1
  154. package/core/initialization/index.js +44 -103
  155. package/core/router/conductor.d.ts +9 -0
  156. package/core/router/helpers.d.ts +28 -15
  157. package/core/router/helpers.d.ts.map +1 -1
  158. package/core/router/helpers.js +8 -8
  159. package/development/action-creators/index.d.ts +3 -0
  160. package/development/action-creators/index.d.ts.map +1 -0
  161. package/development/action-creators/settings.d.ts +45 -0
  162. package/development/action-creators/settings.d.ts.map +1 -0
  163. package/development/action-creators/settings.js +21 -10
  164. package/development/action-creators/storage.d.ts +17 -0
  165. package/development/action-creators/storage.d.ts.map +1 -0
  166. package/development/action-creators/storage.js +7 -4
  167. package/development/components/ClientInformation/ClientInformation.d.ts +6 -0
  168. package/development/components/ClientInformation/ClientInformation.d.ts.map +1 -0
  169. package/development/components/ClientInformation/ClientInformation.js +7 -4
  170. package/development/components/ClientInformation/actions.d.ts +6 -0
  171. package/development/components/ClientInformation/actions.d.ts.map +1 -0
  172. package/development/components/ClientInformation/actions.js +1 -1
  173. package/development/components/ClientInformation/index.d.ts +2 -0
  174. package/development/components/ClientInformation/index.d.ts.map +1 -0
  175. package/development/components/DevelopmentSettings/DevelopmentSettings.d.ts +16 -0
  176. package/development/components/DevelopmentSettings/DevelopmentSettings.d.ts.map +1 -0
  177. package/development/components/DevelopmentSettings/DevelopmentSettings.js +43 -30
  178. package/development/components/DevelopmentSettings/index.d.ts +2 -0
  179. package/development/components/DevelopmentSettings/index.d.ts.map +1 -0
  180. package/development/components/DevelopmentTools/DevelopmentTools.d.ts +10 -0
  181. package/development/components/DevelopmentTools/DevelopmentTools.d.ts.map +1 -0
  182. package/development/components/DevelopmentTools/DevelopmentTools.js +8 -8
  183. package/development/components/DevelopmentTools/Shortcuts.d.ts +6 -0
  184. package/development/components/DevelopmentTools/Shortcuts.d.ts.map +1 -0
  185. package/development/components/DevelopmentTools/Shortcuts.js +0 -1
  186. package/development/components/DevelopmentTools/hooks.d.ts +8 -0
  187. package/development/components/DevelopmentTools/hooks.d.ts.map +1 -0
  188. package/development/components/DevelopmentTools/hooks.js +2 -3
  189. package/development/components/DevelopmentTools/index.d.ts +2 -0
  190. package/development/components/DevelopmentTools/index.d.ts.map +1 -0
  191. package/development/components/SimulatedInsets/SimulatedInsetBottom.d.ts +7 -0
  192. package/development/components/SimulatedInsets/SimulatedInsetBottom.d.ts.map +1 -0
  193. package/development/components/SimulatedInsets/SimulatedInsetBottom.js +1 -6
  194. package/development/components/SimulatedInsets/SimulatedInsetTop.d.ts +7 -0
  195. package/development/components/SimulatedInsets/SimulatedInsetTop.d.ts.map +1 -0
  196. package/development/components/SimulatedInsets/SimulatedInsetTop.js +2 -7
  197. package/development/components/SimulatedInsets/SimulatedInsets.d.ts +13 -0
  198. package/development/components/SimulatedInsets/SimulatedInsets.d.ts.map +1 -0
  199. package/development/components/SimulatedInsets/SimulatedInsets.js +2 -7
  200. package/development/components/SimulatedInsets/index.d.ts +2 -0
  201. package/development/components/SimulatedInsets/index.d.ts.map +1 -0
  202. package/development/components/SimulatedInsets/types.d.ts +15 -0
  203. package/development/components/SimulatedInsets/types.d.ts.map +1 -0
  204. package/development/components/SimulatedInsets/types.js +1 -0
  205. package/development/components/index.d.ts +3 -0
  206. package/development/components/index.d.ts.map +1 -0
  207. package/development/constants/actionTypes.d.ts +6 -0
  208. package/development/constants/actionTypes.d.ts.map +1 -0
  209. package/development/constants/actionTypes.js +2 -1
  210. package/development/constants/index.d.ts +2 -0
  211. package/development/constants/index.d.ts.map +1 -0
  212. package/development/reducers/index.d.ts +24 -0
  213. package/development/reducers/index.d.ts.map +1 -0
  214. package/development/reducers/settings.d.ts +17 -0
  215. package/development/reducers/settings.d.ts.map +1 -0
  216. package/development/reducers/settings.js +48 -35
  217. package/development/reducers/storage.d.ts +17 -0
  218. package/development/reducers/storage.d.ts.map +1 -0
  219. package/development/reducers/storage.js +24 -24
  220. package/development/selectors/index.d.ts +3 -0
  221. package/development/selectors/index.d.ts.map +1 -0
  222. package/development/selectors/settings.d.ts +52 -0
  223. package/development/selectors/settings.d.ts.map +1 -0
  224. package/development/selectors/settings.js +21 -11
  225. package/development/selectors/storage.d.ts +10 -0
  226. package/development/selectors/storage.d.ts.map +1 -0
  227. package/development/selectors/storage.js +6 -18
  228. package/development/streams/index.d.ts +2 -0
  229. package/development/streams/index.d.ts.map +1 -0
  230. package/development/streams/insets.d.ts +8 -0
  231. package/development/streams/insets.d.ts.map +1 -0
  232. package/development/streams/insets.js +1 -3
  233. package/development/subscriptions/index.d.ts +15 -0
  234. package/development/subscriptions/index.d.ts.map +1 -0
  235. package/development/subscriptions/index.js +6 -2
  236. package/development/types/development.d.ts +68 -0
  237. package/development/types/development.d.ts.map +1 -0
  238. package/development/types/development.js +1 -0
  239. package/development/types/index.d.ts +2 -0
  240. package/development/types/index.d.ts.map +1 -0
  241. package/development/types/index.js +1 -0
  242. package/favorites/components/FavoriteButtonWide/FavoriteButtonWide.js +7 -17
  243. package/favorites/components/Item/Item.d.ts +1 -1
  244. package/favorites/components/Item/Item.d.ts.map +1 -1
  245. package/favorites/components/Item/Item.js +2 -5
  246. package/favorites/components/List/List.d.ts +1 -1
  247. package/favorites/components/List/List.d.ts.map +1 -1
  248. package/favorites/components/List/List.js +0 -1
  249. package/favorites/components/List/ListContent.js +4 -5
  250. package/favorites/components/Lists/Lists.js +4 -5
  251. package/filter/components/FilterItem/index.js +12 -2
  252. package/filter/components/FilterPageContent/components/ApplyButton/index.d.ts +21 -0
  253. package/filter/components/FilterPageContent/components/ApplyButton/index.d.ts.map +1 -0
  254. package/filter/components/FilterPageContent/components/ApplyButton/index.js +27 -56
  255. package/filter/components/FilterPageContent/components/FilterButtonBar/index.d.ts +8 -0
  256. package/filter/components/FilterPageContent/components/FilterButtonBar/index.d.ts.map +1 -0
  257. package/filter/components/FilterPageContent/components/FilterButtonBar/index.js +63 -0
  258. package/filter/components/FilterPageContent/components/ResetButton/index.d.ts +17 -0
  259. package/filter/components/FilterPageContent/components/ResetButton/index.d.ts.map +1 -0
  260. package/filter/components/FilterPageContent/components/ResetButton/index.js +26 -46
  261. package/filter/components/FilterPageContent/components/Selector/components/Selected/index.d.ts +19 -0
  262. package/filter/components/FilterPageContent/components/Selector/components/Selected/index.d.ts.map +1 -0
  263. package/filter/components/FilterPageContent/components/Selector/components/Selected/index.js +25 -46
  264. package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.d.ts +14 -0
  265. package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.d.ts.map +1 -0
  266. package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.js +13 -46
  267. package/filter/components/FilterPageContent/components/Selector/components/ValueCheckbox/index.d.ts +25 -0
  268. package/filter/components/FilterPageContent/components/Selector/components/ValueCheckbox/index.d.ts.map +1 -0
  269. package/filter/components/FilterPageContent/components/Selector/components/ValueCheckbox/index.js +77 -0
  270. package/filter/components/FilterPageContent/components/Selector/index.d.ts +43 -0
  271. package/filter/components/FilterPageContent/components/Selector/index.d.ts.map +1 -0
  272. package/filter/components/FilterPageContent/components/Selector/index.js +52 -40
  273. package/filter/components/FilterPageContent/index.d.ts +16 -0
  274. package/filter/components/FilterPageContent/index.d.ts.map +1 -0
  275. package/filter/components/FilterPageContent/index.js +51 -57
  276. package/filter/components/PriceSlider/components/Label/index.js +86 -94
  277. package/filter/components/PriceSlider/index.js +43 -30
  278. package/filter/helpers/buildFilterParamsForFetchFiltersRequest.d.ts +8 -0
  279. package/filter/helpers/buildFilterParamsForFetchFiltersRequest.d.ts.map +1 -0
  280. package/filter/helpers/buildInitialFilters.d.ts +7 -0
  281. package/filter/helpers/buildInitialFilters.d.ts.map +1 -0
  282. package/filter/helpers/buildUpdatedFilters.d.ts +7 -0
  283. package/filter/helpers/buildUpdatedFilters.d.ts.map +1 -0
  284. package/filter/helpers/index.d.ts +5 -0
  285. package/filter/helpers/index.d.ts.map +1 -0
  286. package/filter/helpers/translateFilterLabel.d.ts +8 -0
  287. package/filter/helpers/translateFilterLabel.d.ts.map +1 -0
  288. package/filter/providers/FilterPageProvider.context.d.ts +157 -0
  289. package/filter/providers/FilterPageProvider.context.d.ts.map +1 -0
  290. package/filter/providers/FilterPageProvider.d.ts +24 -0
  291. package/filter/providers/FilterPageProvider.d.ts.map +1 -0
  292. package/filter/providers/FilterPageProvider.js +77 -132
  293. package/locations/components/ChangeLocationButton/ChangeLocationButton.js +10 -14
  294. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotDialog.js +4 -8
  295. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.js +1 -1
  296. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.js +8 -13
  297. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.js +10 -10
  298. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.js +12 -16
  299. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.js +9 -10
  300. package/locations/components/ReserveForm/ReserveForm.js +6 -7
  301. package/locations/components/StoreDetails/components/GetDirectionsButton.js +2 -4
  302. package/locations/components/StoreDetails/components/StoreDetails.js +5 -10
  303. package/locations/components/StoreDetails/components/StoresNearbyListItem.js +13 -21
  304. package/locations/components/StoreFinder/StoreFinderSelectLocationButton.js +5 -11
  305. package/locations/components/StoreFinder/StoreFinderStoreInfoButton.js +5 -11
  306. package/locations/components/StoreList/StoreListProduct.js +2 -3
  307. package/locations/components/StoreList/StoreListSearch.js +1 -0
  308. package/locations/components/StoreList/StoreSelectLocationButton.js +5 -11
  309. package/login/components/ForgotPassword/ForgotPassword.js +11 -23
  310. package/mocks/date.js +31 -0
  311. package/mocks/index.js +3 -0
  312. package/mocks/pipelineRequest.js +1 -0
  313. package/mocks/subscriptions.js +1 -0
  314. package/orders/components/OrderDetails/OrderDetailsAuthenticate.js +5 -7
  315. package/orders/components/OrderHistory/OrderHistoryList.d.ts.map +1 -1
  316. package/orders/components/OrderHistory/OrderHistoryList.js +8 -9
  317. package/orders/components/OrderHistory/OrderHistoryTable.d.ts.map +1 -1
  318. package/orders/components/OrderHistory/OrderHistoryTable.js +4 -0
  319. package/package.json +9 -9
  320. package/page/components/NotFound.d.ts +7 -0
  321. package/page/components/NotFound.d.ts.map +1 -0
  322. package/page/components/NotFound.js +8 -8
  323. package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.d.ts +52 -0
  324. package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.d.ts.map +1 -0
  325. package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.js +4 -4
  326. package/page/components/ResponsiveWidgetImage/index.d.ts +2 -0
  327. package/page/components/ResponsiveWidgetImage/index.d.ts.map +1 -0
  328. package/page/components/WidgetRichText/WidgetRichText.d.ts +25 -0
  329. package/page/components/WidgetRichText/WidgetRichText.d.ts.map +1 -0
  330. package/page/components/WidgetRichText/index.d.ts +2 -0
  331. package/page/components/WidgetRichText/index.d.ts.map +1 -0
  332. package/page/components/WidgetVideo/WidgetVideo.d.ts +43 -0
  333. package/page/components/WidgetVideo/WidgetVideo.d.ts.map +1 -0
  334. package/page/components/WidgetVideo/WidgetVideo.js +33 -39
  335. package/page/components/WidgetVideo/index.d.ts +2 -0
  336. package/page/components/WidgetVideo/index.d.ts.map +1 -0
  337. package/page/components/Widgets/Overlay.d.ts +17 -0
  338. package/page/components/Widgets/Overlay.d.ts.map +1 -0
  339. package/page/components/Widgets/Overlay.js +24 -38
  340. package/page/components/Widgets/Tooltip.d.ts +20 -0
  341. package/page/components/Widgets/Tooltip.d.ts.map +1 -0
  342. package/page/components/Widgets/Tooltip.js +6 -10
  343. package/page/components/Widgets/Widget.d.ts +32 -0
  344. package/page/components/Widgets/Widget.d.ts.map +1 -0
  345. package/page/components/Widgets/Widget.js +14 -28
  346. package/page/components/Widgets/WidgetContext.d.ts +32 -38
  347. package/page/components/Widgets/WidgetContext.d.ts.map +1 -0
  348. package/page/components/Widgets/WidgetContext.js +2 -8
  349. package/page/components/Widgets/WidgetProvider.d.ts +29 -0
  350. package/page/components/Widgets/WidgetProvider.d.ts.map +1 -0
  351. package/page/components/Widgets/WidgetProvider.js +8 -15
  352. package/page/components/Widgets/Widgets.d.ts +16 -0
  353. package/page/components/Widgets/Widgets.d.ts.map +1 -0
  354. package/page/components/Widgets/Widgets.js +5 -12
  355. package/page/components/Widgets/WidgetsPreviewContext.d.ts +21 -0
  356. package/page/components/Widgets/WidgetsPreviewContext.d.ts.map +1 -0
  357. package/page/components/Widgets/WidgetsPreviewContext.js +5 -7
  358. package/page/components/Widgets/WidgetsPreviewProvider.d.ts +18 -0
  359. package/page/components/Widgets/WidgetsPreviewProvider.d.ts.map +1 -0
  360. package/page/components/Widgets/WidgetsPreviewProvider.js +5 -6
  361. package/page/components/Widgets/constants.d.ts +18 -0
  362. package/page/components/Widgets/constants.d.ts.map +1 -0
  363. package/page/components/Widgets/constants.js +24 -2
  364. package/page/components/Widgets/events.d.ts +38 -0
  365. package/page/components/Widgets/events.d.ts.map +1 -0
  366. package/page/components/Widgets/events.js +8 -12
  367. package/page/components/Widgets/helpers.d.ts +69 -0
  368. package/page/components/Widgets/helpers.d.ts.map +1 -0
  369. package/page/components/Widgets/helpers.js +58 -13
  370. package/page/components/Widgets/hooks.d.ts +13 -0
  371. package/page/components/Widgets/hooks.d.ts.map +1 -0
  372. package/page/components/Widgets/hooks.js +18 -12
  373. package/page/components/Widgets/index.d.ts +3 -0
  374. package/page/components/Widgets/index.d.ts.map +1 -0
  375. package/page/components/Widgets/types.d.ts +138 -114
  376. package/page/components/Widgets/types.d.ts.map +1 -0
  377. package/page/components/Widgets/types.js +1 -0
  378. package/page/components/index.d.ts +5 -0
  379. package/page/components/index.d.ts.map +1 -0
  380. package/page/constants/actionTypes.d.ts +4 -0
  381. package/page/constants/actionTypes.d.ts.map +1 -0
  382. package/page/constants/index.d.ts +25 -0
  383. package/page/constants/index.d.ts.map +1 -0
  384. package/page/constants/index.js +5 -3
  385. package/page/helpers/index.d.ts +70 -62
  386. package/page/helpers/index.d.ts.map +1 -0
  387. package/page/helpers/index.js +31 -29
  388. package/page/hooks/index.d.ts +54 -53
  389. package/page/hooks/index.d.ts.map +1 -0
  390. package/page/hooks/index.js +20 -15
  391. package/page/selectors/index.d.ts +32 -0
  392. package/page/selectors/index.d.ts.map +1 -0
  393. package/page/widget.config.schema.json +54 -0
  394. package/page/widgets/Button/Button.js +2 -3
  395. package/page/widgets/CategoryList/CategoryList.js +2 -1
  396. package/page/widgets/HeroBanner/config.json +6 -0
  397. package/page/widgets/Image/config.json +6 -0
  398. package/page/widgets/ImageRow/config.json +6 -0
  399. package/page/widgets/ImageSlider/config.json +6 -0
  400. package/page/widgets/ImageSlider/hooks.js +4 -2
  401. package/page/widgets/NestedCategoryFilter/NestedCategoryFilter.js +8 -8
  402. package/page/widgets/ProductList/ProductList.js +18 -14
  403. package/page/widgets/ProductSlider/ProductSlider.js +1 -15
  404. package/page/widgets/README.md +92 -0
  405. package/page/widgets/Video/Video.d.ts +6 -0
  406. package/page/widgets/Video/Video.d.ts.map +1 -0
  407. package/page/widgets/Video/Video.js +0 -2
  408. package/page/widgets/Video/config.json +6 -0
  409. package/page/widgets/Video/hooks.d.ts +53 -0
  410. package/page/widgets/Video/hooks.d.ts.map +1 -0
  411. package/page/widgets/Video/hooks.js +4 -12
  412. package/page/widgets/Video/index.d.ts +2 -0
  413. package/page/widgets/Video/index.d.ts.map +1 -0
  414. package/product/components/Description/index.js +0 -2
  415. package/product/components/FilterBar/components/Content/components/FilterButton/index.js +38 -46
  416. package/product/components/FilterBar/components/Content/components/FilterChips/components/FilterChip/index.d.ts +38 -0
  417. package/product/components/FilterBar/components/Content/components/FilterChips/components/FilterChip/index.d.ts.map +1 -0
  418. package/product/components/FilterBar/components/Content/components/FilterChips/components/FilterChip/index.js +88 -0
  419. package/product/components/FilterBar/components/Content/components/FilterChips/index.js +54 -35
  420. package/product/components/FilterBar/components/Content/components/Sort/index.js +1 -1
  421. package/product/components/FilterBar/components/Content/index.js +7 -3
  422. package/product/components/FilterBar/index.js +11 -22
  423. package/product/components/Media/FeaturedMedia.js +7 -1
  424. package/product/components/Media/MediaImage.js +24 -23
  425. package/product/components/Media/MediaPlaceholder.js +4 -7
  426. package/product/components/MediaSlider/components/MediaImage/index.js +6 -2
  427. package/product/components/MediaSlider/constants.js +1 -12
  428. package/product/components/OrderQuantityHint/index.js +16 -1
  429. package/product/components/ProductCard/index.js +36 -23
  430. package/product/components/ProductFilters/index.js +2 -6
  431. package/product/components/ProductGrid/components/Item/components/ItemDetails/index.js +12 -4
  432. package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/index.js +0 -1
  433. package/product/components/ProductGrid/components/Item/components/ItemImage/index.js +3 -6
  434. package/product/components/ProductGrid/components/Item/components/ItemName/index.js +6 -1
  435. package/product/components/ProductGrid/components/Item/index.js +10 -2
  436. package/product/components/ProductGrid/components/Layout/index.js +19 -4
  437. package/product/components/ProductGrid/constants.d.ts +2 -0
  438. package/product/components/ProductGrid/constants.d.ts.map +1 -0
  439. package/product/components/ProductGrid/constants.js +1 -0
  440. package/product/components/ProductGrid/hooks.d.ts +11 -0
  441. package/product/components/ProductGrid/hooks.d.ts.map +1 -0
  442. package/product/components/ProductGrid/hooks.js +48 -0
  443. package/product/components/ProductGrid/index.js +3 -6
  444. package/product/components/ProductGridPrice/index.js +0 -6
  445. package/product/components/ProductImage/ProductImage.d.ts +42 -0
  446. package/product/components/ProductImage/ProductImage.d.ts.map +1 -0
  447. package/product/components/ProductImage/ProductImage.js +158 -0
  448. package/product/components/ProductImage/ProductImagePlaceholder.d.ts +23 -0
  449. package/product/components/ProductImage/ProductImagePlaceholder.d.ts.map +1 -0
  450. package/product/components/ProductImage/ProductImagePlaceholder.js +12 -17
  451. package/product/components/ProductImage/constants.d.ts +7 -0
  452. package/product/components/ProductImage/constants.d.ts.map +1 -0
  453. package/product/components/ProductImage/constants.js +6 -0
  454. package/product/components/ProductImage/hooks.d.ts +8 -0
  455. package/product/components/ProductImage/hooks.d.ts.map +1 -0
  456. package/product/components/ProductImage/hooks.js +32 -0
  457. package/product/components/ProductImage/index.d.ts +3 -0
  458. package/product/components/ProductImage/index.d.ts.map +1 -0
  459. package/product/components/ProductImage/index.js +1 -201
  460. package/product/components/ProductList/components/Item/index.js +5 -3
  461. package/product/components/ProductList/components/Layout/index.js +8 -20
  462. package/product/components/ProductRatingStars/ProductRatingStars.d.ts.map +1 -1
  463. package/product/components/ProductRatingStars/ProductRatingStars.js +4 -17
  464. package/product/components/ProductSlider/constants.d.ts +3 -0
  465. package/product/components/ProductSlider/constants.d.ts.map +1 -0
  466. package/product/components/ProductSlider/constants.js +2 -0
  467. package/product/components/ProductSlider/hooks.d.ts +7 -0
  468. package/product/components/ProductSlider/hooks.d.ts.map +1 -0
  469. package/product/components/ProductSlider/hooks.js +40 -0
  470. package/product/components/ProductSlider/index.js +8 -8
  471. package/product/components/Rating/index.js +12 -21
  472. package/product/components/RelationsSlider/RelationsSliderContent.js +3 -2
  473. package/product/components/RelationsSlider/constants.d.ts +3 -0
  474. package/product/components/RelationsSlider/constants.d.ts.map +1 -0
  475. package/product/components/RelationsSlider/constants.js +2 -1
  476. package/product/components/RelationsSlider/hooks.d.ts +6 -0
  477. package/product/components/RelationsSlider/hooks.d.ts.map +1 -0
  478. package/product/components/RelationsSlider/hooks.js +34 -0
  479. package/product/components/UnitQuantityPicker/UnitQuantityPicker.d.ts.map +1 -1
  480. package/product/components/UnitQuantityPicker/UnitQuantityPicker.js +15 -33
  481. package/product/helpers/index.js +29 -11
  482. package/product/hooks/index.js +3 -1
  483. package/product/hooks/useLoadProductImage.js +4 -2
  484. package/product/hooks/useShowEmptyRatingStars.d.ts +7 -0
  485. package/product/hooks/useShowEmptyRatingStars.d.ts.map +1 -0
  486. package/product/hooks/useShowEmptyRatingStars.js +21 -0
  487. package/product/index.js +0 -1
  488. package/product/selectors/mocks/productProperties.mock.js +49 -0
  489. package/push-opt-in/components/PushOptInModal/index.js +4 -4
  490. package/registration/components/Registration/RegistrationFormActions.js +4 -4
  491. package/reviews/components/Reviews/components/AllReviewsLink/index.js +6 -6
  492. package/reviews/components/Reviews/components/Header/components/WriteReviewLink/index.js +4 -3
  493. package/settings/action-creators/appSettings.d.ts +3 -3
  494. package/settings/action-creators/appSettings.d.ts.map +1 -1
  495. package/settings/constants/appSettings.d.ts +3 -0
  496. package/settings/constants/appSettings.d.ts.map +1 -1
  497. package/settings/constants/appSettings.js +6 -1
  498. package/settings/constants/imageSettings.d.ts +52 -0
  499. package/settings/constants/imageSettings.d.ts.map +1 -0
  500. package/settings/constants/imageSettings.js +69 -0
  501. package/settings/helpers/index.d.ts +3 -0
  502. package/settings/helpers/index.d.ts.map +1 -0
  503. package/settings/helpers/index.js +1 -0
  504. package/settings/helpers/resolveImageSettings.d.ts +70 -0
  505. package/settings/helpers/resolveImageSettings.d.ts.map +1 -0
  506. package/settings/helpers/resolveImageSettings.js +171 -0
  507. package/settings/helpers/toImageQuality.d.ts +7 -0
  508. package/settings/helpers/toImageQuality.d.ts.map +1 -0
  509. package/settings/helpers/toImageQuality.js +44 -0
  510. package/settings/helpers/toThumborColor.d.ts +15 -0
  511. package/settings/helpers/toThumborColor.d.ts.map +1 -0
  512. package/settings/helpers/toThumborColor.js +51 -0
  513. package/settings/hooks/index.d.ts +2 -0
  514. package/settings/hooks/index.d.ts.map +1 -0
  515. package/settings/hooks/index.js +1 -0
  516. package/settings/hooks/useImageSettings.d.ts +28 -0
  517. package/settings/hooks/useImageSettings.d.ts.map +1 -0
  518. package/settings/hooks/useImageSettings.js +39 -0
  519. package/settings/reducers/appSettings.d.ts.map +1 -1
  520. package/settings/reducers/appSettings.js +123 -8
  521. package/settings/reducers/index.d.ts +3 -3
  522. package/settings/selectors/appSettings.d.ts +122 -1
  523. package/settings/selectors/appSettings.d.ts.map +1 -1
  524. package/settings/selectors/appSettings.js +80 -1
  525. package/settings/types/appSettings.d.ts +279 -0
  526. package/settings/types/appSettings.d.ts.map +1 -1
  527. package/settings/types/appSettings.js +133 -1
  528. package/styles/helpers/index.d.ts +2 -0
  529. package/styles/helpers/index.js +2 -0
  530. package/styles/helpers/loadFontCss.d.ts +22 -0
  531. package/styles/helpers/loadFontCss.d.ts.map +1 -0
  532. package/styles/helpers/loadFontCss.js +138 -0
  533. package/styles/helpers/loadThemeCss.d.ts +14 -0
  534. package/styles/helpers/loadThemeCss.d.ts.map +1 -0
  535. package/styles/helpers/loadThemeCss.js +123 -0
  536. package/styles/index.d.ts +1 -1
  537. package/styles/index.d.ts.map +1 -1
  538. package/styles/reset/root.js +23 -4
  539. package/styles/reset/typographyCustomProps.d.ts +12 -0
  540. package/styles/reset/typographyCustomProps.d.ts.map +1 -0
  541. package/styles/reset/typographyCustomProps.js +11 -0
  542. package/styles/theme/createDefaultThemeOptions/index.d.ts +11 -1
  543. package/styles/theme/createDefaultThemeOptions/index.d.ts.map +1 -1
  544. package/styles/theme/createDefaultThemeOptions/index.js +129 -10
  545. package/styles/theme/createTheme/createComponents.types.d.ts +118 -4
  546. package/styles/theme/createTheme/createComponents.types.d.ts.map +1 -1
  547. package/styles/theme/createTheme/createComponents.types.js +122 -8
  548. package/styles/theme/createTheme/createCssVarsForColorSchemeThemes.d.ts.map +1 -1
  549. package/styles/theme/createTheme/createCssVarsForColorSchemeThemes.js +13 -3
  550. package/styles/theme/createTheme/createPalette.types.d.ts +5 -0
  551. package/styles/theme/createTheme/createPalette.types.d.ts.map +1 -1
  552. package/styles/theme/createTheme/createPalette.types.js +7 -2
  553. package/styles/theme/createTheme/createShape.d.ts +3 -0
  554. package/styles/theme/createTheme/createShape.d.ts.map +1 -1
  555. package/styles/theme/createTheme/createThemeFromColorScheme.d.ts +3 -1
  556. package/styles/theme/createTheme/createThemeFromColorScheme.d.ts.map +1 -1
  557. package/styles/theme/createTheme/createThemeFromColorScheme.js +6 -3
  558. package/styles/theme/createTheme/createTypography.d.ts +4 -2
  559. package/styles/theme/createTheme/createTypography.js +60 -18
  560. package/styles/theme/createTheme/helpers/cssVarsParser.d.ts.map +1 -1
  561. package/styles/theme/createTheme/helpers/cssVarsParser.js +10 -3
  562. package/styles/theme/createTheme/index.d.ts +2 -1
  563. package/styles/theme/createTheme/index.d.ts.map +1 -1
  564. package/styles/theme/createTheme/index.js +3 -1
  565. package/styles/theme/createTheme/shadows.d.ts +11 -1
  566. package/styles/theme/createTheme/shadows.d.ts.map +1 -1
  567. package/styles/theme/createTheme/shadows.js +41 -7
  568. package/styles/theme/createTheme/types.d.ts +16 -5
  569. package/styles/theme/createTheme/types.d.ts.map +1 -1
  570. package/styles/theme/createTheme/types.js +8 -3
  571. package/styles/theme/hooks/useColorScheme.d.ts +4 -3
  572. package/styles/theme/hooks/useColorScheme.d.ts.map +1 -1
  573. package/styles/theme/hooks/useColorScheme.js +4 -3
  574. package/styles/theme/hooks/useMediaQuery.d.ts +7 -0
  575. package/styles/theme/hooks/useMediaQuery.d.ts.map +1 -1
  576. package/styles/theme/hooks/useMediaQuery.js +5 -5
  577. package/styles/theme/hooks/useTheme.js +1 -1
  578. package/styles/theme/index.d.ts +4 -1
  579. package/styles/theme/index.d.ts.map +1 -1
  580. package/styles/theme/providers/ColorSchemeContext.d.ts +40 -0
  581. package/styles/theme/providers/ColorSchemeContext.d.ts.map +1 -0
  582. package/styles/theme/providers/ColorSchemeContext.js +14 -0
  583. package/styles/theme/providers/ThemeContext.d.ts +3 -0
  584. package/styles/theme/providers/ThemeContext.d.ts.map +1 -0
  585. package/styles/theme/providers/ThemeContext.js +2 -0
  586. package/styles/theme/providers/ThemeProvider.d.ts +3 -13
  587. package/styles/theme/providers/ThemeProvider.d.ts.map +1 -1
  588. package/styles/theme/providers/ThemeProvider.js +86 -13
  589. package/styles/theme/utils/color.d.ts +12 -12
  590. package/styles/theme/utils/color.d.ts.map +1 -1
  591. package/tracking/components/CookieConsentModal/index.js +3 -4
  592. package/tracking/components/PrivacySettings/index.js +3 -3
  593. package/admin-preview/detection.d.ts.map +0 -1
  594. package/admin-preview/detection.js +0 -166
  595. package/cart/components/PaymentBar/PaymentBarReserveButton.connector.js +0 -6
  596. package/cart/components/PaymentBar/PaymentBarReserveButton.js +0 -71
  597. package/components/ChipLayout/spec.js +0 -41
  598. package/components/Logo/spec.js +0 -12
  599. package/components/NavigationHandler/spec.js +0 -84
  600. package/components/Picker/spec.js +0 -94
  601. package/components/PickerUtilize/spec.js +0 -35
  602. package/components/RangeSlider/spec.js +0 -190
  603. package/components/SheetList/components/Item/spec.js +0 -101
  604. package/components/SheetList/spec.js +0 -43
  605. package/components/TimeBoundary/spec.js +0 -83
  606. package/filter/components/FilterItem/spec.js +0 -14
  607. package/filter/components/FilterPageContent/components/ApplyButton/spec.js +0 -46
  608. package/filter/components/FilterPageContent/components/ResetButton/spec.js +0 -29
  609. package/filter/components/FilterPageContent/components/Selector/components/Selected/spec.js +0 -26
  610. package/filter/components/FilterPageContent/components/Selector/components/Toggle/spec.js +0 -34
  611. package/filter/components/FilterPageContent/components/Selector/components/ValueButton/index.js +0 -69
  612. package/filter/components/FilterPageContent/components/Selector/components/ValueButton/spec.js +0 -32
  613. package/filter/components/FilterPageContent/components/Selector/spec.js +0 -33
  614. package/filter/components/PriceSlider/components/Label/spec.js +0 -26
  615. package/filter/components/PriceSlider/spec.js +0 -30
  616. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.connector.js +0 -16
  617. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.js +0 -52
  618. package/product/collections/index.js +0 -1
  619. package/product/components/EffectivityDates/constants.d.ts +0 -3
  620. package/product/components/EffectivityDates/constants.d.ts.map +0 -1
  621. package/product/components/EffectivityDates/helpers.d.ts +0 -6
  622. package/product/components/EffectivityDates/helpers.d.ts.map +0 -1
  623. package/product/components/FilterBar/components/Content/components/FilterChips/connector.js +0 -22
  624. package/product/components/FilterBar/components/Content/spec.js +0 -136
  625. package/product/components/Header/Shipping/spec.js +0 -36
  626. package/product/components/Header/Tiers/components/Tier/spec.js +0 -48
  627. package/product/components/Header/Tiers/spec.js +0 -64
  628. package/product/components/Media/helpers.d.ts +0 -2
  629. package/product/components/Media/helpers.d.ts.map +0 -1
  630. package/product/components/Options/components/Content/spec.js +0 -73
  631. package/product/components/Options/components/TextOption/components/OptionInfo/spec.js +0 -72
  632. package/product/components/ProductDiscountBadge/spec.js +0 -58
  633. package/product/components/ProductGrid/components/Item/components/ItemDetails/spec.js +0 -73
  634. package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/spec.js +0 -33
  635. package/product/components/ProductGrid/components/Item/components/ItemImage/spec.js +0 -16
  636. package/product/components/ProductGrid/components/Item/components/ItemName/spec.js +0 -21
  637. package/product/components/ProductGrid/components/Item/components/ItemPrice/spec.js +0 -37
  638. package/product/components/ProductGrid/spec.js +0 -52
  639. package/product/components/ProductImage/connector.js +0 -12
  640. package/product/components/ProductImage/spec.js +0 -87
  641. package/product/components/ProductSlider/spec.js +0 -37
  642. package/product/components/Rating/connector.js +0 -26
  643. package/product/components/Rating/spec.js +0 -58
  644. package/product/helpers/index.d.ts +0 -13
  645. package/product/helpers/index.d.ts.map +0 -1
  646. package/product/helpers/redirects.d.ts +0 -2
  647. package/product/helpers/redirects.d.ts.map +0 -1
  648. package/product/selectors/helpers/filterProperties.d.ts +0 -8
  649. package/product/selectors/helpers/filterProperties.d.ts.map +0 -1
  650. package/product/selectors/helpers/index.d.ts +0 -3
  651. package/product/selectors/helpers/index.d.ts.map +0 -1
  652. package/product/selectors/helpers/wrapMemoizedSelector.d.ts +0 -2
  653. package/product/selectors/helpers/wrapMemoizedSelector.d.ts.map +0 -1
  654. package/product/selectors/product.d.ts +0 -112
  655. package/product/selectors/product.d.ts.map +0 -1
  656. package/reviews/components/Reviews/components/Header/components/WriteReviewLink/spec.js +0 -52
  657. package/reviews/components/Reviews/components/Header/spec.js +0 -78
  658. package/reviews/components/Reviews/components/List/spec.js +0 -108
  659. package/reviews/components/Reviews/components/RatingCount/spec.js +0 -38
  660. package/reviews/components/Reviews/spec.js +0 -101
  661. package/tsconfig.build.json +0 -26
  662. package/tsconfig.json +0 -19
@@ -0,0 +1,93 @@
1
+ import "core-js/modules/es.array.includes.js";
2
+ /**
3
+ * Internal to the admin-preview package - do not import this module from anywhere else. Consume
4
+ * the isAdminPreviewActive / isPageAdminPreviewActive / isFrontendSettingsAdminPreviewActive
5
+ * helpers from @shopgate/engage/admin-preview/helpers instead.
6
+ */
7
+
8
+ import { PAGE_PREVIEW_PATTERN } from "../../constants";
9
+ export const FRONTEND_SETTINGS_PREVIEW_PARAM = 'frontendSettingsPreview=true';
10
+
11
+ /**
12
+ * The url as it was when this module was first evaluated. Captured here because detection can run
13
+ * again later, when the url may already have been rewritten.
14
+ */
15
+ const INITIAL_HREF = window.location.href;
16
+
17
+ /**
18
+ * Preview mode is latched in memory rather than persisted. Session storage is scoped per origin
19
+ * per tab, not per iframe - the admin shows the preview in same-origin iframes on several screens
20
+ * within one tab, so a persisted flag from one screen would leak into the next. Module state is
21
+ * per document, so each iframe gets its own.
22
+ *
23
+ * The latches only ever go false -> true. Detection must not fall back to re-reading the url,
24
+ * because the frontend settings preview navigates the app normally: once the admin opens another
25
+ * page, the query param is gone from the url even though preview mode is still on.
26
+ */
27
+ let pageAdminPreviewLatched = false;
28
+ let frontendSettingsAdminPreviewLatched = false;
29
+
30
+ /**
31
+ * Detects whether the app is in page admin preview mode. Once detected, the result is latched for
32
+ * the lifetime of the document, because the url is not guaranteed to keep the preview marker.
33
+ * @returns True if the app is in page admin preview mode, false otherwise.
34
+ */
35
+ export const detectPageAdminPreview = () => {
36
+ if (pageAdminPreviewLatched) {
37
+ return true;
38
+ }
39
+ pageAdminPreviewLatched = window.location.pathname.startsWith(PAGE_PREVIEW_PATTERN);
40
+ return pageAdminPreviewLatched;
41
+ };
42
+
43
+ /**
44
+ * Detects whether the app is in frontend settings admin preview mode. Once detected, the result is
45
+ * latched for the lifetime of the document, because the app keeps navigating while the preview is
46
+ * open and the query param only exists on the url it started on.
47
+ * @returns True if the app is in frontend settings admin preview mode, false otherwise.
48
+ */
49
+ export const detectFrontendSettingsAdminPreview = () => {
50
+ if (frontendSettingsAdminPreviewLatched) {
51
+ return true;
52
+ }
53
+ frontendSettingsAdminPreviewLatched = window.location.search.includes(FRONTEND_SETTINGS_PREVIEW_PARAM);
54
+ return frontendSettingsAdminPreviewLatched;
55
+ };
56
+
57
+ /**
58
+ * Detects whether the app is in admin preview mode (pages or frontend settings).
59
+ * @returns True if the app is in admin preview mode, false otherwise.
60
+ */
61
+ export const detectAdminPreview = () => detectPageAdminPreview() || detectFrontendSettingsAdminPreview();
62
+
63
+ /**
64
+ * Returns the current detection state. Exposed on window as SGAdminPreviewDebug so the values can
65
+ * be inspected on a deployed build, from the console of the preview iframe:
66
+ *
67
+ * window.SGAdminPreviewDebug()
68
+ *
69
+ * Compare initialHref with currentHref to see whether the url changed since the app booted, and
70
+ * check latched to see whether a result came from the latch rather than the current url.
71
+ * @returns A snapshot of everything detection depends on.
72
+ */
73
+ export const getAdminPreviewDebugInfo = () => ({
74
+ initialHref: INITIAL_HREF,
75
+ currentHref: window.location.href,
76
+ pathname: window.location.pathname,
77
+ search: window.location.search,
78
+ urlChangedSinceBoot: INITIAL_HREF !== window.location.href,
79
+ isInIframe: window.parent !== window,
80
+ referrer: document.referrer,
81
+ latched: {
82
+ page: pageAdminPreviewLatched,
83
+ frontendSettings: frontendSettingsAdminPreviewLatched
84
+ },
85
+ detected: {
86
+ page: detectPageAdminPreview(),
87
+ frontendSettings: detectFrontendSettingsAdminPreview(),
88
+ any: detectAdminPreview()
89
+ }
90
+ });
91
+
92
+ // @ts-expect-error - debug-only global, intentionally not on the Window type.
93
+ window.SGAdminPreviewDebug = getAdminPreviewDebugInfo;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Internal to the admin-preview package - do not import this module from anywhere else. Consume
3
+ * the isAllowedOrigin / getReferrerOrigin helpers from @shopgate/engage/admin-preview/helpers
4
+ * instead.
5
+ */
6
+ /**
7
+ * Checks if an origin is covered by a list of allowed origin patterns.
8
+ * @param origin The origin to check e.g. "https://app.shopgate.com".
9
+ * @param patterns The allowed origin patterns.
10
+ * @returns Whether the origin is allowed.
11
+ */
12
+ export declare const matchesAllowedOrigin: (origin: string | null | undefined, patterns?: string[]) => origin is string;
13
+ /**
14
+ * Determines the origin of the document that embeds the current page. Since allowed origins can be
15
+ * patterns, and patterns are no valid postMessage targets, this is the only way to address a parent
16
+ * that has not sent a message yet.
17
+ * @returns The referrer origin, or null when it can't be determined.
18
+ */
19
+ export declare const readReferrerOrigin: () => string | null;
20
+ //# sourceMappingURL=origins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origins.d.ts","sourceRoot":"","sources":["../../../../admin-preview/helpers/_internal/origins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,WAAU,MAAM,EAAO,KACtB,MAAM,IAAI,MAwBZ,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAM9C,CAAC"}
@@ -0,0 +1,72 @@
1
+ import "core-js/modules/es.array.includes.js";
2
+ import "core-js/modules/es.string.replace.js";
3
+ import "core-js/modules/web.url.js";
4
+ import "core-js/modules/web.url.to-json.js";
5
+ import "core-js/modules/web.url-search-params.js";
6
+ /**
7
+ * Internal to the admin-preview package - do not import this module from anywhere else. Consume
8
+ * the isAllowedOrigin / getReferrerOrigin helpers from @shopgate/engage/admin-preview/helpers
9
+ * instead.
10
+ */
11
+
12
+ /**
13
+ * Regular expression source that a "*" within an allowed origin pattern is replaced with. It
14
+ * matches one or more domain labels, but never a dot at the very end, so that the suffix of the
15
+ * pattern stays anchored to the end of the origin.
16
+ */
17
+ const ORIGIN_WILDCARD_SOURCE = '(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+';
18
+
19
+ // Cache for regular expressions that were already created from an origin pattern.
20
+ const originPatternCache = new Map();
21
+
22
+ /**
23
+ * Converts an allowed origin pattern into an anchored regular expression. Every character except
24
+ * the "*" wildcard is matched literally.
25
+ * @param pattern The origin pattern e.g. "https://*.shopgate.com".
26
+ * @returns The regular expression for the pattern.
27
+ */
28
+ const createOriginRegExp = pattern => {
29
+ const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
30
+ return new RegExp(`^${escaped.split('\\*').join(ORIGIN_WILDCARD_SOURCE)}$`);
31
+ };
32
+
33
+ /**
34
+ * Checks if an origin is covered by a list of allowed origin patterns.
35
+ * @param origin The origin to check e.g. "https://app.shopgate.com".
36
+ * @param patterns The allowed origin patterns.
37
+ * @returns Whether the origin is allowed.
38
+ */
39
+ export const matchesAllowedOrigin = (origin, patterns = []) => {
40
+ // Opaque origins are serialized as "null" and must never be trusted.
41
+ if (typeof origin !== 'string' || origin === '' || origin === 'null') {
42
+ return false;
43
+ }
44
+ return patterns.some(pattern => {
45
+ if (typeof pattern !== 'string' || pattern === '') {
46
+ return false;
47
+ }
48
+ if (!pattern.includes('*')) {
49
+ return pattern === origin;
50
+ }
51
+ let regExp = originPatternCache.get(pattern);
52
+ if (!regExp) {
53
+ regExp = createOriginRegExp(pattern);
54
+ originPatternCache.set(pattern, regExp);
55
+ }
56
+ return regExp.test(origin);
57
+ });
58
+ };
59
+
60
+ /**
61
+ * Determines the origin of the document that embeds the current page. Since allowed origins can be
62
+ * patterns, and patterns are no valid postMessage targets, this is the only way to address a parent
63
+ * that has not sent a message yet.
64
+ * @returns The referrer origin, or null when it can't be determined.
65
+ */
66
+ export const readReferrerOrigin = () => {
67
+ try {
68
+ return new URL(document.referrer).origin;
69
+ } catch (e) {
70
+ return null;
71
+ }
72
+ };
@@ -13,4 +13,24 @@ export declare const isPageAdminPreviewActive: () => boolean;
13
13
  * @returns True if the app is in frontend settings admin preview mode, false otherwise.
14
14
  */
15
15
  export declare const isFrontendSettingsAdminPreviewActive: () => boolean;
16
+ /**
17
+ * Checks if navigation is blocked. Page admin preview renders a single page in an iframe, so
18
+ * leaving that page would only ever show the admin something it did not ask to preview.
19
+ * Frontend settings preview is not affected - it previews styling on the regular app.
20
+ * @returns True if the app must not navigate, false otherwise.
21
+ */
22
+ export declare const isNavigationBlocked: () => boolean;
23
+ /**
24
+ * Checks if an origin is covered by a list of allowed origin patterns. See
25
+ * ALLOWED_ADMIN_PREVIEW_ORIGINS for details about the supported wildcard syntax.
26
+ * @param origin The origin to check e.g. "https://app.shopgate.com".
27
+ * @param patterns The allowed origin patterns.
28
+ * @returns Whether the origin is allowed.
29
+ */
30
+ export declare const isAllowedOrigin: (origin: string | null | undefined, patterns?: string[]) => origin is string;
31
+ /**
32
+ * Determines the origin of the document that embeds the current page.
33
+ * @returns The referrer origin, or null when it can't be determined.
34
+ */
35
+ export declare const getReferrerOrigin: () => string | null;
16
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../admin-preview/helpers/index.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAO,OAClB,CAAC;AAEvB;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAO,OAClB,CAAC;AAE3B;;;GAGG;AACH,eAAO,MAAM,oCAAoC,QAAO,OAClB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../admin-preview/helpers/index.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAO,OAClB,CAAC;AAEvB;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAO,OAClB,CAAC;AAE3B;;;GAGG;AACH,eAAO,MAAM,oCAAoC,QAAO,OAClB,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAAO,OACX,CAAC;AAE7B;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,WAAU,MAAM,EAAO,KACtB,MAAM,IAAI,MAAgD,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAM,GAAG,IAA4B,CAAC"}
@@ -1,4 +1,5 @@
1
- import { detectAdminPreview, detectFrontendSettingsAdminPreview, detectPageAdminPreview } from "../detection";
1
+ import { detectAdminPreview, detectFrontendSettingsAdminPreview, detectPageAdminPreview } from "./_internal/detection";
2
+ import { matchesAllowedOrigin, readReferrerOrigin } from "./_internal/origins";
2
3
 
3
4
  /**
4
5
  * Checks if the app is currently in admin preview mode (pages or frontend settings).
@@ -16,4 +17,27 @@ export const isPageAdminPreviewActive = () => detectPageAdminPreview();
16
17
  * Checks if the app is currently in frontend settings admin preview mode.
17
18
  * @returns True if the app is in frontend settings admin preview mode, false otherwise.
18
19
  */
19
- export const isFrontendSettingsAdminPreviewActive = () => detectFrontendSettingsAdminPreview();
20
+ export const isFrontendSettingsAdminPreviewActive = () => detectFrontendSettingsAdminPreview();
21
+
22
+ /**
23
+ * Checks if navigation is blocked. Page admin preview renders a single page in an iframe, so
24
+ * leaving that page would only ever show the admin something it did not ask to preview.
25
+ * Frontend settings preview is not affected - it previews styling on the regular app.
26
+ * @returns True if the app must not navigate, false otherwise.
27
+ */
28
+ export const isNavigationBlocked = () => isPageAdminPreviewActive();
29
+
30
+ /**
31
+ * Checks if an origin is covered by a list of allowed origin patterns. See
32
+ * ALLOWED_ADMIN_PREVIEW_ORIGINS for details about the supported wildcard syntax.
33
+ * @param origin The origin to check e.g. "https://app.shopgate.com".
34
+ * @param patterns The allowed origin patterns.
35
+ * @returns Whether the origin is allowed.
36
+ */
37
+ export const isAllowedOrigin = (origin, patterns = []) => matchesAllowedOrigin(origin, patterns);
38
+
39
+ /**
40
+ * Determines the origin of the document that embeds the current page.
41
+ * @returns The referrer origin, or null when it can't be determined.
42
+ */
43
+ export const getReferrerOrigin = () => readReferrerOrigin();
@@ -13,24 +13,26 @@ export interface IframeMessengerResult<TMessage extends MessageData = MessageDat
13
13
  /**
14
14
  * Send data up to window.parent.
15
15
  * If targetOrigin is omitted, uses the most recently seen origin
16
- * (from an incoming message). If none was seen yet, falls back to
17
- * the origin derived from document.referrer, then parentOrigins[0], then "*".
16
+ * (from an incoming message), otherwise the origin derived from document.referrer.
17
+ * Nothing is sent when neither of them is covered by parentOrigins.
18
18
  */
19
19
  sendToParent: (data: TMessage, targetOrigin?: string) => void;
20
20
  }
21
21
  /**
22
22
  * Hook for postMessage communication when your component is inside an iframe.
23
23
  *
24
- * Listens on window for "message" events from any origin in parentOrigins,
25
- * and only calls onMessage(data, rawEvent) if both origin and source match.
24
+ * Listens on window for "message" events, and only calls onMessage(data, rawEvent) if the origin
25
+ * of the event is covered by parentOrigins and the message came from window.parent.
26
26
  *
27
27
  * @param onMessage Callback invoked when a trusted message arrives.
28
28
  * Receives data and the raw event so consumers can inspect origin, source,
29
29
  * and other metadata when needed.
30
- * @param parentOrigins Array of allowed parent origin strings, e.g.
31
- * ['https://a.example.com', 'https://b.example.com'].
30
+ * @param parentOrigins Array of allowed parent origin patterns, e.g.
31
+ * ['https://a.example.com', 'https://*.example.com']. See ALLOWED_ADMIN_PREVIEW_ORIGINS for
32
+ * details about the supported wildcard syntax.
33
+ * @param enabled Whether the message listener is supposed to be attached.
32
34
  * @returns An object with a single method:
33
35
  * sendToParent(data, [targetOrigin]) to post data to the parent window.
34
36
  */
35
- export declare function useIframeMessenger<TMessage extends MessageData = MessageData>(onMessage: OnIframeMessage<TMessage>, parentOrigins: string[]): IframeMessengerResult<TMessage>;
37
+ export declare function useIframeMessenger<TMessage extends MessageData = MessageData>(onMessage: OnIframeMessage<TMessage>, parentOrigins: string[], enabled?: boolean): IframeMessengerResult<TMessage>;
36
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../admin-preview/hooks/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IAAI,CACxE,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,KAC7B,IAAI,CAAC;AAEV,MAAM,WAAW,qBAAqB,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAC/E;;;;;OAKG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC3E,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EACpC,aAAa,EAAE,MAAM,EAAE,GACtB,qBAAqB,CAAC,QAAQ,CAAC,CAmEjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../admin-preview/hooks/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IAAI,CACxE,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,KAC7B,IAAI,CAAC;AAEV,MAAM,WAAW,qBAAqB,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAC/E;;;;;OAKG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC3E,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EACpC,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,UAAO,GACb,qBAAqB,CAAC,QAAQ,CAAC,CAkEjC"}
@@ -1,24 +1,23 @@
1
- import "core-js/modules/es.array.includes.js";
2
- import "core-js/modules/web.url.js";
3
- import "core-js/modules/web.url.to-json.js";
4
- import "core-js/modules/web.url-search-params.js";
5
1
  import { useCallback, useEffect, useRef } from 'react';
6
2
  import { logger } from '@shopgate/engage/core/helpers';
3
+ import { getReferrerOrigin, isAllowedOrigin } from "../helpers";
7
4
  /**
8
5
  * Hook for postMessage communication when your component is inside an iframe.
9
6
  *
10
- * Listens on window for "message" events from any origin in parentOrigins,
11
- * and only calls onMessage(data, rawEvent) if both origin and source match.
7
+ * Listens on window for "message" events, and only calls onMessage(data, rawEvent) if the origin
8
+ * of the event is covered by parentOrigins and the message came from window.parent.
12
9
  *
13
10
  * @param onMessage Callback invoked when a trusted message arrives.
14
11
  * Receives data and the raw event so consumers can inspect origin, source,
15
12
  * and other metadata when needed.
16
- * @param parentOrigins Array of allowed parent origin strings, e.g.
17
- * ['https://a.example.com', 'https://b.example.com'].
13
+ * @param parentOrigins Array of allowed parent origin patterns, e.g.
14
+ * ['https://a.example.com', 'https://*.example.com']. See ALLOWED_ADMIN_PREVIEW_ORIGINS for
15
+ * details about the supported wildcard syntax.
16
+ * @param enabled Whether the message listener is supposed to be attached.
18
17
  * @returns An object with a single method:
19
18
  * sendToParent(data, [targetOrigin]) to post data to the parent window.
20
19
  */
21
- export function useIframeMessenger(onMessage, parentOrigins) {
20
+ export function useIframeMessenger(onMessage, parentOrigins, enabled = true) {
22
21
  // Keep a ref to the latest onMessage callback so the listener always has it.
23
22
  const onMessageRef = useRef(onMessage);
24
23
  useEffect(() => {
@@ -31,15 +30,15 @@ export function useIframeMessenger(onMessage, parentOrigins) {
31
30
  /**
32
31
  * Send a message up to the parent window.
33
32
  * @param data - The data object to post.
34
- * @param targetOrigin Optional override for the origin to post to.
35
- * If omitted, uses the last seen origin, then referrer origin,
36
- * then parentOrigins[0], then "*".
33
+ * @param targetOrigin Optional override for the origin to post to. Must be covered by
34
+ * parentOrigins. If omitted, uses the last seen origin, then the referrer origin.
37
35
  */
38
36
  const sendToParent = useCallback((data, targetOrigin) => {
39
- // Determine which origin to use: explicit, then last seen, then first, then "*".
40
- const originToUse = typeof targetOrigin === 'string' ? targetOrigin : lastOriginRef.current ?? (document.referrer ? new URL(document.referrer).origin : undefined) ?? parentOrigins[0] ?? '*';
37
+ // Determine which origin to use: explicit, then last seen, then the embedding document.
38
+ // Patterns are no valid postMessage targets, so an unresolved origin aborts the send.
39
+ const originToUse = [targetOrigin, lastOriginRef.current, getReferrerOrigin()].find(origin => isAllowedOrigin(origin, parentOrigins));
41
40
  if (!originToUse) {
42
- logger.warn('useIframeMessenger: no targetOrigin available. ' + 'Provide parentOrigins or pass targetOrigin.');
41
+ logger.warn('useIframeMessenger: no allowed targetOrigin available. ' + 'Provide parentOrigins or pass an allowed targetOrigin.');
43
42
  return;
44
43
  }
45
44
  window.parent.postMessage(data, originToUse);
@@ -47,13 +46,17 @@ export function useIframeMessenger(onMessage, parentOrigins) {
47
46
 
48
47
  // Attach / detach the "message" listener.
49
48
  useEffect(() => {
49
+ if (!enabled) {
50
+ return undefined;
51
+ }
52
+
50
53
  /**
51
54
  * Handler for incoming postMessage events.
52
55
  * @param rawEvent The original MessageEvent object.
53
56
  */
54
57
  function handler(rawEvent) {
55
- // Only proceed if the origin is in our whitelist.
56
- if (!parentOrigins.includes(rawEvent.origin)) return;
58
+ // Only proceed if the origin is covered by our whitelist.
59
+ if (!isAllowedOrigin(rawEvent.origin, parentOrigins)) return;
57
60
  // Ensure the message actually came from window.parent.
58
61
  if (rawEvent.source !== window.parent) return;
59
62
 
@@ -67,7 +70,7 @@ export function useIframeMessenger(onMessage, parentOrigins) {
67
70
  return () => {
68
71
  window.removeEventListener('message', handler);
69
72
  };
70
- }, [parentOrigins, sendToParent]);
73
+ }, [enabled, parentOrigins]);
71
74
  return {
72
75
  sendToParent
73
76
  };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Internal to the admin-preview package - do not import this module from anywhere else.
3
+ *
4
+ * Hands the payload that `awaitInitialFrontendSettings` received over to the
5
+ * FrontendSettingsPreviewBridge, which mounts long after app start finished. Module state rather
6
+ * than a store slice, because the styling map never belongs in redux - it is applied to a style
7
+ * tag, and the bridge only needs it to avoid removing what app start already applied.
8
+ */
9
+ import type { FrontendSettingsStyling } from '../../components/FrontendSettingsPreviewBridge/types';
10
+ /**
11
+ * Records the payload that app start received.
12
+ * @param initialStyling The styling map the payload carried, if any.
13
+ */
14
+ export declare const setInitialFrontendSettings: (initialStyling: FrontendSettingsStyling | null) => void;
15
+ /**
16
+ * Whether app start received a payload. A payload without a styling map still counts - it
17
+ * carried app settings, which is enough to consider the preview applied.
18
+ * @returns True when a payload arrived during app start.
19
+ */
20
+ export declare const hasInitialFrontendSettings: () => boolean;
21
+ /**
22
+ * The styling map that app start applied, so the bridge can seed its state with it instead of
23
+ * starting at null - which would make its first effect remove the style tag again.
24
+ * @returns The styling map, or null when none arrived.
25
+ */
26
+ export declare const getInitialFrontendSettingsStyling: () => FrontendSettingsStyling | null;
27
+ /**
28
+ * Test only. Module state outlives a test file's individual cases, so specs need a way back to the
29
+ * initial state.
30
+ */
31
+ export declare const resetInitialFrontendSettings: () => void;
32
+ //# sourceMappingURL=initialFrontendSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialFrontendSettings.d.ts","sourceRoot":"","sources":["../../../../admin-preview/initialization/_internal/initialFrontendSettings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAMpG;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,gBAAgB,uBAAuB,GAAG,IAAI,SAGxF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAO,OAAmB,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,QAAO,uBAAuB,GAAG,IAAe,CAAC;AAE/F;;;GAGG;AACH,eAAO,MAAM,4BAA4B,YAGxC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Internal to the admin-preview package - do not import this module from anywhere else.
3
+ *
4
+ * Hands the payload that `awaitInitialFrontendSettings` received over to the
5
+ * FrontendSettingsPreviewBridge, which mounts long after app start finished. Module state rather
6
+ * than a store slice, because the styling map never belongs in redux - it is applied to a style
7
+ * tag, and the bridge only needs it to avoid removing what app start already applied.
8
+ */
9
+
10
+ let received = false;
11
+ let styling = null;
12
+
13
+ /**
14
+ * Records the payload that app start received.
15
+ * @param initialStyling The styling map the payload carried, if any.
16
+ */
17
+ export const setInitialFrontendSettings = initialStyling => {
18
+ received = true;
19
+ styling = initialStyling;
20
+ };
21
+
22
+ /**
23
+ * Whether app start received a payload. A payload without a styling map still counts - it
24
+ * carried app settings, which is enough to consider the preview applied.
25
+ * @returns True when a payload arrived during app start.
26
+ */
27
+ export const hasInitialFrontendSettings = () => received;
28
+
29
+ /**
30
+ * The styling map that app start applied, so the bridge can seed its state with it instead of
31
+ * starting at null - which would make its first effect remove the style tag again.
32
+ * @returns The styling map, or null when none arrived.
33
+ */
34
+ export const getInitialFrontendSettingsStyling = () => styling;
35
+
36
+ /**
37
+ * Test only. Module state outlives a test file's individual cases, so specs need a way back to the
38
+ * initial state.
39
+ */
40
+ export const resetInitialFrontendSettings = () => {
41
+ received = false;
42
+ styling = null;
43
+ };
@@ -0,0 +1,23 @@
1
+ interface PreviewStore {
2
+ dispatch: (action: unknown) => void;
3
+ }
4
+ /**
5
+ * Waits for the first settings message from the admin and applies it before the app renders.
6
+ *
7
+ * Without this the app paints with the theme defaults first: the bridge that owns the message
8
+ * listener only mounts once React committed, so everything the admin sent before that is dropped
9
+ * and the styling arrives as a visible restyle.
10
+ *
11
+ * The handshake goes to the origin of the embedding document. Nothing has been received at this
12
+ * point, so that referrer is the only concrete parent origin available - the allow list holds
13
+ * patterns, and a pattern is no valid postMessage target. An admin that strips its referrer
14
+ * therefore gets no ready message, and the app falls back to the timeout below.
15
+ *
16
+ * Resolves when the payload arrived or when REQUEST_TIMEOUT elapsed, and never rejects - an admin
17
+ * that stays silent has to fall back to the unstyled app, never to an iframe that never renders.
18
+ * @param store Reference to the store.
19
+ * @returns A promise that resolves once the first payload settled.
20
+ */
21
+ export declare const awaitInitialFrontendSettings: (store: PreviewStore) => Promise<void>;
22
+ export {};
23
+ //# sourceMappingURL=awaitInitialFrontendSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitInitialFrontendSettings.d.ts","sourceRoot":"","sources":["../../../admin-preview/initialization/awaitInitialFrontendSettings.ts"],"names":[],"mappings":"AAuBA,UAAU,YAAY;IACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,4BAA4B,GAAI,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAyE3E,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { withScope, captureMessage, Severity as SentrySeverity } from '@sentry/browser';
2
+ import { receiveAppSettings } from '@shopgate/engage/settings/action-creators/appSettings';
3
+ import { getReferrerOrigin, isAllowedOrigin, isFrontendSettingsAdminPreviewActive } from "../helpers";
4
+ import { ALLOWED_ADMIN_PREVIEW_ORIGINS } from "../constants";
5
+ import { getOrCreateStyleTag, serializeStyling } from "../components/FrontendSettingsPreviewBridge/helpers";
6
+ import { setInitialFrontendSettings } from "./_internal/initialFrontendSettings";
7
+ const REQUEST_TIMEOUT = 3000;
8
+ /**
9
+ * Waits for the first settings message from the admin and applies it before the app renders.
10
+ *
11
+ * Without this the app paints with the theme defaults first: the bridge that owns the message
12
+ * listener only mounts once React committed, so everything the admin sent before that is dropped
13
+ * and the styling arrives as a visible restyle.
14
+ *
15
+ * The handshake goes to the origin of the embedding document. Nothing has been received at this
16
+ * point, so that referrer is the only concrete parent origin available - the allow list holds
17
+ * patterns, and a pattern is no valid postMessage target. An admin that strips its referrer
18
+ * therefore gets no ready message, and the app falls back to the timeout below.
19
+ *
20
+ * Resolves when the payload arrived or when REQUEST_TIMEOUT elapsed, and never rejects - an admin
21
+ * that stays silent has to fall back to the unstyled app, never to an iframe that never renders.
22
+ * @param store Reference to the store.
23
+ * @returns A promise that resolves once the first payload settled.
24
+ */
25
+ export const awaitInitialFrontendSettings = store => new Promise(resolve => {
26
+ if (!isFrontendSettingsAdminPreviewActive()) {
27
+ resolve();
28
+ return;
29
+ }
30
+ let settled = false;
31
+ let timeout;
32
+
33
+ /**
34
+ * Resolves the promise once, whichever of payload / timeout comes first, and stops listening.
35
+ * The bridge attaches its own listener when it mounts and re-sends the handshake, so the admin
36
+ * resyncs from there.
37
+ */
38
+ const settle = () => {
39
+ if (settled) {
40
+ return;
41
+ }
42
+ settled = true;
43
+ clearTimeout(timeout);
44
+ window.removeEventListener('message', handleMessage);
45
+ resolve();
46
+ };
47
+
48
+ /**
49
+ * Handles the first trusted message. A function declaration, so `settle` can detach it again
50
+ * without a forward reference.
51
+ * @param event The message event.
52
+ */
53
+ function handleMessage(event) {
54
+ if (!isAllowedOrigin(event.origin, ALLOWED_ADMIN_PREVIEW_ORIGINS)) return;
55
+ if (event.source !== window.parent) return;
56
+ const {
57
+ data
58
+ } = event;
59
+ if (data?.type !== 'receiveFrontendSettings') return;
60
+ const styling = data.payload?.styling ?? null;
61
+ if (styling) {
62
+ getOrCreateStyleTag().textContent = serializeStyling(styling);
63
+ }
64
+ if (data.payload?.appSettings) {
65
+ store.dispatch(receiveAppSettings(data.payload.appSettings));
66
+ }
67
+ setInitialFrontendSettings(styling);
68
+ settle();
69
+ }
70
+ window.addEventListener('message', handleMessage);
71
+ timeout = setTimeout(() => {
72
+ withScope(scope => {
73
+ scope.setLevel(SentrySeverity.Warning);
74
+ scope.setExtra('timeout', REQUEST_TIMEOUT);
75
+ captureMessage('Waiting for the initial frontend settings took too long');
76
+ });
77
+ settle();
78
+ }, REQUEST_TIMEOUT);
79
+
80
+ // Allowed origins can be patterns, which are no valid postMessage targets, so the ready
81
+ // message goes to the document that embedded us - as long as it is an allowed origin.
82
+ const parentOrigin = getReferrerOrigin();
83
+ if (isAllowedOrigin(parentOrigin, ALLOWED_ADMIN_PREVIEW_ORIGINS)) {
84
+ window.parent.postMessage({
85
+ type: 'frontendSettingsPreviewReady'
86
+ }, parentOrigin);
87
+ }
88
+ });
@@ -1,15 +1,15 @@
1
1
  import React, { useCallback } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { makeStyles } from '@shopgate/engage/styles';
4
- import { Link, CheckedIcon, Button, NotificationIcon, Typography } from '@shopgate/engage/components';
4
+ import { Link, CheckedIcon, NotificationIcon, Typography } from '@shopgate/engage/components';
5
+ import { Button } from '@shopgate/engage/components/v2';
5
6
  import { BACK_IN_STOCK_PATTERN } from '@shopgate/engage/back-in-stock/constants';
6
7
  import { i18n } from '@shopgate/engage/core/helpers';
7
8
  import connect from "./connector";
8
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
10
  const useStyles = makeStyles()(theme => ({
10
11
  button: {
11
- color: theme.palette.warning.main,
12
- width: '100%'
12
+ color: theme.palette.warning.main
13
13
  },
14
14
  backInStockMessageContainer: {
15
15
  display: 'flex',
@@ -114,10 +114,10 @@ const BackInStockButton = ({
114
114
  }
115
115
  if (showAsButton) {
116
116
  return /*#__PURE__*/_jsx(Button, {
117
- type: "primary",
117
+ color: "secondary",
118
+ fullWidth: true,
118
119
  tabIndex: 0,
119
120
  onClick: handleClick,
120
- className: classes.button,
121
121
  children: /*#__PURE__*/_jsx("span", {
122
122
  className: classes.buttonText,
123
123
  children: i18n.text('back_in_stock.get_notified')
@@ -4,7 +4,7 @@ import { makeStyles } from '@shopgate/engage/styles';
4
4
  import { getProductRoute, ProductImage } from '@shopgate/engage/product';
5
5
  import PropTypes from 'prop-types';
6
6
  import { BackInStockButton } from '@shopgate/engage/back-in-stock/components';
7
- import { getThemeSettings, i18n } from '@shopgate/engage/core';
7
+ import { i18n } from '@shopgate/engage/core';
8
8
  import { useBackInStockSubscriptions } from '@shopgate/engage/back-in-stock/hooks';
9
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  const useStyles = makeStyles()(theme => ({
@@ -77,9 +77,6 @@ const Subscription = ({
77
77
  const {
78
78
  removeBackInStockSubscription
79
79
  } = useBackInStockSubscriptions();
80
- const {
81
- ListImage: gridResolutions
82
- } = getThemeSettings('AppImages') || {};
83
80
  const currency = product.price?.currency || 'EUR';
84
81
  const defaultPrice = product.price?.unitPrice || 0;
85
82
  const specialPrice = product.price?.unitPriceStriked;
@@ -94,7 +91,7 @@ const Subscription = ({
94
91
  "aria-hidden": true,
95
92
  children: /*#__PURE__*/_jsx(ProductImage, {
96
93
  src: product.featuredImageBaseUrl,
97
- resolutions: gridResolutions
94
+ context: "list"
98
95
  })
99
96
  }), /*#__PURE__*/_jsxs("div", {
100
97
  className: classes.infoContainer,