@coveo/atomic 3.33.8-pre.bcd9d55cdd → 3.33.8-pre.bfb642d322
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atomic/_atomic.esm.js +1 -1
- package/dist/atomic/atomic.esm.js.map +1 -1
- package/dist/atomic/components/_index.d.ts +2 -0
- package/dist/atomic/components/_index.js +2 -2
- package/dist/atomic/components/analytics-config.js +1 -1
- package/dist/atomic/components/atomic-category-facet.js +1 -1
- package/dist/atomic/components/atomic-facet.js +1 -1
- package/dist/atomic/components/atomic-format-currency.js +1 -1
- package/dist/atomic/components/atomic-format-number.js +1 -1
- package/dist/atomic/components/atomic-format-unit.js +1 -1
- package/dist/atomic/components/atomic-insight-pager.js +2 -38
- package/dist/atomic/components/atomic-insight-pager.js.map +1 -1
- package/dist/atomic/components/atomic-insight-search-box.js +4 -3
- package/dist/atomic/components/atomic-insight-search-box.js.map +1 -1
- package/dist/atomic/components/atomic-numeric-facet.js +1 -1
- package/dist/atomic/components/atomic-pager.d.ts +11 -0
- package/dist/atomic/components/atomic-pager.js +134 -0
- package/dist/atomic/components/atomic-pager.js.map +1 -0
- package/dist/atomic/components/atomic-query-error.js +1 -1
- package/dist/atomic/components/atomic-quickview-modal2.js +1 -1
- package/dist/atomic/components/atomic-quickview.js +1 -1
- package/dist/atomic/components/atomic-refine-modal2.js +1 -1
- package/dist/atomic/components/atomic-refine-toggle.js +1 -1
- package/dist/atomic/components/atomic-relevance-inspector2.js +2 -2
- package/dist/atomic/components/atomic-result-children.js +1 -1
- package/dist/atomic/components/atomic-result-fields-list.js +1 -1
- package/dist/atomic/components/atomic-result-link.js +1 -1
- package/dist/atomic/components/atomic-result-list.js +1 -1
- package/dist/atomic/components/atomic-result-table-placeholder2.js +1 -1
- package/dist/atomic/components/atomic-search-box-instant-results.js +2 -2
- package/dist/atomic/components/atomic-search-box-instant-results.js.map +1 -1
- package/dist/atomic/components/atomic-search-box-query-suggestions2.js +2 -2
- package/dist/atomic/components/atomic-search-box-query-suggestions2.js.map +1 -1
- package/dist/atomic/components/atomic-search-box-recent-queries2.js +2 -2
- package/dist/atomic/components/atomic-search-box-recent-queries2.js.map +1 -1
- package/dist/atomic/components/atomic-search-box.js +6 -5
- package/dist/atomic/components/atomic-search-box.js.map +1 -1
- package/dist/atomic/components/atomic-smart-snippet-feedback-modal2.js +2 -2
- package/dist/atomic/components/atomic-sort-dropdown.js +2 -2
- package/dist/atomic/components/atomic-sort-expression.js +1 -1
- package/dist/atomic/components/atomic-suggestion-renderer2.js +1 -1
- package/dist/atomic/components/atomic-suggestion-renderer2.js.map +1 -1
- package/dist/atomic/components/atomic-tab-manager.js +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.js +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box-instant-products/atomic-commerce-search-box-instant-products.js +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box-query-suggestions/atomic-commerce-search-box-query-suggestions.js +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.js +1 -1
- package/dist/atomic/components/components/common/suggestions/suggestion-manager.js +1 -1
- package/dist/atomic/components/components/common/suggestions/{suggestions-events.js → suggestions-common.js} +18 -16
- package/dist/atomic/components/components/search/index.js +0 -1
- package/dist/atomic/components/components/search/lazy-index.js +0 -1
- package/dist/atomic/components/global/environment.js +1 -1
- package/dist/atomic/components/stencil-pager-navigation.js +42 -0
- package/dist/atomic/components/stencil-pager-navigation.js.map +1 -0
- package/dist/atomic/components/stencil-query-suggestions.js.map +1 -1
- package/dist/atomic/components/stencil-suggestion-manager.js +2 -20
- package/dist/atomic/components/stencil-suggestion-manager.js.map +1 -1
- package/dist/atomic/components/{suggestions-events.js → suggestions-common.js} +20 -18
- package/dist/atomic/components/suggestions-common.js.map +1 -0
- package/dist/atomic/index.esm.js +1 -1
- package/dist/atomic/index.esm.js.map +1 -1
- package/dist/atomic/{p-e8d5e852.entry.js → p-021f01d6.entry.js} +2 -2
- package/dist/atomic/p-211d7d6a.js +2 -0
- package/dist/atomic/p-211d7d6a.js.map +1 -0
- package/dist/atomic/p-29fd6768.js +2 -0
- package/dist/atomic/p-29fd6768.js.map +1 -0
- package/dist/atomic/{p-3af5c567.entry.js → p-330e6e7c.entry.js} +2 -2
- package/dist/atomic/{p-d0f47b33.entry.js → p-36e71b99.entry.js} +2 -2
- package/dist/atomic/p-36e71b99.entry.js.map +1 -0
- package/dist/atomic/{p-6f988841.entry.js → p-3c8d109e.entry.js} +2 -2
- package/dist/atomic/{p-fb7ad34b.entry.js → p-3d847e45.entry.js} +2 -2
- package/dist/atomic/p-3d847e45.entry.js.map +1 -0
- package/dist/atomic/{p-65373475.entry.js → p-4b3d253b.entry.js} +2 -2
- package/dist/atomic/{p-4c30ca3e.entry.js → p-52ba404c.entry.js} +2 -2
- package/dist/atomic/{p-45c4685e.entry.js → p-75e00690.entry.js} +2 -2
- package/dist/atomic/p-7601c3de.js +2 -0
- package/dist/atomic/p-7601c3de.js.map +1 -0
- package/dist/atomic/{p-8acb1466.entry.js → p-78b70622.entry.js} +2 -2
- package/dist/atomic/{p-4915faeb.entry.js → p-7a625c7e.entry.js} +2 -2
- package/dist/atomic/{p-f073a78d.entry.js → p-7b0b9e9b.entry.js} +2 -2
- package/dist/atomic/{p-a02b1209.entry.js → p-7b899b57.entry.js} +2 -2
- package/dist/atomic/{p-bf50b64d.entry.js → p-7dfcd6af.entry.js} +2 -2
- package/dist/atomic/{p-8305e028.entry.js → p-83e20cc3.entry.js} +2 -2
- package/dist/atomic/{p-5adbf098.entry.js → p-877d35b1.entry.js} +2 -2
- package/dist/atomic/{p-26a51a77.entry.js → p-8867af82.entry.js} +2 -2
- package/dist/atomic/p-8867af82.entry.js.map +1 -0
- package/dist/atomic/{p-9883415e.entry.js → p-93e29b24.entry.js} +2 -2
- package/dist/atomic/{p-1cc90c52.js → p-94b5f495.js} +2 -2
- package/dist/atomic/{p-a3f1a1f2.entry.js → p-a09b4db4.entry.js} +2 -2
- package/dist/atomic/{p-be1b98a6.entry.js → p-a760d9f9.entry.js} +2 -2
- package/dist/atomic/{p-4e9d1f9e.entry.js → p-aa2a81fd.entry.js} +2 -2
- package/dist/atomic/{p-fbfe913d.entry.js → p-aa4224ea.entry.js} +2 -2
- package/dist/atomic/p-aa4224ea.entry.js.map +1 -0
- package/dist/atomic/{p-7b9cebdc.entry.js → p-aa8e0616.entry.js} +2 -2
- package/dist/atomic/{p-00e5bb15.entry.js → p-ae060711.entry.js} +2 -2
- package/dist/atomic/p-af93b44c.js.map +1 -1
- package/dist/atomic/{p-71bb8125.entry.js → p-b28011e6.entry.js} +2 -2
- package/dist/atomic/{p-516b8165.entry.js → p-c1bf43cf.entry.js} +2 -2
- package/dist/atomic/p-c1bf43cf.entry.js.map +1 -0
- package/dist/atomic/{p-d11b2b24.entry.js → p-c49cfa0c.entry.js} +2 -2
- package/dist/atomic/{p-b4ad3036.entry.js → p-d00a12e9.entry.js} +2 -2
- package/dist/atomic/{p-757de797.entry.js → p-de066001.entry.js} +2 -2
- package/dist/atomic/{p-d2d22ab2.entry.js → p-f22bcb8c.entry.js} +2 -2
- package/dist/atomic/p-fa8b7c4c.entry.js +2 -0
- package/dist/atomic/p-fa8b7c4c.entry.js.map +1 -0
- package/dist/atomic/p-fcf3f7d7.entry.js +2 -0
- package/dist/atomic/p-fcf3f7d7.entry.js.map +1 -0
- package/dist/cjs/_index.cjs.js +2 -5
- package/dist/cjs/_loader.cjs.js +1 -1
- package/dist/cjs/{analytics-config-1bff463e.js → analytics-config-b8fab215.js} +2 -2
- package/dist/cjs/{analytics-config-1bff463e.js.map → analytics-config-b8fab215.js.map} +1 -1
- package/dist/cjs/atomic-category-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-format-currency.cjs.entry.js +1 -1
- package/dist/cjs/atomic-format-number.cjs.entry.js +1 -1
- package/dist/cjs/atomic-format-unit.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-pager.cjs.entry.js +7 -41
- package/dist/cjs/atomic-insight-pager.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-search-box.cjs.entry.js +5 -5
- package/dist/cjs/atomic-insight-search-box.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-numeric-facet.cjs.entry.js +1 -1
- package/dist/cjs/atomic-pager.cjs.entry.js +121 -0
- package/dist/cjs/atomic-pager.cjs.entry.js.map +1 -0
- package/dist/cjs/atomic-query-error.cjs.entry.js +1 -1
- package/dist/cjs/atomic-quickview-modal.cjs.entry.js +1 -1
- package/dist/cjs/atomic-quickview.cjs.entry.js +1 -1
- package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-refine-modal.cjs.entry.js +1 -1
- package/dist/cjs/atomic-refine-toggle.cjs.entry.js +1 -1
- package/dist/cjs/atomic-relevance-inspector.cjs.entry.js +2 -2
- package/dist/cjs/atomic-result-children.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-fields-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-link.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-list.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js +1 -1
- package/dist/cjs/atomic-search-box-instant-results.cjs.entry.js +3 -3
- package/dist/cjs/atomic-search-box-instant-results.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-search-box-query-suggestions_2.cjs.entry.js +5 -5
- package/dist/cjs/atomic-search-box-query-suggestions_2.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-search-box.cjs.entry.js +7 -7
- package/dist/cjs/atomic-search-box.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-smart-snippet-feedback-modal.cjs.entry.js +2 -2
- package/dist/cjs/atomic-sort-dropdown.cjs.entry.js +2 -2
- package/dist/cjs/atomic-sort-expression.cjs.entry.js +1 -1
- package/dist/cjs/atomic-suggestion-renderer.cjs.entry.js +1 -1
- package/dist/cjs/atomic-suggestion-renderer.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-tab-manager.cjs.entry.js +1 -1
- package/dist/cjs/atomic.cjs.js +1 -1
- package/dist/cjs/index-757bc886.js +4 -0
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/stencil-pager-navigation-c20b8a95.js +48 -0
- package/dist/cjs/stencil-pager-navigation-c20b8a95.js.map +1 -0
- package/dist/cjs/stencil-query-suggestions-03268ecc.js.map +1 -1
- package/dist/cjs/{stencil-suggestion-manager-2cba6d69.js → stencil-suggestion-manager-c0878ef2.js} +4 -4
- package/dist/cjs/{stencil-suggestion-manager-2cba6d69.js.map → stencil-suggestion-manager-c0878ef2.js.map} +1 -1
- package/dist/cjs/{suggestions-events-63dd0640.js → suggestions-common-5097a362.js} +21 -17
- package/dist/cjs/suggestions-common-5097a362.js.map +1 -0
- package/dist/cjs/version.cjs.js +2 -2
- package/dist/esm/_index.js +1 -2
- package/dist/esm/_loader.js +1 -1
- package/dist/esm/{analytics-config-b8cffa6f.js → analytics-config-d0c5b639.js} +2 -2
- package/dist/esm/{analytics-config-b8cffa6f.js.map → analytics-config-d0c5b639.js.map} +1 -1
- package/dist/esm/atomic-category-facet.entry.js +1 -1
- package/dist/esm/atomic-facet.entry.js +1 -1
- package/dist/esm/atomic-format-currency.entry.js +1 -1
- package/dist/esm/atomic-format-number.entry.js +1 -1
- package/dist/esm/atomic-format-unit.entry.js +1 -1
- package/dist/esm/atomic-insight-interface.entry.js +1 -1
- package/dist/esm/atomic-insight-pager.entry.js +4 -38
- package/dist/esm/atomic-insight-pager.entry.js.map +1 -1
- package/dist/esm/atomic-insight-search-box.entry.js +4 -4
- package/dist/esm/atomic-insight-search-box.entry.js.map +1 -1
- package/dist/esm/atomic-numeric-facet.entry.js +1 -1
- package/dist/esm/atomic-pager.entry.js +117 -0
- package/dist/esm/atomic-pager.entry.js.map +1 -0
- package/dist/esm/atomic-query-error.entry.js +1 -1
- package/dist/esm/atomic-quickview-modal.entry.js +1 -1
- package/dist/esm/atomic-quickview.entry.js +1 -1
- package/dist/esm/atomic-recs-interface.entry.js +1 -1
- package/dist/esm/atomic-refine-modal.entry.js +1 -1
- package/dist/esm/atomic-refine-toggle.entry.js +1 -1
- package/dist/esm/atomic-relevance-inspector.entry.js +2 -2
- package/dist/esm/atomic-result-children.entry.js +1 -1
- package/dist/esm/atomic-result-fields-list.entry.js +1 -1
- package/dist/esm/atomic-result-link.entry.js +1 -1
- package/dist/esm/atomic-result-list.entry.js +1 -1
- package/dist/esm/atomic-result-placeholder_8.entry.js +1 -1
- package/dist/esm/atomic-search-box-instant-results.entry.js +2 -2
- package/dist/esm/atomic-search-box-instant-results.entry.js.map +1 -1
- package/dist/esm/atomic-search-box-query-suggestions_2.entry.js +3 -3
- package/dist/esm/atomic-search-box-query-suggestions_2.entry.js.map +1 -1
- package/dist/esm/atomic-search-box.entry.js +6 -6
- package/dist/esm/atomic-search-box.entry.js.map +1 -1
- package/dist/esm/atomic-search-interface.entry.js +1 -1
- package/dist/esm/atomic-smart-snippet-feedback-modal.entry.js +2 -2
- package/dist/esm/atomic-sort-dropdown.entry.js +2 -2
- package/dist/esm/atomic-sort-expression.entry.js +1 -1
- package/dist/esm/atomic-suggestion-renderer.entry.js +1 -1
- package/dist/esm/atomic-suggestion-renderer.entry.js.map +1 -1
- package/dist/esm/atomic-tab-manager.entry.js +1 -1
- package/dist/esm/atomic.js +1 -1
- package/dist/esm/index-3f35faca.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/stencil-pager-navigation-7261a834.js +42 -0
- package/dist/esm/stencil-pager-navigation-7261a834.js.map +1 -0
- package/dist/esm/stencil-query-suggestions-5d6a46d7.js.map +1 -1
- package/dist/esm/{stencil-suggestion-manager-376f83e8.js → stencil-suggestion-manager-486094dd.js} +2 -2
- package/dist/esm/{stencil-suggestion-manager-376f83e8.js.map → stencil-suggestion-manager-486094dd.js.map} +1 -1
- package/dist/esm/{suggestions-events-b7a6f007.js → suggestions-common-2b20db26.js} +20 -18
- package/dist/esm/suggestions-common-2b20db26.js.map +1 -0
- package/dist/esm/version.js +2 -2
- package/dist/types/components/commerce/atomic-commerce-search-box-instant-products/atomic-commerce-search-box-instant-products.d.ts +1 -1
- package/dist/types/components/commerce/atomic-commerce-search-box-query-suggestions/atomic-commerce-search-box-query-suggestions.d.ts +1 -1
- package/dist/types/components/commerce/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.d.ts +1 -1
- package/dist/types/components/common/atomic-suggestion-renderer/atomic-suggestion-renderer.d.ts +1 -1
- package/dist/types/components/common/suggestions/instant-item.d.ts +1 -1
- package/dist/types/components/common/suggestions/query-suggestions.d.ts +1 -1
- package/dist/types/components/common/suggestions/recent-queries.d.ts +1 -1
- package/dist/types/components/common/suggestions/stencil-instant-item.d.ts +1 -1
- package/dist/types/components/common/suggestions/stencil-query-suggestions.d.ts +1 -1
- package/dist/types/components/common/suggestions/stencil-recent-queries.d.ts +1 -1
- package/dist/types/components/common/suggestions/stencil-suggestion-manager.d.ts +1 -1
- package/dist/types/components/common/suggestions/suggestion-manager.d.ts +1 -1
- package/dist/types/components/common/suggestions/{suggestions-types.d.ts → suggestions-common.d.ts} +16 -6
- package/dist/types/components/search/atomic-pager/atomic-pager.d.ts +8 -18
- package/dist/types/components/search/atomic-search-box/atomic-search-box.d.ts +1 -1
- package/dist/types/components/search/index.d.ts +0 -1
- package/dist/types/components/search/search-box-suggestions/atomic-search-box-instant-results/atomic-search-box-instant-results.d.ts +1 -1
- package/dist/types/components.d.ts +67 -2
- package/dist/types/decorators/types.d.ts +1 -1
- package/dist/types/index.d.ts +1 -3
- package/docs/atomic-docs.json +169 -3
- package/package.json +4 -4
- package/dist/atomic/components/components/common/suggestions/suggestions-types.js +0 -1
- package/dist/atomic/components/components/common/suggestions/suggestions-utils.js +0 -18
- package/dist/atomic/components/components/search/atomic-pager/atomic-pager.js +0 -172
- package/dist/atomic/components/suggestions-events.js.map +0 -1
- package/dist/atomic/p-0a051b8d.js +0 -2
- package/dist/atomic/p-0a051b8d.js.map +0 -1
- package/dist/atomic/p-16f4ce98.js +0 -2
- package/dist/atomic/p-16f4ce98.js.map +0 -1
- package/dist/atomic/p-26a51a77.entry.js.map +0 -1
- package/dist/atomic/p-4b7a19db.js +0 -2
- package/dist/atomic/p-4b7a19db.js.map +0 -1
- package/dist/atomic/p-516b8165.entry.js.map +0 -1
- package/dist/atomic/p-593903ec.entry.js +0 -2
- package/dist/atomic/p-593903ec.entry.js.map +0 -1
- package/dist/atomic/p-d0f47b33.entry.js.map +0 -1
- package/dist/atomic/p-fb7ad34b.entry.js.map +0 -1
- package/dist/atomic/p-fbfe913d.entry.js.map +0 -1
- package/dist/cjs/suggestions-events-63dd0640.js.map +0 -1
- package/dist/cjs/suggestions-utils-61000808.js +0 -25
- package/dist/cjs/suggestions-utils-61000808.js.map +0 -1
- package/dist/esm/suggestions-events-b7a6f007.js.map +0 -1
- package/dist/esm/suggestions-utils-591559a0.js +0 -22
- package/dist/esm/suggestions-utils-591559a0.js.map +0 -1
- package/dist/types/components/common/suggestions/suggestions-events.d.ts +0 -14
- package/dist/types/components/common/suggestions/suggestions-utils.d.ts +0 -15
- /package/dist/atomic/{p-e8d5e852.entry.js.map → p-021f01d6.entry.js.map} +0 -0
- /package/dist/atomic/{p-3af5c567.entry.js.map → p-330e6e7c.entry.js.map} +0 -0
- /package/dist/atomic/{p-6f988841.entry.js.map → p-3c8d109e.entry.js.map} +0 -0
- /package/dist/atomic/{p-65373475.entry.js.map → p-4b3d253b.entry.js.map} +0 -0
- /package/dist/atomic/{p-4c30ca3e.entry.js.map → p-52ba404c.entry.js.map} +0 -0
- /package/dist/atomic/{p-45c4685e.entry.js.map → p-75e00690.entry.js.map} +0 -0
- /package/dist/atomic/{p-8acb1466.entry.js.map → p-78b70622.entry.js.map} +0 -0
- /package/dist/atomic/{p-4915faeb.entry.js.map → p-7a625c7e.entry.js.map} +0 -0
- /package/dist/atomic/{p-f073a78d.entry.js.map → p-7b0b9e9b.entry.js.map} +0 -0
- /package/dist/atomic/{p-a02b1209.entry.js.map → p-7b899b57.entry.js.map} +0 -0
- /package/dist/atomic/{p-bf50b64d.entry.js.map → p-7dfcd6af.entry.js.map} +0 -0
- /package/dist/atomic/{p-8305e028.entry.js.map → p-83e20cc3.entry.js.map} +0 -0
- /package/dist/atomic/{p-5adbf098.entry.js.map → p-877d35b1.entry.js.map} +0 -0
- /package/dist/atomic/{p-9883415e.entry.js.map → p-93e29b24.entry.js.map} +0 -0
- /package/dist/atomic/{p-1cc90c52.js.map → p-94b5f495.js.map} +0 -0
- /package/dist/atomic/{p-a3f1a1f2.entry.js.map → p-a09b4db4.entry.js.map} +0 -0
- /package/dist/atomic/{p-be1b98a6.entry.js.map → p-a760d9f9.entry.js.map} +0 -0
- /package/dist/atomic/{p-4e9d1f9e.entry.js.map → p-aa2a81fd.entry.js.map} +0 -0
- /package/dist/atomic/{p-7b9cebdc.entry.js.map → p-aa8e0616.entry.js.map} +0 -0
- /package/dist/atomic/{p-00e5bb15.entry.js.map → p-ae060711.entry.js.map} +0 -0
- /package/dist/atomic/{p-71bb8125.entry.js.map → p-b28011e6.entry.js.map} +0 -0
- /package/dist/atomic/{p-d11b2b24.entry.js.map → p-c49cfa0c.entry.js.map} +0 -0
- /package/dist/atomic/{p-b4ad3036.entry.js.map → p-d00a12e9.entry.js.map} +0 -0
- /package/dist/atomic/{p-757de797.entry.js.map → p-de066001.entry.js.map} +0 -0
- /package/dist/atomic/{p-d2d22ab2.entry.js.map → p-f22bcb8c.entry.js.map} +0 -0
package/docs/atomic-docs.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"timestamp": "2025-09-
|
2
|
+
"timestamp": "2025-09-24T16:16:45",
|
3
3
|
"compiler": {
|
4
4
|
"name": "@stencil/core",
|
5
5
|
"version": "4.20.0",
|
@@ -5833,6 +5833,172 @@
|
|
5833
5833
|
"dependencies": [],
|
5834
5834
|
"dependencyGraph": {}
|
5835
5835
|
},
|
5836
|
+
{
|
5837
|
+
"filePath": "src/components/search/atomic-pager/atomic-pager.tsx",
|
5838
|
+
"encapsulation": "shadow",
|
5839
|
+
"tag": "atomic-pager",
|
5840
|
+
"docs": "The `atomic-pager` provides buttons that allow the end user to navigate through the different result pages.",
|
5841
|
+
"docsTags": [
|
5842
|
+
{
|
5843
|
+
"name": "part",
|
5844
|
+
"text": "buttons - The list of the next/previous buttons and page-buttons."
|
5845
|
+
},
|
5846
|
+
{
|
5847
|
+
"name": "part",
|
5848
|
+
"text": "page-buttons - The list of page buttons."
|
5849
|
+
},
|
5850
|
+
{
|
5851
|
+
"name": "part",
|
5852
|
+
"text": "page-button - The page button."
|
5853
|
+
},
|
5854
|
+
{
|
5855
|
+
"name": "part",
|
5856
|
+
"text": "active-page-button - The active page button."
|
5857
|
+
},
|
5858
|
+
{
|
5859
|
+
"name": "part",
|
5860
|
+
"text": "previous-button - The previous button."
|
5861
|
+
},
|
5862
|
+
{
|
5863
|
+
"name": "part",
|
5864
|
+
"text": "next-button - The next button."
|
5865
|
+
},
|
5866
|
+
{
|
5867
|
+
"name": "part",
|
5868
|
+
"text": "previous-button-icon - Icon of the previous button."
|
5869
|
+
},
|
5870
|
+
{
|
5871
|
+
"name": "part",
|
5872
|
+
"text": "next-button-icon - Icon of the next button."
|
5873
|
+
}
|
5874
|
+
],
|
5875
|
+
"usage": {},
|
5876
|
+
"props": [
|
5877
|
+
{
|
5878
|
+
"name": "nextButtonIcon",
|
5879
|
+
"type": "string",
|
5880
|
+
"complexType": {
|
5881
|
+
"original": "string",
|
5882
|
+
"resolved": "string",
|
5883
|
+
"references": {}
|
5884
|
+
},
|
5885
|
+
"mutable": false,
|
5886
|
+
"attr": "next-button-icon",
|
5887
|
+
"reflectToAttr": true,
|
5888
|
+
"docs": "The SVG icon to use to display the Next button.\n\n- Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.\n- Use a value that starts with `assets://`, to display an icon from the Atomic package.\n- Use a stringified SVG to display it directly.",
|
5889
|
+
"docsTags": [],
|
5890
|
+
"default": "ArrowRightIcon",
|
5891
|
+
"values": [
|
5892
|
+
{
|
5893
|
+
"type": "string"
|
5894
|
+
}
|
5895
|
+
],
|
5896
|
+
"optional": false,
|
5897
|
+
"required": false
|
5898
|
+
},
|
5899
|
+
{
|
5900
|
+
"name": "numberOfPages",
|
5901
|
+
"type": "number",
|
5902
|
+
"complexType": {
|
5903
|
+
"original": "number",
|
5904
|
+
"resolved": "number",
|
5905
|
+
"references": {}
|
5906
|
+
},
|
5907
|
+
"mutable": false,
|
5908
|
+
"attr": "number-of-pages",
|
5909
|
+
"reflectToAttr": true,
|
5910
|
+
"docs": "Specifies how many page buttons to display in the pager.",
|
5911
|
+
"docsTags": [],
|
5912
|
+
"default": "5",
|
5913
|
+
"values": [
|
5914
|
+
{
|
5915
|
+
"type": "number"
|
5916
|
+
}
|
5917
|
+
],
|
5918
|
+
"optional": false,
|
5919
|
+
"required": false
|
5920
|
+
},
|
5921
|
+
{
|
5922
|
+
"name": "previousButtonIcon",
|
5923
|
+
"type": "string",
|
5924
|
+
"complexType": {
|
5925
|
+
"original": "string",
|
5926
|
+
"resolved": "string",
|
5927
|
+
"references": {}
|
5928
|
+
},
|
5929
|
+
"mutable": false,
|
5930
|
+
"attr": "previous-button-icon",
|
5931
|
+
"reflectToAttr": true,
|
5932
|
+
"docs": "The SVG icon to use to display the Previous button.\n\n- Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.\n- Use a value that starts with `assets://`, to display an icon from the Atomic package.\n- Use a stringified SVG to display it directly.",
|
5933
|
+
"docsTags": [],
|
5934
|
+
"default": "ArrowLeftIcon",
|
5935
|
+
"values": [
|
5936
|
+
{
|
5937
|
+
"type": "string"
|
5938
|
+
}
|
5939
|
+
],
|
5940
|
+
"optional": false,
|
5941
|
+
"required": false
|
5942
|
+
}
|
5943
|
+
],
|
5944
|
+
"methods": [],
|
5945
|
+
"events": [
|
5946
|
+
{
|
5947
|
+
"event": "atomic/scrollToTop",
|
5948
|
+
"detail": "any",
|
5949
|
+
"bubbles": true,
|
5950
|
+
"complexType": {
|
5951
|
+
"original": "any",
|
5952
|
+
"resolved": "any",
|
5953
|
+
"references": {}
|
5954
|
+
},
|
5955
|
+
"cancelable": true,
|
5956
|
+
"composed": true,
|
5957
|
+
"docs": "",
|
5958
|
+
"docsTags": []
|
5959
|
+
}
|
5960
|
+
],
|
5961
|
+
"listeners": [],
|
5962
|
+
"styles": [],
|
5963
|
+
"slots": [],
|
5964
|
+
"parts": [
|
5965
|
+
{
|
5966
|
+
"name": "active-page-button",
|
5967
|
+
"docs": "The active page button."
|
5968
|
+
},
|
5969
|
+
{
|
5970
|
+
"name": "buttons",
|
5971
|
+
"docs": "The list of the next/previous buttons and page-buttons."
|
5972
|
+
},
|
5973
|
+
{
|
5974
|
+
"name": "next-button",
|
5975
|
+
"docs": "The next button."
|
5976
|
+
},
|
5977
|
+
{
|
5978
|
+
"name": "next-button-icon",
|
5979
|
+
"docs": "Icon of the next button."
|
5980
|
+
},
|
5981
|
+
{
|
5982
|
+
"name": "page-button",
|
5983
|
+
"docs": "The page button."
|
5984
|
+
},
|
5985
|
+
{
|
5986
|
+
"name": "page-buttons",
|
5987
|
+
"docs": "The list of page buttons."
|
5988
|
+
},
|
5989
|
+
{
|
5990
|
+
"name": "previous-button",
|
5991
|
+
"docs": "The previous button."
|
5992
|
+
},
|
5993
|
+
{
|
5994
|
+
"name": "previous-button-icon",
|
5995
|
+
"docs": "Icon of the previous button."
|
5996
|
+
}
|
5997
|
+
],
|
5998
|
+
"dependents": [],
|
5999
|
+
"dependencies": [],
|
6000
|
+
"dependencyGraph": {}
|
6001
|
+
},
|
5836
6002
|
{
|
5837
6003
|
"filePath": "src/components/search/facets/atomic-popover/atomic-popover.tsx",
|
5838
6004
|
"encapsulation": "shadow",
|
@@ -15923,10 +16089,10 @@
|
|
15923
16089
|
"docstring": "",
|
15924
16090
|
"path": "src/components/common/layout/display-options.ts"
|
15925
16091
|
},
|
15926
|
-
"src/components/common/suggestions/suggestions-
|
16092
|
+
"src/components/common/suggestions/suggestions-common.ts::SearchBoxSuggestionElement": {
|
15927
16093
|
"declaration": "export interface SearchBoxSuggestionElement {\n /**\n * Stable identity which enables Stencil to reuse DOM elements for better performance.\n * The best way to pick a key is to use a string that uniquely identifies that list item among its siblings (often your data will already have IDs).\n */\n key: string;\n /**\n * Rendered content of the element.\n *\n * @remarks\n * The `VNode` type will be deprecated in v4 as we are detaching from Stencil.\n */\n content: Element | VNode;\n /**\n * Hook called when the selection is selected.\n * @param e DOM event.\n */\n onSelect?(e: Event): void;\n /**\n * The query associated with the suggestion which will replace the query in the search box if the suggestion is selected.\n */\n query?: string;\n /**\n * For improved accessibility, provide this property with additional information.\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label\n */\n ariaLabel?: string;\n /**\n * Adds a specific shadow part attribute that can be selected with the CSS ::part pseudo-element.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/::part\n */\n part?: string;\n /**\n * Hide the suggestion if it's the last in the list.\n */\n hideIfLast?: boolean;\n}",
|
15928
16094
|
"docstring": "Element which will be rendered in the list of suggestions.",
|
15929
|
-
"path": "src/components/common/suggestions/suggestions-
|
16095
|
+
"path": "src/components/common/suggestions/suggestions-common.ts"
|
15930
16096
|
},
|
15931
16097
|
"../headless/dist/definitions/index.d.ts::RelativeDateUnit": {
|
15932
16098
|
"declaration": "any",
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@coveo/atomic",
|
3
3
|
"type": "module",
|
4
|
-
"version": "3.33.8-pre.
|
4
|
+
"version": "3.33.8-pre.bfb642d322",
|
5
5
|
"description": "A web-component library for building modern UIs interfacing with the Coveo platform",
|
6
6
|
"homepage": "https://docs.coveo.com/en/atomic/latest/",
|
7
7
|
"repository": {
|
@@ -81,7 +81,7 @@
|
|
81
81
|
},
|
82
82
|
"dependencies": {
|
83
83
|
"@coveo/bueno": "1.1.2",
|
84
|
-
"@coveo/headless": "3.31.
|
84
|
+
"@coveo/headless": "3.31.0",
|
85
85
|
"@lit/context": "1.1.6",
|
86
86
|
"@open-wc/lit-helpers": "0.7.0",
|
87
87
|
"@popperjs/core": "2.11.8",
|
@@ -149,11 +149,11 @@
|
|
149
149
|
"typescript": "5.8.3",
|
150
150
|
"vite": "7.0.6",
|
151
151
|
"vitest": "3.2.4",
|
152
|
-
"wait-on": "
|
152
|
+
"wait-on": "9.0.0"
|
153
153
|
},
|
154
154
|
"peerDependencies": {
|
155
155
|
"@coveo/bueno": "1.1.2",
|
156
|
-
"@coveo/headless": "3.31.
|
156
|
+
"@coveo/headless": "3.31.0",
|
157
157
|
"typescript": ">=5.0.0"
|
158
158
|
},
|
159
159
|
"peerDependenciesMeta": {
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,18 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Checks if a search box suggestion element has no query.
|
3
|
-
*
|
4
|
-
* @param el - The search box suggestion element to check
|
5
|
-
* @returns True if the element has no query or the query is whitespace-only
|
6
|
-
*/
|
7
|
-
export function elementHasNoQuery(el) {
|
8
|
-
return !el.query || el.query.trim() === '';
|
9
|
-
}
|
10
|
-
/**
|
11
|
-
* Checks if a search box suggestion element has a query.
|
12
|
-
*
|
13
|
-
* @param el - The search box suggestion element to check
|
14
|
-
* @returns True if the element has a non-empty, non-whitespace query
|
15
|
-
*/
|
16
|
-
export function elementHasQuery(el) {
|
17
|
-
return !!el.query && el.query.trim() !== '';
|
18
|
-
}
|
@@ -1,172 +0,0 @@
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
|
-
};
|
7
|
-
import { NumberValue, Schema } from '@coveo/bueno';
|
8
|
-
import { buildPager, buildSearchStatus, } from '@coveo/headless';
|
9
|
-
import { html, LitElement } from 'lit';
|
10
|
-
import { customElement, property, state } from 'lit/decorators.js';
|
11
|
-
import { when } from 'lit/directives/when.js';
|
12
|
-
import { bindStateToController } from "../../../decorators/bind-state";
|
13
|
-
import { bindingGuard } from "../../../decorators/binding-guard";
|
14
|
-
import { bindings } from "../../../decorators/bindings";
|
15
|
-
import { errorGuard } from "../../../decorators/error-guard";
|
16
|
-
import { withTailwindStyles } from "../../../decorators/with-tailwind-styles";
|
17
|
-
import { InitializeBindingsMixin } from "../../../mixins/bindings-mixin";
|
18
|
-
import { randomID } from "../../../utils/utils";
|
19
|
-
const ArrowLeftIcon = "<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m11.5 4.8-4.3 4.5c-.3.4-.3.9 0 1.3l4.3 4.6c.3.4.9.4 1.2 0s.3-.9 0-1.3l-3.7-4 3.7-3.9c.3-.4.3-.9 0-1.3-.3-.3-.9-.3-1.2.1z\"/></svg>";
|
20
|
-
const ArrowRightIcon = "<svg viewBox=\"0 0 20 20\"><path d=\"m8.5 15.2 4.3-4.6c.3-.4.3-.9 0-1.3l-4.4-4.5c-.3-.4-.9-.4-1.2 0s-.3.9 0 1.3l3.7 4-3.7 3.9c-.3.4-.3.9 0 1.3.4.3 1 .3 1.3-.1z\"/></svg>";
|
21
|
-
import { getCurrentPagesRange } from '../../commerce/atomic-commerce-pager/commerce-pager-utils';
|
22
|
-
import { createAppLoadedListener } from '../../common/interface/store';
|
23
|
-
import { renderPageButtons, renderPagerNextButton, renderPagerPageButton, renderPagerPreviousButton, } from '../../common/pager/pager-buttons';
|
24
|
-
import { renderPagerNavigation } from '../../common/pager/pager-navigation';
|
25
|
-
/**
|
26
|
-
* The `atomic-pager` provides buttons that allow the end user to navigate through the different result pages.
|
27
|
-
*
|
28
|
-
* @part buttons - The list of the next/previous buttons and page-buttons.
|
29
|
-
* @part page-buttons - The list of page buttons.
|
30
|
-
* @part page-button - The page button.
|
31
|
-
* @part active-page-button - The active page button.
|
32
|
-
* @part previous-button - The previous button.
|
33
|
-
* @part next-button - The next button.
|
34
|
-
* @part previous-button-icon - Icon of the previous button.
|
35
|
-
* @part next-button-icon - Icon of the next button.
|
36
|
-
*
|
37
|
-
* @event atomic/scrollToTop - Emitted when the user clicks the next or previous button, or a page button.
|
38
|
-
*/
|
39
|
-
let AtomicPager = class AtomicPager extends InitializeBindingsMixin(LitElement) {
|
40
|
-
constructor() {
|
41
|
-
super(...arguments);
|
42
|
-
this.isAppLoaded = false;
|
43
|
-
/**
|
44
|
-
* Specifies how many page buttons to display in the pager.
|
45
|
-
*/
|
46
|
-
this.numberOfPages = 5;
|
47
|
-
/**
|
48
|
-
* The SVG icon to use to display the Previous button.
|
49
|
-
*
|
50
|
-
* - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.
|
51
|
-
* - Use a value that starts with `assets://`, to display an icon from the Atomic package.
|
52
|
-
* - Use a stringified SVG to display it directly.
|
53
|
-
*/
|
54
|
-
this.previousButtonIcon = ArrowLeftIcon;
|
55
|
-
/**
|
56
|
-
* The SVG icon to use to display the Next button.
|
57
|
-
*
|
58
|
-
* - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.
|
59
|
-
* - Use a value that starts with `assets://`, to display an icon from the Atomic package.
|
60
|
-
* - Use a stringified SVG to display it directly.
|
61
|
-
*/
|
62
|
-
this.nextButtonIcon = ArrowRightIcon;
|
63
|
-
this.radioGroupName = randomID('atomic-pager-');
|
64
|
-
}
|
65
|
-
initialize() {
|
66
|
-
this.validateProps();
|
67
|
-
this.searchStatus = buildSearchStatus(this.bindings.engine);
|
68
|
-
this.pager = buildPager(this.bindings.engine, {
|
69
|
-
options: { numberOfPages: this.numberOfPages },
|
70
|
-
});
|
71
|
-
createAppLoadedListener(this.bindings.store, (isAppLoaded) => {
|
72
|
-
this.isAppLoaded = isAppLoaded;
|
73
|
-
});
|
74
|
-
}
|
75
|
-
validateProps() {
|
76
|
-
new Schema({
|
77
|
-
numberOfPages: new NumberValue({ min: 0 }),
|
78
|
-
}).validate({
|
79
|
-
numberOfPages: this.numberOfPages,
|
80
|
-
});
|
81
|
-
}
|
82
|
-
render() {
|
83
|
-
const pagesRange = getCurrentPagesRange(this.pagerState.currentPage, this.numberOfPages, this.pagerState.maxPage - 1);
|
84
|
-
return html `${when(!this.searchStatusState.hasError &&
|
85
|
-
this.searchStatusState.hasResults &&
|
86
|
-
this.isAppLoaded, () => html `${renderPagerNavigation({
|
87
|
-
props: {
|
88
|
-
i18n: this.bindings.i18n,
|
89
|
-
},
|
90
|
-
})(html `
|
91
|
-
${renderPagerPreviousButton({
|
92
|
-
props: {
|
93
|
-
icon: this.previousButtonIcon,
|
94
|
-
disabled: !this.pagerState.hasPreviousPage,
|
95
|
-
i18n: this.bindings.i18n,
|
96
|
-
onClick: () => {
|
97
|
-
this.pager.previousPage();
|
98
|
-
this.focusOnFirstResultAndScrollToTop();
|
99
|
-
},
|
100
|
-
},
|
101
|
-
})}
|
102
|
-
${renderPageButtons({
|
103
|
-
props: {
|
104
|
-
i18n: this.bindings.i18n,
|
105
|
-
},
|
106
|
-
})(html `${pagesRange.map((pageNumber) => renderPagerPageButton({
|
107
|
-
props: {
|
108
|
-
isSelected: this.pager.isCurrentPage(pageNumber),
|
109
|
-
ariaLabel: this.bindings.i18n.t('page-number', { pageNumber }),
|
110
|
-
onChecked: () => {
|
111
|
-
this.pager.selectPage(pageNumber);
|
112
|
-
this.focusOnFirstResultAndScrollToTop();
|
113
|
-
},
|
114
|
-
page: pageNumber,
|
115
|
-
groupName: this.radioGroupName,
|
116
|
-
text: pageNumber.toLocaleString(this.bindings.i18n.language),
|
117
|
-
},
|
118
|
-
}))}`)}
|
119
|
-
${renderPagerNextButton({
|
120
|
-
props: {
|
121
|
-
icon: this.nextButtonIcon,
|
122
|
-
disabled: !this.pagerState.hasNextPage,
|
123
|
-
i18n: this.bindings.i18n,
|
124
|
-
onClick: () => {
|
125
|
-
this.pager.nextPage();
|
126
|
-
this.focusOnFirstResultAndScrollToTop();
|
127
|
-
},
|
128
|
-
},
|
129
|
-
})}
|
130
|
-
`)}`)}`;
|
131
|
-
}
|
132
|
-
async focusOnFirstResultAndScrollToTop() {
|
133
|
-
await this.bindings.store.state.resultList?.focusOnFirstResultAfterNextSearch();
|
134
|
-
this.dispatchEvent(new CustomEvent('atomic/scrollToTop'));
|
135
|
-
}
|
136
|
-
};
|
137
|
-
__decorate([
|
138
|
-
state()
|
139
|
-
], AtomicPager.prototype, "bindings", void 0);
|
140
|
-
__decorate([
|
141
|
-
state()
|
142
|
-
], AtomicPager.prototype, "error", void 0);
|
143
|
-
__decorate([
|
144
|
-
state()
|
145
|
-
], AtomicPager.prototype, "isAppLoaded", void 0);
|
146
|
-
__decorate([
|
147
|
-
bindStateToController('pager'),
|
148
|
-
state()
|
149
|
-
], AtomicPager.prototype, "pagerState", void 0);
|
150
|
-
__decorate([
|
151
|
-
bindStateToController('searchStatus'),
|
152
|
-
state()
|
153
|
-
], AtomicPager.prototype, "searchStatusState", void 0);
|
154
|
-
__decorate([
|
155
|
-
property({ reflect: true, attribute: 'number-of-pages', type: Number })
|
156
|
-
], AtomicPager.prototype, "numberOfPages", void 0);
|
157
|
-
__decorate([
|
158
|
-
property({ reflect: true, attribute: 'previous-button-icon', type: String })
|
159
|
-
], AtomicPager.prototype, "previousButtonIcon", void 0);
|
160
|
-
__decorate([
|
161
|
-
property({ reflect: true, attribute: 'next-button-icon', type: String })
|
162
|
-
], AtomicPager.prototype, "nextButtonIcon", void 0);
|
163
|
-
__decorate([
|
164
|
-
bindingGuard(),
|
165
|
-
errorGuard()
|
166
|
-
], AtomicPager.prototype, "render", null);
|
167
|
-
AtomicPager = __decorate([
|
168
|
-
customElement('atomic-pager'),
|
169
|
-
bindings(),
|
170
|
-
withTailwindStyles
|
171
|
-
], AtomicPager);
|
172
|
-
export { AtomicPager };
|
@@ -1 +0,0 @@
|
|
1
|
-
{"file":"suggestions-events.js","mappings":";;;AAOA;;;;;;;;;MASa,iCAAiC,GAAG,CAI/C,KAA+D,EAC/D,OAAoB,EACpB,2BAA0E,iBAAiB;IAE3F,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,KAAK,CACb,QAAQ,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gFAAgF,wBAAwB,CAAC,IAAI,CACjJ,IAAI,CACL,EAAE,CACJ,CAAC;KACH;IACD,KAAK,2CAA2C,CAC9C,gBAAgB,EAChB,OAAO,EACP,KAAK,CACN,CAAC;AACJ,EAAE;AAEF,MAAM,iBAAiB,GAAG;IACxB,mBAAmB;IACnB,2BAA2B;IAC3B,4BAA4B;CACpB,CAAC;AAEX,MAAM,mBAAmB,GAAG,CAAC,SAAkB,KAC7C,gBAAgB,IAAK,SAAwB;IAC5C,SAAwB,CAAC,cAAc,YAAY,OAAO,CAAC;AAE9D,MAAM,2CAA2C,GAAG,OAIlD,gBAAyB,EACzB,OAAoB,EACpB,KAA+D;IAE/D,MAAM,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,EAAE;QACzC,MAAM,gBAAgB,CAAC,cAAc,CAAC;KACvC;SAAM,IAAI,kBAAkB,IAAI,gBAAgB,EAAE;QACjD,MAAO,gBAAuC,CAAC,gBAAgB,EAAE,CAAC;KACnE;IACD,OAAO,CAAC,aAAa,CACnB,gBAAgB,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAC/D,CAAC;AACJ,CAAC;;;;","names":[],"sources":["src/components/common/suggestions/suggestions-events.ts"],"sourcesContent":["import type {HTMLStencilElement} from '@stencil/core/internal';\nimport type {LitElement} from 'lit';\nimport {closest} from '../../../utils/dom-utils';\nimport {buildCustomEvent} from '../../../utils/event-utils';\nimport type {AnyBindings} from '../interface/bindings';\nimport type {SearchBoxSuggestionsEvent} from './suggestions-types';\n\n/**\n * Dispatches an event which retrieves the `SearchBoxSuggestionsBindings` on a configured parent search box.\n *\n * @param event Event sent from the registered query suggestions to the parent search box\n * @param element Element on which to dispatch the event, which must be the child of a configured search box\n * @param allowedSearchBoxElements Optional array of allowed search box element selectors\n *\n * @throws Error if the element is not a child of an allowed search box element\n */\nexport const dispatchSearchBoxSuggestionsEvent = <\n SearchBoxController,\n Bindings = AnyBindings,\n>(\n event: SearchBoxSuggestionsEvent<SearchBoxController, Bindings>,\n element: HTMLElement,\n allowedSearchBoxElements: readonly (typeof searchBoxElements)[number][] = searchBoxElements\n) => {\n const interfaceElement = closest(element, searchBoxElements.join(', '));\n if (!interfaceElement) {\n throw new Error(\n `The \"${element.nodeName.toLowerCase()}\" component was not handled, as it is not a child of the following elements: ${allowedSearchBoxElements.join(\n ', '\n )}`\n );\n }\n void dispatchSearchBoxSuggestionsEventEventually(\n interfaceElement,\n element,\n event\n );\n};\n\nconst searchBoxElements = [\n 'atomic-search-box',\n 'atomic-insight-search-box',\n 'atomic-commerce-search-box',\n] as const;\n\nconst isLitElementLoosely = (candidate: unknown): candidate is LitElement =>\n 'updateComplete' in (candidate as LitElement) &&\n (candidate as LitElement).updateComplete instanceof Promise;\n\nconst dispatchSearchBoxSuggestionsEventEventually = async <\n SearchBoxController,\n Bindings = AnyBindings,\n>(\n interfaceElement: Element,\n element: HTMLElement,\n event: SearchBoxSuggestionsEvent<SearchBoxController, Bindings>\n) => {\n await customElements.whenDefined(interfaceElement.nodeName.toLowerCase());\n if (isLitElementLoosely(interfaceElement)) {\n await interfaceElement.updateComplete;\n } else if ('componentOnReady' in interfaceElement) {\n await (interfaceElement as HTMLStencilElement).componentOnReady();\n }\n element.dispatchEvent(\n buildCustomEvent('atomic/searchBoxSuggestion/register', event)\n );\n};\n"],"version":3}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["elementHasNoQuery","el","query","trim","elementHasQuery"],"sources":["src/components/common/suggestions/suggestions-utils.ts"],"sourcesContent":["import type {SearchBoxSuggestionElement} from './suggestions-types';\n\n/**\n * Checks if a search box suggestion element has no query.\n *\n * @param el - The search box suggestion element to check\n * @returns True if the element has no query or the query is whitespace-only\n */\nexport function elementHasNoQuery(el: SearchBoxSuggestionElement): boolean {\n return !el.query || el.query.trim() === '';\n}\n\n/**\n * Checks if a search box suggestion element has a query.\n *\n * @param el - The search box suggestion element to check\n * @returns True if the element has a non-empty, non-whitespace query\n */\nexport function elementHasQuery(el: SearchBoxSuggestionElement): boolean {\n return !!el.query && el.query.trim() !== '';\n}\n"],"mappings":"SAQgBA,EAAkBC,GAChC,OAAQA,EAAGC,OAASD,EAAGC,MAAMC,SAAW,EAC1C,C,SAQgBC,EAAgBH,GAC9B,QAASA,EAAGC,OAASD,EAAGC,MAAMC,SAAW,EAC3C,Q","ignoreList":[]}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
import{h as t,f as s}from"./p-dc3df5ce.js";import{B as i}from"./p-b93ccff9.js";import{isNullOrUndefined as e}from"@coveo/bueno";import{D as n}from"./p-f284897c.js";import{d as r}from"./p-01c91b69.js";import{a as o,e as a}from"./p-0a051b8d.js";const h=`<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">\n<circle cx="7" cy="7" r="6.5" stroke="currentColor"/>\n<path d="M16 16L12 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>\n</svg>\n`;const u=(s,i)=>{const e=()=>{const t="flex bg-background w-full border border-neutral rounded-md focus-within:ring-3 absolute top-0 left-0";const i=s.disabled?"focus-within:border-disabled focus-within:ring-neutral":"focus-within:border-primary focus-within:ring-ring-primary";return[t,i].join(" ")};return t("div",{part:"wrapper",class:e(),onFocusout:s.onFocusout},i)};const c=`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">\n<path d="M15 1.00012L1.00012 14.9999" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>\n<path d="M0.999878 1L14.9999 15" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>\n</svg>\n`;const l=({inputRef:s,bindings:e,onClick:n,...r})=>t("div",{part:"clear-button-wrapper",class:"ml-2 flex items-center justify-center py-2"},t(i,{style:"text-transparent",part:"clear-button",class:"text-neutral-dark flex h-8 w-8 shrink-0 items-center justify-center",onClick:()=>{n?.();s?.focus()},ariaLabel:e.i18n.t("clear"),...r},t("atomic-icon",{part:"clear-icon",icon:c,class:"h-4 w-4"})));function g(t){return{autocomplete:"off",autocapitalize:"off",autocorrect:"off",...t.activeDescendant&&{"aria-activedescendant":t.activeDescendant},"aria-autocomplete":"both","aria-haspopup":"true","aria-controls":t.id}}function f(t,s){const i=t?.parentNode;if(!i){return}if(t.value==="\n"){return}i.dataset.replicatedValue=s??t.value}function d(t){const s=t?.parentNode;if(s){delete s.dataset.replicatedValue}}function p(t){const s=t?.parentNode;if(s){s.classList.remove("expanded")}}function m(t){const s=t?.parentNode;if(s){s.classList.add("expanded")}}const w=({textAreaRef:s,loading:i,bindings:e,onInput:n,onFocus:r,onBlur:o,onChange:a,onKeyDown:h,onKeyUp:u,value:c,ariaLabel:w,onClear:b,popup:v,...y})=>t("div",{class:"flex grow overflow-hidden"},t("div",{part:"textarea-expander",class:"grid grow overflow-hidden"},t("textarea",{part:"textarea","aria-label":w,placeholder:e.i18n.t("search"),class:"placeholder-neutral-dark",rows:1,onInput:t=>{n?.(t);f(s)},onKeyDown:t=>{f(s);if(t.key==="Enter"){if(t.shiftKey){return}t.preventDefault()}h?.(t)},onKeyUp:t=>{u?.(t);if(t.key==="Enter"){t.preventDefault();return}f(s)},onBlur:t=>{o?.(t);p(s);f(s)},onChange:t=>{a?.(t);f(s)},onFocus:t=>{r?.(t);const i=t.target;f(s??i);m(s??i)},autocomplete:"off",...v&&g(v),...y,value:c})),i&&t("div",{class:"searchbox-button-wrapper ml-2 flex items-center justify-center"},t("span",{part:"loading",class:"loading mr-2 grid h-5 w-5 animate-spin place-items-center rounded-full bg-linear-to-r"})),!i&&c&&t(l,{inputRef:s,bindings:e,onClick:()=>{b();d(s)}}));function b(t,s){let i;const e=new Promise(((t,e)=>{i=setTimeout((()=>{e(new Error("Promise timed out."))}),s)}));return Promise.race([t,e]).then((()=>{clearTimeout(i)}))}class v{constructor(t){this.ownerSearchBoxProps=t;this.suggestions=[];this.leftSuggestionElements=[];this.rightSuggestionElements=[];this.leftPanel=undefined;this.rightPanel=undefined;this.activeDescendant="";this.suggestedQuery="";this.keyboardActiveDescendant="";this.queryDataAttribute="data-query";this.suggestionEvents=[];this.previousActiveDescendantElement=null;this.leftSuggestions=[];this.rightSuggestions=[];this.triggerSuggestions=r((()=>this.executeQuerySuggestion()),this.ownerSearchBoxProps.getSuggestionDelay())}get partialSuggestionBindings(){return{suggestedQuery:()=>this.suggestedQuery,clearSuggestions:()=>this.clearSuggestions(),triggerSuggestions:()=>this.triggerSuggestions(),getSuggestions:()=>this.suggestions,getSuggestionElements:()=>this.allSuggestionElements}}get activeDescendantElement(){if(!this.hasActiveDescendant){return null}return this.leftPanel?.querySelector(`#${this.activeDescendant}`)||this.rightPanel?.querySelector(`#${this.activeDescendant}`)||null}onSubmit(){this.clickOnActiveElement();this.clearSuggestions()}updateActiveDescendant(t=""){this.activeDescendant=t;s(this.ownerSearchBoxProps.getHost())}updateKeyboardActiveDescendant(t=""){this.keyboardActiveDescendant=t}clickOnActiveElement(){this.activeDescendantElement?.click();this.updateActiveDescendant()}isRightPanelInFocus(){if(e(this.panelInFocus)||e(this.rightPanel)){return false}return this.panelInFocus===this.rightPanel}initializeSuggestions(t){this.suggestions=this.suggestionEvents.map((s=>s(t)))}registerSuggestionsFromEvent(t,s){t.preventDefault();t.stopPropagation();this.suggestionEvents.push(t.detail);this.suggestions.push(t.detail(s))}registerSuggestions(t){this.suggestions.push(t)}get isDoubleList(){return Boolean(this.leftSuggestionElements.length&&this.rightSuggestionElements.length)}focusPanel(t){const s=t==="left"?this.leftPanel:this.rightPanel;if(this.panelInFocus===s){return}if(s?.firstElementChild){const t=this.previousActiveDescendantElement&&s.contains(this.previousActiveDescendantElement);const i=t?this.previousActiveDescendantElement:s.firstElementChild;this.updateDescendants(i.id)}}clearSuggestions(){this.clearSuggestionElements();this.updateActiveDescendant()}async focusNextValue(){if(!this.hasSuggestions||!this.nextOrFirstValue){return}await this.focusValue(this.nextOrFirstValue)}async focusValue(t){this.updateKeyboardActiveDescendant(t.id);this.updateActiveDescendant(t.id);this.scrollActiveDescendantIntoView();await this.updateQueryFromSuggestion()}async onSuggestionMouseOver(t,s,i){const e=s==="left"?this.leftPanel:this.rightPanel;this.updateKeyboardActiveDescendant();if(this.panelInFocus===e){this.updateActiveDescendant(i)}else{this.updateDescendants(i)}if(t.query){await this.updateSuggestedQuery(t.query)}}async onSuggestionClick(t,s){if(t.query){this.clearSuggestions();await this.updateOwnerSearchboxQuery(t.query)}t.onSelect?.(s)}get hasSuggestions(){return!!this.allSuggestionElements.length}get allSuggestionElements(){return[...this.leftSuggestionElements,...this.rightSuggestionElements]}async focusPreviousValue(){if(this.firstValue===this.activeDescendantElement){this.updateKeyboardActiveDescendant();this.updateActiveDescendant();return}if(!this.hasSuggestions||!this.previousOrLastValue){return}await this.focusValue(this.previousOrLastValue)}get hasActiveDescendant(){return this.activeDescendant!==""}async executeQuerySuggestion(){this.updateActiveDescendant();const t=await Promise.allSettled(this.suggestions.map((t=>b(t.onInput?t.onInput():Promise.resolve(),this.ownerSearchBoxProps.getSuggestionTimeout()))));const s=[];t.forEach(((t,i)=>{if(t.status==="fulfilled"){s.push(this.suggestions[i])}else{this.ownerSearchBoxProps.getLogger().warn("Some query suggestions are not being shown because the promise timed out.")}}));const i=(t,i=false)=>s.filter((s=>s.panel===t||!s.panel&&i)).sort(this.sortSuggestions);this.leftSuggestions=i("left",true);this.leftSuggestionElements=this.getAndFilterLeftSuggestionElements();this.rightSuggestions=i("right");this.rightSuggestionElements=this.getSuggestionElements(this.rightSuggestions);const e=this.allSuggestionElements.find(o)?.query||"";await this.updateSuggestedQuery(e)}get lastValue(){return this.panelInFocus?.lastElementChild}get previousOrLastValue(){if(!this.hasActiveDescendant){return this.lastValue?.firstChild}const t=this.activeDescendantElement?.parentElement;return t?.previousElementSibling?.firstChild||this.firstValue?.firstChild}sortSuggestions(t,s){return t.position-s.position}get nextOrFirstValue(){if(!this.hasActiveDescendant){return this.firstValue?.firstChild}const t=this.activeDescendantElement?.parentElement;return t?.nextElementSibling?.firstChild||this.firstValue?.firstChild}get firstValue(){return this.panelInFocus?.firstElementChild}get panelInFocus(){if(this.leftPanel?.contains(this.activeDescendantElement)){return this.leftPanel}if(this.rightPanel?.contains(this.activeDescendantElement)){return this.rightPanel}return this.leftPanel||this.rightPanel}scrollActiveDescendantIntoView(){this.activeDescendantElement?.scrollIntoView({block:"nearest"})}async updateQueryFromSuggestion(){const t=this.activeDescendantElement?.getAttribute(this.queryDataAttribute);await this.updateOwnerSearchboxQuery(t||"")}async updateOwnerSearchboxQuery(t){if(t&&this.ownerSearchBoxProps.getSearchBoxValue()!==t){this.ownerSearchBoxProps.updateQuery(t);await this.updateSuggestedQuery(t)}}async updateSuggestedQuery(t){await Promise.allSettled(this.suggestions.map((s=>b(s.onSuggestedQueryChange?s.onSuggestedQueryChange(t):Promise.resolve(),this.ownerSearchBoxProps.getSuggestionTimeout()))));this.suggestedQuery=t;this.updateSuggestionElements(t);s(this.ownerSearchBoxProps.getHost())}updateSuggestionElements(t){if(!this.isPanelInFocus(this.leftPanel,t)){this.leftSuggestionElements=this.getAndFilterLeftSuggestionElements()}if(!this.isPanelInFocus(this.rightPanel,t)){this.rightSuggestionElements=this.getSuggestionElements(this.rightSuggestions)}}forceUpdate(){this.updateSuggestionElements(this.suggestedQuery);s(this.ownerSearchBoxProps.getHost())}isPanelInFocus(t,s){if(!this.activeDescendantElement){return false}if(s){const i=n.sanitize(s);return!!t?.querySelector(`[${this.queryDataAttribute}="${CSS.escape(i)}"]`)}return this.activeDescendantElement?.closest("ul")===t}getAndFilterLeftSuggestionElements(){const t=this.getSuggestionElements(this.leftSuggestions);const s=new Set;const i=t.filter((t=>{if(e(t.query)){return true}if(s.has(t.query)){return false}else{s.add(t.query);return true}}));return i}getSuggestionElements(t){const s=t.flatMap((t=>t.renderItems()));const i=this.ownerSearchBoxProps.getNumberOfSuggestionsToDisplay()+s.filter(a).length;return s.slice(0,i)}updateDescendants(t=""){const s=this.activeDescendantElement;this.previousActiveDescendantElement=s;this.updateActiveDescendant(t)}clearSuggestionElements(){this.leftSuggestionElements=[];this.rightSuggestionElements=[]}}export{v as S,h as a,w as b,u as c};
|
2
|
-
//# sourceMappingURL=p-16f4ce98.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["SearchBoxWrapper","props","children","getClasses","baseClasses","focusClasses","disabled","join","h","part","class","onFocusout","TextAreaClearButton","inputRef","bindings","onClick","defaultButtonProps","Button","style","focus","ariaLabel","i18n","t","icon","ClearSlim","getPopupAttributes","autocomplete","autocapitalize","autocorrect","activeDescendant","id","syncTextWithReplica","elem","value","parent","parentNode","dataset","replicatedValue","resetReplicaText","collapseTextArea","classList","remove","expandTextArea","add","SearchTextArea","textAreaRef","loading","onInput","onFocus","onBlur","onChange","onKeyDown","onKeyUp","onClear","popup","defaultInputProps","placeholder","rows","e","key","shiftKey","preventDefault","target","promiseTimeout","prom","ms","timeout","Promise","_","reject","setTimeout","Error","race","then","clearTimeout","SuggestionManager","constructor","ownerSearchBoxProps","this","suggestions","leftSuggestionElements","rightSuggestionElements","leftPanel","undefined","rightPanel","suggestedQuery","keyboardActiveDescendant","queryDataAttribute","suggestionEvents","previousActiveDescendantElement","leftSuggestions","rightSuggestions","triggerSuggestions","debounce","executeQuerySuggestion","getSuggestionDelay","partialSuggestionBindings","clearSuggestions","getSuggestions","getSuggestionElements","allSuggestionElements","activeDescendantElement","hasActiveDescendant","querySelector","onSubmit","clickOnActiveElement","updateActiveDescendant","forceUpdate","getHost","updateKeyboardActiveDescendant","click","isRightPanelInFocus","isNullOrUndefined","panelInFocus","initializeSuggestions","map","event","registerSuggestionsFromEvent","stopPropagation","push","detail","registerSuggestions","isDoubleList","Boolean","length","focusPanel","side","panel","firstElementChild","panelHasActiveDescendant","contains","newValue","updateDescendants","clearSuggestionElements","focusNextValue","hasSuggestions","nextOrFirstValue","focusValue","scrollActiveDescendantIntoView","updateQueryFromSuggestion","onSuggestionMouseOver","item","thisPanel","query","updateSuggestedQuery","onSuggestionClick","updateOwnerSearchboxQuery","onSelect","focusPreviousValue","firstValue","previousOrLastValue","settled","allSettled","suggestion","resolve","getSuggestionTimeout","fulfilledSuggestions","forEach","j","status","getLogger","warn","splitSuggestions","isDefault","filter","sort","sortSuggestions","getAndFilterLeftSuggestionElements","defaultSuggestedQuery","find","elementHasQuery","lastValue","lastElementChild","firstChild","parentOfActiveDescendant","parentElement","previousElementSibling","a","b","position","nextElementSibling","scrollIntoView","block","getAttribute","getSearchBoxValue","updateQuery","onSuggestedQueryChange","updateSuggestionElements","isPanelInFocus","escaped","DOMPurify","sanitize","CSS","escape","closest","suggestionElements","filterOnDuplicate","Set","out","suggestionElement","has","elements","flatMap","renderItems","max","getNumberOfSuggestionsToDisplay","elementHasNoQuery","slice","newPrevDescendantElement"],"sources":["src/components/common/search-box/stencil-search-box-wrapper.tsx","src/components/common/search-box/stencil-text-area-clear-button.tsx","src/components/common/search-box/stencil-search-text-area.tsx","src/utils/promise-utils.ts","src/components/common/suggestions/stencil-suggestion-manager.ts"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\n\ninterface Props {\n disabled: boolean;\n onFocusout?: (event: FocusEvent) => void;\n}\n\nexport const SearchBoxWrapper: FunctionalComponent<Props> = (\n props,\n children\n) => {\n const getClasses = () => {\n const baseClasses =\n 'flex bg-background w-full border border-neutral rounded-md focus-within:ring-3 absolute top-0 left-0';\n const focusClasses = props.disabled\n ? 'focus-within:border-disabled focus-within:ring-neutral'\n : 'focus-within:border-primary focus-within:ring-ring-primary';\n\n return [baseClasses, focusClasses].join(' ');\n };\n\n return (\n <div part=\"wrapper\" class={getClasses()} onFocusout={props.onFocusout}>\n {children}\n </div>\n );\n};\n","import {FunctionalComponent, h} from '@stencil/core';\nimport ClearSlim from '../../../images/clear-slim.svg';\nimport {AnyBindings} from '../interface/bindings';\nimport {Button, StencilButtonProps} from '../stencil-button';\n\ninterface Props extends Partial<StencilButtonProps> {\n bindings: AnyBindings;\n inputRef: HTMLInputElement | HTMLTextAreaElement | null;\n}\n\nexport const TextAreaClearButton: FunctionalComponent<Props> = ({\n inputRef,\n bindings,\n onClick,\n ...defaultButtonProps\n}) => (\n <div\n part=\"clear-button-wrapper\"\n class=\"ml-2 flex items-center justify-center py-2\"\n >\n <Button\n style=\"text-transparent\"\n part=\"clear-button\"\n class=\"text-neutral-dark flex h-8 w-8 shrink-0 items-center justify-center\"\n onClick={() => {\n onClick?.();\n inputRef?.focus();\n }}\n ariaLabel={bindings.i18n.t('clear')}\n {...defaultButtonProps}\n >\n <atomic-icon\n part=\"clear-icon\"\n icon={ClearSlim}\n class=\"h-4 w-4\"\n ></atomic-icon>\n </Button>\n </div>\n);\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport {AnyBindings} from '../interface/bindings';\nimport {TextAreaClearButton} from './stencil-text-area-clear-button';\n\ninterface Props extends JSXBase.TextareaHTMLAttributes<HTMLTextAreaElement> {\n textAreaRef: HTMLTextAreaElement;\n loading: boolean;\n bindings: AnyBindings;\n value: string;\n ariaLabel: string;\n onClear(): void;\n popup?: {\n id: string;\n activeDescendant: string;\n expanded: boolean;\n hasSuggestions: boolean;\n };\n}\n\nfunction getPopupAttributes(props: Required<Props>['popup']) {\n return {\n autocomplete: 'off',\n autocapitalize: 'off',\n autocorrect: 'off',\n ...(props.activeDescendant && {\n 'aria-activedescendant': props.activeDescendant,\n }),\n 'aria-autocomplete': 'both',\n 'aria-haspopup': 'true',\n 'aria-controls': props.id,\n };\n}\n\nfunction syncTextWithReplica(elem: HTMLTextAreaElement, value?: string) {\n const parent = elem?.parentNode as HTMLElement;\n if (!parent) {\n return;\n }\n if (elem.value === '\\n') {\n return;\n }\n parent.dataset.replicatedValue = value ?? elem.value;\n}\n\nfunction resetReplicaText(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n delete parent.dataset.replicatedValue;\n }\n}\n\nfunction collapseTextArea(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n parent.classList.remove('expanded');\n }\n}\n\nfunction expandTextArea(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n parent.classList.add('expanded');\n }\n}\n\nexport const SearchTextArea: FunctionalComponent<Props> = ({\n textAreaRef,\n loading,\n bindings,\n onInput,\n onFocus,\n onBlur,\n onChange,\n onKeyDown,\n onKeyUp,\n value,\n ariaLabel,\n onClear,\n popup,\n ...defaultInputProps\n}) => (\n <div class=\"flex grow overflow-hidden\">\n <div part=\"textarea-expander\" class=\"grid grow overflow-hidden\">\n <textarea\n part=\"textarea\"\n aria-label={ariaLabel}\n placeholder={bindings.i18n.t('search')}\n class=\"placeholder-neutral-dark\"\n rows={1}\n onInput={(e) => {\n onInput?.(e);\n syncTextWithReplica(textAreaRef);\n }}\n onKeyDown={(e) => {\n syncTextWithReplica(textAreaRef);\n if (e.key === 'Enter') {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n }\n onKeyDown?.(e);\n }}\n onKeyUp={(e) => {\n onKeyUp?.(e);\n if (e.key === 'Enter') {\n e.preventDefault();\n return;\n }\n syncTextWithReplica(textAreaRef);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n collapseTextArea(textAreaRef);\n syncTextWithReplica(textAreaRef);\n }}\n onChange={(e) => {\n onChange?.(e);\n syncTextWithReplica(textAreaRef);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n const target = e.target as HTMLTextAreaElement;\n syncTextWithReplica(textAreaRef ?? target);\n expandTextArea(textAreaRef ?? target);\n }}\n autocomplete=\"off\"\n {...(popup && getPopupAttributes(popup))}\n {...defaultInputProps}\n value={value}\n />\n </div>\n\n {loading && (\n <div class=\"searchbox-button-wrapper ml-2 flex items-center justify-center\">\n <span\n part=\"loading\"\n class=\"loading mr-2 grid h-5 w-5 animate-spin place-items-center rounded-full bg-linear-to-r\"\n ></span>\n </div>\n )}\n {!loading && value && (\n <TextAreaClearButton\n inputRef={textAreaRef}\n bindings={bindings}\n onClick={() => {\n onClear();\n resetReplicaText(textAreaRef);\n }}\n />\n )}\n </div>\n);\n","export function promiseTimeout<T>(prom: T | Promise<T>, ms: number) {\n let id: NodeJS.Timeout;\n const timeout = new Promise((_, reject) => {\n id = setTimeout(() => {\n reject(new Error('Promise timed out.'));\n }, ms);\n });\n return Promise.race([prom, timeout]).then(() => {\n clearTimeout(id);\n });\n}\n","import {isNullOrUndefined} from '@coveo/bueno';\nimport {forceUpdate} from '@stencil/core';\nimport DOMPurify from 'dompurify';\nimport {debounce} from '../../../utils/debounce-utils';\nimport {promiseTimeout} from '../../../utils/promise-utils';\nimport type {\n SearchBoxSuggestionElement,\n SearchBoxSuggestionsBindings,\n SearchBoxSuggestionsEvent,\n} from './suggestions-types';\nimport {elementHasNoQuery, elementHasQuery} from './suggestions-utils';\n\n/**\n * List of suggestions that will be displayed along other lists (e.g recent queries) when the search box's input is selected.\n */\nexport interface SearchBoxSuggestions {\n /**\n * The search box will sort the position of suggestions using this value, the lowest value being first.\n * By default, the DOM position will be used.\n */\n position: number;\n /**\n * Whether the suggestions should be listed in the right or left panel. By default, the suggestions are listed in the right panel.\n */\n panel?: 'left' | 'right';\n /**\n * Method that returns the list of elements which will be rendered in the list of suggestions.\n */\n renderItems(): SearchBoxSuggestionElement[];\n /**\n * Hook called when the user changes the search box's input value. This can lead to all the query suggestions being updated.\n */\n onInput?(): Promise<unknown>;\n /**\n * Hook called when the current suggested query changes as the user navigates the list of suggestions.\n * This is used for instant results, which are rendered based on the current suggested query.\n * @param q The new current suggested query.\n */\n onSuggestedQueryChange?(q: string): Promise<unknown>;\n}\n\ninterface SearchBoxProps {\n getSearchBoxValue: () => string;\n updateQuery: (suggestedQuery: string) => void;\n getSuggestionTimeout: () => number;\n getNumberOfSuggestionsToDisplay: () => number;\n getSuggestionDelay: () => number;\n getLogger: () => Pick<typeof console, 'warn'>;\n getHost: () => HTMLElement;\n}\n\nexport class SuggestionManager<SearchBoxController> {\n public suggestions: SearchBoxSuggestions[] = [];\n public leftSuggestionElements: SearchBoxSuggestionElement[] = [];\n public rightSuggestionElements: SearchBoxSuggestionElement[] = [];\n public leftPanel: HTMLElement | undefined = undefined;\n public rightPanel: HTMLElement | undefined = undefined;\n public triggerSuggestions: () => Promise<void>;\n public activeDescendant = '';\n public suggestedQuery = '';\n public keyboardActiveDescendant = '';\n\n private queryDataAttribute = 'data-query';\n private suggestionEvents: SearchBoxSuggestionsEvent<SearchBoxController>[] =\n [];\n\n private previousActiveDescendantElement: HTMLElement | null = null;\n private leftSuggestions: SearchBoxSuggestions[] = [];\n private rightSuggestions: SearchBoxSuggestions[] = [];\n\n constructor(private ownerSearchBoxProps: SearchBoxProps) {\n this.triggerSuggestions = debounce(\n () => this.executeQuerySuggestion(),\n this.ownerSearchBoxProps.getSuggestionDelay()\n );\n }\n\n public get partialSuggestionBindings(): Pick<\n SearchBoxSuggestionsBindings<SearchBoxController>,\n | 'suggestedQuery'\n | 'clearSuggestions'\n | 'triggerSuggestions'\n | 'getSuggestions'\n | 'getSuggestionElements'\n > {\n return {\n suggestedQuery: () => this.suggestedQuery,\n clearSuggestions: () => this.clearSuggestions(),\n triggerSuggestions: () => this.triggerSuggestions(),\n getSuggestions: () => this.suggestions,\n getSuggestionElements: () => this.allSuggestionElements,\n };\n }\n\n public get activeDescendantElement(): HTMLElement | null {\n if (!this.hasActiveDescendant) {\n return null;\n }\n\n return (\n this.leftPanel?.querySelector(`#${this.activeDescendant}`) ||\n this.rightPanel?.querySelector(`#${this.activeDescendant}`) ||\n null\n );\n }\n\n public onSubmit() {\n this.clickOnActiveElement();\n this.clearSuggestions();\n }\n\n public updateActiveDescendant(id = '') {\n this.activeDescendant = id;\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n public updateKeyboardActiveDescendant(id = '') {\n this.keyboardActiveDescendant = id;\n }\n\n public clickOnActiveElement() {\n this.activeDescendantElement?.click();\n this.updateActiveDescendant();\n }\n\n public isRightPanelInFocus() {\n if (\n isNullOrUndefined(this.panelInFocus) ||\n isNullOrUndefined(this.rightPanel)\n ) {\n return false;\n }\n\n return this.panelInFocus === this.rightPanel;\n }\n\n public initializeSuggestions(\n bindings: SearchBoxSuggestionsBindings<SearchBoxController>\n ) {\n this.suggestions = this.suggestionEvents.map((event) => event(bindings));\n }\n\n public registerSuggestionsFromEvent(\n event: CustomEvent<SearchBoxSuggestionsEvent<SearchBoxController>>,\n bindings: SearchBoxSuggestionsBindings<SearchBoxController>\n ) {\n event.preventDefault();\n event.stopPropagation();\n this.suggestionEvents.push(event.detail);\n this.suggestions.push(event.detail(bindings));\n }\n\n public registerSuggestions(suggestions: SearchBoxSuggestions) {\n this.suggestions.push(suggestions);\n }\n\n public get isDoubleList() {\n return Boolean(\n this.leftSuggestionElements.length && this.rightSuggestionElements.length\n );\n }\n\n public focusPanel(side: 'left' | 'right') {\n const panel = side === 'left' ? this.leftPanel : this.rightPanel;\n\n if (this.panelInFocus === panel) {\n return;\n }\n if (panel?.firstElementChild) {\n const panelHasActiveDescendant =\n this.previousActiveDescendantElement &&\n panel.contains(this.previousActiveDescendantElement);\n const newValue = panelHasActiveDescendant\n ? this.previousActiveDescendantElement!\n : (panel.firstElementChild as HTMLElement);\n this.updateDescendants(newValue.id);\n }\n }\n\n public clearSuggestions() {\n this.clearSuggestionElements();\n this.updateActiveDescendant();\n }\n\n public async focusNextValue() {\n if (!this.hasSuggestions || !this.nextOrFirstValue) {\n return;\n }\n\n await this.focusValue(this.nextOrFirstValue as HTMLElement);\n }\n\n public async focusValue(value: HTMLElement) {\n this.updateKeyboardActiveDescendant(value.id);\n this.updateActiveDescendant(value.id);\n this.scrollActiveDescendantIntoView();\n await this.updateQueryFromSuggestion();\n }\n\n public async onSuggestionMouseOver(\n item: SearchBoxSuggestionElement,\n side: 'left' | 'right',\n id: string\n ) {\n const thisPanel = side === 'left' ? this.leftPanel : this.rightPanel;\n // When hovering, always reset the keyboard active descendant\n this.updateKeyboardActiveDescendant();\n if (this.panelInFocus === thisPanel) {\n this.updateActiveDescendant(id);\n } else {\n this.updateDescendants(id);\n }\n if (item.query) {\n await this.updateSuggestedQuery(item.query);\n }\n }\n\n public async onSuggestionClick(item: SearchBoxSuggestionElement, e: Event) {\n if (item.query) {\n this.clearSuggestions();\n await this.updateOwnerSearchboxQuery(item.query);\n }\n item.onSelect?.(e);\n }\n\n public get hasSuggestions() {\n return !!this.allSuggestionElements.length;\n }\n\n public get allSuggestionElements() {\n return [...this.leftSuggestionElements, ...this.rightSuggestionElements];\n }\n\n public async focusPreviousValue() {\n if (this.firstValue === this.activeDescendantElement) {\n this.updateKeyboardActiveDescendant();\n this.updateActiveDescendant();\n return;\n }\n\n if (!this.hasSuggestions || !this.previousOrLastValue) {\n return;\n }\n\n await this.focusValue(this.previousOrLastValue as HTMLElement);\n }\n\n public get hasActiveDescendant() {\n return this.activeDescendant !== '';\n }\n\n private async executeQuerySuggestion() {\n this.updateActiveDescendant();\n const settled = await Promise.allSettled(\n this.suggestions.map((suggestion) =>\n promiseTimeout(\n suggestion.onInput ? suggestion.onInput() : Promise.resolve(),\n this.ownerSearchBoxProps.getSuggestionTimeout()\n )\n )\n );\n\n const fulfilledSuggestions: SearchBoxSuggestions[] = [];\n\n settled.forEach((prom, j) => {\n if (prom.status === 'fulfilled') {\n fulfilledSuggestions.push(this.suggestions[j]);\n } else {\n this.ownerSearchBoxProps\n .getLogger()\n .warn(\n 'Some query suggestions are not being shown because the promise timed out.'\n );\n }\n });\n\n const splitSuggestions = (side: 'left' | 'right', isDefault = false) =>\n fulfilledSuggestions\n .filter(\n (suggestion) =>\n suggestion.panel === side || (!suggestion.panel && isDefault)\n )\n .sort(this.sortSuggestions);\n\n this.leftSuggestions = splitSuggestions('left', true);\n this.leftSuggestionElements = this.getAndFilterLeftSuggestionElements();\n\n this.rightSuggestions = splitSuggestions('right');\n this.rightSuggestionElements = this.getSuggestionElements(\n this.rightSuggestions\n );\n\n const defaultSuggestedQuery =\n this.allSuggestionElements.find(elementHasQuery)?.query || '';\n\n await this.updateSuggestedQuery(defaultSuggestedQuery);\n }\n\n private get lastValue() {\n return this.panelInFocus?.lastElementChild;\n }\n\n private get previousOrLastValue() {\n if (!this.hasActiveDescendant) {\n return this.lastValue?.firstChild;\n }\n\n const parentOfActiveDescendant =\n this.activeDescendantElement?.parentElement;\n return (\n parentOfActiveDescendant?.previousElementSibling?.firstChild ||\n this.firstValue?.firstChild\n );\n }\n\n private sortSuggestions(a: SearchBoxSuggestions, b: SearchBoxSuggestions) {\n return a.position - b.position;\n }\n\n private get nextOrFirstValue() {\n if (!this.hasActiveDescendant) {\n return this.firstValue?.firstChild;\n }\n\n const parentOfActiveDescendant =\n this.activeDescendantElement?.parentElement;\n return (\n parentOfActiveDescendant?.nextElementSibling?.firstChild ||\n this.firstValue?.firstChild\n );\n }\n\n private get firstValue() {\n return this.panelInFocus?.firstElementChild;\n }\n\n private get panelInFocus() {\n if (this.leftPanel?.contains(this.activeDescendantElement)) {\n return this.leftPanel;\n }\n if (this.rightPanel?.contains(this.activeDescendantElement)) {\n return this.rightPanel;\n }\n return this.leftPanel || this.rightPanel;\n }\n\n private scrollActiveDescendantIntoView() {\n this.activeDescendantElement?.scrollIntoView({\n block: 'nearest',\n });\n }\n\n private async updateQueryFromSuggestion() {\n const suggestedQuery = this.activeDescendantElement?.getAttribute(\n this.queryDataAttribute\n );\n await this.updateOwnerSearchboxQuery(suggestedQuery || '');\n }\n\n private async updateOwnerSearchboxQuery(query: string) {\n if (query && this.ownerSearchBoxProps.getSearchBoxValue() !== query) {\n this.ownerSearchBoxProps.updateQuery(query);\n await this.updateSuggestedQuery(query);\n }\n }\n\n private async updateSuggestedQuery(suggestedQuery: string) {\n await Promise.allSettled(\n this.suggestions.map((suggestion) =>\n promiseTimeout(\n suggestion.onSuggestedQueryChange\n ? suggestion.onSuggestedQueryChange(suggestedQuery)\n : Promise.resolve(),\n this.ownerSearchBoxProps.getSuggestionTimeout()\n )\n )\n );\n this.suggestedQuery = suggestedQuery;\n this.updateSuggestionElements(suggestedQuery);\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n private updateSuggestionElements(query: string) {\n if (!this.isPanelInFocus(this.leftPanel, query)) {\n this.leftSuggestionElements = this.getAndFilterLeftSuggestionElements();\n }\n\n if (!this.isPanelInFocus(this.rightPanel, query)) {\n this.rightSuggestionElements = this.getSuggestionElements(\n this.rightSuggestions\n );\n }\n }\n\n public forceUpdate() {\n this.updateSuggestionElements(this.suggestedQuery);\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n private isPanelInFocus(\n panel: HTMLElement | undefined,\n query: string\n ): boolean {\n if (!this.activeDescendantElement) {\n return false;\n }\n\n if (query) {\n const escaped = DOMPurify.sanitize(query);\n return !!panel?.querySelector(\n `[${this.queryDataAttribute}=\"${CSS.escape(escaped)}\"]`\n );\n }\n\n return this.activeDescendantElement?.closest('ul') === panel;\n }\n\n private getAndFilterLeftSuggestionElements() {\n const suggestionElements = this.getSuggestionElements(this.leftSuggestions);\n const filterOnDuplicate = new Set();\n\n const out = suggestionElements.filter((suggestionElement) => {\n if (isNullOrUndefined(suggestionElement.query)) {\n return true;\n }\n if (filterOnDuplicate.has(suggestionElement.query)) {\n return false;\n } else {\n filterOnDuplicate.add(suggestionElement.query);\n return true;\n }\n });\n\n return out;\n }\n\n private getSuggestionElements(suggestions: SearchBoxSuggestions[]) {\n const elements = suggestions.flatMap((suggestion) =>\n suggestion.renderItems()\n );\n\n const max =\n this.ownerSearchBoxProps.getNumberOfSuggestionsToDisplay() +\n elements.filter(elementHasNoQuery).length;\n\n return elements.slice(0, max);\n }\n\n private updateDescendants(activeDescendant = '') {\n const newPrevDescendantElement = this.activeDescendantElement;\n this.previousActiveDescendantElement = newPrevDescendantElement;\n this.updateActiveDescendant(activeDescendant);\n }\n\n private clearSuggestionElements() {\n this.leftSuggestionElements = [];\n this.rightSuggestionElements = [];\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["atomicInsightSearchBoxCss","AtomicInsightSearchBoxStyle0","AtomicInsightSearchBox","this","isExpanded","disableSearch","numberOfSuggestions","initialize","id","randomID","searchBoxOptions","highlightOptions","notMatchDelimiters","open","close","correctionDelimiters","fetchQuerySuggestions","registerQuerySuggest","loadInsightSearchActions","bindings","engine","searchBox","buildInsightSearchBox","options","dispatch","count","suggestionManager","SuggestionManager","getNumberOfSuggestionsToDisplay","updateQuery","query","updateText","getSearchBoxValue","searchBoxState","value","getSuggestionTimeout","getSuggestionDelay","getHost","host","getLogger","logger","registerSuggestions","position","renderItems","state","suggestions","map","suggestion","renderSuggestionItem","onInput","panel","onSubmit","activeDescendantElement","clickOnActiveElement","submit","clearSuggestions","onKeyDown","e","key","preventDefault","focusNextValue","announceNewActiveSuggestionToScreenReader","focusPreviousValue","triggerTextAreaChange","textAreaRef","dispatchEvent","window","Event","renderSuggestion","item","index","lastIndex","isSelected","activeDescendant","suggestedQuery","hideIfLast","h","i18n","side","isDoubleList","onClick","onSuggestionClick","onMouseOver","onSuggestionMouseOver","hasQuery","partialItem","getPartialSearchBoxSuggestionElement","content","QuerySuggestionContainer","QuerySuggestionIcon","icon","SearchSlimIcon","hasSuggestion","length","QuerySuggestionText","onSelect","selectSuggestion","rawValue","renderPanel","elements","setRef","getRef","part","ref","class","onMouseDown","target","renderSuggestions","hasSuggestions","updateActiveDescendant","role","t","allSuggestionElements","el","leftPanel","getSearchInputLabel","isMacOS","hasKeyboard","onFocus","triggerSuggestions","announceNewSuggestionsToScreenReader","ariaLabel","suggestionsAriaMessage","numberOfSuggestionsToAnnounce","filter","elementHasQuery","searchBoxAriaMessage","render","SearchBoxWrapper","disabled","onFocusout","event","isFocusingOut","SearchTextArea","loading","isLoading","placeholder","onClear","clear","__decorate","InitializeBindings","BindStateToController","AriaLiveRegion"],"sources":["src/components/insight/atomic-insight-search-box/atomic-insight-search-box.pcss?tag=atomic-insight-search-box&encapsulation=shadow","src/components/insight/atomic-insight-search-box/atomic-insight-search-box.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n@import '../../common/search-box/search-box.pcss';\n\n[part='wrapper'] {\n @apply z-10;\n}\n\n:host {\n position: relative;\n}\n\n[part='input'] {\n padding-top: 0.675rem;\n padding-bottom: 0.675rem;\n}\n\n[part='submit-icon'] {\n @apply text-on-background;\n}\n\n[part='submit-button'] {\n @apply flex w-10 items-center justify-center;\n}\n\n.loading::after {\n content: '';\n @apply bg-background absolute h-5/6 w-5/6 rounded-full;\n}\n\n[part='clear-button-wrapper'] {\n @apply mr-2 py-0;\n}\n\n[part='clear-icon'] {\n @apply h-3 w-3;\n}\n\n[part='textarea-expander'] {\n &::after {\n @apply p-2 px-4;\n }\n}\n\n[part='textarea-expander'] {\n [part='textarea'] {\n @apply p-2 px-4;\n }\n}\n","import {loadInsightSearchActions} from '@coveo/headless/insight';\nimport {\n buildSearchBox as buildInsightSearchBox,\n SearchBox as InsightSearchBox,\n SearchBoxState as InsightSearchBoxState,\n Suggestion as InsightSuggestion,\n} from '@coveo/headless/insight';\nimport {Component, Element, h, Prop, State} from '@stencil/core';\nimport SearchSlimIcon from '../../../images/search-slim.svg';\nimport {hasKeyboard, isMacOS} from '../../../utils/device-utils';\nimport {\n BindStateToController,\n InitializeBindings,\n} from '../../../utils/initialization-utils';\nimport {AriaLiveRegion} from '../../../utils/stencil-accessibility-utils';\nimport {isFocusingOut, randomID} from '../../../utils/utils';\nimport {SearchBoxWrapper} from '../../common/search-box/stencil-search-box-wrapper';\nimport {SearchTextArea} from '../../common/search-box/stencil-search-text-area';\nimport {\n getPartialSearchBoxSuggestionElement,\n QuerySuggestionContainer,\n QuerySuggestionIcon,\n QuerySuggestionText,\n} from '../../common/suggestions/stencil-query-suggestions';\nimport {SuggestionManager} from '../../common/suggestions/stencil-suggestion-manager';\nimport {\n elementHasQuery,\n} from '../../common/suggestions/suggestions-utils';\nimport {\n SearchBoxSuggestionElement,\n} from '../../common/suggestions/suggestions-types';\nimport {InsightBindings} from '../atomic-insight-interface/atomic-insight-interface';\n\n/**\n * @internal\n */\n@Component({\n tag: 'atomic-insight-search-box',\n styleUrl: 'atomic-insight-search-box.pcss',\n shadow: true,\n})\nexport class AtomicInsightSearchBox {\n @InitializeBindings() public bindings!: InsightBindings;\n\n private searchBox!: InsightSearchBox;\n private id!: string;\n private textAreaRef!: HTMLTextAreaElement;\n private suggestionManager!: SuggestionManager<InsightSearchBox>;\n\n @Element() private host!: HTMLElement;\n\n @BindStateToController('searchBox')\n @State()\n private searchBoxState!: InsightSearchBoxState;\n @State() public error!: Error;\n @State() private isExpanded = false;\n\n /**\n * Whether to prevent the user from triggering a search from the component.\n * Perfect for use cases where you need to disable the search conditionally, like when the input is empty.\n */\n @Prop({reflect: true}) public disableSearch = false;\n /**\n * The number of query suggestions to display when interacting with the search box.\n */\n @Prop({reflect: true}) public numberOfSuggestions = 5;\n\n @AriaLiveRegion('search-box')\n protected searchBoxAriaMessage!: string;\n\n @AriaLiveRegion('search-suggestions', true)\n protected suggestionsAriaMessage!: string;\n\n public initialize() {\n this.id = randomID('atomic-search-box-');\n\n const searchBoxOptions = {\n id: this.id,\n numberOfSuggestions: 0,\n highlightOptions: {\n notMatchDelimiters: {\n open: '<span class=\"font-bold\">',\n close: '</span>',\n },\n correctionDelimiters: {\n open: '<span class=\"font-normal\">',\n close: '</span>',\n },\n },\n };\n\n const {fetchQuerySuggestions, registerQuerySuggest} =\n loadInsightSearchActions(this.bindings.engine);\n\n this.searchBox = buildInsightSearchBox(this.bindings.engine, {\n options: searchBoxOptions,\n });\n\n this.bindings.engine.dispatch(\n registerQuerySuggest({id: this.id, count: this.numberOfSuggestions})\n );\n\n this.suggestionManager = new SuggestionManager({\n getNumberOfSuggestionsToDisplay: () => this.numberOfSuggestions,\n updateQuery: (query) => this.searchBox.updateText(query),\n getSearchBoxValue: () => this.searchBoxState.value,\n getSuggestionTimeout: () => 500,\n getSuggestionDelay: () => 0,\n getHost: () => this.host,\n getLogger: () => this.bindings.engine.logger,\n });\n\n this.suggestionManager.registerSuggestions({\n position: 0,\n renderItems: () =>\n this.searchBox.state.suggestions.map((suggestion) =>\n this.renderSuggestionItem(suggestion)\n ),\n onInput: () => this.bindings.engine.dispatch(fetchQuerySuggestions({id: this.id})),\n panel: 'left',\n });\n }\n\n private onSubmit() {\n if (this.suggestionManager.activeDescendantElement) {\n this.suggestionManager.clickOnActiveElement();\n return;\n }\n\n this.searchBox.submit();\n this.suggestionManager.clearSuggestions();\n }\n\n private async onKeyDown(e: KeyboardEvent) {\n if (this.disableSearch) {\n return;\n }\n\n switch (e.key) {\n case 'Enter':\n this.onSubmit();\n break;\n case 'Escape':\n this.suggestionManager.clearSuggestions();\n break;\n case 'ArrowDown':\n e.preventDefault();\n await this.suggestionManager.focusNextValue();\n this.announceNewActiveSuggestionToScreenReader();\n break;\n case 'ArrowUp':\n e.preventDefault();\n await this.suggestionManager.focusPreviousValue();\n this.announceNewActiveSuggestionToScreenReader();\n break;\n case 'Tab':\n this.suggestionManager.clearSuggestions();\n break;\n }\n }\n\n private triggerTextAreaChange(value: string) {\n this.textAreaRef.value = value;\n this.textAreaRef.dispatchEvent(new window.Event('change'));\n }\n\n private renderSuggestion(\n item: SearchBoxSuggestionElement,\n index: number,\n lastIndex: number\n ) {\n const id = `${this.id}-suggestion-${item.key}`;\n\n const isSelected =\n id === this.suggestionManager.activeDescendant ||\n this.suggestionManager.suggestedQuery === item.query;\n\n if (index === lastIndex && item.hideIfLast) {\n return null;\n }\n\n return (\n <atomic-suggestion-renderer\n i18n={this.bindings.i18n}\n id={id}\n suggestion={item}\n isSelected={isSelected}\n side={'left'}\n index={index}\n lastIndex={lastIndex}\n isDoubleList={false}\n onClick={(e: Event) => {\n this.suggestionManager.onSuggestionClick(item, e);\n }}\n onMouseOver={() => {\n this.suggestionManager.onSuggestionMouseOver(item, 'left', id);\n }}\n ></atomic-suggestion-renderer>\n );\n }\n\n private renderSuggestionItem(\n suggestion: InsightSuggestion\n ): SearchBoxSuggestionElement {\n const hasQuery = this.searchBox.state.value !== '';\n const partialItem = getPartialSearchBoxSuggestionElement(\n suggestion,\n this.bindings.i18n\n );\n\n return {\n ...partialItem,\n content: (\n <QuerySuggestionContainer>\n <QuerySuggestionIcon\n icon={SearchSlimIcon}\n hasSuggestion={this.searchBoxState.suggestions.length > 1}\n />\n\n <QuerySuggestionText suggestion={suggestion} hasQuery={hasQuery} />\n </QuerySuggestionContainer>\n ),\n onSelect: () => {\n this.searchBox.selectSuggestion(suggestion.rawValue);\n },\n };\n }\n\n private renderPanel(\n elements: SearchBoxSuggestionElement[],\n setRef: (el: HTMLElement | undefined) => void,\n getRef: () => HTMLElement | undefined\n ) {\n if (!elements.length) {\n return null;\n }\n\n return (\n <div\n part={'suggestions'}\n ref={setRef}\n class=\"flex grow basis-1/2 flex-col\"\n onMouseDown={(e) => {\n if (e.target === getRef()) {\n e.preventDefault();\n }\n }}\n >\n {elements.map((suggestion, index) =>\n this.renderSuggestion(suggestion, index, elements.length - 1)\n )}\n </div>\n );\n }\n\n private renderSuggestions() {\n if (!this.suggestionManager.hasSuggestions) {\n this.suggestionManager.updateActiveDescendant();\n return null;\n }\n\n return (\n <div\n id={`${this.id}-popup`}\n part=\"suggestions-wrapper\"\n class={`bg-background border-neutral absolute top-full left-0 z-10 flex w-full rounded-md border ${\n this.suggestionManager.hasSuggestions && this.isExpanded\n ? ''\n : 'hidden'\n }`}\n role=\"application\"\n aria-label={this.bindings.i18n.t('search-suggestions-single-list')}\n {...(this.suggestionManager.activeDescendant && {\n 'aria-activedescendant': this.suggestionManager.activeDescendant,\n })}\n >\n {this.renderPanel(\n this.suggestionManager.allSuggestionElements,\n (el) => (this.suggestionManager.leftPanel = el),\n () => this.suggestionManager.leftPanel\n )}\n </div>\n );\n }\n\n private getSearchInputLabel() {\n if (isMacOS()) {\n return this.bindings.i18n.t('search-box-with-suggestions-macos');\n }\n if (!hasKeyboard()) {\n return this.bindings.i18n.t('search-box-with-suggestions-keyboardless');\n }\n return this.bindings.i18n.t('search-box-with-suggestions');\n }\n\n private async onFocus() {\n if (this.isExpanded) {\n return;\n }\n this.isExpanded = true;\n await this.suggestionManager.triggerSuggestions();\n this.announceNewSuggestionsToScreenReader();\n }\n\n private async onInput(value: string) {\n this.searchBox.updateText(value);\n this.isExpanded = true;\n await this.suggestionManager.triggerSuggestions();\n this.announceNewSuggestionsToScreenReader();\n }\n\n private announceNewActiveSuggestionToScreenReader() {\n const ariaLabel = this.suggestionManager.activeDescendantElement?.ariaLabel;\n if (isMacOS() && ariaLabel) {\n this.suggestionsAriaMessage = ariaLabel;\n }\n }\n\n private announceNewSuggestionsToScreenReader() {\n const numberOfSuggestionsToAnnounce =\n this.suggestionManager.allSuggestionElements.filter(\n elementHasQuery\n ).length;\n this.searchBoxAriaMessage = numberOfSuggestionsToAnnounce\n ? this.bindings.i18n.t(\n this.searchBoxState.value\n ? 'query-suggestions-available'\n : 'query-suggestions-available-no-query',\n {\n count: numberOfSuggestionsToAnnounce,\n query: this.searchBoxState.value,\n }\n )\n : this.bindings.i18n.t('query-suggestions-unavailable');\n }\n\n public render() {\n return (\n <SearchBoxWrapper\n disabled={this.disableSearch}\n onFocusout={(event) => {\n if (!isFocusingOut(event)) {\n return;\n }\n this.suggestionManager.clearSuggestions();\n this.isExpanded = false;\n }}\n >\n <atomic-icon\n part=\"submit-icon\"\n icon={SearchSlimIcon}\n class=\"my-auto mr-0 ml-4 h-4 w-4\"\n />\n <SearchTextArea\n textAreaRef={this.textAreaRef}\n loading={this.searchBoxState.isLoading}\n ref={(el) => el && (this.textAreaRef = el)}\n bindings={this.bindings}\n value={this.searchBoxState.value}\n ariaLabel={this.getSearchInputLabel()}\n placeholder={this.bindings.i18n.t('search-ellipsis')}\n onFocus={() => this.onFocus()}\n onKeyDown={(e) => this.onKeyDown(e)}\n onClear={() => {\n this.searchBox.clear();\n this.triggerTextAreaChange('');\n }}\n onInput={(e) => this.onInput((e.target as HTMLInputElement).value)}\n />\n {this.renderSuggestions()}\n </SearchBoxWrapper>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
import{c as o}from"./p-c9074946.js";import{b as t}from"./p-1580513b.js";const e=(t,e,a=s)=>{const n=o(e,s.join(", "));if(!n){throw new Error(`The "${e.nodeName.toLowerCase()}" component was not handled, as it is not a child of the following elements: ${a.join(", ")}`)}void i(n,e,t)};const s=["atomic-search-box","atomic-insight-search-box","atomic-commerce-search-box"];const a=o=>"updateComplete"in o&&o.updateComplete instanceof Promise;const i=async(o,e,s)=>{await customElements.whenDefined(o.nodeName.toLowerCase());if(a(o)){await o.updateComplete}else if("componentOnReady"in o){await o.componentOnReady()}e.dispatchEvent(t("atomic/searchBoxSuggestion/register",s))};export{e as d};
|
2
|
-
//# sourceMappingURL=p-4b7a19db.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["dispatchSearchBoxSuggestionsEvent","event","element","allowedSearchBoxElements","searchBoxElements","interfaceElement","closest","join","Error","nodeName","toLowerCase","dispatchSearchBoxSuggestionsEventEventually","isLitElementLoosely","candidate","updateComplete","Promise","async","customElements","whenDefined","componentOnReady","dispatchEvent","buildCustomEvent"],"sources":["src/components/common/suggestions/suggestions-events.ts"],"sourcesContent":["import type {HTMLStencilElement} from '@stencil/core/internal';\nimport type {LitElement} from 'lit';\nimport {closest} from '../../../utils/dom-utils';\nimport {buildCustomEvent} from '../../../utils/event-utils';\nimport type {AnyBindings} from '../interface/bindings';\nimport type {SearchBoxSuggestionsEvent} from './suggestions-types';\n\n/**\n * Dispatches an event which retrieves the `SearchBoxSuggestionsBindings` on a configured parent search box.\n *\n * @param event Event sent from the registered query suggestions to the parent search box\n * @param element Element on which to dispatch the event, which must be the child of a configured search box\n * @param allowedSearchBoxElements Optional array of allowed search box element selectors\n *\n * @throws Error if the element is not a child of an allowed search box element\n */\nexport const dispatchSearchBoxSuggestionsEvent = <\n SearchBoxController,\n Bindings = AnyBindings,\n>(\n event: SearchBoxSuggestionsEvent<SearchBoxController, Bindings>,\n element: HTMLElement,\n allowedSearchBoxElements: readonly (typeof searchBoxElements)[number][] = searchBoxElements\n) => {\n const interfaceElement = closest(element, searchBoxElements.join(', '));\n if (!interfaceElement) {\n throw new Error(\n `The \"${element.nodeName.toLowerCase()}\" component was not handled, as it is not a child of the following elements: ${allowedSearchBoxElements.join(\n ', '\n )}`\n );\n }\n void dispatchSearchBoxSuggestionsEventEventually(\n interfaceElement,\n element,\n event\n );\n};\n\nconst searchBoxElements = [\n 'atomic-search-box',\n 'atomic-insight-search-box',\n 'atomic-commerce-search-box',\n] as const;\n\nconst isLitElementLoosely = (candidate: unknown): candidate is LitElement =>\n 'updateComplete' in (candidate as LitElement) &&\n (candidate as LitElement).updateComplete instanceof Promise;\n\nconst dispatchSearchBoxSuggestionsEventEventually = async <\n SearchBoxController,\n Bindings = AnyBindings,\n>(\n interfaceElement: Element,\n element: HTMLElement,\n event: SearchBoxSuggestionsEvent<SearchBoxController, Bindings>\n) => {\n await customElements.whenDefined(interfaceElement.nodeName.toLowerCase());\n if (isLitElementLoosely(interfaceElement)) {\n await interfaceElement.updateComplete;\n } else if ('componentOnReady' in interfaceElement) {\n await (interfaceElement as HTMLStencilElement).componentOnReady();\n }\n element.dispatchEvent(\n buildCustomEvent('atomic/searchBoxSuggestion/register', event)\n );\n};\n"],"mappings":"8EAgBaA,EAAoC,CAI/CC,EACAC,EACAC,EAA0EC,KAE1E,MAAMC,EAAmBC,EAAQJ,EAASE,EAAkBG,KAAK,OACjE,IAAKF,EAAkB,CACrB,MAAM,IAAIG,MACR,QAAQN,EAAQO,SAASC,6FAA6FP,EAAyBI,KAC7I,Q,MAIDI,EACHN,EACAH,EACAD,EACD,EAGH,MAAMG,EAAoB,CACxB,oBACA,4BACA,8BAGF,MAAMQ,EAAuBC,GAC3B,mBAAqBA,GACpBA,EAAyBC,0BAA0BC,QAEtD,MAAMJ,EAA8CK,MAIlDX,EACAH,EACAD,WAEMgB,eAAeC,YAAYb,EAAiBI,SAASC,eAC3D,GAAIE,EAAoBP,GAAmB,OACnCA,EAAiBS,c,MAClB,GAAI,qBAAsBT,EAAkB,OAC1CA,EAAwCc,kB,CAEjDjB,EAAQkB,cACNC,EAAiB,sCAAuCpB,GACzD,S","ignoreList":[]}
|