@athoscommerce/snap-preact 1.11.0 → 1.12.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 (275) hide show
  1. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +18 -10
  2. package/dist/cjs/components/src/components/Atoms/Image/Image.js +10 -2
  3. package/dist/cjs/components/src/components/Atoms/ProductDetail/ProductDetail.js +98 -0
  4. package/dist/cjs/components/src/components/Atoms/ProductDetail/index.js +7 -0
  5. package/dist/cjs/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +13 -4
  6. package/dist/cjs/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +4 -1
  7. package/dist/cjs/components/src/components/Molecules/Gallery/Gallery.js +298 -0
  8. package/dist/cjs/components/src/components/Molecules/Gallery/index.js +17 -0
  9. package/dist/cjs/components/src/components/Molecules/Modal/Modal.js +21 -2
  10. package/dist/cjs/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
  11. package/dist/cjs/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.js +115 -0
  12. package/dist/cjs/components/src/components/Molecules/ProductDetailTable/index.js +17 -0
  13. package/dist/cjs/components/src/components/Molecules/QuantityPicker/QuantityPicker.js +136 -0
  14. package/dist/cjs/components/src/components/Molecules/QuantityPicker/index.js +17 -0
  15. package/dist/cjs/components/src/components/Molecules/Result/Result.js +43 -4
  16. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +5 -2
  17. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +38 -5
  18. package/dist/cjs/components/src/components/Molecules/Swatches/Swatches.js +1 -1
  19. package/dist/cjs/components/src/components/Molecules/VariantSelection/VariantSelection.js +7 -1
  20. package/dist/cjs/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -8
  21. package/dist/cjs/components/src/components/Organisms/Facet/Facet.js +1 -5
  22. package/dist/cjs/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +612 -0
  23. package/dist/cjs/components/src/components/Organisms/QuickviewLayout/index.js +17 -0
  24. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +3 -3
  25. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +3 -3
  26. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +2 -2
  27. package/dist/cjs/components/src/components/Templates/QuickviewModal/QuickviewModal.js +153 -0
  28. package/dist/cjs/components/src/components/Templates/QuickviewModal/index.js +17 -0
  29. package/dist/cjs/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.js +124 -0
  30. package/dist/cjs/components/src/components/Templates/QuickviewSlideout/index.js +17 -0
  31. package/dist/cjs/components/src/components/Templates/Recommendation/Recommendation.js +2 -1
  32. package/dist/cjs/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js +2 -1
  33. package/dist/cjs/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js +2 -1
  34. package/dist/cjs/components/src/hooks/useA11y.js +3 -1
  35. package/dist/cjs/components/src/hooks/useAcRenderedInput.js +1 -1
  36. package/dist/cjs/components/src/hooks/useClickOutside.js +6 -3
  37. package/dist/cjs/components/src/hooks/useTracking.js +14 -8
  38. package/dist/cjs/components/src/index.js +6 -0
  39. package/dist/cjs/components/src/providers/themeComponents.js +4 -0
  40. package/dist/cjs/components/src/setupTests.js +10 -0
  41. package/dist/cjs/components/src/utilities/createImpressionObserver.js +1 -1
  42. package/dist/cjs/components/src/utilities/index.js +1 -0
  43. package/dist/cjs/components/src/utilities/lazyRenderMinSize.js +10 -0
  44. package/dist/cjs/src/Instantiators/RecommendationInstantiator.js +2 -1
  45. package/dist/cjs/src/Snap.js +41 -0
  46. package/dist/cjs/src/Templates/SnapTemplates.js +51 -0
  47. package/dist/cjs/src/Templates/Stores/LibraryStore.js +77 -9
  48. package/dist/cjs/src/Templates/Stores/TemplateEditor/TemplateEditorStore.js +6 -1
  49. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.js +2 -5
  50. package/dist/cjs/src/Templates/Stores/TemplateStore.js +26 -10
  51. package/dist/cjs/src/Templates/Stores/library/components/QuickviewModal.js +5 -0
  52. package/dist/cjs/src/Templates/Stores/library/components/QuickviewSlideout.js +5 -0
  53. package/dist/cjs/src/Templates/Stores/library/currencies/currencies.js +1433 -0
  54. package/dist/cjs/src/Templates/Stores/library/languages/ar.js +487 -0
  55. package/dist/cjs/src/Templates/Stores/library/languages/de.js +487 -0
  56. package/dist/cjs/src/Templates/Stores/library/languages/en.js +1 -0
  57. package/dist/cjs/src/Templates/Stores/library/languages/es.js +84 -41
  58. package/dist/cjs/src/Templates/Stores/library/languages/fr.js +85 -40
  59. package/dist/cjs/src/Templates/Stores/library/languages/hi.js +487 -0
  60. package/dist/cjs/src/Templates/Stores/library/languages/it.js +487 -0
  61. package/dist/cjs/src/Templates/Stores/library/languages/ja.js +487 -0
  62. package/dist/cjs/src/Templates/Stores/library/languages/ko.js +487 -0
  63. package/dist/cjs/src/Templates/Stores/library/languages/nl.js +487 -0
  64. package/dist/cjs/src/Templates/Stores/library/languages/pt.js +487 -0
  65. package/dist/cjs/src/Templates/Stores/library/languages/ru.js +487 -0
  66. package/dist/cjs/src/Templates/Stores/library/languages/tr.js +487 -0
  67. package/dist/cjs/src/Templates/Stores/library/languages/vi.js +487 -0
  68. package/dist/cjs/src/Templates/Stores/library/languages/zh.js +487 -0
  69. package/dist/cjs/src/Templates/index.js +3 -1
  70. package/dist/cjs/src/create/createAutocompleteController.js +1 -0
  71. package/dist/cjs/src/create/createRecommendationController.js +1 -0
  72. package/dist/cjs/src/create/createSearchController.js +1 -0
  73. package/dist/cjs/src/index.js +3 -1
  74. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +1 -1
  75. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
  76. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  77. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +19 -11
  78. package/dist/esm/components/src/components/Atoms/Image/Image.d.ts +5 -0
  79. package/dist/esm/components/src/components/Atoms/Image/Image.d.ts.map +1 -1
  80. package/dist/esm/components/src/components/Atoms/Image/Image.js +10 -2
  81. package/dist/esm/components/src/components/Atoms/ProductDetail/ProductDetail.d.ts +18 -0
  82. package/dist/esm/components/src/components/Atoms/ProductDetail/ProductDetail.d.ts.map +1 -0
  83. package/dist/esm/components/src/components/Atoms/ProductDetail/ProductDetail.js +89 -0
  84. package/dist/esm/components/src/components/Atoms/ProductDetail/index.d.ts +3 -0
  85. package/dist/esm/components/src/components/Atoms/ProductDetail/index.d.ts.map +1 -0
  86. package/dist/esm/components/src/components/Atoms/ProductDetail/index.js +3 -0
  87. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts +1 -1
  88. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts.map +1 -1
  89. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +13 -4
  90. package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.d.ts.map +1 -1
  91. package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +4 -1
  92. package/dist/esm/components/src/components/Molecules/Gallery/Gallery.d.ts +28 -0
  93. package/dist/esm/components/src/components/Molecules/Gallery/Gallery.d.ts.map +1 -0
  94. package/dist/esm/components/src/components/Molecules/Gallery/Gallery.js +292 -0
  95. package/dist/esm/components/src/components/Molecules/Gallery/index.d.ts +2 -0
  96. package/dist/esm/components/src/components/Molecules/Gallery/index.d.ts.map +1 -0
  97. package/dist/esm/components/src/components/Molecules/Gallery/index.js +1 -0
  98. package/dist/esm/components/src/components/Molecules/Modal/Modal.d.ts.map +1 -1
  99. package/dist/esm/components/src/components/Molecules/Modal/Modal.js +22 -3
  100. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
  101. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
  102. package/dist/esm/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.d.ts +14 -0
  103. package/dist/esm/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.d.ts.map +1 -0
  104. package/dist/esm/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.js +109 -0
  105. package/dist/esm/components/src/components/Molecules/ProductDetailTable/index.d.ts +2 -0
  106. package/dist/esm/components/src/components/Molecules/ProductDetailTable/index.d.ts.map +1 -0
  107. package/dist/esm/components/src/components/Molecules/ProductDetailTable/index.js +1 -0
  108. package/dist/esm/components/src/components/Molecules/QuantityPicker/QuantityPicker.d.ts +43 -0
  109. package/dist/esm/components/src/components/Molecules/QuantityPicker/QuantityPicker.d.ts.map +1 -0
  110. package/dist/esm/components/src/components/Molecules/QuantityPicker/QuantityPicker.js +130 -0
  111. package/dist/esm/components/src/components/Molecules/QuantityPicker/index.d.ts +2 -0
  112. package/dist/esm/components/src/components/Molecules/QuantityPicker/index.d.ts.map +1 -0
  113. package/dist/esm/components/src/components/Molecules/QuantityPicker/index.js +1 -0
  114. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +3 -0
  115. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  116. package/dist/esm/components/src/components/Molecules/Result/Result.js +43 -4
  117. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  118. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +6 -3
  119. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts +1 -0
  120. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  121. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +38 -5
  122. package/dist/esm/components/src/components/Molecules/Swatches/Swatches.js +1 -1
  123. package/dist/esm/components/src/components/Molecules/VariantSelection/VariantSelection.d.ts.map +1 -1
  124. package/dist/esm/components/src/components/Molecules/VariantSelection/VariantSelection.js +7 -1
  125. package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -8
  126. package/dist/esm/components/src/components/Organisms/Facet/Facet.d.ts.map +1 -1
  127. package/dist/esm/components/src/components/Organisms/Facet/Facet.js +1 -5
  128. package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts +53 -0
  129. package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts.map +1 -0
  130. package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +605 -0
  131. package/dist/esm/components/src/components/Organisms/QuickviewLayout/index.d.ts +2 -0
  132. package/dist/esm/components/src/components/Organisms/QuickviewLayout/index.d.ts.map +1 -0
  133. package/dist/esm/components/src/components/Organisms/QuickviewLayout/index.js +1 -0
  134. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +3 -3
  135. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +3 -3
  136. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +2 -2
  137. package/dist/esm/components/src/components/Templates/QuickviewModal/QuickviewModal.d.ts +12 -0
  138. package/dist/esm/components/src/components/Templates/QuickviewModal/QuickviewModal.d.ts.map +1 -0
  139. package/dist/esm/components/src/components/Templates/QuickviewModal/QuickviewModal.js +147 -0
  140. package/dist/esm/components/src/components/Templates/QuickviewModal/index.d.ts +2 -0
  141. package/dist/esm/components/src/components/Templates/QuickviewModal/index.d.ts.map +1 -0
  142. package/dist/esm/components/src/components/Templates/QuickviewModal/index.js +1 -0
  143. package/dist/esm/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.d.ts +16 -0
  144. package/dist/esm/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.d.ts.map +1 -0
  145. package/dist/esm/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.js +118 -0
  146. package/dist/esm/components/src/components/Templates/QuickviewSlideout/index.d.ts +2 -0
  147. package/dist/esm/components/src/components/Templates/QuickviewSlideout/index.d.ts.map +1 -0
  148. package/dist/esm/components/src/components/Templates/QuickviewSlideout/index.js +1 -0
  149. package/dist/esm/components/src/components/Templates/Recommendation/Recommendation.d.ts.map +1 -1
  150. package/dist/esm/components/src/components/Templates/Recommendation/Recommendation.js +3 -2
  151. package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.d.ts.map +1 -1
  152. package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js +3 -2
  153. package/dist/esm/components/src/components/Templates/RecommendationGrid/RecommendationGrid.d.ts.map +1 -1
  154. package/dist/esm/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js +3 -2
  155. package/dist/esm/components/src/hooks/useA11y.d.ts.map +1 -1
  156. package/dist/esm/components/src/hooks/useA11y.js +3 -1
  157. package/dist/esm/components/src/hooks/useAcRenderedInput.js +1 -1
  158. package/dist/esm/components/src/hooks/useClickOutside.d.ts +1 -1
  159. package/dist/esm/components/src/hooks/useClickOutside.d.ts.map +1 -1
  160. package/dist/esm/components/src/hooks/useClickOutside.js +6 -3
  161. package/dist/esm/components/src/hooks/useTracking.d.ts +9 -3
  162. package/dist/esm/components/src/hooks/useTracking.d.ts.map +1 -1
  163. package/dist/esm/components/src/hooks/useTracking.js +14 -8
  164. package/dist/esm/components/src/index.d.ts +6 -0
  165. package/dist/esm/components/src/index.d.ts.map +1 -1
  166. package/dist/esm/components/src/index.js +6 -0
  167. package/dist/esm/components/src/providers/langComponents.d.ts +6 -0
  168. package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
  169. package/dist/esm/components/src/providers/themeComponents.d.ts +104 -57
  170. package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
  171. package/dist/esm/components/src/providers/themeComponents.js +4 -0
  172. package/dist/esm/components/src/setupTests.js +10 -0
  173. package/dist/esm/components/src/utilities/createImpressionObserver.js +1 -1
  174. package/dist/esm/components/src/utilities/index.d.ts +1 -0
  175. package/dist/esm/components/src/utilities/index.d.ts.map +1 -1
  176. package/dist/esm/components/src/utilities/index.js +1 -0
  177. package/dist/esm/components/src/utilities/lazyRenderMinSize.d.ts +5 -0
  178. package/dist/esm/components/src/utilities/lazyRenderMinSize.d.ts.map +1 -0
  179. package/dist/esm/components/src/utilities/lazyRenderMinSize.js +7 -0
  180. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts +4 -2
  181. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  182. package/dist/esm/src/Instantiators/RecommendationInstantiator.js +2 -1
  183. package/dist/esm/src/Snap.d.ts +7 -0
  184. package/dist/esm/src/Snap.d.ts.map +1 -1
  185. package/dist/esm/src/Snap.js +43 -2
  186. package/dist/esm/src/Templates/SnapTemplates.d.ts +25 -0
  187. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  188. package/dist/esm/src/Templates/SnapTemplates.js +48 -0
  189. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +22 -2
  190. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  191. package/dist/esm/src/Templates/Stores/LibraryStore.js +76 -8
  192. package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.d.ts.map +1 -1
  193. package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.js +6 -1
  194. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.d.ts.map +1 -1
  195. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.js +2 -5
  196. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +14 -6
  197. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  198. package/dist/esm/src/Templates/Stores/TemplateStore.js +26 -10
  199. package/dist/esm/src/Templates/Stores/library/components/QuickviewModal.d.ts +2 -0
  200. package/dist/esm/src/Templates/Stores/library/components/QuickviewModal.d.ts.map +1 -0
  201. package/dist/esm/src/Templates/Stores/library/components/QuickviewModal.js +1 -0
  202. package/dist/esm/src/Templates/Stores/library/components/QuickviewSlideout.d.ts +2 -0
  203. package/dist/esm/src/Templates/Stores/library/components/QuickviewSlideout.d.ts.map +1 -0
  204. package/dist/esm/src/Templates/Stores/library/components/QuickviewSlideout.js +1 -0
  205. package/dist/esm/src/Templates/Stores/library/currencies/currencies.d.ts +1270 -0
  206. package/dist/esm/src/Templates/Stores/library/currencies/currencies.d.ts.map +1 -0
  207. package/dist/esm/src/Templates/Stores/library/currencies/currencies.js +1430 -0
  208. package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts +3 -0
  209. package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts.map +1 -0
  210. package/dist/esm/src/Templates/Stores/library/languages/ar.js +484 -0
  211. package/dist/esm/src/Templates/Stores/library/languages/de.d.ts +3 -0
  212. package/dist/esm/src/Templates/Stores/library/languages/de.d.ts.map +1 -0
  213. package/dist/esm/src/Templates/Stores/library/languages/de.js +484 -0
  214. package/dist/esm/src/Templates/Stores/library/languages/en.d.ts.map +1 -1
  215. package/dist/esm/src/Templates/Stores/library/languages/en.js +1 -0
  216. package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  217. package/dist/esm/src/Templates/Stores/library/languages/es.js +84 -41
  218. package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  219. package/dist/esm/src/Templates/Stores/library/languages/fr.js +85 -40
  220. package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts +3 -0
  221. package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts.map +1 -0
  222. package/dist/esm/src/Templates/Stores/library/languages/hi.js +484 -0
  223. package/dist/esm/src/Templates/Stores/library/languages/it.d.ts +3 -0
  224. package/dist/esm/src/Templates/Stores/library/languages/it.d.ts.map +1 -0
  225. package/dist/esm/src/Templates/Stores/library/languages/it.js +484 -0
  226. package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts +3 -0
  227. package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts.map +1 -0
  228. package/dist/esm/src/Templates/Stores/library/languages/ja.js +484 -0
  229. package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts +3 -0
  230. package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts.map +1 -0
  231. package/dist/esm/src/Templates/Stores/library/languages/ko.js +484 -0
  232. package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts +3 -0
  233. package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts.map +1 -0
  234. package/dist/esm/src/Templates/Stores/library/languages/nl.js +484 -0
  235. package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts +3 -0
  236. package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts.map +1 -0
  237. package/dist/esm/src/Templates/Stores/library/languages/pt.js +484 -0
  238. package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts +3 -0
  239. package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts.map +1 -0
  240. package/dist/esm/src/Templates/Stores/library/languages/ru.js +484 -0
  241. package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts +3 -0
  242. package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts.map +1 -0
  243. package/dist/esm/src/Templates/Stores/library/languages/tr.js +484 -0
  244. package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts +3 -0
  245. package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts.map +1 -0
  246. package/dist/esm/src/Templates/Stores/library/languages/vi.js +484 -0
  247. package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts +3 -0
  248. package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts.map +1 -0
  249. package/dist/esm/src/Templates/Stores/library/languages/zh.js +484 -0
  250. package/dist/esm/src/Templates/index.d.ts +1 -1
  251. package/dist/esm/src/Templates/index.d.ts.map +1 -1
  252. package/dist/esm/src/Templates/index.js +1 -1
  253. package/dist/esm/src/create/createAutocompleteController.js +1 -0
  254. package/dist/esm/src/create/createRecommendationController.js +1 -0
  255. package/dist/esm/src/create/createSearchController.js +1 -0
  256. package/dist/esm/src/index.d.ts +1 -1
  257. package/dist/esm/src/index.d.ts.map +1 -1
  258. package/dist/esm/src/index.js +1 -1
  259. package/dist/esm/src/types.d.ts +2 -1
  260. package/dist/esm/src/types.d.ts.map +1 -1
  261. package/eslint/src/index.cjs +5 -0
  262. package/eslint/src/validate-config.cjs +473 -0
  263. package/package.json +16 -14
  264. package/dist/cjs/src/Templates/Stores/library/currencies/aud.js +0 -10
  265. package/dist/cjs/src/Templates/Stores/library/currencies/eur.js +0 -10
  266. package/dist/cjs/src/Templates/Stores/library/currencies/usd.js +0 -10
  267. package/dist/esm/src/Templates/Stores/library/currencies/aud.d.ts +0 -8
  268. package/dist/esm/src/Templates/Stores/library/currencies/aud.d.ts.map +0 -1
  269. package/dist/esm/src/Templates/Stores/library/currencies/aud.js +0 -7
  270. package/dist/esm/src/Templates/Stores/library/currencies/eur.d.ts +0 -8
  271. package/dist/esm/src/Templates/Stores/library/currencies/eur.d.ts.map +0 -1
  272. package/dist/esm/src/Templates/Stores/library/currencies/eur.js +0 -7
  273. package/dist/esm/src/Templates/Stores/library/currencies/usd.d.ts +0 -8
  274. package/dist/esm/src/Templates/Stores/library/currencies/usd.d.ts.map +0 -1
  275. package/dist/esm/src/Templates/Stores/library/currencies/usd.js +0 -7
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProductDetailTable = void 0;
7
+ const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
8
+ const react_1 = require("@emotion/react");
9
+ const classnames_1 = __importDefault(require("classnames"));
10
+ const mobx_react_lite_1 = require("mobx-react-lite");
11
+ const mobx_1 = require("mobx");
12
+ const providers_1 = require("../../../providers");
13
+ const utilities_1 = require("../../../utilities");
14
+ const hooks_1 = require("../../../hooks");
15
+ const ProductDetail_1 = require("../../Atoms/ProductDetail");
16
+ const ProductDetail_2 = require("../../Atoms/ProductDetail/ProductDetail");
17
+ const Price_1 = require("../../Atoms/Price");
18
+ const Image_1 = require("../../Atoms/Image");
19
+ const Rating_1 = require("../Rating");
20
+ const defaultStyles = () => {
21
+ return (0, react_1.css)({
22
+ width: '100%',
23
+ borderCollapse: 'collapse',
24
+ fontSize: '0.9em',
25
+ '& tr': {
26
+ borderBottom: '1px solid #eee',
27
+ },
28
+ '& tr:last-of-type': {
29
+ borderBottom: 'none',
30
+ },
31
+ '& th, & td': {
32
+ padding: '10px 0',
33
+ textAlign: 'left',
34
+ verticalAlign: 'top',
35
+ },
36
+ '& th': {
37
+ width: '40%',
38
+ paddingRight: '16px',
39
+ fontWeight: 500,
40
+ color: '#666',
41
+ textTransform: 'uppercase',
42
+ fontSize: '0.85em',
43
+ letterSpacing: '0.02em',
44
+ },
45
+ '& td': {
46
+ color: '#1a1a1a',
47
+ // Typed values render components whose defaults center them (Rating flex-centers its
48
+ // stars, Image stretches and letterboxes via objectFit) — left-align both so every
49
+ // display type lines up with the plain text values.
50
+ '& .ss__rating': {
51
+ justifyContent: 'flex-start',
52
+ },
53
+ '& .ss__image': {
54
+ alignItems: 'flex-start',
55
+ // Cap images at a row-scale thumbnail (width stays auto, preserving aspect ratio)
56
+ // so a full-size product image can't dwarf the table.
57
+ '& img': {
58
+ maxHeight: '100px',
59
+ },
60
+ },
61
+ },
62
+ });
63
+ };
64
+ exports.ProductDetailTable = (0, mobx_react_lite_1.observer)((properties) => {
65
+ const globalTheme = (0, providers_1.useTheme)();
66
+ const globalTreePath = (0, providers_1.useTreePath)();
67
+ const defaultProps = {
68
+ treePath: globalTreePath,
69
+ };
70
+ const props = (0, utilities_1.mergeProps)('productDetailTable', globalTheme, defaultProps, properties);
71
+ const { result, displayFields, disableStyles, className, internalClassName, treePath } = props;
72
+ const { overrideElement, shouldRenderDefault } = (0, hooks_1.useCustomComponentOverride)('productDetailTable', props);
73
+ if (!shouldRenderDefault) {
74
+ return overrideElement;
75
+ }
76
+ const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
77
+ // Render only the configured fields that resolve to a non-empty value (preserves the opt-in
78
+ // behaviour: with no displayFields, nothing renders).
79
+ const displayedFields = (displayFields || []).filter((detail) => (0, ProductDetail_2.renderDetailValue)((0, ProductDetail_2.getProductFieldValue)(result, detail.field)) !== '');
80
+ if (displayedFields.length === 0)
81
+ return null;
82
+ const renderValue = (detail) => {
83
+ const rawValue = (0, ProductDetail_2.getProductFieldValue)(result, detail.field);
84
+ const componentProps = { theme: props.theme, treePath, ...(0, utilities_1.defined)({ disableStyles }) };
85
+ switch (detail.type) {
86
+ case 'price': {
87
+ const value = Number(rawValue);
88
+ if (!isNaN(value)) {
89
+ return (0, jsx_runtime_1.jsx)(Price_1.Price, { value: value, ...componentProps });
90
+ }
91
+ break;
92
+ }
93
+ case 'rating': {
94
+ const value = Number(rawValue);
95
+ if (!isNaN(value)) {
96
+ return (0, jsx_runtime_1.jsx)(Rating_1.Rating, { value: value, ...componentProps });
97
+ }
98
+ break;
99
+ }
100
+ case 'image': {
101
+ // An image field may resolve to an array of URLs — display the first.
102
+ const src = Array.isArray(rawValue) || (0, mobx_1.isObservableArray)(rawValue) ? Array.from(rawValue)[0] : rawValue;
103
+ if (typeof src === 'string' && src) {
104
+ return (0, jsx_runtime_1.jsx)(Image_1.Image, { src: src, alt: detail.label || detail.field, ...componentProps });
105
+ }
106
+ break;
107
+ }
108
+ case 'html':
109
+ return (0, jsx_runtime_1.jsx)(ProductDetail_1.ProductDetail, { result: result, field: detail.field, html: true, ...componentProps });
110
+ }
111
+ // 'text' (the default) — and the fallback when a typed value doesn't fit its type.
112
+ return (0, jsx_runtime_1.jsx)(ProductDetail_1.ProductDetail, { result: result, field: detail.field, ...componentProps });
113
+ };
114
+ return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("table", { ...styling, className: (0, classnames_1.default)('ss__product-detail-table', className, internalClassName), children: (0, jsx_runtime_1.jsx)("tbody", { children: displayedFields.map((detail, index) => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { scope: "row", children: detail.label ?? detail.field }), (0, jsx_runtime_1.jsx)("td", { children: renderValue(detail) })] }, `${detail.field}-${index}`))) }) }) }));
115
+ });
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ProductDetailTable"), exports);
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.QuantityPicker = void 0;
7
+ const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
8
+ const hooks_1 = require("preact/hooks");
9
+ const react_1 = require("@emotion/react");
10
+ const classnames_1 = __importDefault(require("classnames"));
11
+ const mobx_react_lite_1 = require("mobx-react-lite");
12
+ const deepmerge_1 = __importDefault(require("deepmerge"));
13
+ const utilities_1 = require("../../../utilities");
14
+ const providers_1 = require("../../../providers");
15
+ const hooks_2 = require("../../../hooks");
16
+ const Button_1 = require("../../Atoms/Button");
17
+ const defaultStyles = () => {
18
+ return (0, react_1.css)({
19
+ display: 'inline-flex',
20
+ alignItems: 'center',
21
+ gap: '5px',
22
+ '&.ss__quantity-picker--disabled': {
23
+ opacity: 0.7,
24
+ },
25
+ '& .ss__quantity-picker__label-wrapper': {
26
+ display: 'inline-flex',
27
+ alignItems: 'center',
28
+ },
29
+ '& .ss__quantity-picker__controls-wrapper': {
30
+ display: 'inline-flex',
31
+ alignItems: 'center',
32
+ gap: '5px',
33
+ },
34
+ '& .ss__quantity-picker__input': {
35
+ width: '60px',
36
+ textAlign: 'center',
37
+ padding: '5px',
38
+ boxSizing: 'border-box',
39
+ },
40
+ });
41
+ };
42
+ exports.QuantityPicker = (0, mobx_react_lite_1.observer)((properties) => {
43
+ const globalTheme = (0, providers_1.useTheme)();
44
+ const globalTreePath = (0, providers_1.useTreePath)();
45
+ const defaultProps = {
46
+ min: 1,
47
+ step: 1,
48
+ treePath: globalTreePath,
49
+ };
50
+ const props = (0, utilities_1.mergeProps)('quantityPicker', globalTheme, defaultProps, properties);
51
+ const { value, startValue, min, max, step, disabled, hideButtons, label, onChange, disableStyles, className, internalClassName, theme: ______, treePath, lang, style: _, styleScript: __, themeStyleScript: ___, name: ____, ...additionalProps } = props;
52
+ // whole numbers only, never negative, within min/max
53
+ const minimum = Math.max(0, Math.trunc(min));
54
+ const clamp = (num) => {
55
+ let clamped = Math.trunc(num);
56
+ if (isNaN(clamped)) {
57
+ clamped = minimum;
58
+ }
59
+ clamped = Math.max(minimum, clamped);
60
+ if (typeof max == 'number') {
61
+ clamped = Math.min(Math.trunc(max), clamped);
62
+ }
63
+ return clamped;
64
+ };
65
+ // useState is called unconditionally (rules of hooks): a `value` prop that transitions between
66
+ // undefined and defined across renders must not shift hook order. In controlled mode the
67
+ // internal state is simply ignored and the quantity derives from the prop.
68
+ const [internalQuantity, setQuantityState] = (0, hooks_1.useState)(clamp(startValue ?? minimum));
69
+ const stateful = value === undefined;
70
+ const quantity = stateful ? internalQuantity : clamp(value);
71
+ // raw input text while typing - committed (clamped) on blur
72
+ const [editingValue, setEditingValue] = (0, hooks_1.useState)(undefined);
73
+ const { overrideElement, shouldRenderDefault } = (0, hooks_2.useCustomComponentOverride)('quantityPicker', props);
74
+ if (!shouldRenderDefault) {
75
+ return overrideElement;
76
+ }
77
+ const commit = (e, newValue) => {
78
+ if (disabled) {
79
+ return;
80
+ }
81
+ const clamped = clamp(newValue);
82
+ if (stateful) {
83
+ setQuantityState(clamped);
84
+ }
85
+ if (clamped !== quantity) {
86
+ onChange && onChange(e, clamped);
87
+ }
88
+ };
89
+ const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
90
+ //initialize lang
91
+ const defaultLang = {
92
+ quantityInput: {
93
+ attributes: {
94
+ 'aria-label': 'quantity',
95
+ },
96
+ },
97
+ decrementButton: {
98
+ attributes: {
99
+ 'aria-label': 'decrease quantity',
100
+ },
101
+ },
102
+ incrementButton: {
103
+ attributes: {
104
+ 'aria-label': 'increase quantity',
105
+ },
106
+ },
107
+ };
108
+ //deep merge with props.lang
109
+ const _lang = (0, deepmerge_1.default)(defaultLang, lang || {});
110
+ const mergedLang = (0, hooks_2.useLang)(_lang, {
111
+ quantity,
112
+ min: minimum,
113
+ max,
114
+ disabled,
115
+ }, { activeBreakpoint: globalTheme?.activeBreakpoint });
116
+ const subProps = {
117
+ button: {
118
+ // default props
119
+ internalClassName: 'ss__quantity-picker__button',
120
+ // inherited props
121
+ ...(0, utilities_1.defined)({
122
+ disableStyles,
123
+ }),
124
+ // component theme overrides
125
+ theme: props.theme,
126
+ treePath,
127
+ },
128
+ };
129
+ return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("div", { ...styling, className: (0, classnames_1.default)('ss__quantity-picker', { 'ss__quantity-picker--disabled': disabled }, className, internalClassName), ...additionalProps, children: [label && ((0, jsx_runtime_1.jsx)("div", { className: "ss__quantity-picker__label-wrapper", children: (0, jsx_runtime_1.jsx)("span", { className: "ss__quantity-picker__label", children: label }) })), (0, jsx_runtime_1.jsxs)("div", { className: "ss__quantity-picker__controls-wrapper", children: [!hideButtons && ((0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.button, name: "decrement", internalClassName: (0, classnames_1.default)(subProps.button.internalClassName, 'ss__quantity-picker__button--decrement'), disabled: disabled || quantity <= minimum, onClick: (e) => commit(e, quantity - step), icon: 'minus-thin', ...mergedLang.decrementButton?.attributes })), (0, jsx_runtime_1.jsx)("input", { className: "ss__quantity-picker__input", type: "number", inputMode: "numeric", min: minimum, max: max, step: step, value: editingValue ?? quantity, disabled: disabled, onInput: (e) => setEditingValue(e.target.value), onBlur: (e) => {
130
+ if (editingValue !== undefined) {
131
+ const parsed = parseFloat(editingValue);
132
+ commit(e, isNaN(parsed) ? quantity : parsed);
133
+ setEditingValue(undefined);
134
+ }
135
+ }, ...mergedLang.quantityInput?.all }), !hideButtons && ((0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.button, name: "increment", internalClassName: (0, classnames_1.default)(subProps.button.internalClassName, 'ss__quantity-picker__button--increment'), disabled: disabled || (typeof max == 'number' && quantity >= max), onClick: (e) => commit(e, quantity + step), icon: 'plus-thin', ...mergedLang.incrementButton?.attributes }))] })] }) }));
136
+ });
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./QuantityPicker"), exports);
@@ -51,6 +51,16 @@ const defaultStyles = () => {
51
51
  background: 'rgba(255, 255, 255, 0.5)',
52
52
  padding: '10px',
53
53
  },
