@salesforce/retail-react-app 1.0.0-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/.eslintignore +7 -0
  2. package/.eslintrc.js +25 -0
  3. package/.prettierignore +4 -0
  4. package/.prettierrc.yaml +7 -0
  5. package/CHANGELOG.md +173 -0
  6. package/LICENSE +14 -0
  7. package/README.md +48 -0
  8. package/app/assets/svg/account.svg +3 -0
  9. package/app/assets/svg/alert.svg +3 -0
  10. package/app/assets/svg/basket.svg +3 -0
  11. package/app/assets/svg/brand-logo.svg +10 -0
  12. package/app/assets/svg/cc-amex.svg +7 -0
  13. package/app/assets/svg/cc-cvv.svg +8 -0
  14. package/app/assets/svg/cc-discover.svg +14 -0
  15. package/app/assets/svg/cc-mastercard.svg +8 -0
  16. package/app/assets/svg/cc-visa.svg +11 -0
  17. package/app/assets/svg/check-circle.svg +3 -0
  18. package/app/assets/svg/check.svg +3 -0
  19. package/app/assets/svg/chevron-down.svg +3 -0
  20. package/app/assets/svg/chevron-left.svg +3 -0
  21. package/app/assets/svg/chevron-right.svg +3 -0
  22. package/app/assets/svg/chevron-up.svg +3 -0
  23. package/app/assets/svg/close.svg +3 -0
  24. package/app/assets/svg/dashboard.svg +4 -0
  25. package/app/assets/svg/figma-logo.svg +14 -0
  26. package/app/assets/svg/file.svg +3 -0
  27. package/app/assets/svg/filter.svg +3 -0
  28. package/app/assets/svg/flag-ca.svg +5 -0
  29. package/app/assets/svg/flag-cn.svg +19 -0
  30. package/app/assets/svg/flag-fr.svg +19 -0
  31. package/app/assets/svg/flag-gb.svg +16 -0
  32. package/app/assets/svg/flag-it.svg +29 -0
  33. package/app/assets/svg/flag-jp.svg +10 -0
  34. package/app/assets/svg/flag-us.svg +7 -0
  35. package/app/assets/svg/github-logo.svg +40 -0
  36. package/app/assets/svg/hamburger.svg +8 -0
  37. package/app/assets/svg/heart-solid.svg +7 -0
  38. package/app/assets/svg/heart.svg +3 -0
  39. package/app/assets/svg/info.svg +3 -0
  40. package/app/assets/svg/like.svg +4 -0
  41. package/app/assets/svg/location.svg +3 -0
  42. package/app/assets/svg/lock.svg +3 -0
  43. package/app/assets/svg/paypal.svg +19 -0
  44. package/app/assets/svg/plug.svg +3 -0
  45. package/app/assets/svg/plus.svg +3 -0
  46. package/app/assets/svg/receipt.svg +3 -0
  47. package/app/assets/svg/search.svg +8 -0
  48. package/app/assets/svg/signout.svg +3 -0
  49. package/app/assets/svg/social-facebook.svg +3 -0
  50. package/app/assets/svg/social-instagram.svg +3 -0
  51. package/app/assets/svg/social-pinterest.svg +4 -0
  52. package/app/assets/svg/social-twitter.svg +3 -0
  53. package/app/assets/svg/social-youtube.svg +3 -0
  54. package/app/assets/svg/user.svg +3 -0
  55. package/app/assets/svg/visibility-off.svg +5 -0
  56. package/app/assets/svg/visibility.svg +3 -0
  57. package/app/components/_app/index.jsx +401 -0
  58. package/app/components/_app/index.test.js +85 -0
  59. package/app/components/_app/partials/above-header.jsx +10 -0
  60. package/app/components/_app-config/index.jsx +125 -0
  61. package/app/components/_app-config/index.test.js +77 -0
  62. package/app/components/_error/index.jsx +142 -0
  63. package/app/components/_error/index.test.js +25 -0
  64. package/app/components/action-card/index.jsx +75 -0
  65. package/app/components/address-display/index.jsx +30 -0
  66. package/app/components/basic-tile/index.jsx +65 -0
  67. package/app/components/basic-tile/index.test.js +23 -0
  68. package/app/components/breadcrumb/index.jsx +67 -0
  69. package/app/components/breadcrumb/index.test.js +30 -0
  70. package/app/components/confirmation-modal/index.jsx +111 -0
  71. package/app/components/confirmation-modal/index.test.js +98 -0
  72. package/app/components/drawer-menu/index.jsx +405 -0
  73. package/app/components/drawer-menu/index.test.js +33 -0
  74. package/app/components/dynamic-image/index.jsx +56 -0
  75. package/app/components/field/index.jsx +161 -0
  76. package/app/components/footer/index.jsx +269 -0
  77. package/app/components/footer/index.test.js +22 -0
  78. package/app/components/forms/address-fields.jsx +49 -0
  79. package/app/components/forms/credit-card-fields.jsx +149 -0
  80. package/app/components/forms/form-action-buttons.jsx +55 -0
  81. package/app/components/forms/login-fields.jsx +31 -0
  82. package/app/components/forms/password-requirements.jsx +99 -0
  83. package/app/components/forms/post-checkout-registration-fields.jsx +43 -0
  84. package/app/components/forms/profile-fields.jsx +36 -0
  85. package/app/components/forms/promo-code-fields.jsx +43 -0
  86. package/app/components/forms/registration-fields.jsx +42 -0
  87. package/app/components/forms/reset-password-fields.jsx +31 -0
  88. package/app/components/forms/state-province-options.jsx +75 -0
  89. package/app/components/forms/update-password-fields.jsx +49 -0
  90. package/app/components/forms/useAddressFields.jsx +196 -0
  91. package/app/components/forms/useCreditCardFields.jsx +146 -0
  92. package/app/components/forms/useLoginFields.jsx +52 -0
  93. package/app/components/forms/useProfileFields.jsx +95 -0
  94. package/app/components/forms/usePromoCodeFields.jsx +39 -0
  95. package/app/components/forms/useRegistrationFields.jsx +136 -0
  96. package/app/components/forms/useResetPasswordFields.jsx +40 -0
  97. package/app/components/forms/useUpdatePasswordFields.jsx +89 -0
  98. package/app/components/header/index.jsx +290 -0
  99. package/app/components/header/index.test.js +217 -0
  100. package/app/components/hero/index.jsx +84 -0
  101. package/app/components/hero/index.test.js +40 -0
  102. package/app/components/icons/index.jsx +158 -0
  103. package/app/components/icons/index.test.js +20 -0
  104. package/app/components/image-gallery/index.jsx +176 -0
  105. package/app/components/image-gallery/index.test.js +485 -0
  106. package/app/components/item-variant/index.jsx +33 -0
  107. package/app/components/item-variant/item-attributes.jsx +107 -0
  108. package/app/components/item-variant/item-image.jsx +73 -0
  109. package/app/components/item-variant/item-name.jsx +28 -0
  110. package/app/components/item-variant/item-price.jsx +117 -0
  111. package/app/components/link/index.jsx +32 -0
  112. package/app/components/link/index.test.js +72 -0
  113. package/app/components/links-list/index.jsx +89 -0
  114. package/app/components/links-list/index.test.js +62 -0
  115. package/app/components/list-menu/index.jsx +280 -0
  116. package/app/components/list-menu/index.test.js +44 -0
  117. package/app/components/loading-spinner/index.jsx +46 -0
  118. package/app/components/locale-selector/index.jsx +124 -0
  119. package/app/components/locale-selector/index.test.js +37 -0
  120. package/app/components/locale-text/index.jsx +97 -0
  121. package/app/components/locale-text/index.test.js +36 -0
  122. package/app/components/login/index.jsx +96 -0
  123. package/app/components/nested-accordion/index.jsx +185 -0
  124. package/app/components/nested-accordion/index.test.js +98 -0
  125. package/app/components/offline-banner/index.jsx +40 -0
  126. package/app/components/offline-banner/index.test.js +15 -0
  127. package/app/components/offline-boundary/index.jsx +104 -0
  128. package/app/components/offline-boundary/index.test.js +123 -0
  129. package/app/components/order-summary/index.jsx +331 -0
  130. package/app/components/page-action-placeholder/index.jsx +50 -0
  131. package/app/components/pagination/index.jsx +134 -0
  132. package/app/components/pagination/index.test.js +25 -0
  133. package/app/components/product-item/index.jsx +146 -0
  134. package/app/components/product-item/index.test.js +38 -0
  135. package/app/components/product-scroller/index.jsx +172 -0
  136. package/app/components/product-scroller/index.test.js +98 -0
  137. package/app/components/product-tile/index.jsx +195 -0
  138. package/app/components/product-tile/index.test.js +96 -0
  139. package/app/components/product-view/index.jsx +538 -0
  140. package/app/components/product-view/index.test.js +224 -0
  141. package/app/components/product-view-modal/index.jsx +48 -0
  142. package/app/components/product-view-modal/index.test.js +72 -0
  143. package/app/components/promo-code/index.jsx +162 -0
  144. package/app/components/promo-popover/index.jsx +83 -0
  145. package/app/components/quantity-picker/index.jsx +58 -0
  146. package/app/components/radio-card/index.jsx +75 -0
  147. package/app/components/recommended-products/index.jsx +227 -0
  148. package/app/components/register/index.jsx +114 -0
  149. package/app/components/reset-password/index.jsx +87 -0
  150. package/app/components/responsive/index.jsx +29 -0
  151. package/app/components/scroll-to-top/index.jsx +24 -0
  152. package/app/components/scroll-to-top/index.test.js +46 -0
  153. package/app/components/search/index.jsx +279 -0
  154. package/app/components/search/index.test.js +127 -0
  155. package/app/components/search/partials/recent-searches.jsx +76 -0
  156. package/app/components/search/partials/search-suggestions.jsx +45 -0
  157. package/app/components/search/partials/suggestions.jsx +43 -0
  158. package/app/components/section/index.jsx +68 -0
  159. package/app/components/seo/index.jsx +33 -0
  160. package/app/components/social-icons/index.jsx +101 -0
  161. package/app/components/social-icons/index.test.js +30 -0
  162. package/app/components/swatch-group/index.jsx +77 -0
  163. package/app/components/swatch-group/index.test.js +136 -0
  164. package/app/components/swatch-group/swatch.jsx +94 -0
  165. package/app/components/toggle-card/index.jsx +97 -0
  166. package/app/components/with-registration/index.jsx +58 -0
  167. package/app/components/with-registration/index.test.js +85 -0
  168. package/app/constants.js +109 -0
  169. package/app/contexts/index.js +92 -0
  170. package/app/hooks/einstein-mock-data.js +916 -0
  171. package/app/hooks/index.js +17 -0
  172. package/app/hooks/use-add-to-cart-modal.js +344 -0
  173. package/app/hooks/use-add-to-cart-modal.test.js +625 -0
  174. package/app/hooks/use-auth-modal.js +337 -0
  175. package/app/hooks/use-auth-modal.test.js +365 -0
  176. package/app/hooks/use-currency.js +20 -0
  177. package/app/hooks/use-currency.test.js +41 -0
  178. package/app/hooks/use-current-basket.js +39 -0
  179. package/app/hooks/use-current-customer.js +29 -0
  180. package/app/hooks/use-derived-product.js +77 -0
  181. package/app/hooks/use-derived-product.test.js +69 -0
  182. package/app/hooks/use-einstein.js +512 -0
  183. package/app/hooks/use-einstein.test.js +224 -0
  184. package/app/hooks/use-intersection-observer.js +64 -0
  185. package/app/hooks/use-limit-urls.js +31 -0
  186. package/app/hooks/use-limit-urls.test.js +40 -0
  187. package/app/hooks/use-multi-site.js +36 -0
  188. package/app/hooks/use-multi-site.test.js +53 -0
  189. package/app/hooks/use-navigation.js +37 -0
  190. package/app/hooks/use-navigation.test.js +109 -0
  191. package/app/hooks/use-page-urls.js +35 -0
  192. package/app/hooks/use-page-urls.test.js +39 -0
  193. package/app/hooks/use-pdp-search-params.js +16 -0
  194. package/app/hooks/use-pdp-search-params.test.js +52 -0
  195. package/app/hooks/use-previous.js +17 -0
  196. package/app/hooks/use-product-view-modal.js +93 -0
  197. package/app/hooks/use-product-view-modal.test.js +172 -0
  198. package/app/hooks/use-search-params.js +96 -0
  199. package/app/hooks/use-search-params.test.js +91 -0
  200. package/app/hooks/use-sort-urls.js +33 -0
  201. package/app/hooks/use-sort-urls.test.js +42 -0
  202. package/app/hooks/use-toast.js +68 -0
  203. package/app/hooks/use-toast.test.js +58 -0
  204. package/app/hooks/use-variant.js +32 -0
  205. package/app/hooks/use-variant.test.js +81 -0
  206. package/app/hooks/use-variation-attributes.js +138 -0
  207. package/app/hooks/use-variation-attributes.test.js +119 -0
  208. package/app/hooks/use-variation-params.js +31 -0
  209. package/app/hooks/use-variation-params.test.js +73 -0
  210. package/app/hooks/use-wish-list.js +42 -0
  211. package/app/main.jsx +14 -0
  212. package/app/mocks/basket-with-suit.js +146 -0
  213. package/app/mocks/empty-basket.js +39 -0
  214. package/app/mocks/mock-data.js +5632 -0
  215. package/app/mocks/product-set-winter-lookM.js +1224 -0
  216. package/app/mocks/searchResults.js +144 -0
  217. package/app/mocks/variant-750518699578M.js +434 -0
  218. package/app/page-designer/README.md +102 -0
  219. package/app/page-designer/assets/image-tile/index.jsx +51 -0
  220. package/app/page-designer/assets/image-tile/index.test.js +30 -0
  221. package/app/page-designer/assets/image-with-text/index.jsx +140 -0
  222. package/app/page-designer/assets/image-with-text/index.test.js +38 -0
  223. package/app/page-designer/assets/index.js +9 -0
  224. package/app/page-designer/index.js +10 -0
  225. package/app/page-designer/layouts/carousel/index.jsx +222 -0
  226. package/app/page-designer/layouts/carousel/index.test.js +43 -0
  227. package/app/page-designer/layouts/index.js +14 -0
  228. package/app/page-designer/layouts/mobileGrid1r1c/index.jsx +36 -0
  229. package/app/page-designer/layouts/mobileGrid1r1c/index.test.js +35 -0
  230. package/app/page-designer/layouts/mobileGrid2r1c/index.jsx +37 -0
  231. package/app/page-designer/layouts/mobileGrid2r1c/index.test.js +47 -0
  232. package/app/page-designer/layouts/mobileGrid2r2c/index.jsx +37 -0
  233. package/app/page-designer/layouts/mobileGrid2r2c/index.test.js +71 -0
  234. package/app/page-designer/layouts/mobileGrid2r3c/index.jsx +37 -0
  235. package/app/page-designer/layouts/mobileGrid2r3c/index.test.js +95 -0
  236. package/app/page-designer/layouts/mobileGrid3r1c/index.jsx +37 -0
  237. package/app/page-designer/layouts/mobileGrid3r1c/index.test.js +59 -0
  238. package/app/page-designer/layouts/mobileGrid3r2c/index.jsx +37 -0
  239. package/app/page-designer/layouts/mobileGrid3r2c/index.test.js +95 -0
  240. package/app/page-designer/utils.js +14 -0
  241. package/app/pages/account/addresses.jsx +382 -0
  242. package/app/pages/account/addresses.test.js +120 -0
  243. package/app/pages/account/constant.js +57 -0
  244. package/app/pages/account/index.jsx +237 -0
  245. package/app/pages/account/index.test.js +188 -0
  246. package/app/pages/account/order-detail.jsx +397 -0
  247. package/app/pages/account/order-history.jsx +264 -0
  248. package/app/pages/account/orders.jsx +30 -0
  249. package/app/pages/account/orders.test.js +95 -0
  250. package/app/pages/account/profile.jsx +357 -0
  251. package/app/pages/account/wishlist/index.jsx +195 -0
  252. package/app/pages/account/wishlist/index.mock.js +1481 -0
  253. package/app/pages/account/wishlist/index.test.js +56 -0
  254. package/app/pages/account/wishlist/partials/wishlist-primary-action.jsx +170 -0
  255. package/app/pages/account/wishlist/partials/wishlist-primary-action.mock.js +1623 -0
  256. package/app/pages/account/wishlist/partials/wishlist-primary-action.test.js +99 -0
  257. package/app/pages/account/wishlist/partials/wishlist-secondary-button-group.jsx +120 -0
  258. package/app/pages/account/wishlist/partials/wishlist-secondary-button-group.test.js +391 -0
  259. package/app/pages/cart/index.jsx +476 -0
  260. package/app/pages/cart/index.test.js +481 -0
  261. package/app/pages/cart/partials/cart-cta.jsx +46 -0
  262. package/app/pages/cart/partials/cart-secondary-button-group.jsx +135 -0
  263. package/app/pages/cart/partials/cart-secondary-button-group.test.js +103 -0
  264. package/app/pages/cart/partials/cart-skeleton.jsx +93 -0
  265. package/app/pages/cart/partials/cart-title.jsx +27 -0
  266. package/app/pages/cart/partials/empty-cart.jsx +86 -0
  267. package/app/pages/checkout/confirmation.jsx +541 -0
  268. package/app/pages/checkout/confirmation.mock.js +450 -0
  269. package/app/pages/checkout/confirmation.test.js +114 -0
  270. package/app/pages/checkout/index.jsx +169 -0
  271. package/app/pages/checkout/index.test.js +582 -0
  272. package/app/pages/checkout/partials/cc-radio-group.jsx +122 -0
  273. package/app/pages/checkout/partials/checkout-footer.jsx +140 -0
  274. package/app/pages/checkout/partials/checkout-footer.test.js +16 -0
  275. package/app/pages/checkout/partials/checkout-header.jsx +54 -0
  276. package/app/pages/checkout/partials/checkout-header.test.js +16 -0
  277. package/app/pages/checkout/partials/checkout-skeleton.jsx +52 -0
  278. package/app/pages/checkout/partials/contact-info.jsx +251 -0
  279. package/app/pages/checkout/partials/contact-info.test.js +43 -0
  280. package/app/pages/checkout/partials/payment-form.jsx +97 -0
  281. package/app/pages/checkout/partials/payment.jsx +276 -0
  282. package/app/pages/checkout/partials/shipping-address-selection.jsx +377 -0
  283. package/app/pages/checkout/partials/shipping-address.jsx +132 -0
  284. package/app/pages/checkout/partials/shipping-options.jsx +232 -0
  285. package/app/pages/checkout/util/checkout-context.js +94 -0
  286. package/app/pages/home/data.js +134 -0
  287. package/app/pages/home/index.jsx +301 -0
  288. package/app/pages/home/index.test.js +23 -0
  289. package/app/pages/login/index.jsx +123 -0
  290. package/app/pages/login/index.test.js +229 -0
  291. package/app/pages/login-redirect/index.jsx +23 -0
  292. package/app/pages/login-redirect/index.test.js +16 -0
  293. package/app/pages/page-not-found/index.jsx +90 -0
  294. package/app/pages/page-not-found/index.test.js +31 -0
  295. package/app/pages/product-detail/index.jsx +394 -0
  296. package/app/pages/product-detail/index.mock.js +197 -0
  297. package/app/pages/product-detail/index.test.js +162 -0
  298. package/app/pages/product-detail/partials/information-accordion.jsx +121 -0
  299. package/app/pages/product-list/index.jsx +735 -0
  300. package/app/pages/product-list/index.test.js +180 -0
  301. package/app/pages/product-list/partials/above-page-header.jsx +10 -0
  302. package/app/pages/product-list/partials/checkbox-refinements.jsx +41 -0
  303. package/app/pages/product-list/partials/checkbox-refinements.test.js +53 -0
  304. package/app/pages/product-list/partials/color-refinements.jsx +88 -0
  305. package/app/pages/product-list/partials/empty-results.jsx +118 -0
  306. package/app/pages/product-list/partials/link-refinements.jsx +38 -0
  307. package/app/pages/product-list/partials/page-header.jsx +42 -0
  308. package/app/pages/product-list/partials/radio-refinements.jsx +60 -0
  309. package/app/pages/product-list/partials/refinements.jsx +144 -0
  310. package/app/pages/product-list/partials/selected-refinements.jsx +100 -0
  311. package/app/pages/product-list/partials/size-refinements.jsx +55 -0
  312. package/app/pages/registration/index.jsx +87 -0
  313. package/app/pages/registration/index.test.jsx +132 -0
  314. package/app/pages/reset-password/index.jsx +112 -0
  315. package/app/pages/reset-password/index.test.jsx +141 -0
  316. package/app/request-processor.js +118 -0
  317. package/app/request-processor.test.js +23 -0
  318. package/app/routes.jsx +111 -0
  319. package/app/routes.test.js +13 -0
  320. package/app/ssr.js +70 -0
  321. package/app/static/ico/favicon.ico +0 -0
  322. package/app/static/img/global/app-icon-192.png +0 -0
  323. package/app/static/img/global/app-icon-512.png +0 -0
  324. package/app/static/img/global/apple-touch-icon.png +0 -0
  325. package/app/static/img/hero.png +0 -0
  326. package/app/static/manifest.json +19 -0
  327. package/app/static/robots.txt +2 -0
  328. package/app/theme/components/base/accordion.js +21 -0
  329. package/app/theme/components/base/alert.js +17 -0
  330. package/app/theme/components/base/badge.js +25 -0
  331. package/app/theme/components/base/button.js +77 -0
  332. package/app/theme/components/base/checkbox.js +30 -0
  333. package/app/theme/components/base/container.js +17 -0
  334. package/app/theme/components/base/drawer.js +26 -0
  335. package/app/theme/components/base/formLabel.js +13 -0
  336. package/app/theme/components/base/icon.js +13 -0
  337. package/app/theme/components/base/input.js +44 -0
  338. package/app/theme/components/base/modal.js +11 -0
  339. package/app/theme/components/base/popover.js +61 -0
  340. package/app/theme/components/base/radio.js +33 -0
  341. package/app/theme/components/base/select.js +15 -0
  342. package/app/theme/components/base/skeleton.js +12 -0
  343. package/app/theme/components/base/tooltip.js +19 -0
  344. package/app/theme/components/project/_app.js +25 -0
  345. package/app/theme/components/project/breadcrumb.js +25 -0
  346. package/app/theme/components/project/checkout-footer.js +35 -0
  347. package/app/theme/components/project/drawer-menu.js +66 -0
  348. package/app/theme/components/project/footer.js +84 -0
  349. package/app/theme/components/project/header.js +84 -0
  350. package/app/theme/components/project/image-gallery.js +59 -0
  351. package/app/theme/components/project/links-list.js +43 -0
  352. package/app/theme/components/project/list-menu.js +91 -0
  353. package/app/theme/components/project/locale-selector.js +42 -0
  354. package/app/theme/components/project/nested-accordion.js +26 -0
  355. package/app/theme/components/project/offline-banner.js +25 -0
  356. package/app/theme/components/project/pagination.js +22 -0
  357. package/app/theme/components/project/product-tile.js +32 -0
  358. package/app/theme/components/project/social-icons.js +52 -0
  359. package/app/theme/components/project/swatch-group.js +115 -0
  360. package/app/theme/foundations/colors.js +170 -0
  361. package/app/theme/foundations/gradients.js +9 -0
  362. package/app/theme/foundations/layerStyles.js +41 -0
  363. package/app/theme/foundations/shadows.js +9 -0
  364. package/app/theme/foundations/sizes.js +18 -0
  365. package/app/theme/foundations/space.js +9 -0
  366. package/app/theme/foundations/styles.js +21 -0
  367. package/app/theme/index.js +104 -0
  368. package/app/utils/cc-utils.js +112 -0
  369. package/app/utils/cc-utils.test.js +41 -0
  370. package/app/utils/image-groups-utils.js +62 -0
  371. package/app/utils/image-groups-utils.test.js +65 -0
  372. package/app/utils/locale.js +78 -0
  373. package/app/utils/locale.test.js +112 -0
  374. package/app/utils/password-utils.js +21 -0
  375. package/app/utils/phone-utils.js +22 -0
  376. package/app/utils/phone-utils.test.js +15 -0
  377. package/app/utils/product-utils.js +35 -0
  378. package/app/utils/product-utils.test.js +51 -0
  379. package/app/utils/responsive-image.js +198 -0
  380. package/app/utils/responsive-image.test.js +170 -0
  381. package/app/utils/routes-utils.js +111 -0
  382. package/app/utils/routes-utils.test.js +291 -0
  383. package/app/utils/site-utils.js +222 -0
  384. package/app/utils/site-utils.test.js +376 -0
  385. package/app/utils/test-utils.js +257 -0
  386. package/app/utils/url.js +291 -0
  387. package/app/utils/url.test.js +421 -0
  388. package/app/utils/utils.js +201 -0
  389. package/app/utils/utils.test.js +182 -0
  390. package/babel.config.js +7 -0
  391. package/cache-hash-config.json +8 -0
  392. package/config/default.js +64 -0
  393. package/config/mocks/default.js +131 -0
  394. package/config/sites.js +78 -0
  395. package/jest-setup.js +191 -0
  396. package/jest.config.js +50 -0
  397. package/jsconfig.json +13 -0
  398. package/package.json +105 -0
  399. package/scripts/extract-default-messages.js +92 -0
  400. package/tests/lighthouserc.js +37 -0
  401. package/translations/README.md +127 -0
  402. package/translations/compiled/de-DE.json +3212 -0
  403. package/translations/compiled/en-GB.json +3212 -0
  404. package/translations/compiled/en-US.json +3212 -0
  405. package/translations/compiled/en-XA.json +6948 -0
  406. package/translations/compiled/es-MX.json +3216 -0
  407. package/translations/compiled/fr-FR.json +3216 -0
  408. package/translations/compiled/it-IT.json +3188 -0
  409. package/translations/compiled/ja-JP.json +3200 -0
  410. package/translations/compiled/ko-KR.json +3180 -0
  411. package/translations/compiled/pt-BR.json +3220 -0
  412. package/translations/compiled/zh-CN.json +3212 -0
  413. package/translations/compiled/zh-TW.json +3208 -0
  414. package/translations/de-DE.json +1417 -0
  415. package/translations/en-GB.json +1417 -0
  416. package/translations/en-US.json +1417 -0
  417. package/translations/es-MX.json +1417 -0
  418. package/translations/fr-FR.json +1417 -0
  419. package/translations/it-IT.json +1417 -0
  420. package/translations/ja-JP.json +1417 -0
  421. package/translations/ko-KR.json +1417 -0
  422. package/translations/pt-BR.json +1417 -0
  423. package/translations/zh-CN.json +1417 -0
  424. package/translations/zh-TW.json +1417 -0
  425. package/worker/main.js +36 -0
