@coveo/atomic 3.27.4-pre.fba84e863c → 3.27.4
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/atomic/_atomic.esm.js +1 -1
- package/dist/atomic/atomic.esm.js.map +1 -1
- package/dist/atomic/components/_index.d.ts +20 -24
- package/dist/atomic/components/_index.js +0 -2
- package/dist/atomic/components/atomic-breadbox.js +91 -2
- package/dist/atomic/components/atomic-breadbox.js.map +1 -1
- package/dist/atomic/components/atomic-commerce-category-facet2.js +1 -1
- package/dist/atomic/components/atomic-commerce-load-more-products.js +5 -2
- package/dist/atomic/components/atomic-commerce-load-more-products.js.map +1 -1
- package/dist/atomic/components/atomic-commerce-no-products.js +2 -2
- package/dist/atomic/components/atomic-commerce-no-products.js.map +1 -1
- package/dist/atomic/components/atomic-commerce-numeric-facet2.js +3 -3
- package/dist/atomic/components/atomic-commerce-query-error.js +2 -2
- package/dist/atomic/components/atomic-commerce-query-error.js.map +1 -1
- package/dist/atomic/components/atomic-commerce-recommendation-interface.js +1 -2
- package/dist/atomic/components/atomic-commerce-recommendation-interface.js.map +1 -1
- package/dist/atomic/components/atomic-commerce-refine-toggle.js +2 -2
- package/dist/atomic/components/atomic-commerce-refine-toggle.js.map +1 -1
- package/dist/atomic/components/atomic-commerce-timeframe-facet2.js +1 -1
- package/dist/atomic/components/atomic-did-you-mean.js +35 -2
- package/dist/atomic/components/atomic-did-you-mean.js.map +1 -1
- package/dist/atomic/components/atomic-format-currency.js +1 -1
- package/dist/atomic/components/atomic-format-number.js +1 -1
- package/dist/atomic/components/atomic-format-unit.js +1 -1
- package/dist/atomic/components/atomic-insight-no-results.js +2 -2
- package/dist/atomic/components/atomic-insight-no-results.js.map +1 -1
- package/dist/atomic/components/atomic-insight-numeric-facet.js +2 -3
- package/dist/atomic/components/atomic-insight-numeric-facet.js.map +1 -1
- package/dist/atomic/components/atomic-insight-query-error.js +2 -2
- package/dist/atomic/components/atomic-insight-query-error.js.map +1 -1
- package/dist/atomic/components/atomic-load-more-results.js +5 -2
- package/dist/atomic/components/atomic-load-more-results.js.map +1 -1
- package/dist/atomic/components/atomic-no-results.js +2 -2
- package/dist/atomic/components/atomic-no-results.js.map +1 -1
- package/dist/atomic/components/atomic-numeric-facet.js +2 -3
- package/dist/atomic/components/atomic-numeric-facet.js.map +1 -1
- package/dist/atomic/components/atomic-product-children.js.map +1 -1
- package/dist/atomic/components/atomic-product-description.js.map +1 -1
- package/dist/atomic/components/atomic-product-excerpt.js.map +1 -1
- package/dist/atomic/components/atomic-product-field-condition.js.map +1 -1
- package/dist/atomic/components/atomic-product-image.js.map +1 -1
- package/dist/atomic/components/atomic-product-link.js.map +1 -1
- package/dist/atomic/components/atomic-product-multi-value-text.js.map +1 -1
- package/dist/atomic/components/atomic-product-numeric-field-value.js +1 -1
- package/dist/atomic/components/atomic-product-numeric-field-value.js.map +1 -1
- package/dist/atomic/components/atomic-product-price.js +1 -1
- package/dist/atomic/components/atomic-product-price.js.map +1 -1
- package/dist/atomic/components/atomic-product-rating.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-actions.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-badges.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-bottom-metadata.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-children.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-description.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-emphasized.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-metadata.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-name.js.map +1 -1
- package/dist/atomic/components/atomic-product-section-visual.js.map +1 -1
- package/dist/atomic/components/atomic-product-text2.js.map +1 -1
- package/dist/atomic/components/atomic-query-error.js +2 -2
- package/dist/atomic/components/atomic-query-error.js.map +1 -1
- package/dist/atomic/components/atomic-rating.js.map +1 -1
- package/dist/atomic/components/atomic-recs-error.js +2 -2
- package/dist/atomic/components/atomic-recs-error.js.map +1 -1
- package/dist/atomic/components/atomic-refine-toggle.js +2 -2
- package/dist/atomic/components/atomic-refine-toggle.js.map +1 -1
- package/dist/atomic/components/atomic-result-number.js +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.js +347 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tw.css.js +3 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-did-you-mean/atomic-commerce-did-you-mean.js +100 -0
- package/dist/atomic/components/components/commerce/atomic-commerce-interface/atomic-commerce-interface.js +0 -11
- package/dist/atomic/components/components/commerce/index.js +2 -0
- package/dist/atomic/components/components/commerce/lazy-index.js +2 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-button.js +29 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-clear-all.js +18 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-container.js +21 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-content.js +42 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-show-less.js +21 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-show-more.js +23 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-types.js +1 -0
- package/dist/atomic/components/components/common/breadbox/breadcrumb-utils.js +22 -0
- package/dist/atomic/components/{formatter.js → components/common/facets/numeric-facet/formatter.js} +3 -8
- package/dist/atomic/components/components/common/formats/format-common.js +15 -0
- package/dist/atomic/components/components/common/item-list/item-list-common.js +3 -0
- package/dist/atomic/components/components/common/query-correction/auto-correction.js +24 -0
- package/dist/atomic/components/components/common/query-correction/correction.js +21 -0
- package/dist/atomic/components/components/common/query-correction/trigger-correction.js +28 -0
- package/dist/atomic/components/{components/commerce/product-template-components → decorators/commerce}/product-template-decorators.js +3 -3
- package/dist/atomic/components/decorators/light-dom.js +16 -0
- package/dist/atomic/components/error.js.map +1 -1
- package/dist/atomic/components/format-common.js +1 -1
- package/dist/atomic/components/global/environment.js +1 -1
- package/dist/atomic/components/index.js.map +1 -1
- package/dist/atomic/components/interface-common-stencil.js +1 -1
- package/dist/atomic/components/interface-common-stencil.js.map +1 -1
- package/dist/atomic/components/product-utils.js +1 -1
- package/dist/atomic/components/product-utils.js.map +1 -1
- package/dist/atomic/components/stencil-accessibility-utils.js +14 -4
- package/dist/atomic/components/stencil-accessibility-utils.js.map +1 -1
- package/dist/atomic/components/{stencil-button2.js → stencil-guard.js} +5 -5
- package/dist/atomic/components/stencil-guard.js.map +1 -0
- package/dist/atomic/components/stencil-item-list-common.js +3 -0
- package/dist/atomic/components/stencil-item-list-common.js.map +1 -1
- package/dist/atomic/components/{title.js → stencil-link.js} +56 -56
- package/dist/atomic/components/stencil-link.js.map +1 -0
- package/dist/atomic/components/stencil-product-template-decorators.js +2 -2
- package/dist/atomic/components/stencil-product-template-decorators.js.map +1 -1
- package/dist/atomic/components/{tips.js → stencil-tips.js} +1 -1
- package/dist/atomic/components/stencil-tips.js.map +1 -0
- package/dist/atomic/components/utils/accessibility-utils.js +14 -4
- package/dist/atomic/components/utils/date-utils.js +51 -0
- package/dist/atomic/components/utils/field-utils.js +11 -0
- package/dist/atomic/components/values-container.js +26 -2
- package/dist/atomic/components/values-container.js.map +1 -1
- package/dist/atomic/index.esm.js +1 -1
- package/dist/atomic/index.esm.js.map +1 -1
- package/dist/atomic/{p-3ad7b285.entry.js → p-029d5ce0.entry.js} +2 -2
- package/dist/atomic/{p-6b1ae398.entry.js → p-07cd7e4a.entry.js} +2 -2
- package/dist/atomic/p-0a50a6c2.entry.js +2 -0
- package/dist/atomic/p-0a50a6c2.entry.js.map +1 -0
- package/dist/atomic/p-1243448d.entry.js +2 -0
- package/dist/atomic/p-1243448d.entry.js.map +1 -0
- package/dist/atomic/{p-e7a06049.entry.js → p-1c06ca0c.entry.js} +2 -2
- package/dist/atomic/{p-cd14ab54.entry.js → p-1cb6a01c.entry.js} +2 -2
- package/dist/atomic/p-1cb6a01c.entry.js.map +1 -0
- package/dist/atomic/{p-3bbc60a8.entry.js → p-22a0d1b9.entry.js} +2 -2
- package/dist/atomic/p-22a0d1b9.entry.js.map +1 -0
- package/dist/atomic/{p-f3c1c9a0.js → p-25a96534.js} +2 -2
- package/dist/atomic/{p-e5650534.entry.js → p-2b1cf37a.entry.js} +2 -2
- package/dist/atomic/{p-18761035.js → p-2bdfa055.js} +2 -2
- package/dist/atomic/p-2bdfa055.js.map +1 -0
- package/dist/atomic/{p-2fb8ceed.entry.js → p-310c93bc.entry.js} +2 -2
- package/dist/atomic/{p-95413559.entry.js → p-35400329.entry.js} +2 -2
- package/dist/atomic/{p-6ef0e47a.entry.js → p-39447826.entry.js} +2 -2
- package/dist/atomic/{p-fe10e968.entry.js → p-3e5a304a.entry.js} +2 -2
- package/dist/atomic/p-3f88b4c2.entry.js.map +1 -1
- package/dist/atomic/{p-8846dc8f.entry.js → p-4af746a9.entry.js} +2 -2
- package/dist/atomic/{p-d0799f57.entry.js → p-4b087a5e.entry.js} +2 -2
- package/dist/atomic/p-4b087a5e.entry.js.map +1 -0
- package/dist/atomic/p-4d0fc010.js +2 -0
- package/dist/atomic/p-4d0fc010.js.map +1 -0
- package/dist/atomic/p-4d464702.entry.js.map +1 -1
- package/dist/atomic/{p-3a2d55e0.entry.js → p-4e57cee1.entry.js} +2 -2
- package/dist/atomic/{p-14a2646c.entry.js → p-51810027.entry.js} +2 -2
- package/dist/atomic/p-51810027.entry.js.map +1 -0
- package/dist/atomic/{p-867e6957.entry.js → p-5576074c.entry.js} +2 -2
- package/dist/atomic/p-5576074c.entry.js.map +1 -0
- package/dist/atomic/{p-8c23589b.entry.js → p-5789732b.entry.js} +2 -2
- package/dist/atomic/p-5789732b.entry.js.map +1 -0
- package/dist/atomic/{p-e6b33bc5.entry.js → p-57f53200.entry.js} +2 -2
- package/dist/atomic/{p-68a7062b.entry.js → p-59017e0a.entry.js} +2 -2
- package/dist/atomic/p-59017e0a.entry.js.map +1 -0
- package/dist/atomic/{p-0cc48eee.entry.js → p-5aa16a91.entry.js} +2 -2
- package/dist/atomic/p-5aa16a91.entry.js.map +1 -0
- package/dist/atomic/p-5cf5bb98.entry.js +2 -0
- package/dist/atomic/p-5cf5bb98.entry.js.map +1 -0
- package/dist/atomic/p-600aa666.entry.js.map +1 -1
- package/dist/atomic/p-67afec23.js +2 -0
- package/dist/atomic/p-67afec23.js.map +1 -0
- package/dist/atomic/{p-65e24c88.entry.js → p-67ef14ac.entry.js} +2 -2
- package/dist/atomic/p-67ef14ac.entry.js.map +1 -0
- package/dist/atomic/{p-1dd886f0.entry.js → p-6c5524dc.entry.js} +2 -2
- package/dist/atomic/{p-d7727baa.entry.js → p-6d083c4e.entry.js} +2 -2
- package/dist/atomic/{p-1b75ca01.entry.js → p-6d264c97.entry.js} +2 -2
- package/dist/atomic/{p-21f506ee.entry.js → p-731eac60.entry.js} +2 -2
- package/dist/atomic/p-731eac60.entry.js.map +1 -0
- package/dist/atomic/{p-815a7f06.entry.js → p-75d11764.entry.js} +2 -2
- package/dist/atomic/p-75d11764.entry.js.map +1 -0
- package/dist/atomic/{p-f9e2e064.entry.js → p-79e1bcc1.entry.js} +2 -2
- package/dist/atomic/{p-548da30d.entry.js → p-7b686bd1.entry.js} +2 -2
- package/dist/atomic/p-7b686bd1.entry.js.map +1 -0
- package/dist/atomic/{p-e68c18db.entry.js → p-7d1ca26f.entry.js} +2 -2
- package/dist/atomic/{p-8f2b0293.entry.js → p-7dd55462.entry.js} +2 -2
- package/dist/atomic/p-7fed4859.entry.js.map +1 -1
- package/dist/atomic/{p-83b3960c.entry.js → p-81874146.entry.js} +2 -2
- package/dist/atomic/p-83108ffd.entry.js.map +1 -1
- package/dist/atomic/{p-d6b5512a.entry.js → p-88bbf499.entry.js} +2 -2
- package/dist/atomic/p-891f0c50.entry.js +2 -0
- package/dist/atomic/{p-d509f930.entry.js.map → p-891f0c50.entry.js.map} +1 -1
- package/dist/atomic/p-8c4dab14.entry.js +2 -0
- package/dist/atomic/p-8c4dab14.entry.js.map +1 -0
- package/dist/atomic/{p-9620de34.entry.js → p-92becfc7.entry.js} +2 -2
- package/dist/atomic/{p-4d2fc026.entry.js → p-963a3e18.entry.js} +2 -2
- package/dist/atomic/{p-95cb5bff.entry.js → p-99a27b04.entry.js} +2 -2
- package/dist/atomic/{p-95cb5bff.entry.js.map → p-99a27b04.entry.js.map} +1 -1
- package/dist/atomic/{p-73d43334.entry.js → p-9a161d8f.entry.js} +2 -2
- package/dist/atomic/p-9bf8689f.entry.js.map +1 -1
- package/dist/atomic/p-9cfbb4cd.entry.js.map +1 -1
- package/dist/atomic/{p-02b28870.entry.js → p-a15f6b8c.entry.js} +2 -2
- package/dist/atomic/{p-d9e69834.entry.js → p-a535a268.entry.js} +2 -2
- package/dist/atomic/p-af27edb8.entry.js.map +1 -1
- package/dist/atomic/{p-02996f86.entry.js → p-af8999b1.entry.js} +2 -2
- package/dist/atomic/{p-6a66eae4.entry.js → p-b0be7782.entry.js} +2 -2
- package/dist/atomic/{p-818a7e47.js → p-b1b751a5.js} +1 -1
- package/dist/atomic/p-b1b751a5.js.map +1 -0
- package/dist/atomic/{p-33ef34e8.entry.js → p-b3604b54.entry.js} +2 -2
- package/dist/atomic/p-b3604b54.entry.js.map +1 -0
- package/dist/atomic/p-b55ab145.js +2 -0
- package/dist/atomic/p-b55ab145.js.map +1 -0
- package/dist/atomic/{p-16e37bd4.entry.js → p-bad08ec3.entry.js} +2 -2
- package/dist/atomic/p-bad08ec3.entry.js.map +1 -0
- package/dist/atomic/p-bb081d4e.js +2 -0
- package/dist/atomic/p-bb081d4e.js.map +1 -0
- package/dist/atomic/{p-c8e6b14a.entry.js → p-bb5c19a7.entry.js} +2 -2
- package/dist/atomic/{p-0bfe403b.entry.js → p-bc77fab7.entry.js} +2 -2
- package/dist/atomic/{p-c32d8308.entry.js → p-bd0aa08f.entry.js} +2 -2
- package/dist/atomic/p-bd109981.entry.js +2 -0
- package/dist/atomic/{p-b5b86e05.entry.js.map → p-bd109981.entry.js.map} +1 -1
- package/dist/atomic/{p-a34bdd94.entry.js → p-c265c67d.entry.js} +2 -2
- package/dist/atomic/p-c265c67d.entry.js.map +1 -0
- package/dist/atomic/{p-28327de4.entry.js → p-c2ac0045.entry.js} +2 -2
- package/dist/atomic/p-c2ac0045.entry.js.map +1 -0
- package/dist/atomic/p-c3a2be63.js +2 -0
- package/dist/atomic/p-c58d3bf9.entry.js.map +1 -1
- package/dist/atomic/{p-c79d5981.js → p-c58eda89.js} +1 -1
- package/dist/atomic/p-c58eda89.js.map +1 -0
- package/dist/atomic/{p-1566803a.entry.js → p-c74c1b41.entry.js} +2 -2
- package/dist/atomic/p-c74c1b41.entry.js.map +1 -0
- package/dist/atomic/{p-bb0fa307.entry.js → p-ccff6c87.entry.js} +2 -2
- package/dist/atomic/p-ccff6c87.entry.js.map +1 -0
- package/dist/atomic/{p-966ec707.entry.js → p-cdb4f283.entry.js} +2 -2
- package/dist/atomic/{p-cbb3cf8d.entry.js → p-cf12adcd.entry.js} +2 -2
- package/dist/atomic/p-d178d2f7.js +2 -0
- package/dist/atomic/p-d178d2f7.js.map +1 -0
- package/dist/atomic/{p-05bdd025.entry.js → p-d5b6081b.entry.js} +2 -2
- package/dist/atomic/p-d5b6081b.entry.js.map +1 -0
- package/dist/atomic/{p-4c0c78f8.entry.js → p-d5c308fc.entry.js} +2 -2
- package/dist/atomic/{p-5d7c5154.entry.js → p-d72e52b2.entry.js} +2 -2
- package/dist/atomic/{p-b97a9bcb.entry.js → p-da578608.entry.js} +2 -2
- package/dist/atomic/{p-05118437.js → p-dc7b528c.js} +2 -2
- package/dist/atomic/{p-05118437.js.map → p-dc7b528c.js.map} +1 -1
- package/dist/atomic/{p-cb3cbcc4.entry.js → p-e36f1951.entry.js} +2 -2
- package/dist/atomic/{p-d1e0ba89.entry.js → p-e47dd218.entry.js} +2 -2
- package/dist/atomic/p-e47dd218.entry.js.map +1 -0
- package/dist/atomic/{p-040d11cd.entry.js → p-e961a0cc.entry.js} +2 -2
- package/dist/atomic/{p-0f925e7b.entry.js → p-ec03a238.entry.js} +2 -2
- package/dist/atomic/p-efb5a30c.js +2 -0
- package/dist/atomic/p-efb5a30c.js.map +1 -0
- package/dist/atomic/{p-bdec3d0c.js → p-f7f81710.js} +1 -1
- package/dist/atomic/p-f7f81710.js.map +1 -0
- package/dist/atomic/p-f96655f4.entry.js +2 -0
- package/dist/atomic/{p-3f309dd5.entry.js.map → p-f96655f4.entry.js.map} +1 -1
- package/dist/cjs/_index.cjs.js +1 -1
- package/dist/cjs/_loader.cjs.js +1 -1
- package/dist/cjs/{analytics-config-fdfee183.js → analytics-config-02c61b8d.js} +2 -2
- package/dist/cjs/{analytics-config-fdfee183.js.map → analytics-config-02c61b8d.js.map} +1 -1
- package/dist/cjs/atomic-automatic-facet_2.cjs.entry.js +1 -1
- package/dist/cjs/atomic-breadbox.cjs.entry.js +96 -9
- package/dist/cjs/atomic-breadbox.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-category-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-color-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-commerce-category-facet_5.cjs.entry.js +6 -7
- package/dist/cjs/atomic-commerce-category-facet_5.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-commerce-load-more-products.cjs.entry.js +5 -2
- package/dist/cjs/atomic-commerce-load-more-products.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-commerce-no-products.cjs.entry.js +3 -3
- package/dist/cjs/atomic-commerce-no-products.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-commerce-query-error.cjs.entry.js +4 -4
- package/dist/cjs/atomic-commerce-query-error.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-commerce-recommendation-interface.cjs.entry.js +2 -3
- package/dist/cjs/atomic-commerce-recommendation-interface.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-commerce-refine-toggle.cjs.entry.js +2 -2
- package/dist/cjs/atomic-commerce-refine-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-commerce-text_2.cjs.entry.js +3 -3
- package/dist/cjs/atomic-commerce-text_2.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-did-you-mean.cjs.entry.js +38 -6
- package/dist/cjs/atomic-did-you-mean.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-focus-trap_2.cjs.entry.js +1 -1
- package/dist/cjs/atomic-folded-result-list.cjs.entry.js +2 -2
- package/dist/cjs/atomic-generated-answer.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-folded-result-list.cjs.entry.js +2 -2
- package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-interface.cjs.entry.js +2 -2
- package/dist/cjs/atomic-insight-no-results.cjs.entry.js +3 -3
- package/dist/cjs/atomic-insight-no-results.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-numeric-facet.cjs.entry.js +4 -5
- package/dist/cjs/atomic-insight-numeric-facet.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-query-error.cjs.entry.js +4 -4
- package/dist/cjs/atomic-insight-query-error.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-query-summary.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-result-list.cjs.entry.js +2 -2
- package/dist/cjs/atomic-insight-result-quickview-action.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-result.cjs.entry.js +2 -2
- package/dist/cjs/atomic-insight-search-box.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-timeframe-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js +2 -2
- package/dist/cjs/atomic-load-more-results.cjs.entry.js +5 -2
- package/dist/cjs/atomic-load-more-results.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-no-results.cjs.entry.js +3 -3
- package/dist/cjs/atomic-no-results.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-notifications.cjs.entry.js +1 -1
- package/dist/cjs/atomic-numeric-facet.cjs.entry.js +4 -5
- package/dist/cjs/atomic-numeric-facet.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-children.cjs.entry.js +1 -1
- package/dist/cjs/atomic-product-children.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-description.cjs.entry.js +1 -1
- package/dist/cjs/atomic-product-description.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-excerpt.cjs.entry.js +1 -1
- package/dist/cjs/atomic-product-excerpt.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-field-condition.cjs.entry.js +1 -1
- package/dist/cjs/atomic-product-field-condition.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-image.cjs.entry.js +1 -1
- package/dist/cjs/atomic-product-image.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-link.cjs.entry.js +4 -4
- package/dist/cjs/atomic-product-link.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-multi-value-text.cjs.entry.js +1 -1
- package/dist/cjs/atomic-product-multi-value-text.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-numeric-field-value.cjs.entry.js +4 -4
- package/dist/cjs/atomic-product-numeric-field-value.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-price.cjs.entry.js +4 -4
- package/dist/cjs/atomic-product-price.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-rating.cjs.entry.js +3 -3
- package/dist/cjs/atomic-product-rating.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-actions.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-badges.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-bottom-metadata.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-children.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-description.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-emphasized.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-metadata.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-name.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-product-section-visual.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-query-error.cjs.entry.js +4 -4
- package/dist/cjs/atomic-query-error.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-query-summary.cjs.entry.js +1 -1
- package/dist/cjs/atomic-quickview.cjs.entry.js +1 -1
- package/dist/cjs/{atomic-rating-10ab225e.js → atomic-rating-6d5a98ec.js} +2 -2
- package/dist/cjs/atomic-rating-6d5a98ec.js.map +1 -0
- package/dist/cjs/atomic-rating-facet.cjs.entry.js +3 -3
- package/dist/cjs/atomic-rating-range-facet.cjs.entry.js +3 -3
- package/dist/cjs/atomic-recs-error.cjs.entry.js +4 -4
- package/dist/cjs/atomic-recs-error.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-recs-interface.cjs.entry.js +2 -2
- package/dist/cjs/atomic-recs-list.cjs.entry.js +2 -2
- package/dist/cjs/atomic-recs-result.cjs.entry.js +2 -2
- package/dist/cjs/atomic-refine-toggle.cjs.entry.js +2 -2
- package/dist/cjs/atomic-refine-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-list.cjs.entry.js +2 -2
- package/dist/cjs/atomic-result-printable-uri.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-rating.cjs.entry.js +2 -2
- package/dist/cjs/atomic-result.cjs.entry.js +2 -2
- package/dist/cjs/atomic-search-box.cjs.entry.js +1 -1
- package/dist/cjs/atomic-search-interface.cjs.entry.js +2 -2
- package/dist/cjs/atomic-timeframe-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic.cjs.js +1 -1
- package/dist/cjs/{error-69b9a539.js → error-ad501bd7.js} +1 -1
- package/dist/cjs/error-ad501bd7.js.map +1 -0
- package/dist/cjs/index-757bc886.js +0 -8
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/{interface-common-stencil-440f887d.js → interface-common-stencil-86cc0d53.js} +2 -2
- package/dist/cjs/interface-common-stencil-86cc0d53.js.map +1 -0
- package/dist/cjs/{product-utils-ebd77919.js → product-utils-9507462c.js} +3 -3
- package/dist/cjs/product-utils-9507462c.js.map +1 -0
- package/dist/cjs/{stencil-accessibility-utils-7eed7a97.js → stencil-accessibility-utils-a5d1a814.js} +15 -5
- package/dist/cjs/stencil-accessibility-utils-a5d1a814.js.map +1 -0
- package/dist/cjs/{stencil-button-4108a176.js → stencil-guard-caf49888.js} +5 -5
- package/dist/cjs/stencil-guard-caf49888.js.map +1 -0
- package/dist/cjs/{stencil-item-list-common-3fa0a493.js → stencil-item-list-common-5a566a7b.js} +5 -2
- package/dist/cjs/stencil-item-list-common-5a566a7b.js.map +1 -0
- package/dist/cjs/{title-d7fc3716.js → stencil-link-9ee2c42d.js} +56 -56
- package/dist/cjs/stencil-link-9ee2c42d.js.map +1 -0
- package/dist/cjs/{stencil-product-template-decorators-42759048.js → stencil-product-template-decorators-8c9cf847.js} +3 -3
- package/dist/cjs/stencil-product-template-decorators-8c9cf847.js.map +1 -0
- package/dist/cjs/{tips-12b15dde.js → stencil-tips-e913f891.js} +1 -1
- package/dist/cjs/stencil-tips-e913f891.js.map +1 -0
- package/dist/cjs/{values-container-71f8a3aa.js → values-container-7f0fda83.js} +28 -3
- package/dist/cjs/values-container-7f0fda83.js.map +1 -0
- package/dist/cjs/version.cjs.js +2 -2
- package/dist/esm/_index.js +1 -1
- package/dist/esm/_loader.js +1 -1
- package/dist/esm/{analytics-config-703d0ce7.js → analytics-config-f0d21567.js} +2 -2
- package/dist/esm/{analytics-config-703d0ce7.js.map → analytics-config-f0d21567.js.map} +1 -1
- package/dist/esm/atomic-automatic-facet_2.entry.js +1 -1
- package/dist/esm/atomic-breadbox.entry.js +92 -5
- package/dist/esm/atomic-breadbox.entry.js.map +1 -1
- package/dist/esm/atomic-category-facet.entry.js +1 -1
- package/dist/esm/atomic-color-facet.entry.js +1 -1
- package/dist/esm/atomic-commerce-category-facet_5.entry.js +7 -8
- package/dist/esm/atomic-commerce-category-facet_5.entry.js.map +1 -1
- package/dist/esm/atomic-commerce-load-more-products.entry.js +5 -2
- package/dist/esm/atomic-commerce-load-more-products.entry.js.map +1 -1
- package/dist/esm/atomic-commerce-no-products.entry.js +3 -3
- package/dist/esm/atomic-commerce-no-products.entry.js.map +1 -1
- package/dist/esm/atomic-commerce-query-error.entry.js +3 -3
- package/dist/esm/atomic-commerce-query-error.entry.js.map +1 -1
- package/dist/esm/atomic-commerce-recommendation-interface.entry.js +2 -3
- package/dist/esm/atomic-commerce-recommendation-interface.entry.js.map +1 -1
- package/dist/esm/atomic-commerce-refine-toggle.entry.js +2 -2
- package/dist/esm/atomic-commerce-refine-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-commerce-text_2.entry.js +3 -3
- package/dist/esm/atomic-commerce-text_2.entry.js.map +1 -1
- package/dist/esm/atomic-did-you-mean.entry.js +35 -3
- package/dist/esm/atomic-did-you-mean.entry.js.map +1 -1
- package/dist/esm/atomic-facet.entry.js +1 -1
- package/dist/esm/atomic-focus-trap_2.entry.js +1 -1
- package/dist/esm/atomic-folded-result-list.entry.js +2 -2
- package/dist/esm/atomic-format-currency.entry.js +1 -1
- package/dist/esm/atomic-format-number.entry.js +1 -1
- package/dist/esm/atomic-format-unit.entry.js +1 -1
- package/dist/esm/atomic-generated-answer.entry.js +1 -1
- package/dist/esm/atomic-insight-facet.entry.js +1 -1
- package/dist/esm/atomic-insight-folded-result-list.entry.js +2 -2
- package/dist/esm/atomic-insight-generated-answer.entry.js +1 -1
- package/dist/esm/atomic-insight-interface.entry.js +2 -2
- package/dist/esm/atomic-insight-no-results.entry.js +3 -3
- package/dist/esm/atomic-insight-no-results.entry.js.map +1 -1
- package/dist/esm/atomic-insight-numeric-facet.entry.js +4 -5
- package/dist/esm/atomic-insight-numeric-facet.entry.js.map +1 -1
- package/dist/esm/atomic-insight-query-error.entry.js +3 -3
- package/dist/esm/atomic-insight-query-error.entry.js.map +1 -1
- package/dist/esm/atomic-insight-query-summary.entry.js +1 -1
- package/dist/esm/atomic-insight-result-list.entry.js +2 -2
- package/dist/esm/atomic-insight-result-quickview-action.entry.js +1 -1
- package/dist/esm/atomic-insight-result.entry.js +2 -2
- package/dist/esm/atomic-insight-search-box.entry.js +1 -1
- package/dist/esm/atomic-insight-timeframe-facet.entry.js +1 -1
- package/dist/esm/atomic-ipx-recs-list.entry.js +2 -2
- package/dist/esm/atomic-load-more-results.entry.js +5 -2
- package/dist/esm/atomic-load-more-results.entry.js.map +1 -1
- package/dist/esm/atomic-no-results.entry.js +3 -3
- package/dist/esm/atomic-no-results.entry.js.map +1 -1
- package/dist/esm/atomic-notifications.entry.js +1 -1
- package/dist/esm/atomic-numeric-facet.entry.js +4 -5
- package/dist/esm/atomic-numeric-facet.entry.js.map +1 -1
- package/dist/esm/atomic-product-children.entry.js +1 -1
- package/dist/esm/atomic-product-children.entry.js.map +1 -1
- package/dist/esm/atomic-product-description.entry.js +1 -1
- package/dist/esm/atomic-product-description.entry.js.map +1 -1
- package/dist/esm/atomic-product-excerpt.entry.js +1 -1
- package/dist/esm/atomic-product-excerpt.entry.js.map +1 -1
- package/dist/esm/atomic-product-field-condition.entry.js +1 -1
- package/dist/esm/atomic-product-field-condition.entry.js.map +1 -1
- package/dist/esm/atomic-product-image.entry.js +1 -1
- package/dist/esm/atomic-product-image.entry.js.map +1 -1
- package/dist/esm/atomic-product-link.entry.js +4 -4
- package/dist/esm/atomic-product-link.entry.js.map +1 -1
- package/dist/esm/atomic-product-multi-value-text.entry.js +1 -1
- package/dist/esm/atomic-product-multi-value-text.entry.js.map +1 -1
- package/dist/esm/atomic-product-numeric-field-value.entry.js +5 -5
- package/dist/esm/atomic-product-numeric-field-value.entry.js.map +1 -1
- package/dist/esm/atomic-product-price.entry.js +5 -5
- package/dist/esm/atomic-product-price.entry.js.map +1 -1
- package/dist/esm/atomic-product-rating.entry.js +3 -3
- package/dist/esm/atomic-product-rating.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-actions.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-badges.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-bottom-metadata.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-children.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-description.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-emphasized.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-metadata.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-name.entry.js.map +1 -1
- package/dist/esm/atomic-product-section-visual.entry.js.map +1 -1
- package/dist/esm/atomic-query-error.entry.js +3 -3
- package/dist/esm/atomic-query-error.entry.js.map +1 -1
- package/dist/esm/atomic-query-summary.entry.js +1 -1
- package/dist/esm/atomic-quickview.entry.js +1 -1
- package/dist/esm/{atomic-rating-6f3a61b9.js → atomic-rating-623f80fb.js} +2 -2
- package/dist/esm/atomic-rating-623f80fb.js.map +1 -0
- package/dist/esm/atomic-rating-facet.entry.js +3 -3
- package/dist/esm/atomic-rating-range-facet.entry.js +3 -3
- package/dist/esm/atomic-recs-error.entry.js +3 -3
- package/dist/esm/atomic-recs-error.entry.js.map +1 -1
- package/dist/esm/atomic-recs-interface.entry.js +2 -2
- package/dist/esm/atomic-recs-list.entry.js +2 -2
- package/dist/esm/atomic-recs-result.entry.js +2 -2
- package/dist/esm/atomic-refine-toggle.entry.js +2 -2
- package/dist/esm/atomic-refine-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-result-list.entry.js +2 -2
- package/dist/esm/atomic-result-number.entry.js +1 -1
- package/dist/esm/atomic-result-printable-uri.entry.js +1 -1
- package/dist/esm/atomic-result-rating.entry.js +2 -2
- package/dist/esm/atomic-result.entry.js +2 -2
- package/dist/esm/atomic-search-box.entry.js +1 -1
- package/dist/esm/atomic-search-interface.entry.js +2 -2
- package/dist/esm/atomic-timeframe-facet.entry.js +1 -1
- package/dist/esm/atomic.js +1 -1
- package/dist/esm/{error-64f0ec13.js → error-9520e6d0.js} +1 -1
- package/dist/esm/error-9520e6d0.js.map +1 -0
- package/dist/esm/{format-common-6436d8ea.js → format-common-274e0f7c.js} +2 -2
- package/dist/esm/{format-common-6436d8ea.js.map → format-common-274e0f7c.js.map} +1 -1
- package/dist/esm/index-3f35faca.js +0 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{interface-common-stencil-979a1c7d.js → interface-common-stencil-5ac4bb62.js} +2 -2
- package/dist/esm/interface-common-stencil-5ac4bb62.js.map +1 -0
- package/dist/esm/{product-utils-b4fc9857.js → product-utils-8348689f.js} +3 -3
- package/dist/esm/product-utils-8348689f.js.map +1 -0
- package/dist/esm/{stencil-accessibility-utils-49ac1c53.js → stencil-accessibility-utils-b42ac309.js} +15 -5
- package/dist/esm/stencil-accessibility-utils-b42ac309.js.map +1 -0
- package/dist/esm/{stencil-button-467ff352.js → stencil-guard-9329c8cd.js} +5 -5
- package/dist/esm/stencil-guard-9329c8cd.js.map +1 -0
- package/dist/esm/{stencil-item-list-common-8996949d.js → stencil-item-list-common-9e3e9954.js} +5 -2
- package/dist/esm/stencil-item-list-common-9e3e9954.js.map +1 -0
- package/dist/esm/{title-7b773fe0.js → stencil-link-ea50cb61.js} +56 -56
- package/dist/esm/stencil-link-ea50cb61.js.map +1 -0
- package/dist/esm/{stencil-product-template-decorators-27919dc7.js → stencil-product-template-decorators-0321cc1d.js} +3 -3
- package/dist/esm/stencil-product-template-decorators-0321cc1d.js.map +1 -0
- package/dist/esm/{tips-03d4bd63.js → stencil-tips-06e9b3c2.js} +1 -1
- package/dist/esm/stencil-tips-06e9b3c2.js.map +1 -0
- package/dist/esm/{values-container-5c8162d7.js → values-container-51a6d0ae.js} +27 -3
- package/dist/esm/values-container-51a6d0ae.js.map +1 -0
- package/dist/esm/version.js +2 -2
- package/dist/types/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.d.ts +22 -16
- package/dist/types/components/commerce/atomic-commerce-did-you-mean/atomic-commerce-did-you-mean.d.ts +12 -6
- package/dist/types/components/commerce/atomic-commerce-interface/atomic-commerce-interface.d.ts +2 -2
- package/dist/types/components/commerce/atomic-product/atomic-product.d.ts +1 -1
- package/dist/types/components/commerce/{product-template-components/atomic-product-children → atomic-product-children}/atomic-product-children.d.ts +3 -3
- package/dist/types/components/commerce/{product-template-components/atomic-product-description → atomic-product-description}/atomic-product-description.d.ts +3 -3
- package/dist/types/components/commerce/{product-template-components/atomic-product-excerpt → atomic-product-excerpt}/atomic-product-excerpt.d.ts +3 -3
- package/dist/types/components/commerce/{product-template-components/atomic-product-image → atomic-product-image}/atomic-product-image.d.ts +2 -2
- package/dist/types/components/commerce/{product-template-components/atomic-product-link → atomic-product-link}/atomic-product-link.d.ts +2 -2
- package/dist/types/components/commerce/{product-template-components/atomic-product-multi-value-text → atomic-product-multi-value-text}/atomic-product-multi-value-text.d.ts +1 -1
- package/dist/types/components/commerce/{product-template-components/atomic-product-numeric-field-value → atomic-product-numeric-field-value}/atomic-product-numeric-field-value.d.ts +2 -2
- package/dist/types/components/commerce/{product-template-components/atomic-product-price → atomic-product-price}/atomic-product-price.d.ts +2 -2
- package/dist/types/components/commerce/{product-template-components/atomic-product-rating → atomic-product-rating}/atomic-product-rating.d.ts +2 -2
- package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-visual.d.ts +1 -1
- package/dist/types/components/commerce/{product-template-components/atomic-product-text → atomic-product-text}/atomic-product-text.d.ts +2 -2
- package/dist/types/components/commerce/index.d.ts +2 -0
- package/dist/types/components/commerce/{product-template-components → product-template-component-utils}/stencil-product-template-decorators.d.ts +2 -2
- package/dist/types/components/common/interface/bindings.d.ts +6 -0
- package/dist/types/components/common/no-items/stencil-tips.d.ts +7 -0
- package/dist/types/components/common/no-items/tips.d.ts +2 -2
- package/dist/types/components/common/query-error/description.d.ts +3 -2
- package/dist/types/components/common/query-error/details.d.ts +3 -4
- package/dist/types/components/common/query-error/icon.d.ts +3 -2
- package/dist/types/components/common/query-error/link.d.ts +2 -2
- package/dist/types/components/common/query-error/show-more.d.ts +1 -1
- package/dist/types/components/common/query-error/stencil-description.d.ts +10 -0
- package/dist/types/components/common/query-error/stencil-details.d.ts +7 -0
- package/dist/types/components/common/query-error/stencil-icon.d.ts +6 -0
- package/dist/types/components/common/query-error/stencil-link.d.ts +8 -0
- package/dist/types/components/common/refine-modal/guard.d.ts +7 -3
- package/dist/types/components/common/refine-modal/stencil-guard.d.ts +8 -0
- package/dist/types/components/common/sort/sort-guard.d.ts +1 -1
- package/dist/types/components.d.ts +4 -66
- package/dist/types/{components/commerce/product-template-components → decorators/commerce}/product-template-decorators.d.ts +3 -2
- package/dist/types/decorators/light-dom.d.ts +16 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/utils/accessibility-utils.d.ts +4 -1
- package/dist/types/utils/stencil-accessibility-utils.d.ts +4 -1
- package/docs/atomic-docs.json +46 -268
- package/package.json +5 -5
- package/dist/atomic/components/atomic-commerce-breadbox.d.ts +0 -11
- package/dist/atomic/components/atomic-commerce-breadbox.js +0 -295
- package/dist/atomic/components/atomic-commerce-breadbox.js.map +0 -1
- package/dist/atomic/components/atomic-commerce-did-you-mean.d.ts +0 -11
- package/dist/atomic/components/atomic-commerce-did-you-mean.js +0 -94
- package/dist/atomic/components/atomic-commerce-did-you-mean.js.map +0 -1
- package/dist/atomic/components/formatter.js.map +0 -1
- package/dist/atomic/components/stencil-breadcrumb-show-more.js +0 -95
- package/dist/atomic/components/stencil-breadcrumb-show-more.js.map +0 -1
- package/dist/atomic/components/stencil-button2.js.map +0 -1
- package/dist/atomic/components/stencil-trigger-correction.js +0 -39
- package/dist/atomic/components/stencil-trigger-correction.js.map +0 -1
- package/dist/atomic/components/tips.js.map +0 -1
- package/dist/atomic/components/title.js.map +0 -1
- package/dist/atomic/p-05bdd025.entry.js.map +0 -1
- package/dist/atomic/p-0cc48eee.entry.js.map +0 -1
- package/dist/atomic/p-14a2646c.entry.js.map +0 -1
- package/dist/atomic/p-1566803a.entry.js.map +0 -1
- package/dist/atomic/p-16e37bd4.entry.js.map +0 -1
- package/dist/atomic/p-18761035.js.map +0 -1
- package/dist/atomic/p-21f506ee.entry.js.map +0 -1
- package/dist/atomic/p-248089a0.js +0 -2
- package/dist/atomic/p-248089a0.js.map +0 -1
- package/dist/atomic/p-28327de4.entry.js.map +0 -1
- package/dist/atomic/p-33006c9c.js +0 -2
- package/dist/atomic/p-33006c9c.js.map +0 -1
- package/dist/atomic/p-33ef34e8.entry.js.map +0 -1
- package/dist/atomic/p-36741edb.entry.js +0 -2
- package/dist/atomic/p-36741edb.entry.js.map +0 -1
- package/dist/atomic/p-3bbc60a8.entry.js.map +0 -1
- package/dist/atomic/p-3f309dd5.entry.js +0 -2
- package/dist/atomic/p-548da30d.entry.js.map +0 -1
- package/dist/atomic/p-6058008a.js +0 -2
- package/dist/atomic/p-6058008a.js.map +0 -1
- package/dist/atomic/p-65e24c88.entry.js.map +0 -1
- package/dist/atomic/p-68a7062b.entry.js.map +0 -1
- package/dist/atomic/p-6fd7ad30.entry.js +0 -2
- package/dist/atomic/p-6fd7ad30.entry.js.map +0 -1
- package/dist/atomic/p-725183ba.js +0 -2
- package/dist/atomic/p-725183ba.js.map +0 -1
- package/dist/atomic/p-7f0593a5.js +0 -2
- package/dist/atomic/p-7f0593a5.js.map +0 -1
- package/dist/atomic/p-815a7f06.entry.js.map +0 -1
- package/dist/atomic/p-818a7e47.js.map +0 -1
- package/dist/atomic/p-867e6957.entry.js.map +0 -1
- package/dist/atomic/p-8c23589b.entry.js.map +0 -1
- package/dist/atomic/p-8d6b2300.js +0 -2
- package/dist/atomic/p-8d6b2300.js.map +0 -1
- package/dist/atomic/p-982b73fd.js +0 -2
- package/dist/atomic/p-985d0ef5.js +0 -2
- package/dist/atomic/p-985d0ef5.js.map +0 -1
- package/dist/atomic/p-a34bdd94.entry.js.map +0 -1
- package/dist/atomic/p-a54ccae7.entry.js +0 -2
- package/dist/atomic/p-a54ccae7.entry.js.map +0 -1
- package/dist/atomic/p-ae07068c.js +0 -2
- package/dist/atomic/p-ae07068c.js.map +0 -1
- package/dist/atomic/p-b5b86e05.entry.js +0 -2
- package/dist/atomic/p-b5d5c5cf.js +0 -2
- package/dist/atomic/p-b5d5c5cf.js.map +0 -1
- package/dist/atomic/p-bb0fa307.entry.js.map +0 -1
- package/dist/atomic/p-bdec3d0c.js.map +0 -1
- package/dist/atomic/p-c79d5981.js.map +0 -1
- package/dist/atomic/p-cd14ab54.entry.js.map +0 -1
- package/dist/atomic/p-d0799f57.entry.js.map +0 -1
- package/dist/atomic/p-d15a44cc.entry.js +0 -2
- package/dist/atomic/p-d15a44cc.entry.js.map +0 -1
- package/dist/atomic/p-d1e0ba89.entry.js.map +0 -1
- package/dist/atomic/p-d509f930.entry.js +0 -2
- package/dist/atomic/p-d59d782b.entry.js +0 -2
- package/dist/atomic/p-d59d782b.entry.js.map +0 -1
- package/dist/atomic/p-ee536476.entry.js +0 -2
- package/dist/atomic/p-ee536476.entry.js.map +0 -1
- package/dist/cjs/atomic-commerce-breadbox.cjs.entry.js +0 -288
- package/dist/cjs/atomic-commerce-breadbox.cjs.entry.js.map +0 -1
- package/dist/cjs/atomic-commerce-did-you-mean.cjs.entry.js +0 -81
- package/dist/cjs/atomic-commerce-did-you-mean.cjs.entry.js.map +0 -1
- package/dist/cjs/atomic-rating-10ab225e.js.map +0 -1
- package/dist/cjs/error-69b9a539.js.map +0 -1
- package/dist/cjs/formatter-a95ed36b.js +0 -31
- package/dist/cjs/formatter-a95ed36b.js.map +0 -1
- package/dist/cjs/interface-common-stencil-440f887d.js.map +0 -1
- package/dist/cjs/product-utils-ebd77919.js.map +0 -1
- package/dist/cjs/stencil-accessibility-utils-7eed7a97.js.map +0 -1
- package/dist/cjs/stencil-breadcrumb-show-more-072b7726.js +0 -102
- package/dist/cjs/stencil-breadcrumb-show-more-072b7726.js.map +0 -1
- package/dist/cjs/stencil-button-4108a176.js.map +0 -1
- package/dist/cjs/stencil-item-list-common-3fa0a493.js.map +0 -1
- package/dist/cjs/stencil-product-template-decorators-42759048.js.map +0 -1
- package/dist/cjs/stencil-trigger-correction-3dbb038a.js +0 -44
- package/dist/cjs/stencil-trigger-correction-3dbb038a.js.map +0 -1
- package/dist/cjs/tips-12b15dde.js.map +0 -1
- package/dist/cjs/title-d7fc3716.js.map +0 -1
- package/dist/cjs/values-container-71f8a3aa.js.map +0 -1
- package/dist/esm/atomic-commerce-breadbox.entry.js +0 -284
- package/dist/esm/atomic-commerce-breadbox.entry.js.map +0 -1
- package/dist/esm/atomic-commerce-did-you-mean.entry.js +0 -77
- package/dist/esm/atomic-commerce-did-you-mean.entry.js.map +0 -1
- package/dist/esm/atomic-rating-6f3a61b9.js.map +0 -1
- package/dist/esm/error-64f0ec13.js.map +0 -1
- package/dist/esm/formatter-d890aa7d.js +0 -29
- package/dist/esm/formatter-d890aa7d.js.map +0 -1
- package/dist/esm/interface-common-stencil-979a1c7d.js.map +0 -1
- package/dist/esm/product-utils-b4fc9857.js.map +0 -1
- package/dist/esm/stencil-accessibility-utils-49ac1c53.js.map +0 -1
- package/dist/esm/stencil-breadcrumb-show-more-6e6104d4.js +0 -95
- package/dist/esm/stencil-breadcrumb-show-more-6e6104d4.js.map +0 -1
- package/dist/esm/stencil-button-467ff352.js.map +0 -1
- package/dist/esm/stencil-item-list-common-8996949d.js.map +0 -1
- package/dist/esm/stencil-product-template-decorators-27919dc7.js.map +0 -1
- package/dist/esm/stencil-trigger-correction-c724f42c.js +0 -39
- package/dist/esm/stencil-trigger-correction-c724f42c.js.map +0 -1
- package/dist/esm/tips-03d4bd63.js.map +0 -1
- package/dist/esm/title-7b773fe0.js.map +0 -1
- package/dist/esm/values-container-5c8162d7.js.map +0 -1
- /package/dist/atomic/components/components/commerce/{product-template-components/atomic-product-children → atomic-product-children}/select-child-product-event.js +0 -0
- /package/dist/atomic/{p-3ad7b285.entry.js.map → p-029d5ce0.entry.js.map} +0 -0
- /package/dist/atomic/{p-6b1ae398.entry.js.map → p-07cd7e4a.entry.js.map} +0 -0
- /package/dist/atomic/{p-e7a06049.entry.js.map → p-1c06ca0c.entry.js.map} +0 -0
- /package/dist/atomic/{p-f3c1c9a0.js.map → p-25a96534.js.map} +0 -0
- /package/dist/atomic/{p-e5650534.entry.js.map → p-2b1cf37a.entry.js.map} +0 -0
- /package/dist/atomic/{p-2fb8ceed.entry.js.map → p-310c93bc.entry.js.map} +0 -0
- /package/dist/atomic/{p-95413559.entry.js.map → p-35400329.entry.js.map} +0 -0
- /package/dist/atomic/{p-6ef0e47a.entry.js.map → p-39447826.entry.js.map} +0 -0
- /package/dist/atomic/{p-fe10e968.entry.js.map → p-3e5a304a.entry.js.map} +0 -0
- /package/dist/atomic/{p-8846dc8f.entry.js.map → p-4af746a9.entry.js.map} +0 -0
- /package/dist/atomic/{p-3a2d55e0.entry.js.map → p-4e57cee1.entry.js.map} +0 -0
- /package/dist/atomic/{p-e6b33bc5.entry.js.map → p-57f53200.entry.js.map} +0 -0
- /package/dist/atomic/{p-1dd886f0.entry.js.map → p-6c5524dc.entry.js.map} +0 -0
- /package/dist/atomic/{p-d7727baa.entry.js.map → p-6d083c4e.entry.js.map} +0 -0
- /package/dist/atomic/{p-1b75ca01.entry.js.map → p-6d264c97.entry.js.map} +0 -0
- /package/dist/atomic/{p-f9e2e064.entry.js.map → p-79e1bcc1.entry.js.map} +0 -0
- /package/dist/atomic/{p-e68c18db.entry.js.map → p-7d1ca26f.entry.js.map} +0 -0
- /package/dist/atomic/{p-8f2b0293.entry.js.map → p-7dd55462.entry.js.map} +0 -0
- /package/dist/atomic/{p-83b3960c.entry.js.map → p-81874146.entry.js.map} +0 -0
- /package/dist/atomic/{p-d6b5512a.entry.js.map → p-88bbf499.entry.js.map} +0 -0
- /package/dist/atomic/{p-9620de34.entry.js.map → p-92becfc7.entry.js.map} +0 -0
- /package/dist/atomic/{p-4d2fc026.entry.js.map → p-963a3e18.entry.js.map} +0 -0
- /package/dist/atomic/{p-73d43334.entry.js.map → p-9a161d8f.entry.js.map} +0 -0
- /package/dist/atomic/{p-02b28870.entry.js.map → p-a15f6b8c.entry.js.map} +0 -0
- /package/dist/atomic/{p-d9e69834.entry.js.map → p-a535a268.entry.js.map} +0 -0
- /package/dist/atomic/{p-02996f86.entry.js.map → p-af8999b1.entry.js.map} +0 -0
- /package/dist/atomic/{p-6a66eae4.entry.js.map → p-b0be7782.entry.js.map} +0 -0
- /package/dist/atomic/{p-c8e6b14a.entry.js.map → p-bb5c19a7.entry.js.map} +0 -0
- /package/dist/atomic/{p-0bfe403b.entry.js.map → p-bc77fab7.entry.js.map} +0 -0
- /package/dist/atomic/{p-c32d8308.entry.js.map → p-bd0aa08f.entry.js.map} +0 -0
- /package/dist/atomic/{p-982b73fd.js.map → p-c3a2be63.js.map} +0 -0
- /package/dist/atomic/{p-966ec707.entry.js.map → p-cdb4f283.entry.js.map} +0 -0
- /package/dist/atomic/{p-cbb3cf8d.entry.js.map → p-cf12adcd.entry.js.map} +0 -0
- /package/dist/atomic/{p-4c0c78f8.entry.js.map → p-d5c308fc.entry.js.map} +0 -0
- /package/dist/atomic/{p-5d7c5154.entry.js.map → p-d72e52b2.entry.js.map} +0 -0
- /package/dist/atomic/{p-b97a9bcb.entry.js.map → p-da578608.entry.js.map} +0 -0
- /package/dist/atomic/{p-cb3cbcc4.entry.js.map → p-e36f1951.entry.js.map} +0 -0
- /package/dist/atomic/{p-040d11cd.entry.js.map → p-e961a0cc.entry.js.map} +0 -0
- /package/dist/atomic/{p-0f925e7b.entry.js.map → p-ec03a238.entry.js.map} +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-children → atomic-product-children}/select-child-product-event.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-field-condition → atomic-product-field-condition}/atomic-product-field-condition.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-actions.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-badges.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-bottom-metadata.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-children.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-description.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-emphasized.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-metadata.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components/atomic-product-sections → atomic-product-sections}/atomic-product-section-name.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components → product-template-component-utils}/error.d.ts +0 -0
- /package/dist/types/components/commerce/{product-template-components → product-template-component-utils}/product-utils.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-numeric-facet.js","mappings":"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","names":["AtomicNumericFacet"],"sources":["src/components/search/facets/atomic-numeric-facet/atomic-numeric-facet.pcss?tag=atomic-numeric-facet&encapsulation=shadow","src/components/search/facets/atomic-numeric-facet/atomic-numeric-facet.tsx"],"sourcesContent":["@import '../../../common/facets/numeric-facet-common.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {\n buildFacetConditionsManager,\n FacetConditionsManager,\n buildNumericFacet,\n buildNumericFilter,\n buildNumericRange,\n buildSearchStatus,\n CategoryFacetValueRequest,\n FacetValueRequest,\n loadNumericFacetSetActions,\n NumericFacet,\n NumericFacetState,\n NumericFilter,\n NumericFilterState,\n RangeFacetRangeAlgorithm,\n RangeFacetSortCriterion,\n SearchStatus,\n SearchStatusState,\n NumericRangeRequest,\n buildTabManager,\n TabManager,\n TabManagerState,\n} from '@coveo/headless';\nimport {Component, Element, h, Listen, Prop, State} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ArrayProp, MapProp} from '../../../../utils/props-utils';\nimport {FocusTargetController} from '../../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../../utils/utils';\nimport {parseDependsOn} from '../../../common/facets/depends-on';\nimport {FacetInfo} from '../../../common/facets/facet-common-store';\nimport {FacetContainer} from '../../../common/facets/facet-container/stencil-facet-container';\nimport {FacetGuard} from '../../../common/facets/facet-guard';\nimport {FacetHeader} from '../../../common/facets/facet-header/stencil-facet-header';\nimport {NumberInputType} from '../../../common/facets/facet-number-input/number-input-type';\nimport {FacetPlaceholder} from '../../../common/facets/facet-placeholder/facet-placeholder';\nimport {formatHumanReadable} from '../../../common/facets/numeric-facet/formatter';\nimport {NumericFacetValueLink} from '../../../common/facets/numeric-facet/value-link';\nimport {NumericFacetValuesContainer} from '../../../common/facets/numeric-facet/values-container';\nimport {initializePopover} from '../../../common/facets/popover/popover-type';\nimport {shouldDisplayInputForFacetRange} from '../../../common/facets/stencil-facet-common';\nimport {\n defaultNumberFormatter,\n NumberFormatter,\n} from '../../../common/formats/format-common';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\n\n/**\n * A facet is a list of values for a certain field occurring in the results, ordered using a configurable criteria (e.g., ascending, descending).\n * An `atomic-numeric-facet` displays a facet of the results for the current query as numeric ranges.\n *\n * @part facet - The wrapper for the entire facet.\n * @part placeholder - The placeholder shown before the first search is executed.\n *\n * @part label-button - The button that displays the label and allows to expand/collapse the facet.\n * @part label-button-icon - The label button icon.\n * @part clear-button - The button that resets the actively selected facet values.\n * @part clear-button-icon - The clear button icon.\n *\n * @part values - The facet values container.\n * @part value-label - The facet value label, common for all displays.\n * @part value-count - The facet value count, common for all displays.\n *\n * @part value-checkbox - The facet value checkbox, available when display is 'checkbox'.\n * @part value-checkbox-checked - The checked facet value checkbox, available when display is 'checkbox'.\n * @part value-checkbox-label - The facet value checkbox clickable label, available when display is 'checkbox'.\n * @part value-checkbox-icon - The facet value checkbox icon, available when display is 'checkbox'.\n * @part value-link - The facet value when display is 'link'.\n * @part value-link-selected - The selected facet value when display is 'link'.\n\n * @part input-form - The form that comprises the labels, inputs, and 'apply' button for the custom numeric range.\n * @part label-start - The label for the starting value of the custom numeric range.\n * @part label-end - The label for the ending value of the custom numeric range.\n * @part input-start - The input for the starting value of the custom numeric range.\n * @part input-end - The input for the ending value of the custom numeric range.\n * @part input-apply-button - The apply button for the custom range.\n */\n@Component({\n tag: 'atomic-numeric-facet',\n styleUrl: './atomic-numeric-facet.pcss',\n shadow: true,\n})\nexport class AtomicNumericFacet implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n public facetForRange?: NumericFacet;\n public facetForInput?: NumericFacet;\n public filter!: NumericFilter;\n public searchStatus!: SearchStatus;\n public tabManager!: TabManager;\n @Element() private host!: HTMLElement;\n private manualRanges: (NumericRangeRequest & {label?: string})[] = [];\n private formatter: NumberFormatter = defaultNumberFormatter;\n private facetForRangeDependenciesManager?: FacetConditionsManager;\n private facetForInputDependenciesManager?: FacetConditionsManager;\n private filterDependenciesManager?: FacetConditionsManager;\n\n @BindStateToController('facetForRange')\n @State()\n public facetState!: NumericFacetState;\n @BindStateToController('filter')\n @State()\n public filterState?: NumericFilterState;\n @BindStateToController('searchStatus')\n @State()\n public searchStatusState!: SearchStatusState;\n @BindStateToController('tabManager')\n @State()\n public tabManagerState!: TabManagerState;\n @State() public error!: Error;\n @BindStateToController('facetForInput')\n @State()\n public facetForInputState?: NumericFacetState;\n\n /**\n * Specifies a unique identifier for the facet.\n */\n @Prop({mutable: true, reflect: true}) public facetId?: string;\n /**\n * The non-localized label for the facet.\n * Used in the `atomic-breadbox` component through the bindings store.\n */\n @Prop({reflect: true}) public label = 'no-label';\n /**\n * The field whose values you want to display in the facet.\n */\n @Prop({reflect: true}) public field!: string;\n /**\n * The tabs on which the facet can be displayed. This property should not be used at the same time as `tabs-excluded`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-timeframe-facet tabs-included='[\"tabIDA\", \"tabIDB\"]'></atomic-timeframe-facet>\n * ```\n * If you don't set this property, the facet can be displayed on any tab. Otherwise, the facet can only be displayed on the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsIncluded: string[] | string = '[]';\n\n /**\n * The tabs on which this facet must not be displayed. This property should not be used at the same time as `tabs-included`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-timeframe-facet tabs-excluded='[\"tabIDA\", \"tabIDB\"]'></atomic-timeframe-facet>\n * ```\n * If you don't set this property, the facet can be displayed on any tab. Otherwise, the facet won't be displayed on any of the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsExcluded: string[] | string = '[]';\n\n /**\n * The number of values to request for this facet, when there are no manual ranges.\n * If the number of values is 0, no ranges will be displayed.\n */\n @Prop({reflect: true}) public numberOfValues = 8;\n /**\n * Whether this facet should contain an input allowing users to set custom ranges.\n * Depending on the field, the input can allow either decimal or integer values.\n */\n @Prop({reflect: true}) public withInput?: NumberInputType;\n /**\n * The sort criterion to apply to the returned facet values.\n * Possible values are 'ascending' and 'descending'.\n */\n @Prop({reflect: true}) public sortCriteria: RangeFacetSortCriterion =\n 'ascending';\n /**\n * The algorithm that's used for generating the ranges of this facet when they aren't manually defined. The default value of `\"equiprobable\"` generates facet ranges which vary in size but have a more balanced number of results within each range. The value of `\"even\"` generates equally sized facet ranges across all of the results.\n */\n @Prop({reflect: true}) public rangeAlgorithm: RangeFacetRangeAlgorithm =\n 'equiprobable';\n /**\n * Whether to display the facet values as checkboxes (multiple selection) or links (single selection).\n * Possible values are 'checkbox' and 'link'.\n */\n @Prop({reflect: true}) public displayValuesAs: 'checkbox' | 'link' =\n 'checkbox';\n /**\n * Specifies whether the facet is collapsed. When the facet is the child of an `atomic-facet-manager` component, the facet manager controls this property.\n */\n @Prop({reflect: true, mutable: true}) public isCollapsed = false;\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading over the facet, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n /**\n * Whether to exclude the parents of folded results when estimating the result count for each facet value.\n *\n *\n * Note: Resulting count is only an estimation, in some cases this value could be incorrect.\n */\n @Prop({reflect: true}) public filterFacetCount = true;\n /**\n * The maximum number of results to scan in the index to ensure that the facet lists all potential facet values.\n * Note: A high injectionDepth may negatively impact the facet request performance.\n * Minimum: `0`\n * Default: `1000`\n */\n @Prop({reflect: true}) public injectionDepth = 1000;\n\n /**\n * The required facets and values for this facet to be displayed.\n * Examples:\n * ```html\n * <atomic-facet facet-id=\"abc\" field=\"objecttype\" ...></atomic-facet>\n *\n * <!-- To show the facet when any value is selected in the facet with id \"abc\": -->\n * <atomic-numeric-facet\n * depends-on-abc\n * ...\n * ></atomic-numeric-facet>\n *\n * <!-- To show the facet when value \"doc\" is selected in the facet with id \"abc\": -->\n * <atomic-numeric-facet\n * depends-on-abc=\"doc\"\n * ...\n * ></atomic-numeric-facet>\n * ```\n */\n @MapProp() @Prop() public dependsOn: Record<string, string> = {};\n\n private headerFocus?: FocusTargetController;\n\n private get focusTarget(): FocusTargetController {\n if (!this.headerFocus) {\n this.headerFocus = new FocusTargetController(this);\n }\n return this.headerFocus;\n }\n\n public initialize() {\n if (\n [...this.tabsIncluded].length > 0 &&\n [...this.tabsExcluded].length > 0\n ) {\n console.warn(\n 'Values for both \"tabs-included\" and \"tabs-excluded\" have been provided. This is could lead to unexpected behaviors.'\n );\n }\n this.validateProps();\n this.initializeTabManager();\n this.computeFacetId();\n this.initializeFacetForInput();\n this.initializeFacetForRange();\n this.initializeFilter();\n this.initializeSearchStatus();\n this.registerFacetToStore();\n }\n\n public disconnectedCallback() {\n if (this.host.isConnected) {\n return;\n }\n this.facetForRangeDependenciesManager?.stopWatching();\n this.facetForInputDependenciesManager?.stopWatching();\n this.filterDependenciesManager?.stopWatching();\n }\n\n private initializeSearchStatus() {\n this.searchStatus = buildSearchStatus(this.bindings.engine);\n }\n private initializeTabManager() {\n this.tabManager = buildTabManager(this.bindings.engine);\n }\n private initializeFacetForInput() {\n if (!this.withInput) {\n return;\n }\n this.facetForInput = buildNumericFacet(this.bindings.engine, {\n options: {\n numberOfValues: 1,\n generateAutomaticRanges: true,\n facetId: `${this.facetId}_input_range`,\n field: this.field,\n sortCriteria: this.sortCriteria,\n rangeAlgorithm: this.rangeAlgorithm,\n filterFacetCount: this.filterFacetCount,\n injectionDepth: this.injectionDepth,\n tabs: {\n included: [...this.tabsIncluded],\n excluded: [...this.tabsExcluded],\n },\n },\n });\n\n this.facetForInputDependenciesManager = this.initializeDependenciesManager(\n this.facetForInput.state.facetId\n );\n\n return this.facetForInput;\n }\n\n private initializeFacetForRange() {\n if (this.numberOfValues <= 0) {\n return;\n }\n\n this.manualRanges = Array.from(\n this.host.querySelectorAll('atomic-numeric-range')\n ).map(({start, end, endInclusive, label}) => ({\n ...buildNumericRange({start, end, endInclusive}),\n label,\n }));\n\n this.facetForRange = buildNumericFacet(this.bindings.engine, {\n options: {\n facetId: this.facetId,\n field: this.field,\n numberOfValues: this.numberOfValues,\n sortCriteria: this.sortCriteria,\n rangeAlgorithm: this.rangeAlgorithm,\n currentValues: this.manualRanges,\n generateAutomaticRanges: !this.manualRanges.length,\n filterFacetCount: this.filterFacetCount,\n injectionDepth: this.injectionDepth,\n tabs: {\n included: [...this.tabsIncluded],\n excluded: [...this.tabsExcluded],\n },\n },\n });\n\n this.facetForRangeDependenciesManager = this.initializeDependenciesManager(\n this.facetForRange.state.facetId\n );\n\n return this.facetForRange;\n }\n\n private initializeFilter() {\n if (!this.withInput) {\n return;\n }\n this.filter = buildNumericFilter(this.bindings.engine, {\n options: {\n facetId: `${this.facetId}_input`,\n field: this.field,\n tabs: {\n included: [...this.tabsIncluded],\n excluded: [...this.tabsExcluded],\n },\n },\n });\n\n this.filterDependenciesManager = this.initializeDependenciesManager(\n this.filter.state.facetId\n );\n }\n\n private initializeDependenciesManager(facetId: string) {\n return buildFacetConditionsManager(this.bindings.engine, {\n facetId,\n conditions: parseDependsOn<FacetValueRequest | CategoryFacetValueRequest>(\n this.dependsOn\n ),\n });\n }\n\n private registerFacetToStore() {\n const facetInfo: FacetInfo = {\n label: () => this.bindings.i18n.t(this.label),\n facetId: this.facetId!,\n element: this.host,\n isHidden: () => this.isHidden,\n };\n\n this.bindings.store.registerFacet('numericFacets', {\n ...facetInfo,\n format: (value) =>\n formatHumanReadable({\n facetValue: value,\n logger: this.bindings.engine.logger,\n i18n: this.bindings.i18n,\n field: this.field,\n manualRanges: this.manualRanges,\n formatter: this.formatter,\n }),\n });\n\n initializePopover(this.host, {\n ...facetInfo,\n hasValues: () => this.hasValues,\n numberOfActiveValues: () => this.numberOfSelectedValues,\n });\n\n if (this.filter) {\n this.bindings.store.state.numericFacets[this.filter.state.facetId] =\n this.bindings.store.state.numericFacets[this.facetId!];\n }\n }\n\n @Listen('atomic/numberFormat')\n public setFormat(event: CustomEvent<NumberFormatter>) {\n event.preventDefault();\n event.stopPropagation();\n this.formatter = event.detail;\n }\n\n @Listen('atomic/numberInputApply')\n public applyNumberInput() {\n this.facetId &&\n this.bindings.engine.dispatch(\n loadNumericFacetSetActions(\n this.bindings.engine\n ).deselectAllNumericFacetValues(this.facetId)\n );\n }\n\n public render() {\n const {\n searchStatusState: {firstSearchExecuted, hasError},\n bindings: {i18n},\n } = this;\n return (\n <FacetGuard\n enabled={this.enabled}\n firstSearchExecuted={firstSearchExecuted}\n hasError={hasError}\n hasResults={this.shouldRenderFacet}\n >\n {firstSearchExecuted ? (\n <FacetContainer>\n <FacetHeader\n i18n={i18n}\n label={this.label}\n onClearFilters={() => {\n this.focusTarget.focusAfterSearch();\n if (this.filterState?.range) {\n this.filter?.clear();\n return;\n }\n this.facetForRange?.deselectAll();\n }}\n numberOfActiveValues={this.numberOfSelectedValues}\n isCollapsed={this.isCollapsed}\n headingLevel={this.headingLevel}\n onToggleCollapse={() => (this.isCollapsed = !this.isCollapsed)}\n headerRef={(el) => this.focusTarget.setTarget(el)}\n />\n {!this.isCollapsed && [\n this.shouldRenderValues && this.renderValues(),\n this.shouldRenderInput && (\n <atomic-facet-number-input\n type={this.withInput!}\n bindings={this.bindings}\n label={this.label}\n filter={this.filter!}\n filterState={this.filter!.state}\n ></atomic-facet-number-input>\n ),\n ]}\n </FacetContainer>\n ) : (\n <FacetPlaceholder\n isCollapsed={this.isCollapsed}\n numberOfValues={this.numberOfValues}\n />\n )}\n </FacetGuard>\n );\n }\n\n private renderValues() {\n const {\n displayValuesAs,\n field,\n manualRanges,\n label,\n bindings: {\n i18n,\n engine: {logger},\n },\n formatter,\n } = this;\n\n return (\n <NumericFacetValuesContainer i18n={i18n} label={label}>\n {this.valuesToRender.map((value) => (\n <NumericFacetValueLink\n formatter={formatter}\n displayValuesAs={displayValuesAs}\n facetValue={value}\n field={field}\n i18n={i18n}\n logger={logger}\n manualRanges={manualRanges}\n onClick={() =>\n this.displayValuesAs === 'link'\n ? this.facetForRange!.toggleSingleSelect(value)\n : this.facetForRange!.toggleSelect(value)\n }\n />\n ))}\n </NumericFacetValuesContainer>\n );\n }\n\n private get numberOfSelectedValues() {\n if (this.filter?.state.range) {\n return 1;\n }\n\n return (\n this.facetForRange?.state.values.filter(({state}) => state === 'selected')\n .length || 0\n );\n }\n\n private get shouldRenderValues() {\n return (\n !this.hasInputRange &&\n this.numberOfValues > 0 &&\n !!this.valuesToRender.length\n );\n }\n\n private get hasInputRange() {\n return !!this.filter?.state.range;\n }\n\n private get valuesToRender() {\n return (\n this.facetForRange?.state.values.filter(\n (value) => value.numberOfResults || value.state !== 'idle'\n ) || []\n );\n }\n\n private get shouldRenderInput() {\n return shouldDisplayInputForFacetRange({\n hasInputRange: this.hasInputRange,\n searchStatusState: this.searchStatusState,\n facetValues: this.facetForInput?.state.values || [],\n hasInput: !!this.withInput,\n });\n }\n\n private computeFacetId() {\n if (this.facetId) {\n return;\n }\n\n if (this.bindings.store.state.numericFacets[this.field]) {\n this.facetId = randomID(`${this.field}_`);\n }\n\n this.facetId = this.field;\n }\n\n private get enabled() {\n return this.facetState?.enabled ?? this.filter?.state.enabled ?? true;\n }\n\n private get isHidden() {\n return !this.shouldRenderFacet || !this.enabled;\n }\n\n private get shouldRenderFacet() {\n return this.shouldRenderInput || this.shouldRenderValues;\n }\n\n private get hasValues() {\n if (this.facetForInput?.state.values.length) {\n return true;\n }\n\n return !!this.valuesToRender.length;\n }\n\n private validateProps() {\n new Schema({\n displayValuesAs: new StringValue({constrainTo: ['checkbox', 'link']}),\n withInput: new StringValue({constrainTo: ['integer', 'decimal']}),\n }).validate({\n displayValuesAs: this.displayValuesAs,\n withInput: this.withInput,\n });\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"atomic-numeric-facet.js","mappings":";;;;;;;;;;;;;;;;;AAAA,MAAM,qBAAqB,GAAG,2p9EAA2p9E,CAAC;AAC1r9E,iCAAe,qBAAqB;;;;;;;;;;;;MCqFvBA,oBAAkB;;;;;QAQrB,iBAAY,GAA+C,EAAE,CAAC;QAC9D,cAAS,GAAoB,sBAAsB,CAAC;;;;;QA8B9B,UAAK,GAAG,UAAU,CAAC;;;;;;;;;;QAgB1C,iBAAY,GAAsB,IAAI,CAAC;;;;;;;;;;QAavC,iBAAY,GAAsB,IAAI,CAAC;;;;;QAMhB,mBAAc,GAAG,CAAC,CAAC;;;;;QAUnB,iBAAY,GACxC,WAAW,CAAC;;;;QAIgB,mBAAc,GAC1C,cAAc,CAAC;;;;;QAKa,oBAAe,GAC3C,UAAU,CAAC;;;;QAIgC,gBAAW,GAAG,KAAK,CAAC;;;;QAInC,iBAAY,GAAG,CAAC,CAAC;;;;;;;QAOjB,qBAAgB,GAAG,IAAI,CAAC;;;;;;;QAOxB,mBAAc,GAAG,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;QAqB1B,cAAS,GAA2B,EAAE,CAAC;;;;;;;;qBApG3B,UAAU;;4BAgBP,IAAI;4BAaJ,IAAI;8BAME,CAAC;;4BAW9C,WAAW;8BAKX,cAAc;+BAMd,UAAU;2BAI+C,KAAK;4BAInB,CAAC;gCAOG,IAAI;8BAON,IAAI;yBAqBW,EAAE;;IAIhE,IAAY,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACpD;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,UAAU;QACf,IACE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;YACjC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EACjC;YACA,OAAO,CAAC,IAAI,CACV,qHAAqH,CACtH,CAAC;SACH;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAEM,oBAAoB;QACzB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACzB,OAAO;SACR;QACD,IAAI,CAAC,gCAAgC,EAAE,YAAY,EAAE,CAAC;QACtD,IAAI,CAAC,gCAAgC,EAAE,YAAY,EAAE,CAAC;QACtD,IAAI,CAAC,yBAAyB,EAAE,YAAY,EAAE,CAAC;KAChD;IAEO,sBAAsB;QAC5B,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC7D;IACO,oBAAoB;QAC1B,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACzD;IACO,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3D,OAAO,EAAE;gBACP,cAAc,EAAE,CAAC;gBACjB,uBAAuB,EAAE,IAAI;gBAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,cAAc;gBACtC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,IAAI,EAAE;oBACJ,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;oBAChC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;iBACjC;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,6BAA6B,CACxE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CACjC,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAEO,uBAAuB;QAC7B,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE;YAC5B,OAAO;SACR;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAC5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CACnD,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAC,MAAM;YAC5C,GAAG,iBAAiB,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAC,CAAC;YAChD,KAAK;SACN,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3D,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,YAAY;gBAChC,uBAAuB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;gBAClD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,IAAI,EAAE;oBACJ,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;oBAChC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;iBACjC;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,6BAA6B,CACxE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CACjC,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACrD,OAAO,EAAE;gBACP,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,QAAQ;gBAChC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE;oBACJ,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;oBAChC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;iBACjC;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,6BAA6B,CACjE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAC1B,CAAC;KACH;IAEO,6BAA6B,CAAC,OAAe;QACnD,OAAO,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACvD,OAAO;YACP,UAAU,EAAE,cAAc,CACxB,IAAI,CAAC,SAAS,CACf;SACF,CAAC,CAAC;KACJ;IAEO,oBAAoB;QAC1B,MAAM,SAAS,GAAc;YAC3B,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAQ;YACtB,OAAO,EAAE,IAAI,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ;SAC9B,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;YACjD,GAAG,SAAS;YACZ,MAAM,EAAE,CAAC,KAAK,KACZ,mBAAmB,CAAC;gBAClB,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;gBACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;SACL,CAAC,CAAC;QAEH,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3B,GAAG,SAAS;YACZ,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS;YAC/B,oBAAoB,EAAE,MAAM,IAAI,CAAC,sBAAsB;SACxD,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC;SAC1D;KACF;IAGM,SAAS,CAAC,KAAmC;QAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;KAC/B;IAGM,gBAAgB;QACrB,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAC3B,0BAA0B,CACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CACrB,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAC9C,CAAC;KACL;IAEM,MAAM;QACX,MAAM,EACJ,iBAAiB,EAAE,EAAC,mBAAmB,EAAE,QAAQ,EAAC,EAClD,QAAQ,EAAE,EAAC,IAAI,EAAC,GACjB,GAAG,IAAI,CAAC;QACT,QACE,EAAC,UAAU,qDACT,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,mBAAmB,EAAE,mBAAmB,EACxC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,CAAC,iBAAiB,IAEjC,mBAAmB,IAClB,EAAC,cAAc,QACb,EAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,cAAc,EAAE;gBACd,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE;oBAC3B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;oBACrB,OAAO;iBACR;gBACD,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;aACnC,EACD,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,EACjD,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,gBAAgB,EAAE,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAC9D,SAAS,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,GACjD,EACD,CAAC,IAAI,CAAC,WAAW,IAAI;YACpB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,YAAY,EAAE;YAC9C,IAAI,CAAC,iBAAiB,KACpB,iCACE,IAAI,EAAE,IAAI,CAAC,SAAU,EACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAO,EACpB,WAAW,EAAE,IAAI,CAAC,MAAO,CAAC,KAAK,GACJ,CAC9B;SACF,CACc,KAEjB,EAAC,gBAAgB,IACf,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,cAAc,EAAE,IAAI,CAAC,cAAc,GACnC,CACH,CACU,EACb;KACH;IAEO,YAAY;QAClB,MAAM,EACJ,eAAe,EACf,KAAK,EACL,YAAY,EACZ,KAAK,EACL,QAAQ,EAAE,EACR,IAAI,EACJ,MAAM,EAAE,EAAC,MAAM,EAAC,GACjB,EACD,SAAS,GACV,GAAG,IAAI,CAAC;QAET,QACE,EAAC,2BAA2B,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,MAC7B,EAAC,qBAAqB,IACpB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MACP,IAAI,CAAC,eAAe,KAAK,MAAM;kBAC3B,IAAI,CAAC,aAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC;kBAC7C,IAAI,CAAC,aAAc,CAAC,YAAY,CAAC,KAAK,CAAC,GAE7C,CACH,CAAC,CAC0B,EAC9B;KACH;IAED,IAAY,sBAAsB;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE;YAC5B,OAAO,CAAC,CAAC;SACV;QAED,QACE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAC,KAAK,EAAC,KAAK,KAAK,KAAK,UAAU,CAAC;aACvE,MAAM,IAAI,CAAC,EACd;KACH;IAED,IAAY,kBAAkB;QAC5B,QACE,CAAC,IAAI,CAAC,aAAa;YACnB,IAAI,CAAC,cAAc,GAAG,CAAC;YACvB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAC5B;KACH;IAED,IAAY,aAAa;QACvB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;KACnC;IAED,IAAY,cAAc;QACxB,QACE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CACrC,CAAC,KAAK,KAAK,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAC3D,IAAI,EAAE,EACP;KACH;IAED,IAAY,iBAAiB;QAC3B,OAAO,+BAA+B,CAAC;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;YACnD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;SAC3B,CAAC,CAAC;KACJ;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACvD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;KAC3B;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;KACvE;IAED,IAAY,QAAQ;QAClB,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;KACjD;IAED,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,CAAC;KAC1D;IAED,IAAY,SAAS;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YAC3C,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;KACrC;IAEO,aAAa;QACnB,IAAI,MAAM,CAAC;YACT,eAAe,EAAE,IAAI,WAAW,CAAC,EAAC,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAC,CAAC;YACrE,SAAS,EAAE,IAAI,WAAW,CAAC,EAAC,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAC,CAAC;SAClE,CAAC,CAAC,QAAQ,CAAC;YACV,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;KACJ;;;;;;;;;;;;;;;;;;;;;;;;;;AAhf4B;IAA5B,kBAAkB,EAAE;sDAA4B;AAe1C;IAFN,qBAAqB,CAAC,eAAe,CAAC;wDAED;AAG/B;IAFN,qBAAqB,CAAC,QAAQ,CAAC;yDAEQ;AAGjC;IAFN,qBAAqB,CAAC,cAAc,CAAC;+DAEO;AAGtC;IAFN,qBAAqB,CAAC,YAAY,CAAC;6DAEK;AAIlC;IAFN,qBAAqB,CAAC,eAAe,CAAC;gEAEO;AA0BvC;IAFN,SAAS,EAAE;0DAEkC;AAavC;IAFN,SAAS,EAAE;0DAEkC;AAuEpB;IAAzB,OAAO,EAAE;uDAAuD;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicNumericFacet"],"sources":["src/components/search/facets/atomic-numeric-facet/atomic-numeric-facet.pcss?tag=atomic-numeric-facet&encapsulation=shadow","src/components/search/facets/atomic-numeric-facet/atomic-numeric-facet.tsx"],"sourcesContent":["@import '../../../common/facets/numeric-facet-common.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {\n buildFacetConditionsManager,\n FacetConditionsManager,\n buildNumericFacet,\n buildNumericFilter,\n buildNumericRange,\n buildSearchStatus,\n CategoryFacetValueRequest,\n FacetValueRequest,\n loadNumericFacetSetActions,\n NumericFacet,\n NumericFacetState,\n NumericFilter,\n NumericFilterState,\n RangeFacetRangeAlgorithm,\n RangeFacetSortCriterion,\n SearchStatus,\n SearchStatusState,\n NumericRangeRequest,\n buildTabManager,\n TabManager,\n TabManagerState,\n} from '@coveo/headless';\nimport {Component, Element, h, Listen, Prop, State} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ArrayProp, MapProp} from '../../../../utils/props-utils';\nimport {FocusTargetController} from '../../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../../utils/utils';\nimport {parseDependsOn} from '../../../common/facets/depends-on';\nimport {FacetInfo} from '../../../common/facets/facet-common-store';\nimport {FacetContainer} from '../../../common/facets/facet-container/stencil-facet-container';\nimport {FacetGuard} from '../../../common/facets/facet-guard';\nimport {FacetHeader} from '../../../common/facets/facet-header/stencil-facet-header';\nimport {NumberInputType} from '../../../common/facets/facet-number-input/number-input-type';\nimport {FacetPlaceholder} from '../../../common/facets/facet-placeholder/facet-placeholder';\nimport {formatHumanReadable} from '../../../common/facets/numeric-facet/formatter';\nimport {NumericFacetValueLink} from '../../../common/facets/numeric-facet/value-link';\nimport {NumericFacetValuesContainer} from '../../../common/facets/numeric-facet/values-container';\nimport {initializePopover} from '../../../common/facets/popover/popover-type';\nimport {shouldDisplayInputForFacetRange} from '../../../common/facets/stencil-facet-common';\nimport {\n defaultNumberFormatter,\n NumberFormatter,\n} from '../../../common/formats/format-common';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\n\n/**\n * A facet is a list of values for a certain field occurring in the results, ordered using a configurable criteria (e.g., ascending, descending).\n * An `atomic-numeric-facet` displays a facet of the results for the current query as numeric ranges.\n *\n * @part facet - The wrapper for the entire facet.\n * @part placeholder - The placeholder shown before the first search is executed.\n *\n * @part label-button - The button that displays the label and allows to expand/collapse the facet.\n * @part label-button-icon - The label button icon.\n * @part clear-button - The button that resets the actively selected facet values.\n * @part clear-button-icon - The clear button icon.\n *\n * @part values - The facet values container.\n * @part value-label - The facet value label, common for all displays.\n * @part value-count - The facet value count, common for all displays.\n *\n * @part value-checkbox - The facet value checkbox, available when display is 'checkbox'.\n * @part value-checkbox-checked - The checked facet value checkbox, available when display is 'checkbox'.\n * @part value-checkbox-label - The facet value checkbox clickable label, available when display is 'checkbox'.\n * @part value-checkbox-icon - The facet value checkbox icon, available when display is 'checkbox'.\n * @part value-link - The facet value when display is 'link'.\n * @part value-link-selected - The selected facet value when display is 'link'.\n\n * @part input-form - The form that comprises the labels, inputs, and 'apply' button for the custom numeric range.\n * @part label-start - The label for the starting value of the custom numeric range.\n * @part label-end - The label for the ending value of the custom numeric range.\n * @part input-start - The input for the starting value of the custom numeric range.\n * @part input-end - The input for the ending value of the custom numeric range.\n * @part input-apply-button - The apply button for the custom range.\n */\n@Component({\n tag: 'atomic-numeric-facet',\n styleUrl: './atomic-numeric-facet.pcss',\n shadow: true,\n})\nexport class AtomicNumericFacet implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n public facetForRange?: NumericFacet;\n public facetForInput?: NumericFacet;\n public filter!: NumericFilter;\n public searchStatus!: SearchStatus;\n public tabManager!: TabManager;\n @Element() private host!: HTMLElement;\n private manualRanges: (NumericRangeRequest & {label?: string})[] = [];\n private formatter: NumberFormatter = defaultNumberFormatter;\n private facetForRangeDependenciesManager?: FacetConditionsManager;\n private facetForInputDependenciesManager?: FacetConditionsManager;\n private filterDependenciesManager?: FacetConditionsManager;\n\n @BindStateToController('facetForRange')\n @State()\n public facetState!: NumericFacetState;\n @BindStateToController('filter')\n @State()\n public filterState?: NumericFilterState;\n @BindStateToController('searchStatus')\n @State()\n public searchStatusState!: SearchStatusState;\n @BindStateToController('tabManager')\n @State()\n public tabManagerState!: TabManagerState;\n @State() public error!: Error;\n @BindStateToController('facetForInput')\n @State()\n public facetForInputState?: NumericFacetState;\n\n /**\n * Specifies a unique identifier for the facet.\n */\n @Prop({mutable: true, reflect: true}) public facetId?: string;\n /**\n * The non-localized label for the facet.\n * Used in the `atomic-breadbox` component through the bindings store.\n */\n @Prop({reflect: true}) public label = 'no-label';\n /**\n * The field whose values you want to display in the facet.\n */\n @Prop({reflect: true}) public field!: string;\n /**\n * The tabs on which the facet can be displayed. This property should not be used at the same time as `tabs-excluded`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-timeframe-facet tabs-included='[\"tabIDA\", \"tabIDB\"]'></atomic-timeframe-facet>\n * ```\n * If you don't set this property, the facet can be displayed on any tab. Otherwise, the facet can only be displayed on the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsIncluded: string[] | string = '[]';\n\n /**\n * The tabs on which this facet must not be displayed. This property should not be used at the same time as `tabs-included`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-timeframe-facet tabs-excluded='[\"tabIDA\", \"tabIDB\"]'></atomic-timeframe-facet>\n * ```\n * If you don't set this property, the facet can be displayed on any tab. Otherwise, the facet won't be displayed on any of the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsExcluded: string[] | string = '[]';\n\n /**\n * The number of values to request for this facet, when there are no manual ranges.\n * If the number of values is 0, no ranges will be displayed.\n */\n @Prop({reflect: true}) public numberOfValues = 8;\n /**\n * Whether this facet should contain an input allowing users to set custom ranges.\n * Depending on the field, the input can allow either decimal or integer values.\n */\n @Prop({reflect: true}) public withInput?: NumberInputType;\n /**\n * The sort criterion to apply to the returned facet values.\n * Possible values are 'ascending' and 'descending'.\n */\n @Prop({reflect: true}) public sortCriteria: RangeFacetSortCriterion =\n 'ascending';\n /**\n * The algorithm that's used for generating the ranges of this facet when they aren't manually defined. The default value of `\"equiprobable\"` generates facet ranges which vary in size but have a more balanced number of results within each range. The value of `\"even\"` generates equally sized facet ranges across all of the results.\n */\n @Prop({reflect: true}) public rangeAlgorithm: RangeFacetRangeAlgorithm =\n 'equiprobable';\n /**\n * Whether to display the facet values as checkboxes (multiple selection) or links (single selection).\n * Possible values are 'checkbox' and 'link'.\n */\n @Prop({reflect: true}) public displayValuesAs: 'checkbox' | 'link' =\n 'checkbox';\n /**\n * Specifies whether the facet is collapsed. When the facet is the child of an `atomic-facet-manager` component, the facet manager controls this property.\n */\n @Prop({reflect: true, mutable: true}) public isCollapsed = false;\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading over the facet, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n /**\n * Whether to exclude the parents of folded results when estimating the result count for each facet value.\n *\n *\n * Note: Resulting count is only an estimation, in some cases this value could be incorrect.\n */\n @Prop({reflect: true}) public filterFacetCount = true;\n /**\n * The maximum number of results to scan in the index to ensure that the facet lists all potential facet values.\n * Note: A high injectionDepth may negatively impact the facet request performance.\n * Minimum: `0`\n * Default: `1000`\n */\n @Prop({reflect: true}) public injectionDepth = 1000;\n\n /**\n * The required facets and values for this facet to be displayed.\n * Examples:\n * ```html\n * <atomic-facet facet-id=\"abc\" field=\"objecttype\" ...></atomic-facet>\n *\n * <!-- To show the facet when any value is selected in the facet with id \"abc\": -->\n * <atomic-numeric-facet\n * depends-on-abc\n * ...\n * ></atomic-numeric-facet>\n *\n * <!-- To show the facet when value \"doc\" is selected in the facet with id \"abc\": -->\n * <atomic-numeric-facet\n * depends-on-abc=\"doc\"\n * ...\n * ></atomic-numeric-facet>\n * ```\n */\n @MapProp() @Prop() public dependsOn: Record<string, string> = {};\n\n private headerFocus?: FocusTargetController;\n\n private get focusTarget(): FocusTargetController {\n if (!this.headerFocus) {\n this.headerFocus = new FocusTargetController(this);\n }\n return this.headerFocus;\n }\n\n public initialize() {\n if (\n [...this.tabsIncluded].length > 0 &&\n [...this.tabsExcluded].length > 0\n ) {\n console.warn(\n 'Values for both \"tabs-included\" and \"tabs-excluded\" have been provided. This is could lead to unexpected behaviors.'\n );\n }\n this.validateProps();\n this.initializeTabManager();\n this.computeFacetId();\n this.initializeFacetForInput();\n this.initializeFacetForRange();\n this.initializeFilter();\n this.initializeSearchStatus();\n this.registerFacetToStore();\n }\n\n public disconnectedCallback() {\n if (this.host.isConnected) {\n return;\n }\n this.facetForRangeDependenciesManager?.stopWatching();\n this.facetForInputDependenciesManager?.stopWatching();\n this.filterDependenciesManager?.stopWatching();\n }\n\n private initializeSearchStatus() {\n this.searchStatus = buildSearchStatus(this.bindings.engine);\n }\n private initializeTabManager() {\n this.tabManager = buildTabManager(this.bindings.engine);\n }\n private initializeFacetForInput() {\n if (!this.withInput) {\n return;\n }\n this.facetForInput = buildNumericFacet(this.bindings.engine, {\n options: {\n numberOfValues: 1,\n generateAutomaticRanges: true,\n facetId: `${this.facetId}_input_range`,\n field: this.field,\n sortCriteria: this.sortCriteria,\n rangeAlgorithm: this.rangeAlgorithm,\n filterFacetCount: this.filterFacetCount,\n injectionDepth: this.injectionDepth,\n tabs: {\n included: [...this.tabsIncluded],\n excluded: [...this.tabsExcluded],\n },\n },\n });\n\n this.facetForInputDependenciesManager = this.initializeDependenciesManager(\n this.facetForInput.state.facetId\n );\n\n return this.facetForInput;\n }\n\n private initializeFacetForRange() {\n if (this.numberOfValues <= 0) {\n return;\n }\n\n this.manualRanges = Array.from(\n this.host.querySelectorAll('atomic-numeric-range')\n ).map(({start, end, endInclusive, label}) => ({\n ...buildNumericRange({start, end, endInclusive}),\n label,\n }));\n\n this.facetForRange = buildNumericFacet(this.bindings.engine, {\n options: {\n facetId: this.facetId,\n field: this.field,\n numberOfValues: this.numberOfValues,\n sortCriteria: this.sortCriteria,\n rangeAlgorithm: this.rangeAlgorithm,\n currentValues: this.manualRanges,\n generateAutomaticRanges: !this.manualRanges.length,\n filterFacetCount: this.filterFacetCount,\n injectionDepth: this.injectionDepth,\n tabs: {\n included: [...this.tabsIncluded],\n excluded: [...this.tabsExcluded],\n },\n },\n });\n\n this.facetForRangeDependenciesManager = this.initializeDependenciesManager(\n this.facetForRange.state.facetId\n );\n\n return this.facetForRange;\n }\n\n private initializeFilter() {\n if (!this.withInput) {\n return;\n }\n this.filter = buildNumericFilter(this.bindings.engine, {\n options: {\n facetId: `${this.facetId}_input`,\n field: this.field,\n tabs: {\n included: [...this.tabsIncluded],\n excluded: [...this.tabsExcluded],\n },\n },\n });\n\n this.filterDependenciesManager = this.initializeDependenciesManager(\n this.filter.state.facetId\n );\n }\n\n private initializeDependenciesManager(facetId: string) {\n return buildFacetConditionsManager(this.bindings.engine, {\n facetId,\n conditions: parseDependsOn<FacetValueRequest | CategoryFacetValueRequest>(\n this.dependsOn\n ),\n });\n }\n\n private registerFacetToStore() {\n const facetInfo: FacetInfo = {\n label: () => this.bindings.i18n.t(this.label),\n facetId: this.facetId!,\n element: this.host,\n isHidden: () => this.isHidden,\n };\n\n this.bindings.store.registerFacet('numericFacets', {\n ...facetInfo,\n format: (value) =>\n formatHumanReadable({\n facetValue: value,\n logger: this.bindings.engine.logger,\n i18n: this.bindings.i18n,\n field: this.field,\n manualRanges: this.manualRanges,\n formatter: this.formatter,\n }),\n });\n\n initializePopover(this.host, {\n ...facetInfo,\n hasValues: () => this.hasValues,\n numberOfActiveValues: () => this.numberOfSelectedValues,\n });\n\n if (this.filter) {\n this.bindings.store.state.numericFacets[this.filter.state.facetId] =\n this.bindings.store.state.numericFacets[this.facetId!];\n }\n }\n\n @Listen('atomic/numberFormat')\n public setFormat(event: CustomEvent<NumberFormatter>) {\n event.preventDefault();\n event.stopPropagation();\n this.formatter = event.detail;\n }\n\n @Listen('atomic/numberInputApply')\n public applyNumberInput() {\n this.facetId &&\n this.bindings.engine.dispatch(\n loadNumericFacetSetActions(\n this.bindings.engine\n ).deselectAllNumericFacetValues(this.facetId)\n );\n }\n\n public render() {\n const {\n searchStatusState: {firstSearchExecuted, hasError},\n bindings: {i18n},\n } = this;\n return (\n <FacetGuard\n enabled={this.enabled}\n firstSearchExecuted={firstSearchExecuted}\n hasError={hasError}\n hasResults={this.shouldRenderFacet}\n >\n {firstSearchExecuted ? (\n <FacetContainer>\n <FacetHeader\n i18n={i18n}\n label={this.label}\n onClearFilters={() => {\n this.focusTarget.focusAfterSearch();\n if (this.filterState?.range) {\n this.filter?.clear();\n return;\n }\n this.facetForRange?.deselectAll();\n }}\n numberOfActiveValues={this.numberOfSelectedValues}\n isCollapsed={this.isCollapsed}\n headingLevel={this.headingLevel}\n onToggleCollapse={() => (this.isCollapsed = !this.isCollapsed)}\n headerRef={(el) => this.focusTarget.setTarget(el)}\n />\n {!this.isCollapsed && [\n this.shouldRenderValues && this.renderValues(),\n this.shouldRenderInput && (\n <atomic-facet-number-input\n type={this.withInput!}\n bindings={this.bindings}\n label={this.label}\n filter={this.filter!}\n filterState={this.filter!.state}\n ></atomic-facet-number-input>\n ),\n ]}\n </FacetContainer>\n ) : (\n <FacetPlaceholder\n isCollapsed={this.isCollapsed}\n numberOfValues={this.numberOfValues}\n />\n )}\n </FacetGuard>\n );\n }\n\n private renderValues() {\n const {\n displayValuesAs,\n field,\n manualRanges,\n label,\n bindings: {\n i18n,\n engine: {logger},\n },\n formatter,\n } = this;\n\n return (\n <NumericFacetValuesContainer i18n={i18n} label={label}>\n {this.valuesToRender.map((value) => (\n <NumericFacetValueLink\n formatter={formatter}\n displayValuesAs={displayValuesAs}\n facetValue={value}\n field={field}\n i18n={i18n}\n logger={logger}\n manualRanges={manualRanges}\n onClick={() =>\n this.displayValuesAs === 'link'\n ? this.facetForRange!.toggleSingleSelect(value)\n : this.facetForRange!.toggleSelect(value)\n }\n />\n ))}\n </NumericFacetValuesContainer>\n );\n }\n\n private get numberOfSelectedValues() {\n if (this.filter?.state.range) {\n return 1;\n }\n\n return (\n this.facetForRange?.state.values.filter(({state}) => state === 'selected')\n .length || 0\n );\n }\n\n private get shouldRenderValues() {\n return (\n !this.hasInputRange &&\n this.numberOfValues > 0 &&\n !!this.valuesToRender.length\n );\n }\n\n private get hasInputRange() {\n return !!this.filter?.state.range;\n }\n\n private get valuesToRender() {\n return (\n this.facetForRange?.state.values.filter(\n (value) => value.numberOfResults || value.state !== 'idle'\n ) || []\n );\n }\n\n private get shouldRenderInput() {\n return shouldDisplayInputForFacetRange({\n hasInputRange: this.hasInputRange,\n searchStatusState: this.searchStatusState,\n facetValues: this.facetForInput?.state.values || [],\n hasInput: !!this.withInput,\n });\n }\n\n private computeFacetId() {\n if (this.facetId) {\n return;\n }\n\n if (this.bindings.store.state.numericFacets[this.field]) {\n this.facetId = randomID(`${this.field}_`);\n }\n\n this.facetId = this.field;\n }\n\n private get enabled() {\n return this.facetState?.enabled ?? this.filter?.state.enabled ?? true;\n }\n\n private get isHidden() {\n return !this.shouldRenderFacet || !this.enabled;\n }\n\n private get shouldRenderFacet() {\n return this.shouldRenderInput || this.shouldRenderValues;\n }\n\n private get hasValues() {\n if (this.facetForInput?.state.values.length) {\n return true;\n }\n\n return !!this.valuesToRender.length;\n }\n\n private validateProps() {\n new Schema({\n displayValuesAs: new StringValue({constrainTo: ['checkbox', 'link']}),\n withInput: new StringValue({constrainTo: ['integer', 'decimal']}),\n }).validate({\n displayValuesAs: this.displayValuesAs,\n withInput: this.withInput,\n });\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-children.js","mappings":"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","names":["AtomicProductChildren"],"sources":["src/components/commerce/
|
|
1
|
+
{"file":"atomic-product-children.js","mappings":"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","names":["AtomicProductChildren"],"sources":["src/components/commerce/atomic-product-children/atomic-product-children.pcss?tag=atomic-product-children","src/components/commerce/atomic-product-children/atomic-product-children.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n\natomic-product-children .children-container {\n display: flex;\n flex-wrap: wrap;\n}\n\n.display-grid {\n atomic-product-children .children-container {\n .product-child:nth-child(n + 6) {\n display: none;\n }\n\n .product-child:nth-child(6) ~ .plus-button {\n display: block;\n }\n\n .product-child:nth-child(6):last-child ~ .plus-button {\n display: none;\n }\n }\n}\n\natomic-product-children .children-container .plus-button {\n display: none;\n}\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {\n Product,\n ChildProduct,\n ProductTemplatesHelpers,\n} from '@coveo/headless/commerce';\nimport {\n Component,\n h,\n Element,\n Prop,\n Event,\n EventEmitter,\n State,\n Host,\n} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {filterProtocol} from '../../../utils/xss-utils';\nimport {Button} from '../../common/stencil-button';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\nimport {SelectChildProductEventArgs} from './select-child-product-event';\n\n/**\n * @alpha\n * The `atomic-product-children` component renders a section that allows the user to select a nested product (e.g., a color variant of a given product).\n *\n * This component leverages the [product grouping](https://docs.coveo.com/en/l78i2152/) feature.\n */\n@Component({\n tag: 'atomic-product-children',\n styleUrl: 'atomic-product-children.pcss',\n shadow: false,\n})\nexport class AtomicProductChildren\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n @State() private children: ChildProduct[] = [];\n @State() private activeChildId: string = '';\n\n public error!: Error;\n\n /**\n * The non-localized label to display for the product children section.\n *\n * Set this to an empty string if you do not want to render the label at all.\n */\n @Prop() public label: string = 'available-in';\n\n /**\n * The child product field to use to render product children images. Fields in the `additionalFields` property of the child products are supported.\n *\n * This field should be defined on each child product, and its value should be an image URL (or an array of image URLs, in which case the component will use the first one in the array).\n */\n @Prop({reflect: true}) field: string = 'ec_thumbnails';\n\n /**\n * A fallback image URL to use when the specified `field` is not defined on a given child product, or when its value is invalid.\n */\n @Prop({reflect: true}) fallback: string =\n // eslint-disable-next-line @cspell/spellchecker\n 'data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"50\" viewBox=\"0 0 50 50\"%3E%3Crect width=\"50\" height=\"50\" fill=\"none\" stroke=\"gray\"%3E%3C/rect%3E%3C/svg%3E';\n\n @Event({\n eventName: 'atomic/selectChildProduct',\n bubbles: true,\n })\n public selectChildProduct!: EventEmitter<SelectChildProductEventArgs>;\n\n constructor() {\n this.validateProps();\n }\n\n public connectedCallback(): void {\n this.activeChildId = this.product.permanentid;\n this.children = this.product.children ?? [];\n }\n\n private validateProps() {\n new Schema({\n label: new StringValue(),\n field: new StringValue(),\n fallback: new StringValue(),\n }).validate({\n label: this.label,\n field: this.field,\n fallback: this.fallback,\n });\n }\n\n private onSelectChild(child: ChildProduct) {\n this.activeChildId = child.permanentid;\n this.selectChildProduct.emit({\n child,\n });\n }\n\n private getImageUrl(child: ChildProduct) {\n const value = ProductTemplatesHelpers.getProductProperty(child, this.field);\n\n if (typeof value === 'string') {\n return filterProtocol(value);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return filterProtocol(value[0]);\n }\n\n return filterProtocol(this.fallback);\n }\n\n private get activeChildClasses() {\n return ' box-border rounded border border-primary ';\n }\n\n // TODO: We could leverage the totalNumberOfRelatedProducts property on the Product to show the number of available children (e.g., ...and 3 more). This would require some UX design however.\n private renderChild(child: ChildProduct) {\n return (\n <button\n class={`product-child${child.permanentid === this.activeChildId ? this.activeChildClasses : ' '}`}\n title={child.ec_name || undefined}\n onKeyPress={(event) =>\n event.key === 'Enter' && this.onSelectChild(child)\n }\n onMouseEnter={() => this.onSelectChild(child)}\n onTouchStart={(event) => {\n event.stopPropagation();\n event.preventDefault();\n this.onSelectChild(child);\n }}\n >\n <img\n class=\"aspect-square p-1\"\n src={this.getImageUrl(child)}\n alt={child.ec_name || undefined}\n loading=\"lazy\"\n />\n </button>\n );\n }\n\n private renderLabel() {\n return (\n <div class=\"text-neutral-dark my-2 font-semibold\">\n <atomic-commerce-text\n value={this.bindings.i18n.t(this.label)}\n ></atomic-commerce-text>\n </div>\n );\n }\n\n public render() {\n if (this.children.length === 0) {\n return null;\n }\n\n return (\n <Host>\n {this.label.trim() !== '' && this.renderLabel()}\n <div class=\"children-container\">\n {this.children.map((child) => this.renderChild(child))}\n <Button style=\"text-primary\" class=\"product-child plus-button\">\n +{this.children.length - 5}\n </Button>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-description.js","mappings":";;;;;;;;AAAA,MAAM,2BAA2B,GAAG,wUAAwU,CAAC;AAC7W,uCAAe,2BAA2B;;;;;;;;;;;;MCuB7BA,0BAAwB;IA+BnC;;;QArBiB,eAAU,GAAG,KAAK,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;;;;QAQtB,kBAAa,GAAkB,GAAG,CAAC;;;;QAKnC,UAAK,GAAsC,cAAc,CAAC;;;;QAK1D,kBAAa,GAAG,IAAI,CAAC;0BAnBN,KAAK;2BACJ,KAAK;6BAQU,GAAG;qBAKS,cAAc;6BAKzC,IAAI;QAGjC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,IACE,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EACrE;gBACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;iBAAM;gBACL,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;aAC1B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa;QACnB,IAAI,MAAM,CAAC;YACT,aAAa,EAAE,IAAI,WAAW,CAAC;gBAC7B,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAC1C,CAAC;YACF,KAAK,EAAE,IAAI,WAAW,CAAC;gBACrB,WAAW,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;aAChD,CAAC;SACH,CAAC,CAAC,QAAQ,CAAC;YACV,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;KACJ;IAED,gBAAgB;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CACnD,kBAAkB,CACD,CAAC;QACpB,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACnD;KACF;IAEO,cAAc,CAAC,CAAc;QACnC,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,eAAe,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;IAED,oBAAoB;QAClB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;KAClC;IAEM,MAAM;QACX,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAE5D,IAAI,CAAC,kBAAkB,EAAE;YACvB,OAAO,EAAC,MAAM,OAAG,CAAC;SACnB;QAED,QACE,EAAC,cAAc,IACb,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAC7C,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,aAAa,IAEjC,2BAAqB,KAAK,EAAE,IAAI,CAAC,KAAK,GAAwB,CAC/C,EACjB;KACH;;;;;;;;;;AAjG4B;IAA5B,kBAAkB,EAAE;4DAAoC;AAC/B;IAAzB,cAAc,EAAE;2DAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductDescription"],"sources":["src/components/commerce/
|
|
1
|
+
{"file":"atomic-product-description.js","mappings":";;;;;;;;AAAA,MAAM,2BAA2B,GAAG,wUAAwU,CAAC;AAC7W,uCAAe,2BAA2B;;;;;;;;;;;;MCuB7BA,0BAAwB;IA+BnC;;;QArBiB,eAAU,GAAG,KAAK,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;;;;QAQtB,kBAAa,GAAkB,GAAG,CAAC;;;;QAKnC,UAAK,GAAsC,cAAc,CAAC;;;;QAK1D,kBAAa,GAAG,IAAI,CAAC;0BAnBN,KAAK;2BACJ,KAAK;6BAQU,GAAG;qBAKS,cAAc;6BAKzC,IAAI;QAGjC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,IACE,IAAI,CAAC,eAAe;gBACpB,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EACrE;gBACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;iBAAM;gBACL,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;aAC1B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa;QACnB,IAAI,MAAM,CAAC;YACT,aAAa,EAAE,IAAI,WAAW,CAAC;gBAC7B,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAC1C,CAAC;YACF,KAAK,EAAE,IAAI,WAAW,CAAC;gBACrB,WAAW,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;aAChD,CAAC;SACH,CAAC,CAAC,QAAQ,CAAC;YACV,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;KACJ;IAED,gBAAgB;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CACnD,kBAAkB,CACD,CAAC;QACpB,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACnD;KACF;IAEO,cAAc,CAAC,CAAc;QACnC,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,eAAe,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;IAED,oBAAoB;QAClB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;KAClC;IAEM,MAAM;QACX,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAE5D,IAAI,CAAC,kBAAkB,EAAE;YACvB,OAAO,EAAC,MAAM,OAAG,CAAC;SACnB;QAED,QACE,EAAC,cAAc,IACb,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAC7C,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,aAAa,IAEjC,2BAAqB,KAAK,EAAE,IAAI,CAAC,KAAK,GAAwB,CAC/C,EACjB;KACH;;;;;;;;;;AAjG4B;IAA5B,kBAAkB,EAAE;4DAAoC;AAC/B;IAAzB,cAAc,EAAE;2DAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductDescription"],"sources":["src/components/commerce/atomic-product-description/atomic-product-description.pcss?tag=atomic-product-description","src/components/commerce/atomic-product-description/atomic-product-description.tsx"],"sourcesContent":["@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-description` component renders the description of a product.\n */\n@Component({\n tag: 'atomic-product-description',\n styleUrl: 'atomic-product-description.pcss',\n shadow: false,\n})\nexport class AtomicProductDescription\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private descriptionText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product description should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * The name of the description field to use.\n */\n @Prop() public field: 'ec_description' | 'ec_shortdesc' = 'ec_shortdesc';\n\n /**\n * Whether the description should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = true;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.descriptionText &&\n this.descriptionText.scrollHeight > this.descriptionText.clientHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n field: new StringValue({\n constrainTo: ['ec_shortdesc', 'ec_description'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n field: this.field,\n });\n }\n\n componentDidLoad() {\n this.descriptionText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.descriptionText) {\n this.resizeObserver.observe(this.descriptionText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productDescription = this.product[this.field] ?? null;\n\n if (!productDescription) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field={this.field}></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-excerpt.js","mappings":";;;;;;;;AAAA,MAAM,uBAAuB,GAAG,wUAAwU,CAAC;AACzW,mCAAe,uBAAuB;;;;;;;;;;;;MCuBzBA,sBAAoB;IA0B/B;;;QAhBiB,eAAU,GAAG,KAAK,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;;;;QAQtB,kBAAa,GAAkB,GAAG,CAAC;;;;QAKnC,kBAAa,GAAG,KAAK,CAAC;0BAdP,KAAK;2BACJ,KAAK;6BAQU,GAAG;6BAKlB,KAAK;QAGlC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,IACE,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAC7D;gBACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;iBAAM;gBACL,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;aAC1B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa;QACnB,IAAI,MAAM,CAAC;YACT,aAAa,EAAE,IAAI,WAAW,CAAC;gBAC7B,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAC1C,CAAC;SACH,CAAC,CAAC,QAAQ,CAAC;YACV,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;KACJ;IAED,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAC/C,kBAAkB,CACD,CAAC;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/C;KACF;IAEO,cAAc,CAAC,CAAc;QACnC,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,eAAe,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;IAED,oBAAoB;QAClB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;KAClC;IAEM,MAAM;QACX,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QAEvD,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,EAAC,MAAM,OAAG,CAAC;SACnB;QAED,QACE,EAAC,cAAc,IACb,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAC7C,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,aAAa,IAEjC,2BAAqB,KAAK,EAAC,SAAS,GAAuB,CAC5C,EACjB;KACH;;;;;;;;;AAxF4B;IAA5B,kBAAkB,EAAE;wDAAoC;AAC/B;IAAzB,cAAc,EAAE;uDAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductExcerpt"],"sources":["src/components/commerce/
|
|
1
|
+
{"file":"atomic-product-excerpt.js","mappings":";;;;;;;;AAAA,MAAM,uBAAuB,GAAG,wUAAwU,CAAC;AACzW,mCAAe,uBAAuB;;;;;;;;;;;;MCuBzBA,sBAAoB;IA0B/B;;;QAhBiB,eAAU,GAAG,KAAK,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;;;;QAQtB,kBAAa,GAAkB,GAAG,CAAC;;;;QAKnC,kBAAa,GAAG,KAAK,CAAC;0BAdP,KAAK;2BACJ,KAAK;6BAQU,GAAG;6BAKlB,KAAK;QAGlC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,IACE,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAC7D;gBACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;iBAAM;gBACL,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;aAC1B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa;QACnB,IAAI,MAAM,CAAC;YACT,aAAa,EAAE,IAAI,WAAW,CAAC;gBAC7B,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aAC1C,CAAC;SACH,CAAC,CAAC,QAAQ,CAAC;YACV,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;KACJ;IAED,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAC/C,kBAAkB,CACD,CAAC;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/C;KACF;IAEO,cAAc,CAAC,CAAc;QACnC,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,eAAe,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;IAED,oBAAoB;QAClB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;KAClC;IAEM,MAAM;QACX,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QAEvD,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,EAAC,MAAM,OAAG,CAAC;SACnB;QAED,QACE,EAAC,cAAc,IACb,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAC7C,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAChD,aAAa,EAAE,IAAI,CAAC,aAAa,IAEjC,2BAAqB,KAAK,EAAC,SAAS,GAAuB,CAC5C,EACjB;KACH;;;;;;;;;AAxF4B;IAA5B,kBAAkB,EAAE;wDAAoC;AAC/B;IAAzB,cAAc,EAAE;uDAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductExcerpt"],"sources":["src/components/commerce/atomic-product-excerpt/atomic-product-excerpt.pcss?tag=atomic-product-excerpt","src/components/commerce/atomic-product-excerpt/atomic-product-excerpt.tsx"],"sourcesContent":["@import '../../common/expandable-text/expandable-text.pcss';\n","import {Schema, StringValue} from '@coveo/bueno';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, State, h, Element, Prop} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {\n ExpandableText,\n TruncateAfter,\n} from '../../common/expandable-text/expandable-text';\nimport {Hidden} from '../../common/stencil-hidden';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-excerpt` component renders the excerpt of a product generated at query time.\n */\n@Component({\n tag: 'atomic-product-excerpt',\n styleUrl: 'atomic-product-excerpt.pcss',\n shadow: false,\n})\nexport class AtomicProductExcerpt\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() hostElement!: HTMLElement;\n\n public error!: Error;\n\n @State() private isExpanded = false;\n @State() private isTruncated = false;\n\n private excerptText!: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n\n /**\n * The number of lines after which the product excerpt should be truncated. A value of \"none\" will disable truncation.\n */\n @Prop() public truncateAfter: TruncateAfter = '2';\n\n /**\n * Whether the excerpt should be collapsible after being expanded.\n */\n @Prop() public isCollapsible = false;\n\n constructor() {\n this.resizeObserver = new ResizeObserver(() => {\n if (\n this.excerptText &&\n this.excerptText.scrollHeight > this.excerptText.offsetHeight\n ) {\n this.isTruncated = true;\n } else {\n this.isTruncated = false;\n }\n });\n this.validateProps();\n }\n\n private validateProps() {\n new Schema({\n truncateAfter: new StringValue({\n constrainTo: ['none', '1', '2', '3', '4'],\n }),\n }).validate({\n truncateAfter: this.truncateAfter,\n });\n }\n\n componentDidLoad() {\n this.excerptText = this.hostElement.querySelector(\n '.expandable-text'\n ) as HTMLDivElement;\n if (this.excerptText) {\n this.resizeObserver.observe(this.excerptText);\n }\n }\n\n private onToggleExpand(e?: MouseEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.isExpanded = !this.isExpanded;\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n public render() {\n const productExcerpt = this.product['excerpt'] ?? null;\n\n if (!productExcerpt) {\n return <Hidden />;\n }\n\n return (\n <ExpandableText\n isExpanded={this.isExpanded}\n isTruncated={this.isTruncated}\n truncateAfter={this.truncateAfter}\n onToggleExpand={(e) => this.onToggleExpand(e)}\n showMoreLabel={this.bindings.i18n.t('show-more')}\n showLessLabel={this.bindings.i18n.t('show-less')}\n isCollapsible={this.isCollapsible}\n >\n <atomic-product-text field=\"excerpt\"></atomic-product-text>\n </ExpandableText>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-field-condition.js","mappings":"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","names":["AtomicProductFieldCondition"],"sources":["src/utils/set.ts","src/components/common/product-template/product-template-common.ts","src/components/common/product-template/stencil-product-template-common.tsx","src/components/commerce/product-template-components/atomic-product-field-condition/atomic-product-field-condition.tsx"],"sourcesContent":["// TODO: Replace by Set.prototype.intersection in July 2025\nexport function intersection<T>(setA: Set<T>, setB: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const elem of setA) {\n if (setB.has(elem)) {\n result.add(elem);\n }\n }\n return result;\n}\n","import {\n ProductTemplateCondition,\n ProductTemplatesHelpers,\n} from '@coveo/headless/commerce';\nimport {intersection} from '../../../utils/set';\nimport {isElementNode, isVisualNode} from '../../../utils/utils';\nimport {tableElementTagName} from '../../search/atomic-table-result/table-element-utils';\nimport {isResultSectionNode} from '../layout/sections';\n\ntype TemplateNodeType =\n | 'section'\n | 'metadata'\n | 'table-column-definition'\n | 'other';\n\nexport function getTemplateNodeType(node: Node): TemplateNodeType {\n if (isResultSectionNode(node)) {\n return 'section';\n }\n if (!isVisualNode(node)) {\n return 'metadata';\n }\n if (\n isElementNode(node) &&\n node.tagName.toLowerCase() === tableElementTagName\n ) {\n return 'table-column-definition';\n }\n return 'other';\n}\n\nexport function makeMatchConditions(\n mustMatch: Record<string, string[]>,\n mustNotMatch: Record<string, string[]>\n): ProductTemplateCondition[] {\n const conditions: ProductTemplateCondition[] = [];\n for (const field in mustMatch) {\n if (mustNotMatch[field]) {\n const mustNotMatchValues = new Set(mustNotMatch[field]);\n const mustMatchValues = new Set(mustMatch[field]);\n const commonValues = intersection(mustNotMatchValues, mustMatchValues);\n if (commonValues.size > 0) {\n console.error(\n `Conflicting match conditions for field ${field}, the template will be ignored.`,\n commonValues\n );\n return [() => false];\n }\n }\n conditions.push(\n ProductTemplatesHelpers.fieldMustMatch(field, mustMatch[field])\n );\n }\n\n for (const field in mustNotMatch) {\n conditions.push(\n ProductTemplatesHelpers.fieldMustNotMatch(field, mustNotMatch[field])\n );\n }\n return conditions;\n}\n\nexport function makeDefinedConditions(\n ifDefined?: string,\n ifNotDefined?: string\n): ProductTemplateCondition[] {\n const conditions: ProductTemplateCondition[] = [];\n if (ifDefined) {\n const fieldNames = ifDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustBeDefined(fieldNames));\n }\n\n if (ifNotDefined) {\n const fieldNames = ifNotDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustNotBeDefined(fieldNames));\n }\n return conditions;\n}\n","import {aggregate, isElementNode, isVisualNode} from '@/src/utils/utils';\nimport {\n ProductTemplate,\n ProductTemplateCondition,\n ProductTemplatesHelpers,\n} from '@coveo/headless/commerce';\nimport {h} from '@stencil/core';\nimport {tableElementTagName} from '../../search/atomic-table-result/table-element-utils';\nimport {ItemTarget} from '../layout/display-options';\nimport {isResultSectionNode} from '../layout/sections';\n\nexport {makeMatchConditions} from './product-template-common';\n\nexport type TemplateContent = DocumentFragment;\n\ninterface ProductTemplateCommonProps {\n allowEmpty?: boolean;\n host: HTMLDivElement;\n validParents: string[];\n setError: (error: Error) => void;\n}\n\ntype TemplateNodeType =\n | 'section'\n | 'metadata'\n | 'table-column-definition'\n | 'other';\n\nexport function getTemplateNodeType(node: Node): TemplateNodeType {\n if (isResultSectionNode(node)) {\n return 'section';\n }\n if (!isVisualNode(node)) {\n return 'metadata';\n }\n if (\n isElementNode(node) &&\n node.tagName.toLowerCase() === tableElementTagName\n ) {\n return 'table-column-definition';\n }\n return 'other';\n}\n\nfunction groupNodesByType(nodes: NodeList) {\n return aggregate(Array.from(nodes), (node) => getTemplateNodeType(node));\n}\n\n/**\n * @deprecated Use `ProductTemplateController` Reactive controller instead.\n */\nexport class ProductTemplateCommon {\n private host: HTMLDivElement;\n public matchConditions: ProductTemplateCondition[] = [];\n private gridCellLinkTarget?: ItemTarget;\n\n constructor({\n host,\n setError,\n validParents,\n allowEmpty = false,\n }: ProductTemplateCommonProps) {\n this.host = host;\n this.validateTemplate(host, setError, validParents, allowEmpty);\n }\n\n validateTemplate(\n host: HTMLDivElement,\n setError: (error: Error) => void,\n validParents: string[],\n allowEmpty = true\n ) {\n const hasValidParent = validParents\n .map((p) => p.toUpperCase())\n .includes(host.parentElement?.nodeName || '');\n const tagName = host.nodeName.toLowerCase();\n\n if (!hasValidParent) {\n setError(\n new Error(\n `The \"${tagName}\" component has to be the child of one of the following: ${validParents\n .map((p) => `\"${p.toLowerCase()}\"`)\n .join(', ')}.`\n )\n );\n return;\n }\n\n if (\n host.parentElement?.attributes.getNamedItem('display')?.value === 'grid'\n ) {\n this.gridCellLinkTarget = host.parentElement?.attributes.getNamedItem(\n 'grid-cell-link-target'\n )?.value as ItemTarget;\n }\n\n const template = host.querySelector('template');\n if (!template) {\n setError(\n new Error(\n `The \"${tagName}\" component must contain a \"template\" element as a child.`\n )\n );\n return;\n }\n\n if (!allowEmpty && !template.innerHTML.trim()) {\n setError(\n new Error(`The \"template\" tag inside \"${tagName}\" cannot be empty.`)\n );\n return;\n }\n\n if (template.content.querySelector('script')) {\n console.warn(\n 'Any \"script\" tags defined inside of \"template\" elements are not supported and will not be executed when the products are rendered.',\n host\n );\n }\n\n const {section: sectionNodes, other: otherNodes} = groupNodesByType(\n template.content.childNodes\n );\n if (sectionNodes?.length && otherNodes?.length) {\n console.warn(\n 'Product templates should only contain section elements or non-section elements. Future updates could unpredictably affect this product template.',\n host,\n {sectionNodes, otherNodes}\n );\n }\n }\n\n getTemplate(\n conditions: ProductTemplateCondition[],\n error: Error\n ): ProductTemplate<TemplateContent> | null {\n if (error) {\n return null;\n }\n\n return {\n conditions: conditions.concat(this.matchConditions),\n content: getTemplateElement(this.host).content!,\n linkContent: this.getLinkTemplateElement(this.host).content!,\n priority: 1,\n };\n }\n\n renderIfError(error: Error) {\n if (error) {\n return (\n <atomic-component-error\n element={this.host}\n error={error}\n ></atomic-component-error>\n );\n }\n }\n getDefaultLinkTemplateElement() {\n const linkTemplate = document.createElement('template');\n linkTemplate.innerHTML = `<atomic-product-link>${this.gridCellLinkTarget ? `<a slot=\"attributes\" target=\"${this.gridCellLinkTarget}\"></a>` : ''}</atomic-product-link>`;\n return linkTemplate;\n }\n\n getLinkTemplateElement(host: HTMLElement) {\n return (\n host.querySelector<HTMLTemplateElement>('template[slot=\"link\"]') ??\n this.getDefaultLinkTemplateElement()\n );\n }\n}\n\nfunction getTemplateElement(host: HTMLElement) {\n return host.querySelector<HTMLTemplateElement>('template:not([slot])')!;\n}\n\nexport function makeDefinedConditions(\n ifDefined?: string,\n ifNotDefined?: string\n): ProductTemplateCondition[] {\n const conditions: ProductTemplateCondition[] = [];\n if (ifDefined) {\n const fieldNames = ifDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustBeDefined(fieldNames));\n }\n\n if (ifNotDefined) {\n const fieldNames = ifNotDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustNotBeDefined(fieldNames));\n }\n return conditions;\n}\n","import {Product, ProductTemplateCondition} from '@coveo/headless/commerce';\nimport {Component, Prop, h, Element} from '@stencil/core';\nimport {MapProp} from '../../../../utils/props-utils';\nimport {\n makeDefinedConditions,\n makeMatchConditions,\n} from '../../../common/product-template/stencil-product-template-common';\nimport {ProductContext} from '../stencil-product-template-decorators';\n\n/**\n * The `atomic-product-field-condition` component takes a list of conditions that, if fulfilled, apply the template in which it's defined.\n * The condition properties can be based on any top-level product property of the `product` object, not restricted to fields (e.g., `ec_name`).\n * @alpha\n */\n@Component({\n tag: 'atomic-product-field-condition',\n shadow: false,\n})\nexport class AtomicProductFieldCondition {\n @Element() host!: HTMLElement;\n\n /**\n * Verifies whether the specified fields are defined.\n */\n @Prop({reflect: true}) ifDefined?: string;\n /**\n * Verifies whether the specified fields are not defined.\n */\n @Prop({reflect: true}) ifNotDefined?: string;\n\n /**\n * Verifies whether the specified fields match the specified values.\n * @type {Record<string, string[]>}\n */\n @Prop() @MapProp({splitValues: true}) mustMatch: Record<string, string[]> =\n {};\n\n /**\n * Verifies whether the specified fields do not match the specified values.\n * @type {Record<string, string[]>}\n */\n @Prop() @MapProp({splitValues: true}) mustNotMatch: Record<string, string[]> =\n {};\n\n private conditions: ProductTemplateCondition[] = [];\n private shouldBeRemoved = false;\n\n @ProductContext() private product!: Product;\n\n public componentWillLoad() {\n this.conditions = makeDefinedConditions(this.ifDefined, this.ifNotDefined);\n this.conditions.push(\n ...makeMatchConditions(this.mustMatch, this.mustNotMatch)\n );\n }\n\n public render() {\n if (!this.conditions.every((condition) => condition(this.product))) {\n this.shouldBeRemoved = true;\n return '';\n }\n\n return <slot />;\n }\n\n public componentDidLoad() {\n this.shouldBeRemoved && this.host.remove();\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"atomic-product-field-condition.js","mappings":"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","names":["AtomicProductFieldCondition"],"sources":["src/utils/set.ts","src/components/common/product-template/product-template-common.ts","src/components/common/product-template/stencil-product-template-common.tsx","src/components/commerce/atomic-product-field-condition/atomic-product-field-condition.tsx"],"sourcesContent":["// TODO: Replace by Set.prototype.intersection in July 2025\nexport function intersection<T>(setA: Set<T>, setB: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const elem of setA) {\n if (setB.has(elem)) {\n result.add(elem);\n }\n }\n return result;\n}\n","import {\n ProductTemplateCondition,\n ProductTemplatesHelpers,\n} from '@coveo/headless/commerce';\nimport {intersection} from '../../../utils/set';\nimport {isElementNode, isVisualNode} from '../../../utils/utils';\nimport {tableElementTagName} from '../../search/atomic-table-result/table-element-utils';\nimport {isResultSectionNode} from '../layout/sections';\n\ntype TemplateNodeType =\n | 'section'\n | 'metadata'\n | 'table-column-definition'\n | 'other';\n\nexport function getTemplateNodeType(node: Node): TemplateNodeType {\n if (isResultSectionNode(node)) {\n return 'section';\n }\n if (!isVisualNode(node)) {\n return 'metadata';\n }\n if (\n isElementNode(node) &&\n node.tagName.toLowerCase() === tableElementTagName\n ) {\n return 'table-column-definition';\n }\n return 'other';\n}\n\nexport function makeMatchConditions(\n mustMatch: Record<string, string[]>,\n mustNotMatch: Record<string, string[]>\n): ProductTemplateCondition[] {\n const conditions: ProductTemplateCondition[] = [];\n for (const field in mustMatch) {\n if (mustNotMatch[field]) {\n const mustNotMatchValues = new Set(mustNotMatch[field]);\n const mustMatchValues = new Set(mustMatch[field]);\n const commonValues = intersection(mustNotMatchValues, mustMatchValues);\n if (commonValues.size > 0) {\n console.error(\n `Conflicting match conditions for field ${field}, the template will be ignored.`,\n commonValues\n );\n return [() => false];\n }\n }\n conditions.push(\n ProductTemplatesHelpers.fieldMustMatch(field, mustMatch[field])\n );\n }\n\n for (const field in mustNotMatch) {\n conditions.push(\n ProductTemplatesHelpers.fieldMustNotMatch(field, mustNotMatch[field])\n );\n }\n return conditions;\n}\n\nexport function makeDefinedConditions(\n ifDefined?: string,\n ifNotDefined?: string\n): ProductTemplateCondition[] {\n const conditions: ProductTemplateCondition[] = [];\n if (ifDefined) {\n const fieldNames = ifDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustBeDefined(fieldNames));\n }\n\n if (ifNotDefined) {\n const fieldNames = ifNotDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustNotBeDefined(fieldNames));\n }\n return conditions;\n}\n","import {aggregate, isElementNode, isVisualNode} from '@/src/utils/utils';\nimport {\n ProductTemplate,\n ProductTemplateCondition,\n ProductTemplatesHelpers,\n} from '@coveo/headless/commerce';\nimport {h} from '@stencil/core';\nimport {tableElementTagName} from '../../search/atomic-table-result/table-element-utils';\nimport {ItemTarget} from '../layout/display-options';\nimport {isResultSectionNode} from '../layout/sections';\n\nexport {makeMatchConditions} from './product-template-common';\n\nexport type TemplateContent = DocumentFragment;\n\ninterface ProductTemplateCommonProps {\n allowEmpty?: boolean;\n host: HTMLDivElement;\n validParents: string[];\n setError: (error: Error) => void;\n}\n\ntype TemplateNodeType =\n | 'section'\n | 'metadata'\n | 'table-column-definition'\n | 'other';\n\nexport function getTemplateNodeType(node: Node): TemplateNodeType {\n if (isResultSectionNode(node)) {\n return 'section';\n }\n if (!isVisualNode(node)) {\n return 'metadata';\n }\n if (\n isElementNode(node) &&\n node.tagName.toLowerCase() === tableElementTagName\n ) {\n return 'table-column-definition';\n }\n return 'other';\n}\n\nfunction groupNodesByType(nodes: NodeList) {\n return aggregate(Array.from(nodes), (node) => getTemplateNodeType(node));\n}\n\n/**\n * @deprecated Use `ProductTemplateController` Reactive controller instead.\n */\nexport class ProductTemplateCommon {\n private host: HTMLDivElement;\n public matchConditions: ProductTemplateCondition[] = [];\n private gridCellLinkTarget?: ItemTarget;\n\n constructor({\n host,\n setError,\n validParents,\n allowEmpty = false,\n }: ProductTemplateCommonProps) {\n this.host = host;\n this.validateTemplate(host, setError, validParents, allowEmpty);\n }\n\n validateTemplate(\n host: HTMLDivElement,\n setError: (error: Error) => void,\n validParents: string[],\n allowEmpty = true\n ) {\n const hasValidParent = validParents\n .map((p) => p.toUpperCase())\n .includes(host.parentElement?.nodeName || '');\n const tagName = host.nodeName.toLowerCase();\n\n if (!hasValidParent) {\n setError(\n new Error(\n `The \"${tagName}\" component has to be the child of one of the following: ${validParents\n .map((p) => `\"${p.toLowerCase()}\"`)\n .join(', ')}.`\n )\n );\n return;\n }\n\n if (\n host.parentElement?.attributes.getNamedItem('display')?.value === 'grid'\n ) {\n this.gridCellLinkTarget = host.parentElement?.attributes.getNamedItem(\n 'grid-cell-link-target'\n )?.value as ItemTarget;\n }\n\n const template = host.querySelector('template');\n if (!template) {\n setError(\n new Error(\n `The \"${tagName}\" component must contain a \"template\" element as a child.`\n )\n );\n return;\n }\n\n if (!allowEmpty && !template.innerHTML.trim()) {\n setError(\n new Error(`The \"template\" tag inside \"${tagName}\" cannot be empty.`)\n );\n return;\n }\n\n if (template.content.querySelector('script')) {\n console.warn(\n 'Any \"script\" tags defined inside of \"template\" elements are not supported and will not be executed when the products are rendered.',\n host\n );\n }\n\n const {section: sectionNodes, other: otherNodes} = groupNodesByType(\n template.content.childNodes\n );\n if (sectionNodes?.length && otherNodes?.length) {\n console.warn(\n 'Product templates should only contain section elements or non-section elements. Future updates could unpredictably affect this product template.',\n host,\n {sectionNodes, otherNodes}\n );\n }\n }\n\n getTemplate(\n conditions: ProductTemplateCondition[],\n error: Error\n ): ProductTemplate<TemplateContent> | null {\n if (error) {\n return null;\n }\n\n return {\n conditions: conditions.concat(this.matchConditions),\n content: getTemplateElement(this.host).content!,\n linkContent: this.getLinkTemplateElement(this.host).content!,\n priority: 1,\n };\n }\n\n renderIfError(error: Error) {\n if (error) {\n return (\n <atomic-component-error\n element={this.host}\n error={error}\n ></atomic-component-error>\n );\n }\n }\n getDefaultLinkTemplateElement() {\n const linkTemplate = document.createElement('template');\n linkTemplate.innerHTML = `<atomic-product-link>${this.gridCellLinkTarget ? `<a slot=\"attributes\" target=\"${this.gridCellLinkTarget}\"></a>` : ''}</atomic-product-link>`;\n return linkTemplate;\n }\n\n getLinkTemplateElement(host: HTMLElement) {\n return (\n host.querySelector<HTMLTemplateElement>('template[slot=\"link\"]') ??\n this.getDefaultLinkTemplateElement()\n );\n }\n}\n\nfunction getTemplateElement(host: HTMLElement) {\n return host.querySelector<HTMLTemplateElement>('template:not([slot])')!;\n}\n\nexport function makeDefinedConditions(\n ifDefined?: string,\n ifNotDefined?: string\n): ProductTemplateCondition[] {\n const conditions: ProductTemplateCondition[] = [];\n if (ifDefined) {\n const fieldNames = ifDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustBeDefined(fieldNames));\n }\n\n if (ifNotDefined) {\n const fieldNames = ifNotDefined.split(',');\n conditions.push(ProductTemplatesHelpers.fieldsMustNotBeDefined(fieldNames));\n }\n return conditions;\n}\n","import {Product, ProductTemplateCondition} from '@coveo/headless/commerce';\nimport {Component, Prop, h, Element} from '@stencil/core';\nimport {MapProp} from '../../../utils/props-utils';\nimport {\n makeDefinedConditions,\n makeMatchConditions,\n} from '../../common/product-template/stencil-product-template-common';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * The `atomic-product-field-condition` component takes a list of conditions that, if fulfilled, apply the template in which it's defined.\n * The condition properties can be based on any top-level product property of the `product` object, not restricted to fields (e.g., `ec_name`).\n * @alpha\n */\n@Component({\n tag: 'atomic-product-field-condition',\n shadow: false,\n})\nexport class AtomicProductFieldCondition {\n @Element() host!: HTMLElement;\n\n /**\n * Verifies whether the specified fields are defined.\n */\n @Prop({reflect: true}) ifDefined?: string;\n /**\n * Verifies whether the specified fields are not defined.\n */\n @Prop({reflect: true}) ifNotDefined?: string;\n\n /**\n * Verifies whether the specified fields match the specified values.\n * @type {Record<string, string[]>}\n */\n @Prop() @MapProp({splitValues: true}) mustMatch: Record<string, string[]> =\n {};\n\n /**\n * Verifies whether the specified fields do not match the specified values.\n * @type {Record<string, string[]>}\n */\n @Prop() @MapProp({splitValues: true}) mustNotMatch: Record<string, string[]> =\n {};\n\n private conditions: ProductTemplateCondition[] = [];\n private shouldBeRemoved = false;\n\n @ProductContext() private product!: Product;\n\n public componentWillLoad() {\n this.conditions = makeDefinedConditions(this.ifDefined, this.ifNotDefined);\n this.conditions.push(\n ...makeMatchConditions(this.mustMatch, this.mustNotMatch)\n );\n }\n\n public render() {\n if (!this.conditions.every((condition) => condition(this.product))) {\n this.shouldBeRemoved = true;\n return '';\n }\n\n return <slot />;\n }\n\n public componentDidLoad() {\n this.shouldBeRemoved && this.host.remove();\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-image.js","mappings":"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","names":["AtomicProductImage"],"sources":["src/components/common/image-carousel/image-carousel-indicators.tsx","src/components/common/image-carousel/image-carousel.tsx","src/components/commerce/product-template-components/atomic-product-image/atomic-product-image.pcss?tag=atomic-product-image&encapsulation=shadow","src/components/commerce/product-template-components/atomic-product-image/atomic-product-image.tsx"],"sourcesContent":["/* eslint-disable @cspell/spellchecker */\nimport {FunctionalComponent, h} from '@stencil/core';\n\ninterface CarouselIndicatorProps {\n numberOfImages: number;\n currentImage: number;\n navigateToImage: (index: number) => void;\n maxImagesBeforeAndAfter?: number;\n}\n\nconst CarouselIndicator: FunctionalComponent<CarouselIndicatorProps> = ({\n numberOfImages,\n currentImage: currentImage,\n navigateToImage: navigateToImage,\n maxImagesBeforeAndAfter = 2,\n}) => {\n return (\n <ul\n part=\"indicators\"\n class=\"absolute bottom-2 mt-6 mb-1 flex max-w-4/5 items-center justify-center gap-2\"\n >\n {Array.from({length: numberOfImages}, (_, index) => {\n const isActive = index === currentImage % numberOfImages;\n\n const shouldDisplay =\n index >= Math.max(0, currentImage - maxImagesBeforeAndAfter) &&\n index <=\n Math.min(\n currentImage + maxImagesBeforeAndAfter,\n numberOfImages - 1\n );\n\n const isLastDisplayed =\n index ===\n Math.min(\n currentImage + maxImagesBeforeAndAfter,\n numberOfImages - 1\n ) && index < numberOfImages - 1;\n\n const isFirstDisplayed =\n index === Math.max(0, currentImage - maxImagesBeforeAndAfter) &&\n index > 0;\n\n return (\n <li\n part={`indicator ${isActive ? 'active-indicator' : ''}`}\n class={`hover:bg-primary-light cursor-pointer rounded-md shadow transition-all duration-200 ease-in-out ${\n isActive ? 'bg-primary' : 'bg-neutral'\n } ${isLastDisplayed || isFirstDisplayed ? 'mobile-only:w-2 mobile-only:h-2 h-1 w-1 scale-75 transform' : 'mobile-only:w-3 mobile-only:h-3 h-2 w-2 scale-100 transform'} ${\n shouldDisplay\n ? 'pointer-events-auto opacity-80'\n : 'pointer-events-none hidden opacity-0'\n }`}\n onClick={(event) => {\n event.stopPropagation();\n navigateToImage(index);\n }}\n ></li>\n );\n })}\n </ul>\n );\n};\n\nexport default CarouselIndicator;\n","import {h, FunctionalComponent, Fragment} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport ArrowRight from '../../../images/arrow-right.svg';\nimport {AnyBindings} from '../interface/bindings';\nimport {Button} from '../stencil-button';\nimport CarouselIndicator from './image-carousel-indicators';\n\nexport interface CarouselProps {\n bindings: AnyBindings;\n previousImage(): void;\n nextImage(): void;\n navigateToImage(index: number): void;\n numberOfImages: number;\n currentImage: number;\n}\n\nexport const ImageCarousel: FunctionalComponent<\n CarouselProps & JSXBase.HTMLAttributes<HTMLHeadingElement>\n> = (props, children) => {\n const commonPaginationClasses =\n 'w-6 h-6 grid mobile-only:w-10 mobile-only:h-10 justify-center items-center z-1 group rounded-full duration-200 opacity-50 hover:opacity-100 focus:opacity-100 transition-opacity hover:shadow-sm bottom-0 mb-1 absolute';\n const commonArrowClasses =\n 'w-4 align-middle text-on-background group-hover:text-primary';\n\n function renderPreviousButton() {\n return (\n <Button\n style=\"text-primary\"\n ariaLabel={props.bindings.i18n.t('previous')}\n onClick={(event) => {\n event?.stopPropagation();\n props.previousImage();\n }}\n part=\"previous-button\"\n class={`${commonPaginationClasses} left-0 ml-1`}\n >\n <atomic-icon\n icon={ArrowRight}\n class={`${commonArrowClasses} rotate-180`}\n ></atomic-icon>\n </Button>\n );\n }\n\n function renderNextButton() {\n return (\n <Button\n style=\"text-primary\"\n ariaLabel={props.bindings.i18n.t('next')}\n onClick={(event) => {\n event?.stopPropagation();\n props.nextImage();\n }}\n part=\"next-button\"\n class={`${commonPaginationClasses} right-0 mr-1`}\n >\n <atomic-icon icon={ArrowRight} class={commonArrowClasses}></atomic-icon>\n </Button>\n );\n }\n function renderIndicators() {\n return (\n <CarouselIndicator\n numberOfImages={props.numberOfImages}\n currentImage={props.currentImage}\n navigateToImage={props.navigateToImage}\n />\n );\n }\n return (\n <Fragment>\n <div class=\"relative flex w-full min-w-full items-center justify-center\">\n {renderPreviousButton()}\n {children}\n {renderNextButton()}\n {renderIndicators()}\n </div>\n </Fragment>\n );\n};\n","@import '../../../../global/global.pcss';\n@import '../../../common/item-list/styles/mixins.pcss';\n@import '../../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: grid;\n place-items: center;\n grid-template-rows: 100%;\n width: 100%;\n height: 100%;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n}\n","import {isNullOrUndefined} from '@coveo/bueno';\nimport {Product, ProductTemplatesHelpers} from '@coveo/headless/commerce';\nimport {Component, h, Prop, Element, State, Method} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {filterProtocol} from '../../../../utils/xss-utils';\nimport {ImageCarousel} from '../../../common/image-carousel/image-carousel';\nimport {CommerceBindings as Bindings} from '../../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../stencil-product-template-decorators';\n\ntype Image = {\n src: string;\n alt: string;\n};\n\n/**\n * The `atomic-product-image` component renders an image from a product field.\n * @alpha\n */\n@Component({\n tag: 'atomic-product-image',\n styleUrl: 'atomic-product-image.pcss',\n shadow: true,\n})\nexport class AtomicProductImage implements InitializableComponent<Bindings> {\n @InitializeBindings() public bindings!: Bindings;\n @ProductContext() private product!: Product;\n @Element() private host!: HTMLElement;\n @State() private useFallback = false;\n @State() private currentImage = 0;\n @State() private images: Image[] = [];\n\n public error!: Error;\n\n /**\n * The product field which the component should use. This will look for the field in the product object first, then in the product.additionalFields object.\n */\n @Prop({reflect: true}) field: string = 'ec_thumbnails';\n\n /**\n * The product field that contains the alt text for the images. This will look for the field in the product object first, then in the product.additionalFields object.\n * If the product has multiple images, the value of the `imageAltField` will be used as the alt text for every image.\n *\n * If the field is not specified, or does not contain a valid value, the alt text will be set to \"Image {index} out of {totalImages} for {productName}\".\n * @type {string}\n */\n @Prop({reflect: true}) imageAltField?: string;\n\n /**\n * An fallback image URL that will be used in case the specified image is not available or an error is encountered.\n */\n @Prop({reflect: true}) fallback: string =\n // eslint-disable-next-line @cspell/spellchecker\n 'data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"50\" viewBox=\"0 0 50 50\"%3E%3Crect width=\"50\" height=\"50\" fill=\"none\" stroke=\"none\"%3E%3C/rect%3E%3C/svg%3E';\n\n /**\n * Moves to the previous image, when the carousel is activated.\n */\n @Method() public async previousImage() {\n this.currentImage =\n this.currentImage - 1 < 0\n ? this.numberOfImages - 1\n : this.currentImage - 1;\n }\n\n /**\n * Moves to the next image, when the carousel is activated.\n */\n @Method() public async nextImage() {\n this.currentImage = (this.currentImage + 1) % this.numberOfImages;\n }\n\n /**\n * Navigates to the specified image index.\n *\n * @param index - The index of the image to navigate to.\n */\n @Method() public async navigateToImage(index: number) {\n this.currentImage = index;\n }\n\n private logWarning(message: string) {\n this.bindings.engine.logger.warn(message, this.host);\n }\n\n private handleImageError(event: Event) {\n const image = event.target as HTMLImageElement;\n const message = `The image url \"${image.src}\" is not valid or could not be loaded. You might want to add a \"fallback\" property.`;\n if (this.fallback && image.src !== this.fallback) {\n this.useFallback = true;\n image.src = this.fallback;\n } else if (image.src === this.fallback) {\n this.logWarning('The fallback image failed to load.');\n } else {\n this.logWarning(message);\n }\n }\n\n private handleMissingFallback(message: string) {\n if (!this.fallback) {\n this.logWarning(message);\n this.host.remove();\n return null;\n }\n return this.fallback;\n }\n\n private validateUrl(url: string | undefined) {\n if (!url) {\n const message = `Image for ${this.product.ec_name} is missing. Please review your indexing. You might want to add a \"fallback\" property.`;\n return this.handleMissingFallback(message);\n }\n\n if (typeof url !== 'string') {\n const message = `Expected \"${this.field}\" to be a text field. Please review your indexing. You might want to add a \"fallback\" property.`;\n return this.handleMissingFallback(message);\n }\n\n return url;\n }\n\n componentWillLoad(): void {\n const validImages = this.imageUrls.filter(\n (image) => typeof image === 'string'\n );\n\n const validImageAlt = this.imageAlt;\n\n this.images = validImages.map((url, index) => {\n const finalUrl = this.useFallback ? this.fallback : url;\n\n this.validateUrl(finalUrl);\n let altText;\n\n if (typeof validImageAlt === 'string') {\n altText = validImageAlt;\n } else {\n altText = this.bindings.i18n.t('image-alt-fallback-multiple', {\n count: index + 1,\n max: validImages?.length,\n itemName: this.product.ec_name,\n });\n }\n\n return {\n src: filterProtocol(finalUrl),\n alt: altText,\n };\n }) as Image[];\n }\n\n private get imageUrls() {\n const value = ProductTemplatesHelpers.getProductProperty(\n this.product,\n this.field\n );\n\n return Array.isArray(value) ? value : [value];\n }\n\n private get imageAlt() {\n if (!this.imageAltField) {\n return null;\n }\n const value = ProductTemplatesHelpers.getProductProperty(\n this.product,\n this.imageAltField\n );\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value as string).trim();\n }\n\n private get numberOfImages() {\n return this.images?.length ?? 0;\n }\n\n private renderCurrentImage(image: Image | null) {\n if (image === null) {\n return;\n }\n\n return (\n <img\n class=\"aspect-square\"\n alt={image.alt}\n src={image.src}\n onError={(image) => this.handleImageError(image)}\n loading=\"lazy\"\n />\n );\n }\n\n public render() {\n const imagesToRender = this.images.map((image: Image) => {\n return {\n src: image.src,\n alt: image.alt,\n };\n });\n\n if (this.images.length === 0) {\n this.validateUrl(this.fallback);\n const alt = this.imageAlt\n ? this.imageAlt\n : this.bindings.i18n.t('image-not-found-alt', {\n itemName: this.product.ec_name,\n });\n return (\n <img\n class=\"aspect-square\"\n alt={alt}\n src={this.fallback}\n loading=\"eager\"\n />\n );\n }\n if (this.images.length === 1) {\n return this.renderCurrentImage(imagesToRender[this.currentImage]);\n }\n\n return (\n // TODO - KIT-3612 : handle small/icon image sizes better on mobile\n <ImageCarousel\n bindings={this.bindings}\n currentImage={this.currentImage}\n navigateToImage={(index) => this.navigateToImage(index)}\n nextImage={() => this.nextImage()}\n previousImage={() => this.previousImage()}\n numberOfImages={this.numberOfImages}\n >\n {this.renderCurrentImage(this.images[this.currentImage])}\n </ImageCarousel>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"atomic-product-image.js","mappings":"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","names":["AtomicProductImage"],"sources":["src/components/common/image-carousel/image-carousel-indicators.tsx","src/components/common/image-carousel/image-carousel.tsx","src/components/commerce/atomic-product-image/atomic-product-image.pcss?tag=atomic-product-image&encapsulation=shadow","src/components/commerce/atomic-product-image/atomic-product-image.tsx"],"sourcesContent":["/* eslint-disable @cspell/spellchecker */\nimport {FunctionalComponent, h} from '@stencil/core';\n\ninterface CarouselIndicatorProps {\n numberOfImages: number;\n currentImage: number;\n navigateToImage: (index: number) => void;\n maxImagesBeforeAndAfter?: number;\n}\n\nconst CarouselIndicator: FunctionalComponent<CarouselIndicatorProps> = ({\n numberOfImages,\n currentImage: currentImage,\n navigateToImage: navigateToImage,\n maxImagesBeforeAndAfter = 2,\n}) => {\n return (\n <ul\n part=\"indicators\"\n class=\"absolute bottom-2 mt-6 mb-1 flex max-w-4/5 items-center justify-center gap-2\"\n >\n {Array.from({length: numberOfImages}, (_, index) => {\n const isActive = index === currentImage % numberOfImages;\n\n const shouldDisplay =\n index >= Math.max(0, currentImage - maxImagesBeforeAndAfter) &&\n index <=\n Math.min(\n currentImage + maxImagesBeforeAndAfter,\n numberOfImages - 1\n );\n\n const isLastDisplayed =\n index ===\n Math.min(\n currentImage + maxImagesBeforeAndAfter,\n numberOfImages - 1\n ) && index < numberOfImages - 1;\n\n const isFirstDisplayed =\n index === Math.max(0, currentImage - maxImagesBeforeAndAfter) &&\n index > 0;\n\n return (\n <li\n part={`indicator ${isActive ? 'active-indicator' : ''}`}\n class={`hover:bg-primary-light cursor-pointer rounded-md shadow transition-all duration-200 ease-in-out ${\n isActive ? 'bg-primary' : 'bg-neutral'\n } ${isLastDisplayed || isFirstDisplayed ? 'mobile-only:w-2 mobile-only:h-2 h-1 w-1 scale-75 transform' : 'mobile-only:w-3 mobile-only:h-3 h-2 w-2 scale-100 transform'} ${\n shouldDisplay\n ? 'pointer-events-auto opacity-80'\n : 'pointer-events-none hidden opacity-0'\n }`}\n onClick={(event) => {\n event.stopPropagation();\n navigateToImage(index);\n }}\n ></li>\n );\n })}\n </ul>\n );\n};\n\nexport default CarouselIndicator;\n","import {h, FunctionalComponent, Fragment} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport ArrowRight from '../../../images/arrow-right.svg';\nimport {AnyBindings} from '../interface/bindings';\nimport {Button} from '../stencil-button';\nimport CarouselIndicator from './image-carousel-indicators';\n\nexport interface CarouselProps {\n bindings: AnyBindings;\n previousImage(): void;\n nextImage(): void;\n navigateToImage(index: number): void;\n numberOfImages: number;\n currentImage: number;\n}\n\nexport const ImageCarousel: FunctionalComponent<\n CarouselProps & JSXBase.HTMLAttributes<HTMLHeadingElement>\n> = (props, children) => {\n const commonPaginationClasses =\n 'w-6 h-6 grid mobile-only:w-10 mobile-only:h-10 justify-center items-center z-1 group rounded-full duration-200 opacity-50 hover:opacity-100 focus:opacity-100 transition-opacity hover:shadow-sm bottom-0 mb-1 absolute';\n const commonArrowClasses =\n 'w-4 align-middle text-on-background group-hover:text-primary';\n\n function renderPreviousButton() {\n return (\n <Button\n style=\"text-primary\"\n ariaLabel={props.bindings.i18n.t('previous')}\n onClick={(event) => {\n event?.stopPropagation();\n props.previousImage();\n }}\n part=\"previous-button\"\n class={`${commonPaginationClasses} left-0 ml-1`}\n >\n <atomic-icon\n icon={ArrowRight}\n class={`${commonArrowClasses} rotate-180`}\n ></atomic-icon>\n </Button>\n );\n }\n\n function renderNextButton() {\n return (\n <Button\n style=\"text-primary\"\n ariaLabel={props.bindings.i18n.t('next')}\n onClick={(event) => {\n event?.stopPropagation();\n props.nextImage();\n }}\n part=\"next-button\"\n class={`${commonPaginationClasses} right-0 mr-1`}\n >\n <atomic-icon icon={ArrowRight} class={commonArrowClasses}></atomic-icon>\n </Button>\n );\n }\n function renderIndicators() {\n return (\n <CarouselIndicator\n numberOfImages={props.numberOfImages}\n currentImage={props.currentImage}\n navigateToImage={props.navigateToImage}\n />\n );\n }\n return (\n <Fragment>\n <div class=\"relative flex w-full min-w-full items-center justify-center\">\n {renderPreviousButton()}\n {children}\n {renderNextButton()}\n {renderIndicators()}\n </div>\n </Fragment>\n );\n};\n","@import '../../../global/global.pcss';\n@import '../../common/item-list/styles/mixins.pcss';\n@import '../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: grid;\n place-items: center;\n grid-template-rows: 100%;\n width: 100%;\n height: 100%;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n}\n","import {isNullOrUndefined} from '@coveo/bueno';\nimport {Product, ProductTemplatesHelpers} from '@coveo/headless/commerce';\nimport {Component, h, Prop, Element, State, Method} from '@stencil/core';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {filterProtocol} from '../../../utils/xss-utils';\nimport {ImageCarousel} from '../../common/image-carousel/image-carousel';\nimport {CommerceBindings as Bindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\ntype Image = {\n src: string;\n alt: string;\n};\n\n/**\n * The `atomic-product-image` component renders an image from a product field.\n * @alpha\n */\n@Component({\n tag: 'atomic-product-image',\n styleUrl: 'atomic-product-image.pcss',\n shadow: true,\n})\nexport class AtomicProductImage implements InitializableComponent<Bindings> {\n @InitializeBindings() public bindings!: Bindings;\n @ProductContext() private product!: Product;\n @Element() private host!: HTMLElement;\n @State() private useFallback = false;\n @State() private currentImage = 0;\n @State() private images: Image[] = [];\n\n public error!: Error;\n\n /**\n * The product field which the component should use. This will look for the field in the product object first, then in the product.additionalFields object.\n */\n @Prop({reflect: true}) field: string = 'ec_thumbnails';\n\n /**\n * The product field that contains the alt text for the images. This will look for the field in the product object first, then in the product.additionalFields object.\n * If the product has multiple images, the value of the `imageAltField` will be used as the alt text for every image.\n *\n * If the field is not specified, or does not contain a valid value, the alt text will be set to \"Image {index} out of {totalImages} for {productName}\".\n * @type {string}\n */\n @Prop({reflect: true}) imageAltField?: string;\n\n /**\n * An fallback image URL that will be used in case the specified image is not available or an error is encountered.\n */\n @Prop({reflect: true}) fallback: string =\n // eslint-disable-next-line @cspell/spellchecker\n 'data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"50\" viewBox=\"0 0 50 50\"%3E%3Crect width=\"50\" height=\"50\" fill=\"none\" stroke=\"none\"%3E%3C/rect%3E%3C/svg%3E';\n\n /**\n * Moves to the previous image, when the carousel is activated.\n */\n @Method() public async previousImage() {\n this.currentImage =\n this.currentImage - 1 < 0\n ? this.numberOfImages - 1\n : this.currentImage - 1;\n }\n\n /**\n * Moves to the next image, when the carousel is activated.\n */\n @Method() public async nextImage() {\n this.currentImage = (this.currentImage + 1) % this.numberOfImages;\n }\n\n /**\n * Navigates to the specified image index.\n *\n * @param index - The index of the image to navigate to.\n */\n @Method() public async navigateToImage(index: number) {\n this.currentImage = index;\n }\n\n private logWarning(message: string) {\n this.bindings.engine.logger.warn(message, this.host);\n }\n\n private handleImageError(event: Event) {\n const image = event.target as HTMLImageElement;\n const message = `The image url \"${image.src}\" is not valid or could not be loaded. You might want to add a \"fallback\" property.`;\n if (this.fallback && image.src !== this.fallback) {\n this.useFallback = true;\n image.src = this.fallback;\n } else if (image.src === this.fallback) {\n this.logWarning('The fallback image failed to load.');\n } else {\n this.logWarning(message);\n }\n }\n\n private handleMissingFallback(message: string) {\n if (!this.fallback) {\n this.logWarning(message);\n this.host.remove();\n return null;\n }\n return this.fallback;\n }\n\n private validateUrl(url: string | undefined) {\n if (!url) {\n const message = `Image for ${this.product.ec_name} is missing. Please review your indexing. You might want to add a \"fallback\" property.`;\n return this.handleMissingFallback(message);\n }\n\n if (typeof url !== 'string') {\n const message = `Expected \"${this.field}\" to be a text field. Please review your indexing. You might want to add a \"fallback\" property.`;\n return this.handleMissingFallback(message);\n }\n\n return url;\n }\n\n componentWillLoad(): void {\n const validImages = this.imageUrls.filter(\n (image) => typeof image === 'string'\n );\n\n const validImageAlt = this.imageAlt;\n\n this.images = validImages.map((url, index) => {\n const finalUrl = this.useFallback ? this.fallback : url;\n\n this.validateUrl(finalUrl);\n let altText;\n\n if (typeof validImageAlt === 'string') {\n altText = validImageAlt;\n } else {\n altText = this.bindings.i18n.t('image-alt-fallback-multiple', {\n count: index + 1,\n max: validImages?.length,\n itemName: this.product.ec_name,\n });\n }\n\n return {\n src: filterProtocol(finalUrl),\n alt: altText,\n };\n }) as Image[];\n }\n\n private get imageUrls() {\n const value = ProductTemplatesHelpers.getProductProperty(\n this.product,\n this.field\n );\n\n return Array.isArray(value) ? value : [value];\n }\n\n private get imageAlt() {\n if (!this.imageAltField) {\n return null;\n }\n const value = ProductTemplatesHelpers.getProductProperty(\n this.product,\n this.imageAltField\n );\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value as string).trim();\n }\n\n private get numberOfImages() {\n return this.images?.length ?? 0;\n }\n\n private renderCurrentImage(image: Image | null) {\n if (image === null) {\n return;\n }\n\n return (\n <img\n class=\"aspect-square\"\n alt={image.alt}\n src={image.src}\n onError={(image) => this.handleImageError(image)}\n loading=\"lazy\"\n />\n );\n }\n\n public render() {\n const imagesToRender = this.images.map((image: Image) => {\n return {\n src: image.src,\n alt: image.alt,\n };\n });\n\n if (this.images.length === 0) {\n this.validateUrl(this.fallback);\n const alt = this.imageAlt\n ? this.imageAlt\n : this.bindings.i18n.t('image-not-found-alt', {\n itemName: this.product.ec_name,\n });\n return (\n <img\n class=\"aspect-square\"\n alt={alt}\n src={this.fallback}\n loading=\"eager\"\n />\n );\n }\n if (this.images.length === 1) {\n return this.renderCurrentImage(imagesToRender[this.currentImage]);\n }\n\n return (\n // TODO - KIT-3612 : handle small/icon image sizes better on mobile\n <ImageCarousel\n bindings={this.bindings}\n currentImage={this.currentImage}\n navigateToImage={(index) => this.navigateToImage(index)}\n nextImage={() => this.nextImage()}\n previousImage={() => this.previousImage()}\n numberOfImages={this.numberOfImages}\n >\n {this.renderCurrentImage(this.images[this.currentImage])}\n </ImageCarousel>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-link.js","mappings":";;;;;;;;;;;;AAAA,MAAM,oBAAoB,GAAG,g32DAAg32D,CAAC;AAC942D,gCAAe,oBAAoB;;;;;;;;;;;;MC8BtBA,mBAAiB;;;;;;IA6BpB,gBAAgB,CAAC,OAAgB;QACvC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3C;KACF;IAEM,UAAU;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,gBAAgB,CACd,+BAA+B,EAC/B,CAAC,eAAwB;YACvB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;SACxC,CACF,CACF,CAAC;KACH;IAEM,iBAAiB;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACtE;IAEM,MAAM;QACX,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;cACvC,IAAI,CAAC,OAAO,CAAC,QAAQ;cACrB,8BAA8B,CAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CACd,CAAC;QAEN,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,OAAO;SACR;QAED,MAAM,EAAC,cAAc,EAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEjD,QACE,EAAC,qBAAqB,IACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE;gBACR,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;aAClC,EACD,oBAAoB,EAAE;gBACpB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;aAC9C,EACD,qBAAqB,EAAE;gBACrB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,CAAC;aAC/C,EACD,UAAU,EAAE,IAAI,CAAC,cAAc,EAC/B,eAAe,EAAE,IAAI,CAAC,eAAe,IAEpC,IAAI,CAAC,cAAc,IAClB,eAAQ,KAER,2BACE,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,UAAU,GACG,CACxB,CACqB,EACxB;KACH;;;;;;AAzFaA,+CAA2B,GAAG,IAAH,CAAQ;AAHpB;IAA5B,kBAAkB,EAAE;qDAAoC;AAK/B;IAAzB,cAAc,EAAE;oDAA2B;AACP;IAApC,yBAAyB,EAAE;+DAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductLink"],"sources":["src/components/commerce/
|
|
1
|
+
{"file":"atomic-product-link.js","mappings":";;;;;;;;;;;;AAAA,MAAM,oBAAoB,GAAG,g32DAAg32D,CAAC;AAC942D,gCAAe,oBAAoB;;;;;;;;;;;;MC8BtBA,mBAAiB;;;;;;IA6BpB,gBAAgB,CAAC,OAAgB;QACvC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3C;KACF;IAEM,UAAU;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,gBAAgB,CACd,+BAA+B,EAC/B,CAAC,eAAwB;YACvB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;SACxC,CACF,CACF,CAAC;KACH;IAEM,iBAAiB;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACtE;IAEM,MAAM;QACX,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;cACvC,IAAI,CAAC,OAAO,CAAC,QAAQ;cACrB,8BAA8B,CAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CACd,CAAC;QAEN,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,OAAO;SACR;QAED,MAAM,EAAC,cAAc,EAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEjD,QACE,EAAC,qBAAqB,IACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE;gBACR,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;aAClC,EACD,oBAAoB,EAAE;gBACpB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;aAC9C,EACD,qBAAqB,EAAE;gBACrB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,CAAC;aAC/C,EACD,UAAU,EAAE,IAAI,CAAC,cAAc,EAC/B,eAAe,EAAE,IAAI,CAAC,eAAe,IAEpC,IAAI,CAAC,cAAc,IAClB,eAAQ,KAER,2BACE,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,UAAU,GACG,CACxB,CACqB,EACxB;KACH;;;;;;AAzFaA,+CAA2B,GAAG,IAAH,CAAQ;AAHpB;IAA5B,kBAAkB,EAAE;qDAAoC;AAK/B;IAAzB,cAAc,EAAE;oDAA2B;AACP;IAApC,yBAAyB,EAAE;+DAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductLink"],"sources":["src/components/commerce/atomic-product-link/atomic-product-link.pcss?tag=atomic-product-link","src/components/commerce/atomic-product-link/atomic-product-link.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n@import '../../../utils/tailwind-utilities/link-style.tw.css';\n\natomic-product-link {\n a {\n @apply link-style;\n }\n}\n","import {isUndefined} from '@coveo/bueno';\nimport {InteractiveProduct} from '@coveo/headless/commerce';\nimport {Product} from '@coveo/headless/commerce';\nimport {Component, h, Prop, Element} from '@stencil/core';\nimport {buildCustomEvent} from '../../../utils/event-utils';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {getDefaultSlotFromHost} from '../../../utils/slot-utils';\nimport {getAttributesFromLinkSlot} from '../../common/item-link/attributes-slot';\nimport {LinkWithItemAnalytics} from '../../common/item-link/item-link';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {buildStringTemplateFromProduct} from '../product-template-component-utils/product-utils';\nimport {\n ProductContext,\n InteractiveProductContext,\n} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-link` component automatically transforms a search product title into a clickable link that points to the original item.\n * @slot default - Lets you display alternative content inside the link.\n * @slot attributes - Lets you pass [attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes) down to the link element, overriding other attributes. Use only with an \"a\" tag, e.g., `<a slot=\"attributes\" target=\"_blank\" download></a>`.\n *\n */\n@Component({\n tag: 'atomic-product-link',\n styleUrl: 'atomic-product-link.pcss',\n shadow: false,\n})\nexport class AtomicProductLink\n implements InitializableComponent<CommerceBindings>\n{\n @InitializeBindings() public bindings!: CommerceBindings;\n public error!: Error;\n\n public static isCompatibleWithProductList = true;\n\n @ProductContext() private product!: Product;\n @InteractiveProductContext() private interactiveProduct!: InteractiveProduct;\n\n @Element() private host!: HTMLElement;\n\n /**\n * The [template literal](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals) from which to generate the `href` attribute value\n *\n * The template literal can reference any number of product properties from the parent product. It can also reference the window object.\n *\n * For example, the following markup generates an `href` value such as `http://uri.com?id=itemTitle`, using the product's `clickUri` and `itemtitle` fields.\n * ```html\n * <atomic-product-link href-template='${clickUri}?id=${permanentId}'></atomic-product-link>\n * ```\n */\n @Prop({reflect: true}) hrefTemplate?: string;\n\n private hasDefaultSlot!: boolean;\n private linkAttributes?: Attr[];\n private stopPropagation?: boolean;\n\n private logWarningIfNeed(warning?: string) {\n if (warning) {\n this.bindings.engine.logger.warn(warning);\n }\n }\n\n public initialize() {\n this.host.dispatchEvent(\n buildCustomEvent(\n 'atomic/resolveStopPropagation',\n (stopPropagation: boolean) => {\n this.stopPropagation = stopPropagation;\n }\n )\n );\n }\n\n public connectedCallback() {\n const slotName = 'attributes';\n this.hasDefaultSlot = !!getDefaultSlotFromHost(this.host);\n this.linkAttributes = getAttributesFromLinkSlot(this.host, slotName);\n }\n\n public render() {\n const href = isUndefined(this.hrefTemplate)\n ? this.product.clickUri\n : buildStringTemplateFromProduct(\n this.hrefTemplate,\n this.product,\n this.bindings\n );\n\n if (!this.interactiveProduct) {\n return;\n }\n\n const {warningMessage} = this.interactiveProduct;\n\n return (\n <LinkWithItemAnalytics\n href={href}\n onSelect={() => {\n this.logWarningIfNeed(warningMessage);\n this.interactiveProduct.select();\n }}\n onBeginDelayedSelect={() => {\n this.logWarningIfNeed(warningMessage);\n this.interactiveProduct.beginDelayedSelect();\n }}\n onCancelPendingSelect={() => {\n this.logWarningIfNeed(warningMessage);\n this.interactiveProduct.cancelPendingSelect();\n }}\n attributes={this.linkAttributes}\n stopPropagation={this.stopPropagation}\n >\n {this.hasDefaultSlot ? (\n <slot />\n ) : (\n <atomic-product-text\n field=\"ec_name\"\n default=\"no-title\"\n ></atomic-product-text>\n )}\n </LinkWithItemAnalytics>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-multi-value-text.js","mappings":";;;;;;;AAAA,MAAM,8BAA8B,GAAG,gJAAgJ,CAAC;AACxL,0CAAe,8BAA8B;;;;;;;;;;;;MC+BhCA,6BAA2B;;;;;;;;;QAsBR,uBAAkB,GAAG,CAAC,CAAC;;;;QAKvB,cAAS,GAAkB,IAAI,CAAC;QAEtD,iBAAY,GAAoB,IAAI,CAAC;;;kCAPM,CAAC;yBAKK,IAAI;;IAItD,UAAU;QACf,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,KAAK,iBAAiB,EAAE;YAC7D,IAAI,CAAC,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAClE;aAAM;YACL,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC1D;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;KACnE;IAED,IAAY,aAAa;QACvB,MAAM,KAAK,GAAG,uBAAuB,CAAC,kBAAkB,CACtD,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,CACX,CAAC;QAEF,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;SACxC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACpD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CACpB,oBAAoB,KAAK,iBAAiB,IAAI,CAAC,KAAK,sBAAsB,CAC3E,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,SAAS;cACjB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;cACxD,CAAC,KAAK,CAAC,CAAC;KACb;IAED,IAAY,mBAAmB;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,gBAAgB;aACjD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;aAC7C,MAAM,CACL,CAAC,MAAM,EAAE,KAAK,KAAK;YACjB,GAAG,MAAM;YACT,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAC,KAAM,KAA2B,CAAC,KAAK,CAAC;SACrE,EACD,EAAc,CACf,CAAC;KACL;IAEO,kBAAkB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO;SACR;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAK,KACxD,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC1B,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;KACzE;IAEO,qBAAqB,CAAC,MAAgB;QAC5C,QACE,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,EACtE;KACH;IAEO,0BAA0B,CAAC,MAAgB;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACzD;IAEO,WAAW,CAAC,KAAa;QAC/B,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,QACE,UAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAC,gCAAgC,IACnD,YAAM,IAAI,EAAE,kCAAkC,UAAU,EAAE,IACvD,KAAK,CACD,CACJ,EACL;KACH;IAEO,eAAe,CAAC,WAAmB,EAAE,UAAkB;QAC7D,QACE,yBACc,MAAM,EAClB,IAAI,EAAC,oCAAoC,EACzC,GAAG,EAAE,GAAG,WAAW,IAAI,UAAU,EAAE,EACnC,KAAK,EAAC,WAAW,GACb,EACN;KACH;IAEO,eAAe,CAAC,KAAa;QACnC,QACE,UAAI,GAAG,EAAC,mBAAmB,EAAC,IAAI,EAAC,qCAAqC,IACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAC,CAAC,CACrC,EACL;KACH;IAEO,eAAe,CAAC,MAAgB;QACtC,MAAM,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAExE,MAAM,KAAK,GAAY,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,EAAE,CAAC,EAAE,EAAE;YAChD,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5D;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;QACD,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;YACtC,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,eAAe,CAClB,MAAM,CAAC,uBAAuB,GAAG,CAAC,CAAC,EACnC,mBAAmB,CACpB,CACF,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC;SAC3E;QACD,OAAO,KAAK,CAAC;KACd;IAEM,mBAAmB;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAEM,MAAM;QACX,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO;SACR;QACD,QACE,UAAI,IAAI,EAAC,+BAA+B,OAClC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CACxC,EACL;KACH;;;;;;;;;AApK4B;IAA5B,kBAAkB,EAAE;+DAAoC;AAC/B;IAAzB,cAAc,EAAE;8DAA2B;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductMultiValueText"],"sources":["src/components/commerce/product-template-components/atomic-product-multi-value-text/atomic-product-multi-value-text.pcss?tag=atomic-product-multi-value-text&encapsulation=shadow","src/components/commerce/product-template-components/atomic-product-multi-value-text/atomic-product-multi-value-text.tsx"],"sourcesContent":[":host {\n > ul {\n display: flex;\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n display: inline-block;\n }\n }\n}\n\n.separator {\n &::before {\n display: inline;\n content: ',\\00a0';\n }\n}\n","import {\n BreadcrumbManager,\n buildProductListing,\n buildSearch,\n Product,\n ProductListing,\n ProductTemplatesHelpers,\n Search,\n RegularFacetValue,\n} from '@coveo/headless/commerce';\nimport {Component, Element, Prop, h, State, VNode} from '@stencil/core';\nimport {getFieldValueCaption} from '../../../../utils/field-utils';\nimport {InitializeBindings} from '../../../../utils/initialization-utils';\nimport {titleToKebab} from '../../../../utils/utils';\nimport {CommerceBindings} from '../../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../stencil-product-template-decorators';\n\n/**\n * @alpha\n *\n * The `atomic-product-multi-value-text` component renders the values of a multi-value string field.\n * @part product-multi-value-text-list - The list of field values.\n * @part product-multi-value-text-separator - The separator to display between each of the field values.\n * @part product-multi-value-text-value - A field value.\n * @part product-multi-value-text-value-more - A label indicating some values were omitted.\n * @slot product-multi-value-text-value-* - A custom caption value that's specified for a given part of a multi-text field value. For example, if you want to use `Off-Campus Resident` as a caption value for `Off-campus apartment` in `Off-campus apartment;On-campus apartment`, you'd use `<span slot=\"product-multi-value-text-value-off-campus-apartment\">Off-Campus Resident</span>`). The suffix of this slot corresponds with the field value, written in kebab case.\n */\n@Component({\n tag: 'atomic-product-multi-value-text',\n styleUrl: 'atomic-product-multi-value-text.pcss',\n shadow: true,\n})\nexport class AtomicProductMultiValueText {\n public breadcrumbManager!: BreadcrumbManager;\n public searchOrListing!: Search | ProductListing;\n\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() host!: HTMLElement;\n\n @State() public error!: Error;\n\n /**\n * The field that the component should use.\n * The component will try to find this field in the `Product.additionalFields` object unless it finds it in the `Product` object first.\n * Make sure this field is present in the `fieldsToInclude` property of the `atomic-commerce-interface` component.\n */\n @Prop({reflect: true}) public field!: string;\n\n /**\n * The maximum number of field values to display.\n * If there are _n_ more values than the specified maximum, the last displayed value will be \"_n_ more...\".\n */\n @Prop({reflect: true}) public maxValuesToDisplay = 3;\n\n /**\n * The delimiter used to separate values when the field isn't indexed as a multi value field.\n */\n @Prop({reflect: true}) public delimiter: string | null = null;\n\n private sortedValues: string[] | null = null;\n\n public initialize() {\n if (this.bindings.interfaceElement.type === 'product-listing') {\n this.searchOrListing = buildProductListing(this.bindings.engine);\n } else {\n this.searchOrListing = buildSearch(this.bindings.engine);\n }\n\n this.breadcrumbManager = this.searchOrListing.breadcrumbManager();\n }\n\n private get productValues() {\n const value = ProductTemplatesHelpers.getProductProperty(\n this.product,\n this.field\n );\n\n if (value === null) {\n return null;\n }\n\n if (Array.isArray(value)) {\n return value.map((v) => `${v}`.trim());\n }\n\n if (typeof value !== 'string' || value.trim() === '') {\n this.error = new Error(\n `Could not parse \"${value}\" from field \"${this.field}\" as a string array.`\n );\n return null;\n }\n\n return this.delimiter\n ? value.split(this.delimiter).map((value) => value.trim())\n : [value];\n }\n\n private get facetSelectedValues() {\n return this.breadcrumbManager.state.facetBreadcrumbs\n .filter((facet) => facet.field === this.field)\n .reduce(\n (values, facet) => [\n ...values,\n ...facet.values.map(({value}) => (value as RegularFacetValue).value),\n ],\n [] as string[]\n );\n }\n\n private updateSortedValues() {\n const allValues = this.productValues;\n if (allValues === null) {\n this.sortedValues = null;\n return;\n }\n const firstValues = this.facetSelectedValues.filter((value) =>\n allValues.includes(value)\n );\n this.sortedValues = Array.from(new Set([...firstValues, ...allValues]));\n }\n\n private getShouldDisplayLabel(values: string[]) {\n return (\n this.maxValuesToDisplay > 0 && values.length > this.maxValuesToDisplay\n );\n }\n\n private getNumberOfValuesToDisplay(values: string[]) {\n return Math.min(values.length, this.maxValuesToDisplay);\n }\n\n private renderValue(value: string) {\n const label = getFieldValueCaption(this.field, value, this.bindings.i18n);\n const kebabValue = titleToKebab(value);\n return (\n <li key={value} part=\"product-multi-value-text-value\">\n <slot name={`product-multi-value-text-value-${kebabValue}`}>\n {label}\n </slot>\n </li>\n );\n }\n\n private renderSeparator(beforeValue: string, afterValue: string) {\n return (\n <li\n aria-hidden=\"true\"\n part=\"product-multi-value-text-separator\"\n key={`${beforeValue}~${afterValue}`}\n class=\"separator\"\n ></li>\n );\n }\n\n private renderMoreLabel(value: number) {\n return (\n <li key=\"more-field-values\" part=\"product-multi-value-text-value-more\">\n {this.bindings.i18n.t('n-more', {value})}\n </li>\n );\n }\n\n private renderListItems(values: string[]) {\n const numberOfValuesToDisplay = this.getNumberOfValuesToDisplay(values);\n\n const nodes: VNode[] = [];\n for (let i = 0; i < numberOfValuesToDisplay; i++) {\n if (i > 0) {\n nodes.push(this.renderSeparator(values[i - 1], values[i]));\n }\n nodes.push(this.renderValue(values[i]));\n }\n if (this.getShouldDisplayLabel(values)) {\n nodes.push(\n this.renderSeparator(\n values[numberOfValuesToDisplay - 1],\n 'more-field-values'\n )\n );\n nodes.push(this.renderMoreLabel(values.length - numberOfValuesToDisplay));\n }\n return nodes;\n }\n\n public componentWillRender() {\n this.updateSortedValues();\n }\n\n public render() {\n if (this.sortedValues === null) {\n this.host.remove();\n return;\n }\n return (\n <ul part=\"product-multi-value-text-list\">\n {...this.renderListItems(this.sortedValues)}\n </ul>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"atomic-product-multi-value-text.js","mappings":"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","names":["AtomicProductMultiValueText"],"sources":["src/components/commerce/atomic-product-multi-value-text/atomic-product-multi-value-text.pcss?tag=atomic-product-multi-value-text&encapsulation=shadow","src/components/commerce/atomic-product-multi-value-text/atomic-product-multi-value-text.tsx"],"sourcesContent":[":host {\n > ul {\n display: flex;\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n display: inline-block;\n }\n }\n}\n\n.separator {\n &::before {\n display: inline;\n content: ',\\00a0';\n }\n}\n","import {\n BreadcrumbManager,\n buildProductListing,\n buildSearch,\n Product,\n ProductListing,\n ProductTemplatesHelpers,\n Search,\n RegularFacetValue,\n} from '@coveo/headless/commerce';\nimport {Component, Element, Prop, h, State, VNode} from '@stencil/core';\nimport {getFieldValueCaption} from '../../../utils/field-utils';\nimport {InitializeBindings} from '../../../utils/initialization-utils';\nimport {titleToKebab} from '../../../utils/utils';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n *\n * The `atomic-product-multi-value-text` component renders the values of a multi-value string field.\n * @part product-multi-value-text-list - The list of field values.\n * @part product-multi-value-text-separator - The separator to display between each of the field values.\n * @part product-multi-value-text-value - A field value.\n * @part product-multi-value-text-value-more - A label indicating some values were omitted.\n * @slot product-multi-value-text-value-* - A custom caption value that's specified for a given part of a multi-text field value. For example, if you want to use `Off-Campus Resident` as a caption value for `Off-campus apartment` in `Off-campus apartment;On-campus apartment`, you'd use `<span slot=\"product-multi-value-text-value-off-campus-apartment\">Off-Campus Resident</span>`). The suffix of this slot corresponds with the field value, written in kebab case.\n */\n@Component({\n tag: 'atomic-product-multi-value-text',\n styleUrl: 'atomic-product-multi-value-text.pcss',\n shadow: true,\n})\nexport class AtomicProductMultiValueText {\n public breadcrumbManager!: BreadcrumbManager;\n public searchOrListing!: Search | ProductListing;\n\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() host!: HTMLElement;\n\n @State() public error!: Error;\n\n /**\n * The field that the component should use.\n * The component will try to find this field in the `Product.additionalFields` object unless it finds it in the `Product` object first.\n * Make sure this field is present in the `fieldsToInclude` property of the `atomic-commerce-interface` component.\n */\n @Prop({reflect: true}) public field!: string;\n\n /**\n * The maximum number of field values to display.\n * If there are _n_ more values than the specified maximum, the last displayed value will be \"_n_ more...\".\n */\n @Prop({reflect: true}) public maxValuesToDisplay = 3;\n\n /**\n * The delimiter used to separate values when the field isn't indexed as a multi value field.\n */\n @Prop({reflect: true}) public delimiter: string | null = null;\n\n private sortedValues: string[] | null = null;\n\n public initialize() {\n if (this.bindings.interfaceElement.type === 'product-listing') {\n this.searchOrListing = buildProductListing(this.bindings.engine);\n } else {\n this.searchOrListing = buildSearch(this.bindings.engine);\n }\n\n this.breadcrumbManager = this.searchOrListing.breadcrumbManager();\n }\n\n private get productValues() {\n const value = ProductTemplatesHelpers.getProductProperty(\n this.product,\n this.field\n );\n\n if (value === null) {\n return null;\n }\n\n if (Array.isArray(value)) {\n return value.map((v) => `${v}`.trim());\n }\n\n if (typeof value !== 'string' || value.trim() === '') {\n this.error = new Error(\n `Could not parse \"${value}\" from field \"${this.field}\" as a string array.`\n );\n return null;\n }\n\n return this.delimiter\n ? value.split(this.delimiter).map((value) => value.trim())\n : [value];\n }\n\n private get facetSelectedValues() {\n return this.breadcrumbManager.state.facetBreadcrumbs\n .filter((facet) => facet.field === this.field)\n .reduce(\n (values, facet) => [\n ...values,\n ...facet.values.map(({value}) => (value as RegularFacetValue).value),\n ],\n [] as string[]\n );\n }\n\n private updateSortedValues() {\n const allValues = this.productValues;\n if (allValues === null) {\n this.sortedValues = null;\n return;\n }\n const firstValues = this.facetSelectedValues.filter((value) =>\n allValues.includes(value)\n );\n this.sortedValues = Array.from(new Set([...firstValues, ...allValues]));\n }\n\n private getShouldDisplayLabel(values: string[]) {\n return (\n this.maxValuesToDisplay > 0 && values.length > this.maxValuesToDisplay\n );\n }\n\n private getNumberOfValuesToDisplay(values: string[]) {\n return Math.min(values.length, this.maxValuesToDisplay);\n }\n\n private renderValue(value: string) {\n const label = getFieldValueCaption(this.field, value, this.bindings.i18n);\n const kebabValue = titleToKebab(value);\n return (\n <li key={value} part=\"product-multi-value-text-value\">\n <slot name={`product-multi-value-text-value-${kebabValue}`}>\n {label}\n </slot>\n </li>\n );\n }\n\n private renderSeparator(beforeValue: string, afterValue: string) {\n return (\n <li\n aria-hidden=\"true\"\n part=\"product-multi-value-text-separator\"\n key={`${beforeValue}~${afterValue}`}\n class=\"separator\"\n ></li>\n );\n }\n\n private renderMoreLabel(value: number) {\n return (\n <li key=\"more-field-values\" part=\"product-multi-value-text-value-more\">\n {this.bindings.i18n.t('n-more', {value})}\n </li>\n );\n }\n\n private renderListItems(values: string[]) {\n const numberOfValuesToDisplay = this.getNumberOfValuesToDisplay(values);\n\n const nodes: VNode[] = [];\n for (let i = 0; i < numberOfValuesToDisplay; i++) {\n if (i > 0) {\n nodes.push(this.renderSeparator(values[i - 1], values[i]));\n }\n nodes.push(this.renderValue(values[i]));\n }\n if (this.getShouldDisplayLabel(values)) {\n nodes.push(\n this.renderSeparator(\n values[numberOfValuesToDisplay - 1],\n 'more-field-values'\n )\n );\n nodes.push(this.renderMoreLabel(values.length - numberOfValuesToDisplay));\n }\n return nodes;\n }\n\n public componentWillRender() {\n this.updateSortedValues();\n }\n\n public render() {\n if (this.sortedValues === null) {\n this.host.remove();\n return;\n }\n return (\n <ul part=\"product-multi-value-text-list\">\n {...this.renderListItems(this.sortedValues)}\n </ul>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { proxyCustomElement, HTMLElement } from '@stencil/core/internal/client';
|
|
2
2
|
import { I as InitializeBindings } from './initialization-utils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { b as defaultNumberFormatter } from './format-common.js';
|
|
4
4
|
import { p as parseValue } from './product-utils.js';
|
|
5
5
|
import { P as ProductContext } from './stencil-product-template-decorators.js';
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"atomic-product-numeric-field-value.js","mappings":";;;;;;;;;;;;;;;;MAqBaA,gCAA8B;;;;QAchC,cAAS,GAAoB,sBAAsB,CAAC;QAEpD,mBAAc,GAAkB,IAAI,CAAC;;;yBAFR,sBAAsB;8BAEnB,IAAI;;IAGtC,SAAS,CAAC,KAAmC;QAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;KAC/B;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAqB,CAAC,CAAC;SACxE;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,KAAc,CAAC;YAC5B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACzB;KACF;IAEO,oBAAoB;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC/C;KACF;IAED,mBAAmB;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAEM,MAAM;QACX,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO;SACR;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;;;;;AAlD4B;IAA5B,kBAAkB,EAAE;kEAAoC;AAC/B;IAAzB,cAAc,EAAE;iEAA2B;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductNumericFieldValue"],"sources":["src/components/commerce/
|
|
1
|
+
{"file":"atomic-product-numeric-field-value.js","mappings":";;;;;;;;;;;;;;;;MAqBaA,gCAA8B;;;;QAchC,cAAS,GAAoB,sBAAsB,CAAC;QAEpD,mBAAc,GAAkB,IAAI,CAAC;;;yBAFR,sBAAsB;8BAEnB,IAAI;;IAGtC,SAAS,CAAC,KAAmC;QAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;KAC/B;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAqB,CAAC,CAAC;SACxE;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,KAAc,CAAC;YAC5B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACzB;KACF;IAEO,oBAAoB;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC/C;KACF;IAED,mBAAmB;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAEM,MAAM;QACX,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO;SACR;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;;;;;AAlD4B;IAA5B,kBAAkB,EAAE;kEAAoC;AAC/B;IAAzB,cAAc,EAAE;iEAA2B;;;;;;;;;;;;;;;;;;;;","names":["AtomicProductNumericFieldValue"],"sources":["src/components/commerce/atomic-product-numeric-field-value/atomic-product-numeric-field-value.tsx"],"sourcesContent":["import {Product} from '@coveo/headless/commerce';\nimport {Component, Prop, Element, State, Listen} from '@stencil/core';\nimport {InitializeBindings} from '../../../utils/initialization-utils';\nimport {\n defaultNumberFormatter,\n NumberFormatter,\n} from '../../common/formats/format-common';\nimport {CommerceBindings} from '../atomic-commerce-interface/atomic-commerce-interface';\nimport {parseValue} from '../product-template-component-utils/product-utils';\nimport {ProductContext} from '../product-template-component-utils/stencil-product-template-decorators';\n\n/**\n * @alpha\n * The `atomic-product-numeric-field-value` component renders the value of a number product field.\n *\n * The number can be formatted by adding a `atomic-format-number`, `atomic-format-currency` or `atomic-format-unit` component into this component.\n */\n@Component({\n tag: 'atomic-product-numeric-field-value',\n shadow: false,\n})\nexport class AtomicProductNumericFieldValue {\n @InitializeBindings() public bindings!: CommerceBindings;\n @ProductContext() private product!: Product;\n\n @Element() host!: HTMLElement;\n\n @State() public error!: Error;\n\n /**\n * The field that the component should use.\n * The component will try to find this field in the `Product.additionalFields` object unless it finds it in the `Product` object first.\n */\n @Prop({reflect: true}) field!: string;\n\n @State() formatter: NumberFormatter = defaultNumberFormatter;\n\n @State() valueToDisplay: string | null = null;\n\n @Listen('atomic/numberFormat')\n public setFormat(event: CustomEvent<NumberFormatter>) {\n event.preventDefault();\n event.stopPropagation();\n this.formatter = event.detail;\n }\n\n private formatValue(value: number) {\n try {\n return this.formatter(value, this.bindings.i18n.languages as string[]);\n } catch (error) {\n this.error = error as Error;\n return value.toString();\n }\n }\n\n private updateValueToDisplay() {\n const value = parseValue(this.product, this.field);\n if (value !== null) {\n this.valueToDisplay = this.formatValue(value);\n }\n }\n\n componentWillRender() {\n this.updateValueToDisplay();\n }\n\n public render() {\n if (this.valueToDisplay === null) {\n this.host.remove();\n return;\n }\n return this.valueToDisplay;\n }\n}\n"],"version":3}
|
|
@@ -62,7 +62,7 @@ const AtomicProductPrice$1 = /*@__PURE__*/ proxyCustomElement(class AtomicProduc
|
|
|
62
62
|
const originalPrice = this.hasPromotionalPrice
|
|
63
63
|
? this.getFormattedValue('ec_price')
|
|
64
64
|
: null;
|
|
65
|
-
return (h(Host, { key: '
|
|
65
|
+
return (h(Host, { key: '7d51c571a51f80e120d05940da3d962ac5df55ad', class: "flex flex-wrap gap-1" }, h("div", { key: '47a53a0de1a2ef5abd66d013785940c2c2ac75da', class: `truncate break-keep ${this.hasPromotionalPrice && 'text-error'}` }, mainPrice), h("div", { key: '88e44908aa6d20b0edc372887ef8a8ebbcfac2df', class: 'original-price content-center truncate text-xl break-keep line-through' +
|
|
66
66
|
(!originalPrice ? ' invisible' : '') }, originalPrice ?? '')));
|
|
67
67
|
}
|
|
68
68
|
static get style() { return AtomicProductPriceStyle0; }
|