@searchcraft/javascript-sdk 0.7.0 → 0.7.1
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/README.md +7 -1
- package/dist/cjs/{index-d4b4a45e.js → index-a81df4f0.js} +29 -113
- package/dist/{components/p-6cafd48d.js.map → cjs/index-a81df4f0.js.map} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/searchcraft-base-search-result.cjs.entry.js +91 -44
- package/dist/cjs/searchcraft-base-search-result.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-base-search-results.cjs.entry.js +74 -50
- package/dist/cjs/searchcraft-base-search-results.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-button_3.cjs.entry.js +37 -36
- package/dist/cjs/searchcraft-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js +141 -119
- package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-filter-panel.cjs.entry.js +11 -14
- package/dist/cjs/searchcraft-filter-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-input-form_2.cjs.entry.js +127 -92
- package/dist/cjs/searchcraft-input-form_2.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-javascript-sdk.cjs.js +2 -2
- package/dist/cjs/searchcraft-popover-button.cjs.entry.js +3 -7
- package/dist/cjs/searchcraft-popover-button.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-popover-form.cjs.entry.js +81 -75
- package/dist/cjs/searchcraft-popover-form.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-popover-list-item.cjs.entry.js +29 -6
- package/dist/cjs/searchcraft-popover-list-item.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-results-info.cjs.entry.js +9 -13
- package/dist/cjs/searchcraft-results-info.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-theme.cjs.entry.js +38 -0
- package/dist/cjs/searchcraft-theme.cjs.entry.js.map +1 -0
- package/dist/cjs/{store-abe47006.js → store-f6ba3dfb.js} +26 -10
- package/dist/cjs/{store-abe47006.js.map → store-f6ba3dfb.js.map} +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js +102 -62
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js.map +1 -1
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +77 -61
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +1 -1
- package/dist/collection/components/searchcraft-button/searchcraft-button.js +26 -30
- package/dist/collection/components/searchcraft-button/searchcraft-button.js.map +1 -1
- package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js +6 -12
- package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js.map +1 -1
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js +59 -51
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js.map +1 -1
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js +9 -20
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js.map +1 -1
- package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.js +109 -87
- package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.js.map +1 -1
- package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js +10 -20
- package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js.map +1 -1
- package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.js +1 -11
- package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.js.map +1 -1
- package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.js +81 -82
- package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.js.map +1 -1
- package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.js +35 -17
- package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.js.map +1 -1
- package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.js +17 -19
- package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.js.map +1 -1
- package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js +7 -19
- package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js.map +1 -1
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.js +57 -65
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.js.map +1 -1
- package/dist/collection/components/searchcraft-theme/searchcraft-theme.js +27 -0
- package/dist/collection/components/searchcraft-theme/searchcraft-theme.js.map +1 -0
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js +23 -26
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js.map +1 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/provider/store.js +25 -9
- package/dist/collection/provider/store.js.map +1 -1
- package/dist/collection/utils/facets.js +5 -3
- package/dist/collection/utils/facets.js.map +1 -1
- package/dist/components/index.js +4 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/p-0ef4ab33.js +66 -0
- package/dist/components/p-0ef4ab33.js.map +1 -0
- package/dist/components/p-1234974c.js +72 -0
- package/dist/components/p-1234974c.js.map +1 -0
- package/dist/components/p-4b92ae26.js +109 -0
- package/dist/components/p-4b92ae26.js.map +1 -0
- package/dist/components/{p-e1cf5f9d.js → p-506cdac1.js} +18 -14
- package/dist/components/p-506cdac1.js.map +1 -0
- package/dist/components/p-521fe971.js +60 -0
- package/dist/components/p-521fe971.js.map +1 -0
- package/dist/components/{p-6cafd48d.js → p-5365011f.js} +30 -123
- package/dist/components/p-5365011f.js.map +1 -0
- package/dist/components/p-54998882.js +285 -0
- package/dist/components/p-54998882.js.map +1 -0
- package/dist/{esm/store-712f0586.js → components/p-936e2ed4.js} +26 -10
- package/dist/components/{p-01dc5b3b.js.map → p-936e2ed4.js.map} +1 -1
- package/dist/components/p-a75ef832.js +34 -0
- package/dist/components/p-a75ef832.js.map +1 -0
- package/dist/components/p-b4a8fcbe.js +144 -0
- package/dist/components/p-b4a8fcbe.js.map +1 -0
- package/dist/components/p-ca881e5c.js +37 -0
- package/dist/components/p-ca881e5c.js.map +1 -0
- package/dist/components/p-d95bc2a0.js +284 -0
- package/dist/components/p-d95bc2a0.js.map +1 -0
- package/dist/components/searchcraft-base-search-result.js +1 -1
- package/dist/components/searchcraft-base-search-results.js +76 -52
- package/dist/components/searchcraft-base-search-results.js.map +1 -1
- package/dist/components/searchcraft-button.js +1 -1
- package/dist/components/searchcraft-error-message.js +1 -1
- package/dist/components/searchcraft-facet-list.js +1 -1
- package/dist/components/searchcraft-filter-panel.js +14 -17
- package/dist/components/searchcraft-filter-panel.js.map +1 -1
- package/dist/components/searchcraft-input-form.js +1 -1
- package/dist/components/searchcraft-input-label.js +1 -1
- package/dist/components/searchcraft-popover-button.js +3 -7
- package/dist/components/searchcraft-popover-button.js.map +1 -1
- package/dist/components/searchcraft-popover-form.js +87 -81
- package/dist/components/searchcraft-popover-form.js.map +1 -1
- package/dist/components/searchcraft-popover-list-item.js +1 -1
- package/dist/components/searchcraft-popover-list-view.js +1 -1
- package/dist/components/searchcraft-results-info.js +9 -13
- package/dist/components/searchcraft-results-info.js.map +1 -1
- package/dist/components/searchcraft-slider.js +1 -1
- package/dist/components/searchcraft-theme.d.ts +11 -0
- package/dist/components/searchcraft-theme.js +51 -0
- package/dist/components/searchcraft-theme.js.map +1 -0
- package/dist/components/searchcraft-toggle-button.js +1 -1
- package/dist/esm/{index-56b713de.js → index-3608c57d.js} +29 -113
- package/dist/esm/index-3608c57d.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/searchcraft-base-search-result.entry.js +91 -44
- package/dist/esm/searchcraft-base-search-result.entry.js.map +1 -1
- package/dist/esm/searchcraft-base-search-results.entry.js +74 -50
- package/dist/esm/searchcraft-base-search-results.entry.js.map +1 -1
- package/dist/esm/searchcraft-button_3.entry.js +37 -36
- package/dist/esm/searchcraft-button_3.entry.js.map +1 -1
- package/dist/esm/searchcraft-facet-list_3.entry.js +141 -119
- package/dist/esm/searchcraft-facet-list_3.entry.js.map +1 -1
- package/dist/esm/searchcraft-filter-panel.entry.js +11 -14
- package/dist/esm/searchcraft-filter-panel.entry.js.map +1 -1
- package/dist/esm/searchcraft-input-form_2.entry.js +127 -92
- package/dist/esm/searchcraft-input-form_2.entry.js.map +1 -1
- package/dist/esm/searchcraft-javascript-sdk.js +3 -3
- package/dist/esm/searchcraft-popover-button.entry.js +3 -7
- package/dist/esm/searchcraft-popover-button.entry.js.map +1 -1
- package/dist/esm/searchcraft-popover-form.entry.js +81 -75
- package/dist/esm/searchcraft-popover-form.entry.js.map +1 -1
- package/dist/esm/searchcraft-popover-list-item.entry.js +29 -6
- package/dist/esm/searchcraft-popover-list-item.entry.js.map +1 -1
- package/dist/esm/searchcraft-results-info.entry.js +9 -13
- package/dist/esm/searchcraft-results-info.entry.js.map +1 -1
- package/dist/esm/searchcraft-theme.entry.js +34 -0
- package/dist/esm/searchcraft-theme.entry.js.map +1 -0
- package/dist/{components/p-01dc5b3b.js → esm/store-aa071d9c.js} +26 -10
- package/dist/esm/{store-712f0586.js.map → store-aa071d9c.js.map} +1 -1
- package/dist/searchcraft-javascript-sdk/index.esm.js +1 -1
- package/dist/searchcraft-javascript-sdk/p-26f5263d.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-26f5263d.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-2ff7eb35.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-2ff7eb35.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-36f0532e.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-36f0532e.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-41b6bc5d.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-41b6bc5d.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-57eddb07.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-57eddb07.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-5d6fbee0.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-5d6fbee0.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-64c5a1d2.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-64c5a1d2.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-7e13c128.js +3 -0
- package/dist/searchcraft-javascript-sdk/p-7e13c128.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-8b0a60b3.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-8b0a60b3.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-01dc5b3b.js → p-936e2ed4.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-01dc5b3b.js.map → p-936e2ed4.js.map} +1 -1
- package/dist/searchcraft-javascript-sdk/p-c7df8be6.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-c7df8be6.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-eb6058e8.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-eb6058e8.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-faaa4394.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-faaa4394.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +1 -1
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +1 -1
- package/dist/types/components/searchcraft-base-search-result/searchcraft-base-search-result.d.ts +1 -0
- package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +2 -1
- package/dist/types/components/searchcraft-button/searchcraft-button.d.ts +1 -0
- package/dist/types/components/searchcraft-error-message/searchcraft-error-message.d.ts +1 -0
- package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +2 -1
- package/dist/types/components/searchcraft-filter-panel/searchcraft-filter-panel.d.ts +1 -0
- package/dist/types/components/searchcraft-input-form/searchcraft-input-form.d.ts +7 -10
- package/dist/types/components/searchcraft-input-label/searchcraft-input-label.d.ts +2 -1
- package/dist/types/components/searchcraft-popover-button/searchcraft-popover-button.d.ts +1 -0
- package/dist/types/components/searchcraft-popover-form/searchcraft-popover-form.d.ts +2 -1
- package/dist/types/components/searchcraft-popover-list-item/searchcraft-popover-list-item.d.ts +2 -0
- package/dist/types/components/searchcraft-popover-list-view/searchcraft-popover-list-view.d.ts +1 -0
- package/dist/types/components/searchcraft-results-info/searchcraft-results-info.d.ts +1 -0
- package/dist/types/components/searchcraft-slider/searchcraft-slider.d.ts +2 -1
- package/dist/types/components/searchcraft-theme/searchcraft-theme.d.ts +5 -0
- package/dist/types/components/searchcraft-toggle-button/searchcraft-toggle-button.d.ts +2 -1
- package/dist/types/components.d.ts +17 -4
- package/dist/types/index.d.ts +2 -1
- package/dist/types/provider/store.d.ts +1 -0
- package/dist/types/types/_shared.types.d.ts +1 -0
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/raw.d.ts +4 -0
- package/dist/types/types/searchcraft-base-search-results.types.d.ts +1 -0
- package/dist/types/types/searchcraft-filter-panel.types.d.ts +1 -0
- package/dist/types/types/searchcraft-popover-form.types.d.ts +1 -0
- package/dist/types/utils/facets.d.ts +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/styles.d.ts +1 -0
- package/dist/types/utils/units.d.ts +1 -0
- package/package.json +5 -4
- package/dist/cjs/index-d4b4a45e.js.map +0 -1
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.module.css +0 -227
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.module.css +0 -179
- package/dist/collection/components/searchcraft-button/searchcraft-button.module.css +0 -174
- package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.module.css +0 -158
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.module.css +0 -266
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.module.css +0 -168
- package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.module.css +0 -293
- package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.module.css +0 -159
- package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.module.css +0 -0
- package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.module.css +0 -322
- package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.module.css +0 -209
- package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.module.css +0 -0
- package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.module.css +0 -169
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.module.css +0 -231
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.module.css +0 -207
- package/dist/components/p-1ae87308.js +0 -43
- package/dist/components/p-1ae87308.js.map +0 -1
- package/dist/components/p-649654b5.js +0 -268
- package/dist/components/p-649654b5.js.map +0 -1
- package/dist/components/p-662cb490.js +0 -67
- package/dist/components/p-662cb490.js.map +0 -1
- package/dist/components/p-87d1611b.js +0 -97
- package/dist/components/p-87d1611b.js.map +0 -1
- package/dist/components/p-c273e43d.js +0 -40
- package/dist/components/p-c273e43d.js.map +0 -1
- package/dist/components/p-cc9f8c61.js +0 -109
- package/dist/components/p-cc9f8c61.js.map +0 -1
- package/dist/components/p-cf096782.js +0 -56
- package/dist/components/p-cf096782.js.map +0 -1
- package/dist/components/p-da5b92ef.js +0 -253
- package/dist/components/p-da5b92ef.js.map +0 -1
- package/dist/components/p-e1cf5f9d.js.map +0 -1
- package/dist/components/p-f5a06210.js +0 -34
- package/dist/components/p-f5a06210.js.map +0 -1
- package/dist/esm/index-56b713de.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-117fcdd3.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-117fcdd3.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-129e6f2c.js +0 -3
- package/dist/searchcraft-javascript-sdk/p-129e6f2c.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-27cb401c.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-27cb401c.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-4df4a29e.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-4df4a29e.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-54248dd8.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-54248dd8.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-69430dbf.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-69430dbf.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-a460755d.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-a460755d.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-bc2c4259.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-bc2c4259.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-caecdcda.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-caecdcda.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-f8129731.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-f8129731.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-f839b682.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-f839b682.entry.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{p as parseCustomStyles,s as serializeStyles}from"./p-d9551738.js";export{u as useSearchcraftStore,a as useThemeStore}from"./p-
|
|
1
|
+
export{p as parseCustomStyles,s as serializeStyles}from"./p-d9551738.js";export{u as useSearchcraftStore,a as useThemeStore}from"./p-936e2ed4.js";
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as s,h as t}from"./p-7e13c128.js";import{u as e}from"./p-936e2ed4.js";import{f as r}from"./p-755f491b.js";const i=class{constructor(t){s(this,t)}isRequesting=false;resultsCount=0;responseTime="";query="";unsubscribe=()=>{};connectedCallback(){this.unsubscribe=e.subscribe((s=>{this.isRequesting=s.isRequesting;this.resultsCount=s.searchResults?.data?.count||0;this.responseTime=((s.searchResults?.data?.time_taken||0)*1e3).toFixed(2);this.query=s.query||""}))}disconnectedCallback(){if(this.unsubscribe){this.unsubscribe()}}render(){if(!this.query||this.resultsCount===0){return null}const s=r(this.resultsCount);return t("div",{class:"searchcraft-results-info-container"},t("p",{class:"searchcraft-results-info-content"},s," results found in ",this.responseTime,"ms"))}};export{i as searchcraft_results_info};
|
|
2
|
+
//# sourceMappingURL=p-26f5263d.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SearchcraftResultsInfo","isRequesting","resultsCount","responseTime","query","unsubscribe","connectedCallback","this","useSearchcraftStore","subscribe","state","searchResults","data","count","time_taken","toFixed","disconnectedCallback","render","formattedResults","formatNumberWithCommas","h","class"],"sources":["src/components/searchcraft-results-info/searchcraft-results-info.tsx"],"sourcesContent":["import { Component, h, State } from '@stencil/core';\n\nimport { useSearchcraftStore } from '@provider/store';\n\nimport { formatNumberWithCommas } from '@utils';\n\n/**\n * This web component is designed to display the number of results returned from a search query.\n * It provides users with real-time feedback on the scale of the results, such as the total number of items found.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-results-info />\n * ```\n */\n@Component({\n tag: 'searchcraft-results-info',\n shadow: false,\n})\nexport class SearchcraftResultsInfo {\n @State() isRequesting = false;\n @State() resultsCount = 0;\n @State() responseTime = '';\n @State() query = '';\n\n unsubscribe: () => void = () => {};\n\n connectedCallback() {\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n this.isRequesting = state.isRequesting;\n this.resultsCount = state.searchResults?.data?.count || 0;\n this.responseTime = (\n (state.searchResults?.data?.time_taken || 0) * 1000\n ).toFixed(2);\n this.query = state.query || '';\n });\n }\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n render() {\n if (!this.query || this.resultsCount === 0) {\n return null;\n }\n const formattedResults = formatNumberWithCommas(this.resultsCount);\n return (\n <div class='searchcraft-results-info-container'>\n <p class='searchcraft-results-info-content'>\n {formattedResults} results found in {this.responseTime}ms\n </p>\n </div>\n );\n }\n}\n"],"mappings":"yHAoBaA,EAAsB,M,yBACxBC,aAAe,MACfC,aAAe,EACfC,aAAe,GACfC,MAAQ,GAEjBC,YAA0B,OAE1B,iBAAAC,GACEC,KAAKF,YAAcG,EAAoBC,WAAWC,IAChDH,KAAKN,aAAeS,EAAMT,aAC1BM,KAAKL,aAAeQ,EAAMC,eAAeC,MAAMC,OAAS,EACxDN,KAAKJ,eACFO,EAAMC,eAAeC,MAAME,YAAc,GAAK,KAC/CC,QAAQ,GACVR,KAAKH,MAAQM,EAAMN,OAAS,EAAE,G,CAIlC,oBAAAY,GACE,GAAIT,KAAKF,YAAa,CACpBE,KAAKF,a,EAIT,MAAAY,GACE,IAAKV,KAAKH,OAASG,KAAKL,eAAiB,EAAG,CAC1C,OAAO,I,CAET,MAAMgB,EAAmBC,EAAuBZ,KAAKL,cACrD,OACEkB,EAAA,OAAKC,MAAM,sCACTD,EAAA,KAAGC,MAAM,oCACNH,EAAgB,qBAAoBX,KAAKJ,aAAY,M","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e,h as a}from"./p-7e13c128.js";import{u as t}from"./p-936e2ed4.js";import{a as s}from"./p-755f491b.js";const c=class{constructor(a){e(this,a)}items=[];unsubscribe;lastQuery;searchStore=t.getState();componentDidLoad(){this.unsubscribe=t.subscribe((e=>{this.lastQuery=e.query||""}))}disconnectedCallback(){this.unsubscribe?.()}handleDateRangeChanged(e,a,t){const s=new Date(a);const c=new Date(t);this.searchStore.addRangeValueForIndexField({fieldName:e,value:`${e}:[${s.toISOString()} TO ${c.toISOString()}]`});this.searchStore.search()}handleNumericRangeChanged(e,a,t){this.searchStore.addRangeValueForIndexField({fieldName:e,value:`${e}:[${a} TO ${t}]`});this.searchStore.search()}handleFacetSelectionUpdated(e,a){if(a.length>0){this.searchStore.addFacetPathsForIndexField({fieldName:e,value:`${e}: IN [${a.join(" ")}]`})}else{this.searchStore.removeFacetPathsForIndexField(e)}this.searchStore.search()}handleExactMatchToggleUpdated(e){this.searchStore.setSearchMode(e?"exact":"fuzzy");this.searchStore.search()}handleMostRecentToggleUpdated(e){this.searchStore.setSortType(e?"desc":"asc");this.searchStore.search()}render(){return a("div",{key:"9b9fcc79913da68b49909965eb75f9a5b1701acb",class:"searchcraft-filter-panel"},this.items.map((e=>{switch(e.type){case"dateRange":{const t=e;const c=new Date(t.options.minDate).getTime();const n=new Date(t.options.maxDate).getTime();const r=s(t.options.granularity);return a("div",{class:"searchcraft-filter-panel-section"},a("p",{class:"searchcraft-filter-panel-label"},e.label),a("searchcraft-slider",{min:c,max:n,granularity:r,dataType:"date",onRangeChanged:e=>{this.handleDateRangeChanged(t.fieldName,e.detail.startValue,e.detail.endValue)}}))}case"numericRange":{const t=e;return a("div",{class:"searchcraft-filter-panel-section"},a("p",{class:"searchcraft-filter-panel-label"},e.label),a("searchcraft-slider",{min:t.options.min,max:t.options.max,granularity:t.options.granularity,onRangeChanged:e=>{this.handleNumericRangeChanged(t.fieldName,e.detail.startValue,e.detail.endValue)}}))}case"facets":{const t=e;return a("div",{class:"searchcraft-filter-panel-section"},a("p",{class:"searchcraft-filter-panel-label"},e.label),a("searchcraft-facet-list",{fieldName:t.fieldName,onFacetSelectionUpdated:e=>{this.handleFacetSelectionUpdated(t.fieldName,e.detail.paths)}}))}case"exactMatchToggle":{const t=e;return a("searchcraft-toggle-button",{label:t.label,subLabel:t.options.subLabel,onToggleUpdated:e=>{this.handleExactMatchToggleUpdated(e.detail)}})}case"mostRecentToggle":{const t=e;return a("searchcraft-toggle-button",{label:t.label,subLabel:t.options.subLabel,onToggleUpdated:e=>{this.handleMostRecentToggleUpdated(e.detail)}})}}})))}};export{c as searchcraft_filter_panel};
|
|
2
|
+
//# sourceMappingURL=p-2ff7eb35.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SearchcraftFilterPanel","items","unsubscribe","lastQuery","searchStore","useSearchcraftStore","getState","componentDidLoad","this","subscribe","state","query","disconnectedCallback","handleDateRangeChanged","fieldName","min","max","start","Date","end","addRangeValueForIndexField","value","toISOString","search","handleNumericRangeChanged","handleFacetSelectionUpdated","paths","length","addFacetPathsForIndexField","join","removeFacetPathsForIndexField","handleExactMatchToggleUpdated","isActive","setSearchMode","handleMostRecentToggleUpdated","setSortType","render","h","key","class","map","filterItem","type","item","options","minDate","getTime","maxDate","granularityValue","getMillis","granularity","label","dataType","onRangeChanged","event","detail","startValue","endValue","onFacetSelectionUpdated","subLabel","onToggleUpdated"],"sources":["src/components/searchcraft-filter-panel/searchcraft-filter-panel.tsx"],"sourcesContent":["import { Component, h, Prop, State } from '@stencil/core';\nimport type {\n FilterItem,\n DateRangeFilterItem,\n NumericFilterItem,\n ExactMatchToggleFilterItem,\n FacetsFilterItem,\n} from '../../types/searchcraft-filter-panel.types';\nimport { useSearchcraftStore } from '@provider/store';\nimport { getMillis } from '@utils';\n\n/**\n * This web component represents a series of filters that allows users to refine and control their search queries by applying various filter criteria.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-filter-panel />\n * ```\n */\n@Component({\n tag: 'searchcraft-filter-panel',\n shadow: false,\n})\nexport class SearchcraftFilterPanel {\n /**\n * The items to filter.\n */\n @Prop() items: FilterItem[] = [];\n\n @State() unsubscribe: (() => void) | undefined;\n @State() lastQuery: string | undefined;\n\n private searchStore = useSearchcraftStore.getState();\n\n componentDidLoad() {\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (this.lastQuery !== state.query) {\n // A place to put actions to do when the query changes\n }\n this.lastQuery = state.query || '';\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n handleDateRangeChanged(fieldName: string, min: number, max: number) {\n const start = new Date(min);\n const end = new Date(max);\n this.searchStore.addRangeValueForIndexField({\n fieldName,\n value: `${fieldName}:[${start.toISOString()} TO ${end.toISOString()}]`,\n });\n\n this.searchStore.search();\n }\n\n handleNumericRangeChanged(fieldName: string, min: number, max: number) {\n this.searchStore.addRangeValueForIndexField({\n fieldName,\n value: `${fieldName}:[${min} TO ${max}]`,\n });\n this.searchStore.search();\n }\n\n handleFacetSelectionUpdated(fieldName: string, paths: string[]) {\n if (paths.length > 0) {\n this.searchStore.addFacetPathsForIndexField({\n fieldName,\n value: `${fieldName}: IN [${paths.join(' ')}]`,\n });\n } else {\n this.searchStore.removeFacetPathsForIndexField(fieldName);\n }\n this.searchStore.search();\n }\n\n handleExactMatchToggleUpdated(isActive: boolean) {\n this.searchStore.setSearchMode(isActive ? 'exact' : 'fuzzy');\n this.searchStore.search();\n }\n\n handleMostRecentToggleUpdated(isActive: boolean) {\n this.searchStore.setSortType(isActive ? 'desc' : 'asc');\n this.searchStore.search();\n }\n\n /**\n * Iterate through `items` and render them based on `type`\n */\n render() {\n return (\n <div class='searchcraft-filter-panel'>\n {this.items.map((filterItem) => {\n switch (filterItem.type) {\n case 'dateRange': {\n const item = filterItem as DateRangeFilterItem;\n const min = new Date(item.options.minDate).getTime();\n const max = new Date(item.options.maxDate).getTime();\n const granularityValue = getMillis(item.options.granularity);\n // return date range slider\n return (\n <div class='searchcraft-filter-panel-section'>\n <p class='searchcraft-filter-panel-label'>\n {filterItem.label}\n </p>\n <searchcraft-slider\n min={min}\n max={max}\n granularity={granularityValue}\n dataType='date'\n onRangeChanged={(event) => {\n this.handleDateRangeChanged(\n item.fieldName,\n event.detail.startValue,\n event.detail.endValue,\n );\n }}\n />\n </div>\n );\n }\n case 'numericRange': {\n const item = filterItem as NumericFilterItem;\n // return date range slider\n return (\n <div class='searchcraft-filter-panel-section'>\n <p class='searchcraft-filter-panel-label'>\n {filterItem.label}\n </p>\n <searchcraft-slider\n min={item.options.min}\n max={item.options.max}\n granularity={item.options.granularity}\n onRangeChanged={(event) => {\n this.handleNumericRangeChanged(\n item.fieldName,\n event.detail.startValue,\n event.detail.endValue,\n );\n }}\n />\n </div>\n );\n }\n case 'facets': {\n const item = filterItem as FacetsFilterItem;\n // return \"filters-list\"\n return (\n <div class='searchcraft-filter-panel-section'>\n <p class='searchcraft-filter-panel-label'>\n {filterItem.label}\n </p>\n <searchcraft-facet-list\n fieldName={item.fieldName}\n onFacetSelectionUpdated={(event) => {\n this.handleFacetSelectionUpdated(\n item.fieldName,\n event.detail.paths,\n );\n }}\n />\n </div>\n );\n }\n case 'exactMatchToggle': {\n const item = filterItem as ExactMatchToggleFilterItem;\n return (\n <searchcraft-toggle-button\n label={item.label}\n subLabel={item.options.subLabel}\n onToggleUpdated={(event) => {\n this.handleExactMatchToggleUpdated(event.detail);\n }}\n />\n );\n }\n case 'mostRecentToggle': {\n const item = filterItem as ExactMatchToggleFilterItem;\n return (\n <searchcraft-toggle-button\n label={item.label}\n subLabel={item.options.subLabel}\n onToggleUpdated={(event) => {\n this.handleMostRecentToggleUpdated(event.detail);\n }}\n />\n );\n }\n }\n })}\n </div>\n );\n }\n}\n"],"mappings":"yHAwBaA,EAAsB,M,yBAIzBC,MAAsB,GAErBC,YACAC,UAEDC,YAAcC,EAAoBC,WAE1C,gBAAAC,GACEC,KAAKN,YAAcG,EAAoBI,WAAWC,IAIhDF,KAAKL,UAAYO,EAAMC,OAAS,EAAE,G,CAItC,oBAAAC,GACEJ,KAAKN,e,CAGP,sBAAAW,CAAuBC,EAAmBC,EAAaC,GACrD,MAAMC,EAAQ,IAAIC,KAAKH,GACvB,MAAMI,EAAM,IAAID,KAAKF,GACrBR,KAAKJ,YAAYgB,2BAA2B,CAC1CN,YACAO,MAAO,GAAGP,MAAcG,EAAMK,oBAAoBH,EAAIG,mBAGxDd,KAAKJ,YAAYmB,Q,CAGnB,yBAAAC,CAA0BV,EAAmBC,EAAaC,GACxDR,KAAKJ,YAAYgB,2BAA2B,CAC1CN,YACAO,MAAO,GAAGP,MAAcC,QAAUC,OAEpCR,KAAKJ,YAAYmB,Q,CAGnB,2BAAAE,CAA4BX,EAAmBY,GAC7C,GAAIA,EAAMC,OAAS,EAAG,CACpBnB,KAAKJ,YAAYwB,2BAA2B,CAC1Cd,YACAO,MAAO,GAAGP,UAAkBY,EAAMG,KAAK,S,KAEpC,CACLrB,KAAKJ,YAAY0B,8BAA8BhB,E,CAEjDN,KAAKJ,YAAYmB,Q,CAGnB,6BAAAQ,CAA8BC,GAC5BxB,KAAKJ,YAAY6B,cAAcD,EAAW,QAAU,SACpDxB,KAAKJ,YAAYmB,Q,CAGnB,6BAAAW,CAA8BF,GAC5BxB,KAAKJ,YAAY+B,YAAYH,EAAW,OAAS,OACjDxB,KAAKJ,YAAYmB,Q,CAMnB,MAAAa,GACE,OACEC,EAAA,OAAAC,IAAA,2CAAKC,MAAM,4BACR/B,KAAKP,MAAMuC,KAAKC,IACf,OAAQA,EAAWC,MACjB,IAAK,YAAa,CAChB,MAAMC,EAAOF,EACb,MAAM1B,EAAM,IAAIG,KAAKyB,EAAKC,QAAQC,SAASC,UAC3C,MAAM9B,EAAM,IAAIE,KAAKyB,EAAKC,QAAQG,SAASD,UAC3C,MAAME,EAAmBC,EAAUN,EAAKC,QAAQM,aAEhD,OACEb,EAAA,OAAKE,MAAM,oCACTF,EAAA,KAAGE,MAAM,kCACNE,EAAWU,OAEdd,EAAA,sBACEtB,IAAKA,EACLC,IAAKA,EACLkC,YAAaF,EACbI,SAAS,OACTC,eAAiBC,IACf9C,KAAKK,uBACH8B,EAAK7B,UACLwC,EAAMC,OAAOC,WACbF,EAAMC,OAAOE,SACd,I,CAMX,IAAK,eAAgB,CACnB,MAAMd,EAAOF,EAEb,OACEJ,EAAA,OAAKE,MAAM,oCACTF,EAAA,KAAGE,MAAM,kCACNE,EAAWU,OAEdd,EAAA,sBACEtB,IAAK4B,EAAKC,QAAQ7B,IAClBC,IAAK2B,EAAKC,QAAQ5B,IAClBkC,YAAaP,EAAKC,QAAQM,YAC1BG,eAAiBC,IACf9C,KAAKgB,0BACHmB,EAAK7B,UACLwC,EAAMC,OAAOC,WACbF,EAAMC,OAAOE,SACd,I,CAMX,IAAK,SAAU,CACb,MAAMd,EAAOF,EAEb,OACEJ,EAAA,OAAKE,MAAM,oCACTF,EAAA,KAAGE,MAAM,kCACNE,EAAWU,OAEdd,EAAA,0BACEvB,UAAW6B,EAAK7B,UAChB4C,wBAA0BJ,IACxB9C,KAAKiB,4BACHkB,EAAK7B,UACLwC,EAAMC,OAAO7B,MACd,I,CAMX,IAAK,mBAAoB,CACvB,MAAMiB,EAAOF,EACb,OACEJ,EAAA,6BACEc,MAAOR,EAAKQ,MACZQ,SAAUhB,EAAKC,QAAQe,SACvBC,gBAAkBN,IAChB9C,KAAKuB,8BAA8BuB,EAAMC,OAAO,G,CAKxD,IAAK,mBAAoB,CACvB,MAAMZ,EAAOF,EACb,OACEJ,EAAA,6BACEc,MAAOR,EAAKQ,MACZQ,SAAUhB,EAAKC,QAAQe,SACvBC,gBAAkBN,IAChB9C,KAAK0B,8BAA8BoB,EAAMC,OAAO,G","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,c as e,h as s,F as c}from"./p-7e13c128.js";import{c as a}from"./p-5cdc6210.js";import{u as i}from"./p-936e2ed4.js";import{a as n}from"./p-755f491b.js";function h(t,e){const s={...t};for(const c in e){if(e.hasOwnProperty(c)){if(e[c]instanceof Object&&t[c]instanceof Object){s[c]=h(t[c],e[c])}else{s[c]=e[c]}}}return s}function r(t){return t.filter(((t,e,s)=>!s.some(((s,c)=>c!==e&&s.includes(t)))))}function l(t){const e={};const s=t=>{e[t.path]={count:t.count,path:t.path};t.children?.forEach((t=>{s(t)}))};s(t);return e}function o(t){const e={count:0,path:"/",children:{}};Object.keys(t).forEach((s=>{const c=t[s];if(!c){return}if(c.path==="/"){return}const a=c.path.substring(1).split("/");let i=e;let n="";a.forEach(((t,e)=>{const s=`${n}/${t}`;if(!i.children[s]){i.children[s]={count:0,path:s,children:{}}}if(e===a.length-1){i.children[s].count=c.count}n=s;i=i.children[s]}))}));return e}function f(t){const e={count:t.count,path:t.path,children:[]};if(Object.keys(t.children).length>0){e.children=Object.values(t.children).map((t=>f(t)))}return e}function d(t,e){const s=Object.keys(t);const c=Object.keys(e);const a=new Set(c.filter((t=>t.split("/").length>2)).map((t=>t.substring(0,t.lastIndexOf("/")))));const i=Object.fromEntries(s.filter((t=>!a.has(t.substring(0,t.lastIndexOf("/"))))).map((e=>[e,t[e]])));return i}function b(t,e,s){const c=e[t];const a=s[t];const i={count:0,path:"/",children:c};const n={count:0,path:"/",children:a};const r=l(i);const b=l(n);const u=d(r,b);const p=h(u,b);const g=o(p);const k=f(g);return{[t]:k.children}}const u=class{constructor(s){t(this,s);this.facetSelectionUpdated=e(this,"facetSelectionUpdated",7)}fieldName="";facetSelectionUpdated;baseFacetRoot;facetRoot;selectedPaths={};lastTimeTaken;hasNewSearchTerm=false;lastQuery;lastSearchMode;lastSortType;unsubscribe;searchStore=i.getState();handleStateUpdate(t){const e=t.searchResults?.data.facets;const s=t.searchResults?.data.time_taken;if(!this.fieldName){return}if(t.query!==this.lastQuery||t.searchMode!==this.lastSearchMode||t.sortType!==this.lastSortType){this.selectedPaths={};this.hasNewSearchTerm=true}if(s!==this.lastTimeTaken&&e){this.facetRoot=undefined;const t=e.find((t=>this.fieldName===Object.keys(t)[0]));if(this.hasNewSearchTerm){this.baseFacetRoot=t;this.facetRoot=t;this.hasNewSearchTerm=false}else if(this.baseFacetRoot&&t){this.facetRoot=b(this.fieldName,this.baseFacetRoot,t)}}this.lastQuery=t.query;this.lastSearchMode=t.searchMode;this.lastSortType=t.sortType;this.lastTimeTaken=s}connectedCallback(){this.handleStateUpdate(this.searchStore);this.unsubscribe=i.subscribe((t=>{this.handleStateUpdate(t)}))}disconnectedCallback(){this.unsubscribe?.()}handleCheckboxChange(t){const e=!this.selectedPaths[t];if(e){this.selectedPaths={...this.selectedPaths,[t]:true}}else{const e=Object.keys(this.selectedPaths).filter((e=>!e.includes(t)));this.selectedPaths=e.reduce(((t,e)=>{t[e]=true;return t}),{})}const s=Object.keys(this.selectedPaths).filter((t=>this.selectedPaths[t]));const c=r(s);this.facetSelectionUpdated?.emit({paths:c})}formatLabel=t=>{const e=t.path.replace(/^\//,"");const s=t.count;return`${e.replace(/-/g," ").replace(/\b\w/g,(t=>t.toUpperCase()))} (${s})`};formatSubLabel=(t,e)=>{const s=t.path.substring(e.path.length);const c=s.replace(/^\//,"");const a=t.count;return`${c.replace(/-/g," ").replace(/\b\w/g,(t=>t.toUpperCase()))} (${a})`};render(){if(!this.fieldName){return}const t=this.facetRoot?.[this.fieldName];return s("div",{class:a("filtersListContainer","searchcraft-filters-list-container")},!t&&s("p",{class:"searchcraft-facet-message"},"Enter a search to view facets."),t?.map((t=>{const e=t.children?t.children?.some((t=>this.selectedPaths[t.path])):false;return s("div",{key:t.path,class:a("searchcraft-filters-list-item")},s("label",{class:a("filterCheckboxLabel","searchcraft-filters-list-checkbox-label")},s("input",{checked:this.selectedPaths[t.path],onChange:e=>this.handleCheckboxChange(t.path),type:"checkbox"}),e?s("div",{class:a("dashContainer","searchcraft-filter-list-dash-container")},s("searchcraft-dash-icon",null)):s("div",{class:a("checkContainer","searchcraft-filter-list-check-container")},s("searchcraft-check-icon",null)),this.formatLabel(t)),t.children&&t.children.length>0&&s(c,null,t.children.map((e=>s("label",{key:e.path,class:a("childFilterCheckboxLabel","searchcraft-child-filter-checkbox-label"),style:{display:this.selectedPaths[t.path]?"flex":"none"}},s("input",{checked:this.selectedPaths[e.path],onChange:t=>{this.handleCheckboxChange(e.path)},type:"checkbox"}),s("div",{class:a("checkContainer","searchcraft-filter-list-check-container")},s("searchcraft-check-icon",null)),this.formatSubLabel(e,t))))))})))}};const p=class{constructor(s){t(this,s);this.rangeChanged=e(this,"rangeChanged",7)}max=100;min=0;granularity=n("month");dataType="number";endValue=this.max;startValue=this.min;lastFocusedHandle="max";rangeChanged;componentDidLoad(){this.startValue=this.min;this.endValue=this.max}emitUpdate=async()=>{this.rangeChanged?.emit({startValue:this.startValue,endValue:this.endValue})};handleStartValueChange=t=>{const e=t.target;const s=Number.parseInt(e.value,10);this.lastFocusedHandle="min";if(s<=this.endValue){this.startValue=s;this.emitUpdate()}else{this.startValue=this.endValue;e.value=`${this.endValue}`}};handleEndValueChange=t=>{const e=t.target;const s=Number.parseInt(e.value,10);this.lastFocusedHandle="max";if(s>=this.startValue){this.endValue=s;this.emitUpdate()}else{this.endValue=this.startValue;e.value=`${this.startValue}`}};render(){const t=this.min;const e=this.max;const c=(this.startValue-t)/(e-t)*100;const i=(this.endValue-t)/(e-t)*100;const n=this.dataType==="number"?this.startValue:new Date(this.startValue).getFullYear();const h=this.dataType==="number"?this.endValue:new Date(this.endValue).getFullYear();return s("div",{key:"bf815949fc9e24e7f3ff9e1870affe676592fc68",class:"searchcraft-slider-container"},s("div",{key:"d0913ee4e35f551782ec5649b9782c535e81ff74",class:"searchcraft-slider-range-container"},s("div",{key:"5397b3ef9a79c589080560e886ef709b77279748",class:"searchcraft-slider-active-range",style:{left:`${c}%`,width:`${i-c}%`}}),s("input",{key:"714896ec90ea07a1be7b73e7168c6fab9d2c095b",class:a("searchcraft-slider-input","searchcraft-slider-input-min-handle"),max:this.max,min:this.min,onInput:this.handleStartValueChange.bind(this),step:this.granularity,style:{zIndex:this.lastFocusedHandle==="min"?"2":"1"},type:"range",value:this.startValue}),s("input",{key:"646042689f17b594dac00ba04c80d5d3a32a3cd0",class:a("searchcraft-slider-input","searchcraft-slider-input-max-handle"),max:this.max,min:this.min,onInput:this.handleEndValueChange.bind(this),step:this.granularity,style:{zIndex:this.lastFocusedHandle==="max"?"2":"1"},type:"range",value:this.endValue})),s("div",{key:"a6bc39619d6bcbb3ccf09e923436122db4559289",class:"searchcraft-slider-label-container"},s("span",{key:"d15f19f86abeacb5c100403e9e4be20f28f604c0",class:"searchcraft-slider-label"},n),s("span",{key:"6c0394917a4f54edae8a347cc8b225a64d044ea6",class:"searchcraft-slider-label"},h)))}};const g=class{constructor(s){t(this,s);this.toggleUpdated=e(this,"toggleUpdated",7)}label="Toggle";subLabel;toggleUpdated;isActive=false;unsubscribe;lastQuery;handleToggle=async()=>{this.isActive=!this.isActive;this.toggleUpdated?.emit(this.isActive)};connectedCallback(){this.unsubscribe=i.subscribe((t=>{if(t.query!==this.lastQuery&&t.query.trim().length===0){this.isActive=false}this.lastQuery=t.query}))}disconnectedCallback(){this.unsubscribe?.()}render(){return s("div",{key:"8967ffc9328e0e6822f558d04ab31bc7b7f5c871",class:"searchcraft-toggle-button-container"},s("div",{key:"d46d8ad6aff1bb012bea8e4b10cec03a12da8d64"},s("p",{key:"f9fd16a0da58bd66697d13df34a93cd70a6148c6",class:"searchcraft-toggle-button-label"},this.label),this.subLabel&&s("p",{key:"ba7a0c309ca4cc0faa891ad9e270ac16f1d1d4cc",class:"searchcraft-toggle-button-sub-label"},this.subLabel)),s("button",{key:"3b406713d41f055bbaf32d231188faba0dfa48fb",class:a("searchcraft-toggle-button-background",{active:this.isActive}),onClick:this.handleToggle,type:"button"},s("div",{key:"7dab3166e027e4efad18a3db9b541c1a4ba7da5f",class:a("searchcraft-toggle-button-handle",{active:this.isActive})})))}};export{u as searchcraft_facet_list,p as searchcraft_slider,g as searchcraft_toggle_button};
|
|
2
|
+
//# sourceMappingURL=p-36f0532e.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["deepMergeWithSpread","obj1","obj2","result","key","hasOwnProperty","Object","removeSubstringMatches","arr","filter","entry","index","array","some","otherEntry","otherIndex","includes","facetToRecord","facet","records","traverseAndAddToFragments","facetChild","path","count","children","forEach","child","recordToObject","record","root","keys","fragment","pathParts","substring","split","currentRoot","currentPath","part","nextPath","length","objectToFacet","childObject","transformed","values","map","subChildObject","filterRecordByParentPaths","record1","record2","paths1","paths2","parentPaths","Set","lastIndexOf","filteredRecord","fromEntries","has","mergeFacetRoots","fieldName","incomingRoot","currentArray","incomingArray","currentRootFacetChild","incomingRootFacetChild","currentRecord","incomingRecord","filteredCurrentRecord","mergedRecord","mergedObject","mergedFacetChild","SearchcraftFacetList","facetSelectionUpdated","baseFacetRoot","facetRoot","selectedPaths","lastTimeTaken","hasNewSearchTerm","lastQuery","lastSearchMode","lastSortType","unsubscribe","searchStore","useSearchcraftStore","getState","handleStateUpdate","state","facetPrime","searchResults","data","facets","timeTaken","time_taken","this","query","searchMode","sortType","undefined","incomingFacetRoot","find","connectedCallback","subscribe","disconnectedCallback","handleCheckboxChange","isCheckboxChecked","updatedPaths","testPath","reduce","acc","str","paths","pathsWithParentPathsRemoved","emit","formatLabel","label","replace","char","toUpperCase","formatSubLabel","facetChildAncestor","facetChildPath","render","firstFacet","h","class","classNames","isChildSelected","checked","onChange","_event","type","Fragment","grandchild","style","display","SearchcraftSlider","max","min","granularity","getMillis","dataType","endValue","startValue","lastFocusedHandle","rangeChanged","componentDidLoad","emitUpdate","async","handleStartValueChange","event","inputElement","target","value","Number","parseInt","handleEndValueChange","rangeMin","rangeMax","startPercent","endPercent","startLabel","Date","getFullYear","endLabel","left","width","onInput","bind","step","zIndex","SearchcraftToggleButton","subLabel","toggleUpdated","isActive","handleToggle","trim","active","onClick"],"sources":["src/utils/facets.ts","src/components/searchcraft-facet-list/searchcraft-facet-list.tsx","src/components/searchcraft-slider/searchcraft-slider.tsx","src/components/searchcraft-toggle-button/searchcraft-toggle-button.tsx"],"sourcesContent":["import type {\n FacetChild,\n FacetChildObject,\n FacetRoot,\n} from '@searchcraft/core';\n\nfunction deepMergeWithSpread(obj1, obj2) {\n const result = { ...obj1 };\n\n for (const key in obj2) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n if (obj2.hasOwnProperty(key)) {\n if (obj2[key] instanceof Object && obj1[key] instanceof Object) {\n result[key] = deepMergeWithSpread(obj1[key], obj2[key]);\n } else {\n result[key] = obj2[key];\n }\n }\n }\n\n return result;\n}\n\n/**\n * Given an array of facet paths, removes parent facet paths.\n */\nexport function removeSubstringMatches(arr: string[]): string[] {\n return arr.filter(\n (entry, index, array) =>\n !array.some(\n (otherEntry, otherIndex) =>\n otherIndex !== index && otherEntry.includes(entry),\n ),\n );\n}\n\ntype FacetChildFragment = {\n count: number;\n path: string;\n};\n\nfunction facetToRecord(facet: FacetChild): Record<string, FacetChildFragment> {\n const records: Record<string, FacetChildFragment> = {};\n\n const traverseAndAddToFragments = (facetChild: FacetChild) => {\n records[facetChild.path] = {\n count: facetChild.count,\n path: facetChild.path,\n };\n\n facetChild.children?.forEach((child) => {\n traverseAndAddToFragments(child);\n });\n };\n\n traverseAndAddToFragments(facet);\n\n return records;\n}\n\nfunction recordToObject(\n record: Record<string, FacetChildFragment>,\n): FacetChildObject {\n const root: FacetChildObject = {\n count: 0,\n path: '/',\n children: {},\n };\n\n Object.keys(record).forEach((key) => {\n const fragment = record[key];\n if (!fragment) {\n return;\n }\n\n if (fragment.path === '/') {\n return;\n }\n const pathParts = fragment.path.substring(1).split('/');\n let currentRoot = root;\n let currentPath = '';\n\n pathParts.forEach((part, index) => {\n const nextPath = `${currentPath}/${part}`;\n if (!currentRoot.children[nextPath]) {\n currentRoot.children[nextPath] = {\n count: 0,\n path: nextPath,\n children: {},\n };\n }\n\n if (index === pathParts.length - 1) {\n currentRoot.children[nextPath].count = fragment.count;\n }\n\n currentPath = nextPath;\n currentRoot = currentRoot.children[nextPath];\n });\n });\n\n return root;\n}\n\nfunction objectToFacet(childObject: FacetChildObject): FacetChild {\n const transformed: FacetChild = {\n count: childObject.count,\n path: childObject.path,\n children: [],\n };\n\n if (Object.keys(childObject.children).length > 0) {\n transformed.children = Object.values(childObject.children).map(\n (subChildObject) => objectToFacet(subChildObject),\n );\n }\n\n return transformed;\n}\n\n/**\n * Filters records with the parent paths from record2 OUT of record1\n */\nfunction filterRecordByParentPaths(\n record1: Record<string, FacetChild>,\n record2: Record<string, FacetChild>,\n): Record<string, FacetChild> {\n // Extract all paths (keys) both records\n const paths1 = Object.keys(record1);\n const paths2 = Object.keys(record2);\n\n // Find all parent paths in record2\n const parentPaths = new Set(\n paths2\n .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level\n .map((path) => path.substring(0, path.lastIndexOf('/'))),\n );\n\n // Filter out keys in record1 that share a parent path with any of the identified parent paths\n const filteredRecord = Object.fromEntries(\n paths1\n .filter(\n (path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))),\n )\n .map((path) => [path, record1[path]]), // Reconstruct the key-value pairs\n );\n\n return filteredRecord as Record<string, FacetChild>;\n}\n\nexport function mergeFacetRoots(\n fieldName: string,\n currentRoot: FacetRoot,\n incomingRoot: FacetRoot,\n): FacetRoot {\n const currentArray = currentRoot[fieldName];\n const incomingArray = incomingRoot[fieldName];\n\n const currentRootFacetChild: FacetChild = {\n count: 0,\n path: '/',\n children: currentArray,\n };\n\n const incomingRootFacetChild: FacetChild = {\n count: 0,\n path: '/',\n children: incomingArray,\n };\n\n // Flatten them into records\n const currentRecord: Record<string, FacetChildFragment> = facetToRecord(\n currentRootFacetChild,\n );\n\n const incomingRecord: Record<string, FacetChildFragment> = facetToRecord(\n incomingRootFacetChild,\n );\n\n // Filter out the records from record1 (the current set of records)\n // that share a parent path with record2 (the incoming records)\n const filteredCurrentRecord = filterRecordByParentPaths(\n currentRecord,\n incomingRecord,\n );\n\n // Deep merge the records together\n const mergedRecord: Record<string, FacetChildFragment> = deepMergeWithSpread(\n filteredCurrentRecord,\n incomingRecord,\n );\n\n // Convert into a heirarchical object\n const mergedObject: FacetChildObject = recordToObject(mergedRecord);\n\n // Convert the heirarchical object back to the Facet child structure\n const mergedFacetChild = objectToFacet(mergedObject);\n\n return {\n [fieldName]: mergedFacetChild.children,\n } as FacetRoot;\n}\n","import {\n Component,\n h,\n State,\n Prop,\n Event,\n type EventEmitter,\n Fragment,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\nimport type { FacetChild, FacetRoot } from '@searchcraft/core';\n\nimport { useSearchcraftStore, type SearchcraftState } from '@provider/store';\nimport { mergeFacetRoots, removeSubstringMatches } from '@utils';\n\n/**\n * This web component is designed to display facets in a search interface, allowing users to refine their search results by applying filters based on various attributes.\n * It is consumed within the `searchcraft-filter-panel`.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-facet-list field-name=\"title\" />\n * ```\n *\n * ```js\n * // index.js\n * const facetList = document.querySelector('searchcraft-facet-list');\n *\n * facetList.addEventListener('facetSelectionUpdated', () => {\n * console.log('Facet selection updated');\n * });\n * ```\n */\n@Component({\n tag: 'searchcraft-facet-list',\n shadow: false,\n})\nexport class SearchcraftFacetList {\n /**\n * The name of the field where facets are applied.\n */\n @Prop() fieldName = '';\n\n /**\n * When the facets are updated.\n */\n @Event() facetSelectionUpdated?: EventEmitter<{ paths: string[] }>;\n\n @State() baseFacetRoot: FacetRoot | undefined;\n @State() facetRoot: FacetRoot | undefined;\n @State() selectedPaths: Record<string, boolean> = {};\n @State() lastTimeTaken: number | undefined;\n @State() hasNewSearchTerm = false;\n\n @State() lastQuery: string | undefined;\n @State() lastSearchMode: string | undefined;\n @State() lastSortType: string | undefined;\n\n @State() unsubscribe: (() => void) | undefined;\n\n private searchStore = useSearchcraftStore.getState();\n\n handleStateUpdate(state: SearchcraftState) {\n const facetPrime = state.searchResults?.data.facets;\n const timeTaken = state.searchResults?.data.time_taken;\n\n if (!this.fieldName) {\n return;\n }\n\n /** Things to do when the state's search term has changed, but before the response received */\n if (\n state.query !== this.lastQuery ||\n state.searchMode !== this.lastSearchMode ||\n state.sortType !== this.lastSortType\n ) {\n this.selectedPaths = {};\n this.hasNewSearchTerm = true;\n }\n\n /** Things to do when a new response with a new facet prime has been received */\n if (timeTaken !== this.lastTimeTaken && facetPrime) {\n this.facetRoot = undefined;\n const incomingFacetRoot: FacetRoot | undefined = facetPrime.find(\n (facet) => this.fieldName === Object.keys(facet)[0],\n );\n\n /** Data is from a new search term: completely override our facets */\n if (this.hasNewSearchTerm) {\n this.baseFacetRoot = incomingFacetRoot;\n this.facetRoot = incomingFacetRoot;\n this.hasNewSearchTerm = false;\n } else if (this.baseFacetRoot && incomingFacetRoot) {\n /** Data is from an existing search term, merge the facets together */\n this.facetRoot = mergeFacetRoots(\n this.fieldName,\n this.baseFacetRoot,\n incomingFacetRoot,\n );\n }\n }\n\n this.lastQuery = state.query;\n this.lastSearchMode = state.searchMode;\n this.lastSortType = state.sortType;\n this.lastTimeTaken = timeTaken;\n }\n\n connectedCallback() {\n this.handleStateUpdate(this.searchStore);\n\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n this.handleStateUpdate(state);\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n handleCheckboxChange(path: string) {\n const isCheckboxChecked = !this.selectedPaths[path];\n\n if (isCheckboxChecked) {\n /**\n * Checkbox Checked: Add to the selectedPaths record\n * Uses spread operator here so UI updates.\n */\n this.selectedPaths = {\n ...this.selectedPaths,\n [path]: true,\n };\n } else {\n /**\n * Checkbox Uncheck: Remove any paths and sub-paths\n */\n const updatedPaths = Object.keys(this.selectedPaths).filter(\n (testPath) => !testPath.includes(path),\n );\n\n this.selectedPaths = updatedPaths.reduce(\n (acc, str) => {\n acc[str] = true;\n return acc;\n },\n {} as Record<string, boolean>,\n );\n }\n\n /**\n * Emit the paths array, with parent paths removed.\n */\n const paths = Object.keys(this.selectedPaths).filter(\n (path) => this.selectedPaths[path],\n );\n const pathsWithParentPathsRemoved = removeSubstringMatches(paths);\n\n this.facetSelectionUpdated?.emit({ paths: pathsWithParentPathsRemoved });\n }\n\n formatLabel = (facetChild: FacetChild): string => {\n const label = facetChild.path.replace(/^\\//, '');\n const count = facetChild.count;\n return `${label.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())} (${count})`;\n };\n\n formatSubLabel = (\n facetChild: FacetChild,\n facetChildAncestor: FacetChild,\n ): string => {\n const facetChildPath = facetChild.path.substring(\n facetChildAncestor.path.length,\n );\n const label = facetChildPath.replace(/^\\//, '');\n const count = facetChild.count;\n return `${label.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())} (${count})`;\n };\n\n render() {\n if (!this.fieldName) {\n return;\n }\n\n const firstFacet = this.facetRoot?.[this.fieldName];\n\n return (\n <div\n class={classNames(\n 'filtersListContainer',\n 'searchcraft-filters-list-container',\n )}\n >\n {!firstFacet && (\n <p class='searchcraft-facet-message'>\n Enter a search to view facets.\n </p>\n )}\n {firstFacet?.map((facetChild: FacetChild) => {\n const isChildSelected = facetChild.children\n ? facetChild.children?.some(\n (child) => this.selectedPaths[child.path],\n )\n : false;\n\n return (\n <div\n key={facetChild.path}\n class={classNames('searchcraft-filters-list-item')}\n >\n <label\n class={classNames(\n 'filterCheckboxLabel',\n 'searchcraft-filters-list-checkbox-label',\n )}\n >\n <input\n checked={this.selectedPaths[facetChild.path]}\n onChange={(_event: Event) =>\n this.handleCheckboxChange(facetChild.path)\n }\n type='checkbox'\n />\n {isChildSelected ? (\n <div\n class={classNames(\n 'dashContainer',\n 'searchcraft-filter-list-dash-container',\n )}\n >\n <searchcraft-dash-icon />\n </div>\n ) : (\n <div\n class={classNames(\n 'checkContainer',\n 'searchcraft-filter-list-check-container',\n )}\n >\n <searchcraft-check-icon />\n </div>\n )}\n {this.formatLabel(facetChild)}\n </label>\n {facetChild.children && facetChild.children.length > 0 && (\n <Fragment>\n {facetChild.children.map((grandchild) => (\n <label\n key={grandchild.path}\n class={classNames(\n 'childFilterCheckboxLabel',\n 'searchcraft-child-filter-checkbox-label',\n )}\n style={{\n display: this.selectedPaths[facetChild.path]\n ? 'flex'\n : 'none',\n }}\n >\n <input\n checked={this.selectedPaths[grandchild.path]}\n onChange={(_event: Event) => {\n this.handleCheckboxChange(grandchild.path);\n }}\n type='checkbox'\n />\n <div\n class={classNames(\n 'checkContainer',\n 'searchcraft-filter-list-check-container',\n )}\n >\n <searchcraft-check-icon />\n </div>\n {this.formatSubLabel(grandchild, facetChild)}\n </label>\n ))}\n </Fragment>\n )}\n </div>\n );\n })}\n </div>\n );\n }\n}\n","import {\n Component,\n Event,\n type EventEmitter,\n h,\n State,\n Prop,\n} from '@stencil/core';\nimport { getMillis } from '@utils';\nimport classNames from 'classnames';\n\n/**\n * This web component is designed to allow users to select a value from a range defined by a minimum and maximum value.\n * The component renders a slider interface, which can be used to visually choose a value between two boundaries.\n * It is consumed by the `searchcraft-filter-panel` component.\n */\n@Component({\n tag: 'searchcraft-slider',\n shadow: false,\n})\nexport class SearchcraftSlider {\n /**\n * The maximum value allowed.\n */\n @Prop() max = 100;\n /**\n * The minimum value allowed.\n */\n @Prop() min = 0;\n /**\n * The granularity that the value must adhere to.\n */\n @Prop() granularity: number = getMillis('month');\n /** The type of data allowed. */\n @Prop() dataType: 'number' | 'date' = 'number';\n\n @State() endValue = this.max;\n @State() startValue = this.min;\n @State() lastFocusedHandle: 'min' | 'max' = 'max';\n\n /**\n * When the range has changed.\n * */\n @Event() rangeChanged:\n | EventEmitter<{ startValue: number; endValue: number }>\n | undefined;\n\n componentDidLoad() {\n this.startValue = this.min;\n this.endValue = this.max;\n }\n\n private emitUpdate = async () => {\n this.rangeChanged?.emit({\n startValue: this.startValue,\n endValue: this.endValue,\n });\n };\n\n private handleStartValueChange = (event: InputEvent) => {\n const inputElement = event.target as HTMLInputElement;\n const value = Number.parseInt(inputElement.value, 10);\n this.lastFocusedHandle = 'min';\n if (value <= this.endValue) {\n this.startValue = value;\n this.emitUpdate();\n } else {\n this.startValue = this.endValue;\n inputElement.value = `${this.endValue}`;\n }\n };\n\n private handleEndValueChange = (event: InputEvent) => {\n const inputElement = event.target as HTMLInputElement;\n const value = Number.parseInt(inputElement.value, 10);\n this.lastFocusedHandle = 'max';\n if (value >= this.startValue) {\n this.endValue = value;\n this.emitUpdate();\n } else {\n this.endValue = this.startValue;\n inputElement.value = `${this.startValue}`;\n }\n };\n\n render() {\n const rangeMin = this.min;\n const rangeMax = this.max;\n const startPercent =\n ((this.startValue - rangeMin) / (rangeMax - rangeMin)) * 100;\n const endPercent =\n ((this.endValue - rangeMin) / (rangeMax - rangeMin)) * 100;\n\n const startLabel =\n this.dataType === 'number'\n ? this.startValue\n : new Date(this.startValue).getFullYear();\n\n const endLabel =\n this.dataType === 'number'\n ? this.endValue\n : new Date(this.endValue).getFullYear();\n\n return (\n <div class='searchcraft-slider-container'>\n <div class='searchcraft-slider-range-container'>\n <div\n class='searchcraft-slider-active-range'\n style={{\n left: `${startPercent}%`,\n width: `${endPercent - startPercent}%`,\n }}\n />\n <input\n class={classNames(\n 'searchcraft-slider-input',\n 'searchcraft-slider-input-min-handle',\n )}\n max={this.max}\n min={this.min}\n onInput={this.handleStartValueChange.bind(this)}\n step={this.granularity}\n style={{ zIndex: this.lastFocusedHandle === 'min' ? '2' : '1' }}\n type='range'\n value={this.startValue}\n />\n <input\n class={classNames(\n 'searchcraft-slider-input',\n 'searchcraft-slider-input-max-handle',\n )}\n max={this.max}\n min={this.min}\n onInput={this.handleEndValueChange.bind(this)}\n step={this.granularity}\n style={{ zIndex: this.lastFocusedHandle === 'max' ? '2' : '1' }}\n type='range'\n value={this.endValue}\n />\n </div>\n <div class='searchcraft-slider-label-container'>\n <span class='searchcraft-slider-label'>{startLabel}</span>\n <span class='searchcraft-slider-label'>{endLabel}</span>\n </div>\n </div>\n );\n }\n}\n","import { useSearchcraftStore } from '@provider/store';\nimport {\n Component,\n Event,\n h,\n Prop,\n State,\n type EventEmitter,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\n/**\n * This web component simulates a light switch functionality, providing a simple and intuitive toggle between two states—on and off.\n * It is consumed within the `searchcraft-filter-panel` component.\n */\n@Component({\n tag: 'searchcraft-toggle-button',\n shadow: false,\n})\nexport class SearchcraftToggleButton {\n /**\n * The label.\n */\n @Prop() label = 'Toggle';\n /**\n * The secondary label displayed below the main label.\n */\n @Prop() subLabel: string | undefined;\n\n /**\n * When the toggle element is changed.\n */\n @Event() toggleUpdated?: EventEmitter<boolean>;\n\n @State() isActive = false;\n @State() unsubscribe: (() => void) | undefined;\n @State() lastQuery: string | undefined;\n\n private handleToggle = async () => {\n this.isActive = !this.isActive;\n this.toggleUpdated?.emit(this.isActive);\n };\n\n connectedCallback() {\n /** When the query changes, sets toggle button state back to inactive. */\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (state.query !== this.lastQuery && state.query.trim().length === 0) {\n this.isActive = false;\n }\n this.lastQuery = state.query;\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n render() {\n return (\n <div class='searchcraft-toggle-button-container'>\n <div>\n <p class='searchcraft-toggle-button-label'>{this.label}</p>\n {this.subLabel && (\n <p class='searchcraft-toggle-button-sub-label'>{this.subLabel}</p>\n )}\n </div>\n <button\n class={classNames('searchcraft-toggle-button-background', {\n active: this.isActive,\n })}\n onClick={this.handleToggle}\n type='button'\n >\n <div\n class={classNames('searchcraft-toggle-button-handle', {\n active: this.isActive,\n })}\n />\n </button>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,g as e,h as s}from"./p-7e13c128.js";import{c as r}from"./p-5cdc6210.js";import{u as i}from"./p-936e2ed4.js";const o=class{constructor(e){t(this,e)}config;type="inline";popoverResultMappings;hotkey="k";hotkeyModifier="meta";isPopoverVisibleInState=false;unsubscribe;searchResults;searchTerm;isFocused=false;breakpointSm=576;breakpointMd=768;breakpointLg=992;modalElement;get hostElement(){return e(this)}componentDidLoad(){const t=getComputedStyle(document.documentElement);this.breakpointSm=Number.parseFloat(t.getPropertyValue("--sc-breakpoint-sm").trim());this.breakpointMd=Number.parseFloat(t.getPropertyValue("--sc-breakpoint-md").trim());this.breakpointLg=Number.parseFloat(t.getPropertyValue("--sc-breakpoint-lg").trim());this.isPopoverVisibleInState=i.getState().isPopoverVisible;document.addEventListener("click",this.handleDocumentClick);document.addEventListener("keydown",this.handleDocumentKeyDown);this.unsubscribe=i.subscribe((t=>{if(this.isPopoverVisibleInState!==t.isPopoverVisible){this.handlePopoverVisibilityChange(t.isPopoverVisible)}this.searchResults={...t.searchResults};this.searchTerm=t.query}))}disconnectedCallback(){this.unsubscribe?.();document.removeEventListener("click",this.handleDocumentClick);document.removeEventListener("keydown",this.handleDocumentKeyDown)}handleDocumentClick=t=>{if(!this.hostElement.contains(t.target)){this.isFocused=false}};handlePopoverVisibilityChange(t){this.isPopoverVisibleInState=t;document.body.style.overflow=t?"hidden":"auto"}handleDocumentKeyDown=t=>{if(t.key===this.hotkey){this.handleHotkeyPressed(t)}if(!this.hostElement.contains(document.activeElement)){return}switch(t.key){case"ArrowDown":case"ArrowUp":t.preventDefault();this.focusOnNextListItem(t.key);break;case"Escape":i.getState().setPopoverVisibility(false);break;default:return}};handleInputInit=()=>{const t=this.hostElement.querySelector(".searchcraft-input");t?.focus()};handleInputFocus(){this.isFocused=true;if(this.type==="inline"&&window.visualViewport&&window.visualViewport.width<this.breakpointSm){i.getState().setPopoverVisibility(true);if(!this.modalElement){this.modalElement=document.createElement("searchcraft-popover-form");this.modalElement.config=this.config;this.modalElement.popoverResultMappings=this.popoverResultMappings;this.modalElement.setAttribute("type","fullscreen");document.body.appendChild(this.modalElement)}}}handleModalBackdropClick(t){i.getState().setPopoverVisibility(false)}handleHotkeyPressed(t){if(t.ctrlKey&&this.hotkeyModifier==="ctrl"||t.altKey&&this.hotkeyModifier==="alt"||t.metaKey&&this.hotkeyModifier==="meta"){t.preventDefault();if(this.type==="inline"&&!this.isPopoverVisibleInState){const t=this.hostElement.querySelector(".searchcraft-input");t?.focus()}else{i.getState().setPopoverVisibility(!this.isPopoverVisibleInState)}}}handleCancelButtonClick(){i.getState().setPopoverVisibility(false)}focusOnNextListItem(t){const e=Array.from(document.querySelectorAll("a.searchcraft-popover-list-item")).filter((t=>!t.hasAttribute("disabled")&&t.offsetParent!==null));const s=e.indexOf(document.activeElement);if(t==="ArrowDown"){e[(s+1)%e.length]?.focus()}else if(t==="ArrowUp"){if(s>=1){e[s-1]?.focus()}else{const t=document.querySelector(".searchcraft-input");if(t){t.focus();requestAnimationFrame((()=>{t.selectionEnd=t.value.length;t.selectionStart=t.value.length}))}}}}get hasResultsToShow(){return this.searchTerm&&this.searchTerm?.trim()?.length>0&&(this.searchResults?.data?.hits?.length||0)>0}renderInlinePopover(t){const e=this.hasResultsToShow&&this.isFocused;const i=r("searchcraft-popover-form searchcraft-popover-form-inline",{"searchcraft-popover-form-active":e});return s("div",{class:i},s("searchcraft-input-form",{config:this.config,onInputFocus:this.handleInputFocus.bind(this)}),e&&s("div",{class:"searchcraft-popover-inline-wrapper-outer"},s("div",{class:"searchcraft-popover-inline-wrapper-inner"},s("searchcraft-popover-list-view",{popoverResultMappings:this.popoverResultMappings,documents:t}))))}renderModalPopover(t){if(this.isPopoverVisibleInState){const e=r("searchcraft-popover-form",{"searchcraft-popover-form-active":this.hasResultsToShow});return s("div",{class:"searchcraft-popover-form-modal"},s("div",{class:"searchcraft-popover-form-modal-backdrop",onClick:this.handleModalBackdropClick}),s("div",{class:"searchcraft-popover-form-modal-inner"},s("div",{class:e},s("div",{class:"searchcraft-popover-form-input-wrapper"},s("searchcraft-input-form",{config:this.config,onInputFocus:this.handleInputFocus.bind(this),onInputInit:this.handleInputInit.bind(this)}),s("button",{type:"button",class:"searchcraft-popover-form-cancel-button",onClick:this.handleCancelButtonClick.bind(this)},"Cancel")),this.hasResultsToShow&&s("searchcraft-popover-list-view",{popoverResultMappings:this.popoverResultMappings,documents:t}))))}}renderFullscreenPopover(t){if(this.isPopoverVisibleInState){return s("div",{class:"searchcraft-popover-form-fullscreen"},s("div",{class:"searchcraft-popover-form"},s("div",{class:"searchcraft-popover-form-input-wrapper"},s("searchcraft-input-form",{config:this.config,onInputFocus:this.handleInputFocus.bind(this),onInputInit:this.handleInputInit.bind(this)}),s("button",{type:"button",class:"searchcraft-popover-form-cancel-button",onClick:this.handleCancelButtonClick.bind(this)},"Cancel")),this.hasResultsToShow&&s("searchcraft-popover-list-view",{popoverResultMappings:this.popoverResultMappings,documents:t})))}}render(){const t=this.searchResults?.data?.hits?.map(((t,e)=>{const{doc:s}=t;return s}));switch(this.type){case"inline":return this.renderInlinePopover(t);case"modal":return this.renderModalPopover(t);case"fullscreen":return this.renderFullscreenPopover(t)}}};export{o as searchcraft_popover_form};
|
|
2
|
+
//# sourceMappingURL=p-41b6bc5d.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SearchcraftPopoverForm","config","type","popoverResultMappings","hotkey","hotkeyModifier","isPopoverVisibleInState","unsubscribe","searchResults","searchTerm","isFocused","breakpointSm","breakpointMd","breakpointLg","modalElement","componentDidLoad","computedStyle","getComputedStyle","document","documentElement","this","Number","parseFloat","getPropertyValue","trim","useSearchcraftStore","getState","isPopoverVisible","addEventListener","handleDocumentClick","handleDocumentKeyDown","subscribe","state","handlePopoverVisibilityChange","query","disconnectedCallback","removeEventListener","event","hostElement","contains","target","isVisible","body","style","overflow","key","handleHotkeyPressed","activeElement","preventDefault","focusOnNextListItem","setPopoverVisibility","handleInputInit","input","querySelector","focus","handleInputFocus","window","visualViewport","width","createElement","setAttribute","appendChild","handleModalBackdropClick","_event","ctrlKey","altKey","metaKey","hostElementInput","handleCancelButtonClick","direction","listItems","Array","from","querySelectorAll","filter","el","hasAttribute","offsetParent","currentIndex","indexOf","length","requestAnimationFrame","selectionEnd","value","selectionStart","hasResultsToShow","data","hits","renderInlinePopover","documents","isListViewVisible","popoverFormClassNames","classNames","h","class","onInputFocus","bind","renderModalPopover","onClick","onInputInit","renderFullscreenPopover","render","map","_index","doc","result"],"sources":["src/components/searchcraft-popover-form/searchcraft-popover-form.tsx"],"sourcesContent":["import { Component, Element, Prop, State, h } from '@stencil/core';\nimport classNames from 'classnames';\nimport type { SearchcraftConfig, SearchcraftResponse } from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\nimport type { PopoverResultMappings } from 'types';\n\n/**\n * This web component is designed to display search results in a popover container that dynamically appears when the user interacts with a search input field.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-popover-form type=\"fullscreen\" />\n * ```\n *\n * ```js\n * // index.js\n * const popoverForm = document.querySelector('searchcraft-popover-form');\n *\n * popoverForm.config = {\n * index: [index_name_from_vektron],\n * readKey: 'read_key_from_vektron',\n * endpointUrl: 'enpoint_url_from_vektron',\n * };\n *\n * popoverForm.popoverResultMappings = {\n * containerHref: {\n * fieldNames: [\n * {\n * fieldName: 'canonical_link',\n * dataType: 'text',\n * },\n * ],\n * };\n * ```\n */\n@Component({\n tag: 'searchcraft-popover-form',\n shadow: false,\n})\nexport class SearchcraftPopoverForm {\n /**\n * The Searchcraft config object.\n */\n @Prop() config: SearchcraftConfig | undefined;\n /**\n * The type of popover form to render.\n *\n * - `inline` - Renders inline with the rest of the content on the page. The search results pop over the page content.\n * - `fullscreen` - Renders in fullscreen view. Used together with the `searchcraft-popover-button` component.\n * - `modal` - Renders in a modal view. Used together with the `searchcraft-popover-button` component.\n */\n @Prop() type: 'inline' | 'fullscreen' | 'modal' = 'inline';\n /**\n * Formats the content rendered for each result.\n */\n @Prop() popoverResultMappings: PopoverResultMappings | undefined;\n /**\n * The hotkey that activates the popover.\n */\n @Prop() hotkey = 'k';\n /**\n * The hotkey modifier that activates the popover. Used together with the `hotkey` prop.\n */\n @Prop() hotkeyModifier: 'ctrl' | 'meta' | 'alt' | 'option' = 'meta';\n\n @State() isPopoverVisibleInState = false;\n @State() unsubscribe: (() => void) | undefined;\n @State() searchResults: SearchcraftResponse | undefined;\n @State() searchTerm: string | undefined;\n @State() isFocused = false;\n @State() breakpointSm = 576;\n @State() breakpointMd = 768;\n @State() breakpointLg = 992;\n\n @State() modalElement;\n\n @Element() hostElement!: HTMLElement;\n\n componentDidLoad() {\n // Loads the breakpoint values into state\n const computedStyle = getComputedStyle(document.documentElement);\n this.breakpointSm = Number.parseFloat(\n computedStyle.getPropertyValue('--sc-breakpoint-sm').trim(),\n );\n this.breakpointMd = Number.parseFloat(\n computedStyle.getPropertyValue('--sc-breakpoint-md').trim(),\n );\n this.breakpointLg = Number.parseFloat(\n computedStyle.getPropertyValue('--sc-breakpoint-lg').trim(),\n );\n // Set popover visiblity in state\n this.isPopoverVisibleInState =\n useSearchcraftStore.getState().isPopoverVisible;\n\n // Add event listeners\n document.addEventListener('click', this.handleDocumentClick);\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n\n // Subscribe to state events\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (this.isPopoverVisibleInState !== state.isPopoverVisible) {\n this.handlePopoverVisibilityChange(state.isPopoverVisible);\n }\n\n this.searchResults = { ...state.searchResults } as SearchcraftResponse;\n this.searchTerm = state.query;\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n document.removeEventListener('click', this.handleDocumentClick);\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n }\n\n handleDocumentClick = (event: MouseEvent) => {\n if (!this.hostElement.contains(event.target as Node)) {\n this.isFocused = false;\n }\n };\n\n /**\n * Handles when popover visibility is changed in state\n */\n handlePopoverVisibilityChange(isVisible: boolean) {\n this.isPopoverVisibleInState = isVisible;\n document.body.style.overflow = isVisible ? 'hidden' : 'auto';\n }\n\n /**\n * Actions to perform when various keys are pressed within the popover form.\n */\n handleDocumentKeyDown = (event: KeyboardEvent) => {\n // Document-scoped actions\n if (event.key === this.hotkey) {\n this.handleHotkeyPressed(event);\n }\n\n // Document-scoped -> Popover-scoped keyboard event boundary\n if (!this.hostElement.contains(document.activeElement)) {\n return;\n }\n\n // Popover-scoped actions\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n this.focusOnNextListItem(event.key);\n break;\n case 'Escape':\n useSearchcraftStore.getState().setPopoverVisibility(false);\n break;\n default:\n return;\n }\n };\n\n handleInputInit = () => {\n const input = this.hostElement.querySelector('.searchcraft-input') as\n | HTMLInputElement\n | undefined;\n input?.focus();\n };\n\n /**\n * When popover is `inline` and the viewport is at the smallest breakpoint,\n * focusing on the input will open a modal version of the popover form.\n */\n handleInputFocus() {\n this.isFocused = true;\n\n if (\n this.type === 'inline' &&\n window.visualViewport &&\n window.visualViewport.width < this.breakpointSm\n ) {\n useSearchcraftStore.getState().setPopoverVisibility(true);\n\n // Appends a popover form of type=`modal` to the body\n if (!this.modalElement) {\n this.modalElement = document.createElement('searchcraft-popover-form');\n this.modalElement.config = this.config;\n this.modalElement.popoverResultMappings = this.popoverResultMappings;\n this.modalElement.setAttribute('type', 'fullscreen');\n document.body.appendChild(this.modalElement);\n }\n }\n }\n\n handleModalBackdropClick(_event: MouseEvent) {\n useSearchcraftStore.getState().setPopoverVisibility(false);\n }\n\n /**\n * When a hotkey is pressed, tests if the modifiers also match.\n * If modifiers match, toggles visibility of the popover modal.\n */\n handleHotkeyPressed(event: KeyboardEvent) {\n if (\n (event.ctrlKey && this.hotkeyModifier === 'ctrl') ||\n (event.altKey && this.hotkeyModifier === 'alt') ||\n (event.metaKey && this.hotkeyModifier === 'meta')\n ) {\n event.preventDefault();\n if (this.type === 'inline' && !this.isPopoverVisibleInState) {\n const hostElementInput = this.hostElement.querySelector(\n '.searchcraft-input',\n ) as HTMLInputElement | undefined;\n hostElementInput?.focus();\n } else {\n useSearchcraftStore\n .getState()\n .setPopoverVisibility(!this.isPopoverVisibleInState);\n }\n }\n }\n\n handleCancelButtonClick() {\n useSearchcraftStore.getState().setPopoverVisibility(false);\n }\n\n /**\n * Moves focus to the next/previous list item in the list view. If you are at the top\n * of the list view, it moves focus back to the input.\n *\n * @param direction\n */\n focusOnNextListItem(direction: 'ArrowDown' | 'ArrowUp') {\n const listItems = Array.from(\n document.querySelectorAll<HTMLAnchorElement>(\n 'a.searchcraft-popover-list-item',\n ),\n ).filter((el) => !el.hasAttribute('disabled') && el.offsetParent !== null);\n\n const currentIndex = listItems.indexOf(\n document.activeElement as HTMLAnchorElement,\n );\n\n if (direction === 'ArrowDown') {\n listItems[(currentIndex + 1) % listItems.length]?.focus();\n } else if (direction === 'ArrowUp') {\n if (currentIndex >= 1) {\n listItems[currentIndex - 1]?.focus();\n } else {\n const input = document.querySelector('.searchcraft-input') as\n | HTMLInputElement\n | undefined;\n\n if (input) {\n input.focus();\n requestAnimationFrame(() => {\n input.selectionEnd = input.value.length;\n input.selectionStart = input.value.length;\n });\n }\n }\n }\n }\n\n get hasResultsToShow() {\n return (\n this.searchTerm &&\n this.searchTerm?.trim()?.length > 0 &&\n (this.searchResults?.data?.hits?.length || 0) > 0\n );\n }\n\n renderInlinePopover(documents: Record<string, unknown>[]) {\n const isListViewVisible = this.hasResultsToShow && this.isFocused;\n\n const popoverFormClassNames = classNames(\n 'searchcraft-popover-form searchcraft-popover-form-inline',\n {\n 'searchcraft-popover-form-active': isListViewVisible,\n },\n );\n\n return (\n <div class={popoverFormClassNames}>\n <searchcraft-input-form\n config={this.config}\n onInputFocus={this.handleInputFocus.bind(this)}\n />\n {isListViewVisible && (\n <div class='searchcraft-popover-inline-wrapper-outer'>\n <div class='searchcraft-popover-inline-wrapper-inner'>\n <searchcraft-popover-list-view\n popoverResultMappings={this.popoverResultMappings}\n documents={documents}\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n\n renderModalPopover(documents: Record<string, unknown>[]) {\n if (this.isPopoverVisibleInState) {\n const popoverFormClassNames = classNames('searchcraft-popover-form', {\n 'searchcraft-popover-form-active': this.hasResultsToShow,\n });\n\n return (\n <div class='searchcraft-popover-form-modal'>\n {/* biome-ignore lint/a11y/useKeyWithClickEvents: <explanation> */}\n <div\n class='searchcraft-popover-form-modal-backdrop'\n onClick={this.handleModalBackdropClick}\n />\n <div class='searchcraft-popover-form-modal-inner'>\n <div class={popoverFormClassNames}>\n <div class='searchcraft-popover-form-input-wrapper'>\n <searchcraft-input-form\n config={this.config}\n onInputFocus={this.handleInputFocus.bind(this)}\n onInputInit={this.handleInputInit.bind(this)}\n />\n <button\n type='button'\n class='searchcraft-popover-form-cancel-button'\n onClick={this.handleCancelButtonClick.bind(this)}\n >\n Cancel\n </button>\n </div>\n {this.hasResultsToShow && (\n <searchcraft-popover-list-view\n popoverResultMappings={this.popoverResultMappings}\n documents={documents}\n />\n )}\n </div>\n </div>\n </div>\n );\n }\n }\n\n renderFullscreenPopover(documents: Record<string, unknown>[]) {\n if (this.isPopoverVisibleInState) {\n return (\n <div class='searchcraft-popover-form-fullscreen'>\n <div class='searchcraft-popover-form'>\n <div class='searchcraft-popover-form-input-wrapper'>\n <searchcraft-input-form\n config={this.config}\n onInputFocus={this.handleInputFocus.bind(this)}\n onInputInit={this.handleInputInit.bind(this)}\n />\n <button\n type='button'\n class='searchcraft-popover-form-cancel-button'\n onClick={this.handleCancelButtonClick.bind(this)}\n >\n Cancel\n </button>\n </div>\n {this.hasResultsToShow && (\n <searchcraft-popover-list-view\n popoverResultMappings={this.popoverResultMappings}\n documents={documents}\n />\n )}\n </div>\n </div>\n );\n }\n }\n\n render() {\n const documents: Record<string, unknown>[] =\n this.searchResults?.data?.hits?.map((data, _index) => {\n const { doc: result } = data;\n return result;\n }) as Record<string, unknown>[];\n\n switch (this.type) {\n case 'inline':\n return this.renderInlinePopover(documents);\n case 'modal':\n return this.renderModalPopover(documents);\n case 'fullscreen':\n return this.renderFullscreenPopover(documents);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,h as s,F as e}from"./p-7e13c128.js";import{u as r}from"./p-936e2ed4.js";const a=class{constructor(s){t(this,s)}titleContent;subtitleContent;bodyContent;footerContent;buttonLabel;buttonHref;buttonTarget="_blank";buttonRel;containerHref;containerTarget="_blank";containerRel;imageSrc;imageAlt;imagePlacement="right";customStyles;documentPosition=0;searchcraftStore=r.getState();recordMeasureEvent=()=>{const t=this.searchcraftStore.getSearchcraftInstance();if(t){const s=this.documentPosition;const e=this.searchcraftStore.query;const r=this.searchcraftStore.searchResults?.data?.hits?.length||0;t.sendMeasureEvent("document_clicked",{document_position:s,number_of_documents:r,search_term:e})}};parseStyles=()=>{if(this.customStyles){try{return JSON.parse(this.customStyles)}catch(t){console.error("Error parsing custom styles:",t);return{}}}return{}};render(){const t=this.parseStyles();const r=this.imageSrc&&s("img",{alt:this.imageAlt,class:"searchcraft-search-result-image",src:this.imageSrc,style:t.image||{}});const a=s(e,null,this.imageSrc&&this.imagePlacement==="left"&&r,s("div",{class:"searchcraft-base-search-result-content-container"},this.titleContent&&s("h2",{class:"searchcraft-base-search-result-title",style:t.title||{}},this.titleContent),this.subtitleContent&&s("h3",{class:"searchcraft-base-search-result-subtitle",style:t.subtitle||{}},this.subtitleContent),this.bodyContent&&s("p",{class:"searchcraft-base-search-result-body-content",style:t.primaryContent||{}},this.bodyContent),this.footerContent&&s("p",{class:"searchcraft-base-search-result-footer-content",style:t.secondaryContent||{}},this.footerContent),this.buttonHref&&!this.containerHref&&this.buttonLabel&&s("a",{class:"searchcraft-search-result-button",href:this.buttonHref,style:t.button||{},target:this.buttonTarget,rel:this.buttonRel},this.buttonLabel)),this.imageSrc&&this.imagePlacement==="right"&&r);if(this.containerHref){return s("a",{class:"searchcraft-search-result-container",onClick:this.recordMeasureEvent,href:this.containerHref,rel:this.containerRel,style:t.container||{},tabindex:"0",target:this.containerTarget},a)}return s("div",{class:"searchcraft-search-result-container",style:t.container||{}},a)}};export{a as searchcraft_base_search_result};
|
|
2
|
+
//# sourceMappingURL=p-57eddb07.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SearchcraftBaseSearchResult","titleContent","subtitleContent","bodyContent","footerContent","buttonLabel","buttonHref","buttonTarget","buttonRel","containerHref","containerTarget","containerRel","imageSrc","imageAlt","imagePlacement","customStyles","documentPosition","searchcraftStore","useSearchcraftStore","getState","recordMeasureEvent","searchcraft","this","getSearchcraftInstance","document_position","search_term","query","number_of_documents","searchResults","data","hits","length","sendMeasureEvent","parseStyles","JSON","parse","error","console","render","styles","imageContainer","h","alt","class","src","style","image","contentContainer","Fragment","title","subtitle","primaryContent","secondaryContent","href","button","target","rel","onClick","container","tabindex"],"sources":["src/components/searchcraft-base-search-result/searchcraft-base-search-result.tsx"],"sourcesContent":["import { useSearchcraftStore } from '@provider/store';\nimport { Component, Fragment, h, Prop } from '@stencil/core';\n\n/**\n * This web component is designed to display detailed information for a single search result.\n * Once a query is submitted, the component formats and presents the result.\n * It is consumed within the `searchcraft-base-search-results` component.\n */\n@Component({\n tag: 'searchcraft-base-search-result',\n shadow: false,\n})\nexport class SearchcraftBaseSearchResult {\n /**\n * The title content.\n */\n @Prop() titleContent: string | undefined;\n /**\n * The subtitle content.\n */\n @Prop() subtitleContent: string | undefined;\n /**\n * The body content.\n */\n @Prop() bodyContent: string | undefined;\n /**\n * The footer content.\n */\n @Prop() footerContent: string | undefined;\n /**\n * The label for the button rendered when containerHref is not present.\n */\n @Prop() buttonLabel: string | undefined;\n /**\n * The link for the button rendered when containerHref is not present.\n */\n @Prop() buttonHref: string | undefined;\n /**\n * Where to open the link for the button rendered when containerHref is not present.\n */\n @Prop() buttonTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n /**\n * The relationship between the current document and the link for the button rendered when containerHref is not present.\n */\n @Prop() buttonRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n /**\n * The link for the containing element.\n */\n @Prop() containerHref: string | undefined;\n /**\n * Where to open the link for the containing element.\n */\n @Prop() containerTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n /**\n * The relationship between the current document and the link for the containing element.\n */\n @Prop() containerRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n /**\n * The image source.\n */\n @Prop() imageSrc: string | undefined;\n /**\n * The image alternative text.\n */\n @Prop() imageAlt: string | undefined;\n /**\n * The placement of the image.\n */\n @Prop() imagePlacement: 'left' | 'right' = 'right';\n /**\n * A custom styles object.\n */\n @Prop() customStyles: string | undefined;\n /**\n * The position in the document. Used with the \"document_clicked\" measure event.\n */\n @Prop() documentPosition = 0;\n\n private searchcraftStore = useSearchcraftStore.getState();\n\n private recordMeasureEvent = () => {\n const searchcraft = this.searchcraftStore.getSearchcraftInstance();\n\n if (searchcraft) {\n const document_position = this.documentPosition;\n const search_term = this.searchcraftStore.query;\n const number_of_documents =\n this.searchcraftStore.searchResults?.data?.hits?.length || 0;\n\n searchcraft.sendMeasureEvent('document_clicked', {\n document_position,\n number_of_documents,\n search_term,\n });\n }\n };\n\n private parseStyles = (): Record<string, { [key: string]: string }> => {\n if (this.customStyles) {\n try {\n return JSON.parse(this.customStyles);\n } catch (error) {\n console.error('Error parsing custom styles:', error);\n return {};\n }\n }\n return {};\n };\n\n render() {\n const styles = this.parseStyles();\n const imageContainer = this.imageSrc && (\n <img\n alt={this.imageAlt}\n class='searchcraft-search-result-image'\n src={this.imageSrc}\n style={styles.image || {}}\n />\n );\n\n const contentContainer = (\n <Fragment>\n {this.imageSrc && this.imagePlacement === 'left' && imageContainer}\n <div class='searchcraft-base-search-result-content-container'>\n {this.titleContent && (\n <h2\n class='searchcraft-base-search-result-title'\n style={styles.title || {}}\n >\n {this.titleContent}\n </h2>\n )}\n {this.subtitleContent && (\n <h3\n class='searchcraft-base-search-result-subtitle'\n style={styles.subtitle || {}}\n >\n {this.subtitleContent}\n </h3>\n )}\n {this.bodyContent && (\n <p\n class='searchcraft-base-search-result-body-content'\n style={styles.primaryContent || {}}\n >\n {this.bodyContent}\n </p>\n )}\n\n {this.footerContent && (\n <p\n class='searchcraft-base-search-result-footer-content'\n style={styles.secondaryContent || {}}\n >\n {this.footerContent}\n </p>\n )}\n {this.buttonHref && !this.containerHref && this.buttonLabel && (\n <a\n class='searchcraft-search-result-button'\n href={this.buttonHref}\n style={styles.button || {}}\n target={this.buttonTarget}\n rel={this.buttonRel}\n >\n {this.buttonLabel}\n </a>\n )}\n </div>\n {this.imageSrc && this.imagePlacement === 'right' && imageContainer}\n </Fragment>\n );\n\n /** Render as an anchor tag if the containerHref prop is present. */\n if (this.containerHref) {\n return (\n <a\n class='searchcraft-search-result-container'\n onClick={this.recordMeasureEvent}\n href={this.containerHref}\n rel={this.containerRel}\n style={styles.container || {}}\n tabindex='0'\n target={this.containerTarget}\n >\n {contentContainer}\n </a>\n );\n }\n\n /** Render as a div if no href prop. */\n return (\n <div\n class='searchcraft-search-result-container'\n style={styles.container || {}}\n >\n {contentContainer}\n </div>\n );\n }\n}\n"],"mappings":"4FAYaA,EAA2B,M,yBAI9BC,aAIAC,gBAIAC,YAIAC,cAIAC,YAIAC,WAIAC,aAAwD,SAIxDC,UAIAC,cAIAC,gBAA2D,SAI3DC,aAIAC,SAIAC,SAIAC,eAAmC,QAInCC,aAIAC,iBAAmB,EAEnBC,iBAAmBC,EAAoBC,WAEvCC,mBAAqB,KAC3B,MAAMC,EAAcC,KAAKL,iBAAiBM,yBAE1C,GAAIF,EAAa,CACf,MAAMG,EAAoBF,KAAKN,iBAC/B,MAAMS,EAAcH,KAAKL,iBAAiBS,MAC1C,MAAMC,EACJL,KAAKL,iBAAiBW,eAAeC,MAAMC,MAAMC,QAAU,EAE7DV,EAAYW,iBAAiB,mBAAoB,CAC/CR,oBACAG,sBACAF,e,GAKEQ,YAAc,KACpB,GAAIX,KAAKP,aAAc,CACrB,IACE,OAAOmB,KAAKC,MAAMb,KAAKP,a,CACvB,MAAOqB,GACPC,QAAQD,MAAM,+BAAgCA,GAC9C,MAAO,E,EAGX,MAAO,EAAE,EAGX,MAAAE,GACE,MAAMC,EAASjB,KAAKW,cACpB,MAAMO,EAAiBlB,KAAKV,UAC1B6B,EAAA,OACEC,IAAKpB,KAAKT,SACV8B,MAAM,kCACNC,IAAKtB,KAAKV,SACViC,MAAON,EAAOO,OAAS,KAI3B,MAAMC,EACJN,EAACO,EAAQ,KACN1B,KAAKV,UAAYU,KAAKR,iBAAmB,QAAU0B,EACpDC,EAAA,OAAKE,MAAM,oDACRrB,KAAKrB,cACJwC,EAAA,MACEE,MAAM,uCACNE,MAAON,EAAOU,OAAS,IAEtB3B,KAAKrB,cAGTqB,KAAKpB,iBACJuC,EAAA,MACEE,MAAM,0CACNE,MAAON,EAAOW,UAAY,IAEzB5B,KAAKpB,iBAGToB,KAAKnB,aACJsC,EAAA,KACEE,MAAM,8CACNE,MAAON,EAAOY,gBAAkB,IAE/B7B,KAAKnB,aAITmB,KAAKlB,eACJqC,EAAA,KACEE,MAAM,gDACNE,MAAON,EAAOa,kBAAoB,IAEjC9B,KAAKlB,eAGTkB,KAAKhB,aAAegB,KAAKb,eAAiBa,KAAKjB,aAC9CoC,EAAA,KACEE,MAAM,mCACNU,KAAM/B,KAAKhB,WACXuC,MAAON,EAAOe,QAAU,GACxBC,OAAQjC,KAAKf,aACbiD,IAAKlC,KAAKd,WAETc,KAAKjB,cAIXiB,KAAKV,UAAYU,KAAKR,iBAAmB,SAAW0B,GAKzD,GAAIlB,KAAKb,cAAe,CACtB,OACEgC,EAAA,KACEE,MAAM,sCACNc,QAASnC,KAAKF,mBACdiC,KAAM/B,KAAKb,cACX+C,IAAKlC,KAAKX,aACVkC,MAAON,EAAOmB,WAAa,GAC3BC,SAAS,IACTJ,OAAQjC,KAAKZ,iBAEZqC,E,CAMP,OACEN,EAAA,OACEE,MAAM,sCACNE,MAAON,EAAOmB,WAAa,IAE1BX,E","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e,h as t}from"./p-7e13c128.js";import{u as c}from"./p-936e2ed4.js";const a=class{constructor(t){e(this,t)}titleContent;subtitleContent;imageSrc;imageAlt;href;documentPosition=0;componentDidLoad(){}connectedCallback(){}disconnectedCallback(){}handleButtonClick(){}handleLinkClick=()=>{const e=c.getState();const t=e.getSearchcraftInstance();if(t){const c=this.documentPosition;const a=e.query;const s=e.searchResults?.data?.hits?.length||0;t.sendMeasureEvent("document_clicked",{document_position:c,number_of_documents:s,search_term:a})}};render(){return t("a",{key:"b20aae2fc421323774a5129dde7d53d4ae3283fb",class:"searchcraft-popover-list-item",href:this.href,onClick:this.handleLinkClick.bind(this)},this.imageSrc&&t("div",{key:"79541d12ea3adafff2e141cb8946aa3feaea51df",class:"searchcraft-popover-list-item-image-wrapper"},t("img",{key:"3e6368a0f544a58ee0af9d1c15d0c909c6231842",alt:this.imageAlt,src:this.imageSrc,class:"searchcraft-popover-list-item-image"})),t("div",{key:"87e7a9dcc8b868af259b4456e9962af9d8dee498",class:"searchcraft-popover-list-item-info-wrapper"},t("p",{key:"e5b63b4c2752573d0ee0ef52c2903b593a8b94a0",class:"searchcraft-popover-list-item-title"},this.titleContent),t("p",{key:"c506d5d7e569ec20885eb65cdc6476dfb8895a13",class:"searchcraft-popover-list-item-subtitle"},this.subtitleContent)))}};export{a as searchcraft_popover_list_item};
|
|
2
|
+
//# sourceMappingURL=p-5d6fbee0.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SearchcraftPopoverListItem","titleContent","subtitleContent","imageSrc","imageAlt","href","documentPosition","componentDidLoad","connectedCallback","disconnectedCallback","handleButtonClick","handleLinkClick","state","useSearchcraftStore","getState","searchcraft","getSearchcraftInstance","document_position","this","search_term","query","number_of_documents","searchResults","data","hits","length","sendMeasureEvent","render","h","key","class","onClick","bind","alt","src"],"sources":["src/components/searchcraft-popover-list-item/searchcraft-popover-list-item.tsx"],"sourcesContent":["import { useSearchcraftStore } from '@provider/store';\nimport { Component, h, Prop } from '@stencil/core';\n\n/**\n * A single list item rendered in a searchcraft-popover-list-view.\n */\n@Component({\n tag: 'searchcraft-popover-list-item',\n shadow: false,\n})\nexport class SearchcraftPopoverListItem {\n /** The result title */\n @Prop() titleContent: string | undefined;\n /** The result subtitle */\n @Prop() subtitleContent: string | undefined;\n /** The source of the image. If not included, no item will be rendered. */\n @Prop() imageSrc: string | undefined;\n /** The image alt tag. */\n @Prop() imageAlt: string | undefined;\n /** The link href */\n @Prop() href: string | undefined;\n /** The document position relative to the search results (For Measure) */\n @Prop() documentPosition = 0;\n\n componentDidLoad() {}\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n handleButtonClick() {}\n\n handleLinkClick = () => {\n const state = useSearchcraftStore.getState();\n const searchcraft = state.getSearchcraftInstance();\n\n if (searchcraft) {\n const document_position = this.documentPosition;\n const search_term = state.query;\n const number_of_documents = state.searchResults?.data?.hits?.length || 0;\n\n searchcraft.sendMeasureEvent('document_clicked', {\n document_position,\n number_of_documents,\n search_term,\n });\n }\n };\n\n render() {\n return (\n <a\n class='searchcraft-popover-list-item'\n href={this.href}\n onClick={this.handleLinkClick.bind(this)}\n >\n {this.imageSrc && (\n <div class='searchcraft-popover-list-item-image-wrapper'>\n <img\n alt={this.imageAlt}\n src={this.imageSrc}\n class='searchcraft-popover-list-item-image'\n />\n </div>\n )}\n <div class='searchcraft-popover-list-item-info-wrapper'>\n <p class='searchcraft-popover-list-item-title'>{this.titleContent}</p>\n <p class='searchcraft-popover-list-item-subtitle'>\n {this.subtitleContent}\n </p>\n </div>\n </a>\n );\n }\n}\n"],"mappings":"qFAUaA,EAA0B,M,yBAE7BC,aAEAC,gBAEAC,SAEAC,SAEAC,KAEAC,iBAAmB,EAE3B,gBAAAC,GAAgB,CAEhB,iBAAAC,GAAiB,CAEjB,oBAAAC,GAAoB,CAEpB,iBAAAC,GAAiB,CAEjBC,gBAAkB,KAChB,MAAMC,EAAQC,EAAoBC,WAClC,MAAMC,EAAcH,EAAMI,yBAE1B,GAAID,EAAa,CACf,MAAME,EAAoBC,KAAKZ,iBAC/B,MAAMa,EAAcP,EAAMQ,MAC1B,MAAMC,EAAsBT,EAAMU,eAAeC,MAAMC,MAAMC,QAAU,EAEvEV,EAAYW,iBAAiB,mBAAoB,CAC/CT,oBACAI,sBACAF,e,GAKN,MAAAQ,GACE,OACEC,EAAA,KAAAC,IAAA,2CACEC,MAAM,gCACNzB,KAAMa,KAAKb,KACX0B,QAASb,KAAKP,gBAAgBqB,KAAKd,OAElCA,KAAKf,UACJyB,EAAA,OAAAC,IAAA,2CAAKC,MAAM,+CACTF,EAAA,OAAAC,IAAA,2CACEI,IAAKf,KAAKd,SACV8B,IAAKhB,KAAKf,SACV2B,MAAM,yCAIZF,EAAA,OAAAC,IAAA,2CAAKC,MAAM,8CACTF,EAAA,KAAAC,IAAA,2CAAGC,MAAM,uCAAuCZ,KAAKjB,cACrD2B,EAAA,KAAAC,IAAA,2CAAGC,MAAM,0CACNZ,KAAKhB,kB","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,c as s,h as e}from"./p-7e13c128.js";import{u as r}from"./p-936e2ed4.js";import{g as i}from"./p-755f491b.js";import{s as a}from"./p-d9551738.js";const c=class{constructor(e){t(this,e);this.noResults=s(this,"noResults",7)}adInterval=4;customStylesForResults;searchResultMappings;placeAdAtEnd=false;placeAdAtStart=true;resultImagePlacement="right";buttonLabel;buttonTarget="_blank";buttonRel;containerTarget="_blank";containerRel;noResults;hasSearched=false;query="";searchResults=null;unsubscribe=()=>{};componentDidLoad(){this.unsubscribe=r.subscribe((t=>{if(t.query.length>0){this.hasSearched=true}else{this.hasSearched=false}this.searchResults={...t.searchResults};this.query=t.query}));const{searchResults:t,query:s}=r.getState();this.searchResults=t;this.query=s}disconnectedCallback(){if(this.unsubscribe){this.unsubscribe()}}renderDocument(t,s){const r=i(t,this.searchResultMappings?.title);const c=i(t,this.searchResultMappings?.subtitle);const n=i(t,this.searchResultMappings?.body);const o=i(t,this.searchResultMappings?.containerHref);const h=i(t,this.searchResultMappings?.buttonHref);const l=i(t,this.searchResultMappings?.imageSource);const u=i(t,this.searchResultMappings?.footer);let d="";if(this.customStylesForResults){d=typeof this.customStylesForResults==="string"?this.customStylesForResults:a(this.customStylesForResults)}return e("searchcraft-base-search-result",{key:`${t.document_id}-${s}`,"custom-styles":d,"image-placement":this.resultImagePlacement,"container-rel":this.containerRel,"container-target":this.containerTarget,"button-label":this.buttonLabel||"View more","button-rel":this.buttonRel,"button-target":this.buttonTarget,"document-position":s,"title-content":r,"subtitle-content":c,"body-content":n,"footer-content":u,"container-href":o,"button-href":h,"image-src":l})}render(){if(this.query.trim()===""){return e("div",{class:"searchcraft-search-results-empty-state-container"},e("slot",{name:"empty-search"}))}if(!this.searchResults?.data){return}const t=this.searchResults?.data?.hits?.map(((t,s)=>{const{doc:e}=t;return e}));const s=[];if(this.placeAdAtStart){s.push(e("div",{key:"ad-section-start",class:"searchcraft-ad-section"},e("p",null,"Ad Section")))}if(this.adInterval>0){t.forEach(((t,r)=>{s.push(this.renderDocument(t,r));if((r+1)%this.adInterval===0){s.push(e("div",{key:`ad-section-${r+1}`,class:"searchcraft-ad-section "},e("p",null,"Ad Section")))}}))}else{const e=t.map(((t,s)=>this.renderDocument(t,s)));s.push(...e)}if(this.placeAdAtEnd){s.push(e("div",{key:"ad-section-end",class:"searchcraft-ad-section"},e("p",null,"Ad Section")))}if(this.query.length>0&&this.searchResults?.data?.hits?.length===0){this.noResults?.emit()}return e("div",{class:"searchcraft-search-results-container"},s,this.query.length>0&&this.searchResults?.data?.hits?.length===0&&e("div",{class:"searchcraft-search-results-error-message-container"},e("searchcraft-error-message",{"error-message":`No search results found for "${this.query}" query`})))}};export{c as searchcraft_base_search_results};
|
|
2
|
+
//# sourceMappingURL=p-64c5a1d2.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SearchcraftBaseSearchResults","adInterval","customStylesForResults","searchResultMappings","placeAdAtEnd","placeAdAtStart","resultImagePlacement","buttonLabel","buttonTarget","buttonRel","containerTarget","containerRel","noResults","hasSearched","query","searchResults","unsubscribe","componentDidLoad","this","useSearchcraftStore","subscribe","state","length","getState","disconnectedCallback","renderDocument","document","index","titleContent","getDocumentValueFromSearchResultMapping","title","subtitleContent","subtitle","bodyContent","body","containerHref","buttonHref","imageSource","footerContent","footer","serializedStyles","serializeStyles","h","key","document_id","render","trim","class","name","data","documents","hits","map","_index","doc","result","finalComponents","push","forEach","documentElements","emit"],"sources":["src/components/searchcraft-base-search-results/searchcraft-base-search-results.tsx"],"sourcesContent":["import {\n Component,\n h,\n Event,\n Prop,\n State,\n type EventEmitter,\n} from '@stencil/core';\n\nimport type { SearchcraftResponse } from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\n\nimport {\n getDocumentValueFromSearchResultMapping,\n serializeStyles,\n} from '@utils';\nimport type { SearchResultMappings } from 'types';\nimport type { JSX } from '@stencil/core/internal';\n\n/**\n * This web component is responsible for displaying the results of a search query.\n * Once a query is submitted, the component formats and presents an ordered list of the results.\n *\n * ## Usage\n * ```html\n * <!-- index.html -->\n * <searchcraft-base-search-results\n * ad-interval=\"4\"\n * place-ad-at-start=\"false\"\n * result-image-placement=\"right\"\n * />\n * ```\n *\n * ```js\n * // index.js\n * const baseSearchResults = document.querySelector('searchcraft-base-search-results');\n *\n * baseSearchResults.searchResultMappings = containerHref: {\n * fieldNames: [\n * {\n * fieldName: 'canonical_link',\n * dataType: 'text',\n * },\n * ],\n * };\n *\n * baseSearchResults.addEventListener('noResults', () => {\n * console.log('No search results found');\n * });\n * ```\n */\n@Component({\n tag: 'searchcraft-base-search-results',\n shadow: false,\n})\nexport class SearchcraftBaseSearchResults {\n /**\n * How often ads are injected.\n */\n @Prop() adInterval = 4;\n /**\n * A custom styles object.\n */\n @Prop() customStylesForResults:\n | string\n | Record<string, Record<string, string>>\n | undefined;\n /**\n * Formats the content rendered for each result.\n */\n @Prop() searchResultMappings: SearchResultMappings | undefined;\n /**\n * Should an ad be placed at the end of the results.\n */\n @Prop() placeAdAtEnd = false;\n /**\n * Should an ad be placed at the start of the results.\n */\n @Prop() placeAdAtStart = true;\n /**\n * The placement of the image for each result.\n */\n @Prop() resultImagePlacement: 'left' | 'right' = 'right';\n /**\n * The label for the button rendered when containerHref is not present for each result.\n */\n @Prop() buttonLabel: string | undefined;\n /**\n * Where to open the link for the button rendered when containerHref is not present for each result.\n */\n @Prop() buttonTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n /**\n * The relationship between the current document and the link for the button rendered when containerHref is not present for each result.\n */\n @Prop() buttonRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n /**\n * Where to open the link for the containing element for each result.\n */\n @Prop() containerTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n /**\n * The relationship between the current document and the link for the containing element for each result.\n */\n @Prop() containerRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n\n /**\n * When no results are returned.\n */\n @Event() noResults?: EventEmitter<void>;\n\n @State() hasSearched = false;\n @State() query = '';\n @State() searchResults: SearchcraftResponse | null = null;\n\n private unsubscribe: () => void = () => {};\n\n componentDidLoad() {\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (state.query.length > 0) {\n this.hasSearched = true;\n } else {\n this.hasSearched = false;\n }\n this.searchResults = { ...state.searchResults } as SearchcraftResponse;\n this.query = state.query;\n });\n\n const { searchResults, query } = useSearchcraftStore.getState();\n this.searchResults = searchResults;\n this.query = query;\n }\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n renderDocument(document: Record<string, unknown>, index: number) {\n /**\n * Index field values -> Result container props mappings.\n */\n const titleContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.title,\n );\n const subtitleContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.subtitle,\n );\n const bodyContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.body,\n );\n const containerHref = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.containerHref,\n );\n const buttonHref = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.buttonHref,\n );\n const imageSource = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.imageSource,\n );\n const footerContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings?.footer,\n );\n\n let serializedStyles = '';\n if (this.customStylesForResults) {\n serializedStyles =\n typeof this.customStylesForResults === 'string'\n ? this.customStylesForResults\n : serializeStyles(this.customStylesForResults);\n }\n\n return (\n <searchcraft-base-search-result\n key={`${document.document_id}-${index}`}\n custom-styles={serializedStyles}\n image-placement={this.resultImagePlacement}\n container-rel={this.containerRel}\n container-target={this.containerTarget}\n button-label={this.buttonLabel || 'View more'}\n button-rel={this.buttonRel}\n button-target={this.buttonTarget}\n document-position={index}\n title-content={titleContent}\n subtitle-content={subtitleContent}\n body-content={bodyContent}\n footer-content={footerContent}\n container-href={containerHref}\n button-href={buttonHref}\n image-src={imageSource}\n />\n );\n }\n\n render() {\n if (this.query.trim() === '') {\n return (\n <div class='searchcraft-search-results-empty-state-container'>\n <slot name='empty-search' />\n </div>\n );\n }\n\n if (!this.searchResults?.data) {\n return;\n }\n\n const documents: Record<string, unknown>[] =\n this.searchResults?.data?.hits?.map((data, _index) => {\n const { doc: result } = data;\n return result;\n }) as Record<string, unknown>[];\n\n const finalComponents: JSX.Element[] = [];\n\n if (this.placeAdAtStart) {\n finalComponents.push(\n <div key='ad-section-start' class='searchcraft-ad-section'>\n <p>Ad Section</p>\n </div>,\n );\n }\n\n if (this.adInterval > 0) {\n documents.forEach((document, index) => {\n finalComponents.push(this.renderDocument(document, index));\n\n if ((index + 1) % this.adInterval === 0) {\n finalComponents.push(\n <div\n key={`ad-section-${index + 1}`}\n class='searchcraft-ad-section '\n >\n <p>Ad Section</p>\n </div>,\n );\n }\n });\n } else {\n const documentElements = documents.map((document, index) =>\n this.renderDocument(document, index),\n );\n finalComponents.push(...documentElements);\n }\n\n if (this.placeAdAtEnd) {\n finalComponents.push(\n <div key='ad-section-end' class='searchcraft-ad-section'>\n <p>Ad Section</p>\n </div>,\n );\n }\n\n if (this.query.length > 0 && this.searchResults?.data?.hits?.length === 0) {\n this.noResults?.emit();\n }\n\n return (\n <div class='searchcraft-search-results-container'>\n {finalComponents}\n {this.query.length > 0 &&\n this.searchResults?.data?.hits?.length === 0 && (\n <div class='searchcraft-search-results-error-message-container'>\n <searchcraft-error-message\n error-message={`No search results found for \"${this.query}\" query`}\n />\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const e="searchcraft-javascript-sdk";const t={allRenderFn:true,appendChildSlotFix:false,asyncLoading:true,asyncQueue:false,attachStyles:true,cloneNodeFix:false,cmpDidLoad:true,cmpDidRender:false,cmpDidUnload:false,cmpDidUpdate:false,cmpShouldUpdate:false,cmpWillLoad:false,cmpWillRender:false,cmpWillUpdate:false,connectedCallback:true,constructableCSS:true,cssAnnotations:true,devTools:false,disconnectedCallback:true,element:false,event:true,experimentalScopedSlotChanges:false,experimentalSlotFixes:false,formAssociated:false,hasRenderFn:true,hostListener:false,hostListenerTarget:false,hostListenerTargetBody:false,hostListenerTargetDocument:false,hostListenerTargetParent:false,hostListenerTargetWindow:false,hotModuleReplacement:false,hydrateClientSide:false,hydrateServerSide:false,hydratedAttribute:false,hydratedClass:true,hydratedSelectorName:"hydrated",initializeNextTick:false,invisiblePrehydration:true,isDebug:false,isDev:false,isTesting:false,lazyLoad:true,lifecycle:true,lifecycleDOMEvents:false,member:true,method:false,mode:false,modernPropertyDecls:true,observeAttribute:true,profile:false,prop:true,propBoolean:true,propMutable:false,propNumber:true,propString:true,reflect:false,scoped:false,scopedSlotTextContentFix:false,scriptDataOpts:false,shadowDelegatesFocus:false,shadowDom:false,slot:true,slotChildNodesFix:false,slotRelocation:true,state:true,style:false,svg:true,taskQueue:true,transformTagName:false,updatable:true,vdomAttribute:true,vdomClass:true,vdomFunctional:true,vdomKey:true,vdomListener:true,vdomPropOrAttr:true,vdomRef:false,vdomRender:true,vdomStyle:true,vdomText:true,vdomXlink:false,watchCallback:true};var r=Object.defineProperty;var n=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:true})};var l="http://www.w3.org/2000/svg";var s="http://www.w3.org/1999/xhtml";var i=(e,t)=>{var r;const n=t.t;const l=Object.entries((r=n.l)!=null?r:{});l.map((([r,[n]])=>{if(n&31||n&32){const n=e[r];const l=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),r);Object.defineProperty(e,r,{get(){return l.get.call(this)},set(e){l.set.call(this,e)},configurable:true,enumerable:true});e[r]=t.i.has(r)?t.i.get(r):n}}))};var o=new WeakMap;var a=e=>o.get(e);var f=(e,t)=>{o.set(t.o=e,t);{i(e,t)}};var c=(e,t)=>{const r={u:0,$hostElement$:e,t,i:new Map};{r.v=new Promise((e=>r.h=e));e["s-p"]=[];e["s-rc"]=[]}const n=o.set(e,r);return n};var u=(e,t)=>t in e;var v=(e,t)=>(0,console.error)(e,t);var d=new Map;var h=(e,t,r)=>{const n=e.p.replace(/-/g,"_");const l=e.m;if(!l){return void 0}const s=d.get(l);if(s){return s[n]}
|
|
2
|
+
/*!__STENCIL_STATIC_IMPORT_SWITCH__*/return import(`./${l}.entry.js${""}`).then((e=>{{d.set(l,e)}return e[n]}),(e=>{v(e,t.$hostElement$)}))};var p="{visibility:hidden}.hydrated{visibility:inherit}";var m="slot-fb{display:contents}slot-fb[hidden]{display:none}";var b=typeof window!=="undefined"?window:{};var y=b.document||{head:{}};var w={u:0,$:"",jmp:e=>e(),raf:e=>requestAnimationFrame(e),ael:(e,t,r,n)=>e.addEventListener(t,r,n),rel:(e,t,r,n)=>e.removeEventListener(t,r,n),ce:(e,t)=>new CustomEvent(e,t)};var g=t.shadowDom;var $=e=>Promise.resolve(e);var O=false;var j=[];var S=[];var k=(e,t)=>r=>{e.push(r);if(!O){O=true;if(t&&w.u&4){x(T)}else{w.raf(T)}}};var C=e=>{for(let t=0;t<e.length;t++){try{e[t](performance.now())}catch(e){v(e)}}e.length=0};var T=()=>{C(j);{C(S);if(O=j.length>0){w.raf(T)}}};var x=e=>$().then(e);var L=k(S,true);var F=e=>{e=typeof e;return e==="object"||e==="function"};function R(e){var t,r,n;return(n=(r=(t=e.head)==null?void 0:t.querySelector('meta[name="csp-nonce"]'))==null?void 0:r.getAttribute("content"))!=null?n:void 0}var D={};n(D,{err:()=>M,map:()=>N,ok:()=>E,unwrap:()=>P,unwrapErr:()=>A});var E=e=>({isOk:true,isErr:false,value:e});var M=e=>({isOk:false,isErr:true,value:e});function N(e,t){if(e.isOk){const r=t(e.value);if(r instanceof Promise){return r.then((e=>E(e)))}else{return E(r)}}if(e.isErr){const t=e.value;return M(t)}throw"should never get here"}var P=e=>{if(e.isOk){return e.value}else{throw e.value}};var A=e=>{if(e.isErr){return e.value}else{throw e.value}};var U=e=>{const t=e.__childNodes||e.childNodes;if(e.tagName&&e.tagName.includes("-")&&e["s-cr"]&&e.tagName!=="SLOT-FB"){W(t,e.tagName).forEach((e=>{var t;if(e.nodeType===1&&e.tagName==="SLOT-FB"){if((t=B(e,e["s-sn"],false))==null?void 0:t.length){e.hidden=true}else{e.hidden=false}}}))}for(const e of t){if(e.nodeType===1&&(e.__childNodes||e.childNodes).length){U(e)}}};function W(e,t,r){let n=0;let l=[];let s;for(;n<e.length;n++){s=e[n];if(s["s-sr"]&&s["s-hn"]===t&&(r===void 0||s["s-sn"]===r)){l.push(s);if(typeof r!=="undefined")return l}l=[...l,...W(s.childNodes,t,r)]}return l}var B=(e,t,r=true)=>{const n=[];if(r&&e["s-sr"]||!e["s-sr"])n.push(e);while((e=e.nextSibling)&&e["s-sn"]===t){n.push(e)}return n};var z=(e,t)=>{if(e.nodeType===1){if(e.getAttribute("slot")===null&&t===""){return true}if(e.getAttribute("slot")===t){return true}return false}if(e["s-sn"]===t){return true}return t===""};var H=(e,t="")=>{{return()=>{}}};var Q=(e,t)=>{{return()=>{}}};var V=(e,t,...r)=>{let n=null;let l=null;let s=null;let i=false;let o=false;const a=[];const f=t=>{for(let r=0;r<t.length;r++){n=t[r];if(Array.isArray(n)){f(n)}else if(n!=null&&typeof n!=="boolean"){if(i=typeof e!=="function"&&!F(n)){n=String(n)}if(i&&o){a[a.length-1].O+=n}else{a.push(i?q(null,n):n)}o=i}}};f(r);if(t){if(t.key){l=t.key}if(t.name){s=t.name}{const e=t.className||t.class;if(e){t.class=typeof e!=="object"?e:Object.keys(e).filter((t=>e[t])).join(" ")}}}if(typeof e==="function"){return e(t===null?{}:t,a,K)}const c=q(e,null);c.j=t;if(a.length>0){c.S=a}{c.k=l}{c.C=s}return c};var q=(e,t)=>{const r={u:0,T:e,O:t,L:null,S:null};{r.j=null}{r.k=null}{r.C=null}return r};var G={};var I=e=>e&&e.T===G;var K={forEach:(e,t)=>e.map(X).forEach(t),map:(e,t)=>e.map(X).map(t).map(_)};var X=e=>({vattrs:e.j,vchildren:e.S,vkey:e.k,vname:e.C,vtag:e.T,vtext:e.O});var _=e=>{if(typeof e.vtag==="function"){const t={...e.vattrs};if(e.vkey){t.key=e.vkey}if(e.vname){t.name=e.vname}return V(e.vtag,t,...e.vchildren||[])}const t=q(e.vtag,e.vtext);t.j=e.vattrs;t.S=e.vchildren;t.k=e.vkey;t.C=e.vname;return t};var J=(e,t)=>{if(e!=null&&!F(e)){if(t&4){return e==="false"?false:e===""||!!e}if(t&2){return parseFloat(e)}if(t&1){return String(e)}return e}return e};var Y=e=>a(e).$hostElement$;var Z=(e,t,r)=>{const n=Y(e);return{emit:e=>ee(n,t,{bubbles:!!(r&4),composed:!!(r&2),cancelable:!!(r&1),detail:e})}};var ee=(e,t,r)=>{const n=w.ce(t,r);e.dispatchEvent(n);return n};var te=new WeakMap;var re=(e,t,r,n,l,s)=>{if(r!==n){let i=u(e,t);let o=t.toLowerCase();if(t==="class"){const t=e.classList;const l=le(r);let s=le(n);if(e["s-si"]){s.push(e["s-si"]);l.forEach((t=>{if(t.startsWith(e["s-si"]))s.push(t)}));s=[...new Set(s)];t.add(...s);delete e["s-si"]}else{t.remove(...l.filter((e=>e&&!s.includes(e))));t.add(...s.filter((e=>e&&!l.includes(e))))}}else if(t==="style"){{for(const t in r){if(!n||n[t]==null){if(t.includes("-")){e.style.removeProperty(t)}else{e.style[t]=""}}}}for(const t in n){if(!r||n[t]!==r[t]){if(t.includes("-")){e.style.setProperty(t,n[t])}else{e.style[t]=n[t]}}}}else if(t==="key");else if(!i&&t[0]==="o"&&t[1]==="n"){if(t[2]==="-"){t=t.slice(3)}else if(u(b,o)){t=o.slice(2)}else{t=o[2]+t.slice(3)}if(r||n){const l=t.endsWith(se);t=t.replace(ie,"");if(r){w.rel(e,t,r,l)}if(n){w.ael(e,t,n,l)}}}else{const o=F(n);if((i||o&&n!==null)&&!l){try{if(!e.tagName.includes("-")){const l=n==null?"":n;if(t==="list"){i=false}else if(r==null||e[t]!=l){if(typeof e.__lookupSetter__(t)==="function"){e[t]=l}else{e.setAttribute(t,l)}}}else if(e[t]!==n){e[t]=n}}catch(e){}}if(n==null||n===false){if(n!==false||e.getAttribute(t)===""){{e.removeAttribute(t)}}}else if((!i||s&4||l)&&!o){n=n===true?"":n;{e.setAttribute(t,n)}}}}};var ne=/\s/;var le=e=>{if(typeof e==="object"&&"baseVal"in e){e=e.baseVal}if(!e){return[]}return e.split(ne)};var se="Capture";var ie=new RegExp(se+"$");var oe=(e,t,r)=>{const n=t.L.nodeType===11&&t.L.host?t.L.host:t.L;const l=e&&e.j||{};const s=t.j||{};{for(const e of ae(Object.keys(l))){if(!(e in s)){re(n,e,l[e],void 0,r,t.u)}}}for(const e of ae(Object.keys(s))){re(n,e,l[e],s[e],r,t.u)}};function ae(e){return e.includes("ref")?[...e.filter((e=>e!=="ref")),"ref"]:e}var fe;var ce;var ue=false;var ve=false;var de=false;var he=false;var pe=(e,r,n)=>{var i;const o=r.S[n];let a=0;let f;let c;let u;if(!ue){de=true;if(o.T==="slot"){o.u|=o.S?2:1}}if(o.O!==null){f=o.L=y.createTextNode(o.O)}else if(o.u&1){f=o.L=y.createTextNode("")}else{if(!he){he=o.T==="svg"}f=o.L=y.createElementNS(he?l:s,!ue&&t.slotRelocation&&o.u&2?"slot-fb":o.T);if(he&&o.T==="foreignObject"){he=false}{oe(null,o,he)}if(o.S){for(a=0;a<o.S.length;++a){c=pe(e,o,a);if(c){f.appendChild(c)}}}{if(o.T==="svg"){he=false}else if(f.tagName==="foreignObject"){he=true}}}f["s-hn"]=ce;{if(o.u&(2|1)){f["s-sr"]=true;f["s-cr"]=fe;f["s-sn"]=o.C||"";f["s-rf"]=(i=o.j)==null?void 0:i.ref;u=e&&e.S&&e.S[n];if(u&&u.T===o.T&&e.L){{me(e.L,false)}}}}return f};var me=(e,r)=>{w.u|=1;const n=Array.from(e.__childNodes||e.childNodes);if(e["s-sr"]&&t.experimentalSlotFixes){let t=e;while(t=t.nextSibling){if(t&&t["s-sn"]===e["s-sn"]&&t["s-sh"]===ce){n.push(t)}}}for(let e=n.length-1;e>=0;e--){const t=n[e];if(t["s-hn"]!==ce&&t["s-ol"]){ke($e(t).parentNode,t,$e(t));t["s-ol"].remove();t["s-ol"]=void 0;t["s-sh"]=void 0;de=true}if(r){me(t,r)}}w.u&=~1};var be=(e,t,r,n,l,s)=>{let i=e["s-cr"]&&e["s-cr"].parentNode||e;let o;for(;l<=s;++l){if(n[l]){o=pe(null,r,l);if(o){n[l].L=o;ke(i,o,$e(t))}}}};var ye=(e,t,r)=>{for(let n=t;n<=r;++n){const t=e[n];if(t){const e=t.L;if(e){{ve=true;if(e["s-ol"]){e["s-ol"].remove()}else{me(e,true)}}e.remove()}}}};var we=(e,t,r,n,l=false)=>{let s=0;let i=0;let o=0;let a=0;let f=t.length-1;let c=t[0];let u=t[f];let v=n.length-1;let d=n[0];let h=n[v];let p;let m;while(s<=f&&i<=v){if(c==null){c=t[++s]}else if(u==null){u=t[--f]}else if(d==null){d=n[++i]}else if(h==null){h=n[--v]}else if(ge(c,d,l)){Oe(c,d,l);c=t[++s];d=n[++i]}else if(ge(u,h,l)){Oe(u,h,l);u=t[--f];h=n[--v]}else if(ge(c,h,l)){if(c.T==="slot"||h.T==="slot"){me(c.L.parentNode,false)}Oe(c,h,l);ke(e,c.L,u.L.nextSibling);c=t[++s];h=n[--v]}else if(ge(u,d,l)){if(c.T==="slot"||h.T==="slot"){me(u.L.parentNode,false)}Oe(u,d,l);ke(e,u.L,c.L);u=t[--f];d=n[++i]}else{o=-1;{for(a=s;a<=f;++a){if(t[a]&&t[a].k!==null&&t[a].k===d.k){o=a;break}}}if(o>=0){m=t[o];if(m.T!==d.T){p=pe(t&&t[i],r,o)}else{Oe(m,d,l);t[o]=void 0;p=m.L}d=n[++i]}else{p=pe(t&&t[i],r,i);d=n[++i]}if(p){{ke($e(c.L).parentNode,p,$e(c.L))}}}}if(s>f){be(e,n[v+1]==null?null:n[v+1].L,r,n,i,v)}else if(i>v){ye(t,s,f)}};var ge=(e,t,r=false)=>{if(e.T===t.T){if(e.T==="slot"){return e.C===t.C}if(!r){return e.k===t.k}if(r&&!e.k&&t.k){e.k=t.k}return true}return false};var $e=e=>e&&e["s-ol"]||e;var Oe=(e,r,n=false)=>{const l=r.L=e.L;const s=e.S;const i=r.S;const o=r.T;const a=r.O;let f;if(a===null){{he=o==="svg"?true:o==="foreignObject"?false:he}{if(o==="slot"&&!ue);else{oe(e,r,he)}}if(s!==null&&i!==null){we(l,s,r,i,n)}else if(i!==null){if(e.O!==null){l.textContent=""}be(l,null,r,i,0,i.length-1)}else if(!n&&t.updatable&&s!==null){ye(s,0,s.length-1)}if(he&&o==="svg"){he=false}}else if(f=l["s-cr"]){f.parentNode.textContent=a}else if(e.O!==a){l.data=a}};var je=[];var Se=e=>{let r;let n;let l;const s=e.__childNodes||e.childNodes;for(const e of s){if(e["s-sr"]&&(r=e["s-cr"])&&r.parentNode){n=r.parentNode.__childNodes||r.parentNode.childNodes;const s=e["s-sn"];for(l=n.length-1;l>=0;l--){r=n[l];if(!r["s-cn"]&&!r["s-nr"]&&r["s-hn"]!==e["s-hn"]&&!t.experimentalSlotFixes){if(z(r,s)){let t=je.find((e=>e.F===r));ve=true;r["s-sn"]=r["s-sn"]||s;if(t){t.F["s-sh"]=e["s-hn"];t.R=e}else{r["s-sh"]=e["s-hn"];je.push({R:e,F:r})}if(r["s-sr"]){je.map((e=>{if(z(e.F,r["s-sn"])){t=je.find((e=>e.F===r));if(t&&!e.R){e.R=t.R}}}))}}else if(!je.some((e=>e.F===r))){je.push({F:r})}}}}if(e.nodeType===1){Se(e)}}};var ke=(e,t,r)=>{{return e==null?void 0:e.insertBefore(t,r)}};var Ce=(e,t,r=false)=>{var n,l,s,i;const o=e.$hostElement$;const a=e.D||q(null,null);const f=I(t)?t:V(null,null,t);ce=o.tagName;if(r&&f.j){for(const e of Object.keys(f.j)){if(o.hasAttribute(e)&&!["key","ref","style","class"].includes(e)){f.j[e]=o[e]}}}f.T=null;f.u|=4;e.D=f;f.L=a.L=o;ue=g;{fe=o["s-cr"];ve=false}Oe(a,f,r);{w.u|=1;if(de){Se(f.L);for(const e of je){const t=e.F;if(!t["s-ol"]){const e=y.createTextNode("");e["s-nr"]=t;ke(t.parentNode,t["s-ol"]=e,t)}}for(const e of je){const t=e.F;const o=e.R;if(o){const e=o.parentNode;let r=o.nextSibling;{let s=(n=t["s-ol"])==null?void 0:n.previousSibling;while(s){let n=(l=s["s-nr"])!=null?l:null;if(n&&n["s-sn"]===t["s-sn"]&&e===(n.__parentNode||n.parentNode)){n=n.nextSibling;while(n===t||(n==null?void 0:n["s-sr"])){n=n==null?void 0:n.nextSibling}if(!n||!n["s-nr"]){r=n;break}}s=s.previousSibling}}const i=t.__parentNode||t.parentNode;const a=t.__nextSibling||t.nextSibling;if(!r&&e!==i||a!==r){if(t!==r){if(!t["s-hn"]&&t["s-ol"]){t["s-hn"]=t["s-ol"].parentNode.nodeName}ke(e,t,r);if(t.nodeType===1&&t.tagName!=="SLOT-FB"){t.hidden=(s=t["s-ih"])!=null?s:false}}}t&&typeof o["s-rf"]==="function"&&o["s-rf"](t)}else{if(t.nodeType===1){if(r){t["s-ih"]=(i=t.hidden)!=null?i:false}t.hidden=true}}}}if(ve){U(f.L)}w.u&=~1;je.length=0}fe=void 0};var Te=(e,t)=>{if(t&&!e.M&&t["s-p"]){const r=t["s-p"].push(new Promise((n=>e.M=()=>{t["s-p"].splice(r-1,1);n()})))}};var xe=(e,t)=>{{e.u|=16}if(e.u&4){e.u|=512;return}Te(e,e.N);const r=()=>Le(e,t);return L(r)};var Le=(e,t)=>{const r=e.$hostElement$;const n=H("scheduleUpdate",e.t.p);const l=e.o;if(!l){throw new Error(`Can't render component <${r.tagName.toLowerCase()} /> with invalid Stencil runtime! Make sure this imported component is compiled with a \`externalRuntime: true\` flag. For more information, please refer to https://stenciljs.com/docs/custom-elements#externalruntime`)}let s;n();return Fe(s,(()=>De(e,l,t)))};var Fe=(e,t)=>Re(e)?e.then(t).catch((e=>{console.error(e);t()})):t();var Re=e=>e instanceof Promise||e&&e.then&&typeof e.then==="function";var De=async(e,t,r)=>{var n;const l=e.$hostElement$;const s=H("update",e.t.p);const i=l["s-rc"];const o=H("render",e.t.p);{Ee(e,t,l,r)}if(i){i.map((e=>e()));l["s-rc"]=void 0}o();s();{const t=(n=l["s-p"])!=null?n:[];const r=()=>Me(e);if(t.length===0){r()}else{Promise.all(t).then(r);e.u|=4;t.length=0}}};var Ee=(e,t,r,n)=>{try{t=t.render();{e.u&=~16}{e.u|=2}{{{Ce(e,t,n)}}}}catch(t){v(t,e.$hostElement$)}return null};var Me=e=>{const t=e.t.p;const r=e.$hostElement$;const n=H("postUpdate",t);const l=e.o;const s=e.N;if(!(e.u&64)){e.u|=64;{Ae(r)}{Pe(l,"componentDidLoad",void 0,r)}n();{e.h(r);if(!s){Ne()}}}else{n()}{if(e.M){e.M();e.M=void 0}if(e.u&512){x((()=>xe(e,false)))}e.u&=~(4|512)}};var Ne=t=>{{Ae(y.documentElement)}x((()=>ee(b,"appload",{detail:{namespace:e}})))};var Pe=(e,t,r,n)=>{if(e&&e[t]){try{return e[t](r)}catch(e){v(e,n)}}return void 0};var Ae=e=>{var r;return e.classList.add((r=t.hydratedSelectorName)!=null?r:"hydrated")};var Ue=(e,t)=>a(e).i.get(t);var We=(e,t,r,n)=>{const l=a(e);if(!l){throw new Error(`Couldn't find host element for "${n.p}" as it is unknown to this Stencil runtime. This usually happens when integrating a 3rd party Stencil component with another Stencil component or application. Please reach out to the maintainers of the 3rd party Stencil component or report this on the Stencil Discord server (https://chat.stenciljs.com) or comment on this similar [GitHub issue](https://github.com/ionic-team/stencil/issues/5457).`)}const s=l.$hostElement$;const i=l.i.get(t);const o=l.u;const f=l.o;r=J(r,n.l[t][0]);const c=Number.isNaN(i)&&Number.isNaN(r);const u=r!==i&&!c;if((!(o&8)||i===void 0)&&u){l.i.set(t,r);if(f){if(n.P&&o&128){const e=n.P[t];if(e){e.map((e=>{try{f[e](r,i,t)}catch(e){v(e,s)}}))}}if((o&(2|16))===2){xe(l,false)}}}};var Be=(e,r,n)=>{var l,s;const i=e.prototype;if(r.l||(r.P||e.watchers)){if(e.watchers&&!r.P){r.P=e.watchers}const o=Object.entries((l=r.l)!=null?l:{});o.map((([e,[t]])=>{if(t&31||n&2&&t&32){const{get:l,set:s}=Object.getOwnPropertyDescriptor(i,e)||{};if(l)r.l[e][0]|=2048;if(s)r.l[e][0]|=4096;if(n&1||!l){Object.defineProperty(i,e,{get(){{if((r.l[e][0]&2048)===0){return Ue(this,e)}const t=a(this);const n=t?t.o:i;if(!n)return;return n[e]}},configurable:true,enumerable:true})}Object.defineProperty(i,e,{set(l){const i=a(this);if(s){const n=t&32?this[e]:i.$hostElement$[e];if(typeof n==="undefined"&&i.i.get(e)){l=i.i.get(e)}else if(!i.i.get(e)&&n){i.i.set(e,n)}s.apply(this,[J(l,t)]);l=t&32?this[e]:i.$hostElement$[e];We(this,e,l,r);return}{if((n&1)===0||(r.l[e][0]&4096)===0){We(this,e,l,r);if(n&1&&!i.o){i.v.then((()=>{if(r.l[e][0]&4096&&i.o[e]!==i.i.get(e)){i.o[e]=l}}))}return}const s=()=>{const n=i.o[e];if(!i.i.get(e)&&n){i.i.set(e,n)}i.o[e]=J(l,t);We(this,e,i.o[e],r)};if(i.o){s()}else{i.v.then((()=>s()))}}}})}}));if(n&1){const n=new Map;i.attributeChangedCallback=function(e,l,s){w.jmp((()=>{var o;const f=n.get(e);if(this.hasOwnProperty(f)&&t.lazyLoad){s=this[f];delete this[f]}else if(i.hasOwnProperty(f)&&typeof this[f]==="number"&&this[f]==s){return}else if(f==null){const t=a(this);const n=t==null?void 0:t.u;if(n&&!(n&8)&&n&128&&s!==l){const n=t.o;const i=(o=r.P)==null?void 0:o[e];i==null?void 0:i.forEach((t=>{if(n[t]!=null){n[t].call(n,s,l,e)}}))}return}const c=Object.getOwnPropertyDescriptor(i,f);s=s===null&&typeof this[f]==="boolean"?false:s;if(s!==this[f]&&(!c.get||!!c.set)){this[f]=s}}))};e.observedAttributes=Array.from(new Set([...Object.keys((s=r.P)!=null?s:{}),...o.filter((([e,t])=>t[0]&15)).map((([e,t])=>{const r=t[1]||e;n.set(r,e);return r}))]))}}return e};var ze=async(e,t,r,n)=>{let l;if((t.u&32)===0){t.u|=32;{const n=h(r,t);if(n&&"then"in n){const e=Q();l=await n;e()}else{l=n}if(!l){throw new Error(`Constructor for "${r.p}#${t.A}" was not found`)}if(!l.isProxied){{r.P=l.watchers}Be(l,r,2);l.isProxied=true}const s=H("createInstance",r.p);{t.u|=8}try{new l(t)}catch(t){v(t,e)}{t.u&=~8}{t.u|=128}s();He(t.o,e)}}const s=t.N;const i=()=>xe(t,true);if(s&&s["s-rc"]){s["s-rc"].push(i)}else{i()}};var He=(e,t)=>{{Pe(e,"connectedCallback",void 0,t)}};var Qe=e=>{if((w.u&1)===0){const t=a(e);const r=t.t;const n=H("connectedCallback",r.p);if(!(t.u&1)){t.u|=1;{if(r.u&(4|8)){Ve(e)}}{let r=e;while(r=r.parentNode||r.host){if(r["s-p"]){Te(t,t.N=r);break}}}if(r.l){Object.entries(r.l).map((([t,[r]])=>{if(r&31&&e.hasOwnProperty(t)){const r=e[t];delete e[t];e[t]=r}}))}{ze(e,t,r)}}else{if(t==null?void 0:t.o){He(t.o,e)}else if(t==null?void 0:t.v){t.v.then((()=>He(t.o,e)))}}n()}};var Ve=e=>{const t=e["s-cr"]=y.createComment("");t["s-cn"]=true;ke(e,t,e.firstChild)};var qe=(e,t)=>{{Pe(e,"disconnectedCallback",void 0,t||e)}};var Ge=async e=>{if((w.u&1)===0){const t=a(e);if(t==null?void 0:t.o){qe(t.o,e)}else if(t==null?void 0:t.v){t.v.then((()=>qe(t.o,e)))}}if(te.has(e)){te.delete(e)}if(e.shadowRoot&&te.has(e.shadowRoot)){te.delete(e.shadowRoot)}};var Ie=(e,t={})=>{var r;const n=H();const l=[];const s=t.exclude||[];const i=b.customElements;const o=y.head;const f=o.querySelector("meta[charset]");const u=y.createElement("style");const v=[];let d;let h=true;Object.assign(w,t);w.$=new URL(t.resourcesUrl||"./",y.baseURI).href;let g=false;e.map((e=>{e[1].map((t=>{var r;const n={u:t[0],p:t[1],l:t[2],U:t[3]};if(n.u&4){g=true}{n.l=t[2]}{n.P=(r=t[4])!=null?r:{}}const o=n.p;const f=class extends HTMLElement{constructor(e){super(e);this.hasRegisteredEventListeners=false;e=this;c(e,n)}connectedCallback(){a(this);if(!this.hasRegisteredEventListeners){this.hasRegisteredEventListeners=true}if(d){clearTimeout(d);d=null}if(h){v.push(this)}else{w.jmp((()=>Qe(this)))}}disconnectedCallback(){w.jmp((()=>Ge(this)));w.raf((()=>{var e;const t=a(this);if(((e=t==null?void 0:t.D)==null?void 0:e.L)instanceof Node&&!t.D.L.isConnected){delete t.D.L}}))}componentOnReady(){return a(this).v}};n.m=e[0];if(!s.includes(o)&&!i.get(o)){l.push(o);i.define(o,Be(f,n,1))}}))}));if(l.length>0){if(g){u.textContent+=m}{u.textContent+=l.sort()+p}if(u.innerHTML.length){u.setAttribute("data-styles","");const e=(r=w.W)!=null?r:R(y);if(e!=null){u.setAttribute("nonce",e)}o.insertBefore(u,f?f.nextSibling:o.firstChild)}}h=false;if(v.length){v.map((e=>e.connectedCallback()))}else{{w.jmp((()=>d=setTimeout(Ne,30)))}}n()};var Ke=(e,t)=>t;var Xe=e=>w.W=e;export{Ke as F,Ie as b,Z as c,Y as g,V as h,$ as p,f as r,Xe as s};
|
|
3
|
+
//# sourceMappingURL=p-7e13c128.js.map
|