@coveo/atomic 3.35.0-pre.946549b45a → 3.35.0-pre.a57b611c31
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/components/atomic-external.js +0 -1
- package/dist/atomic/components/atomic-external.js.map +1 -1
- package/dist/atomic/components/atomic-field-condition.js +1 -1
- package/dist/atomic/components/atomic-field-condition.js.map +1 -1
- package/dist/atomic/components/atomic-insight-result-children-template.js +1 -1
- package/dist/atomic/components/atomic-insight-result-children-template.js.map +1 -1
- package/dist/atomic/components/atomic-insight-result-template.js +1 -1
- package/dist/atomic/components/atomic-insight-result-template.js.map +1 -1
- package/dist/atomic/components/atomic-recs-interface.js +1 -1
- package/dist/atomic/components/atomic-recs-result-template.js +1 -1
- package/dist/atomic/components/atomic-recs-result-template.js.map +1 -1
- package/dist/atomic/components/atomic-result-children-template.js +1 -1
- package/dist/atomic/components/atomic-result-children-template.js.map +1 -1
- package/dist/atomic/components/atomic-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-result-template.js +1 -1
- package/dist/atomic/components/atomic-result-template.js.map +1 -1
- package/dist/atomic/components/components/commerce/atomic-product-field-condition/atomic-product-field-condition.js +3 -4
- package/dist/atomic/components/components/commerce/atomic-product-template/atomic-product-template.js +3 -4
- package/dist/atomic/components/components/common/item-list/table-layout.js +1 -1
- package/dist/atomic/components/components/common/{template-controller/template-utils.js → product-template/product-template-common.js} +12 -11
- package/dist/atomic/components/components/common/product-template/product-template-controller.js +81 -10
- package/dist/atomic/components/dom-utils.js +0 -2
- package/dist/atomic/components/dom-utils.js.map +1 -1
- package/dist/atomic/components/global/environment.js +1 -1
- package/dist/atomic/components/{stencil-result-template-common.js → result-template-common.js} +1 -1
- package/dist/atomic/components/result-template-common.js.map +1 -0
- package/dist/atomic/components/table-element-utils.js.map +1 -1
- package/dist/atomic/components/utils/dom-utils.js +0 -5
- package/dist/atomic/index.esm.js +1 -1
- package/dist/atomic/index.esm.js.map +1 -1
- package/dist/atomic/{p-64bf37c9.entry.js → p-0035e3da.entry.js} +2 -2
- package/dist/atomic/p-01eda62a.entry.js +2 -0
- package/dist/atomic/{p-601b8ab7.entry.js.map → p-01eda62a.entry.js.map} +1 -1
- package/dist/atomic/p-025a346a.js +1 -1
- package/dist/atomic/{p-b3fb5a74.entry.js → p-02f2ac0b.entry.js} +2 -2
- package/dist/atomic/{p-0de79f5f.entry.js → p-066df32a.entry.js} +2 -2
- package/dist/atomic/{p-e40cac9e.entry.js → p-06bc57be.entry.js} +2 -2
- package/dist/atomic/p-0714b56d.entry.js +2 -0
- package/dist/atomic/{p-4219863f.entry.js.map → p-0714b56d.entry.js.map} +1 -1
- package/dist/atomic/{p-060e1a2c.entry.js → p-104d7a84.entry.js} +2 -2
- package/dist/atomic/p-1936bfc8.entry.js +2 -0
- package/dist/atomic/{p-e2d99a33.entry.js.map → p-1936bfc8.entry.js.map} +1 -1
- package/dist/atomic/{p-d537096a.js → p-1fca38e1.js} +2 -2
- package/dist/atomic/{p-f7c3528f.entry.js → p-2033533c.entry.js} +2 -2
- package/dist/atomic/{p-070acab5.entry.js → p-25ee4bab.entry.js} +2 -2
- package/dist/atomic/{p-6a3efd75.entry.js.map → p-25ee4bab.entry.js.map} +1 -1
- package/dist/atomic/p-268ce7ca.entry.js +2 -0
- package/dist/atomic/{p-a715255f.entry.js.map → p-268ce7ca.entry.js.map} +1 -1
- package/dist/atomic/{p-9c104243.entry.js → p-27746cac.entry.js} +2 -2
- package/dist/atomic/{p-484df738.entry.js → p-2eac7c46.entry.js} +2 -2
- package/dist/atomic/{p-55eae6bc.entry.js → p-3282ccf8.entry.js} +2 -2
- package/dist/atomic/{p-5c12aebe.entry.js → p-33b3b967.entry.js} +2 -2
- package/dist/atomic/{p-12636f55.entry.js → p-36270a85.entry.js} +2 -2
- package/dist/atomic/{p-1fe5514d.entry.js → p-37182242.entry.js} +2 -2
- package/dist/atomic/{p-7c5c836e.entry.js → p-3becda0c.entry.js} +2 -2
- package/dist/atomic/{p-201b58b3.js → p-3dc06261.js} +2 -2
- package/dist/atomic/p-3ec45f9c.entry.js +2 -0
- package/dist/atomic/{p-419de484.entry.js.map → p-3ec45f9c.entry.js.map} +1 -1
- package/dist/atomic/p-3f3f6b14.entry.js +2 -0
- package/dist/atomic/{p-de4dfbec.entry.js.map → p-3f3f6b14.entry.js.map} +1 -1
- package/dist/atomic/{p-3b52e039.js → p-4080f740.js} +2 -2
- package/dist/atomic/{p-2eb2676d.entry.js → p-4206b797.entry.js} +2 -2
- package/dist/atomic/{p-084e4c5c.entry.js → p-458697db.entry.js} +2 -2
- package/dist/atomic/p-47002021.entry.js +2 -0
- package/dist/atomic/{p-e4f7e454.entry.js.map → p-47002021.entry.js.map} +1 -1
- package/dist/atomic/{p-de7950d9.entry.js → p-4778132c.entry.js} +2 -2
- package/dist/atomic/{p-ef9257fa.entry.js → p-4bc0dc09.entry.js} +2 -2
- package/dist/atomic/p-4cf97b0a.entry.js +2 -0
- package/dist/atomic/{p-3e81928e.entry.js.map → p-4cf97b0a.entry.js.map} +1 -1
- package/dist/atomic/{p-f959d5a1.entry.js → p-530396d4.entry.js} +2 -2
- package/dist/atomic/{p-078926b2.entry.js → p-582ce205.entry.js} +2 -2
- package/dist/atomic/p-5a9460ab.entry.js +2 -0
- package/dist/atomic/{p-1e01224b.entry.js.map → p-5a9460ab.entry.js.map} +1 -1
- package/dist/atomic/{p-fc60a035.entry.js → p-5cebd4f8.entry.js} +2 -2
- package/dist/atomic/p-5e5599f3.js +1 -1
- package/dist/atomic/{p-851709f5.entry.js → p-5eaee0be.entry.js} +2 -2
- package/dist/atomic/p-609d0550.entry.js +2 -0
- package/dist/atomic/{p-ddfcae3b.entry.js.map → p-609d0550.entry.js.map} +1 -1
- package/dist/atomic/{p-63423f6b.entry.js → p-6489c611.entry.js} +2 -2
- package/dist/atomic/{p-f7b70070.entry.js → p-66beb63a.entry.js} +2 -2
- package/dist/atomic/{p-070acab5.entry.js.map → p-66beb63a.entry.js.map} +1 -1
- package/dist/atomic/{p-e0c9ddd5.entry.js → p-67f62282.entry.js} +2 -2
- package/dist/atomic/p-690cb10f.entry.js +2 -0
- package/dist/atomic/{p-d5421c6b.entry.js.map → p-690cb10f.entry.js.map} +1 -1
- package/dist/atomic/p-6a3b139f.entry.js +2 -0
- package/dist/atomic/{p-7f137439.entry.js.map → p-6a3b139f.entry.js.map} +1 -1
- package/dist/atomic/{p-54235369.entry.js → p-6ca16a70.entry.js} +2 -2
- package/dist/atomic/p-6d0e9fad.entry.js +2 -0
- package/dist/atomic/{p-30c064ed.entry.js.map → p-6d0e9fad.entry.js.map} +1 -1
- package/dist/atomic/{p-edb34365.entry.js → p-6da5e67e.entry.js} +2 -2
- package/dist/atomic/p-6f93d6d6.entry.js +2 -0
- package/dist/atomic/{p-a5b65a11.entry.js.map → p-6f93d6d6.entry.js.map} +1 -1
- package/dist/atomic/{p-e0d8e122.entry.js → p-72cdb9d8.entry.js} +2 -2
- package/dist/atomic/p-798598a4.entry.js +2 -0
- package/dist/atomic/{p-a81f3714.entry.js.map → p-798598a4.entry.js.map} +1 -1
- package/dist/atomic/p-7bf809eb.entry.js +2 -0
- package/dist/atomic/{p-798b20e3.entry.js.map → p-7bf809eb.entry.js.map} +1 -1
- package/dist/atomic/{p-bb3a2ec9.entry.js → p-81b00c43.entry.js} +2 -2
- package/dist/atomic/{p-cb378159.entry.js → p-847cdfd5.entry.js} +2 -2
- package/dist/atomic/{p-1cd42a4e.entry.js → p-84ac45b4.entry.js} +2 -2
- package/dist/atomic/p-875eb57b.entry.js +2 -0
- package/dist/atomic/{p-2dab3401.entry.js.map → p-875eb57b.entry.js.map} +1 -1
- package/dist/atomic/{p-d7eb9531.entry.js → p-87eafe2f.entry.js} +2 -2
- package/dist/atomic/{p-939aac48.entry.js → p-895da76b.entry.js} +2 -2
- package/dist/atomic/{p-af358e98.entry.js → p-8b0cf1d4.entry.js} +2 -2
- package/dist/atomic/p-8b0cf1d4.entry.js.map +1 -0
- package/dist/atomic/{p-3cc5717d.entry.js → p-8d1f7884.entry.js} +2 -2
- package/dist/atomic/{p-44bf0e38.entry.js → p-8d63a0c4.entry.js} +2 -2
- package/dist/atomic/{p-f4ff8e62.entry.js.map → p-8d63a0c4.entry.js.map} +1 -1
- package/dist/atomic/p-8e964890.entry.js +2 -0
- package/dist/atomic/{p-3dadbb3a.entry.js.map → p-8e964890.entry.js.map} +1 -1
- package/dist/atomic/{p-5363fc15.entry.js → p-90ace4cd.entry.js} +2 -2
- package/dist/atomic/{p-396308f6.entry.js → p-91260e2b.entry.js} +2 -2
- package/dist/atomic/p-9389337e.entry.js +2 -0
- package/dist/atomic/{p-d0b9f281.entry.js.map → p-9389337e.entry.js.map} +1 -1
- package/dist/atomic/{p-043e25e1.entry.js → p-9392b7da.entry.js} +2 -2
- package/dist/atomic/{p-a0f803cf.entry.js → p-9519e656.entry.js} +2 -2
- package/dist/atomic/p-98790c52.entry.js +2 -0
- package/dist/atomic/{p-ea1a448d.entry.js.map → p-98790c52.entry.js.map} +1 -1
- package/dist/atomic/{p-1b5acaf7.entry.js → p-9aad555a.entry.js} +2 -2
- package/dist/atomic/{p-4c58b5ee.js → p-9ae68e86.js} +2 -2
- package/dist/atomic/p-9ae68e86.js.map +1 -0
- package/dist/atomic/p-a48ae7ab.entry.js +2 -0
- package/dist/atomic/{p-4a172f6c.entry.js.map → p-a48ae7ab.entry.js.map} +1 -1
- package/dist/atomic/{p-b9909a73.entry.js → p-a78cbb80.entry.js} +2 -2
- package/dist/atomic/p-a78cbb80.entry.js.map +1 -0
- package/dist/atomic/{p-6fc8bf11.entry.js → p-a9016629.entry.js} +2 -2
- package/dist/atomic/p-a9016629.entry.js.map +1 -0
- package/dist/atomic/p-ab3da44d.entry.js +2 -0
- package/dist/atomic/{p-8fe875c1.entry.js.map → p-ab3da44d.entry.js.map} +1 -1
- package/dist/atomic/{p-be0518ae.js → p-acd1a1d3.js} +1 -1
- package/dist/atomic/p-acd1a1d3.js.map +1 -0
- package/dist/atomic/{p-944d38f4.entry.js → p-acd72087.entry.js} +2 -2
- package/dist/atomic/{p-9afbdee1.entry.js → p-ae071697.entry.js} +2 -2
- package/dist/atomic/{p-2d4b229d.entry.js → p-ae346172.entry.js} +2 -2
- package/dist/atomic/{p-1fabc1e7.entry.js → p-b06de6f8.entry.js} +2 -2
- package/dist/atomic/p-b93c93f7.entry.js +2 -0
- package/dist/atomic/{p-c966da1f.entry.js.map → p-b93c93f7.entry.js.map} +1 -1
- package/dist/atomic/{p-f3c0122f.entry.js → p-b9eeac20.entry.js} +2 -2
- package/dist/atomic/p-b9eeac20.entry.js.map +1 -0
- package/dist/atomic/{p-e9afb6ee.entry.js → p-bb0e0b5d.entry.js} +2 -2
- package/dist/atomic/p-c3451367.js +2 -0
- package/dist/atomic/{p-c8df6cfb.entry.js → p-c402cc93.entry.js} +2 -2
- package/dist/atomic/{p-d0e5fd5e.entry.js.map → p-c402cc93.entry.js.map} +1 -1
- package/dist/atomic/{p-127e1891.entry.js → p-c45361ac.entry.js} +2 -2
- package/dist/atomic/p-c82dd1aa.entry.js +2 -0
- package/dist/atomic/{p-c8df6cfb.entry.js.map → p-c82dd1aa.entry.js.map} +1 -1
- package/dist/atomic/p-c9074946.js +2 -0
- package/dist/atomic/p-c9074946.js.map +1 -0
- package/dist/atomic/{p-f983e811.js → p-cae02339.js} +2 -2
- package/dist/atomic/p-cbec8d32.entry.js +2 -0
- package/dist/atomic/{p-dcbef3e1.entry.js.map → p-cbec8d32.entry.js.map} +1 -1
- package/dist/atomic/{p-f20fe78c.entry.js → p-cd047d6d.entry.js} +2 -2
- package/dist/atomic/{p-79ae5adc.entry.js → p-ceca3fb8.entry.js} +2 -2
- package/dist/atomic/{p-62215819.entry.js → p-cf0a69e5.entry.js} +2 -2
- package/dist/atomic/{p-d4e0d62c.entry.js → p-d0937472.entry.js} +2 -2
- package/dist/atomic/{p-52c8c827.entry.js → p-d3d0ac7c.entry.js} +2 -2
- package/dist/atomic/{p-96d988a8.entry.js → p-d5402772.entry.js} +2 -2
- package/dist/atomic/{p-aa0d5996.entry.js → p-d8d346f3.entry.js} +2 -2
- package/dist/atomic/{p-888c2a4e.entry.js → p-da141605.entry.js} +2 -2
- package/dist/atomic/{p-8eb03300.entry.js → p-da87ef51.entry.js} +2 -2
- package/dist/atomic/p-da87ef51.entry.js.map +1 -0
- package/dist/atomic/{p-07323ee1.entry.js → p-dbc08e9e.entry.js} +2 -2
- package/dist/atomic/{p-d25c5ce7.entry.js → p-dd258eaa.entry.js} +2 -2
- package/dist/atomic/p-dd258eaa.entry.js.map +1 -0
- package/dist/atomic/{p-5c21cdbd.entry.js → p-e0d103ba.entry.js} +2 -2
- package/dist/atomic/p-e1dbe31d.entry.js +2 -0
- package/dist/atomic/{p-7627f6e0.entry.js.map → p-e1dbe31d.entry.js.map} +1 -1
- package/dist/atomic/{p-892dc31b.entry.js → p-e62caa78.entry.js} +2 -2
- package/dist/atomic/p-e8180b21.entry.js +2 -0
- package/dist/atomic/{p-4255ba1c.entry.js → p-f04c86b4.entry.js} +2 -2
- package/dist/atomic/{p-2da9105b.entry.js → p-f12325cc.entry.js} +2 -2
- package/dist/atomic/p-f44e1bd3.entry.js +2 -0
- package/dist/atomic/{p-f7b70070.entry.js.map → p-f44e1bd3.entry.js.map} +1 -1
- package/dist/atomic/{p-4f6585c0.entry.js → p-f5a0fdc8.entry.js} +2 -2
- package/dist/atomic/{p-f746c040.entry.js → p-f654697b.entry.js} +2 -2
- package/dist/atomic/{p-6cc3f4e6.entry.js → p-f800678c.entry.js} +2 -2
- package/dist/atomic/p-fa83768b.entry.js +2 -0
- package/dist/atomic/{p-f1624191.entry.js.map → p-fa83768b.entry.js.map} +1 -1
- package/dist/atomic/{p-0ff3cddc.entry.js → p-fb517fba.entry.js} +2 -2
- package/dist/atomic/p-fb517fba.entry.js.map +1 -0
- package/dist/atomic/{p-ea1a448d.entry.js → p-fb5598e9.entry.js} +2 -2
- package/dist/atomic/{p-44bf0e38.entry.js.map → p-fb5598e9.entry.js.map} +1 -1
- package/dist/atomic/{p-8347e7a1.entry.js → p-fd7a8926.entry.js} +2 -2
- package/dist/atomic/{p-d67c59f0.entry.js → p-ff23598b.entry.js} +2 -2
- package/dist/atomic/{p-03e01aef.js → p-ff2d324d.js} +2 -2
- package/dist/cjs/_index.cjs.js +5 -7
- package/dist/cjs/atomic-automatic-facet_2.cjs.entry.js +5 -5
- package/dist/cjs/atomic-breadbox.cjs.entry.js +5 -5
- package/dist/cjs/atomic-category-facet.cjs.entry.js +6 -6
- package/dist/cjs/atomic-color-facet.cjs.entry.js +5 -5
- package/dist/cjs/atomic-did-you-mean.cjs.entry.js +3 -5
- package/dist/cjs/atomic-did-you-mean.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-external.cjs.entry.js +2 -4
- package/dist/cjs/atomic-external.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-facet-manager.cjs.entry.js +3 -5
- package/dist/cjs/atomic-facet-manager.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-facet.cjs.entry.js +6 -6
- package/dist/cjs/atomic-field-condition.cjs.entry.js +6 -6
- package/dist/cjs/atomic-field-condition.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-folded-result-list.cjs.entry.js +6 -6
- package/dist/cjs/atomic-generated-answer-feedback-modal.cjs.entry.js +6 -6
- package/dist/cjs/atomic-generated-answer.cjs.entry.js +5 -5
- package/dist/cjs/atomic-html.cjs.entry.js +3 -3
- package/dist/cjs/atomic-insight-facet.cjs.entry.js +6 -6
- package/dist/cjs/atomic-insight-folded-result-list.cjs.entry.js +6 -6
- package/dist/cjs/atomic-insight-full-search-button.cjs.entry.js +3 -5
- package/dist/cjs/atomic-insight-full-search-button.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-layout.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-no-results.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-numeric-facet.cjs.entry.js +6 -6
- package/dist/cjs/atomic-insight-pager.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-query-error.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-query-summary.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-refine-modal.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-refine-toggle.cjs.entry.js +3 -5
- package/dist/cjs/atomic-insight-refine-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result-action.cjs.entry.js +5 -7
- package/dist/cjs/atomic-insight-result-action.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result-attach-to-case-action.cjs.entry.js +5 -7
- package/dist/cjs/atomic-insight-result-attach-to-case-action.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result-attach-to-case-indicator.cjs.entry.js +5 -7
- package/dist/cjs/atomic-insight-result-attach-to-case-indicator.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result-children-template.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-result-children-template.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result-children.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-result-list.cjs.entry.js +6 -6
- package/dist/cjs/atomic-insight-result-quickview-action.cjs.entry.js +7 -7
- package/dist/cjs/atomic-insight-result-template.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-result-template.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result.cjs.entry.js +4 -4
- package/dist/cjs/atomic-insight-search-box.cjs.entry.js +3 -3
- package/dist/cjs/atomic-insight-smart-snippet-feedback-modal.cjs.entry.js +4 -4
- package/dist/cjs/atomic-insight-smart-snippet-suggestions.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-smart-snippet.cjs.entry.js +4 -4
- package/dist/cjs/atomic-insight-tab.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-tabs.cjs.entry.js +3 -5
- package/dist/cjs/atomic-insight-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-timeframe-facet.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-user-actions-modal.cjs.entry.js +3 -5
- package/dist/cjs/atomic-insight-user-actions-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-user-actions-session_2.cjs.entry.js +3 -4
- package/dist/cjs/atomic-insight-user-actions-session_2.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-user-actions-toggle.cjs.entry.js +3 -5
- package/dist/cjs/atomic-insight-user-actions-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-ipx-body.cjs.entry.js +6 -6
- package/dist/cjs/atomic-ipx-button.cjs.entry.js +3 -5
- package/dist/cjs/atomic-ipx-button.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-ipx-embedded.cjs.entry.js +6 -6
- package/dist/cjs/atomic-ipx-modal.cjs.entry.js +6 -6
- package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js +6 -6
- package/dist/cjs/atomic-ipx-refine-modal.cjs.entry.js +5 -5
- package/dist/cjs/atomic-ipx-refine-toggle.cjs.entry.js +3 -5
- package/dist/cjs/atomic-ipx-refine-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-ipx-result-link.cjs.entry.js +5 -7
- package/dist/cjs/atomic-ipx-result-link.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-ipx-tab.cjs.entry.js +5 -5
- package/dist/cjs/atomic-ipx-tabs.cjs.entry.js +3 -5
- package/dist/cjs/atomic-ipx-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-load-more-results.cjs.entry.js +5 -5
- package/dist/cjs/atomic-no-results.cjs.entry.js +5 -5
- package/dist/cjs/atomic-notifications.cjs.entry.js +5 -5
- package/dist/cjs/atomic-numeric-facet.cjs.entry.js +6 -6
- package/dist/cjs/atomic-popover.cjs.entry.js +3 -5
- package/dist/cjs/atomic-popover.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-query-error.cjs.entry.js +5 -5
- package/dist/cjs/atomic-quickview-modal.cjs.entry.js +3 -5
- package/dist/cjs/atomic-quickview-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-quickview.cjs.entry.js +7 -7
- package/dist/cjs/atomic-rating-facet.cjs.entry.js +5 -5
- package/dist/cjs/atomic-rating-range-facet.cjs.entry.js +5 -5
- package/dist/cjs/atomic-recs-error.cjs.entry.js +5 -5
- package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-recs-list.cjs.entry.js +6 -6
- package/dist/cjs/atomic-recs-result-template.cjs.entry.js +5 -5
- package/dist/cjs/atomic-recs-result-template.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-recs-result.cjs.entry.js +4 -4
- package/dist/cjs/atomic-refine-modal.cjs.entry.js +5 -5
- package/dist/cjs/atomic-refine-toggle.cjs.entry.js +3 -5
- package/dist/cjs/atomic-refine-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-badge.cjs.entry.js +3 -5
- package/dist/cjs/atomic-result-badge.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-children-template.cjs.entry.js +4 -4
- package/dist/cjs/atomic-result-children-template.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-children.cjs.entry.js +6 -6
- package/dist/cjs/atomic-result-date.cjs.entry.js +5 -6
- package/dist/cjs/atomic-result-date.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-fields-list.cjs.entry.js +3 -5
- package/dist/cjs/atomic-result-fields-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-html.cjs.entry.js +5 -7
- package/dist/cjs/atomic-result-html.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-icon.cjs.entry.js +3 -3
- package/dist/cjs/atomic-result-image.cjs.entry.js +5 -7
- package/dist/cjs/atomic-result-image.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-link.cjs.entry.js +5 -7
- package/dist/cjs/atomic-result-link.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-list.cjs.entry.js +7 -7
- package/dist/cjs/atomic-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-localized-text.cjs.entry.js +7 -7
- package/dist/cjs/atomic-result-multi-value-text.cjs.entry.js +7 -7
- package/dist/cjs/atomic-result-number.cjs.entry.js +5 -7
- package/dist/cjs/atomic-result-number.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-printable-uri.cjs.entry.js +7 -7
- package/dist/cjs/atomic-result-rating.cjs.entry.js +5 -7
- package/dist/cjs/atomic-result-rating.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-template.cjs.entry.js +4 -4
- package/dist/cjs/atomic-result-template.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-text_2.cjs.entry.js +5 -7
- package/dist/cjs/atomic-result-text_2.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result-timespan.cjs.entry.js +5 -6
- package/dist/cjs/atomic-result-timespan.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-result.cjs.entry.js +4 -4
- package/dist/cjs/atomic-search-box.cjs.entry.js +6 -6
- package/dist/cjs/atomic-segmented-facet-scrollable.cjs.entry.js +3 -5
- package/dist/cjs/atomic-segmented-facet-scrollable.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-segmented-facet.cjs.entry.js +5 -5
- package/dist/cjs/atomic-smart-snippet-answer_2.cjs.entry.js +3 -3
- package/dist/cjs/atomic-smart-snippet-collapse-wrapper_2.cjs.entry.js +3 -5
- package/dist/cjs/atomic-smart-snippet-collapse-wrapper_2.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-smart-snippet-feedback-modal.cjs.entry.js +4 -4
- package/dist/cjs/atomic-smart-snippet-suggestions.cjs.entry.js +4 -4
- package/dist/cjs/atomic-smart-snippet.cjs.entry.js +3 -3
- package/dist/cjs/atomic-sort-dropdown.cjs.entry.js +5 -5
- package/dist/cjs/atomic-tab-bar_2.cjs.entry.js +3 -5
- package/dist/cjs/atomic-tab-bar_2.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-tab-manager.cjs.entry.js +3 -5
- package/dist/cjs/atomic-tab-manager.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-timeframe-facet.cjs.entry.js +5 -5
- package/dist/cjs/{dom-utils-99b6ae8e.js → dom-utils-d4790328.js} +1 -3
- package/dist/cjs/dom-utils-d4790328.js.map +1 -0
- package/dist/cjs/{facet-guard-86d4d9eb.js → facet-guard-0e8cbe50.js} +2 -2
- package/dist/cjs/{facet-guard-86d4d9eb.js.map → facet-guard-0e8cbe50.js.map} +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/{initialization-lit-stencil-common-utils-4aa43394.js → initialization-lit-stencil-common-utils-730030b0.js} +2 -2
- package/dist/cjs/{initialization-lit-stencil-common-utils-4aa43394.js.map → initialization-lit-stencil-common-utils-730030b0.js.map} +1 -1
- package/dist/cjs/{initialization-utils-bd73b57a.js → initialization-utils-92f1b080.js} +3 -3
- package/dist/cjs/{initialization-utils-bd73b57a.js.map → initialization-utils-92f1b080.js.map} +1 -1
- package/dist/cjs/{replace-breakpoint-utils-929b72a8.js → replace-breakpoint-utils-47f2eaa4.js} +2 -2
- package/dist/cjs/{replace-breakpoint-utils-929b72a8.js.map → replace-breakpoint-utils-47f2eaa4.js.map} +1 -1
- package/dist/cjs/{stencil-result-template-common-9906bb6a.js → result-template-common-bc03b2ad.js} +2 -2
- package/dist/cjs/result-template-common-bc03b2ad.js.map +1 -0
- package/dist/cjs/{stencil-item-decorators-ac2e8fa8.js → stencil-item-decorators-43a96f33.js} +2 -2
- package/dist/cjs/{stencil-item-decorators-ac2e8fa8.js.map → stencil-item-decorators-43a96f33.js.map} +1 -1
- package/dist/cjs/stencil-item-list-common-b08abf21.js +1 -1
- package/dist/cjs/{stencil-result-template-decorators-3a5f1319.js → stencil-result-template-decorators-28b05aaf.js} +2 -2
- package/dist/cjs/{stencil-result-template-decorators-3a5f1319.js.map → stencil-result-template-decorators-28b05aaf.js.map} +1 -1
- package/dist/cjs/{table-element-utils-2cc6dc82.js → table-element-utils-4865b735.js} +1 -1
- package/dist/cjs/table-element-utils-4865b735.js.map +1 -0
- package/dist/cjs/timeframe-facet-common-b08ffe64.js +1 -1
- package/dist/cjs/version.cjs.js +2 -2
- package/dist/esm/_index.js +5 -7
- package/dist/esm/atomic-automatic-facet_2.entry.js +5 -5
- package/dist/esm/atomic-breadbox.entry.js +5 -5
- package/dist/esm/atomic-category-facet.entry.js +6 -6
- package/dist/esm/atomic-color-facet.entry.js +5 -5
- package/dist/esm/atomic-did-you-mean.entry.js +3 -5
- package/dist/esm/atomic-did-you-mean.entry.js.map +1 -1
- package/dist/esm/atomic-external.entry.js +2 -4
- package/dist/esm/atomic-external.entry.js.map +1 -1
- package/dist/esm/atomic-facet-manager.entry.js +3 -5
- package/dist/esm/atomic-facet-manager.entry.js.map +1 -1
- package/dist/esm/atomic-facet.entry.js +6 -6
- package/dist/esm/atomic-field-condition.entry.js +5 -5
- package/dist/esm/atomic-field-condition.entry.js.map +1 -1
- package/dist/esm/atomic-folded-result-list.entry.js +6 -6
- package/dist/esm/atomic-generated-answer-feedback-modal.entry.js +6 -6
- package/dist/esm/atomic-generated-answer.entry.js +5 -5
- package/dist/esm/atomic-html.entry.js +3 -3
- package/dist/esm/atomic-insight-facet.entry.js +6 -6
- package/dist/esm/atomic-insight-folded-result-list.entry.js +6 -6
- package/dist/esm/atomic-insight-full-search-button.entry.js +3 -5
- package/dist/esm/atomic-insight-full-search-button.entry.js.map +1 -1
- package/dist/esm/atomic-insight-generated-answer.entry.js +5 -5
- package/dist/esm/atomic-insight-layout.entry.js +5 -5
- package/dist/esm/atomic-insight-no-results.entry.js +5 -5
- package/dist/esm/atomic-insight-numeric-facet.entry.js +6 -6
- package/dist/esm/atomic-insight-pager.entry.js +5 -5
- package/dist/esm/atomic-insight-query-error.entry.js +5 -5
- package/dist/esm/atomic-insight-query-summary.entry.js +5 -5
- package/dist/esm/atomic-insight-refine-modal.entry.js +5 -5
- package/dist/esm/atomic-insight-refine-toggle.entry.js +3 -5
- package/dist/esm/atomic-insight-refine-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result-action.entry.js +5 -7
- package/dist/esm/atomic-insight-result-action.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result-attach-to-case-action.entry.js +5 -7
- package/dist/esm/atomic-insight-result-attach-to-case-action.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result-attach-to-case-indicator.entry.js +5 -7
- package/dist/esm/atomic-insight-result-attach-to-case-indicator.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result-children-template.entry.js +2 -2
- package/dist/esm/atomic-insight-result-children-template.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result-children.entry.js +5 -5
- package/dist/esm/atomic-insight-result-list.entry.js +6 -6
- package/dist/esm/atomic-insight-result-quickview-action.entry.js +7 -7
- package/dist/esm/atomic-insight-result-template.entry.js +2 -2
- package/dist/esm/atomic-insight-result-template.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result.entry.js +4 -4
- package/dist/esm/atomic-insight-search-box.entry.js +3 -3
- package/dist/esm/atomic-insight-smart-snippet-feedback-modal.entry.js +4 -4
- package/dist/esm/atomic-insight-smart-snippet-suggestions.entry.js +5 -5
- package/dist/esm/atomic-insight-smart-snippet.entry.js +4 -4
- package/dist/esm/atomic-insight-tab.entry.js +5 -5
- package/dist/esm/atomic-insight-tabs.entry.js +3 -5
- package/dist/esm/atomic-insight-tabs.entry.js.map +1 -1
- package/dist/esm/atomic-insight-timeframe-facet.entry.js +5 -5
- package/dist/esm/atomic-insight-user-actions-modal.entry.js +3 -5
- package/dist/esm/atomic-insight-user-actions-modal.entry.js.map +1 -1
- package/dist/esm/atomic-insight-user-actions-session_2.entry.js +3 -4
- package/dist/esm/atomic-insight-user-actions-session_2.entry.js.map +1 -1
- package/dist/esm/atomic-insight-user-actions-toggle.entry.js +3 -5
- package/dist/esm/atomic-insight-user-actions-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-ipx-body.entry.js +6 -6
- package/dist/esm/atomic-ipx-button.entry.js +3 -5
- package/dist/esm/atomic-ipx-button.entry.js.map +1 -1
- package/dist/esm/atomic-ipx-embedded.entry.js +6 -6
- package/dist/esm/atomic-ipx-modal.entry.js +6 -6
- package/dist/esm/atomic-ipx-recs-list.entry.js +6 -6
- package/dist/esm/atomic-ipx-refine-modal.entry.js +5 -5
- package/dist/esm/atomic-ipx-refine-toggle.entry.js +3 -5
- package/dist/esm/atomic-ipx-refine-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-ipx-result-link.entry.js +5 -7
- package/dist/esm/atomic-ipx-result-link.entry.js.map +1 -1
- package/dist/esm/atomic-ipx-tab.entry.js +5 -5
- package/dist/esm/atomic-ipx-tabs.entry.js +3 -5
- package/dist/esm/atomic-ipx-tabs.entry.js.map +1 -1
- package/dist/esm/atomic-load-more-results.entry.js +5 -5
- package/dist/esm/atomic-no-results.entry.js +5 -5
- package/dist/esm/atomic-notifications.entry.js +5 -5
- package/dist/esm/atomic-numeric-facet.entry.js +6 -6
- package/dist/esm/atomic-popover.entry.js +3 -5
- package/dist/esm/atomic-popover.entry.js.map +1 -1
- package/dist/esm/atomic-query-error.entry.js +5 -5
- package/dist/esm/atomic-quickview-modal.entry.js +3 -5
- package/dist/esm/atomic-quickview-modal.entry.js.map +1 -1
- package/dist/esm/atomic-quickview.entry.js +7 -7
- package/dist/esm/atomic-rating-facet.entry.js +5 -5
- package/dist/esm/atomic-rating-range-facet.entry.js +5 -5
- package/dist/esm/atomic-recs-error.entry.js +5 -5
- package/dist/esm/atomic-recs-interface.entry.js +1 -1
- package/dist/esm/atomic-recs-list.entry.js +6 -6
- package/dist/esm/atomic-recs-result-template.entry.js +2 -2
- package/dist/esm/atomic-recs-result-template.entry.js.map +1 -1
- package/dist/esm/atomic-recs-result.entry.js +4 -4
- package/dist/esm/atomic-refine-modal.entry.js +5 -5
- package/dist/esm/atomic-refine-toggle.entry.js +3 -5
- package/dist/esm/atomic-refine-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-result-badge.entry.js +3 -5
- package/dist/esm/atomic-result-badge.entry.js.map +1 -1
- package/dist/esm/atomic-result-children-template.entry.js +2 -2
- package/dist/esm/atomic-result-children-template.entry.js.map +1 -1
- package/dist/esm/atomic-result-children.entry.js +6 -6
- package/dist/esm/atomic-result-date.entry.js +5 -6
- package/dist/esm/atomic-result-date.entry.js.map +1 -1
- package/dist/esm/atomic-result-fields-list.entry.js +3 -5
- package/dist/esm/atomic-result-fields-list.entry.js.map +1 -1
- package/dist/esm/atomic-result-html.entry.js +5 -7
- package/dist/esm/atomic-result-html.entry.js.map +1 -1
- package/dist/esm/atomic-result-icon.entry.js +3 -3
- package/dist/esm/atomic-result-image.entry.js +5 -7
- package/dist/esm/atomic-result-image.entry.js.map +1 -1
- package/dist/esm/atomic-result-link.entry.js +5 -7
- package/dist/esm/atomic-result-link.entry.js.map +1 -1
- package/dist/esm/atomic-result-list.entry.js +7 -7
- package/dist/esm/atomic-result-list.entry.js.map +1 -1
- package/dist/esm/atomic-result-localized-text.entry.js +7 -7
- package/dist/esm/atomic-result-multi-value-text.entry.js +7 -7
- package/dist/esm/atomic-result-number.entry.js +5 -7
- package/dist/esm/atomic-result-number.entry.js.map +1 -1
- package/dist/esm/atomic-result-printable-uri.entry.js +7 -7
- package/dist/esm/atomic-result-rating.entry.js +5 -7
- package/dist/esm/atomic-result-rating.entry.js.map +1 -1
- package/dist/esm/atomic-result-template.entry.js +2 -2
- package/dist/esm/atomic-result-template.entry.js.map +1 -1
- package/dist/esm/atomic-result-text_2.entry.js +5 -7
- package/dist/esm/atomic-result-text_2.entry.js.map +1 -1
- package/dist/esm/atomic-result-timespan.entry.js +5 -6
- package/dist/esm/atomic-result-timespan.entry.js.map +1 -1
- package/dist/esm/atomic-result.entry.js +4 -4
- package/dist/esm/atomic-search-box.entry.js +6 -6
- package/dist/esm/atomic-segmented-facet-scrollable.entry.js +3 -5
- package/dist/esm/atomic-segmented-facet-scrollable.entry.js.map +1 -1
- package/dist/esm/atomic-segmented-facet.entry.js +5 -5
- package/dist/esm/atomic-smart-snippet-answer_2.entry.js +3 -3
- package/dist/esm/atomic-smart-snippet-collapse-wrapper_2.entry.js +3 -5
- package/dist/esm/atomic-smart-snippet-collapse-wrapper_2.entry.js.map +1 -1
- package/dist/esm/atomic-smart-snippet-feedback-modal.entry.js +4 -4
- package/dist/esm/atomic-smart-snippet-suggestions.entry.js +4 -4
- package/dist/esm/atomic-smart-snippet.entry.js +3 -3
- package/dist/esm/atomic-sort-dropdown.entry.js +5 -5
- package/dist/esm/atomic-tab-bar_2.entry.js +3 -5
- package/dist/esm/atomic-tab-bar_2.entry.js.map +1 -1
- package/dist/esm/atomic-tab-manager.entry.js +3 -5
- package/dist/esm/atomic-tab-manager.entry.js.map +1 -1
- package/dist/esm/atomic-timeframe-facet.entry.js +5 -5
- package/dist/esm/{dom-utils-7444dea4.js → dom-utils-f6086cd3.js} +1 -3
- package/dist/esm/dom-utils-f6086cd3.js.map +1 -0
- package/dist/esm/{facet-guard-9dfe4a77.js → facet-guard-3bb4a306.js} +2 -2
- package/dist/esm/{facet-guard-9dfe4a77.js.map → facet-guard-3bb4a306.js.map} +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{initialization-lit-stencil-common-utils-8013d595.js → initialization-lit-stencil-common-utils-804fe146.js} +2 -2
- package/dist/esm/{initialization-lit-stencil-common-utils-8013d595.js.map → initialization-lit-stencil-common-utils-804fe146.js.map} +1 -1
- package/dist/esm/{initialization-utils-39016e9b.js → initialization-utils-ffbc4136.js} +3 -3
- package/dist/esm/{initialization-utils-39016e9b.js.map → initialization-utils-ffbc4136.js.map} +1 -1
- package/dist/esm/{replace-breakpoint-utils-0f20353d.js → replace-breakpoint-utils-13ff9ca5.js} +2 -2
- package/dist/esm/{replace-breakpoint-utils-0f20353d.js.map → replace-breakpoint-utils-13ff9ca5.js.map} +1 -1
- package/dist/esm/{stencil-result-template-common-7dc3918a.js → result-template-common-47799c7c.js} +2 -2
- package/dist/esm/result-template-common-47799c7c.js.map +1 -0
- package/dist/esm/{stencil-item-decorators-33feff1a.js → stencil-item-decorators-6c453c11.js} +2 -2
- package/dist/esm/{stencil-item-decorators-33feff1a.js.map → stencil-item-decorators-6c453c11.js.map} +1 -1
- package/dist/esm/stencil-item-list-common-d2833d51.js +1 -1
- package/dist/esm/{stencil-result-template-decorators-3874fa73.js → stencil-result-template-decorators-f989bc6b.js} +2 -2
- package/dist/esm/{stencil-result-template-decorators-3874fa73.js.map → stencil-result-template-decorators-f989bc6b.js.map} +1 -1
- package/dist/esm/{table-element-utils-1dbc5ef6.js → table-element-utils-49d22ec6.js} +1 -1
- package/dist/esm/table-element-utils-49d22ec6.js.map +1 -0
- package/dist/esm/timeframe-facet-common-33642d0d.js +1 -1
- package/dist/esm/version.js +2 -2
- package/dist/types/components/common/product-template/product-template-common.d.ts +6 -0
- package/dist/types/components/common/product-template/product-template-controller.d.ts +19 -5
- package/dist/types/components/common/product-template/stencil-product-template-common.d.ts +1 -1
- package/dist/types/components/insight/result-templates/atomic-insight-result-children-template/atomic-insight-result-children-template.d.ts +1 -1
- package/dist/types/components/search/result-templates/atomic-result-children-template/atomic-result-children-template.d.ts +1 -1
- package/dist/types/utils/dom-utils.d.ts +0 -1
- package/docs/atomic-docs.json +1 -1
- package/package.json +3 -3
- package/dist/atomic/components/components/common/template-controller/base-template-controller.js +0 -91
- package/dist/atomic/components/stencil-result-template-common.js.map +0 -1
- package/dist/atomic/p-0ff3cddc.entry.js.map +0 -1
- package/dist/atomic/p-1e01224b.entry.js +0 -2
- package/dist/atomic/p-2dab3401.entry.js +0 -2
- package/dist/atomic/p-30c064ed.entry.js +0 -2
- package/dist/atomic/p-3dadbb3a.entry.js +0 -2
- package/dist/atomic/p-3e81928e.entry.js +0 -2
- package/dist/atomic/p-419de484.entry.js +0 -2
- package/dist/atomic/p-4219863f.entry.js +0 -2
- package/dist/atomic/p-4a172f6c.entry.js +0 -2
- package/dist/atomic/p-4c58b5ee.js.map +0 -1
- package/dist/atomic/p-601b8ab7.entry.js +0 -2
- package/dist/atomic/p-6a3efd75.entry.js +0 -2
- package/dist/atomic/p-6ef684df.js +0 -2
- package/dist/atomic/p-6ef684df.js.map +0 -1
- package/dist/atomic/p-6fc8bf11.entry.js.map +0 -1
- package/dist/atomic/p-7627f6e0.entry.js +0 -2
- package/dist/atomic/p-798b20e3.entry.js +0 -2
- package/dist/atomic/p-7f137439.entry.js +0 -2
- package/dist/atomic/p-81310591.js +0 -2
- package/dist/atomic/p-8eb03300.entry.js.map +0 -1
- package/dist/atomic/p-8fe875c1.entry.js +0 -2
- package/dist/atomic/p-a5b65a11.entry.js +0 -2
- package/dist/atomic/p-a715255f.entry.js +0 -2
- package/dist/atomic/p-a81f3714.entry.js +0 -2
- package/dist/atomic/p-af358e98.entry.js.map +0 -1
- package/dist/atomic/p-b9909a73.entry.js.map +0 -1
- package/dist/atomic/p-be0518ae.js.map +0 -1
- package/dist/atomic/p-c966da1f.entry.js +0 -2
- package/dist/atomic/p-d0b9f281.entry.js +0 -2
- package/dist/atomic/p-d0e5fd5e.entry.js +0 -2
- package/dist/atomic/p-d25c5ce7.entry.js.map +0 -1
- package/dist/atomic/p-d5421c6b.entry.js +0 -2
- package/dist/atomic/p-dcbef3e1.entry.js +0 -2
- package/dist/atomic/p-ddfcae3b.entry.js +0 -2
- package/dist/atomic/p-de4dfbec.entry.js +0 -2
- package/dist/atomic/p-e2d99a33.entry.js +0 -2
- package/dist/atomic/p-e4f7e454.entry.js +0 -2
- package/dist/atomic/p-f1624191.entry.js +0 -2
- package/dist/atomic/p-f3c0122f.entry.js.map +0 -1
- package/dist/atomic/p-f4ff8e62.entry.js +0 -2
- package/dist/atomic/p-f8f7ebc9.entry.js +0 -2
- package/dist/cjs/dom-utils-99b6ae8e.js.map +0 -1
- package/dist/cjs/stencil-result-template-common-9906bb6a.js.map +0 -1
- package/dist/cjs/table-element-utils-2cc6dc82.js.map +0 -1
- package/dist/esm/dom-utils-7444dea4.js.map +0 -1
- package/dist/esm/stencil-result-template-common-7dc3918a.js.map +0 -1
- package/dist/esm/table-element-utils-1dbc5ef6.js.map +0 -1
- package/dist/types/components/common/result-templates/result-template-controller.d.ts +0 -12
- package/dist/types/components/common/template-controller/base-template-controller.d.ts +0 -34
- package/dist/types/components/common/template-controller/template-utils.d.ts +0 -11
- /package/dist/atomic/components/components/{common → search/atomic-table-result}/table-element-utils.js +0 -0
- /package/dist/atomic/{p-64bf37c9.entry.js.map → p-0035e3da.entry.js.map} +0 -0
- /package/dist/atomic/{p-b3fb5a74.entry.js.map → p-02f2ac0b.entry.js.map} +0 -0
- /package/dist/atomic/{p-0de79f5f.entry.js.map → p-066df32a.entry.js.map} +0 -0
- /package/dist/atomic/{p-e40cac9e.entry.js.map → p-06bc57be.entry.js.map} +0 -0
- /package/dist/atomic/{p-060e1a2c.entry.js.map → p-104d7a84.entry.js.map} +0 -0
- /package/dist/atomic/{p-d537096a.js.map → p-1fca38e1.js.map} +0 -0
- /package/dist/atomic/{p-f7c3528f.entry.js.map → p-2033533c.entry.js.map} +0 -0
- /package/dist/atomic/{p-9c104243.entry.js.map → p-27746cac.entry.js.map} +0 -0
- /package/dist/atomic/{p-484df738.entry.js.map → p-2eac7c46.entry.js.map} +0 -0
- /package/dist/atomic/{p-55eae6bc.entry.js.map → p-3282ccf8.entry.js.map} +0 -0
- /package/dist/atomic/{p-5c12aebe.entry.js.map → p-33b3b967.entry.js.map} +0 -0
- /package/dist/atomic/{p-12636f55.entry.js.map → p-36270a85.entry.js.map} +0 -0
- /package/dist/atomic/{p-1fe5514d.entry.js.map → p-37182242.entry.js.map} +0 -0
- /package/dist/atomic/{p-7c5c836e.entry.js.map → p-3becda0c.entry.js.map} +0 -0
- /package/dist/atomic/{p-201b58b3.js.map → p-3dc06261.js.map} +0 -0
- /package/dist/atomic/{p-3b52e039.js.map → p-4080f740.js.map} +0 -0
- /package/dist/atomic/{p-2eb2676d.entry.js.map → p-4206b797.entry.js.map} +0 -0
- /package/dist/atomic/{p-084e4c5c.entry.js.map → p-458697db.entry.js.map} +0 -0
- /package/dist/atomic/{p-de7950d9.entry.js.map → p-4778132c.entry.js.map} +0 -0
- /package/dist/atomic/{p-ef9257fa.entry.js.map → p-4bc0dc09.entry.js.map} +0 -0
- /package/dist/atomic/{p-f959d5a1.entry.js.map → p-530396d4.entry.js.map} +0 -0
- /package/dist/atomic/{p-078926b2.entry.js.map → p-582ce205.entry.js.map} +0 -0
- /package/dist/atomic/{p-fc60a035.entry.js.map → p-5cebd4f8.entry.js.map} +0 -0
- /package/dist/atomic/{p-851709f5.entry.js.map → p-5eaee0be.entry.js.map} +0 -0
- /package/dist/atomic/{p-63423f6b.entry.js.map → p-6489c611.entry.js.map} +0 -0
- /package/dist/atomic/{p-e0c9ddd5.entry.js.map → p-67f62282.entry.js.map} +0 -0
- /package/dist/atomic/{p-54235369.entry.js.map → p-6ca16a70.entry.js.map} +0 -0
- /package/dist/atomic/{p-edb34365.entry.js.map → p-6da5e67e.entry.js.map} +0 -0
- /package/dist/atomic/{p-e0d8e122.entry.js.map → p-72cdb9d8.entry.js.map} +0 -0
- /package/dist/atomic/{p-bb3a2ec9.entry.js.map → p-81b00c43.entry.js.map} +0 -0
- /package/dist/atomic/{p-cb378159.entry.js.map → p-847cdfd5.entry.js.map} +0 -0
- /package/dist/atomic/{p-1cd42a4e.entry.js.map → p-84ac45b4.entry.js.map} +0 -0
- /package/dist/atomic/{p-d7eb9531.entry.js.map → p-87eafe2f.entry.js.map} +0 -0
- /package/dist/atomic/{p-939aac48.entry.js.map → p-895da76b.entry.js.map} +0 -0
- /package/dist/atomic/{p-3cc5717d.entry.js.map → p-8d1f7884.entry.js.map} +0 -0
- /package/dist/atomic/{p-5363fc15.entry.js.map → p-90ace4cd.entry.js.map} +0 -0
- /package/dist/atomic/{p-396308f6.entry.js.map → p-91260e2b.entry.js.map} +0 -0
- /package/dist/atomic/{p-043e25e1.entry.js.map → p-9392b7da.entry.js.map} +0 -0
- /package/dist/atomic/{p-a0f803cf.entry.js.map → p-9519e656.entry.js.map} +0 -0
- /package/dist/atomic/{p-1b5acaf7.entry.js.map → p-9aad555a.entry.js.map} +0 -0
- /package/dist/atomic/{p-944d38f4.entry.js.map → p-acd72087.entry.js.map} +0 -0
- /package/dist/atomic/{p-9afbdee1.entry.js.map → p-ae071697.entry.js.map} +0 -0
- /package/dist/atomic/{p-2d4b229d.entry.js.map → p-ae346172.entry.js.map} +0 -0
- /package/dist/atomic/{p-1fabc1e7.entry.js.map → p-b06de6f8.entry.js.map} +0 -0
- /package/dist/atomic/{p-e9afb6ee.entry.js.map → p-bb0e0b5d.entry.js.map} +0 -0
- /package/dist/atomic/{p-81310591.js.map → p-c3451367.js.map} +0 -0
- /package/dist/atomic/{p-127e1891.entry.js.map → p-c45361ac.entry.js.map} +0 -0
- /package/dist/atomic/{p-f983e811.js.map → p-cae02339.js.map} +0 -0
- /package/dist/atomic/{p-f20fe78c.entry.js.map → p-cd047d6d.entry.js.map} +0 -0
- /package/dist/atomic/{p-79ae5adc.entry.js.map → p-ceca3fb8.entry.js.map} +0 -0
- /package/dist/atomic/{p-62215819.entry.js.map → p-cf0a69e5.entry.js.map} +0 -0
- /package/dist/atomic/{p-d4e0d62c.entry.js.map → p-d0937472.entry.js.map} +0 -0
- /package/dist/atomic/{p-52c8c827.entry.js.map → p-d3d0ac7c.entry.js.map} +0 -0
- /package/dist/atomic/{p-96d988a8.entry.js.map → p-d5402772.entry.js.map} +0 -0
- /package/dist/atomic/{p-aa0d5996.entry.js.map → p-d8d346f3.entry.js.map} +0 -0
- /package/dist/atomic/{p-888c2a4e.entry.js.map → p-da141605.entry.js.map} +0 -0
- /package/dist/atomic/{p-07323ee1.entry.js.map → p-dbc08e9e.entry.js.map} +0 -0
- /package/dist/atomic/{p-5c21cdbd.entry.js.map → p-e0d103ba.entry.js.map} +0 -0
- /package/dist/atomic/{p-892dc31b.entry.js.map → p-e62caa78.entry.js.map} +0 -0
- /package/dist/atomic/{p-f8f7ebc9.entry.js.map → p-e8180b21.entry.js.map} +0 -0
- /package/dist/atomic/{p-4255ba1c.entry.js.map → p-f04c86b4.entry.js.map} +0 -0
- /package/dist/atomic/{p-2da9105b.entry.js.map → p-f12325cc.entry.js.map} +0 -0
- /package/dist/atomic/{p-4f6585c0.entry.js.map → p-f5a0fdc8.entry.js.map} +0 -0
- /package/dist/atomic/{p-f746c040.entry.js.map → p-f654697b.entry.js.map} +0 -0
- /package/dist/atomic/{p-6cc3f4e6.entry.js.map → p-f800678c.entry.js.map} +0 -0
- /package/dist/atomic/{p-8347e7a1.entry.js.map → p-fd7a8926.entry.js.map} +0 -0
- /package/dist/atomic/{p-d67c59f0.entry.js.map → p-ff23598b.entry.js.map} +0 -0
- /package/dist/atomic/{p-03e01aef.js.map → p-ff2d324d.js.map} +0 -0
- /package/dist/types/components/common/result-templates/{stencil-result-template-common.d.ts → result-template-common.d.ts} +0 -0
- /package/dist/types/components/{common → search/atomic-table-result}/table-element-utils.d.ts +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["identifierKeywordsSection","QuickviewSidebar","props","words","minimized","numberOfWords","Object","values","length","minimizeButton","h","MinimizeButton","wordsLength","class","HighlightKeywordsCheckbox","Keywords","i18n","onMinimize","highlightKeywords","IconButton","partPrefix","icon","MinimizeIcon","style","title","t","ariaLabel","onClick","badge","undefined","ariaExpanded","toString","ariaControls","onHighlightKeywords","Fragment","StencilCheckbox","text","id","checked","highlightNone","onToggle","htmlFor","map","keyword","wordIsEnabled","keywords","enabled","key","backgroundColor","color","Intl","NumberFormat","language","notation","format","occurrences","FieldsetGroup","label","ArrowDown","disabled","navigateForward","ArrowUp","navigateBackward","tabIndex","ariaPressed","Remove","Add","indexIdentifier","documentIdentifierInIframe","writeDocument","documentWriter","content","open","write","close","scrollingElement","scrollTop","currentResultAlreadyWrittenToDocument","uniqueIdentifier","currentDocIdentifier","getElementById","textContent","ensureSameResultIsNotOverwritten","docIdentifier","createElement","display","setAttribute","body","appendChild","warnAboutLimitedUsageQuickview","logger","warn","QuickviewIframe","onSetIframeRef","sandbox","src","waitForIframeContentToBeWritten","Promise","resolve","setTimeout","ref","async","el","iframeRef","contentDocument","buildQuickviewPreviewBar","iframe","bar","buildPreviewBar","remove","docHeight","scrollHeight","forEach","word","elements","wordElement","previewUnit","buildPreviewUnit","previewBarId","innerHTML","position","top","right","width","height","elementPosition","getBoundingClientRect","border","previewBorderColor","rgbToHsv","r","g","b","max","Math","min","v","d","s","hsvToRgb","i","floor","f","p","q","round","HIGHLIGHT_PREFIX","QuickviewWordHighlight","constructor","stemmingInfoFromIndex","keywordElementInIframe","this","currentNavigationPosition","parsed","parseKeywordIdentifier","getText","keywordIdentifier","focusedColor","computeInvertedColor","computeSaturatedColor","addElement","push","highlightNavigation","putElementIntoView","isTaggedWord","element","nodeName","toLowerCase","currentElement","otherElements","filter","scrollIntoView","innerTextOfHTMLElement","getHighlightedInnerText","resolveOriginalTerm","trim","highlight","found","keys","find","originalTerm","originalTermMatch","stemmingExpansions","stemmingExpansionMatch","stemmingExpansion","getTextOfHTMLElement","children","Array","from","parts","substring","match","keywordTermPart","parseInt","innerText","extractRgb","newSaturation","rSaturated","gSaturated","bSaturated","rgbExtracted","getWordsHighlights","wordsHighlights","querySelectorAll","wordHTMLElementToHighlight","wordHighlight","alreadyScannedKeyword","atomicQuickviewModalCss","AtomicQuickviewModalStyle0","AtomicQuickviewModal","minimizeSidebar","watchHighlightKeywords","handleHighlightsScripts","componentWillLoad","bindings","store","isMobile","reset","result","interactiveResult","renderHeader","headerContent","buildInteractiveResult","engine","options","LinkWithItemAnalytics","href","clickUri","onSelect","select","onBeginDelayedSelect","beginDelayedSelect","onCancelPendingSelect","cancelPendingSelect","className","part","CloseIcon","onClose","slot","renderBody","minimize","quickviewSrc","quickviewUniqueIdentifier","termsToHighlight","renderFooter","Button","previousQuickview","emit","current","first","total","nextQuickview","modalCloseCallback","isOpen","highlightScriptId","state","resultPreview","contentURL","enableHighlights","removeDisableHighlightScript","enableHighlightsSpecificKeyword","identifier","disableHighlights","createDisableHighlightScript","disableHighlightsSpecificKeyword","doc","contentWindow","document","head","scriptId","createStyleElement","createTextNode","flatPhrasesToHighlight","phrasesToHighlight","search","response","entries","phrase","flatMap","keywordEntry","keywordStemming","requestId","uniqueId","render","fullscreen","exportparts","ATOMIC_MODAL_EXPORT_PARTS","__decorate","InitializeBindings"],"sources":["src/components/search/result-template-components/atomic-quickview-sidebar/atomic-quickview-sidebar.tsx","src/components/search/result-template-components/quickview-iframe/quickview-iframe.tsx","src/components/search/result-template-components/quickview-preview-bar/quickview-preview-bar.ts","src/utils/color-utils.ts","src/components/search/result-template-components/quickview-word-highlight/quickview-word-highlight.tsx","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.pcss?tag=atomic-quickview-modal&encapsulation=shadow","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.tsx"],"sourcesContent":["import {Fragment, FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport Add from '../../../../images/add.svg';\nimport ArrowDown from '../../../../images/arrow-bottom-rounded.svg';\nimport ArrowUp from '../../../../images/arrow-top-rounded.svg';\nimport MinimizeIcon from '../../../../images/menu.svg';\nimport Remove from '../../../../images/remove.svg';\nimport {IconButton} from '../../../common/stencil-iconButton';\nimport {StencilCheckbox} from '../../../common/stencil-checkbox';\nimport {FieldsetGroup} from '../../../common/stencil-fieldset-group';\nimport type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nconst identifierKeywordsSection = 'coveo-quickview-sidebar-keywords';\n\ninterface QuickviewSidebarProps {\n words: Record<string, QuickviewWordHighlight>;\n i18n: i18n;\n highlightKeywords: HighlightKeywords;\n onHighlightKeywords: (highlight: HighlightKeywords) => void;\n minimized: boolean;\n onMinimize: (minimize: boolean) => void;\n}\n\nexport const QuickviewSidebar: FunctionalComponent<QuickviewSidebarProps> = (\n props\n) => {\n const {words, minimized} = props;\n const numberOfWords = Object.values(words).length;\n\n if (numberOfWords === 0) {\n return;\n }\n\n const minimizeButton = (\n <MinimizeButton {...props} wordsLength={numberOfWords} />\n );\n\n return (\n <div class=\"border-neutral h-full border-r p-4\">\n {minimized && minimizeButton}\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center\">\n <HighlightKeywordsCheckbox {...props} />\n </div>\n {!minimized && <div>{minimizeButton}</div>}\n </div>\n\n {!minimized && <Keywords {...props} words={words} />}\n </div>\n );\n};\n\nconst MinimizeButton: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'minimized' | 'onMinimize' | 'highlightKeywords'\n > & {wordsLength: number}\n> = ({i18n, minimized, onMinimize, highlightKeywords, wordsLength}) => (\n <IconButton\n partPrefix=\"sidebar-minimize\"\n icon={MinimizeIcon}\n style=\"text-transparent\"\n title={i18n.t('quickview-toggle-navigation')}\n ariaLabel={i18n.t('quickview-toggle-navigation')}\n onClick={() => onMinimize(!minimized)}\n badge={\n highlightKeywords && minimized ? <slot>{wordsLength}</slot> : undefined\n }\n class={`w-fit ${minimized ? '' : 'ml-auto'}`}\n ariaExpanded={(!minimized).toString()}\n ariaControls={identifierKeywordsSection}\n />\n);\n\nconst HighlightKeywordsCheckbox: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'highlightKeywords' | 'onHighlightKeywords' | 'minimized'\n >\n> = ({i18n, highlightKeywords, onHighlightKeywords, minimized}) => (\n <Fragment>\n <StencilCheckbox\n text={i18n.t('keywords-highlight')}\n class=\"mr-2\"\n id=\"atomic-quickview-sidebar-highlight-keywords\"\n checked={!highlightKeywords.highlightNone}\n onToggle={(checked) =>\n onHighlightKeywords({\n ...highlightKeywords,\n highlightNone: !checked,\n })\n }\n ></StencilCheckbox>\n {!minimized && (\n <label\n class=\"cursor-pointer font-bold whitespace-nowrap\"\n htmlFor=\"atomic-quickview-sidebar-highlight-keywords\"\n >\n {i18n.t('keywords-highlight')}\n </label>\n )}\n </Fragment>\n);\n\nconst Keywords: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'onHighlightKeywords' | 'highlightKeywords'\n > & {\n words: Record<string, QuickviewWordHighlight>;\n }\n> = ({words, i18n, highlightKeywords, onHighlightKeywords}) => {\n return (\n <div id={identifierKeywordsSection}>\n {Object.values(words).map((keyword) => {\n const wordIsEnabled =\n !highlightKeywords.highlightNone &&\n (highlightKeywords.keywords[keyword.text] === undefined ||\n highlightKeywords.keywords[keyword.text].enabled === true);\n\n return (\n <div\n key={keyword.text}\n class=\"my-4 flex w-100 items-center justify-between gap-x-2\"\n >\n <div\n class={`bg-background border-neutral flex grow items-center overflow-x-auto rounded-lg border ${\n !wordIsEnabled ? 'pointer-events-none opacity-50' : ''\n }`}\n >\n <div\n class=\"flex grow items-center border-r p-4\"\n aria-hidden=\"true\"\n >\n <div\n class=\"mr-2 h-5 w-5 flex-none\"\n style={{backgroundColor: keyword.color}}\n ></div>\n <div class=\"mr-2 grow whitespace-nowrap\">{keyword.text}</div>\n <div class=\"flex-none\">\n (\n {new Intl.NumberFormat(i18n.language, {\n notation: 'compact',\n }).format(keyword.occurrences)}\n )\n </div>\n </div>\n <FieldsetGroup\n label={i18n.t('quickview-navigate-keywords', {\n occurrences: keyword.occurrences,\n keyword: keyword.text,\n })}\n >\n <div class=\"flex px-2\">\n <IconButton\n partPrefix=\"sidebar-next\"\n icon={ArrowDown}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('next')}\n title={i18n.t('next')}\n onClick={() => keyword.navigateForward()}\n />\n <IconButton\n partPrefix=\"sidebar-previous\"\n icon={ArrowUp}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('previous')}\n title={i18n.t('previous')}\n onClick={() => keyword.navigateBackward()}\n />\n </div>\n </FieldsetGroup>\n </div>\n <IconButton\n partPrefix=\"sidebar-remove-word\"\n class={`${\n highlightKeywords.highlightNone\n ? 'pointer-events-none opacity-50'\n : ''\n }`}\n tabIndex={highlightKeywords.highlightNone ? '-1' : '0'}\n ariaPressed={(!wordIsEnabled).toString()}\n style=\"text-transparent\"\n icon={wordIsEnabled ? Remove : Add}\n ariaLabel={i18n.t('quickview-remove-word')}\n onClick={() => {\n onHighlightKeywords({\n ...highlightKeywords,\n keywords: {\n ...highlightKeywords.keywords,\n [keyword.text]: {\n enabled: !wordIsEnabled,\n indexIdentifier: keyword.indexIdentifier,\n },\n },\n });\n }}\n />\n </div>\n );\n })}\n </div>\n );\n};\n","import {SearchEngine} from '@coveo/headless';\nimport {FunctionalComponent, h} from '@stencil/core';\n\nconst documentIdentifierInIframe = 'CoveoDocIdentifier';\n\nconst writeDocument = (documentWriter: Document, content: string) => {\n documentWriter.open();\n documentWriter.write(content);\n documentWriter.close();\n if (documentWriter.scrollingElement) {\n documentWriter.scrollingElement.scrollTop = 0;\n }\n};\n\nconst currentResultAlreadyWrittenToDocument = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const currentDocIdentifier = documentWriter.getElementById(\n documentIdentifierInIframe\n );\n\n return (\n currentDocIdentifier &&\n currentDocIdentifier.textContent === uniqueIdentifier\n );\n};\n\nconst ensureSameResultIsNotOverwritten = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const docIdentifier = documentWriter.createElement('div');\n docIdentifier.style.display = 'none';\n docIdentifier.setAttribute('aria-hidden', 'true');\n docIdentifier.id = documentIdentifierInIframe;\n docIdentifier.textContent = uniqueIdentifier;\n documentWriter.body.appendChild(docIdentifier);\n};\n\nconst warnAboutLimitedUsageQuickview = (logger?: SearchEngine['logger']) => {\n logger?.warn(\n 'Quickview initialized in restricted mode due to incompatible sandboxing environment. Keywords hit navigation will be disabled.'\n );\n};\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const QuickviewIframe: FunctionalComponent<{\n title: string;\n content?: string;\n onSetIframeRef: (ref: HTMLIFrameElement) => void;\n uniqueIdentifier?: string;\n sandbox?: string;\n src?: string;\n logger?: SearchEngine['logger'];\n}> = ({title, onSetIframeRef, uniqueIdentifier, content, sandbox, src, logger}) => {\n // When a document is written with document.open/document.write/document.close\n // it is not synchronous and the content of the iframe is only available to be queried at the end of the current call stack.\n // This add a \"wait\" (setTimeout 0) before calling the `onSetIframeRef` from the parent modal quickview\n const waitForIframeContentToBeWritten = () => {\n return new Promise((resolve) => setTimeout(resolve));\n };\n\n return (\n <iframe\n title={title}\n src=\"about:blank\"\n class=\"h-full w-full\"\n sandbox={sandbox}\n ref={async (el) => {\n const iframeRef = el as HTMLIFrameElement;\n\n if (!uniqueIdentifier || !content) {\n return;\n }\n\n const documentWriter = iframeRef.contentDocument;\n if (!documentWriter) {\n if (src) {\n warnAboutLimitedUsageQuickview(logger);\n iframeRef.src = src;\n }\n\n return;\n }\n if (\n currentResultAlreadyWrittenToDocument(\n documentWriter,\n uniqueIdentifier\n )\n ) {\n return;\n }\n\n writeDocument(documentWriter, content);\n ensureSameResultIsNotOverwritten(documentWriter, uniqueIdentifier);\n\n await waitForIframeContentToBeWritten();\n onSetIframeRef(iframeRef);\n }}\n ></iframe>\n );\n};\n","import type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport type {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nexport const buildQuickviewPreviewBar = (\n words: Record<string, QuickviewWordHighlight>,\n highlightKeywords: HighlightKeywords,\n iframe?: HTMLIFrameElement\n) => {\n if (!iframe) {\n return;\n }\n\n const documentWriter = iframe.contentDocument;\n if (!documentWriter) {\n return;\n }\n\n const bar = buildPreviewBar(documentWriter);\n if (highlightKeywords.highlightNone) {\n bar.remove();\n return;\n }\n\n const docHeight = documentWriter.body.scrollHeight;\n Object.values(words).forEach((word) => {\n word.elements.forEach((wordElement) => {\n const previewUnit = buildPreviewUnit(\n documentWriter,\n word,\n wordElement,\n docHeight,\n highlightKeywords\n );\n\n bar.appendChild(previewUnit);\n });\n });\n\n documentWriter.body.appendChild(bar);\n};\n\nconst buildPreviewBar = (documentWriter: Document) => {\n const previewBarId = 'CoveoPreviewBar';\n const bar =\n documentWriter.getElementById(previewBarId) ||\n documentWriter.createElement('div');\n\n bar.id = previewBarId;\n bar.innerHTML = '';\n bar.style.position = 'fixed';\n bar.style.top = '0';\n bar.style.right = '0';\n bar.style.width = '15px';\n bar.style.height = '100%';\n bar.setAttribute('aria-hidden', 'true');\n return bar;\n};\n\nconst buildPreviewUnit = (\n documentWriter: Document,\n word: QuickviewWordHighlight,\n wordElement: HTMLElement,\n docHeight: number,\n highlightKeywords: HighlightKeywords\n) => {\n const previewUnit = documentWriter.createElement('div');\n if (highlightKeywords.keywords[word.text]?.enabled === false) {\n previewUnit.style.display = 'none';\n return previewUnit;\n }\n\n const elementPosition = wordElement.getBoundingClientRect().top;\n\n previewUnit.style.position = 'absolute';\n previewUnit.style.top = `${(elementPosition / docHeight) * 100}%`;\n previewUnit.style.width = '100%';\n previewUnit.style.height = '1px';\n previewUnit.style.border = `1px solid ${word.previewBorderColor}`;\n previewUnit.style.backgroundColor = word.color;\n return previewUnit;\n};\n","export const rgbToHsv = (r: number, g: number, b: number) => {\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n let h: number;\n const v = max;\n\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n default:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {h, s, v};\n};\n\nexport const hsvToRgb = (h: number, s: number, v: number) => {\n let r: number, g: number, b: number;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return {\n r: Math.round(r),\n g: Math.round(g),\n b: Math.round(b),\n };\n};\n","import {TermsToHighlight} from '@coveo/headless';\nimport {hsvToRgb, rgbToHsv} from '../../../../utils/color-utils';\n\nexport const HIGHLIGHT_PREFIX = 'CoveoHighlight';\nexport class QuickviewWordHighlight {\n public text: string;\n public indexIdentifier: string;\n public occurrences = 0;\n public color: string;\n public focusedColor: string;\n public previewBorderColor: string;\n public elements: HTMLElement[] = [];\n\n private currentNavigationPosition = -1;\n\n constructor(\n private stemmingInfoFromIndex: TermsToHighlight,\n keywordElementInIframe: HTMLElement\n ) {\n const parsed = this.parseKeywordIdentifier(keywordElementInIframe);\n if (!parsed) {\n throw 'Invalid keyword identifier for quickview';\n }\n\n this.text = this.getText(keywordElementInIframe);\n this.indexIdentifier = `${parsed.keywordIdentifier}`;\n this.color = keywordElementInIframe.style.backgroundColor;\n this.focusedColor = this.computeInvertedColor();\n this.previewBorderColor = this.computeSaturatedColor();\n\n this.addElement(keywordElementInIframe);\n }\n\n public addElement(keywordElementInIframe: HTMLElement) {\n this.occurrences++;\n this.elements.push(keywordElementInIframe);\n }\n\n public navigateForward() {\n this.currentNavigationPosition++;\n if (this.currentNavigationPosition >= this.elements.length) {\n this.currentNavigationPosition = 0;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n public navigateBackward() {\n this.currentNavigationPosition--;\n if (this.currentNavigationPosition < 0) {\n this.currentNavigationPosition = this.elements.length - 1;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n private isTaggedWord(element: HTMLElement) {\n return element.nodeName.toLowerCase() === 'coveotaggedword';\n }\n\n private highlightNavigation() {\n const currentElement = this.elements[this.currentNavigationPosition];\n const otherElements = this.elements.filter((el) => el !== currentElement);\n currentElement.style.color = this.color;\n currentElement.style.backgroundColor = this.focusedColor;\n otherElements.forEach((element) => {\n element.style.color = '';\n element.style.backgroundColor = this.color;\n });\n }\n\n private putElementIntoView() {\n const element = this.elements[this.currentNavigationPosition];\n element.scrollIntoView();\n }\n\n private getText(element: HTMLElement) {\n const innerTextOfHTMLElement = this.getHighlightedInnerText(element);\n return this.resolveOriginalTerm(innerTextOfHTMLElement).trim();\n }\n\n private resolveOriginalTerm(highlight: string): string {\n // First try to find either an exact match between the highlight and the original non-stemmed keyword.\n // Otherwise try to find a match between the highlight and the stemming keyword expansions\n // If nothing is found (which should not normally happen...), simply return the highlight keyword as is.\n\n const found = Object.keys(this.stemmingInfoFromIndex).find(\n (originalTerm) => {\n const originalTermMatch =\n originalTerm.toLowerCase() === highlight.toLowerCase();\n if (originalTermMatch) {\n return true;\n }\n const stemmingExpansions = this.stemmingInfoFromIndex[originalTerm];\n if (!stemmingExpansions) {\n return false;\n }\n\n const stemmingExpansionMatch = stemmingExpansions.find(\n (stemmingExpansion) =>\n stemmingExpansion.toLowerCase() === highlight.toLowerCase()\n );\n return stemmingExpansionMatch;\n }\n );\n return found || highlight;\n }\n\n private getHighlightedInnerText(element: HTMLElement): string {\n if (!this.isTaggedWord(element)) {\n return this.getTextOfHTMLElement(element);\n }\n\n const children = Array.from(element.children) as HTMLElement[];\n if (children.length >= 1) {\n return this.getTextOfHTMLElement(children[0]);\n }\n\n return '';\n }\n\n private parseKeywordIdentifier(element: HTMLElement) {\n const parts = element.id\n .substring(HIGHLIGHT_PREFIX.length + 1)\n .match(/^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/);\n\n if (!parts || parts.length <= 3) {\n return null;\n }\n\n return {\n keywordIdentifier: parts[1],\n keywordTermPart: parseInt(parts[3], 10),\n };\n }\n\n private getTextOfHTMLElement(el: HTMLElement) {\n return el.innerText || el.textContent || '';\n }\n\n private computeInvertedColor() {\n const {r, g, b} = this.extractRgb();\n return `rgb(${255 - r}, ${255 - g}, ${255 - b})`;\n }\n\n private computeSaturatedColor() {\n const {r, g, b} = this.extractRgb();\n const {h, s, v} = rgbToHsv(r, g, b);\n let newSaturation = s * 2;\n if (newSaturation > 1) {\n newSaturation = 1;\n }\n const {\n r: rSaturated,\n g: gSaturated,\n b: bSaturated,\n } = hsvToRgb(h, newSaturation, v);\n return `rgb(${rSaturated}, ${gSaturated}, ${bSaturated})`;\n }\n\n private extractRgb() {\n const rgbExtracted = this.color.match(/\\d+/g);\n if (!rgbExtracted) {\n return {r: 255, g: 255, b: 255};\n }\n\n return {\n r: parseInt(rgbExtracted[0], 10),\n g: parseInt(rgbExtracted[1], 10),\n b: parseInt(rgbExtracted[2], 10),\n };\n }\n}\n\nexport const getWordsHighlights = (\n stemmingInfoFromIndex: TermsToHighlight,\n iframe?: HTMLIFrameElement\n) => {\n const wordsHighlights: Record<string, QuickviewWordHighlight> = {};\n if (!iframe) {\n return wordsHighlights;\n }\n\n iframe.contentDocument?.body\n .querySelectorAll(`[id^=\"${HIGHLIGHT_PREFIX}\"]`)\n .forEach((el) => {\n const wordHTMLElementToHighlight = el as HTMLElement;\n\n const wordHighlight = new QuickviewWordHighlight(\n stemmingInfoFromIndex,\n wordHTMLElementToHighlight\n );\n\n if (!wordHighlight.text) {\n return;\n }\n\n const alreadyScannedKeyword =\n wordsHighlights[wordHighlight.indexIdentifier];\n\n if (alreadyScannedKeyword) {\n alreadyScannedKeyword.addElement(wordHTMLElementToHighlight);\n } else {\n wordsHighlights[wordHighlight.indexIdentifier] = wordHighlight;\n }\n });\n\n return wordsHighlights;\n};\n","@import '../../../../global/global.pcss';\n@reference '../../../../utils/tailwind-utilities/link-style.css';\n\n.atomic-quickview-modal {\n &::part(backdrop) {\n grid-template-columns: 1fr max(80vw, 30rem) 1fr;\n }\n &::part(body),\n &::part(header),\n &::part(footer) {\n @apply max-w-full;\n }\n\n &::part(footer) {\n @apply flex justify-center;\n }\n\n &::part(body-wrapper) {\n @apply h-full overflow-hidden p-0;\n }\n\n &::part(body) {\n @apply h-full;\n }\n\n &::part(backdrop) {\n grid-template-rows: 1fr 100% 3fr;\n }\n\n &::part(header-wrapper) {\n @apply bg-neutral-light;\n }\n\n a {\n @apply link-style;\n }\n}\n","import {\n buildInteractiveResult,\n Result,\n InteractiveResult,\n TermsToHighlight,\n} from '@coveo/headless';\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Watch,\n Method,\n VNode,\n Fragment,\n} from '@stencil/core';\nimport CloseIcon from '../../../../images/close.svg';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ATOMIC_MODAL_EXPORT_PARTS} from '../../../common/atomic-modal/export-parts';\nimport {IconButton} from '../../../common/stencil-iconButton';\nimport {LinkWithItemAnalytics} from '../../../common/item-link/stencil-item-link';\nimport {Button} from '../../../common/stencil-button';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\nimport {QuickviewSidebar} from '../atomic-quickview-sidebar/atomic-quickview-sidebar';\nimport {QuickviewIframe} from '../quickview-iframe/quickview-iframe';\nimport {buildQuickviewPreviewBar} from '../quickview-preview-bar/quickview-preview-bar';\nimport {\n getWordsHighlights,\n HIGHLIGHT_PREFIX,\n QuickviewWordHighlight,\n} from '../quickview-word-highlight/quickview-word-highlight';\n\nexport interface HighlightKeywords {\n highlightNone: boolean;\n keywords: {\n [text: string]: {\n indexIdentifier: string;\n enabled: boolean;\n };\n };\n}\n\n/**\n * The modal opened when clicking on a quickview button.\n * Do not use this component directly; use `atomic-quickview` instead.\n *\n * @part backdrop - The transparent backdrop hiding the content behind the modal.\n * @part container - The modal's outermost container with the outline and background.\n * @part header-wrapper - The wrapper around the header.\n * @part header - The header at the top of the modal.\n * @part header-ruler - The horizontal ruler underneath the header.\n * @part body-wrapper - The wrapper around the body.\n * @part body - The body of the modal, between the header and the footer.\n * @part footer-wrapper - The wrapper with a shadow or background color around the footer.\n * @part footer - The footer at the bottom of the modal.\n * @part quickview-modal-header-icon - The close icon of the modal.\n * @part quickview-modal-header-title - The title of the modal.\n */\n@Component({\n tag: 'atomic-quickview-modal',\n styleUrl: 'atomic-quickview-modal.pcss',\n shadow: true,\n})\nexport class AtomicQuickviewModal implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n @State() public error!: Error;\n\n @State() private highlightKeywords: HighlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n @Watch('highlightKeywords')\n watchHighlightKeywords() {\n this.handleHighlightsScripts();\n }\n\n @Event({eventName: 'atomic/quickview/next'}) nextQuickview?: EventEmitter;\n @Event({eventName: 'atomic/quickview/previous'})\n previousQuickview?: EventEmitter;\n\n @State() private minimizeSidebar = false;\n @State() private words: Record<string, QuickviewWordHighlight> = {};\n private iframeRef?: HTMLIFrameElement;\n\n @Prop({mutable: true, reflect: false}) content?: string;\n @Prop({mutable: true, reflect: false}) result?: Result;\n @Prop() current?: number;\n @Prop() total?: number;\n @Prop() sandbox?: string;\n @Prop() modalCloseCallback?: () => void;\n\n private interactiveResult?: InteractiveResult;\n\n public componentWillLoad(): void {\n this.minimizeSidebar = this.bindings.store.isMobile();\n }\n\n @Method()\n public async reset() {\n this.highlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n this.minimizeSidebar = false;\n this.iframeRef = undefined;\n this.content = undefined;\n this.result = undefined;\n this.interactiveResult = undefined;\n }\n\n private renderHeader() {\n let headerContent: VNode | null = null;\n if (this.result) {\n this.interactiveResult = buildInteractiveResult(this.bindings.engine, {\n options: {result: this.result},\n });\n headerContent = (\n <Fragment>\n <LinkWithItemAnalytics\n href={this.result?.clickUri}\n onSelect={() => this.interactiveResult?.select()}\n onBeginDelayedSelect={() =>\n this.interactiveResult?.beginDelayedSelect()\n }\n onCancelPendingSelect={() =>\n this.interactiveResult?.cancelPendingSelect()\n }\n className=\"truncate\"\n part=\"quickview-modal-header-title\"\n >\n {this.result.title}\n </LinkWithItemAnalytics>\n <IconButton\n partPrefix=\"quickview-modal-header\"\n icon={CloseIcon}\n onClick={() => this.onClose()}\n ariaLabel={this.bindings.i18n.t('close')}\n style=\"text-transparent\"\n title={this.bindings.i18n.t('close')}\n />\n </Fragment>\n );\n }\n return (\n <div slot=\"header\" class=\"flex w-full items-center justify-between\">\n {headerContent}\n </div>\n );\n }\n\n private renderBody() {\n return (\n <div slot=\"body\" class=\"grid h-full grid-cols-[min-content_auto]\">\n <div\n class=\"h-full overflow-y-auto\"\n style={{backgroundColor: 'var(--atomic-neutral-light)'}}\n >\n <QuickviewSidebar\n words={this.words}\n i18n={this.bindings.i18n}\n highlightKeywords={this.highlightKeywords}\n onHighlightKeywords={(highlight) =>\n (this.highlightKeywords = highlight)\n }\n minimized={this.minimizeSidebar}\n onMinimize={(minimize) => (this.minimizeSidebar = minimize)}\n />\n </div>\n <div class=\"relative overflow-auto\">\n <QuickviewIframe\n title={this.result?.title ?? this.bindings.i18n.t('preview-modal-title')} \n logger={this.logger}\n src={this.quickviewSrc}\n sandbox={this.sandbox}\n uniqueIdentifier={this.quickviewUniqueIdentifier}\n content={this.content}\n onSetIframeRef={async (ref) => {\n this.iframeRef = ref;\n this.words = getWordsHighlights(\n this.termsToHighlight,\n this.iframeRef\n );\n this.handleHighlightsScripts();\n }}\n />\n {buildQuickviewPreviewBar(\n this.words,\n this.highlightKeywords,\n this.iframeRef\n )}\n </div>\n </div>\n );\n }\n\n private renderFooter() {\n return (\n <div slot=\"footer\" class=\"flex items-center gap-2\">\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.previousQuickview?.emit()}\n disabled={this.current === 1}\n text={this.bindings.i18n.t('quickview-previous')}\n ></Button>\n <p class=\"text-center\">\n {this.bindings.i18n.t('showing-results-of', {\n first: this.current,\n total: this.total,\n })}\n </p>\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.nextQuickview?.emit()}\n disabled={this.current === this.total}\n text={this.bindings.i18n.t('quickview-next')}\n ></Button>\n </div>\n );\n }\n\n private onClose() {\n this.content = undefined;\n this.result = undefined;\n this.modalCloseCallback && this.modalCloseCallback();\n }\n\n private get isOpen() {\n return !!this.content && !!this.result;\n }\n\n private get highlightScriptId() {\n return 'CoveoDisableHighlightStyle';\n }\n\n private get logger() {\n return this.bindings.engine.logger;\n }\n\n private get quickviewSrc() {\n return this.bindings.engine.state.resultPreview?.contentURL;\n }\n\n private enableHighlights() {\n this.removeDisableHighlightScript();\n }\n\n private enableHighlightsSpecificKeyword(identifier: string) {\n this.removeDisableHighlightScript(identifier);\n }\n\n private disableHighlights() {\n this.createDisableHighlightScript();\n }\n\n private disableHighlightsSpecificKeyword(identifier: string) {\n this.createDisableHighlightScript(identifier);\n }\n\n private removeDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n doc\n .getElementById(\n `${this.highlightScriptId}${identifier ? `:${identifier}` : ''}`\n )\n ?.remove();\n }\n\n private createDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n\n const head = doc.head;\n const scriptId = `${this.highlightScriptId}${\n identifier ? `:${identifier}` : ''\n }`;\n const style =\n doc.getElementById(scriptId) || this.bindings.createStyleElement();\n style.setAttribute('id', scriptId);\n head.appendChild(style);\n style.appendChild(\n doc.createTextNode(`[id^=\"${HIGHLIGHT_PREFIX}${\n identifier ? `:${identifier}` : ''\n }\"] {\n background-color: inherit !important;\n color: inherit !important;\n }`)\n );\n }\n\n private get termsToHighlight() {\n const flatPhrasesToHighlight: TermsToHighlight = {};\n\n const phrasesToHighlight =\n this.bindings.engine.state.search.response.phrasesToHighlight;\n\n Object.entries(phrasesToHighlight).forEach(([phrase, keywords]) => {\n flatPhrasesToHighlight[phrase] = Object.entries(keywords).flatMap(\n ([keywordEntry, keywordStemming]) => {\n return [keywordEntry, ...keywordStemming];\n }\n );\n });\n\n return {\n ...this.bindings.engine.state.search.response.termsToHighlight,\n ...flatPhrasesToHighlight,\n };\n }\n\n private get requestId() {\n return this.bindings.engine.state.search.requestId;\n }\n\n private get quickviewUniqueIdentifier() {\n return this.result?.uniqueId + this.requestId;\n }\n\n private handleHighlightsScripts() {\n if (!this.highlightKeywords.highlightNone) {\n this.enableHighlights();\n } else {\n this.disableHighlights();\n }\n Object.values(this.highlightKeywords.keywords).forEach((word) => {\n if (word.enabled) {\n this.enableHighlightsSpecificKeyword(word.indexIdentifier);\n } else {\n this.disableHighlightsSpecificKeyword(word.indexIdentifier);\n }\n });\n }\n\n public render() {\n return (\n <atomic-modal\n fullscreen={this.bindings.store.isMobile()}\n class={'atomic-quickview-modal'}\n isOpen={this.isOpen}\n close={() => this.onClose()}\n exportparts={ATOMIC_MODAL_EXPORT_PARTS}\n >\n {this.renderHeader()}\n {this.renderBody()}\n {this.renderFooter()}\n </atomic-modal>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["identifierKeywordsSection","QuickviewSidebar","props","words","minimized","numberOfWords","Object","values","length","minimizeButton","h","MinimizeButton","wordsLength","class","HighlightKeywordsCheckbox","Keywords","i18n","onMinimize","highlightKeywords","IconButton","partPrefix","icon","MinimizeIcon","style","title","t","ariaLabel","onClick","badge","undefined","ariaExpanded","toString","ariaControls","onHighlightKeywords","Fragment","StencilCheckbox","text","id","checked","highlightNone","onToggle","htmlFor","map","keyword","wordIsEnabled","keywords","enabled","key","backgroundColor","color","Intl","NumberFormat","language","notation","format","occurrences","FieldsetGroup","label","ArrowDown","disabled","navigateForward","ArrowUp","navigateBackward","tabIndex","ariaPressed","Remove","Add","indexIdentifier","documentIdentifierInIframe","writeDocument","documentWriter","content","open","write","close","scrollingElement","scrollTop","currentResultAlreadyWrittenToDocument","uniqueIdentifier","currentDocIdentifier","getElementById","textContent","ensureSameResultIsNotOverwritten","docIdentifier","createElement","display","setAttribute","body","appendChild","warnAboutLimitedUsageQuickview","logger","warn","QuickviewIframe","onSetIframeRef","sandbox","src","waitForIframeContentToBeWritten","Promise","resolve","setTimeout","ref","async","el","iframeRef","contentDocument","buildQuickviewPreviewBar","iframe","bar","buildPreviewBar","remove","docHeight","scrollHeight","forEach","word","elements","wordElement","previewUnit","buildPreviewUnit","previewBarId","innerHTML","position","top","right","width","height","elementPosition","getBoundingClientRect","border","previewBorderColor","rgbToHsv","r","g","b","max","Math","min","v","d","s","hsvToRgb","i","floor","f","p","q","round","HIGHLIGHT_PREFIX","QuickviewWordHighlight","constructor","stemmingInfoFromIndex","keywordElementInIframe","this","currentNavigationPosition","parsed","parseKeywordIdentifier","getText","keywordIdentifier","focusedColor","computeInvertedColor","computeSaturatedColor","addElement","push","highlightNavigation","putElementIntoView","isTaggedWord","element","nodeName","toLowerCase","currentElement","otherElements","filter","scrollIntoView","innerTextOfHTMLElement","getHighlightedInnerText","resolveOriginalTerm","trim","highlight","found","keys","find","originalTerm","originalTermMatch","stemmingExpansions","stemmingExpansionMatch","stemmingExpansion","getTextOfHTMLElement","children","Array","from","parts","substring","match","keywordTermPart","parseInt","innerText","extractRgb","newSaturation","rSaturated","gSaturated","bSaturated","rgbExtracted","getWordsHighlights","wordsHighlights","querySelectorAll","wordHTMLElementToHighlight","wordHighlight","alreadyScannedKeyword","atomicQuickviewModalCss","AtomicQuickviewModalStyle0","AtomicQuickviewModal","minimizeSidebar","watchHighlightKeywords","handleHighlightsScripts","componentWillLoad","bindings","store","isMobile","reset","result","interactiveResult","renderHeader","headerContent","buildInteractiveResult","engine","options","LinkWithItemAnalytics","href","clickUri","onSelect","select","onBeginDelayedSelect","beginDelayedSelect","onCancelPendingSelect","cancelPendingSelect","className","part","CloseIcon","onClose","slot","renderBody","minimize","quickviewSrc","quickviewUniqueIdentifier","termsToHighlight","renderFooter","Button","previousQuickview","emit","current","first","total","nextQuickview","modalCloseCallback","isOpen","highlightScriptId","state","resultPreview","contentURL","enableHighlights","removeDisableHighlightScript","enableHighlightsSpecificKeyword","identifier","disableHighlights","createDisableHighlightScript","disableHighlightsSpecificKeyword","doc","contentWindow","document","head","scriptId","createStyleElement","createTextNode","flatPhrasesToHighlight","phrasesToHighlight","search","response","entries","phrase","flatMap","keywordEntry","keywordStemming","requestId","uniqueId","render","fullscreen","exportparts","ATOMIC_MODAL_EXPORT_PARTS","__decorate","InitializeBindings"],"sources":["src/components/search/result-template-components/atomic-quickview-sidebar/atomic-quickview-sidebar.tsx","src/components/search/result-template-components/quickview-iframe/quickview-iframe.tsx","src/components/search/result-template-components/quickview-preview-bar/quickview-preview-bar.ts","src/utils/color-utils.ts","src/components/search/result-template-components/quickview-word-highlight/quickview-word-highlight.tsx","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.pcss?tag=atomic-quickview-modal&encapsulation=shadow","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.tsx"],"sourcesContent":["import {Fragment, FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport Add from '../../../../images/add.svg';\nimport ArrowDown from '../../../../images/arrow-bottom-rounded.svg';\nimport ArrowUp from '../../../../images/arrow-top-rounded.svg';\nimport MinimizeIcon from '../../../../images/menu.svg';\nimport Remove from '../../../../images/remove.svg';\nimport {IconButton} from '../../../common/stencil-iconButton';\nimport {StencilCheckbox} from '../../../common/stencil-checkbox';\nimport {FieldsetGroup} from '../../../common/stencil-fieldset-group';\nimport type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nconst identifierKeywordsSection = 'coveo-quickview-sidebar-keywords';\n\ninterface QuickviewSidebarProps {\n words: Record<string, QuickviewWordHighlight>;\n i18n: i18n;\n highlightKeywords: HighlightKeywords;\n onHighlightKeywords: (highlight: HighlightKeywords) => void;\n minimized: boolean;\n onMinimize: (minimize: boolean) => void;\n}\n\nexport const QuickviewSidebar: FunctionalComponent<QuickviewSidebarProps> = (\n props\n) => {\n const {words, minimized} = props;\n const numberOfWords = Object.values(words).length;\n\n if (numberOfWords === 0) {\n return;\n }\n\n const minimizeButton = (\n <MinimizeButton {...props} wordsLength={numberOfWords} />\n );\n\n return (\n <div class=\"border-neutral h-full border-r p-4\">\n {minimized && minimizeButton}\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center\">\n <HighlightKeywordsCheckbox {...props} />\n </div>\n {!minimized && <div>{minimizeButton}</div>}\n </div>\n\n {!minimized && <Keywords {...props} words={words} />}\n </div>\n );\n};\n\nconst MinimizeButton: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'minimized' | 'onMinimize' | 'highlightKeywords'\n > & {wordsLength: number}\n> = ({i18n, minimized, onMinimize, highlightKeywords, wordsLength}) => (\n <IconButton\n partPrefix=\"sidebar-minimize\"\n icon={MinimizeIcon}\n style=\"text-transparent\"\n title={i18n.t('quickview-toggle-navigation')}\n ariaLabel={i18n.t('quickview-toggle-navigation')}\n onClick={() => onMinimize(!minimized)}\n badge={\n highlightKeywords && minimized ? <slot>{wordsLength}</slot> : undefined\n }\n class={`w-fit ${minimized ? '' : 'ml-auto'}`}\n ariaExpanded={(!minimized).toString()}\n ariaControls={identifierKeywordsSection}\n />\n);\n\nconst HighlightKeywordsCheckbox: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'highlightKeywords' | 'onHighlightKeywords' | 'minimized'\n >\n> = ({i18n, highlightKeywords, onHighlightKeywords, minimized}) => (\n <Fragment>\n <StencilCheckbox\n text={i18n.t('keywords-highlight')}\n class=\"mr-2\"\n id=\"atomic-quickview-sidebar-highlight-keywords\"\n checked={!highlightKeywords.highlightNone}\n onToggle={(checked) =>\n onHighlightKeywords({\n ...highlightKeywords,\n highlightNone: !checked,\n })\n }\n ></StencilCheckbox>\n {!minimized && (\n <label\n class=\"cursor-pointer font-bold whitespace-nowrap\"\n htmlFor=\"atomic-quickview-sidebar-highlight-keywords\"\n >\n {i18n.t('keywords-highlight')}\n </label>\n )}\n </Fragment>\n);\n\nconst Keywords: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'onHighlightKeywords' | 'highlightKeywords'\n > & {\n words: Record<string, QuickviewWordHighlight>;\n }\n> = ({words, i18n, highlightKeywords, onHighlightKeywords}) => {\n return (\n <div id={identifierKeywordsSection}>\n {Object.values(words).map((keyword) => {\n const wordIsEnabled =\n !highlightKeywords.highlightNone &&\n (highlightKeywords.keywords[keyword.text] === undefined ||\n highlightKeywords.keywords[keyword.text].enabled === true);\n\n return (\n <div\n key={keyword.text}\n class=\"my-4 flex w-100 items-center justify-between gap-x-2\"\n >\n <div\n class={`bg-background border-neutral flex grow items-center overflow-x-auto rounded-lg border ${\n !wordIsEnabled ? 'pointer-events-none opacity-50' : ''\n }`}\n >\n <div\n class=\"flex grow items-center border-r p-4\"\n aria-hidden=\"true\"\n >\n <div\n class=\"mr-2 h-5 w-5 flex-none\"\n style={{backgroundColor: keyword.color}}\n ></div>\n <div class=\"mr-2 grow whitespace-nowrap\">{keyword.text}</div>\n <div class=\"flex-none\">\n (\n {new Intl.NumberFormat(i18n.language, {\n notation: 'compact',\n }).format(keyword.occurrences)}\n )\n </div>\n </div>\n <FieldsetGroup\n label={i18n.t('quickview-navigate-keywords', {\n occurrences: keyword.occurrences,\n keyword: keyword.text,\n })}\n >\n <div class=\"flex px-2\">\n <IconButton\n partPrefix=\"sidebar-next\"\n icon={ArrowDown}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('next')}\n title={i18n.t('next')}\n onClick={() => keyword.navigateForward()}\n />\n <IconButton\n partPrefix=\"sidebar-previous\"\n icon={ArrowUp}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('previous')}\n title={i18n.t('previous')}\n onClick={() => keyword.navigateBackward()}\n />\n </div>\n </FieldsetGroup>\n </div>\n <IconButton\n partPrefix=\"sidebar-remove-word\"\n class={`${\n highlightKeywords.highlightNone\n ? 'pointer-events-none opacity-50'\n : ''\n }`}\n tabIndex={highlightKeywords.highlightNone ? '-1' : '0'}\n ariaPressed={(!wordIsEnabled).toString()}\n style=\"text-transparent\"\n icon={wordIsEnabled ? Remove : Add}\n ariaLabel={i18n.t('quickview-remove-word')}\n onClick={() => {\n onHighlightKeywords({\n ...highlightKeywords,\n keywords: {\n ...highlightKeywords.keywords,\n [keyword.text]: {\n enabled: !wordIsEnabled,\n indexIdentifier: keyword.indexIdentifier,\n },\n },\n });\n }}\n />\n </div>\n );\n })}\n </div>\n );\n};\n","import {SearchEngine} from '@coveo/headless';\nimport {FunctionalComponent, h} from '@stencil/core';\n\nconst documentIdentifierInIframe = 'CoveoDocIdentifier';\n\nconst writeDocument = (documentWriter: Document, content: string) => {\n documentWriter.open();\n documentWriter.write(content);\n documentWriter.close();\n if (documentWriter.scrollingElement) {\n documentWriter.scrollingElement.scrollTop = 0;\n }\n};\n\nconst currentResultAlreadyWrittenToDocument = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const currentDocIdentifier = documentWriter.getElementById(\n documentIdentifierInIframe\n );\n\n return (\n currentDocIdentifier &&\n currentDocIdentifier.textContent === uniqueIdentifier\n );\n};\n\nconst ensureSameResultIsNotOverwritten = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const docIdentifier = documentWriter.createElement('div');\n docIdentifier.style.display = 'none';\n docIdentifier.setAttribute('aria-hidden', 'true');\n docIdentifier.id = documentIdentifierInIframe;\n docIdentifier.textContent = uniqueIdentifier;\n documentWriter.body.appendChild(docIdentifier);\n};\n\nconst warnAboutLimitedUsageQuickview = (logger?: SearchEngine['logger']) => {\n logger?.warn(\n 'Quickview initialized in restricted mode due to incompatible sandboxing environment. Keywords hit navigation will be disabled.'\n );\n};\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const QuickviewIframe: FunctionalComponent<{\n title: string;\n content?: string;\n onSetIframeRef: (ref: HTMLIFrameElement) => void;\n uniqueIdentifier?: string;\n sandbox?: string;\n src?: string;\n logger?: SearchEngine['logger'];\n}> = ({title, onSetIframeRef, uniqueIdentifier, content, sandbox, src, logger}) => {\n // When a document is written with document.open/document.write/document.close\n // it is not synchronous and the content of the iframe is only available to be queried at the end of the current call stack.\n // This add a \"wait\" (setTimeout 0) before calling the `onSetIframeRef` from the parent modal quickview\n const waitForIframeContentToBeWritten = () => {\n return new Promise((resolve) => setTimeout(resolve));\n };\n\n return (\n <iframe\n title={title}\n src=\"about:blank\"\n class=\"h-full w-full\"\n sandbox={sandbox}\n ref={async (el) => {\n const iframeRef = el as HTMLIFrameElement;\n\n if (!uniqueIdentifier || !content) {\n return;\n }\n\n const documentWriter = iframeRef.contentDocument;\n if (!documentWriter) {\n if (src) {\n warnAboutLimitedUsageQuickview(logger);\n iframeRef.src = src;\n }\n\n return;\n }\n if (\n currentResultAlreadyWrittenToDocument(\n documentWriter,\n uniqueIdentifier\n )\n ) {\n return;\n }\n\n writeDocument(documentWriter, content);\n ensureSameResultIsNotOverwritten(documentWriter, uniqueIdentifier);\n\n await waitForIframeContentToBeWritten();\n onSetIframeRef(iframeRef);\n }}\n ></iframe>\n );\n};\n","import type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport type {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nexport const buildQuickviewPreviewBar = (\n words: Record<string, QuickviewWordHighlight>,\n highlightKeywords: HighlightKeywords,\n iframe?: HTMLIFrameElement\n) => {\n if (!iframe) {\n return;\n }\n\n const documentWriter = iframe.contentDocument;\n if (!documentWriter) {\n return;\n }\n\n const bar = buildPreviewBar(documentWriter);\n if (highlightKeywords.highlightNone) {\n bar.remove();\n return;\n }\n\n const docHeight = documentWriter.body.scrollHeight;\n Object.values(words).forEach((word) => {\n word.elements.forEach((wordElement) => {\n const previewUnit = buildPreviewUnit(\n documentWriter,\n word,\n wordElement,\n docHeight,\n highlightKeywords\n );\n\n bar.appendChild(previewUnit);\n });\n });\n\n documentWriter.body.appendChild(bar);\n};\n\nconst buildPreviewBar = (documentWriter: Document) => {\n const previewBarId = 'CoveoPreviewBar';\n const bar =\n documentWriter.getElementById(previewBarId) ||\n documentWriter.createElement('div');\n\n bar.id = previewBarId;\n bar.innerHTML = '';\n bar.style.position = 'fixed';\n bar.style.top = '0';\n bar.style.right = '0';\n bar.style.width = '15px';\n bar.style.height = '100%';\n bar.setAttribute('aria-hidden', 'true');\n return bar;\n};\n\nconst buildPreviewUnit = (\n documentWriter: Document,\n word: QuickviewWordHighlight,\n wordElement: HTMLElement,\n docHeight: number,\n highlightKeywords: HighlightKeywords\n) => {\n const previewUnit = documentWriter.createElement('div');\n if (highlightKeywords.keywords[word.text]?.enabled === false) {\n previewUnit.style.display = 'none';\n return previewUnit;\n }\n\n const elementPosition = wordElement.getBoundingClientRect().top;\n\n previewUnit.style.position = 'absolute';\n previewUnit.style.top = `${(elementPosition / docHeight) * 100}%`;\n previewUnit.style.width = '100%';\n previewUnit.style.height = '1px';\n previewUnit.style.border = `1px solid ${word.previewBorderColor}`;\n previewUnit.style.backgroundColor = word.color;\n return previewUnit;\n};\n","export const rgbToHsv = (r: number, g: number, b: number) => {\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n let h: number;\n const v = max;\n\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n default:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {h, s, v};\n};\n\nexport const hsvToRgb = (h: number, s: number, v: number) => {\n let r: number, g: number, b: number;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return {\n r: Math.round(r),\n g: Math.round(g),\n b: Math.round(b),\n };\n};\n","import {TermsToHighlight} from '@coveo/headless';\nimport {hsvToRgb, rgbToHsv} from '../../../../utils/color-utils';\n\nexport const HIGHLIGHT_PREFIX = 'CoveoHighlight';\nexport class QuickviewWordHighlight {\n public text: string;\n public indexIdentifier: string;\n public occurrences = 0;\n public color: string;\n public focusedColor: string;\n public previewBorderColor: string;\n public elements: HTMLElement[] = [];\n\n private currentNavigationPosition = -1;\n\n constructor(\n private stemmingInfoFromIndex: TermsToHighlight,\n keywordElementInIframe: HTMLElement\n ) {\n const parsed = this.parseKeywordIdentifier(keywordElementInIframe);\n if (!parsed) {\n throw 'Invalid keyword identifier for quickview';\n }\n\n this.text = this.getText(keywordElementInIframe);\n this.indexIdentifier = `${parsed.keywordIdentifier}`;\n this.color = keywordElementInIframe.style.backgroundColor;\n this.focusedColor = this.computeInvertedColor();\n this.previewBorderColor = this.computeSaturatedColor();\n\n this.addElement(keywordElementInIframe);\n }\n\n public addElement(keywordElementInIframe: HTMLElement) {\n this.occurrences++;\n this.elements.push(keywordElementInIframe);\n }\n\n public navigateForward() {\n this.currentNavigationPosition++;\n if (this.currentNavigationPosition >= this.elements.length) {\n this.currentNavigationPosition = 0;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n public navigateBackward() {\n this.currentNavigationPosition--;\n if (this.currentNavigationPosition < 0) {\n this.currentNavigationPosition = this.elements.length - 1;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n private isTaggedWord(element: HTMLElement) {\n return element.nodeName.toLowerCase() === 'coveotaggedword';\n }\n\n private highlightNavigation() {\n const currentElement = this.elements[this.currentNavigationPosition];\n const otherElements = this.elements.filter((el) => el !== currentElement);\n currentElement.style.color = this.color;\n currentElement.style.backgroundColor = this.focusedColor;\n otherElements.forEach((element) => {\n element.style.color = '';\n element.style.backgroundColor = this.color;\n });\n }\n\n private putElementIntoView() {\n const element = this.elements[this.currentNavigationPosition];\n element.scrollIntoView();\n }\n\n private getText(element: HTMLElement) {\n const innerTextOfHTMLElement = this.getHighlightedInnerText(element);\n return this.resolveOriginalTerm(innerTextOfHTMLElement).trim();\n }\n\n private resolveOriginalTerm(highlight: string): string {\n // First try to find either an exact match between the highlight and the original non-stemmed keyword.\n // Otherwise try to find a match between the highlight and the stemming keyword expansions\n // If nothing is found (which should not normally happen...), simply return the highlight keyword as is.\n\n const found = Object.keys(this.stemmingInfoFromIndex).find(\n (originalTerm) => {\n const originalTermMatch =\n originalTerm.toLowerCase() === highlight.toLowerCase();\n if (originalTermMatch) {\n return true;\n }\n const stemmingExpansions = this.stemmingInfoFromIndex[originalTerm];\n if (!stemmingExpansions) {\n return false;\n }\n\n const stemmingExpansionMatch = stemmingExpansions.find(\n (stemmingExpansion) =>\n stemmingExpansion.toLowerCase() === highlight.toLowerCase()\n );\n return stemmingExpansionMatch;\n }\n );\n return found || highlight;\n }\n\n private getHighlightedInnerText(element: HTMLElement): string {\n if (!this.isTaggedWord(element)) {\n return this.getTextOfHTMLElement(element);\n }\n\n const children = Array.from(element.children) as HTMLElement[];\n if (children.length >= 1) {\n return this.getTextOfHTMLElement(children[0]);\n }\n\n return '';\n }\n\n private parseKeywordIdentifier(element: HTMLElement) {\n const parts = element.id\n .substring(HIGHLIGHT_PREFIX.length + 1)\n .match(/^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/);\n\n if (!parts || parts.length <= 3) {\n return null;\n }\n\n return {\n keywordIdentifier: parts[1],\n keywordTermPart: parseInt(parts[3], 10),\n };\n }\n\n private getTextOfHTMLElement(el: HTMLElement) {\n return el.innerText || el.textContent || '';\n }\n\n private computeInvertedColor() {\n const {r, g, b} = this.extractRgb();\n return `rgb(${255 - r}, ${255 - g}, ${255 - b})`;\n }\n\n private computeSaturatedColor() {\n const {r, g, b} = this.extractRgb();\n const {h, s, v} = rgbToHsv(r, g, b);\n let newSaturation = s * 2;\n if (newSaturation > 1) {\n newSaturation = 1;\n }\n const {\n r: rSaturated,\n g: gSaturated,\n b: bSaturated,\n } = hsvToRgb(h, newSaturation, v);\n return `rgb(${rSaturated}, ${gSaturated}, ${bSaturated})`;\n }\n\n private extractRgb() {\n const rgbExtracted = this.color.match(/\\d+/g);\n if (!rgbExtracted) {\n return {r: 255, g: 255, b: 255};\n }\n\n return {\n r: parseInt(rgbExtracted[0], 10),\n g: parseInt(rgbExtracted[1], 10),\n b: parseInt(rgbExtracted[2], 10),\n };\n }\n}\n\nexport const getWordsHighlights = (\n stemmingInfoFromIndex: TermsToHighlight,\n iframe?: HTMLIFrameElement\n) => {\n const wordsHighlights: Record<string, QuickviewWordHighlight> = {};\n if (!iframe) {\n return wordsHighlights;\n }\n\n iframe.contentDocument?.body\n .querySelectorAll(`[id^=\"${HIGHLIGHT_PREFIX}\"]`)\n .forEach((el) => {\n const wordHTMLElementToHighlight = el as HTMLElement;\n\n const wordHighlight = new QuickviewWordHighlight(\n stemmingInfoFromIndex,\n wordHTMLElementToHighlight\n );\n\n if (!wordHighlight.text) {\n return;\n }\n\n const alreadyScannedKeyword =\n wordsHighlights[wordHighlight.indexIdentifier];\n\n if (alreadyScannedKeyword) {\n alreadyScannedKeyword.addElement(wordHTMLElementToHighlight);\n } else {\n wordsHighlights[wordHighlight.indexIdentifier] = wordHighlight;\n }\n });\n\n return wordsHighlights;\n};\n","@import '../../../../global/global.pcss';\n@reference '../../../../utils/tailwind-utilities/link-style.css';\n\n.atomic-quickview-modal {\n &::part(backdrop) {\n grid-template-columns: 1fr max(80vw, 30rem) 1fr;\n }\n &::part(body),\n &::part(header),\n &::part(footer) {\n @apply max-w-full;\n }\n\n &::part(footer) {\n @apply flex justify-center;\n }\n\n &::part(body-wrapper) {\n @apply h-full overflow-hidden p-0;\n }\n\n &::part(body) {\n @apply h-full;\n }\n\n &::part(backdrop) {\n grid-template-rows: 1fr 100% 3fr;\n }\n\n &::part(header-wrapper) {\n @apply bg-neutral-light;\n }\n\n a {\n @apply link-style;\n }\n}\n","import {\n buildInteractiveResult,\n Result,\n InteractiveResult,\n TermsToHighlight,\n} from '@coveo/headless';\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Watch,\n Method,\n VNode,\n Fragment,\n} from '@stencil/core';\nimport CloseIcon from '../../../../images/close.svg';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ATOMIC_MODAL_EXPORT_PARTS} from '../../../common/atomic-modal/export-parts';\nimport {IconButton} from '../../../common/stencil-iconButton';\nimport {LinkWithItemAnalytics} from '../../../common/item-link/stencil-item-link';\nimport {Button} from '../../../common/stencil-button';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\nimport {QuickviewSidebar} from '../atomic-quickview-sidebar/atomic-quickview-sidebar';\nimport {QuickviewIframe} from '../quickview-iframe/quickview-iframe';\nimport {buildQuickviewPreviewBar} from '../quickview-preview-bar/quickview-preview-bar';\nimport {\n getWordsHighlights,\n HIGHLIGHT_PREFIX,\n QuickviewWordHighlight,\n} from '../quickview-word-highlight/quickview-word-highlight';\n\nexport interface HighlightKeywords {\n highlightNone: boolean;\n keywords: {\n [text: string]: {\n indexIdentifier: string;\n enabled: boolean;\n };\n };\n}\n\n/**\n * The modal opened when clicking on a quickview button.\n * Do not use this component directly; use `atomic-quickview` instead.\n *\n * @part backdrop - The transparent backdrop hiding the content behind the modal.\n * @part container - The modal's outermost container with the outline and background.\n * @part header-wrapper - The wrapper around the header.\n * @part header - The header at the top of the modal.\n * @part header-ruler - The horizontal ruler underneath the header.\n * @part body-wrapper - The wrapper around the body.\n * @part body - The body of the modal, between the header and the footer.\n * @part footer-wrapper - The wrapper with a shadow or background color around the footer.\n * @part footer - The footer at the bottom of the modal.\n * @part quickview-modal-header-icon - The close icon of the modal.\n * @part quickview-modal-header-title - The title of the modal.\n */\n@Component({\n tag: 'atomic-quickview-modal',\n styleUrl: 'atomic-quickview-modal.pcss',\n shadow: true,\n})\nexport class AtomicQuickviewModal implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n @State() public error!: Error;\n\n @State() private highlightKeywords: HighlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n @Watch('highlightKeywords')\n watchHighlightKeywords() {\n this.handleHighlightsScripts();\n }\n\n @Event({eventName: 'atomic/quickview/next'}) nextQuickview?: EventEmitter;\n @Event({eventName: 'atomic/quickview/previous'})\n previousQuickview?: EventEmitter;\n\n @State() private minimizeSidebar = false;\n @State() private words: Record<string, QuickviewWordHighlight> = {};\n private iframeRef?: HTMLIFrameElement;\n\n @Prop({mutable: true, reflect: false}) content?: string;\n @Prop({mutable: true, reflect: false}) result?: Result;\n @Prop() current?: number;\n @Prop() total?: number;\n @Prop() sandbox?: string;\n @Prop() modalCloseCallback?: () => void;\n\n private interactiveResult?: InteractiveResult;\n\n public componentWillLoad(): void {\n this.minimizeSidebar = this.bindings.store.isMobile();\n }\n\n @Method()\n public async reset() {\n this.highlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n this.minimizeSidebar = false;\n this.iframeRef = undefined;\n this.content = undefined;\n this.result = undefined;\n this.interactiveResult = undefined;\n }\n\n private renderHeader() {\n let headerContent: VNode | null = null;\n if (this.result) {\n this.interactiveResult = buildInteractiveResult(this.bindings.engine, {\n options: {result: this.result},\n });\n headerContent = (\n <Fragment>\n <LinkWithItemAnalytics\n href={this.result?.clickUri}\n onSelect={() => this.interactiveResult?.select()}\n onBeginDelayedSelect={() =>\n this.interactiveResult?.beginDelayedSelect()\n }\n onCancelPendingSelect={() =>\n this.interactiveResult?.cancelPendingSelect()\n }\n className=\"truncate\"\n part=\"quickview-modal-header-title\"\n >\n {this.result.title}\n </LinkWithItemAnalytics>\n <IconButton\n partPrefix=\"quickview-modal-header\"\n icon={CloseIcon}\n onClick={() => this.onClose()}\n ariaLabel={this.bindings.i18n.t('close')}\n style=\"text-transparent\"\n title={this.bindings.i18n.t('close')}\n />\n </Fragment>\n );\n }\n return (\n <div slot=\"header\" class=\"flex w-full items-center justify-between\">\n {headerContent}\n </div>\n );\n }\n\n private renderBody() {\n return (\n <div slot=\"body\" class=\"grid h-full grid-cols-[min-content_auto]\">\n <div\n class=\"h-full overflow-y-auto\"\n style={{backgroundColor: 'var(--atomic-neutral-light)'}}\n >\n <QuickviewSidebar\n words={this.words}\n i18n={this.bindings.i18n}\n highlightKeywords={this.highlightKeywords}\n onHighlightKeywords={(highlight) =>\n (this.highlightKeywords = highlight)\n }\n minimized={this.minimizeSidebar}\n onMinimize={(minimize) => (this.minimizeSidebar = minimize)}\n />\n </div>\n <div class=\"relative overflow-auto\">\n <QuickviewIframe\n title={this.result?.title ?? this.bindings.i18n.t('preview-modal-title')} \n logger={this.logger}\n src={this.quickviewSrc}\n sandbox={this.sandbox}\n uniqueIdentifier={this.quickviewUniqueIdentifier}\n content={this.content}\n onSetIframeRef={async (ref) => {\n this.iframeRef = ref;\n this.words = getWordsHighlights(\n this.termsToHighlight,\n this.iframeRef\n );\n this.handleHighlightsScripts();\n }}\n />\n {buildQuickviewPreviewBar(\n this.words,\n this.highlightKeywords,\n this.iframeRef\n )}\n </div>\n </div>\n );\n }\n\n private renderFooter() {\n return (\n <div slot=\"footer\" class=\"flex items-center gap-2\">\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.previousQuickview?.emit()}\n disabled={this.current === 1}\n text={this.bindings.i18n.t('quickview-previous')}\n ></Button>\n <p class=\"text-center\">\n {this.bindings.i18n.t('showing-results-of', {\n first: this.current,\n total: this.total,\n })}\n </p>\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.nextQuickview?.emit()}\n disabled={this.current === this.total}\n text={this.bindings.i18n.t('quickview-next')}\n ></Button>\n </div>\n );\n }\n\n private onClose() {\n this.content = undefined;\n this.result = undefined;\n this.modalCloseCallback && this.modalCloseCallback();\n }\n\n private get isOpen() {\n return !!this.content && !!this.result;\n }\n\n private get highlightScriptId() {\n return 'CoveoDisableHighlightStyle';\n }\n\n private get logger() {\n return this.bindings.engine.logger;\n }\n\n private get quickviewSrc() {\n return this.bindings.engine.state.resultPreview?.contentURL;\n }\n\n private enableHighlights() {\n this.removeDisableHighlightScript();\n }\n\n private enableHighlightsSpecificKeyword(identifier: string) {\n this.removeDisableHighlightScript(identifier);\n }\n\n private disableHighlights() {\n this.createDisableHighlightScript();\n }\n\n private disableHighlightsSpecificKeyword(identifier: string) {\n this.createDisableHighlightScript(identifier);\n }\n\n private removeDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n doc\n .getElementById(\n `${this.highlightScriptId}${identifier ? `:${identifier}` : ''}`\n )\n ?.remove();\n }\n\n private createDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n\n const head = doc.head;\n const scriptId = `${this.highlightScriptId}${\n identifier ? `:${identifier}` : ''\n }`;\n const style =\n doc.getElementById(scriptId) || this.bindings.createStyleElement();\n style.setAttribute('id', scriptId);\n head.appendChild(style);\n style.appendChild(\n doc.createTextNode(`[id^=\"${HIGHLIGHT_PREFIX}${\n identifier ? `:${identifier}` : ''\n }\"] {\n background-color: inherit !important;\n color: inherit !important;\n }`)\n );\n }\n\n private get termsToHighlight() {\n const flatPhrasesToHighlight: TermsToHighlight = {};\n\n const phrasesToHighlight =\n this.bindings.engine.state.search.response.phrasesToHighlight;\n\n Object.entries(phrasesToHighlight).forEach(([phrase, keywords]) => {\n flatPhrasesToHighlight[phrase] = Object.entries(keywords).flatMap(\n ([keywordEntry, keywordStemming]) => {\n return [keywordEntry, ...keywordStemming];\n }\n );\n });\n\n return {\n ...this.bindings.engine.state.search.response.termsToHighlight,\n ...flatPhrasesToHighlight,\n };\n }\n\n private get requestId() {\n return this.bindings.engine.state.search.requestId;\n }\n\n private get quickviewUniqueIdentifier() {\n return this.result?.uniqueId + this.requestId;\n }\n\n private handleHighlightsScripts() {\n if (!this.highlightKeywords.highlightNone) {\n this.enableHighlights();\n } else {\n this.disableHighlights();\n }\n Object.values(this.highlightKeywords.keywords).forEach((word) => {\n if (word.enabled) {\n this.enableHighlightsSpecificKeyword(word.indexIdentifier);\n } else {\n this.disableHighlightsSpecificKeyword(word.indexIdentifier);\n }\n });\n }\n\n public render() {\n return (\n <atomic-modal\n fullscreen={this.bindings.store.isMobile()}\n class={'atomic-quickview-modal'}\n isOpen={this.isOpen}\n close={() => this.onClose()}\n exportparts={ATOMIC_MODAL_EXPORT_PARTS}\n >\n {this.renderHeader()}\n {this.renderBody()}\n {this.renderFooter()}\n </atomic-modal>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{r as t,h as i,g as e}from"./p-dc3df5ce.js";import{ResultTemplatesHelpers as r}from"@coveo/headless";import{I as s}from"./p-ff2d324d.js";import{f as o}from"./p-71d4c437.js";import{R as a}from"./p-4080f740.js";import"./p-c9074946.js";import"./p-1580513b.js";import"./p-05de7ca3.js";import"./p-cae02339.js";import"./p-3dc06261.js";const n="atomic-result-image{display:grid;place-items:center;grid-template-rows:100%;width:100%;height:100%}atomic-result-image img{width:100%;height:100%;object-fit:contain}";const h=n;var l=undefined&&undefined.__decorate||function(t,i,e,r){var s=arguments.length,o=s<3?i:r===null?r=Object.getOwnPropertyDescriptor(i,e):r,a;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")o=Reflect.decorate(t,i,e,r);else for(var n=t.length-1;n>=0;n--)if(a=t[n])o=(s<3?a(o):s>3?a(i,e,o):a(i,e))||o;return s>3&&o&&Object.defineProperty(i,e,o),o};const d=class{constructor(i){t(this,i);this.useFallback=false;this.useFallback=false;this.field=undefined;this.imageAltField=undefined;this.fallback=undefined}get url(){const t=r.getResultProperty(this.result,this.field);return Array.isArray(t)?t[0]:t}get altText(){if(this.imageAltField){const t=r.getResultProperty(this.result,this.imageAltField);if(Array.isArray(t)&&typeof t[0]==="string"){return t[0]}if(typeof t==="string"){return t}}return this.bindings.i18n.t("image-alt-fallback",{itemName:this.result.title})}logWarning(t){this.bindings.engine.logger.warn(t,this.host)}handleImageError(){const t=`The image url "${this.url}" is not valid or could not be loaded. You might want to add a "fallback" property.`;this.fallback?this.useFallback=true:this.logWarning(t)}handleMissingFallback(t){if(!this.fallback){this.logWarning(t);this.host.remove();return null}return this.fallback}validateUrl(t){if(!t){const t=`"${this.field}" is missing. Please review your indexation. You might want to add a "fallback" property.`;return this.handleMissingFallback(t)}if(typeof t!=="string"){const t=`Expected "${this.field}" to be a text field. Please review your indexation. You might want to add a "fallback" property.`;return this.handleMissingFallback(t)}return t}render(){let t=this.useFallback?this.fallback:this.url;if(!this.useFallback){t=this.validateUrl(t);if(!t){return}}return i("img",{alt:this.altText,src:o(t),onError:()=>this.handleImageError(),loading:"lazy"})}get host(){return e(this)}};l([s()],d.prototype,"bindings",void 0);l([a()],d.prototype,"result",void 0);d.style=h;export{d as atomic_result_image};
|
2
|
+
//# sourceMappingURL=p-6a3b139f.entry.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["atomicResultImageCss","AtomicResultImageStyle0","AtomicResultImage","this","useFallback","url","value","ResultTemplatesHelpers","getResultProperty","result","field","Array","isArray","altText","imageAltField","bindings","i18n","t","itemName","title","logWarning","message","engine","logger","warn","host","handleImageError","fallback","handleMissingFallback","remove","validateUrl","render","h","alt","src","filterProtocol","onError","loading","__decorate","InitializeBindings","ResultContext"],"sources":["src/components/search/result-template-components/atomic-result-image/atomic-result-image.pcss?tag=atomic-result-image","src/components/search/result-template-components/atomic-result-image/atomic-result-image.tsx"],"sourcesContent":["atomic-result-image {\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 {Result, ResultTemplatesHelpers} from '@coveo/headless';\nimport {Component, h, Prop, Element, State} from '@stencil/core';\nimport {\n InitializeBindings,\n InitializableComponent,\n} from '../../../../utils/initialization-utils';\nimport {filterProtocol} from '../../../../utils/xss-utils';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\nimport {ResultContext} from '@/src/components/search/result-template-component-utils/context/stencil-result-template-decorators';\n\n/**\n * The `atomic-result-image` component renders an image from a result field.\n */\n@Component({\n tag: 'atomic-result-image',\n styleUrl: 'atomic-result-image.pcss',\n shadow: false,\n})\nexport class AtomicResultImage implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n @ResultContext() private result!: Result;\n @Element() private host!: HTMLElement;\n @State() private useFallback = false;\n\n /**\n * The result field which the component should use. This will look for the field in the Result object first, then in the Result.raw object. It is important to include the necessary field in the `atomic-search-interface` component.\n */\n @Prop({reflect: true}) field!: string;\n\n /**\n * The result field that contains the alt text for the image. This will look for the field in the Result object first, then in the Result.raw object\n *\n * If the field is not specified, or does not contain a valid value, the alt text will be set to \"Image for {productName}\".\n */\n @Prop({reflect: true}) imageAltField?: string;\n\n /**\n * An optional fallback image URL that will be used in case the specified image field is not available or encounters an error.\n */\n @Prop({reflect: true}) fallback?: string;\n\n public error!: Error;\n\n public get url() {\n const value = ResultTemplatesHelpers.getResultProperty(\n this.result,\n this.field\n );\n return Array.isArray(value) ? value[0] : value;\n }\n\n private get altText(): string {\n if (this.imageAltField) {\n const value = ResultTemplatesHelpers.getResultProperty(\n this.result,\n this.imageAltField\n );\n\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return value[0];\n }\n\n if (typeof value === 'string') {\n return value;\n }\n }\n\n return this.bindings.i18n.t('image-alt-fallback', {\n itemName: this.result.title,\n });\n }\n\n private logWarning(message: string) {\n this.bindings.engine.logger.warn(message, this.host);\n }\n\n private handleImageError() {\n const message = `The image url \"${this.url}\" is not valid or could not be loaded. You might want to add a \"fallback\" property.`;\n\n this.fallback ? (this.useFallback = true) : this.logWarning(message);\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) {\n if (!url) {\n const message = `\"${this.field}\" is missing. Please review your indexation. 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 indexation. You might want to add a \"fallback\" property.`;\n return this.handleMissingFallback(message);\n }\n\n return url;\n }\n\n public render() {\n let url = this.useFallback ? this.fallback : this.url;\n\n if (!this.useFallback) {\n url = this.validateUrl(url);\n if (!url) {\n return;\n }\n }\n\n return (\n <img\n alt={this.altText}\n src={filterProtocol(url)}\n onError={() => this.handleImageError()}\n loading=\"lazy\"\n />\n );\n }\n}\n"],"mappings":"+
|
1
|
+
{"version":3,"names":["atomicResultImageCss","AtomicResultImageStyle0","AtomicResultImage","this","useFallback","url","value","ResultTemplatesHelpers","getResultProperty","result","field","Array","isArray","altText","imageAltField","bindings","i18n","t","itemName","title","logWarning","message","engine","logger","warn","host","handleImageError","fallback","handleMissingFallback","remove","validateUrl","render","h","alt","src","filterProtocol","onError","loading","__decorate","InitializeBindings","ResultContext"],"sources":["src/components/search/result-template-components/atomic-result-image/atomic-result-image.pcss?tag=atomic-result-image","src/components/search/result-template-components/atomic-result-image/atomic-result-image.tsx"],"sourcesContent":["atomic-result-image {\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 {Result, ResultTemplatesHelpers} from '@coveo/headless';\nimport {Component, h, Prop, Element, State} from '@stencil/core';\nimport {\n InitializeBindings,\n InitializableComponent,\n} from '../../../../utils/initialization-utils';\nimport {filterProtocol} from '../../../../utils/xss-utils';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\nimport {ResultContext} from '@/src/components/search/result-template-component-utils/context/stencil-result-template-decorators';\n\n/**\n * The `atomic-result-image` component renders an image from a result field.\n */\n@Component({\n tag: 'atomic-result-image',\n styleUrl: 'atomic-result-image.pcss',\n shadow: false,\n})\nexport class AtomicResultImage implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n @ResultContext() private result!: Result;\n @Element() private host!: HTMLElement;\n @State() private useFallback = false;\n\n /**\n * The result field which the component should use. This will look for the field in the Result object first, then in the Result.raw object. It is important to include the necessary field in the `atomic-search-interface` component.\n */\n @Prop({reflect: true}) field!: string;\n\n /**\n * The result field that contains the alt text for the image. This will look for the field in the Result object first, then in the Result.raw object\n *\n * If the field is not specified, or does not contain a valid value, the alt text will be set to \"Image for {productName}\".\n */\n @Prop({reflect: true}) imageAltField?: string;\n\n /**\n * An optional fallback image URL that will be used in case the specified image field is not available or encounters an error.\n */\n @Prop({reflect: true}) fallback?: string;\n\n public error!: Error;\n\n public get url() {\n const value = ResultTemplatesHelpers.getResultProperty(\n this.result,\n this.field\n );\n return Array.isArray(value) ? value[0] : value;\n }\n\n private get altText(): string {\n if (this.imageAltField) {\n const value = ResultTemplatesHelpers.getResultProperty(\n this.result,\n this.imageAltField\n );\n\n if (Array.isArray(value) && typeof value[0] === 'string') {\n return value[0];\n }\n\n if (typeof value === 'string') {\n return value;\n }\n }\n\n return this.bindings.i18n.t('image-alt-fallback', {\n itemName: this.result.title,\n });\n }\n\n private logWarning(message: string) {\n this.bindings.engine.logger.warn(message, this.host);\n }\n\n private handleImageError() {\n const message = `The image url \"${this.url}\" is not valid or could not be loaded. You might want to add a \"fallback\" property.`;\n\n this.fallback ? (this.useFallback = true) : this.logWarning(message);\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) {\n if (!url) {\n const message = `\"${this.field}\" is missing. Please review your indexation. 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 indexation. You might want to add a \"fallback\" property.`;\n return this.handleMissingFallback(message);\n }\n\n return url;\n }\n\n public render() {\n let url = this.useFallback ? this.fallback : this.url;\n\n if (!this.useFallback) {\n url = this.validateUrl(url);\n if (!url) {\n return;\n }\n }\n\n return (\n <img\n alt={this.altText}\n src={filterProtocol(url)}\n onError={() => this.handleImageError()}\n loading=\"lazy\"\n />\n );\n }\n}\n"],"mappings":"+UAAA,MAAMA,EAAuB,wKAC7B,MAAAC,EAAeD,E,iXCiBFE,EAAiB,M,yBAIXC,KAAAC,YAAc,M,iBAAA,M,0EAqB/B,OAAWC,GACT,MAAMC,EAAQC,EAAuBC,kBACnCL,KAAKM,OACLN,KAAKO,OAEP,OAAOC,MAAMC,QAAQN,GAASA,EAAM,GAAKA,C,CAG3C,WAAYO,GACV,GAAIV,KAAKW,cAAe,CACtB,MAAMR,EAAQC,EAAuBC,kBACnCL,KAAKM,OACLN,KAAKW,eAGP,GAAIH,MAAMC,QAAQN,WAAiBA,EAAM,KAAO,SAAU,CACxD,OAAOA,EAAM,E,CAGf,UAAWA,IAAU,SAAU,CAC7B,OAAOA,C,EAIX,OAAOH,KAAKY,SAASC,KAAKC,EAAE,qBAAsB,CAChDC,SAAUf,KAAKM,OAAOU,O,CAIlB,UAAAC,CAAWC,GACjBlB,KAAKY,SAASO,OAAOC,OAAOC,KAAKH,EAASlB,KAAKsB,K,CAGzC,gBAAAC,GACN,MAAML,EAAU,kBAAkBlB,KAAKE,yFAEvCF,KAAKwB,SAAYxB,KAAKC,YAAc,KAAQD,KAAKiB,WAAWC,E,CAGtD,qBAAAO,CAAsBP,GAC5B,IAAKlB,KAAKwB,SAAU,CAClBxB,KAAKiB,WAAWC,GAChBlB,KAAKsB,KAAKI,SACV,OAAO,I,CAET,OAAO1B,KAAKwB,Q,CAGN,WAAAG,CAAYzB,GAClB,IAAKA,EAAK,CACR,MAAMgB,EAAU,IAAIlB,KAAKO,iGACzB,OAAOP,KAAKyB,sBAAsBP,E,CAGpC,UAAWhB,IAAQ,SAAU,CAC3B,MAAMgB,EAAU,aAAalB,KAAKO,yGAClC,OAAOP,KAAKyB,sBAAsBP,E,CAGpC,OAAOhB,C,CAGF,MAAA0B,GACL,IAAI1B,EAAMF,KAAKC,YAAcD,KAAKwB,SAAWxB,KAAKE,IAElD,IAAKF,KAAKC,YAAa,CACrBC,EAAMF,KAAK2B,YAAYzB,GACvB,IAAKA,EAAK,CACR,M,EAIJ,OACE2B,EAAA,OACEC,IAAK9B,KAAKU,QACVqB,IAAKC,EAAe9B,GACpB+B,QAAS,IAAMjC,KAAKuB,mBACpBW,QAAQ,Q,6BArGeC,EAAA,CAA5BC,K,+BACwBD,EAAA,CAAxBE,K","ignoreList":[]}
|