@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
|
@@ -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.
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
//
|
|
96
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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: (() => {
|
package/dist/cjs/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js
CHANGED
|
@@ -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
|
|
46
|
-
maxWidth: column1?.width == 'auto' ? '
|
|
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
|
|
51
|
-
maxWidth: column2?.width == 'auto' ? '
|
|
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
|
|
56
|
-
maxWidth: column3?.width == 'auto' ? '
|
|
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
|
|
61
|
-
maxWidth: column4?.width == 'auto' ? '
|
|
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.
|