54
+ '& .ss__result__quickview': {
55
+ position: 'absolute',
56
+ bottom: '10px',
57
+ right: '10px',
58
+ display: 'flex',
59
+ background: 'transparent',
60
+ border: 0,
61
+ padding: '5px',
62
+ cursor: 'pointer',
63
+ },
54
64
  },
55
65
  '& .ss__result__details': {
56
66
  padding: '10px',
@@ -81,9 +91,10 @@ exports.Result = (0, mobx_react_lite_1.observer)((properties) => {
81
91
  addToCartButtonSuccessTimeout: 2000,
82
92
  hideAddToCartButton: true,
83
93
  hideRating: true,
94
+ hideQuickviewButton: true,
84
95
  };
85
96
  const props = (0, utilities_1.mergeProps)('result', globalTheme, defaultProps, properties);
86
- const { result, hideBadge, hideTitle, hidePricing, hideImage, detailSlot, fallback, disableStyles, className, internalClassName, layout, onClick, controller, hideVariantSelections, hideAddToCartButton, onAddToCartClick, addToCartButtonText, addToCartButtonSuccessText, addToCartButtonSuccessTimeout, hideRating, trackingRef, treePath, } = props;
97
+ const { result, hideBadge, hideTitle, hidePricing, hideImage, detailSlot, fallback, disableStyles, className, internalClassName, layout, onClick, controller, hideVariantSelections, hideAddToCartButton, onAddToCartClick, addToCartButtonText, addToCartButtonSuccessText, addToCartButtonSuccessTimeout, hideRating, hideQuickviewButton, onQuickviewClick, trackingRef, treePath, } = props;
87
98
  const { overrideElement, shouldRenderDefault } = (0, hooks_2.useCustomComponentOverride)('result', {
88
99
  ...props,
89
100
  customComponent: props.customComponent && props.customComponent !== 'Result' ? props.customComponent : undefined,
@@ -166,6 +177,29 @@ exports.Result = (0, mobx_react_lite_1.observer)((properties) => {
166
177
  theme: props.theme,
167
178
  treePath,
168
179
  },
180
+ quickviewButton: {
181
+ // default props
182
+ name: 'quickview',
183
+ internalClassName: 'ss__result__quickview',
184
+ icon: {
185
+ internalClassName: 'ss__result__quickview__icon',
186
+ icon: 'eye',
187
+ size: '20px',
188
+ },
189
+ onClick: (e) => {
190
+ if (onQuickviewClick) {
191
+ onQuickviewClick(e, result);
192
+ }
193
+ controller?.quickview(result);
194
+ },
195
+ // inherited props
196
+ ...(0, utilities_1.defined)({
197
+ disableStyles,
198
+ }),
199
+ // component theme overrides
200
+ theme: props.theme,
201
+ treePath,
202
+ },
169
203
  button: {
170
204
  // default props
171
205
  internalClassName: 'ss__result__button--addToCart',
@@ -196,6 +230,11 @@ exports.Result = (0, mobx_react_lite_1.observer)((properties) => {
196
230
  addToCartButtonText: {
197
231
  value: addedToCart ? addToCartButtonSuccessText : addToCartButtonText,
198
232
  },
233
+ quickviewButtonText: {
234
+ attributes: {
235
+ 'aria-label': 'Quick View',
236
+ },
237
+ },
199
238
  };
200
239
  //deep merge with props.lang
201
240
  const lang = (0, deepmerge_1.default)(defaultLang, props.lang || {});
@@ -205,9 +244,9 @@ exports.Result = (0, mobx_react_lite_1.observer)((properties) => {
205
244
  }, { activeBreakpoint: globalTheme?.activeBreakpoint });
206
245
  const isOnSale = Boolean(core?.msrp && core?.price && core?.price < core?.msrp);
207
246
  const renderPrices = controller?.store?.config?.asyncState?.product?.price ? result.state.priceFetched : true;
208
- return core ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("article", { ...styling, className: (0, classnames_1.default)('ss__result', `ss__result--${layout}`, { 'ss__result--sale': isOnSale }, className, internalClassName), ref: trackingRef, children: [!hideImage && ((0, jsx_runtime_1.jsx)("div", { className: "ss__result__image-wrapper", children: (0, jsx_runtime_1.jsx)("a", { href: core.url, onClick: (e) => {
209
- onClick && onClick(e);
210
- }, children: !hideBadge ? ((0, jsx_runtime_1.jsx)(OverlayBadge_1.OverlayBadge, { ...subProps.overlayBadge, controller: controller, children: (0, jsx_runtime_1.jsx)(Image_1.Image, { ...subProps.image }) })) : ((0, jsx_runtime_1.jsx)(Image_1.Image, { ...subProps.image })) }) })), (0, jsx_runtime_1.jsxs)("div", { className: "ss__result__details", children: [!hideBadge && ((0, jsx_runtime_1.jsx)(CalloutBadge_1.CalloutBadge, { ...subProps.calloutBadge, controller: controller })), !hideTitle && ((0, jsx_runtime_1.jsx)("div", { className: "ss__result__details__title", children: (0, jsx_runtime_1.jsx)("a", { href: core.url, onClick: (e) => {
247
+ return core ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("article", { ...styling, className: (0, classnames_1.default)('ss__result', `ss__result--${layout}`, { 'ss__result--sale': isOnSale }, className, internalClassName), ref: trackingRef, children: [!hideImage && ((0, jsx_runtime_1.jsxs)("div", { className: "ss__result__image-wrapper", children: [(0, jsx_runtime_1.jsx)("a", { href: core.url, onClick: (e) => {
248
+ onClick && onClick(e);
249
+ }, children: !hideBadge ? ((0, jsx_runtime_1.jsx)(OverlayBadge_1.OverlayBadge, { ...subProps.overlayBadge, controller: controller, children: (0, jsx_runtime_1.jsx)(Image_1.Image, { ...subProps.image }) })) : ((0, jsx_runtime_1.jsx)(Image_1.Image, { ...subProps.image })) }), !hideQuickviewButton && controller?.quickviewManager && ((0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.quickviewButton, ...mergedLang.quickviewButtonText.attributes }))] })), (0, jsx_runtime_1.jsxs)("div", { className: "ss__result__details", children: [!hideBadge && ((0, jsx_runtime_1.jsx)(CalloutBadge_1.CalloutBadge, { ...subProps.calloutBadge, controller: controller })), !hideTitle && ((0, jsx_runtime_1.jsx)("div", { className: "ss__result__details__title", children: (0, jsx_runtime_1.jsx)("a", { href: core.url, onClick: (e) => {
211
250
  onClick && onClick(e);
212
251
  }, dangerouslySetInnerHTML: {
213
252
  __html: displayName || '',
@@ -92,8 +92,11 @@ exports.Slideout = (0, mobx_react_lite_1.observer)((properties) => {
92
92
  document.body.style.overflow = newActive ? 'hidden' : '';
93
93
  onChange && onChange(newActive);
94
94
  };
95
- //this is used to update active state if active prop is changed from parent component.
96
- (0, hooks_1.useEffect)(() => {
95
+ // Sync internal state when the active prop changes from the parent component. This is a
96
+ // layout effect so the content commit is scheduled before consumers' passive effects run —
97
+ // a plain effect would mount the content one tick later, after a parent that opened the
98
+ // slideout has already tried (and failed) to move focus into it.
99
+ (0, hooks_1.useLayoutEffect)(() => {
97
100
  setRenderContent(Boolean(active));
98
101
  setActive(Boolean(active));
99
102
  }, [active]);
@@ -15,6 +15,8 @@ const Image_1 = require("../../Atoms/Image");
15
15
  const Button_1 = require("../../Atoms/Button");
16
16
  const hooks_2 = require("../../../hooks");
17
17
  const deepmerge_1 = __importDefault(require("deepmerge"));
18
+ // Pointer travel (px) past which a press is treated as a drag rather than a click.
19
+ const DRAG_CLICK_THRESHOLD = 5;
18
20
  const defaultStyles = ({ theme, slidesToShow = 1, slideWidth, gap = 16, overlayNavigation = false, showNavigation }) => {
19
21
  return (0, react_1.css)({
20
22
  position: 'relative',
@@ -161,13 +163,14 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
161
163
  centerInsufficientSlides: true,
162
164
  slidesToShow: properties.slideWidth ? undefined : 4,
163
165
  slidesToMove: 1,
166
+ startIndex: 0,
164
167
  gap: 10,
165
168
  ariaLabel: 'slideshow',
166
169
  touchDragging: true,
167
170
  dragThreshold: 50,
168
171
  };
169
172
  const props = (0, utilities_1.mergeProps)('slideshow', globalTheme, defaultProps, properties);
170
- const { className, slides, fallbackImage, autoPlay, autoPlayInterval, showNavigation, showPagination, loop, alwaysShowNavigation, slidesToShow, slideImageAlt, centerInsufficientSlides, ariaLabel, ariaLabelledBy, disableStyles, slideWidth, gap, treePath, overlayNavigation, dragThreshold, } = props;
173
+ const { className, slides, fallbackImage, autoPlay, autoPlayInterval, showNavigation, showPagination, loop, alwaysShowNavigation, slidesToShow, slideImageAlt, centerInsufficientSlides, ariaLabel, ariaLabelledBy, disableStyles, slideWidth, startIndex, gap, treePath, overlayNavigation, dragThreshold, } = props;
171
174
  const { overrideElement, shouldRenderDefault } = (0, hooks_2.useCustomComponentOverride)('slideshow', props);
172
175
  if (!shouldRenderDefault) {
173
176
  return overrideElement;
@@ -242,12 +245,17 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
242
245
  if (!slidesToMove) {
243
246
  slidesToMove = 1;
244
247
  }
245
- const [currentIndex, setCurrentIndex] = (0, hooks_1.useState)(0);
248
+ const [currentIndex, setCurrentIndex] = (0, hooks_1.useState)(startIndex ?? 0);
246
249
  const [isPlaying, setIsPlaying] = (0, hooks_1.useState)(autoPlay);
247
250
  const [containerWidth, setContainerWidth] = (0, hooks_1.useState)(0);
248
251
  const intervalRef = (0, hooks_1.useRef)(null);
249
252
  const slideshowRef = (0, hooks_1.useRef)(null);
250
253
  const trackRef = (0, hooks_1.useRef)(null);
254
+ // Tracks whether the pointer moved during the current press. The browser fires a `click`
255
+ // after a drag's `mouseup`, by which point `isDragging` state has already been reset — so a
256
+ // swipe would otherwise be treated as a click (e.g. opening a lightbox). This synchronous ref
257
+ // lets `handleSlideClick` suppress that trailing click.
258
+ const hasDraggedRef = (0, hooks_1.useRef)(false);
251
259
  // Track container width for slideWidth-based visible slide calculation
252
260
  (0, hooks_1.useEffect)(() => {
253
261
  const container = trackRef.current?.parentElement;
@@ -300,6 +308,23 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
300
308
  const computedSlidesToShow = slideWidth && containerWidth > 0 ? Math.max(1, Math.floor(containerWidth / (slideWidth + (gap ?? 0)))) : slidesToShow ?? 4;
301
309
  const visibleSlides = Math.min(computedSlidesToShow, totalSlides);
302
310
  const maxIndex = Math.max(0, totalSlides - visibleSlides);
311
+ // Navigate to startIndex when it changes (e.g. a consumer syncing the active slide to external
312
+ // state), clamped to the valid range. Updates the index in place rather than remounting.
313
+ // maxIndex must be a dependency: in slideWidth mode it is derived from the slidesToShow
314
+ // fallback until the container is measured (after the first render), so the mount-time clamp
315
+ // can land short and needs to re-run when the real value arrives. But once the requested
316
+ // startIndex has been satisfied the effect must go inert, or every resize that shifts
317
+ // maxIndex would yank the shopper back to startIndex mid-navigation.
318
+ const appliedStartIndexRef = (0, hooks_1.useRef)(undefined);
319
+ (0, hooks_1.useEffect)(() => {
320
+ const target = Math.max(0, startIndex ?? 0);
321
+ if (appliedStartIndexRef.current === target)
322
+ return;
323
+ setCurrentIndex(Math.min(target, maxIndex));
324
+ if (target <= maxIndex) {
325
+ appliedStartIndexRef.current = target;
326
+ }
327
+ }, [startIndex, maxIndex]);
303
328
  // Calculate slide groups for pagination
304
329
  const slideGroups = [];
305
330
  for (let i = 0; i <= maxIndex; i += slidesToMove) {
@@ -345,6 +370,7 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
345
370
  const handleDragStart = (clientX) => {
346
371
  if (!touchDragging)
347
372
  return;
373
+ hasDraggedRef.current = false;
348
374
  setIsPlaying(false);
349
375
  setIsDragging(true);
350
376
  setStartX(clientX);
@@ -359,6 +385,11 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
359
385
  return;
360
386
  setCurrentX(clientX);
361
387
  const diff = clientX - startX;
388
+ // Past a few pixels of travel this is a drag, not a click — flag it so the trailing
389
+ // click (fired after mouseup/touchend) doesn't trigger slide onClick handlers.
390
+ if (Math.abs(diff) > DRAG_CLICK_THRESHOLD) {
391
+ hasDraggedRef.current = true;
392
+ }
362
393
  setDragOffset(diff);
363
394
  };
364
395
  const handleDragEnd = () => {
@@ -440,7 +471,7 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
440
471
  };
441
472
  // Handle image click
442
473
  const handleSlideClick = (slide, index) => {
443
- if (slide.onClick && !isDragging) {
474
+ if (slide.onClick && !isDragging && !hasDraggedRef.current) {
444
475
  slide.onClick(slide, index);
445
476
  }
446
477
  };
@@ -448,7 +479,9 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
448
479
  const handleSlideKeyDown = (event, slide, index) => {
449
480
  if (event.key === 'Enter' || event.key === ' ') {
450
481
  event.preventDefault();
451
- handleSlideClick(slide, index);
482
+ if (slide.onClick && !isDragging) {
483
+ slide.onClick(slide, index);
484
+ }
452
485
  }
453
486
  };
454
487
  // Keyboard navigation
@@ -582,7 +615,7 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
582
615
  }), style: { transform: `translateX(${translateX}${translateUnit})` }, role: "group", "aria-label": `Slide group ${currentIndex} of ${totalDots}`,
583
616
  // Touch events
584
617
  // @ts-ignore - touch events
585
- onTouchStart: touchDragging ? (event) => handleDragStart(event.touches[0]) : undefined,
618
+ onTouchStart: touchDragging ? (event) => handleDragStart(event.touches[0].clientX) : undefined,
586
619
  // @ts-ignore - touch events
587
620
  onTouchMove: touchDragging
588
621
  ? (event) => {
@@ -122,7 +122,7 @@ exports.Swatches = (0, mobx_react_lite_1.observer)((properties) => {
122
122
  // default props
123
123
  internalClassName: 'ss__swatches__slideshow',
124
124
  loop: false,
125
- slidesToShow: 6, // Add explicit slidesToShow
125
+ slideWidth: 20, // Fixed swatch size so previews stay a consistent, legible size regardless of container width
126
126
  slidesToMove: 1, // Add explicit slidesToMove
127
127
  gap: 8, // Add smaller gap
128
128
  showNavigation: true, // Enable navigation
@@ -154,7 +154,13 @@ exports.VariantSelection = (0, mobx_react_lite_1.observer)((properties) => {
154
154
  'ss__variant-selection__option--selected': selected,
155
155
  'ss__variant-selection__option--disabled': val.disabled,
156
156
  'ss__variant-selection__option--unavailable': val.available === false,
157
- }), onClick: (e) => !val.disabled && onSelectHandler(e, val), ref: (e) => (0, hooks_1.useA11y)(e), "aria-selected": selected, "aria-disabled": val.disabled || val.available === false, children: val.label }));
157
+ }), onClick: (e) => {
158
+ if (!val.disabled) {
159
+ onSelectHandler(e, val);
160
+ // close the dropdown on selection
161
+ toggleOpen?.(e, false);
162
+ }
163
+ }, ref: (e) => (0, hooks_1.useA11y)(e), "aria-selected": selected, "aria-disabled": val.disabled || val.available === false, children: val.label }));
158
164
  }) }));
159
165
  };
160
166
  return selection.values.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, className: (0, classnames_1.default)('ss__variant-selection', `ss__variant-selection--${type}`, `ss__variant-selection--${selection.field}`, className, internalClassName), children: (() => {
@@ -42,23 +42,23 @@ const defaultStyles = ({ controller, input, viewportMaxHeight, width, theme, col
42
42
  const noResults = Boolean(controller.store.search?.query?.string && controller.store.results.length === 0);
43
43
  return (0, react_1.css)({
44
44
  '.ss__autocomplete__column.ss__autocomplete__column--c1': {
45
- flex: column1?.width == 'auto' ? '1 1 auto' : `1 0 ${column1?.width}`,
46
- maxWidth: column1?.width == 'auto' ? 'auto' : column1?.width,
45
+ flex: column1?.width == 'auto' ? '1 1 0' : `1 0 ${column1?.width}`,
46
+ maxWidth: column1?.width == 'auto' ? 'none' : column1?.width,
47
47
  alignContent: column1?.alignContent,
48
48
  },
49
49
  '.ss__autocomplete__column.ss__autocomplete__column--c2': {
50
- flex: column2?.width == 'auto' ? '1 1 auto' : `1 0 ${column2?.width}`,
51
- maxWidth: column2?.width == 'auto' ? 'auto' : column2?.width,
50
+ flex: column2?.width == 'auto' ? '1 1 0' : `1 0 ${column2?.width}`,
51
+ maxWidth: column2?.width == 'auto' ? 'none' : column2?.width,
52
52
  alignContent: column2?.alignContent,
53
53
  },
54
54
  '.ss__autocomplete__column.ss__autocomplete__column--c3': {
55
- flex: column3?.width == 'auto' ? '1 1 auto' : `1 0 ${column3?.width}`,
56
- maxWidth: column3?.width == 'auto' ? 'auto' : column3?.width,
55
+ flex: column3?.width == 'auto' ? '1 1 0' : `1 0 ${column3?.width}`,
56
+ maxWidth: column3?.width == 'auto' ? 'none' : column3?.width,
57
57
  alignContent: column3?.alignContent,
58
58
  },
59
59
  '.ss__autocomplete__column.ss__autocomplete__column--c4': {
60
- flex: column4?.width == 'auto' ? '1 1 auto' : `1 0 ${column4?.width}`,
61
- maxWidth: column4?.width == 'auto' ? 'auto' : column4?.width,
60
+ flex: column4?.width == 'auto' ? '1 1 0' : `1 0 ${column4?.width}`,
61
+ maxWidth: column4?.width == 'auto' ? 'none' : column4?.width,
62
62
  alignContent: column4?.alignContent,
63
63
  },
64
64
  '.ss__autocomplete__column, .ss__autocomplete__row': {
@@ -478,11 +478,7 @@ const FacetContent = (props) => {
478
478
  // used by the submit button, the Enter key, and (optionally) blur, so it works even when the
479
479
  // submit button isn't rendered (e.g. when rangeInputsSubmitButtonText is an empty string).
480
480
  const submitRange = () => {
481
- if (facet?.services?.urlManager &&
482
- typeof low === 'number' &&
483
- Number.isFinite(low) &&
484
- typeof high === 'number' &&
485
- Number.isFinite(high)) {
481
+ if (facet?.services?.urlManager && typeof low === 'number' && Number.isFinite(low) && typeof high === 'number' && Number.isFinite(high)) {
486
482
  let currentLow = low;
487
483
  let currentHigh = high;
488
484
  //adjust ranges if high and low have swapped.