@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.
- package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +18 -10
- package/dist/cjs/components/src/components/Atoms/Image/Image.js +10 -2
- package/dist/cjs/components/src/components/Atoms/ProductDetail/ProductDetail.js +98 -0
- package/dist/cjs/components/src/components/Atoms/ProductDetail/index.js +7 -0
- package/dist/cjs/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +13 -4
- package/dist/cjs/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +4 -1
- package/dist/cjs/components/src/components/Molecules/Gallery/Gallery.js +298 -0
- package/dist/cjs/components/src/components/Molecules/Gallery/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/Modal/Modal.js +21 -2
- package/dist/cjs/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
- package/dist/cjs/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.js +115 -0
- package/dist/cjs/components/src/components/Molecules/ProductDetailTable/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/QuantityPicker/QuantityPicker.js +136 -0
- package/dist/cjs/components/src/components/Molecules/QuantityPicker/index.js +17 -0
- package/dist/cjs/components/src/components/Molecules/Result/Result.js +43 -4
- package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +5 -2
- package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +38 -5
- package/dist/cjs/components/src/components/Molecules/Swatches/Swatches.js +1 -1
- package/dist/cjs/components/src/components/Molecules/VariantSelection/VariantSelection.js +7 -1
- package/dist/cjs/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -8
- package/dist/cjs/components/src/components/Organisms/Facet/Facet.js +1 -5
- package/dist/cjs/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +612 -0
- package/dist/cjs/components/src/components/Organisms/QuickviewLayout/index.js +17 -0
- package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +3 -3
- package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +3 -3
- package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +2 -2
- package/dist/cjs/components/src/components/Templates/QuickviewModal/QuickviewModal.js +153 -0
- package/dist/cjs/components/src/components/Templates/QuickviewModal/index.js +17 -0
- package/dist/cjs/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.js +124 -0
- package/dist/cjs/components/src/components/Templates/QuickviewSlideout/index.js +17 -0
- package/dist/cjs/components/src/components/Templates/Recommendation/Recommendation.js +2 -1
- package/dist/cjs/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js +2 -1
- package/dist/cjs/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js +2 -1
- package/dist/cjs/components/src/hooks/useA11y.js +3 -1
- package/dist/cjs/components/src/hooks/useAcRenderedInput.js +1 -1
- package/dist/cjs/components/src/hooks/useClickOutside.js +6 -3
- package/dist/cjs/components/src/hooks/useTracking.js +14 -8
- package/dist/cjs/components/src/index.js +6 -0
- package/dist/cjs/components/src/providers/themeComponents.js +4 -0
- package/dist/cjs/components/src/setupTests.js +10 -0
- package/dist/cjs/components/src/utilities/createImpressionObserver.js +1 -1
- package/dist/cjs/components/src/utilities/index.js +1 -0
- package/dist/cjs/components/src/utilities/lazyRenderMinSize.js +10 -0
- package/dist/cjs/src/Instantiators/RecommendationInstantiator.js +2 -1
- package/dist/cjs/src/Snap.js +41 -0
- package/dist/cjs/src/Templates/SnapTemplates.js +51 -0
- package/dist/cjs/src/Templates/Stores/LibraryStore.js +77 -9
- package/dist/cjs/src/Templates/Stores/TemplateEditor/TemplateEditorStore.js +6 -1
- package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.js +2 -5
- package/dist/cjs/src/Templates/Stores/TemplateStore.js +26 -10
- package/dist/cjs/src/Templates/Stores/library/components/QuickviewModal.js +5 -0
- package/dist/cjs/src/Templates/Stores/library/components/QuickviewSlideout.js +5 -0
- package/dist/cjs/src/Templates/Stores/library/currencies/currencies.js +1433 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ar.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/de.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/en.js +1 -0
- package/dist/cjs/src/Templates/Stores/library/languages/es.js +84 -41
- package/dist/cjs/src/Templates/Stores/library/languages/fr.js +85 -40
- package/dist/cjs/src/Templates/Stores/library/languages/hi.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/it.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ja.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ko.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/nl.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/pt.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/ru.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/tr.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/vi.js +487 -0
- package/dist/cjs/src/Templates/Stores/library/languages/zh.js +487 -0
- package/dist/cjs/src/Templates/index.js +3 -1
- package/dist/cjs/src/create/createAutocompleteController.js +1 -0
- package/dist/cjs/src/create/createRecommendationController.js +1 -0
- package/dist/cjs/src/create/createSearchController.js +1 -0
- package/dist/cjs/src/index.js +3 -1
- package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +1 -1
- package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +19 -11
- package/dist/esm/components/src/components/Atoms/Image/Image.d.ts +5 -0
- package/dist/esm/components/src/components/Atoms/Image/Image.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/Image/Image.js +10 -2
- package/dist/esm/components/src/components/Atoms/ProductDetail/ProductDetail.d.ts +18 -0
- package/dist/esm/components/src/components/Atoms/ProductDetail/ProductDetail.d.ts.map +1 -0
- package/dist/esm/components/src/components/Atoms/ProductDetail/ProductDetail.js +89 -0
- package/dist/esm/components/src/components/Atoms/ProductDetail/index.d.ts +3 -0
- package/dist/esm/components/src/components/Atoms/ProductDetail/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Atoms/ProductDetail/index.js +3 -0
- package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts +1 -1
- package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts.map +1 -1
- package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +13 -4
- package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +4 -1
- package/dist/esm/components/src/components/Molecules/Gallery/Gallery.d.ts +28 -0
- package/dist/esm/components/src/components/Molecules/Gallery/Gallery.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/Gallery/Gallery.js +292 -0
- package/dist/esm/components/src/components/Molecules/Gallery/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/Gallery/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/Gallery/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Modal/Modal.js +22 -3
- package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
- package/dist/esm/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.d.ts +14 -0
- package/dist/esm/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ProductDetailTable/ProductDetailTable.js +109 -0
- package/dist/esm/components/src/components/Molecules/ProductDetailTable/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/ProductDetailTable/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/ProductDetailTable/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/QuantityPicker/QuantityPicker.d.ts +43 -0
- package/dist/esm/components/src/components/Molecules/QuantityPicker/QuantityPicker.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/QuantityPicker/QuantityPicker.js +130 -0
- package/dist/esm/components/src/components/Molecules/QuantityPicker/index.d.ts +2 -0
- package/dist/esm/components/src/components/Molecules/QuantityPicker/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Molecules/QuantityPicker/index.js +1 -0
- package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +3 -0
- package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Result/Result.js +43 -4
- package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +6 -3
- package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts +1 -0
- package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +38 -5
- package/dist/esm/components/src/components/Molecules/Swatches/Swatches.js +1 -1
- package/dist/esm/components/src/components/Molecules/VariantSelection/VariantSelection.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/VariantSelection/VariantSelection.js +7 -1
- package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -8
- package/dist/esm/components/src/components/Organisms/Facet/Facet.d.ts.map +1 -1
- package/dist/esm/components/src/components/Organisms/Facet/Facet.js +1 -5
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts +53 -0
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +605 -0
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/index.d.ts +2 -0
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Organisms/QuickviewLayout/index.js +1 -0
- package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +3 -3
- package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +3 -3
- package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +2 -2
- package/dist/esm/components/src/components/Templates/QuickviewModal/QuickviewModal.d.ts +12 -0
- package/dist/esm/components/src/components/Templates/QuickviewModal/QuickviewModal.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/QuickviewModal/QuickviewModal.js +147 -0
- package/dist/esm/components/src/components/Templates/QuickviewModal/index.d.ts +2 -0
- package/dist/esm/components/src/components/Templates/QuickviewModal/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/QuickviewModal/index.js +1 -0
- package/dist/esm/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.d.ts +16 -0
- package/dist/esm/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/QuickviewSlideout/QuickviewSlideout.js +118 -0
- package/dist/esm/components/src/components/Templates/QuickviewSlideout/index.d.ts +2 -0
- package/dist/esm/components/src/components/Templates/QuickviewSlideout/index.d.ts.map +1 -0
- package/dist/esm/components/src/components/Templates/QuickviewSlideout/index.js +1 -0
- package/dist/esm/components/src/components/Templates/Recommendation/Recommendation.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/Recommendation/Recommendation.js +3 -2
- package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js +3 -2
- package/dist/esm/components/src/components/Templates/RecommendationGrid/RecommendationGrid.d.ts.map +1 -1
- package/dist/esm/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js +3 -2
- package/dist/esm/components/src/hooks/useA11y.d.ts.map +1 -1
- package/dist/esm/components/src/hooks/useA11y.js +3 -1
- package/dist/esm/components/src/hooks/useAcRenderedInput.js +1 -1
- package/dist/esm/components/src/hooks/useClickOutside.d.ts +1 -1
- package/dist/esm/components/src/hooks/useClickOutside.d.ts.map +1 -1
- package/dist/esm/components/src/hooks/useClickOutside.js +6 -3
- package/dist/esm/components/src/hooks/useTracking.d.ts +9 -3
- package/dist/esm/components/src/hooks/useTracking.d.ts.map +1 -1
- package/dist/esm/components/src/hooks/useTracking.js +14 -8
- package/dist/esm/components/src/index.d.ts +6 -0
- package/dist/esm/components/src/index.d.ts.map +1 -1
- package/dist/esm/components/src/index.js +6 -0
- package/dist/esm/components/src/providers/langComponents.d.ts +6 -0
- package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
- package/dist/esm/components/src/providers/themeComponents.d.ts +104 -57
- package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
- package/dist/esm/components/src/providers/themeComponents.js +4 -0
- package/dist/esm/components/src/setupTests.js +10 -0
- package/dist/esm/components/src/utilities/createImpressionObserver.js +1 -1
- package/dist/esm/components/src/utilities/index.d.ts +1 -0
- package/dist/esm/components/src/utilities/index.d.ts.map +1 -1
- package/dist/esm/components/src/utilities/index.js +1 -0
- package/dist/esm/components/src/utilities/lazyRenderMinSize.d.ts +5 -0
- package/dist/esm/components/src/utilities/lazyRenderMinSize.d.ts.map +1 -0
- package/dist/esm/components/src/utilities/lazyRenderMinSize.js +7 -0
- package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts +4 -2
- package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
- package/dist/esm/src/Instantiators/RecommendationInstantiator.js +2 -1
- package/dist/esm/src/Snap.d.ts +7 -0
- package/dist/esm/src/Snap.d.ts.map +1 -1
- package/dist/esm/src/Snap.js +43 -2
- package/dist/esm/src/Templates/SnapTemplates.d.ts +25 -0
- package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
- package/dist/esm/src/Templates/SnapTemplates.js +48 -0
- package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +22 -2
- package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/LibraryStore.js +76 -8
- package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.js +6 -1
- package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.js +2 -5
- package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +14 -6
- package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/TemplateStore.js +26 -10
- package/dist/esm/src/Templates/Stores/library/components/QuickviewModal.d.ts +2 -0
- package/dist/esm/src/Templates/Stores/library/components/QuickviewModal.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/components/QuickviewModal.js +1 -0
- package/dist/esm/src/Templates/Stores/library/components/QuickviewSlideout.d.ts +2 -0
- package/dist/esm/src/Templates/Stores/library/components/QuickviewSlideout.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/components/QuickviewSlideout.js +1 -0
- package/dist/esm/src/Templates/Stores/library/currencies/currencies.d.ts +1270 -0
- package/dist/esm/src/Templates/Stores/library/currencies/currencies.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/currencies/currencies.js +1430 -0
- package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/ar.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/de.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/de.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/de.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/en.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/en.js +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/es.js +84 -41
- package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
- package/dist/esm/src/Templates/Stores/library/languages/fr.js +85 -40
- package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/hi.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/it.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/it.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/it.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/ja.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/ko.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/nl.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/pt.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/ru.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/tr.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/vi.js +484 -0
- package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts +3 -0
- package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts.map +1 -0
- package/dist/esm/src/Templates/Stores/library/languages/zh.js +484 -0
- package/dist/esm/src/Templates/index.d.ts +1 -1
- package/dist/esm/src/Templates/index.d.ts.map +1 -1
- package/dist/esm/src/Templates/index.js +1 -1
- package/dist/esm/src/create/createAutocompleteController.js +1 -0
- package/dist/esm/src/create/createRecommendationController.js +1 -0
- package/dist/esm/src/create/createSearchController.js +1 -0
- package/dist/esm/src/index.d.ts +1 -1
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +1 -1
- package/dist/esm/src/types.d.ts +2 -1
- package/dist/esm/src/types.d.ts.map +1 -1
- package/eslint/src/index.cjs +5 -0
- package/eslint/src/validate-config.cjs +473 -0
- package/package.json +16 -14
- package/dist/cjs/src/Templates/Stores/library/currencies/aud.js +0 -10
- package/dist/cjs/src/Templates/Stores/library/currencies/eur.js +0 -10
- package/dist/cjs/src/Templates/Stores/library/currencies/usd.js +0 -10
- package/dist/esm/src/Templates/Stores/library/currencies/aud.d.ts +0 -8
- package/dist/esm/src/Templates/Stores/library/currencies/aud.d.ts.map +0 -1
- package/dist/esm/src/Templates/Stores/library/currencies/aud.js +0 -7
- package/dist/esm/src/Templates/Stores/library/currencies/eur.d.ts +0 -8
- package/dist/esm/src/Templates/Stores/library/currencies/eur.d.ts.map +0 -1
- package/dist/esm/src/Templates/Stores/library/currencies/eur.js +0 -7
- package/dist/esm/src/Templates/Stores/library/currencies/usd.d.ts +0 -8
- package/dist/esm/src/Templates/Stores/library/currencies/usd.d.ts.map +0 -1
- package/dist/esm/src/Templates/Stores/library/currencies/usd.js +0 -7
|
@@ -132,7 +132,7 @@ exports.AutocompleteModal = (0, mobx_react_lite_1.observer)((properties) => {
|
|
|
132
132
|
},
|
|
133
133
|
modal: {
|
|
134
134
|
// default props
|
|
135
|
-
internalClassName: '
|
|
135
|
+
internalClassName: 'ss__autocomplete-modal__modal',
|
|
136
136
|
buttonSelector: buttonSelector,
|
|
137
137
|
onOverlayClick: reset,
|
|
138
138
|
overlayColor: overlayColor,
|
|
@@ -147,8 +147,8 @@ exports.AutocompleteModal = (0, mobx_react_lite_1.observer)((properties) => {
|
|
|
147
147
|
},
|
|
148
148
|
searchInput: {
|
|
149
149
|
// default props
|
|
150
|
-
//
|
|
151
|
-
internalClassName: '
|
|
150
|
+
// ss__autocomplete__search-input is required for useAcRenderedInput hook.
|
|
151
|
+
internalClassName: 'ss__autocomplete-modal__search-input ss__autocomplete__search-input',
|
|
152
152
|
submitSearchButton: {
|
|
153
153
|
onClick: () => {
|
|
154
154
|
() => reset();
|
package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js
CHANGED
|
@@ -97,8 +97,8 @@ exports.AutocompleteSlideout = (0, mobx_react_lite_1.observer)((properties) => {
|
|
|
97
97
|
},
|
|
98
98
|
searchInput: {
|
|
99
99
|
// default props
|
|
100
|
-
//
|
|
101
|
-
internalClassName: '
|
|
100
|
+
// ss__autocomplete__search-input is required for useAcRenderedInput hook.
|
|
101
|
+
internalClassName: 'ss__autocomplete-slideout__search-input ss__autocomplete__search-input',
|
|
102
102
|
inputName: inputName,
|
|
103
103
|
submitSearchButton: {
|
|
104
104
|
onClick: () => {
|
|
@@ -0,0 +1,153 @@
|
|
|
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.QuickviewModal = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
8
|
+
const hooks_1 = require("preact/hooks");
|
|
9
|
+
const mobx_react_lite_1 = require("mobx-react-lite");
|
|
10
|
+
const react_1 = require("@emotion/react");
|
|
11
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
12
|
+
const providers_1 = require("../../../providers");
|
|
13
|
+
const utilities_1 = require("../../../utilities");
|
|
14
|
+
const Modal_1 = require("../../Molecules/Modal");
|
|
15
|
+
const QuickviewLayout_1 = require("../../Organisms/QuickviewLayout");
|
|
16
|
+
const defaultStyles = () => {
|
|
17
|
+
return (0, react_1.css)({
|
|
18
|
+
// Take the wrapper out of normal flow. The modal is injected into its own container at the
|
|
19
|
+
// end of `<body>`, but a consumer may still render it inside a grid (e.g. as a sibling of a
|
|
20
|
+
// result `<article>`), where in-flow it would occupy a cell and shift the layout when opened.
|
|
21
|
+
// The modal's content and overlay are both `position: fixed`, so an absolute, zero-size
|
|
22
|
+
// wrapper has no visual effect while keeping it out of any grid.
|
|
23
|
+
position: 'absolute',
|
|
24
|
+
width: 0,
|
|
25
|
+
height: 0,
|
|
26
|
+
// Override the underlying Modal's `.ss__modal__content` positioning so the quickview
|
|
27
|
+
// is centered in the viewport rather than positioned relative to the source Result tile.
|
|
28
|
+
// Modal's default is `position: absolute` inside its (relative) wrapper, which lives
|
|
29
|
+
// inside the Results grid cell — that's why the modal was being clipped to a tile.
|
|
30
|
+
// We compound the wrapper class (`&.ss__quickview-modal`) into the selector to beat
|
|
31
|
+
// Modal's same-specificity rule (which would otherwise win on source-order since
|
|
32
|
+
// Modal's styles are emitted after ours), and use !important on the positioning
|
|
33
|
+
// properties so theme overrides can't accidentally re-anchor the modal to its tile.
|
|
34
|
+
'&.ss__quickview-modal .ss__modal__content': {
|
|
35
|
+
position: 'fixed !important',
|
|
36
|
+
top: '50% !important',
|
|
37
|
+
left: '50% !important',
|
|
38
|
+
transform: 'translate(-50%, -50%) !important',
|
|
39
|
+
minWidth: 'auto',
|
|
40
|
+
maxWidth: '90vw',
|
|
41
|
+
maxHeight: '90vh',
|
|
42
|
+
width: 'auto',
|
|
43
|
+
overflow: 'auto',
|
|
44
|
+
zIndex: 10006,
|
|
45
|
+
boxShadow: '0 4px 24px rgba(0, 0, 0, 0.2)',
|
|
46
|
+
borderRadius: '4px',
|
|
47
|
+
},
|
|
48
|
+
// Lower the Modal's Overlay backdrop too so it stays below both the modal content
|
|
49
|
+
// (10006) and the dropdown portal (10007) but above page content and autocomplete.
|
|
50
|
+
'&.ss__quickview-modal .ss__modal__overlay': {
|
|
51
|
+
zIndex: '10005 !important',
|
|
52
|
+
},
|
|
53
|
+
// Below the desktop breakpoint (where QuickviewLayout stacks to a single column) the
|
|
54
|
+
// modal spans the full viewport width instead of shrink-wrapping its content. The
|
|
55
|
+
// wrapper class is compounded into the content selector so this beats QuickviewLayout's
|
|
56
|
+
// same-specificity min/max width rule on the content div.
|
|
57
|
+
'@media (max-width: 767px)': {
|
|
58
|
+
'&.ss__quickview-modal .ss__modal__content': {
|
|
59
|
+
width: '100vw',
|
|
60
|
+
maxWidth: '100vw',
|
|
61
|
+
borderRadius: 0,
|
|
62
|
+
},
|
|
63
|
+
'&.ss__quickview-modal .ss__quickview__content': {
|
|
64
|
+
minWidth: 'auto',
|
|
65
|
+
maxWidth: '100%',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
exports.QuickviewModal = (0, mobx_react_lite_1.observer)((properties) => {
|
|
71
|
+
const globalTheme = (0, providers_1.useTheme)();
|
|
72
|
+
const globalTreePath = (0, providers_1.useTreePath)();
|
|
73
|
+
const defaultProps = {
|
|
74
|
+
treePath: globalTreePath,
|
|
75
|
+
hideBadge: false,
|
|
76
|
+
layout: [['c1', 'c2']],
|
|
77
|
+
column1: {
|
|
78
|
+
layout: ['slideshow'],
|
|
79
|
+
width: '45%',
|
|
80
|
+
},
|
|
81
|
+
column2: {
|
|
82
|
+
layout: [
|
|
83
|
+
['productDetail.mappings.core.name'],
|
|
84
|
+
['calloutBadge'],
|
|
85
|
+
['variantSelections'],
|
|
86
|
+
['quantityPicker'],
|
|
87
|
+
['button.add-to-cart'],
|
|
88
|
+
['productDetail.mappings.core.description'],
|
|
89
|
+
['productDetailTable'],
|
|
90
|
+
['button.more-info'],
|
|
91
|
+
],
|
|
92
|
+
width: 'auto',
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
const props = (0, utilities_1.mergeProps)('quickviewModal', globalTheme, defaultProps, properties);
|
|
96
|
+
const { quickviewManager, className, internalClassName, disableStyles, treePath, layout, hideBadge, column1, column2, column3, column4, recommendation, lang, } = props;
|
|
97
|
+
// Dialog focus management: remember what had focus before the modal opened, move focus to
|
|
98
|
+
// the close button on open, and restore on close. This lives in the container (not the
|
|
99
|
+
// layout) because the layout unmounts when the Modal closes — only the always-mounted
|
|
100
|
+
// container can run the restore-focus branch on the open→close transition.
|
|
101
|
+
const wrapperRef = (0, hooks_1.useRef)(null);
|
|
102
|
+
const previousFocusRef = (0, hooks_1.useRef)(null);
|
|
103
|
+
const wasOpenRef = (0, hooks_1.useRef)(false);
|
|
104
|
+
(0, hooks_1.useEffect)(() => {
|
|
105
|
+
const isOpenNow = Boolean(quickviewManager?.store?.isOpen);
|
|
106
|
+
if (isOpenNow && !wasOpenRef.current) {
|
|
107
|
+
previousFocusRef.current = document.activeElement || null;
|
|
108
|
+
const closeEl = wrapperRef.current?.querySelector('.ss__quickview__close');
|
|
109
|
+
closeEl?.focus();
|
|
110
|
+
}
|
|
111
|
+
else if (!isOpenNow && wasOpenRef.current) {
|
|
112
|
+
previousFocusRef.current?.focus?.();
|
|
113
|
+
previousFocusRef.current = null;
|
|
114
|
+
}
|
|
115
|
+
wasOpenRef.current = isOpenNow;
|
|
116
|
+
});
|
|
117
|
+
const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
|
|
118
|
+
if (!quickviewManager) {
|
|
119
|
+
console.warn(`[QuickviewModal] No quickviewManager provided; quickview cannot function without a QuickviewManager instance.`);
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const store = quickviewManager.store;
|
|
123
|
+
const product = store.product;
|
|
124
|
+
const isOpen = Boolean(store.isOpen);
|
|
125
|
+
const onClose = () => quickviewManager.close();
|
|
126
|
+
const subProps = {
|
|
127
|
+
quickviewLayout: {
|
|
128
|
+
// default props
|
|
129
|
+
onClose,
|
|
130
|
+
...(0, utilities_1.defined)({ hideBadge, column1, column2, column3, column4, recommendation, lang }),
|
|
131
|
+
// inherited props
|
|
132
|
+
...(0, utilities_1.defined)({
|
|
133
|
+
disableStyles,
|
|
134
|
+
}),
|
|
135
|
+
// component theme overrides
|
|
136
|
+
theme: props?.theme,
|
|
137
|
+
treePath,
|
|
138
|
+
},
|
|
139
|
+
modal: {
|
|
140
|
+
onOverlayClick: onClose,
|
|
141
|
+
// inherited props
|
|
142
|
+
...(0, utilities_1.defined)({
|
|
143
|
+
disableStyles,
|
|
144
|
+
}),
|
|
145
|
+
// component theme overrides
|
|
146
|
+
theme: props?.theme,
|
|
147
|
+
treePath,
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
// non-null: defaultProps always supplies a layout
|
|
151
|
+
const layoutContent = (0, jsx_runtime_1.jsx)(QuickviewLayout_1.QuickviewLayout, { quickviewManager: quickviewManager, ...subProps.quickviewLayout, layout: layout });
|
|
152
|
+
return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, ref: wrapperRef, className: (0, classnames_1.default)('ss__quickview-modal', className, internalClassName), onClick: (e) => e.stopPropagation(), children: (0, jsx_runtime_1.jsx)(Modal_1.Modal, { ...subProps.modal, open: isOpen, children: product ? ((0, jsx_runtime_1.jsx)(QuickviewLayout_1.QuickviewTracker, { quickviewManager: quickviewManager, product: product, children: layoutContent }, `${product.responseId}-${product.id}`)) : (layoutContent) }) }) }));
|
|
153
|
+
});
|
|
@@ -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("./QuickviewModal"), exports);
|
|
@@ -0,0 +1,124 @@
|
|
|
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.QuickviewSlideout = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
8
|
+
const hooks_1 = require("preact/hooks");
|
|
9
|
+
const mobx_react_lite_1 = require("mobx-react-lite");
|
|
10
|
+
const react_1 = require("@emotion/react");
|
|
11
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
12
|
+
const providers_1 = require("../../../providers");
|
|
13
|
+
const utilities_1 = require("../../../utilities");
|
|
14
|
+
const Slideout_1 = require("../../Molecules/Slideout");
|
|
15
|
+
const QuickviewLayout_1 = require("../../Organisms/QuickviewLayout");
|
|
16
|
+
const defaultStyles = () => {
|
|
17
|
+
return (0, react_1.css)({
|
|
18
|
+
// The wrapper sits out of flow; the Slideout itself is `position: fixed`. Keep its panel
|
|
19
|
+
// and overlay above autocomplete (10002) like the Modal variant does.
|
|
20
|
+
'& .ss__slideout': {
|
|
21
|
+
zIndex: 10006,
|
|
22
|
+
},
|
|
23
|
+
'& .ss__slideout__overlay': {
|
|
24
|
+
zIndex: '10005 !important',
|
|
25
|
+
},
|
|
26
|
+
// Inside a single-column panel the content shouldn't be width-capped to the desktop modal size.
|
|
27
|
+
'& .ss__quickview__content': {
|
|
28
|
+
minWidth: 'auto',
|
|
29
|
+
maxWidth: '100%',
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
exports.QuickviewSlideout = (0, mobx_react_lite_1.observer)((properties) => {
|
|
34
|
+
const globalTheme = (0, providers_1.useTheme)();
|
|
35
|
+
const globalTreePath = (0, providers_1.useTreePath)();
|
|
36
|
+
const defaultProps = {
|
|
37
|
+
treePath: globalTreePath,
|
|
38
|
+
slideDirection: 'right',
|
|
39
|
+
width: '500px',
|
|
40
|
+
overlayColor: 'rgba(0,0,0,0.8)',
|
|
41
|
+
hideBadge: false,
|
|
42
|
+
layout: [
|
|
43
|
+
['slideshow'],
|
|
44
|
+
['productDetail.mappings.core.name'],
|
|
45
|
+
['calloutBadge'],
|
|
46
|
+
['variantSelections'],
|
|
47
|
+
['quantityPicker'],
|
|
48
|
+
['button.add-to-cart'],
|
|
49
|
+
['productDetail.mappings.core.description'],
|
|
50
|
+
['productDetailTable'],
|
|
51
|
+
['button.more-info'],
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
const props = (0, utilities_1.mergeProps)('quickviewSlideout', globalTheme, defaultProps, properties);
|
|
55
|
+
const { quickviewManager, className, internalClassName, disableStyles, treePath, layout, hideBadge, column1, column2, column3, column4, recommendation, slideDirection, width, overlayColor, lang, } = props;
|
|
56
|
+
// painted state used to ensure transition works with dynamic loading
|
|
57
|
+
const [painted, setPainted] = (0, hooks_1.useState)(false);
|
|
58
|
+
(0, hooks_1.useEffect)(() => {
|
|
59
|
+
setPainted(true);
|
|
60
|
+
}, []);
|
|
61
|
+
// Dialog focus management — see QuickviewModal for the rationale (effect lives in the
|
|
62
|
+
// always-mounted container so the restore-focus branch survives the open→close transition).
|
|
63
|
+
const wrapperRef = (0, hooks_1.useRef)(null);
|
|
64
|
+
const previousFocusRef = (0, hooks_1.useRef)(null);
|
|
65
|
+
const wasOpenRef = (0, hooks_1.useRef)(false);
|
|
66
|
+
(0, hooks_1.useEffect)(() => {
|
|
67
|
+
const isOpenNow = Boolean(quickviewManager?.store?.isOpen) && painted;
|
|
68
|
+
if (isOpenNow && !wasOpenRef.current) {
|
|
69
|
+
previousFocusRef.current = document.activeElement || null;
|
|
70
|
+
const closeEl = wrapperRef.current?.querySelector('.ss__quickview__close');
|
|
71
|
+
closeEl?.focus();
|
|
72
|
+
}
|
|
73
|
+
else if (!isOpenNow && wasOpenRef.current) {
|
|
74
|
+
previousFocusRef.current?.focus?.();
|
|
75
|
+
previousFocusRef.current = null;
|
|
76
|
+
}
|
|
77
|
+
wasOpenRef.current = isOpenNow;
|
|
78
|
+
});
|
|
79
|
+
const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
|
|
80
|
+
if (!quickviewManager) {
|
|
81
|
+
console.warn(`[QuickviewSlideout] No quickviewManager provided; quickview cannot function without a QuickviewManager instance.`);
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const store = quickviewManager.store;
|
|
85
|
+
const product = store.product;
|
|
86
|
+
const isOpen = Boolean(store.isOpen) && painted;
|
|
87
|
+
const onClose = () => quickviewManager.close();
|
|
88
|
+
const subProps = {
|
|
89
|
+
quickviewLayout: {
|
|
90
|
+
// default props
|
|
91
|
+
onClose,
|
|
92
|
+
...(0, utilities_1.defined)({ hideBadge, column1, column2, column3, column4, recommendation, lang }),
|
|
93
|
+
// inherited props
|
|
94
|
+
...(0, utilities_1.defined)({
|
|
95
|
+
disableStyles,
|
|
96
|
+
}),
|
|
97
|
+
// component theme overrides
|
|
98
|
+
theme: props?.theme,
|
|
99
|
+
treePath,
|
|
100
|
+
},
|
|
101
|
+
slideout: {
|
|
102
|
+
// default props
|
|
103
|
+
rerender: false,
|
|
104
|
+
slideDirection: slideDirection,
|
|
105
|
+
width: width,
|
|
106
|
+
overlayColor: overlayColor,
|
|
107
|
+
// Sync an overlay dismiss back to the store so `store.isOpen` stays the single source of truth.
|
|
108
|
+
onChange: (active) => {
|
|
109
|
+
if (!active)
|
|
110
|
+
onClose();
|
|
111
|
+
},
|
|
112
|
+
// inherited props
|
|
113
|
+
...(0, utilities_1.defined)({
|
|
114
|
+
disableStyles,
|
|
115
|
+
}),
|
|
116
|
+
// component theme overrides
|
|
117
|
+
theme: props?.theme,
|
|
118
|
+
treePath,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
// non-null: defaultProps always supplies a layout
|
|
122
|
+
const layoutContent = (0, jsx_runtime_1.jsx)(QuickviewLayout_1.QuickviewLayout, { quickviewManager: quickviewManager, ...subProps.quickviewLayout, layout: layout });
|
|
123
|
+
return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, ref: wrapperRef, className: (0, classnames_1.default)('ss__quickview-slideout', className, internalClassName), onClick: (e) => e.stopPropagation(), children: (0, jsx_runtime_1.jsx)(Slideout_1.Slideout, { ...subProps.slideout, active: isOpen, children: product ? ((0, jsx_runtime_1.jsx)(QuickviewLayout_1.QuickviewTracker, { quickviewManager: quickviewManager, product: product, children: layoutContent }, `${product.responseId}-${product.id}`)) : (layoutContent) }) }) }));
|
|
124
|
+
});
|
|
@@ -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("./QuickviewSlideout"), exports);
|
|
@@ -21,6 +21,7 @@ const hooks_3 = require("../../../hooks");
|
|
|
21
21
|
const ResultTracker_1 = require("../../Trackers/ResultTracker");
|
|
22
22
|
const defaultStyles = ({ vertical }) => {
|
|
23
23
|
return (0, react_1.css)({
|
|
24
|
+
...utilities_1.lazyRenderMinSize,
|
|
24
25
|
height: vertical ? '100%' : undefined,
|
|
25
26
|
'.ss__result__image-wrapper': {
|
|
26
27
|
height: vertical ? '85%' : undefined,
|
|
@@ -121,7 +122,7 @@ exports.Recommendation = (0, mobx_react_lite_1.observer)((properties) => {
|
|
|
121
122
|
//deep merge with props.lang
|
|
122
123
|
const lang = (0, deepmerge_1.default)(defaultLang, props.lang || {});
|
|
123
124
|
const mergedLang = (0, hooks_3.useLang)(lang, {}, { activeBreakpoint: globalTheme?.activeBreakpoint });
|
|
124
|
-
return (Array.isArray(children) && children.length) || resultsToRender?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, className: (0, classnames_1.default)('ss__recommendation', className, internalClassName), ref: recsRef, children: isVisible ? ((0, jsx_runtime_1.jsxs)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller, children: [title && !hideTitle && ((0, jsx_runtime_1.jsx)("h3", { className: "ss__recommendation__title", ...mergedLang.titleText?.all, children: title })), description && (0, jsx_runtime_1.jsx)("p", { className: "ss__recommendation__description", children: description }), (0, jsx_runtime_1.jsx)(Carousel_1.Carousel, { prevButton: prevButton, nextButton: nextButton, hideButtons: hideButtons, loop: loop, pagination: pagination, ...subProps.carousel, ...additionalProps, children: Array.isArray(children) && children.length
|
|
125
|
+
return (Array.isArray(children) && children.length) || resultsToRender?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, style: disableStyles ? utilities_1.lazyRenderMinSize : undefined, className: (0, classnames_1.default)('ss__recommendation', className, internalClassName), ref: recsRef, children: isVisible ? ((0, jsx_runtime_1.jsxs)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller, children: [title && !hideTitle && ((0, jsx_runtime_1.jsx)("h3", { className: "ss__recommendation__title", ...mergedLang.titleText?.all, children: title })), description && (0, jsx_runtime_1.jsx)("p", { className: "ss__recommendation__description", children: description }), (0, jsx_runtime_1.jsx)(Carousel_1.Carousel, { prevButton: prevButton, nextButton: nextButton, hideButtons: hideButtons, loop: loop, pagination: pagination, ...subProps.carousel, ...additionalProps, children: Array.isArray(children) && children.length
|
|
125
126
|
? children.map((child, idx) => ((0, jsx_runtime_1.jsx)(ResultTracker_1.ResultTracker, { controller: controller, result: resultsToRender[idx], children: child })))
|
|
126
127
|
: resultsToRender.map((result) => ((0, jsx_runtime_1.jsx)(ResultTracker_1.ResultTracker, { controller: controller, result: result, children: (() => {
|
|
127
128
|
if (resolvedResultComponent && controller) {
|
package/dist/cjs/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js
CHANGED
|
@@ -28,6 +28,7 @@ const defaultStyles = ({ vertical, separatorIcon, carousel, ctaInline, hasSeed,
|
|
|
28
28
|
}
|
|
29
29
|
const slidesPerView = carousel?.slidesPerView;
|
|
30
30
|
return (0, react_1.css)({
|
|
31
|
+
...utilities_1.lazyRenderMinSize,
|
|
31
32
|
[`.${classNamePrefix}__wrapper`]: {
|
|
32
33
|
display: 'flex',
|
|
33
34
|
maxWidth: '100%',
|
|
@@ -434,7 +435,7 @@ exports.RecommendationBundle = (0, mobx_react_lite_1.observer)((properties) => {
|
|
|
434
435
|
if (hideSeedText) {
|
|
435
436
|
delete lang.seedText.value;
|
|
436
437
|
}
|
|
437
|
-
return resultsToRender?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, ref: recsRef, className: (0, classnames_1.default)(classNamePrefix, { [`${classNamePrefix}--stacked`]: !ctaInline }, className, internalClassName), children: isVisible ? ((0, jsx_runtime_1.jsxs)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller, children: [title && ((0, jsx_runtime_1.jsx)("h3", { className: `${classNamePrefix}__title`, children: (0, jsx_runtime_1.jsx)("span", { children: title }) })), description && ((0, jsx_runtime_1.jsx)("p", { className: "ss__recommendation-bundle__description", children: (0, jsx_runtime_1.jsx)("span", { children: description }) })), (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(`${classNamePrefix}__wrapper`, {
|
|
438
|
+
return resultsToRender?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, style: disableStyles ? utilities_1.lazyRenderMinSize : undefined, ref: recsRef, className: (0, classnames_1.default)(classNamePrefix, { [`${classNamePrefix}--stacked`]: !ctaInline }, className, internalClassName), children: isVisible ? ((0, jsx_runtime_1.jsxs)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller, children: [title && ((0, jsx_runtime_1.jsx)("h3", { className: `${classNamePrefix}__title`, children: (0, jsx_runtime_1.jsx)("span", { children: title }) })), description && ((0, jsx_runtime_1.jsx)("p", { className: "ss__recommendation-bundle__description", children: (0, jsx_runtime_1.jsx)("span", { children: description }) })), (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(`${classNamePrefix}__wrapper`, {
|
|
438
439
|
[`${classNamePrefix}__wrapper--seed-in-carousel`]: seedInCarousel,
|
|
439
440
|
[`${classNamePrefix}__wrapper--vertical`]: vertical,
|
|
440
441
|
}), children: [carouselEnabled ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [!seedInCarousel && !hideSeed && seed && ((0, jsx_runtime_1.jsx)("div", { className: `${classNamePrefix}__wrapper__seed-container`, children: (0, jsx_runtime_1.jsx)(ResultTracker_1.ResultTracker, { controller: controller, result: seed, track: { impression: false }, children: (0, jsx_runtime_1.jsx)(BundleSelector_1.BundleSelector, { seedText: seedText, seed: true, title: seed.display.mappings.core?.name, onCheck: (e) => {
|
package/dist/cjs/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js
CHANGED
|
@@ -20,6 +20,7 @@ const hooks_1 = require("preact/hooks");
|
|
|
20
20
|
const hooks_2 = require("../../../hooks");
|
|
21
21
|
const defaultStyles = ({ gapSize, columns }) => {
|
|
22
22
|
return (0, react_1.css)({
|
|
23
|
+
...utilities_1.lazyRenderMinSize,
|
|
23
24
|
maxWidth: '100%',
|
|
24
25
|
maxHeight: '100%',
|
|
25
26
|
'.ss__recommendation-grid__results': {
|
|
@@ -114,7 +115,7 @@ exports.RecommendationGrid = (0, mobx_react_lite_1.observer)((properties) => {
|
|
|
114
115
|
if (inView) {
|
|
115
116
|
setIsVisible(true);
|
|
116
117
|
}
|
|
117
|
-
return results?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, ref: recsRef, className: (0, classnames_1.default)('ss__recommendation-grid', className, internalClassName), children: isVisible ? ((0, jsx_runtime_1.jsxs)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller, children: [title && (0, jsx_runtime_1.jsx)("h3", { className: "ss__recommendation-grid__title", children: title }), (0, jsx_runtime_1.jsx)("div", { className: "ss__recommendation-grid__results", children: results.map((result) => (() => {
|
|
118
|
+
return results?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", { ...styling, style: disableStyles ? utilities_1.lazyRenderMinSize : undefined, ref: recsRef, className: (0, classnames_1.default)('ss__recommendation-grid', className, internalClassName), children: isVisible ? ((0, jsx_runtime_1.jsxs)(ProfileTracker_1.RecommendationProfileTracker, { controller: controller, children: [title && (0, jsx_runtime_1.jsx)("h3", { className: "ss__recommendation-grid__title", children: title }), (0, jsx_runtime_1.jsx)("div", { className: "ss__recommendation-grid__results", children: results.map((result) => (() => {
|
|
118
119
|
if (resolvedResultComponent && controller) {
|
|
119
120
|
return (0, utilities_1.cloneWithProps)(resolvedResultComponent, {
|
|
120
121
|
controller,
|
|
@@ -21,7 +21,9 @@ function useA11y(elem, tabIndex, trapFocus, escCallback) {
|
|
|
21
21
|
//tab index 0 is default and used for actionable elements.
|
|
22
22
|
elem.setAttribute('tabIndex', `${tabIndex || 0}`);
|
|
23
23
|
elem.addEventListener('keydown', (event) => {
|
|
24
|
-
|
|
24
|
+
// only synthesize a click when the element itself is focused — a bubbled Enter/Space from
|
|
25
|
+
// an inner control must not click the container (e.g. Gallery's backdrop-close onClick)
|
|
26
|
+
if ((event.code === 'Space' || event.code === 'Enter') && event.target === elem) {
|
|
25
27
|
elem.click();
|
|
26
28
|
}
|
|
27
29
|
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useAcRenderedInput = useAcRenderedInput;
|
|
4
4
|
const hooks_1 = require("preact/hooks");
|
|
5
|
-
const RENDERED_INPUT_SELECTOR = '.
|
|
5
|
+
const RENDERED_INPUT_SELECTOR = '.ss__autocomplete__search-input input';
|
|
6
6
|
function useAcRenderedInput({ input, controllers, renderInput, buttonSelector, renderedInputRef, setActive, }) {
|
|
7
7
|
const [_input, setInput] = (0, hooks_1.useState)(input);
|
|
8
8
|
const [renderedInputInitialized, setRenderedInputInitialized] = (0, hooks_1.useState)(false);
|
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useClickOutside = useClickOutside;
|
|
4
4
|
const hooks_1 = require("preact/hooks");
|
|
5
|
-
function useClickOutside(callback) {
|
|
5
|
+
function useClickOutside(callback, capture = false) {
|
|
6
6
|
const callbackRef = (0, hooks_1.useRef)();
|
|
7
7
|
const innerRef = (0, hooks_1.useRef)();
|
|
8
8
|
(0, hooks_1.useEffect)(() => {
|
|
9
9
|
callbackRef.current = callback;
|
|
10
10
|
});
|
|
11
11
|
(0, hooks_1.useEffect)(() => {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
// capture phase (opt-in) sees the outside click even when an element between the target and
|
|
13
|
+
// document stops propagation (e.g. the quickview wrapper shielding autocomplete's document handler).
|
|
14
|
+
// Default stays bubble phase so inner/portaled content can keep a container open via stopPropagation().
|
|
15
|
+
document.addEventListener('click', handleClick, capture);
|
|
16
|
+
return () => document.removeEventListener('click', handleClick, capture);
|
|
14
17
|
function handleClick(e) {
|
|
15
18
|
if (innerRef.current && callbackRef.current && !innerRef.current.contains(e.target))
|
|
16
19
|
callbackRef.current(e);
|
|
@@ -4,7 +4,7 @@ exports.useTracking = useTracking;
|
|
|
4
4
|
const hooks_1 = require("preact/hooks");
|
|
5
5
|
const utilities_1 = require("../utilities");
|
|
6
6
|
const withTracking_1 = require("../providers/withTracking");
|
|
7
|
-
function useTracking({ controller, result, banner, type, content }) {
|
|
7
|
+
function useTracking({ controller, result, banner, type, content, track }) {
|
|
8
8
|
if (!controller) {
|
|
9
9
|
console.warn('Warning: No controller provided to useTracking');
|
|
10
10
|
}
|
|
@@ -14,27 +14,33 @@ function useTracking({ controller, result, banner, type, content }) {
|
|
|
14
14
|
if (!result && !banner && (!type || !content)) {
|
|
15
15
|
console.warn('Warning: No result or banner provided to withTracking');
|
|
16
16
|
}
|
|
17
|
-
const
|
|
17
|
+
const mergedTrack = {
|
|
18
|
+
impression: true,
|
|
19
|
+
click: true,
|
|
20
|
+
...track,
|
|
21
|
+
};
|
|
22
|
+
const { ref, inViewport } = (0, utilities_1.createImpressionObserver)(track?.options);
|
|
18
23
|
(0, hooks_1.useEffect)(() => {
|
|
19
|
-
if (inViewport) {
|
|
20
|
-
// TODO: add support for disabling tracking events via config like in ResultTracker
|
|
24
|
+
if (inViewport && mergedTrack.impression) {
|
|
21
25
|
if (type && content && !result && ['search', 'autocomplete'].includes(controller?.type || '')) {
|
|
22
26
|
controller?.track.banner.impression(content[type][0]);
|
|
23
27
|
}
|
|
24
28
|
else if (!result?.bundleSeed) {
|
|
25
|
-
controller?.track.product.impression(
|
|
29
|
+
controller?.track.product.impression(result || banner);
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
}, [inViewport]);
|
|
29
33
|
(0, hooks_1.useEffect)(() => {
|
|
30
34
|
const currentRef = ref.current;
|
|
31
|
-
|
|
35
|
+
// TRACKING_ATTRIBUTE marks a click-tracked boundary (see isClickWithinBannerLink),
|
|
36
|
+
// so it is only set when click tracking is enabled
|
|
37
|
+
if (currentRef && mergedTrack.click) {
|
|
32
38
|
const handleClick = (e) => {
|
|
33
39
|
if (type && content && !result && ['search', 'autocomplete'].includes(controller?.type || '')) {
|
|
34
40
|
controller?.track.banner.click(e, content[type][0]);
|
|
35
41
|
}
|
|
36
42
|
else {
|
|
37
|
-
controller?.track.product.click(e,
|
|
43
|
+
controller?.track.product.click(e, result || banner);
|
|
38
44
|
}
|
|
39
45
|
};
|
|
40
46
|
currentRef.setAttribute(withTracking_1.TRACKING_ATTRIBUTE, 'true');
|
|
@@ -43,6 +49,6 @@ function useTracking({ controller, result, banner, type, content }) {
|
|
|
43
49
|
currentRef.removeEventListener('click', handleClick);
|
|
44
50
|
};
|
|
45
51
|
}
|
|
46
|
-
}, [controller, result, banner, type, content]);
|
|
52
|
+
}, [controller, result, banner, type, content, mergedTrack.click, mergedTrack.impression]);
|
|
47
53
|
return { trackingRef: ref };
|
|
48
54
|
}
|
|
@@ -32,6 +32,7 @@ __exportStar(require("./components/Atoms/LoadingBar"), exports);
|
|
|
32
32
|
__exportStar(require("./components/Atoms/Overlay"), exports);
|
|
33
33
|
__exportStar(require("./components/Atoms/PaginationInfo"), exports);
|
|
34
34
|
__exportStar(require("./components/Atoms/Price"), exports);
|
|
35
|
+
__exportStar(require("./components/Atoms/ProductDetail"), exports);
|
|
35
36
|
__exportStar(require("./components/Atoms/SearchHeader"), exports);
|
|
36
37
|
__exportStar(require("./components/Atoms/Skeleton"), exports);
|
|
37
38
|
// MOLECULES
|
|
@@ -55,6 +56,9 @@ __exportStar(require("./components/Molecules/Modal"), exports);
|
|
|
55
56
|
__exportStar(require("./components/Molecules/OverlayBadge"), exports);
|
|
56
57
|
__exportStar(require("./components/Molecules/Pagination"), exports);
|
|
57
58
|
__exportStar(require("./components/Molecules/PerPage"), exports);
|
|
59
|
+
__exportStar(require("./components/Molecules/ProductDetailTable"), exports);
|
|
60
|
+
__exportStar(require("./components/Molecules/Gallery"), exports);
|
|
61
|
+
__exportStar(require("./components/Molecules/QuantityPicker"), exports);
|
|
58
62
|
__exportStar(require("./components/Molecules/Radio"), exports);
|
|
59
63
|
__exportStar(require("./components/Molecules/RadioList"), exports);
|
|
60
64
|
__exportStar(require("./components/Molecules/Rating"), exports);
|
|
@@ -82,6 +86,8 @@ __exportStar(require("./components/Organisms/Toolbar"), exports);
|
|
|
82
86
|
__exportStar(require("./components/Organisms/Autocomplete"), exports);
|
|
83
87
|
__exportStar(require("./components/Organisms/TermsList"), exports);
|
|
84
88
|
// TEMPLATES
|
|
89
|
+
__exportStar(require("./components/Templates/QuickviewModal"), exports);
|
|
90
|
+
__exportStar(require("./components/Templates/QuickviewSlideout"), exports);
|
|
85
91
|
__exportStar(require("./components/Templates/Recommendation"), exports);
|
|
86
92
|
__exportStar(require("./components/Templates/RecommendationBundle"), exports);
|
|
87
93
|
__exportStar(require("./components/Templates/RecommendationBundleEasyAdd"), exports);
|
|
@@ -22,6 +22,7 @@ exports.ALL_CUSTOM_COMPONENT_TYPES = [
|
|
|
22
22
|
'paginationInfo',
|
|
23
23
|
'slideshow',
|
|
24
24
|
'price',
|
|
25
|
+
'productDetail',
|
|
25
26
|
'skeleton',
|
|
26
27
|
/* molecules */
|
|
27
28
|
'modal',
|
|
@@ -39,10 +40,12 @@ exports.ALL_CUSTOM_COMPONENT_TYPES = [
|
|
|
39
40
|
'facetPaletteOptions',
|
|
40
41
|
'facetSlider',
|
|
41
42
|
'filter',
|
|
43
|
+
'gallery',
|
|
42
44
|
'loadMore',
|
|
43
45
|
'overlayBadge',
|
|
44
46
|
'pagination',
|
|
45
47
|
'perPage',
|
|
48
|
+
'quantityPicker',
|
|
46
49
|
'overlayResult',
|
|
47
50
|
'radioList',
|
|
48
51
|
'rating',
|
|
@@ -53,6 +56,7 @@ exports.ALL_CUSTOM_COMPONENT_TYPES = [
|
|
|
53
56
|
'swatches',
|
|
54
57
|
'tabSelection',
|
|
55
58
|
'variantSelection',
|
|
59
|
+
'productDetailTable',
|
|
56
60
|
'terms',
|
|
57
61
|
/* organisms */
|
|
58
62
|
'branchOverride',
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
require("@testing-library/jest-dom");
|
|
4
|
+
if (typeof globalThis.ResizeObserver === 'undefined') {
|
|
5
|
+
globalThis.ResizeObserver = class ResizeObserver {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function --- IGNORE ---
|
|
7
|
+
observe() { }
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function --- IGNORE ---
|
|
9
|
+
unobserve() { }
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function --- IGNORE ---
|
|
11
|
+
disconnect() { }
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -8,10 +8,10 @@ const IMPRESSION_MIN_VISIBLE_TIME = 1000;
|
|
|
8
8
|
function createImpressionObserver(options) {
|
|
9
9
|
const ref = (0, hooks_1.useRef)(null);
|
|
10
10
|
const { inViewport, updateRef } = (0, hooks_2.useIntersectionAdvanced)(ref, {
|
|
11
|
-
...options,
|
|
12
11
|
fireOnce: true,
|
|
13
12
|
threshold: IMPRESSION_VISIBILITY_THRESHOLD,
|
|
14
13
|
minVisibleTime: IMPRESSION_MIN_VISIBLE_TIME,
|
|
14
|
+
...options,
|
|
15
15
|
});
|
|
16
16
|
return {
|
|
17
17
|
ref,
|
|
@@ -28,3 +28,4 @@ __exportStar(require("./selectionKey"), exports);
|
|
|
28
28
|
__exportStar(require("./storybook"), exports);
|
|
29
29
|
__exportStar(require("./defaultBadgeComponentMap"), exports);
|
|
30
30
|
__exportStar(require("./createImpressionObserver"), exports);
|
|
31
|
+
__exportStar(require("./lazyRenderMinSize"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lazyRenderMinSize = void 0;
|
|
4
|
+
// A 0x0 root wrapper can prevent IntersectionObserver from ever reporting `isIntersecting`
|
|
5
|
+
// in some browsers, so lazyRender needs a non-zero min size on the root element at all times,
|
|
6
|
+
// even when disableStyles is set and the rest of defaultStyles is skipped.
|
|
7
|
+
exports.lazyRenderMinSize = {
|
|
8
|
+
minWidth: '1px',
|
|
9
|
+
minHeight: '1px',
|
|
10
|
+
};
|
|
@@ -47,6 +47,7 @@ class RecommendationInstantiator {
|
|
|
47
47
|
this.client = services?.client || new snap_client_1.Client(this.config.client.globals, this.config.client.config);
|
|
48
48
|
this.tracker = services?.tracker || new snap_tracker_1.Tracker(this.config.client.globals);
|
|
49
49
|
this.logger = services?.logger || new snap_logger_1.Logger({ prefix: 'RecommendationInstantiator ', mode: this.mode });
|
|
50
|
+
this.quickviewManager = services?.quickviewManager;
|
|
50
51
|
const profileCount = {};
|
|
51
52
|
// script block targeter for "grouped" and "legacy" blocks
|
|
52
53
|
this.targeter = new snap_toolbox_1.DomTargeter([
|
|
@@ -255,7 +256,7 @@ async function readyTheController(instance, services, targetElem, context, profi
|
|
|
255
256
|
controller: controllerConfig,
|
|
256
257
|
context,
|
|
257
258
|
mode: instance.config.mode,
|
|
258
|
-
}, { client: instance.client, tracker: instance.tracker });
|
|
259
|
+
}, { client: instance.client, tracker: instance.tracker, quickviewManager: instance.quickviewManager });
|
|
259
260
|
// mark element with controller id so cleanupStaleControllers knows it's active
|
|
260
261
|
if (targetElem) {
|
|
261
262
|
targetElem.setAttribute('ss-controller-id', controller.id);
|