@coveo/atomic 3.35.0-pre.071f1e25e0 → 3.35.0-pre.0b174e23a6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atomic/_atomic.esm.js +1 -1
- package/dist/atomic/atomic.esm.js.map +1 -1
- package/dist/atomic/components/_index.d.ts +0 -20
- package/dist/atomic/components/_index.js +0 -10
- package/dist/atomic/components/atomic-focus-trap2.js +1 -1
- package/dist/atomic/components/atomic-folded-result-list.js +2 -44
- package/dist/atomic/components/atomic-folded-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-insight-folded-result-list.js +4 -40
- package/dist/atomic/components/atomic-insight-folded-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-insight-result-action-bar.js +5 -1
- package/dist/atomic/components/atomic-insight-result-action-bar.js.map +1 -1
- package/dist/atomic/components/atomic-insight-result-children.js +4 -40
- package/dist/atomic/components/atomic-insight-result-children.js.map +1 -1
- package/dist/atomic/components/atomic-insight-result-list.js +4 -40
- package/dist/atomic/components/atomic-insight-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-ipx-recs-list.js +4 -40
- package/dist/atomic/components/atomic-ipx-recs-list.js.map +1 -1
- package/dist/atomic/components/atomic-recs-interface.js +1 -1
- package/dist/atomic/components/atomic-recs-list.js +4 -40
- package/dist/atomic/components/atomic-recs-list.js.map +1 -1
- package/dist/atomic/components/atomic-refine-modal2.js +1 -1
- package/dist/atomic/components/atomic-result-children.js +2 -44
- package/dist/atomic/components/atomic-result-children.js.map +1 -1
- package/dist/atomic/components/atomic-result-list.js +2 -44
- package/dist/atomic/components/atomic-result-list.js.map +1 -1
- package/dist/atomic/components/atomic-result-placeholder2.js +1 -37
- package/dist/atomic/components/atomic-result-placeholder2.js.map +1 -1
- package/dist/atomic/components/atomic-search-box.js +3 -7
- package/dist/atomic/components/atomic-search-box.js.map +1 -1
- package/dist/atomic/components/atomic-smart-snippet-answer2.js +1 -1
- package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.js +1 -3
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.js +0 -5
- package/dist/atomic/components/components/commerce/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.js +0 -3
- package/dist/atomic/components/components/common/breadbox/breadcrumb-button.js +1 -6
- package/dist/atomic/components/components/common/search-box/text-area-clear-button.js +1 -1
- package/dist/atomic/components/components/search/atomic-result/atomic-result.js +218 -0
- package/dist/atomic/components/components/search/atomic-result/atomic-result.tw.css.js +3 -0
- package/dist/atomic/components/components/search/atomic-result-section-actions/atomic-result-section-actions.js +25 -0
- package/dist/atomic/components/components/search/atomic-result-section-badges/atomic-result-section-badges.js +24 -0
- package/dist/atomic/components/components/search/atomic-result-section-bottom-metadata/atomic-result-section-bottom-metadata.js +25 -0
- package/dist/atomic/components/components/search/atomic-result-section-children/atomic-result-section-children.js +21 -0
- package/dist/atomic/components/components/search/atomic-result-section-emphasized/atomic-result-section-emphasized.js +23 -0
- package/dist/atomic/components/components/search/atomic-result-section-excerpt/atomic-result-section-excerpt.js +24 -0
- package/dist/atomic/components/components/search/atomic-result-section-title/atomic-result-section-title.js +24 -0
- package/dist/atomic/components/components/search/atomic-result-section-title-metadata/atomic-result-section-title-metadata.js +24 -0
- package/dist/atomic/components/components/search/atomic-result-section-visual/atomic-result-section-visual.js +29 -0
- package/dist/atomic/components/components/search/atomic-search-interface/atomic-search-interface.js +2 -0
- package/dist/atomic/components/components/search/index.js +10 -0
- package/dist/atomic/components/components/search/lazy-index.js +10 -0
- package/dist/atomic/components/components/search/result-template-component-utils/context/result-context-controller.js +14 -0
- package/dist/atomic/components/global/environment.js +1 -1
- package/dist/atomic/components/index.js.map +1 -1
- package/dist/atomic/components/item-layout-sections.js +1 -1
- package/dist/atomic/components/mixins/item-section-mixin.js +6 -6
- package/dist/atomic/components/props-utils.js +1 -1
- package/dist/atomic/components/result-template-common.js +1 -1
- package/dist/atomic/components/stencil-suggestion-manager.js +1 -1
- package/dist/atomic/components/stencil-suggestion-manager.js.map +1 -1
- package/dist/atomic/components/utils.js +1 -1
- package/dist/atomic/lang/cs.json +1 -1
- package/dist/atomic/lang/da.json +1 -1
- package/dist/atomic/lang/de.json +1 -1
- package/dist/atomic/lang/dev.json +1 -1
- package/dist/atomic/lang/el.json +1 -1
- package/dist/atomic/lang/en.json +1 -1
- package/dist/atomic/lang/es.json +1 -1
- package/dist/atomic/lang/fi.json +1 -1
- package/dist/atomic/lang/fr.json +1 -1
- package/dist/atomic/lang/hu.json +1 -1
- package/dist/atomic/lang/id.json +1 -1
- package/dist/atomic/lang/it.json +1 -1
- package/dist/atomic/lang/ja.json +1 -1
- package/dist/atomic/lang/ko.json +1 -1
- package/dist/atomic/lang/nl.json +1 -1
- package/dist/atomic/lang/no.json +1 -1
- package/dist/atomic/lang/pl.json +1 -1
- package/dist/atomic/lang/pt-BR.json +1 -1
- package/dist/atomic/lang/pt.json +1 -1
- package/dist/atomic/lang/ru.json +1 -1
- package/dist/atomic/lang/sv.json +1 -1
- package/dist/atomic/lang/th.json +1 -1
- package/dist/atomic/lang/tr.json +1 -1
- package/dist/atomic/lang/zh-CN.json +1 -1
- package/dist/atomic/lang/zh-TW.json +1 -1
- package/dist/atomic/lang/zh.json +1 -1
- package/dist/atomic/p-8641e3a9.entry.js +2 -0
- package/dist/atomic/p-8641e3a9.entry.js.map +1 -0
- package/dist/atomic/{p-77727995.entry.js → p-87eafe2f.entry.js} +2 -2
- package/dist/atomic/{p-a4c60617.entry.js → p-99379553.entry.js} +2 -2
- package/dist/atomic/p-a9016629.entry.js.map +1 -1
- package/dist/atomic/p-aa290a01.js +2 -0
- package/dist/atomic/p-aa290a01.js.map +1 -0
- package/dist/atomic/p-d63acdc6.entry.js +2 -0
- package/dist/atomic/p-d63acdc6.entry.js.map +1 -0
- package/dist/atomic/p-e62caa78.entry.js.map +1 -1
- package/dist/atomic/{p-2c8d8e83.entry.js → p-ff23598b.entry.js} +2 -2
- package/dist/atomic/p-ff23598b.entry.js.map +1 -0
- package/dist/cjs/_loader.cjs.js +1 -1
- package/dist/cjs/atomic-folded-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-result-action-bar.cjs.entry.js +6 -3
- package/dist/cjs/atomic-insight-result-action-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-search-box.cjs.entry.js +1 -1
- package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-result-list.cjs.entry.js.map +1 -1
- package/dist/cjs/{atomic-result-placeholder_8.cjs.entry.js → atomic-result-placeholder_2.cjs.entry.js} +1 -69
- package/dist/cjs/atomic-result-placeholder_2.cjs.entry.js.map +1 -0
- package/dist/cjs/atomic-search-box.cjs.entry.js +4 -8
- package/dist/cjs/atomic-search-box.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic.cjs.js +1 -1
- package/dist/cjs/index-757bc886.js +2 -18
- package/dist/cjs/{stencil-suggestion-manager-62c42aa3.js → stencil-suggestion-manager-83efa596.js} +2 -2
- package/dist/cjs/stencil-suggestion-manager-83efa596.js.map +1 -0
- package/dist/cjs/version.cjs.js +2 -2
- package/dist/esm/_loader.js +1 -1
- package/dist/esm/atomic-folded-result-list.entry.js.map +1 -1
- package/dist/esm/atomic-insight-result-action-bar.entry.js +5 -2
- package/dist/esm/atomic-insight-result-action-bar.entry.js.map +1 -1
- package/dist/esm/atomic-insight-search-box.entry.js +1 -1
- package/dist/esm/atomic-recs-interface.entry.js +1 -1
- package/dist/esm/atomic-result-list.entry.js.map +1 -1
- package/dist/esm/{atomic-result-placeholder_8.entry.js → atomic-result-placeholder_2.entry.js} +3 -65
- package/dist/esm/atomic-result-placeholder_2.entry.js.map +1 -0
- package/dist/esm/atomic-search-box.entry.js +4 -8
- package/dist/esm/atomic-search-box.entry.js.map +1 -1
- package/dist/esm/atomic.js +1 -1
- package/dist/esm/index-3f35faca.js +2 -18
- package/dist/esm/{stencil-suggestion-manager-3d2eea75.js → stencil-suggestion-manager-c1c4298e.js} +2 -2
- package/dist/esm/stencil-suggestion-manager-c1c4298e.js.map +1 -0
- package/dist/esm/version.js +2 -2
- package/dist/types/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.d.ts +0 -2
- package/dist/types/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.d.ts +0 -1
- package/dist/types/components/commerce/atomic-commerce-search-box-recent-queries/atomic-commerce-search-box-recent-queries.d.ts +0 -2
- package/dist/types/components/common/breadbox/breadcrumb-button.d.ts +0 -2
- package/dist/types/components/common/layout/item-layout-sections.d.ts +1 -1
- package/dist/types/components/search/atomic-result/atomic-result.d.ts +38 -29
- package/dist/types/components/search/atomic-result/atomic-result.tw.css.d.ts +2 -0
- package/dist/types/components/search/{result-template-components/atomic-result-sections → atomic-result-section-actions}/atomic-result-section-actions.d.ts +9 -3
- package/dist/types/components/search/{result-template-components/atomic-result-sections → atomic-result-section-badges}/atomic-result-section-badges.d.ts +9 -3
- package/dist/types/components/search/{result-template-components/atomic-result-sections → atomic-result-section-bottom-metadata}/atomic-result-section-bottom-metadata.d.ts +9 -3
- package/dist/types/components/search/atomic-result-section-children/atomic-result-section-children.d.ts +16 -0
- package/dist/types/components/search/atomic-result-section-emphasized/atomic-result-section-emphasized.d.ts +18 -0
- package/dist/types/components/search/{result-template-components/atomic-result-sections → atomic-result-section-excerpt}/atomic-result-section-excerpt.d.ts +9 -3
- package/dist/types/components/search/{result-template-components/atomic-result-sections → atomic-result-section-title}/atomic-result-section-title.d.ts +9 -3
- package/dist/types/components/search/atomic-result-section-title-metadata/atomic-result-section-title-metadata.d.ts +19 -0
- package/dist/types/components/search/atomic-result-section-visual/atomic-result-section-visual.d.ts +26 -0
- package/dist/types/components/search/atomic-search-box/atomic-search-box.d.ts +0 -1
- package/dist/types/components/search/atomic-search-interface/atomic-search-interface.d.ts +1 -0
- package/dist/types/components/search/index.d.ts +10 -0
- package/dist/types/components.d.ts +2 -521
- package/dist/types/directives/hierarchical-path.d.ts +1 -1
- package/dist/types/mixins/item-section-mixin.d.ts +3 -3
- package/docs/atomic-docs.json +1 -609
- package/package.json +3 -3
- package/dist/atomic/components/atomic-result-section-actions.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-actions.js +0 -8
- package/dist/atomic/components/atomic-result-section-actions.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-actions2.js +0 -30
- package/dist/atomic/components/atomic-result-section-actions2.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-badges.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-badges.js +0 -8
- package/dist/atomic/components/atomic-result-section-badges.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-badges2.js +0 -30
- package/dist/atomic/components/atomic-result-section-badges2.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-bottom-metadata.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-bottom-metadata.js +0 -8
- package/dist/atomic/components/atomic-result-section-bottom-metadata.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-bottom-metadata2.js +0 -30
- package/dist/atomic/components/atomic-result-section-bottom-metadata2.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-children.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-children.js +0 -33
- package/dist/atomic/components/atomic-result-section-children.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-emphasized.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-emphasized.js +0 -33
- package/dist/atomic/components/atomic-result-section-emphasized.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-excerpt.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-excerpt.js +0 -8
- package/dist/atomic/components/atomic-result-section-excerpt.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-excerpt2.js +0 -30
- package/dist/atomic/components/atomic-result-section-excerpt2.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-title-metadata.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-title-metadata.js +0 -33
- package/dist/atomic/components/atomic-result-section-title-metadata.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-title.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-title.js +0 -8
- package/dist/atomic/components/atomic-result-section-title.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-title2.js +0 -30
- package/dist/atomic/components/atomic-result-section-title2.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-visual.d.ts +0 -11
- package/dist/atomic/components/atomic-result-section-visual.js +0 -8
- package/dist/atomic/components/atomic-result-section-visual.js.map +0 -1
- package/dist/atomic/components/atomic-result-section-visual2.js +0 -33
- package/dist/atomic/components/atomic-result-section-visual2.js.map +0 -1
- package/dist/atomic/components/atomic-result.d.ts +0 -11
- package/dist/atomic/components/atomic-result.js +0 -8
- package/dist/atomic/components/atomic-result.js.map +0 -1
- package/dist/atomic/components/atomic-result2.js +0 -158
- package/dist/atomic/components/atomic-result2.js.map +0 -1
- package/dist/atomic/components/item-section-utils.js +0 -9
- package/dist/atomic/components/item-section-utils.js.map +0 -1
- package/dist/atomic/p-2c8d8e83.entry.js.map +0 -1
- package/dist/atomic/p-2c94b87e.js +0 -2
- package/dist/atomic/p-2c94b87e.js.map +0 -1
- package/dist/atomic/p-36e2c945.entry.js +0 -2
- package/dist/atomic/p-36e2c945.entry.js.map +0 -1
- package/dist/atomic/p-463336ca.entry.js +0 -2
- package/dist/atomic/p-463336ca.entry.js.map +0 -1
- package/dist/atomic/p-55c41e00.entry.js +0 -2
- package/dist/atomic/p-55c41e00.entry.js.map +0 -1
- package/dist/atomic/p-5d0fc7e2.js +0 -2
- package/dist/atomic/p-5d0fc7e2.js.map +0 -1
- package/dist/atomic/p-7fd58269.entry.js +0 -2
- package/dist/atomic/p-7fd58269.entry.js.map +0 -1
- package/dist/atomic/p-d1fbb20a.entry.js +0 -2
- package/dist/atomic/p-d1fbb20a.entry.js.map +0 -1
- package/dist/atomic/p-f800678c.entry.js +0 -2
- package/dist/atomic/p-f800678c.entry.js.map +0 -1
- package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js.map +0 -1
- package/dist/cjs/atomic-result-section-children.cjs.entry.js +0 -23
- package/dist/cjs/atomic-result-section-children.cjs.entry.js.map +0 -1
- package/dist/cjs/atomic-result-section-emphasized.cjs.entry.js +0 -23
- package/dist/cjs/atomic-result-section-emphasized.cjs.entry.js.map +0 -1
- package/dist/cjs/atomic-result-section-title-metadata.cjs.entry.js +0 -23
- package/dist/cjs/atomic-result-section-title-metadata.cjs.entry.js.map +0 -1
- package/dist/cjs/atomic-result.cjs.entry.js +0 -141
- package/dist/cjs/atomic-result.cjs.entry.js.map +0 -1
- package/dist/cjs/item-section-utils-37848715.js +0 -11
- package/dist/cjs/item-section-utils-37848715.js.map +0 -1
- package/dist/cjs/stencil-suggestion-manager-62c42aa3.js.map +0 -1
- package/dist/esm/atomic-result-placeholder_8.entry.js.map +0 -1
- package/dist/esm/atomic-result-section-children.entry.js +0 -19
- package/dist/esm/atomic-result-section-children.entry.js.map +0 -1
- package/dist/esm/atomic-result-section-emphasized.entry.js +0 -19
- package/dist/esm/atomic-result-section-emphasized.entry.js.map +0 -1
- package/dist/esm/atomic-result-section-title-metadata.entry.js +0 -19
- package/dist/esm/atomic-result-section-title-metadata.entry.js.map +0 -1
- package/dist/esm/atomic-result.entry.js +0 -137
- package/dist/esm/atomic-result.entry.js.map +0 -1
- package/dist/esm/item-section-utils-d8aa24b7.js +0 -9
- package/dist/esm/item-section-utils-d8aa24b7.js.map +0 -1
- package/dist/esm/stencil-suggestion-manager-3d2eea75.js.map +0 -1
- package/dist/types/components/search/result-template-components/atomic-result-sections/atomic-result-section-children.d.ts +0 -10
- package/dist/types/components/search/result-template-components/atomic-result-sections/atomic-result-section-emphasized.d.ts +0 -12
- package/dist/types/components/search/result-template-components/atomic-result-sections/atomic-result-section-title-metadata.d.ts +0 -13
- package/dist/types/components/search/result-template-components/atomic-result-sections/atomic-result-section-visual.d.ts +0 -20
- /package/dist/atomic/{p-77727995.entry.js.map → p-87eafe2f.entry.js.map} +0 -0
- /package/dist/atomic/{p-a4c60617.entry.js.map → p-99379553.entry.js.map} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getFieldTableColumns","props","itemRenderingFunction","getFieldTableColumnsFromRenderingFunction","getFieldTableColumnsFromHTMLTemplate","contentOfRenderingFunction","document","createElement","contentOfRenderingFunctionAsString","firstItem","innerHTML","Array","from","querySelectorAll","tableElementTagName","templateContentForFirstItem","DisplayTable","children","fieldColumns","length","logger","error","host","h","class","listClasses","part","map","column","value","getAttribute","DisplayTableRow","key","rowIndex","setRef","ref","element","DisplayTableData","renderItem","TabGuard","tabsIncluded","tabsExcluded","activeTab","shouldDisplayOnCurrentTab","Hidden","Fragment","atomicResultListCss","AtomicResultListStyle0","AtomicResultList","this","loadingFlag","randomID","resultTemplateRegistered","isAppLoaded","templateHasError","display","density","imageSize","setRenderFunction","resultRenderingFunction","focusTarget","nextNewResultTarget","FocusTargetController","initialize","includes","console","warn","tabManager","buildTabManager","bindings","engine","resultList","buildResultList","resultsPerPage","buildResultsPerPage","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","setTemplateHasError","resultListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","resultListState","results","getIsLoading","isLoading","nextNewItemTarget","store","createAppLoadedListener","watchTabManagerState","newValue","oldValue","unsetLoadingFlag","render","updateBreakpoints","computeListDisplayClasses","tabManagerState","ItemListGuard","hasError","hasTemplate","firstRequestExecuted","firstSearchExecuted","hasItems","hasResults","DisplayWrapper","ResultsPlaceholdersGuard","displayPlaceholders","numberOfPlaceholders","resultsPerPageState","numberOfResults","ItemDisplayGuard","renderAsTable","renderAsGrid","renderAsList","getPropsForAtomicResult","result","interactiveResult","buildInteractiveResult","options","renderingFunction","getResultId","uniqueId","searchResponseId","content","getTemplateContent","linkContent","getLinkTemplateContent","getEmptyLinkTemplateContent","getItemListDisplayClasses","i","propsForAtomicResult","DisplayGrid","selectorForItem","item","setNewResultRef","propsForTableColumns","__decorate","InitializeBindings","BindStateToController","ArrayProp"],"sources":["src/components/common/item-list/stencil-display-table.tsx","src/components/common/tabs/tab-guard.tsx","src/components/search/result-lists/atomic-result-list/atomic-result-list.pcss?tag=atomic-result-list&encapsulation=shadow","src/components/search/result-lists/atomic-result-list/atomic-result-list.tsx"],"sourcesContent":["// The Lit equivalent of this file is table-layout.ts\nimport {FunctionalComponent, VNode, h} from '@stencil/core';\nimport {tableElementTagName} from '../../search/atomic-table-result/table-element-utils.js';\nimport {AnyItem} from './unfolded-item.js';\nimport {ItemRenderingFunction} from './stencil-item-list-common.js';\n\ninterface TableColumnsProps {\n templateContentForFirstItem: DocumentFragment;\n firstItem: AnyItem;\n itemRenderingFunction?: ItemRenderingFunction;\n}\n\ninterface DisplayTableProps extends TableColumnsProps {\n logger: Pick<Console, 'error'>;\n host: HTMLElement;\n listClasses: string;\n}\n\ninterface TableDataProps extends TableColumnsProps {\n key: string;\n}\n\ninterface DisplayTableRowProps {\n key: string;\n rowIndex: number;\n setRef: (element?: HTMLElement) => void;\n}\n\nconst getFieldTableColumns = (props: TableColumnsProps) => {\n if (props.itemRenderingFunction) {\n return getFieldTableColumnsFromRenderingFunction(props);\n }\n return getFieldTableColumnsFromHTMLTemplate(props);\n};\n\nconst getFieldTableColumnsFromRenderingFunction = (\n props: Pick<TableColumnsProps, 'itemRenderingFunction' | 'firstItem'>\n): HTMLAtomicTableElementElement[] => {\n const contentOfRenderingFunction = document.createElement('div');\n\n const contentOfRenderingFunctionAsString = props.itemRenderingFunction!(\n props.firstItem,\n document.createElement('div')\n );\n contentOfRenderingFunction.innerHTML = contentOfRenderingFunctionAsString;\n\n return Array.from(\n contentOfRenderingFunction.querySelectorAll(tableElementTagName)\n );\n};\n\nconst getFieldTableColumnsFromHTMLTemplate = (\n props: Pick<DisplayTableProps, 'templateContentForFirstItem'>\n): HTMLAtomicTableElementElement[] =>\n Array.from(\n props.templateContentForFirstItem.querySelectorAll(tableElementTagName)\n );\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const DisplayTable: FunctionalComponent<DisplayTableProps> = (\n props,\n children\n) => {\n const fieldColumns = getFieldTableColumns(props);\n\n if (!fieldColumns.length) {\n props.logger.error(\n 'atomic-table-element elements missing in the template to display columns.',\n props.host\n );\n }\n\n return (\n <table class={`list-root ${props.listClasses}`} part=\"result-table\">\n <thead part=\"result-table-heading\">\n <tr part=\"result-table-heading-row\">\n {fieldColumns.map((column) => (\n <th part=\"result-table-heading-cell\">\n <atomic-text value={column.getAttribute('label')!}></atomic-text>\n </th>\n ))}\n </tr>\n </thead>\n <tbody part=\"result-table-body\">{...children}</tbody>\n </table>\n );\n};\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const DisplayTableRow: FunctionalComponent<DisplayTableRowProps> = (\n {key, rowIndex, setRef},\n children\n) => {\n return (\n <tr\n key={key}\n part={\n 'result-table-row ' +\n (rowIndex % 2 === 1 ? 'result-table-row-even' : 'result-table-row-odd')\n }\n ref={(element) => setRef(element)}\n >\n {...children}\n </tr>\n );\n};\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const DisplayTableData: FunctionalComponent<\n TableDataProps & {\n renderItem: (content: HTMLAtomicTableElementElement) => VNode;\n }\n> = (props) => {\n const fieldColumns = getFieldTableColumns(props);\n\n return fieldColumns.map((column) => {\n const key = column.getAttribute('label')! + props.key;\n return (\n <td key={key} part=\"result-table-cell\">\n {props.renderItem(column)}\n </td>\n );\n });\n};\n","import {Fragment, FunctionalComponent, h} from '@stencil/core';\nimport {shouldDisplayOnCurrentTab} from '../../../utils/tab-utils';\nimport {Hidden} from '../stencil-hidden';\n\ninterface TabGuardProps {\n tabsIncluded: string | string[];\n tabsExcluded: string | string[];\n activeTab: string;\n}\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const TabGuard: FunctionalComponent<TabGuardProps> = (\n {tabsIncluded, tabsExcluded, activeTab},\n children\n) => {\n if (\n !shouldDisplayOnCurrentTab([...tabsIncluded], [...tabsExcluded], activeTab)\n ) {\n return <Hidden></Hidden>;\n }\n return <Fragment>{...children}</Fragment>;\n};\n","@import '../../../../global/global.pcss';\n@import '../../../common/item-list/styles/placeholders.pcss';\n@import '../../../common/item-list/styles/table-display.pcss';\n@import '../../../common/item-list/styles/list-display.pcss';\n@import '../../../common/item-list/styles/grid-display.pcss';\n\natomic-result:not(.hydrated) {\n visibility: hidden;\n}\n","import {\n ResultList,\n ResultListState,\n buildResultList,\n ResultsPerPageState,\n ResultsPerPage,\n buildResultsPerPage,\n buildInteractiveResult,\n Result,\n TabManager,\n TabManagerState,\n buildTabManager,\n} from '@coveo/headless';\nimport {Component, Element, State, Prop, Method, h, Watch} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ArrayProp} from '../../../../utils/props-utils';\nimport {FocusTargetController} from '../../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../../utils/utils';\nimport {ResultsPlaceholdersGuard} from '../../../common/atomic-result-placeholder/stencil-placeholders';\nimport {createAppLoadedListener} from '../../../common/interface/store';\nimport {ItemDisplayGuard} from '../../../common/item-list/item-display-guard';\nimport {ItemListGuard} from '../../../common/item-list/item-list-guard';\nimport {ItemTemplateProvider} from '../../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../../common/item-list/stencil-display-grid';\nimport {\n DisplayTableData,\n DisplayTable,\n DisplayTableRow,\n} from '../../../common/item-list/stencil-display-table';\nimport {DisplayWrapper} from '../../../common/item-list/stencil-display-wrapper';\nimport {\n ItemListCommon,\n ItemRenderingFunction,\n} from '../../../common/item-list/stencil-item-list-common';\nimport {\n ItemDisplayDensity,\n ItemDisplayImageSize,\n ItemDisplayLayout,\n getItemListDisplayClasses,\n} from '../../../common/layout/display-options';\nimport {TabGuard} from '../../../common/tabs/tab-guard';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-result-list` component is responsible for displaying query results by applying one or more result templates.\n *\n * @slot default - The default slot where the result templates are inserted.\n * @part result-list - The element containing every result of a result list\n * @part outline - The element displaying an outline or a divider around a result\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it, when results are displayed as a grid\n * @part result-list-grid-clickable - The clickable link encompassing the result when results are displayed as a grid\n * @part result-table - The element of the result table containing a heading and a body\n * @part result-table-heading - The element containing the row of cells in the result table's heading\n * @part result-table-heading-row - The element containing cells of the result table's heading\n * @part result-table-heading-cell - The element representing a cell of the result table's heading\n * @part result-table-body - The element containing the rows of the result table's body\n * @part result-table-row - The element containing the cells of a row in the result table's body\n * @part result-table-row-odd - The element containing the cells of an odd row in the result table's body\n * @part result-table-row-even - The element containing the cells of an even row in the result table's body\n * @part result-table-cell - The element representing a cell of the result table's body\n */\n@Component({\n tag: 'atomic-result-list',\n styleUrl: 'atomic-result-list.pcss',\n shadow: true,\n})\nexport class AtomicResultList implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n public resultList!: ResultList;\n public resultsPerPage!: ResultsPerPage;\n private loadingFlag = randomID('firstResultLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private nextNewResultTarget?: FocusTargetController;\n private itemTemplateProvider!: ItemTemplateProvider;\n private resultListCommon!: ItemListCommon;\n\n @Element() public host!: HTMLDivElement;\n\n @BindStateToController('resultList')\n @State()\n private resultListState!: ResultListState;\n @BindStateToController('resultsPerPage')\n @State()\n private resultsPerPageState!: ResultsPerPageState;\n public tabManager!: TabManager;\n @BindStateToController('tabManager')\n @State()\n public tabManagerState!: TabManagerState;\n @State() private resultTemplateRegistered = false;\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n\n @State() private templateHasError = false;\n\n /**\n * The desired layout to use when displaying results. Layouts affect how many results to display per row and how visually distinct they are from each other.\n */\n @Prop({reflect: true}) public display: ItemDisplayLayout = 'list';\n /**\n * The spacing of various elements in the result list, including the gap between results, the gap between parts of a result, and the font sizes of different parts in a result.\n */\n @Prop({reflect: true}) public density: ItemDisplayDensity = 'normal';\n\n /**\n * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true, mutable: true})\n public imageSize: ItemDisplayImageSize = 'icon';\n\n /**\n * The tabs on which the result list can be displayed. This property should not be used at the same time as `tabs-excluded`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-result-list tabs-included='[\"tabIDA\", \"tabIDB\"]'></atomic-result-list snippet>\n * ```\n * If you don't set this property, the result list can be displayed on any tab. Otherwise, the result list can only be displayed on the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsIncluded: string[] | string = '[]';\n\n /**\n * The tabs on which this result list must not be displayed. This property should not be used at the same time as `tabs-included`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-result-list tabs-excluded='[\"tabIDA\", \"tabIDB\"]'></atomic-result-list>\n * ```\n * If you don't set this property, the result list can be displayed on any tab. Otherwise, the result list won't be displayed on any of the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsExcluded: string[] | string = '[]';\n\n /**\n * Sets a rendering function to bypass the standard HTML template mechanism for rendering results.\n * You can use this function while working with web frameworks that don't use plain HTML syntax, e.g., React, Angular or Vue.\n *\n * Do not use this method if you integrate Atomic in a plain HTML deployment.\n *\n * @param resultRenderingFunction\n */\n @Method() public async setRenderFunction(\n resultRenderingFunction: ItemRenderingFunction\n ) {\n this.itemRenderingFunction = resultRenderingFunction;\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n public initialize() {\n if (this.host.innerHTML.includes('<atomic-result-children')) {\n console.warn(\n 'Folded results will not render any children for the \"atomic-result-list\". Please use \"atomic-folded-result-list\" instead.'\n );\n }\n this.tabManager = buildTabManager(this.bindings.engine);\n this.resultList = buildResultList(this.bindings.engine);\n this.resultsPerPage = buildResultsPerPage(this.bindings.engine);\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-result-template')\n ),\n getResultTemplateRegistered: () => this.resultTemplateRegistered,\n getTemplateHasError: () => this.templateHasError,\n setResultTemplateRegistered: (value: boolean) => {\n this.resultTemplateRegistered = value;\n },\n setTemplateHasError: (value: boolean) => {\n this.templateHasError = value;\n },\n bindings: this.bindings,\n });\n\n this.resultListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () => this.resultListState.results.length,\n getIsLoading: () => this.resultListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n @Watch('tabManagerState')\n watchTabManagerState(\n newValue: {activeTab: string},\n oldValue: {activeTab: string}\n ) {\n if (newValue?.activeTab !== oldValue?.activeTab) {\n this.bindings.store.unsetLoadingFlag(this.loadingFlag);\n }\n }\n\n public render() {\n this.resultListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n return (\n <TabGuard\n tabsIncluded={this.tabsIncluded}\n tabsExcluded={this.tabsExcluded}\n activeTab={this.tabManagerState.activeTab}\n >\n <ItemListGuard\n hasError={this.resultListState.hasError}\n hasTemplate={this.resultTemplateRegistered}\n templateHasError={this.itemTemplateProvider.hasError}\n firstRequestExecuted={this.resultListState.firstSearchExecuted}\n hasItems={this.resultListState.hasResults}\n >\n <DisplayWrapper display={this.display} listClasses={listClasses}>\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={this.resultsPerPageState.numberOfResults}\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard\n firstRequestExecuted={this.resultListState.firstSearchExecuted}\n hasItems={this.resultListState.hasResults}\n >\n {this.display === 'table'\n ? this.renderAsTable()\n : this.display === 'grid'\n ? this.renderAsGrid()\n : this.renderAsList()}\n </ItemDisplayGuard>\n </DisplayWrapper>\n </ItemListGuard>\n </TabGuard>\n );\n }\n\n private getPropsForAtomicResult(result: Result) {\n return {\n interactiveResult: buildInteractiveResult(this.bindings.engine, {\n options: {result},\n }),\n result,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.resultListCommon.getResultId(\n result.uniqueId,\n this.resultListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(result),\n linkContent:\n this.display === 'grid'\n ? this.itemTemplateProvider.getLinkTemplateContent(result)\n : this.itemTemplateProvider.getEmptyLinkTemplateContent(),\n store: this.bindings.store,\n density: this.density,\n imageSize: this.imageSize,\n display: this.display,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n this.display,\n this.density,\n this.imageSize,\n this.resultListState.firstSearchExecuted &&\n this.resultListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid() {\n return this.resultListState.results.map((result, i) => {\n const propsForAtomicResult = this.getPropsForAtomicResult(result);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-result\"\n item={result}\n {...propsForAtomicResult.interactiveResult}\n setRef={(element) =>\n element && this.resultListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-result {...this} {...propsForAtomicResult}></atomic-result>\n </DisplayGrid>\n );\n });\n }\n\n private renderAsTable() {\n if (!this.resultListState.hasResults) {\n return;\n }\n const listClasses = this.computeListDisplayClasses();\n const firstItem = this.resultListState.results[0];\n\n const propsForTableColumns = {\n firstItem,\n templateContentForFirstItem:\n this.itemTemplateProvider.getTemplateContent(firstItem),\n };\n\n return (\n <DisplayTable\n {...propsForTableColumns}\n listClasses={listClasses}\n logger={this.bindings.engine.logger}\n itemRenderingFunction={this.itemRenderingFunction}\n host={this.host}\n >\n {this.resultListState.results.map((result, i) => {\n const propsForAtomicResult = this.getPropsForAtomicResult(result);\n return (\n <DisplayTableRow\n {...propsForAtomicResult}\n rowIndex={i}\n setRef={(element) =>\n element && this.resultListCommon.setNewResultRef(element, i)\n }\n >\n <DisplayTableData\n {...propsForTableColumns}\n {...propsForAtomicResult}\n renderItem={(content) => {\n return (\n <atomic-result\n {...propsForAtomicResult}\n content={content}\n ></atomic-result>\n );\n }}\n ></DisplayTableData>\n </DisplayTableRow>\n );\n })}\n </DisplayTable>\n );\n }\n\n private renderAsList() {\n return this.resultListState.results.map((result, i) => {\n const propsForAtomicResult = this.getPropsForAtomicResult(result);\n return (\n <atomic-result\n {...propsForAtomicResult}\n ref={(element) =>\n element && this.resultListCommon.setNewResultRef(element, i)\n }\n part=\"outline\"\n ></atomic-result>\n );\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["getFieldTableColumns","props","itemRenderingFunction","getFieldTableColumnsFromRenderingFunction","getFieldTableColumnsFromHTMLTemplate","contentOfRenderingFunction","document","createElement","contentOfRenderingFunctionAsString","firstItem","innerHTML","Array","from","querySelectorAll","tableElementTagName","templateContentForFirstItem","DisplayTable","children","fieldColumns","length","logger","error","host","h","class","listClasses","part","map","column","value","getAttribute","DisplayTableRow","key","rowIndex","setRef","ref","element","DisplayTableData","renderItem","TabGuard","tabsIncluded","tabsExcluded","activeTab","shouldDisplayOnCurrentTab","Hidden","Fragment","atomicResultListCss","AtomicResultListStyle0","AtomicResultList","this","loadingFlag","randomID","resultTemplateRegistered","isAppLoaded","templateHasError","display","density","imageSize","setRenderFunction","resultRenderingFunction","focusTarget","nextNewResultTarget","FocusTargetController","initialize","includes","console","warn","tabManager","buildTabManager","bindings","engine","resultList","buildResultList","resultsPerPage","buildResultsPerPage","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","setTemplateHasError","resultListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","resultListState","results","getIsLoading","isLoading","nextNewItemTarget","store","createAppLoadedListener","watchTabManagerState","newValue","oldValue","unsetLoadingFlag","render","updateBreakpoints","computeListDisplayClasses","tabManagerState","ItemListGuard","hasError","hasTemplate","firstRequestExecuted","firstSearchExecuted","hasItems","hasResults","DisplayWrapper","ResultsPlaceholdersGuard","displayPlaceholders","numberOfPlaceholders","resultsPerPageState","numberOfResults","ItemDisplayGuard","renderAsTable","renderAsGrid","renderAsList","getPropsForAtomicResult","result","interactiveResult","buildInteractiveResult","options","renderingFunction","getResultId","uniqueId","searchResponseId","content","getTemplateContent","linkContent","getLinkTemplateContent","getEmptyLinkTemplateContent","getItemListDisplayClasses","i","propsForAtomicResult","DisplayGrid","selectorForItem","item","setNewResultRef","propsForTableColumns","__decorate","InitializeBindings","BindStateToController","ArrayProp"],"sources":["src/components/common/item-list/stencil-display-table.tsx","src/components/common/tabs/tab-guard.tsx","src/components/search/result-lists/atomic-result-list/atomic-result-list.pcss?tag=atomic-result-list&encapsulation=shadow","src/components/search/result-lists/atomic-result-list/atomic-result-list.tsx"],"sourcesContent":["// The Lit equivalent of this file is table-layout.ts\nimport {FunctionalComponent, VNode, h} from '@stencil/core';\nimport {tableElementTagName} from '../../search/atomic-table-result/table-element-utils.js';\nimport {AnyItem} from './unfolded-item.js';\nimport {ItemRenderingFunction} from './stencil-item-list-common.js';\n\ninterface TableColumnsProps {\n templateContentForFirstItem: DocumentFragment;\n firstItem: AnyItem;\n itemRenderingFunction?: ItemRenderingFunction;\n}\n\ninterface DisplayTableProps extends TableColumnsProps {\n logger: Pick<Console, 'error'>;\n host: HTMLElement;\n listClasses: string;\n}\n\ninterface TableDataProps extends TableColumnsProps {\n key: string;\n}\n\ninterface DisplayTableRowProps {\n key: string;\n rowIndex: number;\n setRef: (element?: HTMLElement) => void;\n}\n\nconst getFieldTableColumns = (props: TableColumnsProps) => {\n if (props.itemRenderingFunction) {\n return getFieldTableColumnsFromRenderingFunction(props);\n }\n return getFieldTableColumnsFromHTMLTemplate(props);\n};\n\nconst getFieldTableColumnsFromRenderingFunction = (\n props: Pick<TableColumnsProps, 'itemRenderingFunction' | 'firstItem'>\n): HTMLAtomicTableElementElement[] => {\n const contentOfRenderingFunction = document.createElement('div');\n\n const contentOfRenderingFunctionAsString = props.itemRenderingFunction!(\n props.firstItem,\n document.createElement('div')\n );\n contentOfRenderingFunction.innerHTML = contentOfRenderingFunctionAsString;\n\n return Array.from(\n contentOfRenderingFunction.querySelectorAll(tableElementTagName)\n );\n};\n\nconst getFieldTableColumnsFromHTMLTemplate = (\n props: Pick<DisplayTableProps, 'templateContentForFirstItem'>\n): HTMLAtomicTableElementElement[] =>\n Array.from(\n props.templateContentForFirstItem.querySelectorAll(tableElementTagName)\n );\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const DisplayTable: FunctionalComponent<DisplayTableProps> = (\n props,\n children\n) => {\n const fieldColumns = getFieldTableColumns(props);\n\n if (!fieldColumns.length) {\n props.logger.error(\n 'atomic-table-element elements missing in the template to display columns.',\n props.host\n );\n }\n\n return (\n <table class={`list-root ${props.listClasses}`} part=\"result-table\">\n <thead part=\"result-table-heading\">\n <tr part=\"result-table-heading-row\">\n {fieldColumns.map((column) => (\n <th part=\"result-table-heading-cell\">\n <atomic-text value={column.getAttribute('label')!}></atomic-text>\n </th>\n ))}\n </tr>\n </thead>\n <tbody part=\"result-table-body\">{...children}</tbody>\n </table>\n );\n};\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const DisplayTableRow: FunctionalComponent<DisplayTableRowProps> = (\n {key, rowIndex, setRef},\n children\n) => {\n return (\n <tr\n key={key}\n part={\n 'result-table-row ' +\n (rowIndex % 2 === 1 ? 'result-table-row-even' : 'result-table-row-odd')\n }\n ref={(element) => setRef(element)}\n >\n {...children}\n </tr>\n );\n};\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const DisplayTableData: FunctionalComponent<\n TableDataProps & {\n renderItem: (content: HTMLAtomicTableElementElement) => VNode;\n }\n> = (props) => {\n const fieldColumns = getFieldTableColumns(props);\n\n return fieldColumns.map((column) => {\n const key = column.getAttribute('label')! + props.key;\n return (\n <td key={key} part=\"result-table-cell\">\n {props.renderItem(column)}\n </td>\n );\n });\n};\n","import {Fragment, FunctionalComponent, h} from '@stencil/core';\nimport {shouldDisplayOnCurrentTab} from '../../../utils/tab-utils';\nimport {Hidden} from '../stencil-hidden';\n\ninterface TabGuardProps {\n tabsIncluded: string | string[];\n tabsExcluded: string | string[];\n activeTab: string;\n}\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const TabGuard: FunctionalComponent<TabGuardProps> = (\n {tabsIncluded, tabsExcluded, activeTab},\n children\n) => {\n if (\n !shouldDisplayOnCurrentTab([...tabsIncluded], [...tabsExcluded], activeTab)\n ) {\n return <Hidden></Hidden>;\n }\n return <Fragment>{...children}</Fragment>;\n};\n","@import '../../../../global/global.pcss';\n@import '../../../common/item-list/styles/placeholders.pcss';\n@import '../../../common/item-list/styles/table-display.pcss';\n@import '../../../common/item-list/styles/list-display.pcss';\n@import '../../../common/item-list/styles/grid-display.pcss';\n\natomic-result:not(.hydrated) {\n visibility: hidden;\n}\n","import {\n ResultList,\n ResultListState,\n buildResultList,\n ResultsPerPageState,\n ResultsPerPage,\n buildResultsPerPage,\n buildInteractiveResult,\n Result,\n TabManager,\n TabManagerState,\n buildTabManager,\n} from '@coveo/headless';\nimport {Component, Element, State, Prop, Method, h, Watch} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ArrayProp} from '../../../../utils/props-utils';\nimport {FocusTargetController} from '../../../../utils/stencil-accessibility-utils';\nimport {randomID} from '../../../../utils/utils';\nimport {ResultsPlaceholdersGuard} from '../../../common/atomic-result-placeholder/stencil-placeholders';\nimport {createAppLoadedListener} from '../../../common/interface/store';\nimport {ItemDisplayGuard} from '../../../common/item-list/item-display-guard';\nimport {ItemListGuard} from '../../../common/item-list/item-list-guard';\nimport {ItemTemplateProvider} from '../../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../../common/item-list/stencil-display-grid';\nimport {\n DisplayTableData,\n DisplayTable,\n DisplayTableRow,\n} from '../../../common/item-list/stencil-display-table';\nimport {DisplayWrapper} from '../../../common/item-list/stencil-display-wrapper';\nimport {\n ItemListCommon,\n ItemRenderingFunction,\n} from '../../../common/item-list/stencil-item-list-common';\nimport {\n ItemDisplayDensity,\n ItemDisplayImageSize,\n ItemDisplayLayout,\n getItemListDisplayClasses,\n} from '../../../common/layout/display-options';\nimport {TabGuard} from '../../../common/tabs/tab-guard';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-result-list` component is responsible for displaying query results by applying one or more result templates.\n *\n * @slot default - The default slot where the result templates are inserted.\n * @part result-list - The element containing every result of a result list\n * @part outline - The element displaying an outline or a divider around a result\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it, when results are displayed as a grid\n * @part result-list-grid-clickable - The clickable link encompassing the result when results are displayed as a grid\n * @part result-table - The element of the result table containing a heading and a body\n * @part result-table-heading - The element containing the row of cells in the result table's heading\n * @part result-table-heading-row - The element containing cells of the result table's heading\n * @part result-table-heading-cell - The element representing a cell of the result table's heading\n * @part result-table-body - The element containing the rows of the result table's body\n * @part result-table-row - The element containing the cells of a row in the result table's body\n * @part result-table-row-odd - The element containing the cells of an odd row in the result table's body\n * @part result-table-row-even - The element containing the cells of an even row in the result table's body\n * @part result-table-cell - The element representing a cell of the result table's body\n */\n@Component({\n tag: 'atomic-result-list',\n styleUrl: 'atomic-result-list.pcss',\n shadow: true,\n})\nexport class AtomicResultList implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n public resultList!: ResultList;\n public resultsPerPage!: ResultsPerPage;\n private loadingFlag = randomID('firstResultLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private nextNewResultTarget?: FocusTargetController;\n private itemTemplateProvider!: ItemTemplateProvider;\n private resultListCommon!: ItemListCommon;\n\n @Element() public host!: HTMLDivElement;\n\n @BindStateToController('resultList')\n @State()\n private resultListState!: ResultListState;\n @BindStateToController('resultsPerPage')\n @State()\n private resultsPerPageState!: ResultsPerPageState;\n public tabManager!: TabManager;\n @BindStateToController('tabManager')\n @State()\n public tabManagerState!: TabManagerState;\n @State() private resultTemplateRegistered = false;\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n\n @State() private templateHasError = false;\n\n /**\n * The desired layout to use when displaying results. Layouts affect how many results to display per row and how visually distinct they are from each other.\n */\n @Prop({reflect: true}) public display: ItemDisplayLayout = 'list';\n /**\n * The spacing of various elements in the result list, including the gap between results, the gap between parts of a result, and the font sizes of different parts in a result.\n */\n @Prop({reflect: true}) public density: ItemDisplayDensity = 'normal';\n\n /**\n * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true, mutable: true})\n public imageSize: ItemDisplayImageSize = 'icon';\n\n /**\n * The tabs on which the result list can be displayed. This property should not be used at the same time as `tabs-excluded`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-result-list tabs-included='[\"tabIDA\", \"tabIDB\"]'></atomic-result-list snippet>\n * ```\n * If you don't set this property, the result list can be displayed on any tab. Otherwise, the result list can only be displayed on the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsIncluded: string[] | string = '[]';\n\n /**\n * The tabs on which this result list must not be displayed. This property should not be used at the same time as `tabs-included`.\n *\n * Set this property as a stringified JSON array, e.g.,\n * ```html\n * <atomic-result-list tabs-excluded='[\"tabIDA\", \"tabIDB\"]'></atomic-result-list>\n * ```\n * If you don't set this property, the result list can be displayed on any tab. Otherwise, the result list won't be displayed on any of the specified tabs.\n */\n @ArrayProp()\n @Prop({reflect: true, mutable: true})\n public tabsExcluded: string[] | string = '[]';\n\n /**\n * Sets a rendering function to bypass the standard HTML template mechanism for rendering results.\n * You can use this function while working with web frameworks that don't use plain HTML syntax, e.g., React, Angular or Vue.\n *\n * Do not use this method if you integrate Atomic in a plain HTML deployment.\n *\n * @param resultRenderingFunction\n */\n @Method() public async setRenderFunction(\n resultRenderingFunction: ItemRenderingFunction\n ) {\n this.itemRenderingFunction = resultRenderingFunction;\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n public initialize() {\n if (this.host.innerHTML.includes('<atomic-result-children')) {\n console.warn(\n 'Folded results will not render any children for the \"atomic-result-list\". Please use \"atomic-folded-result-list\" instead.'\n );\n }\n this.tabManager = buildTabManager(this.bindings.engine);\n this.resultList = buildResultList(this.bindings.engine);\n this.resultsPerPage = buildResultsPerPage(this.bindings.engine);\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-result-template')\n ),\n getResultTemplateRegistered: () => this.resultTemplateRegistered,\n getTemplateHasError: () => this.templateHasError,\n setResultTemplateRegistered: (value: boolean) => {\n this.resultTemplateRegistered = value;\n },\n setTemplateHasError: (value: boolean) => {\n this.templateHasError = value;\n },\n bindings: this.bindings,\n });\n\n this.resultListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () => this.resultListState.results.length,\n getIsLoading: () => this.resultListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n @Watch('tabManagerState')\n watchTabManagerState(\n newValue: {activeTab: string},\n oldValue: {activeTab: string}\n ) {\n if (newValue?.activeTab !== oldValue?.activeTab) {\n this.bindings.store.unsetLoadingFlag(this.loadingFlag);\n }\n }\n\n public render() {\n this.resultListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n return (\n <TabGuard\n tabsIncluded={this.tabsIncluded}\n tabsExcluded={this.tabsExcluded}\n activeTab={this.tabManagerState.activeTab}\n >\n <ItemListGuard\n hasError={this.resultListState.hasError}\n hasTemplate={this.resultTemplateRegistered}\n templateHasError={this.itemTemplateProvider.hasError}\n firstRequestExecuted={this.resultListState.firstSearchExecuted}\n hasItems={this.resultListState.hasResults}\n >\n <DisplayWrapper display={this.display} listClasses={listClasses}>\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={this.resultsPerPageState.numberOfResults}\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard\n firstRequestExecuted={this.resultListState.firstSearchExecuted}\n hasItems={this.resultListState.hasResults}\n >\n {this.display === 'table'\n ? this.renderAsTable()\n : this.display === 'grid'\n ? this.renderAsGrid()\n : this.renderAsList()}\n </ItemDisplayGuard>\n </DisplayWrapper>\n </ItemListGuard>\n </TabGuard>\n );\n }\n\n private getPropsForAtomicResult(result: Result) {\n return {\n interactiveResult: buildInteractiveResult(this.bindings.engine, {\n options: {result},\n }),\n result,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.resultListCommon.getResultId(\n result.uniqueId,\n this.resultListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(result),\n linkContent:\n this.display === 'grid'\n ? this.itemTemplateProvider.getLinkTemplateContent(result)\n : this.itemTemplateProvider.getEmptyLinkTemplateContent(),\n store: this.bindings.store,\n density: this.density,\n imageSize: this.imageSize,\n display: this.display,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n this.display,\n this.density,\n this.imageSize,\n this.resultListState.firstSearchExecuted &&\n this.resultListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid() {\n return this.resultListState.results.map((result, i) => {\n const propsForAtomicResult = this.getPropsForAtomicResult(result);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-result\"\n item={result}\n {...propsForAtomicResult.interactiveResult}\n setRef={(element) =>\n element && this.resultListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-result {...this} {...propsForAtomicResult}></atomic-result>\n </DisplayGrid>\n );\n });\n }\n\n private renderAsTable() {\n if (!this.resultListState.hasResults) {\n return;\n }\n const listClasses = this.computeListDisplayClasses();\n const firstItem = this.resultListState.results[0];\n\n const propsForTableColumns = {\n firstItem,\n templateContentForFirstItem:\n this.itemTemplateProvider.getTemplateContent(firstItem),\n };\n\n return (\n <DisplayTable\n {...propsForTableColumns}\n listClasses={listClasses}\n logger={this.bindings.engine.logger}\n itemRenderingFunction={this.itemRenderingFunction}\n host={this.host}\n >\n {this.resultListState.results.map((result, i) => {\n const propsForAtomicResult = this.getPropsForAtomicResult(result);\n return (\n <DisplayTableRow\n {...propsForAtomicResult}\n rowIndex={i}\n setRef={(element) =>\n element && this.resultListCommon.setNewResultRef(element, i)\n }\n >\n <DisplayTableData\n {...propsForTableColumns}\n {...propsForAtomicResult}\n renderItem={(content) => {\n return (\n <atomic-result\n {...propsForAtomicResult}\n content={content}\n ></atomic-result>\n );\n }}\n ></DisplayTableData>\n </DisplayTableRow>\n );\n })}\n </DisplayTable>\n );\n }\n\n private renderAsList() {\n return this.resultListState.results.map((result, i) => {\n const propsForAtomicResult = this.getPropsForAtomicResult(result);\n return (\n <atomic-result\n {...propsForAtomicResult}\n ref={(element: HTMLElement) =>\n element && this.resultListCommon.setNewResultRef(element, i)\n }\n part=\"outline\"\n ></atomic-result>\n );\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{h as t,f as s}from"./p-dc3df5ce.js";import{B as e}from"./p-de53197d.js";import{isNullOrUndefined as i}from"@coveo/bueno";import{D as n}from"./p-f284897c.js";import{d as r}from"./p-01c91b69.js";import{a as o,e as a}from"./p-0a051b8d.js";const h=`<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">\n<circle cx="7" cy="7" r="6.5" stroke="currentColor"/>\n<path d="M16 16L12 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>\n</svg>\n`;const u=(s,e)=>{const i=()=>{const t="flex bg-background w-full border border-neutral rounded-md focus-within:ring-3 absolute top-0 left-0";const e=s.disabled?"focus-within:border-disabled focus-within:ring-neutral":"focus-within:border-primary focus-within:ring-ring-primary";return[t,e].join(" ")};return t("div",{part:"wrapper",class:i(),onFocusout:s.onFocusout},e)};const c=`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">\n<path d="M15 1.00012L1.00012 14.9999" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>\n<path d="M0.999878 1L14.9999 15" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>\n</svg>\n`;const l=({inputRef:s,bindings:i,onClick:n,...r})=>t("div",{part:"clear-button-wrapper",class:"ml-2 flex items-center justify-center py-2"},t(e,{style:"text-transparent",part:"clear-button",class:"text-neutral-dark flex h-8 w-8 shrink-0 items-center justify-center",onClick:()=>{n?.();s?.focus()},ariaLabel:i.i18n.t("clear"),...r},t("atomic-icon",{part:"clear-icon",icon:c,class:"h-4 w-4"})));function g(t){return{autocomplete:"off",autocapitalize:"off",autocorrect:"off",...t.activeDescendant&&{"aria-activedescendant":t.activeDescendant},"aria-autocomplete":"both","aria-haspopup":"true","aria-controls":t.id}}function f(t,s){const e=t?.parentNode;if(!e){return}if(t.value==="\n"){return}e.dataset.replicatedValue=s??t.value}function d(t){const s=t?.parentNode;if(s){delete s.dataset.replicatedValue}}function p(t){const s=t?.parentNode;if(s){s.classList.remove("expanded")}}function m(t){const s=t?.parentNode;if(s){s.classList.add("expanded")}}const w=({textAreaRef:s,loading:e,bindings:i,onInput:n,onFocus:r,onBlur:o,onChange:a,onKeyDown:h,onKeyUp:u,value:c,ariaLabel:w,onClear:b,popup:v,...y})=>t("div",{class:"flex grow overflow-hidden"},t("div",{part:"textarea-expander",class:"grid grow overflow-hidden"},t("textarea",{part:"textarea","aria-label":w,placeholder:i.i18n.t("search"),class:"placeholder-neutral-dark",rows:1,onInput:t=>{n?.(t);f(s)},onKeyDown:t=>{f(s);if(t.key==="Enter"){if(t.shiftKey){return}t.preventDefault()}h?.(t)},onKeyUp:t=>{u?.(t);if(t.key==="Enter"){t.preventDefault();return}f(s)},onBlur:t=>{o?.(t);p(s);f(s)},onChange:t=>{a?.(t);f(s)},onFocus:t=>{r?.(t);const e=t.target;f(s??e);m(s??e)},autocomplete:"off",...v&&g(v),...y,value:c})),e&&t("div",{class:"searchbox-button-wrapper ml-2 flex items-center justify-center"},t("span",{part:"loading",class:"loading mr-2 grid h-5 w-5 animate-spin place-items-center rounded-full bg-linear-to-r"})),!e&&c&&t(l,{inputRef:s,bindings:i,onClick:()=>{b();d(s)}}));function b(t,s){let e;const i=new Promise(((t,i)=>{e=setTimeout((()=>{i(new Error("Promise timed out."))}),s)}));return Promise.race([t,i]).then((()=>{clearTimeout(e)}))}class v{constructor(t){this.ownerSearchBoxProps=t;this.suggestions=[];this.leftSuggestionElements=[];this.rightSuggestionElements=[];this.leftPanel=undefined;this.rightPanel=undefined;this.activeDescendant="";this.suggestedQuery="";this.keyboardActiveDescendant="";this.queryDataAttribute="data-query";this.suggestionEvents=[];this.previousActiveDescendantElement=null;this.leftSuggestions=[];this.rightSuggestions=[];this.triggerSuggestions=r((()=>this.executeQuerySuggestion()),this.ownerSearchBoxProps.getSuggestionDelay())}get partialSuggestionBindings(){return{suggestedQuery:()=>this.suggestedQuery,clearSuggestions:()=>this.clearSuggestions(),triggerSuggestions:()=>this.triggerSuggestions(),getSuggestions:()=>this.suggestions,getSuggestionElements:()=>this.allSuggestionElements}}get activeDescendantElement(){if(!this.hasActiveDescendant){return null}return this.leftPanel?.querySelector(`#${this.activeDescendant}`)||this.rightPanel?.querySelector(`#${this.activeDescendant}`)||null}onSubmit(){this.clickOnActiveElement();this.clearSuggestions()}updateActiveDescendant(t=""){this.activeDescendant=t;s(this.ownerSearchBoxProps.getHost())}updateKeyboardActiveDescendant(t=""){this.keyboardActiveDescendant=t}clickOnActiveElement(){this.activeDescendantElement?.click();this.updateActiveDescendant()}isRightPanelInFocus(){if(i(this.panelInFocus)||i(this.rightPanel)){return false}return this.panelInFocus===this.rightPanel}initializeSuggestions(t){this.suggestions=this.suggestionEvents.map((s=>s(t)))}registerSuggestionsFromEvent(t,s){t.preventDefault();t.stopPropagation();this.suggestionEvents.push(t.detail);this.suggestions.push(t.detail(s))}registerSuggestions(t){this.suggestions.push(t)}get isDoubleList(){return Boolean(this.leftSuggestionElements.length&&this.rightSuggestionElements.length)}focusPanel(t){const s=t==="left"?this.leftPanel:this.rightPanel;if(this.panelInFocus===s){return}if(s?.firstElementChild){const t=this.previousActiveDescendantElement&&s.contains(this.previousActiveDescendantElement);const e=t?this.previousActiveDescendantElement:s.firstElementChild;this.updateDescendants(e.id)}}clearSuggestions(){this.clearSuggestionElements();this.updateActiveDescendant()}async focusNextValue(){if(!this.hasSuggestions||!this.nextOrFirstValue){return}await this.focusValue(this.nextOrFirstValue)}async focusValue(t){this.updateKeyboardActiveDescendant(t.id);this.updateActiveDescendant(t.id);this.scrollActiveDescendantIntoView();await this.updateQueryFromSuggestion()}async onSuggestionMouseOver(t,s,e){const i=s==="left"?this.leftPanel:this.rightPanel;this.updateKeyboardActiveDescendant();if(this.panelInFocus===i){this.updateActiveDescendant(e)}else{this.updateDescendants(e)}if(t.query){await this.updateSuggestedQuery(t.query)}}async onSuggestionClick(t,s){if(t.query){this.clearSuggestions();await this.updateOwnerSearchboxQuery(t.query)}t.onSelect?.(s)}get hasSuggestions(){return!!this.allSuggestionElements.length}get allSuggestionElements(){return[...this.leftSuggestionElements,...this.rightSuggestionElements]}async focusPreviousValue(){if(this.firstValue===this.activeDescendantElement){this.updateKeyboardActiveDescendant();this.updateActiveDescendant();return}if(!this.hasSuggestions||!this.previousOrLastValue){return}await this.focusValue(this.previousOrLastValue)}get hasActiveDescendant(){return this.activeDescendant!==""}async executeQuerySuggestion(){this.updateActiveDescendant();const t=await Promise.allSettled(this.suggestions.map((t=>b(t.onInput?t.onInput():Promise.resolve(),this.ownerSearchBoxProps.getSuggestionTimeout()))));const s=[];t.forEach(((t,e)=>{if(t.status==="fulfilled"){s.push(this.suggestions[e])}else{this.ownerSearchBoxProps.getLogger().warn("Some query suggestions are not being shown because the promise timed out.")}}));const e=(t,e=false)=>s.filter((s=>s.panel===t||!s.panel&&e)).sort(this.sortSuggestions);this.leftSuggestions=e("left",true);this.leftSuggestionElements=this.getAndFilterLeftSuggestionElements();this.rightSuggestions=e("right");this.rightSuggestionElements=this.getSuggestionElements(this.rightSuggestions);const i=this.allSuggestionElements.find(o)?.query||"";await this.updateSuggestedQuery(i)}get lastValue(){return this.panelInFocus?.lastElementChild}get previousOrLastValue(){if(!this.hasActiveDescendant){return this.lastValue?.firstChild}const t=this.activeDescendantElement?.parentElement;return t?.previousElementSibling?.firstChild||this.firstValue?.firstChild}sortSuggestions(t,s){return t.position-s.position}get nextOrFirstValue(){if(!this.hasActiveDescendant){return this.firstValue?.firstChild}const t=this.activeDescendantElement?.parentElement;return t?.nextElementSibling?.firstChild||this.firstValue?.firstChild}get firstValue(){return this.panelInFocus?.firstElementChild}get panelInFocus(){if(this.leftPanel?.contains(this.activeDescendantElement)){return this.leftPanel}if(this.rightPanel?.contains(this.activeDescendantElement)){return this.rightPanel}return this.leftPanel||this.rightPanel}scrollActiveDescendantIntoView(){this.activeDescendantElement?.scrollIntoView({block:"nearest"})}async updateQueryFromSuggestion(){const t=this.activeDescendantElement?.getAttribute(this.queryDataAttribute);await this.updateOwnerSearchboxQuery(t||"")}async updateOwnerSearchboxQuery(t){if(t&&this.ownerSearchBoxProps.getSearchBoxValue()!==t){this.ownerSearchBoxProps.updateQuery(t);await this.updateSuggestedQuery(t)}}async updateSuggestedQuery(t){await Promise.allSettled(this.suggestions.map((s=>b(s.onSuggestedQueryChange?s.onSuggestedQueryChange(t):Promise.resolve(),this.ownerSearchBoxProps.getSuggestionTimeout()))));this.suggestedQuery=t;this.updateSuggestionElements(t);s(this.ownerSearchBoxProps.getHost())}updateSuggestionElements(t){if(!this.isPanelInFocus(this.leftPanel,t)){this.leftSuggestionElements=this.getAndFilterLeftSuggestionElements()}if(!this.isPanelInFocus(this.rightPanel,t)){this.rightSuggestionElements=this.getSuggestionElements(this.rightSuggestions)}}forceUpdate(){this.updateSuggestionElements(this.suggestedQuery);s(this.ownerSearchBoxProps.getHost())}isPanelInFocus(t,s){if(!this.activeDescendantElement){return false}if(s){const e=n.sanitize(s);return!!t?.querySelector(`[${this.queryDataAttribute}="${CSS.escape(e)}"]`)}return this.activeDescendantElement?.closest("ul")===t}getAndFilterLeftSuggestionElements(){const t=this.getSuggestionElements(this.leftSuggestions);const s=new Set;const e=t.filter((t=>{if(i(t.query)){return true}if(s.has(t.query)){return false}else{s.add(t.query);return true}}));return e}getSuggestionElements(t){const s=t.flatMap((t=>t.renderItems()));const e=this.ownerSearchBoxProps.getNumberOfSuggestionsToDisplay()+s.filter(a).length;return s.slice(0,e)}updateDescendants(t=""){const s=this.activeDescendantElement;this.previousActiveDescendantElement=s;this.updateActiveDescendant(t)}clearSuggestionElements(){this.leftSuggestionElements=[];this.rightSuggestionElements=[]}}export{v as S,h as a,w as b,u as c};
|
2
|
+
//# sourceMappingURL=p-aa290a01.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["SearchBoxWrapper","props","children","getClasses","baseClasses","focusClasses","disabled","join","h","part","class","onFocusout","TextAreaClearButton","inputRef","bindings","onClick","defaultButtonProps","Button","style","focus","ariaLabel","i18n","t","icon","ClearSlim","getPopupAttributes","autocomplete","autocapitalize","autocorrect","activeDescendant","id","syncTextWithReplica","elem","value","parent","parentNode","dataset","replicatedValue","resetReplicaText","collapseTextArea","classList","remove","expandTextArea","add","SearchTextArea","textAreaRef","loading","onInput","onFocus","onBlur","onChange","onKeyDown","onKeyUp","onClear","popup","defaultInputProps","placeholder","rows","e","key","shiftKey","preventDefault","target","promiseTimeout","prom","ms","timeout","Promise","_","reject","setTimeout","Error","race","then","clearTimeout","SuggestionManager","constructor","ownerSearchBoxProps","this","suggestions","leftSuggestionElements","rightSuggestionElements","leftPanel","undefined","rightPanel","suggestedQuery","keyboardActiveDescendant","queryDataAttribute","suggestionEvents","previousActiveDescendantElement","leftSuggestions","rightSuggestions","triggerSuggestions","debounce","executeQuerySuggestion","getSuggestionDelay","partialSuggestionBindings","clearSuggestions","getSuggestions","getSuggestionElements","allSuggestionElements","activeDescendantElement","hasActiveDescendant","querySelector","onSubmit","clickOnActiveElement","updateActiveDescendant","forceUpdate","getHost","updateKeyboardActiveDescendant","click","isRightPanelInFocus","isNullOrUndefined","panelInFocus","initializeSuggestions","map","event","registerSuggestionsFromEvent","stopPropagation","push","detail","registerSuggestions","isDoubleList","Boolean","length","focusPanel","side","panel","firstElementChild","panelHasActiveDescendant","contains","newValue","updateDescendants","clearSuggestionElements","focusNextValue","hasSuggestions","nextOrFirstValue","focusValue","scrollActiveDescendantIntoView","updateQueryFromSuggestion","onSuggestionMouseOver","item","thisPanel","query","updateSuggestedQuery","onSuggestionClick","updateOwnerSearchboxQuery","onSelect","focusPreviousValue","firstValue","previousOrLastValue","settled","allSettled","suggestion","resolve","getSuggestionTimeout","fulfilledSuggestions","forEach","j","status","getLogger","warn","splitSuggestions","isDefault","filter","sort","sortSuggestions","getAndFilterLeftSuggestionElements","defaultSuggestedQuery","find","elementHasQuery","lastValue","lastElementChild","firstChild","parentOfActiveDescendant","parentElement","previousElementSibling","a","b","position","nextElementSibling","scrollIntoView","block","getAttribute","getSearchBoxValue","updateQuery","onSuggestedQueryChange","updateSuggestionElements","isPanelInFocus","escaped","DOMPurify","sanitize","CSS","escape","closest","suggestionElements","filterOnDuplicate","Set","out","suggestionElement","has","elements","flatMap","renderItems","max","getNumberOfSuggestionsToDisplay","elementHasNoQuery","slice","newPrevDescendantElement"],"sources":["src/components/common/search-box/stencil-search-box-wrapper.tsx","src/components/common/search-box/stencil-text-area-clear-button.tsx","src/components/common/search-box/stencil-search-text-area.tsx","src/utils/promise-utils.ts","src/components/common/suggestions/stencil-suggestion-manager.ts"],"sourcesContent":["import {FunctionalComponent, h} from '@stencil/core';\n\ninterface Props {\n disabled: boolean;\n onFocusout?: (event: FocusEvent) => void;\n}\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const SearchBoxWrapper: FunctionalComponent<Props> = (\n props,\n children\n) => {\n const getClasses = () => {\n const baseClasses =\n 'flex bg-background w-full border border-neutral rounded-md focus-within:ring-3 absolute top-0 left-0';\n const focusClasses = props.disabled\n ? 'focus-within:border-disabled focus-within:ring-neutral'\n : 'focus-within:border-primary focus-within:ring-ring-primary';\n\n return [baseClasses, focusClasses].join(' ');\n };\n\n return (\n <div part=\"wrapper\" class={getClasses()} onFocusout={props.onFocusout}>\n {children}\n </div>\n );\n};\n","import {FunctionalComponent, h} from '@stencil/core';\nimport ClearSlim from '../../../images/clear-slim.svg';\nimport {AnyBindings} from '../interface/bindings';\nimport {Button, StencilButtonProps} from '../stencil-button';\n\ninterface Props extends Partial<StencilButtonProps> {\n bindings: AnyBindings;\n inputRef: HTMLInputElement | HTMLTextAreaElement | null;\n}\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const TextAreaClearButton: FunctionalComponent<Props> = ({\n inputRef,\n bindings,\n onClick,\n ...defaultButtonProps\n}) => (\n <div\n part=\"clear-button-wrapper\"\n class=\"ml-2 flex items-center justify-center py-2\"\n >\n <Button\n style=\"text-transparent\"\n part=\"clear-button\"\n class=\"text-neutral-dark flex h-8 w-8 shrink-0 items-center justify-center\"\n onClick={() => {\n onClick?.();\n inputRef?.focus();\n }}\n ariaLabel={bindings.i18n.t('clear')}\n {...defaultButtonProps}\n >\n <atomic-icon\n part=\"clear-icon\"\n icon={ClearSlim}\n class=\"h-4 w-4\"\n ></atomic-icon>\n </Button>\n </div>\n);\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport {AnyBindings} from '../interface/bindings';\nimport {TextAreaClearButton} from './stencil-text-area-clear-button';\n\ninterface Props extends JSXBase.TextareaHTMLAttributes<HTMLTextAreaElement> {\n textAreaRef: HTMLTextAreaElement;\n loading: boolean;\n bindings: AnyBindings;\n value: string;\n ariaLabel: string;\n onClear(): void;\n popup?: {\n id: string;\n activeDescendant: string;\n expanded: boolean;\n hasSuggestions: boolean;\n };\n}\n\nfunction getPopupAttributes(props: Required<Props>['popup']) {\n return {\n autocomplete: 'off',\n autocapitalize: 'off',\n autocorrect: 'off',\n ...(props.activeDescendant && {\n 'aria-activedescendant': props.activeDescendant,\n }),\n 'aria-autocomplete': 'both',\n 'aria-haspopup': 'true',\n 'aria-controls': props.id,\n };\n}\n\nfunction syncTextWithReplica(elem: HTMLTextAreaElement, value?: string) {\n const parent = elem?.parentNode as HTMLElement;\n if (!parent) {\n return;\n }\n if (elem.value === '\\n') {\n return;\n }\n parent.dataset.replicatedValue = value ?? elem.value;\n}\n\nfunction resetReplicaText(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n delete parent.dataset.replicatedValue;\n }\n}\n\nfunction collapseTextArea(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n parent.classList.remove('expanded');\n }\n}\n\nfunction expandTextArea(elem: HTMLTextAreaElement) {\n const parent = elem?.parentNode as HTMLElement;\n if (parent) {\n parent.classList.add('expanded');\n }\n}\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const SearchTextArea: FunctionalComponent<Props> = ({\n textAreaRef,\n loading,\n bindings,\n onInput,\n onFocus,\n onBlur,\n onChange,\n onKeyDown,\n onKeyUp,\n value,\n ariaLabel,\n onClear,\n popup,\n ...defaultInputProps\n}) => (\n <div class=\"flex grow overflow-hidden\">\n <div part=\"textarea-expander\" class=\"grid grow overflow-hidden\">\n <textarea\n part=\"textarea\"\n aria-label={ariaLabel}\n placeholder={bindings.i18n.t('search')}\n class=\"placeholder-neutral-dark\"\n rows={1}\n onInput={(e) => {\n onInput?.(e);\n syncTextWithReplica(textAreaRef);\n }}\n onKeyDown={(e) => {\n syncTextWithReplica(textAreaRef);\n if (e.key === 'Enter') {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n }\n onKeyDown?.(e);\n }}\n onKeyUp={(e) => {\n onKeyUp?.(e);\n if (e.key === 'Enter') {\n e.preventDefault();\n return;\n }\n syncTextWithReplica(textAreaRef);\n }}\n onBlur={(e) => {\n onBlur?.(e);\n collapseTextArea(textAreaRef);\n syncTextWithReplica(textAreaRef);\n }}\n onChange={(e) => {\n onChange?.(e);\n syncTextWithReplica(textAreaRef);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n const target = e.target as HTMLTextAreaElement;\n syncTextWithReplica(textAreaRef ?? target);\n expandTextArea(textAreaRef ?? target);\n }}\n autocomplete=\"off\"\n {...(popup && getPopupAttributes(popup))}\n {...defaultInputProps}\n value={value}\n />\n </div>\n\n {loading && (\n <div class=\"searchbox-button-wrapper ml-2 flex items-center justify-center\">\n <span\n part=\"loading\"\n class=\"loading mr-2 grid h-5 w-5 animate-spin place-items-center rounded-full bg-linear-to-r\"\n ></span>\n </div>\n )}\n {!loading && value && (\n <TextAreaClearButton\n inputRef={textAreaRef}\n bindings={bindings}\n onClick={() => {\n onClear();\n resetReplicaText(textAreaRef);\n }}\n />\n )}\n </div>\n);\n","export function promiseTimeout<T>(prom: T | Promise<T>, ms: number) {\n let id: NodeJS.Timeout;\n const timeout = new Promise((_, reject) => {\n id = setTimeout(() => {\n reject(new Error('Promise timed out.'));\n }, ms);\n });\n return Promise.race([prom, timeout]).then(() => {\n clearTimeout(id);\n });\n}\n","import {isNullOrUndefined} from '@coveo/bueno';\nimport {forceUpdate} from '@stencil/core';\nimport DOMPurify from 'dompurify';\nimport {debounce} from '../../../utils/debounce-utils';\nimport {promiseTimeout} from '../../../utils/promise-utils';\nimport type {\n SearchBoxSuggestionElement,\n SearchBoxSuggestionsBindings,\n SearchBoxSuggestionsEvent,\n} from './suggestions-types';\nimport {elementHasNoQuery, elementHasQuery} from './suggestions-utils';\n\n/**\n * List of suggestions that will be displayed along other lists (e.g recent queries) when the search box's input is selected.\n */\nexport interface SearchBoxSuggestions {\n /**\n * The search box will sort the position of suggestions using this value, the lowest value being first.\n * By default, the DOM position will be used.\n */\n position: number;\n /**\n * Whether the suggestions should be listed in the right or left panel. By default, the suggestions are listed in the right panel.\n */\n panel?: 'left' | 'right';\n /**\n * Method that returns the list of elements which will be rendered in the list of suggestions.\n */\n renderItems(): SearchBoxSuggestionElement[];\n /**\n * Hook called when the user changes the search box's input value. This can lead to all the query suggestions being updated.\n */\n onInput?(): Promise<unknown>;\n /**\n * Hook called when the current suggested query changes as the user navigates the list of suggestions.\n * This is used for instant results, which are rendered based on the current suggested query.\n * @param q The new current suggested query.\n */\n onSuggestedQueryChange?(q: string): Promise<unknown>;\n}\n\ninterface SearchBoxProps {\n getSearchBoxValue: () => string;\n updateQuery: (suggestedQuery: string) => void;\n getSuggestionTimeout: () => number;\n getNumberOfSuggestionsToDisplay: () => number;\n getSuggestionDelay: () => number;\n getLogger: () => Pick<typeof console, 'warn'>;\n getHost: () => HTMLElement;\n}\n\nexport class SuggestionManager<SearchBoxController> {\n public suggestions: SearchBoxSuggestions[] = [];\n public leftSuggestionElements: SearchBoxSuggestionElement[] = [];\n public rightSuggestionElements: SearchBoxSuggestionElement[] = [];\n public leftPanel: HTMLElement | undefined = undefined;\n public rightPanel: HTMLElement | undefined = undefined;\n public triggerSuggestions: () => Promise<void>;\n public activeDescendant = '';\n public suggestedQuery = '';\n public keyboardActiveDescendant = '';\n\n private queryDataAttribute = 'data-query';\n private suggestionEvents: SearchBoxSuggestionsEvent<SearchBoxController>[] =\n [];\n\n private previousActiveDescendantElement: HTMLElement | null = null;\n private leftSuggestions: SearchBoxSuggestions[] = [];\n private rightSuggestions: SearchBoxSuggestions[] = [];\n\n constructor(private ownerSearchBoxProps: SearchBoxProps) {\n this.triggerSuggestions = debounce(\n () => this.executeQuerySuggestion(),\n this.ownerSearchBoxProps.getSuggestionDelay()\n );\n }\n\n public get partialSuggestionBindings(): Pick<\n SearchBoxSuggestionsBindings<SearchBoxController>,\n | 'suggestedQuery'\n | 'clearSuggestions'\n | 'triggerSuggestions'\n | 'getSuggestions'\n | 'getSuggestionElements'\n > {\n return {\n suggestedQuery: () => this.suggestedQuery,\n clearSuggestions: () => this.clearSuggestions(),\n triggerSuggestions: () => this.triggerSuggestions(),\n getSuggestions: () => this.suggestions,\n getSuggestionElements: () => this.allSuggestionElements,\n };\n }\n\n public get activeDescendantElement(): HTMLElement | null {\n if (!this.hasActiveDescendant) {\n return null;\n }\n\n return (\n this.leftPanel?.querySelector(`#${this.activeDescendant}`) ||\n this.rightPanel?.querySelector(`#${this.activeDescendant}`) ||\n null\n );\n }\n\n public onSubmit() {\n this.clickOnActiveElement();\n this.clearSuggestions();\n }\n\n public updateActiveDescendant(id = '') {\n this.activeDescendant = id;\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n public updateKeyboardActiveDescendant(id = '') {\n this.keyboardActiveDescendant = id;\n }\n\n public clickOnActiveElement() {\n this.activeDescendantElement?.click();\n this.updateActiveDescendant();\n }\n\n public isRightPanelInFocus() {\n if (\n isNullOrUndefined(this.panelInFocus) ||\n isNullOrUndefined(this.rightPanel)\n ) {\n return false;\n }\n\n return this.panelInFocus === this.rightPanel;\n }\n\n public initializeSuggestions(\n bindings: SearchBoxSuggestionsBindings<SearchBoxController>\n ) {\n this.suggestions = this.suggestionEvents.map((event) => event(bindings));\n }\n\n public registerSuggestionsFromEvent(\n event: CustomEvent<SearchBoxSuggestionsEvent<SearchBoxController>>,\n bindings: SearchBoxSuggestionsBindings<SearchBoxController>\n ) {\n event.preventDefault();\n event.stopPropagation();\n this.suggestionEvents.push(event.detail);\n this.suggestions.push(event.detail(bindings));\n }\n\n public registerSuggestions(suggestions: SearchBoxSuggestions) {\n this.suggestions.push(suggestions);\n }\n\n public get isDoubleList() {\n return Boolean(\n this.leftSuggestionElements.length && this.rightSuggestionElements.length\n );\n }\n\n public focusPanel(side: 'left' | 'right') {\n const panel = side === 'left' ? this.leftPanel : this.rightPanel;\n\n if (this.panelInFocus === panel) {\n return;\n }\n if (panel?.firstElementChild) {\n const panelHasActiveDescendant =\n this.previousActiveDescendantElement &&\n panel.contains(this.previousActiveDescendantElement);\n const newValue = panelHasActiveDescendant\n ? this.previousActiveDescendantElement!\n : (panel.firstElementChild as HTMLElement);\n this.updateDescendants(newValue.id);\n }\n }\n\n public clearSuggestions() {\n this.clearSuggestionElements();\n this.updateActiveDescendant();\n }\n\n public async focusNextValue() {\n if (!this.hasSuggestions || !this.nextOrFirstValue) {\n return;\n }\n\n await this.focusValue(this.nextOrFirstValue as HTMLElement);\n }\n\n public async focusValue(value: HTMLElement) {\n this.updateKeyboardActiveDescendant(value.id);\n this.updateActiveDescendant(value.id);\n this.scrollActiveDescendantIntoView();\n await this.updateQueryFromSuggestion();\n }\n\n public async onSuggestionMouseOver(\n item: SearchBoxSuggestionElement,\n side: 'left' | 'right',\n id: string\n ) {\n const thisPanel = side === 'left' ? this.leftPanel : this.rightPanel;\n // When hovering, always reset the keyboard active descendant\n this.updateKeyboardActiveDescendant();\n if (this.panelInFocus === thisPanel) {\n this.updateActiveDescendant(id);\n } else {\n this.updateDescendants(id);\n }\n if (item.query) {\n await this.updateSuggestedQuery(item.query);\n }\n }\n\n public async onSuggestionClick(item: SearchBoxSuggestionElement, e: Event) {\n if (item.query) {\n this.clearSuggestions();\n await this.updateOwnerSearchboxQuery(item.query);\n }\n item.onSelect?.(e);\n }\n\n public get hasSuggestions() {\n return !!this.allSuggestionElements.length;\n }\n\n public get allSuggestionElements() {\n return [...this.leftSuggestionElements, ...this.rightSuggestionElements];\n }\n\n public async focusPreviousValue() {\n if (this.firstValue === this.activeDescendantElement) {\n this.updateKeyboardActiveDescendant();\n this.updateActiveDescendant();\n return;\n }\n\n if (!this.hasSuggestions || !this.previousOrLastValue) {\n return;\n }\n\n await this.focusValue(this.previousOrLastValue as HTMLElement);\n }\n\n public get hasActiveDescendant() {\n return this.activeDescendant !== '';\n }\n\n private async executeQuerySuggestion() {\n this.updateActiveDescendant();\n const settled = await Promise.allSettled(\n this.suggestions.map((suggestion) =>\n promiseTimeout(\n suggestion.onInput ? suggestion.onInput() : Promise.resolve(),\n this.ownerSearchBoxProps.getSuggestionTimeout()\n )\n )\n );\n\n const fulfilledSuggestions: SearchBoxSuggestions[] = [];\n\n settled.forEach((prom, j) => {\n if (prom.status === 'fulfilled') {\n fulfilledSuggestions.push(this.suggestions[j]);\n } else {\n this.ownerSearchBoxProps\n .getLogger()\n .warn(\n 'Some query suggestions are not being shown because the promise timed out.'\n );\n }\n });\n\n const splitSuggestions = (side: 'left' | 'right', isDefault = false) =>\n fulfilledSuggestions\n .filter(\n (suggestion) =>\n suggestion.panel === side || (!suggestion.panel && isDefault)\n )\n .sort(this.sortSuggestions);\n\n this.leftSuggestions = splitSuggestions('left', true);\n this.leftSuggestionElements = this.getAndFilterLeftSuggestionElements();\n\n this.rightSuggestions = splitSuggestions('right');\n this.rightSuggestionElements = this.getSuggestionElements(\n this.rightSuggestions\n );\n\n const defaultSuggestedQuery =\n this.allSuggestionElements.find(elementHasQuery)?.query || '';\n\n await this.updateSuggestedQuery(defaultSuggestedQuery);\n }\n\n private get lastValue() {\n return this.panelInFocus?.lastElementChild;\n }\n\n private get previousOrLastValue() {\n if (!this.hasActiveDescendant) {\n return this.lastValue?.firstChild;\n }\n\n const parentOfActiveDescendant =\n this.activeDescendantElement?.parentElement;\n return (\n parentOfActiveDescendant?.previousElementSibling?.firstChild ||\n this.firstValue?.firstChild\n );\n }\n\n private sortSuggestions(a: SearchBoxSuggestions, b: SearchBoxSuggestions) {\n return a.position - b.position;\n }\n\n private get nextOrFirstValue() {\n if (!this.hasActiveDescendant) {\n return this.firstValue?.firstChild;\n }\n\n const parentOfActiveDescendant =\n this.activeDescendantElement?.parentElement;\n return (\n parentOfActiveDescendant?.nextElementSibling?.firstChild ||\n this.firstValue?.firstChild\n );\n }\n\n private get firstValue() {\n return this.panelInFocus?.firstElementChild;\n }\n\n private get panelInFocus() {\n if (this.leftPanel?.contains(this.activeDescendantElement)) {\n return this.leftPanel;\n }\n if (this.rightPanel?.contains(this.activeDescendantElement)) {\n return this.rightPanel;\n }\n return this.leftPanel || this.rightPanel;\n }\n\n private scrollActiveDescendantIntoView() {\n this.activeDescendantElement?.scrollIntoView({\n block: 'nearest',\n });\n }\n\n private async updateQueryFromSuggestion() {\n const suggestedQuery = this.activeDescendantElement?.getAttribute(\n this.queryDataAttribute\n );\n await this.updateOwnerSearchboxQuery(suggestedQuery || '');\n }\n\n private async updateOwnerSearchboxQuery(query: string) {\n if (query && this.ownerSearchBoxProps.getSearchBoxValue() !== query) {\n this.ownerSearchBoxProps.updateQuery(query);\n await this.updateSuggestedQuery(query);\n }\n }\n\n private async updateSuggestedQuery(suggestedQuery: string) {\n await Promise.allSettled(\n this.suggestions.map((suggestion) =>\n promiseTimeout(\n suggestion.onSuggestedQueryChange\n ? suggestion.onSuggestedQueryChange(suggestedQuery)\n : Promise.resolve(),\n this.ownerSearchBoxProps.getSuggestionTimeout()\n )\n )\n );\n this.suggestedQuery = suggestedQuery;\n this.updateSuggestionElements(suggestedQuery);\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n private updateSuggestionElements(query: string) {\n if (!this.isPanelInFocus(this.leftPanel, query)) {\n this.leftSuggestionElements = this.getAndFilterLeftSuggestionElements();\n }\n\n if (!this.isPanelInFocus(this.rightPanel, query)) {\n this.rightSuggestionElements = this.getSuggestionElements(\n this.rightSuggestions\n );\n }\n }\n\n public forceUpdate() {\n this.updateSuggestionElements(this.suggestedQuery);\n forceUpdate(this.ownerSearchBoxProps.getHost());\n }\n\n private isPanelInFocus(\n panel: HTMLElement | undefined,\n query: string\n ): boolean {\n if (!this.activeDescendantElement) {\n return false;\n }\n\n if (query) {\n const escaped = DOMPurify.sanitize(query);\n return !!panel?.querySelector(\n `[${this.queryDataAttribute}=\"${CSS.escape(escaped)}\"]`\n );\n }\n\n return this.activeDescendantElement?.closest('ul') === panel;\n }\n\n private getAndFilterLeftSuggestionElements() {\n const suggestionElements = this.getSuggestionElements(this.leftSuggestions);\n const filterOnDuplicate = new Set();\n\n const out = suggestionElements.filter((suggestionElement) => {\n if (isNullOrUndefined(suggestionElement.query)) {\n return true;\n }\n if (filterOnDuplicate.has(suggestionElement.query)) {\n return false;\n } else {\n filterOnDuplicate.add(suggestionElement.query);\n return true;\n }\n });\n\n return out;\n }\n\n private getSuggestionElements(suggestions: SearchBoxSuggestions[]) {\n const elements = suggestions.flatMap((suggestion) =>\n suggestion.renderItems()\n );\n\n const max =\n this.ownerSearchBoxProps.getNumberOfSuggestionsToDisplay() +\n elements.filter(elementHasNoQuery).length;\n\n return elements.slice(0, max);\n }\n\n private updateDescendants(activeDescendant = '') {\n const newPrevDescendantElement = this.activeDescendantElement;\n this.previousActiveDescendantElement = newPrevDescendantElement;\n this.updateActiveDescendant(activeDescendant);\n }\n\n private clearSuggestionElements() {\n this.leftSuggestionElements = [];\n this.rightSuggestionElements = [];\n }\n}\n"],"mappings":"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","ignoreList":[]}
|