@@ -0,0 +1,916 @@
1
+ /*
2
+ * Copyright (c) 2021, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * SPDX-License-Identifier: BSD-3-Clause
5
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ */
7
+
8
+ export const mockRecommendersResponse = {
9
+ recommenders: [
10
+ {
11
+ name: 'recently-viewed-products',
12
+ description: 'Recently viewed products.',
13
+ recommenderType: 'recently-viewed'
14
+ }
15
+ ]
16
+ }
17
+
18
+ export const mockAddToCartProduct = {productId: '883360544021M', sku: '', price: 155, quantity: 1}
19
+
20
+ export const mockRecommenderDetails = {
21
+ __recoUUID: '883360544021M',
22
+ recommenderName: 'testRecommender'
23
+ }
24
+
25
+ export const mockCategory = {
26
+ id: 'mens-accessories-ties',
27
+ image: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-storefront-catalog-m-non-en/default/dwd2ff3ec8/images/slot/sub_banners/cat-banner-mens-ties.jpg',
28
+ name: 'Ties',
29
+ pageDescription:
30
+ "Shop Mens's Ties for all occasions including business or casual at Commerce Cloud",
31
+ pageTitle: "Men's Casual and Business Ties",
32
+ parentCategoryId: 'mens-accessories',
33
+ parentCategoryTree: [
34
+ {
35
+ id: 'mens',
36
+ name: 'Mens'
37
+ },
38
+ {
39
+ id: 'mens-accessories',
40
+ name: 'Accessories'
41
+ },
42
+ {
43
+ id: 'mens-accessories-ties',
44
+ name: 'Ties'
45
+ }
46
+ ],
47
+ c_enableCompare: false,
48
+ c_showInMenu: true
49
+ }
50
+
51
+ export const mockSearchResults = {
52
+ limit: 4,
53
+ hits: [
54
+ {
55
+ currency: 'GBP',
56
+ hitType: 'master',
57
+ image: {
58
+ alt: 'Striped Silk Tie, , large',
59
+ disBaseLink:
60
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw6e365a5e/images/large/PG.949114314S.REDSI.PZ.jpg',
61
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw6e365a5e/images/large/PG.949114314S.REDSI.PZ.jpg',
62
+ title: 'Striped Silk Tie, '
63
+ },
64
+ orderable: true,
65
+ price: 19.19,
66
+ productId: '25752986M',
67
+ productName: 'Striped Silk Tie',
68
+ productType: {
69
+ master: true
70
+ },
71
+ representedProduct: {
72
+ id: '793775370033M'
73
+ },
74
+ representedProducts: [
75
+ {
76
+ id: '793775370033M'
77
+ },
78
+ {
79
+ id: '793775362380M'
80
+ }
81
+ ],
82
+ variationAttributes: [
83
+ {
84
+ id: 'color',
85
+ name: 'Colour',
86
+ values: [
87
+ {
88
+ name: 'Red',
89
+ orderable: true,
90
+ value: 'REDSI'
91
+ },
92
+ {
93
+ name: 'Turquoise',
94
+ orderable: true,
95
+ value: 'TURQUSI'
96
+ }
97
+ ]
98
+ }
99
+ ]
100
+ },
101
+ {
102
+ currency: 'GBP',
103
+ hitType: 'master',
104
+ image: {
105
+ alt: 'Checked Silk Tie, , large',
106
+ disBaseLink:
107
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwe64d25bd/images/large/PG.949612424S.COBATSI.PZ.jpg',
108
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwe64d25bd/images/large/PG.949612424S.COBATSI.PZ.jpg',
109
+ title: 'Checked Silk Tie, '
110
+ },
111
+ orderable: true,
112
+ price: 19.19,
113
+ productId: '25752235M',
114
+ productName: 'Checked Silk Tie',
115
+ productType: {
116
+ master: true
117
+ },
118
+ representedProduct: {
119
+ id: '682875090845M'
120
+ },
121
+ representedProducts: [
122
+ {
123
+ id: '682875090845M'
124
+ },
125
+ {
126
+ id: '682875719029M'
127
+ },
128
+ {
129
+ id: '682875540326M'
130
+ }
131
+ ],
132
+ variationAttributes: [
133
+ {
134
+ id: 'color',
135
+ name: 'Colour',
136
+ values: [
137
+ {
138
+ name: 'Cobalt',
139
+ orderable: true,
140
+ value: 'COBATSI'
141
+ },
142
+ {
143
+ name: 'Navy',
144
+ orderable: true,
145
+ value: 'NAVYSI'
146
+ },
147
+ {
148
+ name: 'Yellow',
149
+ orderable: true,
150
+ value: 'YELLOSI'
151
+ }
152
+ ]
153
+ }
154
+ ]
155
+ },
156
+ {
157
+ currency: 'GBP',
158
+ hitType: 'master',
159
+ image: {
160
+ alt: 'Solid Silk Tie, , large',
161
+ disBaseLink:
162
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw1c618527/images/large/PG.949432114S.NAVYSI.PZ.jpg',
163
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw1c618527/images/large/PG.949432114S.NAVYSI.PZ.jpg',
164
+ title: 'Solid Silk Tie, '
165
+ },
166
+ orderable: true,
167
+ price: 19.19,
168
+ productId: '25752218M',
169
+ productName: 'Solid Silk Tie',
170
+ productType: {
171
+ master: true
172
+ },
173
+ representedProduct: {
174
+ id: '029407331289M'
175
+ },
176
+ representedProducts: [
177
+ {
178
+ id: '029407331289M'
179
+ },
180
+ {
181
+ id: '029407331227M'
182
+ },
183
+ {
184
+ id: '029407331258M'
185
+ }
186
+ ],
187
+ variationAttributes: [
188
+ {
189
+ id: 'color',
190
+ name: 'Colour',
191
+ values: [
192
+ {
193
+ name: 'Navy',
194
+ orderable: true,
195
+ value: 'NAVYSI'
196
+ },
197
+ {
198
+ name: 'Red',
199
+ orderable: true,
200
+ value: 'REDSI'
201
+ },
202
+ {
203
+ name: 'Yellow',
204
+ orderable: true,
205
+ value: 'YELLOSI'
206
+ }
207
+ ]
208
+ }
209
+ ]
210
+ },
211
+ {
212
+ currency: 'GBP',
213
+ hitType: 'master',
214
+ image: {
215
+ alt: 'Striped Silk Tie, , large',
216
+ disBaseLink:
217
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw4982cf11/images/large/PG.949034314S.TAUPESI.PZ.jpg',
218
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw4982cf11/images/large/PG.949034314S.TAUPESI.PZ.jpg',
219
+ title: 'Striped Silk Tie, '
220
+ },
221
+ orderable: true,
222
+ price: 19.19,
223
+ productId: '25752981M',
224
+ productName: 'Striped Silk Tie',
225
+ productType: {
226
+ master: true
227
+ },
228
+ representedProduct: {
229
+ id: '793775064963M'
230
+ },
231
+ representedProducts: [
232
+ {
233
+ id: '793775064963M'
234
+ }
235
+ ],
236
+ variationAttributes: [
237
+ {
238
+ id: 'color',
239
+ name: 'Colour',
240
+ values: [
241
+ {
242
+ name: 'Taupe',
243
+ orderable: true,
244
+ value: 'TAUPESI'
245
+ }
246
+ ]
247
+ }
248
+ ]
249
+ }
250
+ ],
251
+ query: '',
252
+ refinements: [
253
+ {
254
+ attributeId: 'cgid',
255
+ label: 'Category',
256
+ values: [
257
+ {
258
+ hitCount: 4,
259
+ label: 'New Arrivals',
260
+ value: 'newarrivals'
261
+ },
262
+ {
263
+ hitCount: 4,
264
+ label: 'Mens',
265
+ value: 'mens',
266
+ values: [
267
+ {
268
+ hitCount: 4,
269
+ label: 'Accessories',
270
+ value: 'mens-accessories',
271
+ values: [
272
+ {
273
+ hitCount: 4,
274
+ label: 'Ties',
275
+ value: 'mens-accessories-ties'
276
+ }
277
+ ]
278
+ }
279
+ ]
280
+ }
281
+ ]
282
+ },
283
+ {
284
+ attributeId: 'c_refinementColor',
285
+ label: 'Colour',
286
+ values: [
287
+ {
288
+ hitCount: 0,
289
+ label: 'Beige',
290
+ presentationId: 'beige',
291
+ value: 'Beige'
292
+ },
293
+ {
294
+ hitCount: 0,
295
+ label: 'Black',
296
+ presentationId: 'black',
297
+ value: 'Black'
298
+ },
299
+ {
300
+ hitCount: 1,
301
+ label: 'Blue',
302
+ presentationId: 'blue',
303
+ value: 'Blue'
304
+ },
305
+ {
306
+ hitCount: 2,
307
+ label: 'Navy',
308
+ presentationId: 'navy',
309
+ value: 'Navy'
310
+ },
311
+ {
312
+ hitCount: 1,
313
+ label: 'Brown',
314
+ presentationId: 'brown',
315
+ value: 'Brown'
316
+ },
317
+ {
318
+ hitCount: 1,
319
+ label: 'Green',
320
+ presentationId: 'green',
321
+ value: 'Green'
322
+ },
323
+ {
324
+ hitCount: 0,
325
+ label: 'Grey',
326
+ presentationId: 'grey',
327
+ value: 'Grey'
328
+ },
329
+ {
330
+ hitCount: 0,
331
+ label: 'Orange',
332
+ presentationId: 'orange',
333
+ value: 'Orange'
334
+ },
335
+ {
336
+ hitCount: 0,
337
+ label: 'Pink',
338
+ presentationId: 'pink',
339
+ value: 'Pink'
340
+ },
341
+ {
342
+ hitCount: 0,
343
+ label: 'Purple',
344
+ presentationId: 'purple',
345
+ value: 'Purple'
346
+ },
347
+ {
348
+ hitCount: 2,
349
+ label: 'Red',
350
+ presentationId: 'red',
351
+ value: 'Red'
352
+ },
353
+ {
354
+ hitCount: 0,
355
+ label: 'White',
356
+ presentationId: 'white',
357
+ value: 'White'
358
+ },
359
+ {
360
+ hitCount: 2,
361
+ label: 'Yellow',
362
+ presentationId: 'yellow',
363
+ value: 'Yellow'
364
+ },
365
+ {
366
+ hitCount: 0,
367
+ label: 'Miscellaneous',
368
+ presentationId: 'miscellaneous',
369
+ value: 'Miscellaneous'
370
+ }
371
+ ]
372
+ },
373
+ {
374
+ attributeId: 'price',
375
+ label: 'Price',
376
+ values: [
377
+ {
378
+ hitCount: 4,
379
+ label: '£0 - £19.99',
380
+ value: '(0..20)'
381
+ }
382
+ ]
383
+ },
384
+ {
385
+ attributeId: 'c_isNew',
386
+ label: 'New Arrival'
387
+ }
388
+ ],
389
+ searchPhraseSuggestions: {},
390
+ selectedRefinements: {
391
+ cgid: 'mens-accessories-ties',
392
+ htype: 'master'
393
+ },
394
+ sortingOptions: [
395
+ {
396
+ id: 'best-matches',
397
+ label: 'Best Matches'
398
+ },
399
+ {
400
+ id: 'price-low-to-high',
401
+ label: 'Price Low To High'
402
+ },
403
+ {
404
+ id: 'price-high-to-low',
405
+ label: 'Price High to Low'
406
+ },
407
+ {
408
+ id: 'product-name-ascending',
409
+ label: 'Product Name A - Z'
410
+ },
411
+ {
412
+ id: 'product-name-descending',
413
+ label: 'Product Name Z - A'
414
+ },
415
+ {
416
+ id: 'brand',
417
+ label: 'Brand'
418
+ },
419
+ {
420
+ id: 'most-popular',
421
+ label: 'Most Popular'
422
+ },
423
+ {
424
+ id: 'top-sellers',
425
+ label: 'Top Sellers'
426
+ }
427
+ ],
428
+ offset: 0,
429
+ total: 4
430
+ }
431
+
432
+ export const mockBasket = {
433
+ adjustedMerchandizeTotalTax: 1.5,
434
+ adjustedShippingTotalTax: 0.3,
435
+ agentBasket: false,
436
+ basketId: 'f6bbeee30fb93c2f94213f60f8',
437
+ channelType: 'storefront',
438
+ creationDate: '2022-09-15T19:29:10.361Z',
439
+ currency: 'USD',
440
+ customerInfo: {
441
+ customerId: 'bdlrFJmudIlHaRk0oYkbYYlKw3'
442
+ },
443
+ lastModified: '2022-09-15T19:31:04.677Z',
444
+ merchandizeTotalTax: 1.5,
445
+ notes: {},
446
+ orderTotal: 37.78,
447
+ productItems: [
448
+ {
449
+ adjustedTax: 1.5,
450
+ basePrice: 29.99,
451
+ bonusProductLineItem: false,
452
+ gift: false,
453
+ itemId: 'de63c61b3edeca38b2d9a67a67',
454
+ itemText: 'Checked Silk Tie',
455
+ price: 29.99,
456
+ priceAfterItemDiscount: 29.99,
457
+ priceAfterOrderDiscount: 29.99,
458
+ productId: '682875719029M',
459
+ productName: 'Checked Silk Tie',
460
+ quantity: 1,
461
+ shipmentId: 'me',
462
+ tax: 1.5,
463
+ taxBasis: 29.99,
464
+ taxClassId: 'standard',
465
+ taxRate: 0.05
466
+ }
467
+ ],
468
+ productSubTotal: 29.99,
469
+ productTotal: 29.99,
470
+ shipments: [
471
+ {
472
+ adjustedMerchandizeTotalTax: 1.5,
473
+ adjustedShippingTotalTax: 0.3,
474
+ gift: false,
475
+ merchandizeTotalTax: 1.5,
476
+ productSubTotal: 29.99,
477
+ productTotal: 29.99,
478
+ shipmentId: 'me',
479
+ shipmentTotal: 37.78,
480
+ shippingMethod: {
481
+ description: 'Order received within 7-10 business days',
482
+ id: '001',
483
+ name: 'Ground',
484
+ price: 5.99,
485
+ c_estimatedArrivalTime: '7-10 Business Days'
486
+ },
487
+ shippingStatus: 'not_shipped',
488
+ shippingTotal: 5.99,
489
+ shippingTotalTax: 0.3,
490
+ taxTotal: 1.8
491
+ }
492
+ ],
493
+ shippingItems: [
494
+ {
495
+ adjustedTax: 0.3,
496
+ basePrice: 5.99,
497
+ itemId: 'b931764832e5bd90a3c226552f',
498
+ itemText: 'Shipping',
499
+ price: 5.99,
500
+ priceAfterItemDiscount: 5.99,
501
+ shipmentId: 'me',
502
+ tax: 0.3,
503
+ taxBasis: 5.99,
504
+ taxClassId: 'standard',
505
+ taxRate: 0.05
506
+ }
507
+ ],
508
+ shippingTotal: 5.99,
509
+ shippingTotalTax: 0.3,
510
+ taxation: 'net',
511
+ taxTotal: 1.8
512
+ }
513
+
514
+ export const mockProduct = {
515
+ currency: 'USD',
516
+ id: '56736828M',
517
+ imageGroups: [
518
+ {
519
+ images: [
520
+ {
521
+ alt: 'Straight Fit Shorts With Button Closure, , large',
522
+ disBaseLink:
523
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwfb7ce066/images/large/B0574220_CP1_0.jpg',
524
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwfb7ce066/images/large/B0574220_CP1_0.jpg',
525
+ title: 'Straight Fit Shorts With Button Closure, '
526
+ },
527
+ {
528
+ alt: 'Straight Fit Shorts With Button Closure, , large',
529
+ disBaseLink:
530
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwee33fb7b/images/large/B0574220_CP1_B0.jpg',
531
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwee33fb7b/images/large/B0574220_CP1_B0.jpg',
532
+ title: 'Straight Fit Shorts With Button Closure, '
533
+ },
534
+ {
535
+ alt: 'Straight Fit Shorts With Button Closure, , large',
536
+ disBaseLink:
537
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw4a2fbc7b/images/large/B0574220_CP1_L1.jpg',
538
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw4a2fbc7b/images/large/B0574220_CP1_L1.jpg',
539
+ title: 'Straight Fit Shorts With Button Closure, '
540
+ },
541
+ {
542
+ alt: 'Straight Fit Shorts With Button Closure, , large',
543
+ disBaseLink:
544
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw308eba53/images/large/B0574220_CP1_L2.jpg',
545
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw308eba53/images/large/B0574220_CP1_L2.jpg',
546
+ title: 'Straight Fit Shorts With Button Closure, '
547
+ },
548
+ {
549
+ alt: 'Straight Fit Shorts With Button Closure, , large',
550
+ disBaseLink:
551
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwecea3cdd/images/large/B0574220_CP1_L3.jpg',
552
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwecea3cdd/images/large/B0574220_CP1_L3.jpg',
553
+ title: 'Straight Fit Shorts With Button Closure, '
554
+ }
555
+ ],
556
+ viewType: 'large'
557
+ },
558
+ {
559
+ images: [
560
+ {
561
+ alt: 'Straight Fit Shorts With Button Closure, Gray, large',
562
+ disBaseLink:
563
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwfb7ce066/images/large/B0574220_CP1_0.jpg',
564
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwfb7ce066/images/large/B0574220_CP1_0.jpg',
565
+ title: 'Straight Fit Shorts With Button Closure, Gray'
566
+ },
567
+ {
568
+ alt: 'Straight Fit Shorts With Button Closure, Gray, large',
569
+ disBaseLink:
570
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwee33fb7b/images/large/B0574220_CP1_B0.jpg',
571
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwee33fb7b/images/large/B0574220_CP1_B0.jpg',
572
+ title: 'Straight Fit Shorts With Button Closure, Gray'
573
+ },
574
+ {
575
+ alt: 'Straight Fit Shorts With Button Closure, Gray, large',
576
+ disBaseLink:
577
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw4a2fbc7b/images/large/B0574220_CP1_L1.jpg',
578
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw4a2fbc7b/images/large/B0574220_CP1_L1.jpg',
579
+ title: 'Straight Fit Shorts With Button Closure, Gray'
580
+ },
581
+ {
582
+ alt: 'Straight Fit Shorts With Button Closure, Gray, large',
583
+ disBaseLink:
584
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw308eba53/images/large/B0574220_CP1_L2.jpg',
585
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw308eba53/images/large/B0574220_CP1_L2.jpg',
586
+ title: 'Straight Fit Shorts With Button Closure, Gray'
587
+ },
588
+ {
589
+ alt: 'Straight Fit Shorts With Button Closure, Gray, large',
590
+ disBaseLink:
591
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwecea3cdd/images/large/B0574220_CP1_L3.jpg',
592
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwecea3cdd/images/large/B0574220_CP1_L3.jpg',
593
+ title: 'Straight Fit Shorts With Button Closure, Gray'
594
+ }
595
+ ],
596
+ variationAttributes: [{id: 'color', values: [{value: 'CP1'}]}],
597
+ viewType: 'large'
598
+ },
599
+ {
600
+ images: [
601
+ {
602
+ alt: 'Straight Fit Shorts With Button Closure, , medium',
603
+ disBaseLink:
604
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw9bbe03cd/images/medium/B0574220_CP1_0.jpg',
605
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw9bbe03cd/images/medium/B0574220_CP1_0.jpg',
606
+ title: 'Straight Fit Shorts With Button Closure, '
607
+ },
608
+ {
609
+ alt: 'Straight Fit Shorts With Button Closure, , medium',
610
+ disBaseLink:
611
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwd3a75400/images/medium/B0574220_CP1_B0.jpg',
612
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwd3a75400/images/medium/B0574220_CP1_B0.jpg',
613
+ title: 'Straight Fit Shorts With Button Closure, '
614
+ },
615
+ {
616
+ alt: 'Straight Fit Shorts With Button Closure, , medium',
617
+ disBaseLink:
618
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed372d31/images/medium/B0574220_CP1_L1.jpg',
619
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed372d31/images/medium/B0574220_CP1_L1.jpg',
620
+ title: 'Straight Fit Shorts With Button Closure, '
621
+ },
622
+ {
623
+ alt: 'Straight Fit Shorts With Button Closure, , medium',
624
+ disBaseLink:
625
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw32d43910/images/medium/B0574220_CP1_L2.jpg',
626
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw32d43910/images/medium/B0574220_CP1_L2.jpg',
627
+ title: 'Straight Fit Shorts With Button Closure, '
628
+ },
629
+ {
630
+ alt: 'Straight Fit Shorts With Button Closure, , medium',
631
+ disBaseLink:
632
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw6aa00910/images/medium/B0574220_CP1_L3.jpg',
633
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw6aa00910/images/medium/B0574220_CP1_L3.jpg',
634
+ title: 'Straight Fit Shorts With Button Closure, '
635
+ }
636
+ ],
637
+ viewType: 'medium'
638
+ },
639
+ {
640
+ images: [
641
+ {
642
+ alt: 'Straight Fit Shorts With Button Closure, Gray, medium',
643
+ disBaseLink:
644
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw9bbe03cd/images/medium/B0574220_CP1_0.jpg',
645
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw9bbe03cd/images/medium/B0574220_CP1_0.jpg',
646
+ title: 'Straight Fit Shorts With Button Closure, Gray'
647
+ },
648
+ {
649
+ alt: 'Straight Fit Shorts With Button Closure, Gray, medium',
650
+ disBaseLink:
651
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwd3a75400/images/medium/B0574220_CP1_B0.jpg',
652
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwd3a75400/images/medium/B0574220_CP1_B0.jpg',
653
+ title: 'Straight Fit Shorts With Button Closure, Gray'
654
+ },
655
+ {
656
+ alt: 'Straight Fit Shorts With Button Closure, Gray, medium',
657
+ disBaseLink:
658
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed372d31/images/medium/B0574220_CP1_L1.jpg',
659
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed372d31/images/medium/B0574220_CP1_L1.jpg',
660
+ title: 'Straight Fit Shorts With Button Closure, Gray'
661
+ },
662
+ {
663
+ alt: 'Straight Fit Shorts With Button Closure, Gray, medium',
664
+ disBaseLink:
665
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw32d43910/images/medium/B0574220_CP1_L2.jpg',
666
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw32d43910/images/medium/B0574220_CP1_L2.jpg',
667
+ title: 'Straight Fit Shorts With Button Closure, Gray'
668
+ },
669
+ {
670
+ alt: 'Straight Fit Shorts With Button Closure, Gray, medium',
671
+ disBaseLink:
672
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw6aa00910/images/medium/B0574220_CP1_L3.jpg',
673
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw6aa00910/images/medium/B0574220_CP1_L3.jpg',
674
+ title: 'Straight Fit Shorts With Button Closure, Gray'
675
+ }
676
+ ],
677
+ variationAttributes: [{id: 'color', values: [{value: 'CP1'}]}],
678
+ viewType: 'medium'
679
+ },
680
+ {
681
+ images: [
682
+ {
683
+ alt: 'Straight Fit Shorts With Button Closure, , small',
684
+ disBaseLink:
685
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed10427e/images/small/B0574220_CP1_0.jpg',
686
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed10427e/images/small/B0574220_CP1_0.jpg',
687
+ title: 'Straight Fit Shorts With Button Closure, '
688
+ },
689
+ {
690
+ alt: 'Straight Fit Shorts With Button Closure, , small',
691
+ disBaseLink:
692
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw999b0356/images/small/B0574220_CP1_B0.jpg',
693
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw999b0356/images/small/B0574220_CP1_B0.jpg',
694
+ title: 'Straight Fit Shorts With Button Closure, '
695
+ },
696
+ {
697
+ alt: 'Straight Fit Shorts With Button Closure, , small',
698
+ disBaseLink:
699
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw3805c600/images/small/B0574220_CP1_L1.jpg',
700
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw3805c600/images/small/B0574220_CP1_L1.jpg',
701
+ title: 'Straight Fit Shorts With Button Closure, '
702
+ },
703
+ {
704
+ alt: 'Straight Fit Shorts With Button Closure, , small',
705
+ disBaseLink:
706
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw1a024d50/images/small/B0574220_CP1_L2.jpg',
707
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw1a024d50/images/small/B0574220_CP1_L2.jpg',
708
+ title: 'Straight Fit Shorts With Button Closure, '
709
+ },
710
+ {
711
+ alt: 'Straight Fit Shorts With Button Closure, , small',
712
+ disBaseLink:
713
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwcafa0be3/images/small/B0574220_CP1_L3.jpg',
714
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwcafa0be3/images/small/B0574220_CP1_L3.jpg',
715
+ title: 'Straight Fit Shorts With Button Closure, '
716
+ }
717
+ ],
718
+ viewType: 'small'
719
+ },
720
+ {
721
+ images: [
722
+ {
723
+ alt: 'Straight Fit Shorts With Button Closure, Gray, small',
724
+ disBaseLink:
725
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed10427e/images/small/B0574220_CP1_0.jpg',
726
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwed10427e/images/small/B0574220_CP1_0.jpg',
727
+ title: 'Straight Fit Shorts With Button Closure, Gray'
728
+ },
729
+ {
730
+ alt: 'Straight Fit Shorts With Button Closure, Gray, small',
731
+ disBaseLink:
732
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw999b0356/images/small/B0574220_CP1_B0.jpg',
733
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw999b0356/images/small/B0574220_CP1_B0.jpg',
734
+ title: 'Straight Fit Shorts With Button Closure, Gray'
735
+ },
736
+ {
737
+ alt: 'Straight Fit Shorts With Button Closure, Gray, small',
738
+ disBaseLink:
739
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw3805c600/images/small/B0574220_CP1_L1.jpg',
740
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw3805c600/images/small/B0574220_CP1_L1.jpg',
741
+ title: 'Straight Fit Shorts With Button Closure, Gray'
742
+ },
743
+ {
744
+ alt: 'Straight Fit Shorts With Button Closure, Gray, small',
745
+ disBaseLink:
746
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dw1a024d50/images/small/B0574220_CP1_L2.jpg',
747
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dw1a024d50/images/small/B0574220_CP1_L2.jpg',
748
+ title: 'Straight Fit Shorts With Button Closure, Gray'
749
+ },
750
+ {
751
+ alt: 'Straight Fit Shorts With Button Closure, Gray, small',
752
+ disBaseLink:
753
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwcafa0be3/images/small/B0574220_CP1_L3.jpg',
754
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwcafa0be3/images/small/B0574220_CP1_L3.jpg',
755
+ title: 'Straight Fit Shorts With Button Closure, Gray'
756
+ }
757
+ ],
758
+ variationAttributes: [{id: 'color', values: [{value: 'CP1'}]}],
759
+ viewType: 'small'
760
+ },
761
+ {
762
+ images: [
763
+ {
764
+ alt: 'Straight Fit Shorts With Button Closure, , swatch',
765
+ disBaseLink:
766
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwa2168062/images/swatch/B0574220_CP1_sw.jpg',
767
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwa2168062/images/swatch/B0574220_CP1_sw.jpg',
768
+ title: 'Straight Fit Shorts With Button Closure, '
769
+ }
770
+ ],
771
+ viewType: 'swatch'
772
+ },
773
+ {
774
+ images: [
775
+ {
776
+ alt: 'Straight Fit Shorts With Button Closure, Gray, swatch',
777
+ disBaseLink:
778
+ 'https://edge.disstg.commercecloud.salesforce.com/dw/image/v2/ZZRF_001/on/demandware.static/-/Sites-apparel-m-catalog/default/dwa2168062/images/swatch/B0574220_CP1_sw.jpg',
779
+ link: 'https://zzrf-001.dx.commercecloud.salesforce.com/on/demandware.static/-/Sites-apparel-m-catalog/default/dwa2168062/images/swatch/B0574220_CP1_sw.jpg',
780
+ title: 'Straight Fit Shorts With Button Closure, Gray'
781
+ }
782
+ ],
783
+ variationAttributes: [{id: 'color', values: [{value: 'CP1'}]}],
784
+ viewType: 'swatch'
785
+ }
786
+ ],
787
+ inventory: {
788
+ ats: 997,
789
+ backorderable: false,
790
+ id: 'inventory_m',
791
+ orderable: true,
792
+ preorderable: false,
793
+ stockLevel: 997
794
+ },
795
+ longDescription:
796
+ '<ul>\n<li>66% cotton, 30% polyester, 4% elastane</li>\n<li>straight-fit</li>\n<li>on seam front pockets</li>\n<li>button closure</li>\n<li>flap back pockets with button closure</li>\n<li>dry clean only</li>\n</ul>',
797
+ master: {masterId: '56736828M', orderable: true, price: 155},
798
+ minOrderQuantity: 1,
799
+ name: 'Straight Fit Shorts With Button Closure',
800
+ pageDescription:
801
+ 'These straight-fit shorts are eager to impress, wear it with the Kris HL sportcoat for a warmed up suit. Made in our cotton stretch with pinstripe pattern fabric.',
802
+ pageTitle: "Men's Straight Fit Shorts With Button Closure",
803
+ price: 155,
804
+ primaryCategoryId: 'mens-clothing-shorts',
805
+ recommendations: [
806
+ {
807
+ recommendationType: {displayValue: 'Product Detail Page - Cross Sell', value: 1},
808
+ recommendedItemId: '72516759M',
809
+ recommendedItemLink:
810
+ 'https://zzrf-001.dx.commercecloud.salesforce.com/s/RefArch/dw/shop/v20_2/products/72516759M?all_images=true&currency=&locale=default&inventory_ids='
811
+ },
812
+ {
813
+ recommendationType: {displayValue: 'Product Detail Page - Cross Sell', value: 1},
814
+ recommendedItemId: '86736845M',
815
+ recommendedItemLink:
816
+ 'https://zzrf-001.dx.commercecloud.salesforce.com/s/RefArch/dw/shop/v20_2/products/86736845M?all_images=true&currency=&locale=default&inventory_ids='
817
+ },
818
+ {
819
+ recommendationType: {displayValue: 'Product Detail Page - Cross Sell', value: 1},
820
+ recommendedItemId: '54736828M',
821
+ recommendedItemLink:
822
+ 'https://zzrf-001.dx.commercecloud.salesforce.com/s/RefArch/dw/shop/v20_2/products/54736828M?all_images=true&currency=&locale=default&inventory_ids='
823
+ },
824
+ {
825
+ recommendationType: {displayValue: 'Product Detail Page - Cross Sell', value: 1},
826
+ recommendedItemId: '83536828M',
827
+ recommendedItemLink:
828
+ 'https://zzrf-001.dx.commercecloud.salesforce.com/s/RefArch/dw/shop/v20_2/products/83536828M?all_images=true&currency=&locale=default&inventory_ids='
829
+ }
830
+ ],
831
+ shortDescription:
832
+ 'These straight-fit shorts are eager to impress, wear it with the Kris HL sportcoat for a warmed up suit. Made in our cotton stretch with pinstripe pattern fabric.',
833
+ stepQuantity: 1,
834
+ type: {master: true},
835
+ variants: [
836
+ {
837
+ orderable: true,
838
+ price: 155,
839
+ productId: '883360544038M',
840
+ variationValues: {color: 'CP1', size: '31'}
841
+ },
842
+ {
843
+ orderable: true,
844
+ price: 155,
845
+ productId: '883360544052M',
846
+ variationValues: {color: 'CP1', size: '33'}
847
+ },
848
+ {
849
+ orderable: true,
850
+ price: 155,
851
+ productId: '883360544083M',
852
+ variationValues: {color: 'CP1', size: '38'}
853
+ },
854
+ {
855
+ orderable: true,
856
+ price: 155,
857
+ productId: '883360544069M',
858
+ variationValues: {color: 'CP1', size: '34'}
859
+ },
860
+ {
861
+ orderable: true,
862
+ price: 155,
863
+ productId: '883360544014M',
864
+ variationValues: {color: 'CP1', size: '29'}
865
+ },
866
+ {
867
+ orderable: true,
868
+ price: 155,
869
+ productId: '883360544045M',
870
+ variationValues: {color: 'CP1', size: '32'}
871
+ },
872
+ {
873
+ orderable: true,
874
+ price: 155,
875
+ productId: '883360544021M',
876
+ variationValues: {color: 'CP1', size: '30'}
877
+ },
878
+ {
879
+ orderable: true,
880
+ price: 155,
881
+ productId: '883360544007M',
882
+ variationValues: {color: 'CP1', size: '28'}
883
+ },
884
+ {
885
+ orderable: true,
886
+ price: 155,
887
+ productId: '883360544090M',
888
+ variationValues: {color: 'CP1', size: '40'}
889
+ },
890
+ {
891
+ orderable: true,
892
+ price: 155,
893
+ productId: '883360544076M',
894
+ variationValues: {color: 'CP1', size: '36'}
895
+ }
896
+ ],
897
+ variationAttributes: [
898
+ {id: 'color', name: 'Color', values: [{name: 'Gray', orderable: true, value: 'CP1'}]},
899
+ {
900
+ id: 'size',
901
+ name: 'Size',
902
+ values: [
903
+ {name: '28', orderable: true, value: '28'},
904
+ {name: '29', orderable: true, value: '29'},
905
+ {name: '30', orderable: true, value: '30'},
906
+ {name: '31', orderable: true, value: '31'},
907
+ {name: '32', orderable: true, value: '32'},
908
+ {name: '33', orderable: true, value: '33'},
909
+ {name: '34', orderable: true, value: '34'},
910
+ {name: '36', orderable: true, value: '36'},
911
+ {name: '38', orderable: true, value: '38'},
912
+ {name: '40', orderable: true, value: '40'}
913
+ ]
914
+ }
915
+ ]
916
+ }