@coveo/atomic 3.32.4-pre.cd7631fc39 → 3.32.4-pre.d601eb7f07

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.
Files changed (134) hide show
  1. package/dist/atomic/_atomic.esm.js +1 -1
  2. package/dist/atomic/components/analytics-config.js +1 -1
  3. package/dist/atomic/components/atomic-folded-result-list.js +1 -1
  4. package/dist/atomic/components/atomic-folded-result-list.js.map +1 -1
  5. package/dist/atomic/components/atomic-insight-folded-result-list.js +1 -1
  6. package/dist/atomic/components/atomic-insight-folded-result-list.js.map +1 -1
  7. package/dist/atomic/components/atomic-insight-result-list.js +1 -1
  8. package/dist/atomic/components/atomic-insight-result-list.js.map +1 -1
  9. package/dist/atomic/components/atomic-ipx-recs-list.js +1 -1
  10. package/dist/atomic/components/atomic-ipx-recs-list.js.map +1 -1
  11. package/dist/atomic/components/atomic-recs-list.js +1 -1
  12. package/dist/atomic/components/atomic-recs-list.js.map +1 -1
  13. package/dist/atomic/components/atomic-result-list.js +1 -1
  14. package/dist/atomic/components/atomic-result-list.js.map +1 -1
  15. package/dist/atomic/components/atomic-result-table-placeholder2.js +1 -1
  16. package/dist/atomic/components/atomic-result-table-placeholder2.js.map +1 -1
  17. package/dist/atomic/components/atomic-search-interface.js +3 -3
  18. package/dist/atomic/components/atomic-search-interface.js.map +1 -1
  19. package/dist/atomic/components/atomic-timeframe.js.map +1 -1
  20. package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.js +2 -2
  21. package/dist/atomic/components/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tw.css.js +3 -2
  22. package/dist/atomic/components/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.js +2 -2
  23. package/dist/atomic/components/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.tw.css.js +3 -2
  24. package/dist/atomic/components/components/commerce/atomic-commerce-facet/atomic-commerce-facet.js +3 -3
  25. package/dist/atomic/components/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.js +2 -2
  26. package/dist/atomic/components/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.tw.css.js +3 -2
  27. package/dist/atomic/components/components/commerce/atomic-commerce-layout/atomic-commerce-layout.js +2 -2
  28. package/dist/atomic/components/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tw.css.js +3 -2
  29. package/dist/atomic/components/components/commerce/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.js +4 -4
  30. package/dist/atomic/components/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.js +2 -2
  31. package/dist/atomic/components/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tw.css.js +3 -2
  32. package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.js +2 -2
  33. package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tw.css.js +3 -2
  34. package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.js +3 -3
  35. package/dist/atomic/components/components/commerce/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.js +3 -3
  36. package/dist/atomic/components/components/commerce/atomic-product/atomic-product.js +2 -2
  37. package/dist/atomic/components/components/commerce/atomic-product/atomic-product.tw.css.js +3 -2
  38. package/dist/atomic/components/components/commerce/atomic-product-link/atomic-product-link.js +2 -2
  39. package/dist/atomic/components/components/commerce/atomic-product-link/atomic-product-link.tw.css.js +3 -2
  40. package/dist/atomic/components/components/commerce/atomic-product-rating/atomic-product-rating.js +5 -6
  41. package/dist/atomic/components/components/common/atomic-rating/atomic-rating.tw.css.js +2 -1
  42. package/dist/atomic/components/global/environment.js +1 -1
  43. package/dist/atomic/components/utils/coveo.tw.css.js +1 -1
  44. package/dist/atomic/p-005dcc88.entry.js +2 -0
  45. package/dist/atomic/{p-08d7290a.entry.js.map → p-005dcc88.entry.js.map} +1 -1
  46. package/dist/atomic/{p-b99739cf.entry.js → p-394bb225.entry.js} +2 -2
  47. package/dist/atomic/{p-64963829.entry.js → p-3bda3e96.entry.js} +2 -2
  48. package/dist/atomic/{p-64963829.entry.js.map → p-3bda3e96.entry.js.map} +1 -1
  49. package/dist/atomic/{p-3192a56c.entry.js → p-41b88804.entry.js} +2 -2
  50. package/dist/atomic/{p-3192a56c.entry.js.map → p-41b88804.entry.js.map} +1 -1
  51. package/dist/atomic/p-58fe83ae.entry.js +2 -0
  52. package/dist/atomic/{p-1899894c.entry.js.map → p-58fe83ae.entry.js.map} +1 -1
  53. package/dist/atomic/p-62dbc255.entry.js +2 -0
  54. package/dist/atomic/{p-a13ee8b3.entry.js.map → p-62dbc255.entry.js.map} +1 -1
  55. package/dist/atomic/{p-5c1711ce.js → p-7b3cf5a8.js} +2 -2
  56. package/dist/atomic/p-8d0b9f5a.entry.js +2 -0
  57. package/dist/atomic/{p-0dc84319.entry.js.map → p-8d0b9f5a.entry.js.map} +1 -1
  58. package/dist/atomic/{p-8ef7e37a.entry.js → p-91d64c67.entry.js} +2 -2
  59. package/dist/atomic/{p-8ef7e37a.entry.js.map → p-91d64c67.entry.js.map} +1 -1
  60. package/dist/atomic/p-ba52e9f3.entry.js.map +1 -1
  61. package/dist/atomic/{p-b23fd1d3.entry.js → p-f5732a86.entry.js} +2 -2
  62. package/dist/atomic/p-f9289f2f.entry.js +2 -0
  63. package/dist/atomic/{p-3ace419e.entry.js.map → p-f9289f2f.entry.js.map} +1 -1
  64. package/dist/cjs/{analytics-config-e6628bd8.js → analytics-config-a71c1424.js} +2 -2
  65. package/dist/cjs/{analytics-config-e6628bd8.js.map → analytics-config-a71c1424.js.map} +1 -1
  66. package/dist/cjs/atomic-folded-result-list.cjs.entry.js +1 -1
  67. package/dist/cjs/atomic-folded-result-list.cjs.entry.js.map +1 -1
  68. package/dist/cjs/atomic-insight-folded-result-list.cjs.entry.js +1 -1
  69. package/dist/cjs/atomic-insight-folded-result-list.cjs.entry.js.map +1 -1
  70. package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
  71. package/dist/cjs/atomic-insight-result-list.cjs.entry.js +1 -1
  72. package/dist/cjs/atomic-insight-result-list.cjs.entry.js.map +1 -1
  73. package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js +1 -1
  74. package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js.map +1 -1
  75. package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
  76. package/dist/cjs/atomic-recs-list.cjs.entry.js +1 -1
  77. package/dist/cjs/atomic-recs-list.cjs.entry.js.map +1 -1
  78. package/dist/cjs/atomic-result-list.cjs.entry.js +1 -1
  79. package/dist/cjs/atomic-result-list.cjs.entry.js.map +1 -1
  80. package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js +1 -1
  81. package/dist/cjs/atomic-result-placeholder_8.cjs.entry.js.map +1 -1
  82. package/dist/cjs/atomic-search-interface.cjs.entry.js +4 -4
  83. package/dist/cjs/atomic-search-interface.cjs.entry.js.map +1 -1
  84. package/dist/cjs/atomic-timeframe.cjs.entry.js.map +1 -1
  85. package/dist/cjs/version.cjs.js +2 -2
  86. package/dist/esm/{analytics-config-8ca6ccba.js → analytics-config-c9e5b4d4.js} +2 -2
  87. package/dist/esm/{analytics-config-8ca6ccba.js.map → analytics-config-c9e5b4d4.js.map} +1 -1
  88. package/dist/esm/atomic-folded-result-list.entry.js +1 -1
  89. package/dist/esm/atomic-folded-result-list.entry.js.map +1 -1
  90. package/dist/esm/atomic-insight-folded-result-list.entry.js +1 -1
  91. package/dist/esm/atomic-insight-folded-result-list.entry.js.map +1 -1
  92. package/dist/esm/atomic-insight-interface.entry.js +1 -1
  93. package/dist/esm/atomic-insight-result-list.entry.js +1 -1
  94. package/dist/esm/atomic-insight-result-list.entry.js.map +1 -1
  95. package/dist/esm/atomic-ipx-recs-list.entry.js +1 -1
  96. package/dist/esm/atomic-ipx-recs-list.entry.js.map +1 -1
  97. package/dist/esm/atomic-recs-interface.entry.js +1 -1
  98. package/dist/esm/atomic-recs-list.entry.js +1 -1
  99. package/dist/esm/atomic-recs-list.entry.js.map +1 -1
  100. package/dist/esm/atomic-result-list.entry.js +1 -1
  101. package/dist/esm/atomic-result-list.entry.js.map +1 -1
  102. package/dist/esm/atomic-result-placeholder_8.entry.js +1 -1
  103. package/dist/esm/atomic-result-placeholder_8.entry.js.map +1 -1
  104. package/dist/esm/atomic-search-interface.entry.js +4 -4
  105. package/dist/esm/atomic-search-interface.entry.js.map +1 -1
  106. package/dist/esm/atomic-timeframe.entry.js.map +1 -1
  107. package/dist/esm/version.js +2 -2
  108. package/dist/types/components/commerce/atomic-commerce-breadbox/atomic-commerce-breadbox.tw.css.d.ts +2 -0
  109. package/dist/types/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.tw.css.d.ts +2 -0
  110. package/dist/types/components/commerce/atomic-commerce-facet-number-input/atomic-commerce-facet-number-input.tw.css.d.ts +2 -0
  111. package/dist/types/components/commerce/atomic-commerce-layout/atomic-commerce-layout.tw.css.d.ts +2 -0
  112. package/dist/types/components/commerce/atomic-commerce-product-list/atomic-commerce-product-list.tw.css.d.ts +2 -0
  113. package/dist/types/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.tw.css.d.ts +2 -0
  114. package/dist/types/components/commerce/atomic-product/atomic-product.tw.css.d.ts +2 -0
  115. package/dist/types/components/commerce/atomic-product-link/atomic-product-link.tw.css.d.ts +2 -0
  116. package/dist/types/components/commerce/atomic-product-rating/atomic-product-rating.d.ts +1 -1
  117. package/dist/types/components/search/atomic-search-interface/atomic-search-interface.d.ts +1 -1
  118. package/dist/types/components.d.ts +1 -1
  119. package/docs/atomic-docs.json +2 -2
  120. package/package.json +3 -3
  121. package/dist/atomic/components/components/commerce/atomic-commerce-facet/atomic-commerce-facet.tw.css.js +0 -3
  122. package/dist/atomic/components/components/commerce/atomic-commerce-numeric-facet/atomic-commerce-numeric-facet.tw.css.js +0 -3
  123. package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.tw.css.js +0 -3
  124. package/dist/atomic/components/components/commerce/atomic-commerce-timeframe-facet/atomic-commerce-timeframe-facet.tw.css.js +0 -3
  125. package/dist/atomic/components/components/commerce/atomic-product-children/atomic-product-children.tw.css.js +0 -2
  126. package/dist/atomic/components/components/commerce/atomic-product-rating/atomic-product-rating.tw.css.js +0 -3
  127. package/dist/atomic/p-08d7290a.entry.js +0 -2
  128. package/dist/atomic/p-0dc84319.entry.js +0 -2
  129. package/dist/atomic/p-1899894c.entry.js +0 -2
  130. package/dist/atomic/p-3ace419e.entry.js +0 -2
  131. package/dist/atomic/p-a13ee8b3.entry.js +0 -2
  132. /package/dist/atomic/{p-b99739cf.entry.js.map → p-394bb225.entry.js.map} +0 -0
  133. /package/dist/atomic/{p-5c1711ce.js.map → p-7b3cf5a8.js.map} +0 -0
  134. /package/dist/atomic/{p-b23fd1d3.entry.js.map → p-f5732a86.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["getAnalyticsConfig","searchEngineConfig","enabled","store","analytics","analyticsMode","getNextAnalyticsConfig","getLegacyAnalyticsConfig","analyticsClientMiddleware","event","payload","augmentAnalytics","defaultConfiguration","augmentAnalyticsConfigWithDocument","immutableConfiguration","augmentAnalyticsConfigWithAtomicVersion","config","result","augmentWithExternalMiddleware","augmentAnalyticsWithAtomicVersion","augmentAnalyticsWithFacetTitles","allFacets","getAllFacets","getAtomicFacetLabelOrOriginalTitle","facetId","originalTitle","label","facetState","map","analyticsFacetState","id","title","customData","facetTitle","createSearchStore","createBaseStore","loadingFlags","iconAssetsPath","resultList","undefined","mobileBreakpoint","DEFAULT_MOBILE_BREAKPOINT","facets","numericFacets","dateFacets","categoryFacets","facetElements","fieldsToInclude","sortOptions","unsetLoadingFlag","loadingFlag","setLoadingFlag","isMobile","window","matchMedia","makeDesktopQuery","state","matches","registerFacet","facetType","data","getFacetElements","waitUntilAppLoaded","callback","getUniqueIDFromEngine","engine","search","response","searchUid","hasLoadingFlag","indexOf","addFieldsToInclude","fields","currentFields","atomicSearchInterfaceCss","AtomicSearchInterfaceStyle0","FirstSearchExecutedFlag","AtomicSearchInterface","constructor","hostRef","this","unsubscribeUrlManager","unsubscribeSearchStatus","initialized","relevanceInspectorIsOpen","language","reflectStateInUrl","scrollContainer","languageAssetsPath","enableRelevanceInspector","onHashChange","urlManager","synchronize","fragment","initRelevanceInspector","commonInterfaceHelper","CommonAtomicInterfaceHelper","promise","componentWillLoadCalledPromise","resolve","componentWillLoadResolver","Promise","withResolvers","i18Initialized","i18n","i18next","createInstance","connectedCallback","updateMobileBreakpoint","componentWillLoad","CspNonce","setNonce","initAriaLive","initFieldsToInclude","updateSearchConfiguration","updatedProp","newValue","engineIsCreated","loadSearchConfigurationActions","dispatch","updateSearchHub","searchHub","updatePipeline","pipeline","toggleAnalytics","onAnalyticsChange","updateLanguage","locale","onLanguageChange","updateIconAssetsPath","disconnectedCallback","removeEventListener","handleInitialization","onComponentInitializing","scrollToTop","scrollContainerElement","document","querySelector","bindings","logger","warn","scrollIntoView","behavior","closeRelevanceInspector","initialize","options","internalInitialization","initEngine","initializeWithSearchEngine","console","mismatchedInterfaceAndEnginePropError","executeFirstSearch","error","host","safeStorage","SafeStorage","standaloneSearchBoxData","getParsedJSON","StorageItems","STANDALONE_SEARCH_BOX_DATA","removeItem","updateQuery","loadQueryActions","value","enableQuerySyntax","q","executeFirstSearchAfterStandaloneSearchBoxRedirect","interfaceElement","createStyleElement","styleTag","createElement","setAttribute","createScriptElement","EcommerceDefaultFieldsToInclude","concat","registerFieldsToInclude","loadFieldActions","breakpoint","searchConfig","getSearchConfiguration","analyticsConfig","buildSearchEngine","configuration","loggerOptions","level","logLevel","searchConfigFromProps","timezone","location","hash","slice","initUrlManager","buildUrlManager","initialState","subscribe","updateHash","addEventListener","Array","from","children","some","element","tagName","ariaLive","prepend","e","altKey","initSearchStatus","searchStatus","buildSearchStatus","hasNoResultsAfterInitialSearch","hasResults","firstSearchExecuted","hasError","classList","toggle","noResultsSelector","errorSelector","firstSearchExecutedSelector","newFragment","history","replaceState","info","pushState","all","onInitialization","markParentAsReady","render","h","key","open","__decorate","ArrayProp"],"sources":["src/components/search/atomic-search-interface/analytics-config.ts","src/components/search/atomic-search-interface/store.ts","src/components/search/atomic-search-interface/atomic-search-interface.pcss?tag=atomic-search-interface&encapsulation=shadow","src/components/search/atomic-search-interface/atomic-search-interface.tsx"],"sourcesContent":["import type {\n AnalyticsConfiguration,\n SearchEngineConfiguration,\n} from '@coveo/headless';\nimport {\n type AnalyticsPayload,\n augmentAnalyticsConfigWithAtomicVersion,\n augmentAnalyticsConfigWithDocument,\n augmentAnalyticsWithAtomicVersion,\n augmentWithExternalMiddleware,\n getNextAnalyticsConfig,\n} from '../../common/interface/analytics-config';\nimport type {createSearchStore} from './store';\n\nexport function getAnalyticsConfig(\n searchEngineConfig: SearchEngineConfiguration,\n enabled: boolean,\n store: ReturnType<typeof createSearchStore>\n): AnalyticsConfiguration {\n switch (searchEngineConfig.analytics?.analyticsMode) {\n case 'next':\n return getNextAnalyticsConfig(searchEngineConfig, enabled);\n default:\n return getLegacyAnalyticsConfig(searchEngineConfig, enabled, store);\n }\n}\n\nfunction getLegacyAnalyticsConfig(\n searchEngineConfig: SearchEngineConfiguration,\n enabled: boolean,\n store: ReturnType<typeof createSearchStore>\n): AnalyticsConfiguration {\n const analyticsClientMiddleware = (\n event: string,\n payload: AnalyticsPayload\n ) => augmentAnalytics(event, payload, store, searchEngineConfig);\n\n const defaultConfiguration: AnalyticsConfiguration = {\n analyticsClientMiddleware,\n enabled,\n ...augmentAnalyticsConfigWithDocument(),\n };\n\n const immutableConfiguration: AnalyticsConfiguration = {\n ...augmentAnalyticsConfigWithAtomicVersion(),\n };\n\n if (searchEngineConfig.analytics) {\n return {\n ...defaultConfiguration,\n ...searchEngineConfig.analytics,\n analyticsClientMiddleware,\n ...immutableConfiguration,\n };\n }\n\n return {\n ...defaultConfiguration,\n ...immutableConfiguration,\n };\n}\n\nfunction augmentAnalytics(\n event: string,\n payload: AnalyticsPayload,\n store: ReturnType<typeof createSearchStore>,\n config: SearchEngineConfiguration\n) {\n let result = augmentWithExternalMiddleware(event, payload, config);\n result = augmentAnalyticsWithAtomicVersion(result);\n result = augmentAnalyticsWithFacetTitles(result, store);\n return result;\n}\n\nfunction augmentAnalyticsWithFacetTitles(\n payload: AnalyticsPayload,\n store: ReturnType<typeof createSearchStore>\n) {\n const allFacets = store.getAllFacets();\n const getAtomicFacetLabelOrOriginalTitle = (\n facetId: string,\n originalTitle: string\n ) => (allFacets[facetId] ? allFacets[facetId].label() : originalTitle);\n\n if (payload.facetState) {\n payload.facetState = payload.facetState.map(\n (analyticsFacetState: {id: string; title: string}) => {\n const {id, title: originalTitle} = analyticsFacetState;\n return {\n ...analyticsFacetState,\n title: getAtomicFacetLabelOrOriginalTitle(id, originalTitle),\n };\n }\n );\n }\n\n if (\n payload.customData?.facetTitle &&\n payload.customData.facetId &&\n payload.customData.facetTitle\n ) {\n payload.customData.facetTitle = getAtomicFacetLabelOrOriginalTitle(\n payload.customData.facetId,\n payload.customData.facetTitle\n );\n }\n return payload;\n}\n","import type {\n DateFacetValue,\n NumericFacetValue,\n SearchEngine,\n SortCriterion,\n} from '@coveo/headless';\nimport {DEFAULT_MOBILE_BREAKPOINT} from '../../../utils/replace-breakpoint';\nimport type {\n FacetInfo,\n FacetStore,\n FacetType,\n FacetValueFormat,\n} from '../../common/facets/facet-common-store';\nimport {\n type BaseStore,\n createBaseStore,\n getFacetElements,\n type ResultListInfo,\n registerFacet,\n setLoadingFlag,\n unsetLoadingFlag,\n waitUntilAppLoaded,\n} from '../../common/interface/store';\nimport {makeDesktopQuery} from '../atomic-layout/search-layout';\n\nexport interface SortDropdownOption {\n tabs: {included: string[] | string; excluded: string[] | string};\n expression: string;\n criteria: SortCriterion[];\n label: string;\n}\n\ninterface FacetInfoMap {\n [facetId: string]:\n | FacetInfo\n | (FacetInfo & FacetValueFormat<NumericFacetValue>)\n | (FacetInfo & FacetValueFormat<DateFacetValue>);\n}\n\ninterface Data {\n loadingFlags: string[];\n iconAssetsPath: string;\n resultList: ResultListInfo | undefined;\n mobileBreakpoint: string;\n facets: FacetStore<FacetInfo>;\n numericFacets: FacetStore<FacetInfo & FacetValueFormat<NumericFacetValue>>;\n dateFacets: FacetStore<FacetInfo & FacetValueFormat<DateFacetValue>>;\n categoryFacets: FacetStore<FacetInfo>;\n facetElements: HTMLElement[];\n fieldsToInclude: string[];\n sortOptions: SortDropdownOption[];\n}\n\nexport type SearchStore = BaseStore<Data> & {\n unsetLoadingFlag(loadingFlag: string): void;\n setLoadingFlag(flag: string): void;\n isMobile(): boolean;\n registerFacet<T extends FacetType, U extends string>(\n facetType: T,\n data: Data[T][U] & {facetId: U; element: HTMLElement}\n ): void;\n getFacetElements(): HTMLElement[];\n waitUntilAppLoaded(callback: () => void): void;\n getUniqueIDFromEngine(engine: SearchEngine): string;\n hasLoadingFlag(loadingFlag: string): boolean;\n getAllFacets(): FacetInfoMap;\n addFieldsToInclude(fields: string[]): void;\n};\n\nexport function createSearchStore(): SearchStore {\n const store = createBaseStore<Data>({\n loadingFlags: [],\n iconAssetsPath: '',\n resultList: undefined,\n mobileBreakpoint: DEFAULT_MOBILE_BREAKPOINT,\n facets: {},\n numericFacets: {},\n dateFacets: {},\n categoryFacets: {},\n facetElements: [],\n fieldsToInclude: [],\n sortOptions: [],\n });\n\n return {\n ...store,\n\n unsetLoadingFlag(loadingFlag: string) {\n unsetLoadingFlag(store, loadingFlag);\n },\n\n setLoadingFlag(loadingFlag: string) {\n setLoadingFlag(store, loadingFlag);\n },\n\n isMobile() {\n return !window.matchMedia(makeDesktopQuery(store.state.mobileBreakpoint))\n .matches;\n },\n\n registerFacet<T extends FacetType, U extends string>(\n facetType: T,\n data: Data[T][U] & {facetId: U; element: HTMLElement}\n ) {\n registerFacet(store, facetType, data);\n },\n\n getFacetElements() {\n return getFacetElements(store);\n },\n\n waitUntilAppLoaded(callback: () => void) {\n waitUntilAppLoaded(store, callback);\n },\n\n getUniqueIDFromEngine(engine: SearchEngine): string {\n return engine.state.search.response.searchUid;\n },\n\n hasLoadingFlag(loadingFlag: string) {\n return store.state.loadingFlags.indexOf(loadingFlag) !== -1;\n },\n\n getAllFacets() {\n return {\n ...store.state.facets,\n ...store.state.dateFacets,\n ...store.state.categoryFacets,\n ...store.state.numericFacets,\n };\n },\n\n addFieldsToInclude(fields) {\n const currentFields = store.state.fieldsToInclude;\n store.state.fieldsToInclude = [...currentFields, ...fields];\n },\n };\n}\n","@import '../../../global/global.pcss';\n\n:host {\n display: block;\n height: inherit;\n width: inherit;\n & > slot {\n height: inherit;\n }\n}\n","import {markParentAsReady} from '@/src/utils/init-queue';\nimport {\n LogLevel,\n Unsubscribe,\n buildUrlManager,\n UrlManager,\n buildSearchEngine,\n SearchEngine,\n SearchEngineConfiguration,\n SearchStatus,\n buildSearchStatus,\n loadSearchConfigurationActions,\n loadQueryActions,\n EcommerceDefaultFieldsToInclude,\n loadFieldActions,\n} from '@coveo/headless';\nimport {\n Component,\n Prop,\n h,\n Listen,\n Method,\n Watch,\n Element,\n State,\n setNonce,\n} from '@stencil/core';\nimport i18next, {i18n} from 'i18next';\nimport {InitializeEvent} from '../../../utils/initialization-utils';\nimport {\n SafeStorage,\n StandaloneSearchBoxData,\n StorageItems,\n} from '../../../utils/local-storage-utils';\nimport {ArrayProp} from '../../../utils/props-utils';\nimport {\n StencilBaseAtomicInterface,\n CommonAtomicInterfaceHelper,\n mismatchedInterfaceAndEnginePropError,\n} from '../../common/interface/interface-common-stencil';\nimport {\n errorSelector,\n firstSearchExecutedSelector,\n noResultsSelector,\n} from '../atomic-layout/search-layout';\nimport {getAnalyticsConfig} from './analytics-config';\nimport type {Bindings as _Bindings} from './interfaces';\nimport {createSearchStore, SearchStore} from './store';\n\nconst FirstSearchExecutedFlag = 'firstSearchExecuted';\nexport type InitializationOptions = SearchEngineConfiguration;\nexport type Bindings = _Bindings;\n\n/**\n * The `atomic-search-interface` component is the parent to all other atomic components in a search page. It handles the headless search engine and localization configurations.\n */\n@Component({\n tag: 'atomic-search-interface',\n styleUrl: 'atomic-search-interface.pcss',\n shadow: true,\n assetsDirs: ['lang'],\n})\nexport class AtomicSearchInterface\n implements StencilBaseAtomicInterface<SearchEngine>\n{\n private urlManager!: UrlManager;\n private searchStatus!: SearchStatus;\n private unsubscribeUrlManager: Unsubscribe = () => {};\n private unsubscribeSearchStatus: Unsubscribe = () => {};\n private initialized = false;\n private store: SearchStore;\n private commonInterfaceHelper: CommonAtomicInterfaceHelper<SearchEngine>;\n\n @Element() public host!: HTMLAtomicSearchInterfaceElement;\n\n @State() public error?: Error;\n @State() relevanceInspectorIsOpen = false;\n\n /**\n * A list of non-default fields to include in the query results.\n *\n * Specify the property as an array using a JSON string representation:\n * ```html\n * <atomic-search-interface fields-to-include='[\"fieldA\", \"fieldB\"]'></atomic-search-interface>\n * ```\n */\n @ArrayProp()\n @Prop({mutable: true})\n public fieldsToInclude: string[] | string = '[]';\n\n /**\n * The search interface [query pipeline](https://docs.coveo.com/en/180/).\n *\n * If the search interface is initialized using [`initializeWithSearchEngine`](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-search-interface/#initializewithsearchengine), the query pipeline should instead be configured in the target engine.\n */\n @Prop({reflect: true, mutable: true}) public pipeline?: string;\n\n /**\n * The search interface [search hub](https://docs.coveo.com/en/1342/).\n *\n * If the search interface is initialized using [`initializeWithSearchEngine`](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-search-interface/#initializewithsearchengine, the search hub should instead be configured in the target engine.\n */\n @Prop({reflect: true, mutable: true}) public searchHub?: string;\n\n /**\n * Whether analytics should be enabled.\n */\n @Prop({reflect: true}) public analytics = true;\n\n /**\n * The [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) identifier of the time zone to use to correctly interpret dates in the query expression, facets, and result items.\n * By default, the timezone will be [guessed](https://day.js.org/docs/en/timezone/guessing-user-timezone).\n *\n * Example: \"America/Montreal\"\n */\n @Prop({reflect: true}) public timezone?: string;\n\n /**\n * The severity level of the messages to log in the console.\n */\n @Prop({reflect: true}) public logLevel?: LogLevel;\n\n /**\n * The search interface i18next instance.\n */\n @Prop() public i18n: i18n;\n\n /**\n * The search interface language.\n */\n @Prop({reflect: true}) public language = 'en';\n\n /**\n * The search interface headless engine.\n */\n @Prop({mutable: true}) public engine?: SearchEngine;\n\n /**\n * Whether the state should be reflected in the URL parameters.\n */\n @Prop({reflect: true}) public reflectStateInUrl = true;\n\n /**\n * The CSS selector for the container where the interface will scroll back to.\n */\n @Prop({reflect: true}) public scrollContainer = 'atomic-search-interface';\n\n /**\n * The language assets path. By default, this will be a relative URL pointing to `./lang`.\n *\n * Example: \"/mypublicpath/languages\"\n *\n */\n @Prop({reflect: true}) public languageAssetsPath = './lang';\n\n /**\n * The icon assets path. By default, this will be a relative URL pointing to `./assets`.\n *\n * Example: \"/mypublicpath/icons\"\n *\n */\n @Prop({reflect: true}) public iconAssetsPath = './assets';\n\n /**\n * Whether the relevance inspector shortcut should be enabled for this interface.\n *\n * The relevance inspector can be opened by holding the Alt key (Option on Mac) while over the interface, and performing a double click.\n *\n * The relevance inspector allows to troubleshoot and debug queries.\n */\n @Prop({reflect: true}) public enableRelevanceInspector = true;\n\n /**\n * The value to set the [nonce](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce) attribute to on inline script and style elements generated by this interface and its child components.\n * If your application is served with a Content Security Policy (CSP) that doesn't include the `script-src: 'unsafe-inline'` or `style-src: 'unsafe-inline'` directives,\n * you should ensure that your application server generates a new nonce on every page load and uses the generated value to set this prop and serve the corresponding CSP response headers\n * (i.e., script-src 'nonce-<YOUR_GENERATED_NONCE>' and style-src 'nonce-<YOUR_GENERATED_NONCE>').\n * Otherwise you may see console errors such as\n * - Refused to execute inline script because it violates the following Content Security Policy directive: [...]\n * - Refused to apply inline style because it violates the following Content Security Policy directive: [...].\n * @example:\n * ```html\n * <script nonce=\"<YOUR_GENERATED_NONCE>\">\n * import {setNonce} from '@coveo/atomic';\n * setNonce('<YOUR_GENERATED_NONCE>');\n * </script>\n * ```\n */\n @Prop({reflect: true}) public CspNonce?: string;\n\n private i18Initialized: Promise<void>;\n private componentWillLoadCalledPromise: Promise<void>;\n private componentWillLoadResolver: () => void;\n public constructor() {\n this.initRelevanceInspector();\n this.commonInterfaceHelper = new CommonAtomicInterfaceHelper(\n this,\n 'CoveoAtomic'\n );\n this.store = createSearchStore();\n ({\n promise: this.componentWillLoadCalledPromise,\n resolve: this.componentWillLoadResolver,\n } = Promise.withResolvers<void>());\n const {promise, resolve} = Promise.withResolvers<void>();\n this.i18Initialized = promise;\n this.i18n = i18next.createInstance(undefined, resolve);\n }\n\n public connectedCallback() {\n this.store.setLoadingFlag(FirstSearchExecutedFlag);\n this.updateMobileBreakpoint();\n }\n\n componentWillLoad() {\n if (this.CspNonce) {\n setNonce(this.CspNonce);\n }\n this.initAriaLive();\n this.initFieldsToInclude();\n this.componentWillLoadResolver();\n }\n\n public updateSearchConfiguration(\n updatedProp: 'searchHub' | 'pipeline',\n newValue: string | undefined\n ) {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n if (this.engine.state[updatedProp] === newValue) {\n return;\n }\n\n const {updateSearchConfiguration} = loadSearchConfigurationActions(\n this.engine\n );\n this.engine.dispatch(\n updateSearchConfiguration({\n [updatedProp]: newValue,\n })\n );\n }\n\n @Watch('searchHub')\n public updateSearchHub() {\n this.updateSearchConfiguration('searchHub', this.searchHub ?? 'default');\n }\n\n @Watch('pipeline')\n public updatePipeline() {\n this.updateSearchConfiguration('pipeline', this.pipeline);\n }\n\n @Watch('analytics')\n public toggleAnalytics() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n this.commonInterfaceHelper.onAnalyticsChange();\n }\n\n @Watch('language')\n public updateLanguage() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n const {updateSearchConfiguration} = loadSearchConfigurationActions(\n this.engine\n );\n this.engine.dispatch(\n updateSearchConfiguration({\n locale: this.language,\n })\n );\n return this.commonInterfaceHelper.onLanguageChange();\n }\n\n @Watch('iconAssetsPath')\n public updateIconAssetsPath() {\n this.store.state.iconAssetsPath = this.iconAssetsPath;\n }\n\n public disconnectedCallback() {\n this.unsubscribeUrlManager();\n this.unsubscribeSearchStatus();\n window.removeEventListener('hashchange', this.onHashChange);\n }\n\n @Listen('atomic/initializeComponent')\n public handleInitialization(event: InitializeEvent) {\n this.commonInterfaceHelper.onComponentInitializing(event);\n }\n\n @Listen('atomic/scrollToTop')\n public scrollToTop() {\n const scrollContainerElement = document.querySelector(this.scrollContainer);\n if (!scrollContainerElement) {\n this.bindings.engine.logger.warn(\n `Could not find the scroll container with the selector \"${this.scrollContainer}\". This will prevent UX interactions that require a scroll from working correctly. Please check the CSS selector in the scrollContainer option`\n );\n return;\n }\n\n scrollContainerElement.scrollIntoView({behavior: 'smooth'});\n }\n\n @Listen('atomic/relevanceInspector/close')\n public closeRelevanceInspector() {\n this.relevanceInspectorIsOpen = false;\n }\n\n /**\n * Initializes the connection with the headless search engine using options for `accessToken` (required), `organizationId` (required), `environment` (defaults to `prod`), and `renewAccessToken`.\n */\n @Method() public initialize(options: InitializationOptions) {\n return this.internalInitialization(() => this.initEngine(options));\n }\n\n /**\n * Initializes the connection with an already preconfigured [headless search engine](https://docs.coveo.com/en/headless/latest/reference/search/), as opposed to the `initialize` method, which will internally create a new search engine instance.\n * This bypasses the properties set on the component, such as analytics, searchHub, pipeline, language, timezone & logLevel.\n */\n @Method() public initializeWithSearchEngine(engine: SearchEngine) {\n if (this.pipeline && this.pipeline !== engine.state.pipeline) {\n console.warn(\n mismatchedInterfaceAndEnginePropError('search', 'query pipeline')\n );\n }\n if (this.searchHub && this.searchHub !== engine.state.searchHub) {\n console.warn(\n mismatchedInterfaceAndEnginePropError('search', 'search hub')\n );\n }\n return this.internalInitialization(() => (this.engine = engine));\n }\n\n /**\n *\n * Executes the first search and logs the interface load event to analytics, after initializing connection to the headless search engine.\n */\n @Method() public async executeFirstSearch() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n if (!this.initialized) {\n console.error(\n 'You have to wait until the \"initialize\" promise is fulfilled before executing a search.',\n this.host\n );\n return;\n }\n\n const safeStorage = new SafeStorage();\n const standaloneSearchBoxData =\n safeStorage.getParsedJSON<StandaloneSearchBoxData | null>(\n StorageItems.STANDALONE_SEARCH_BOX_DATA,\n null\n );\n\n if (!standaloneSearchBoxData) {\n this.engine.executeFirstSearch();\n return;\n }\n\n safeStorage.removeItem(StorageItems.STANDALONE_SEARCH_BOX_DATA);\n const {updateQuery} = loadQueryActions(this.engine!);\n const {value, enableQuerySyntax, analytics} = standaloneSearchBoxData;\n this.engine!.dispatch(updateQuery({q: value, enableQuerySyntax}));\n this.engine.executeFirstSearchAfterStandaloneSearchBoxRedirect(analytics);\n }\n\n public get bindings(): Bindings {\n return {\n engine: this.engine!,\n i18n: this.i18n,\n store: this.store,\n interfaceElement: this.host,\n createStyleElement: () => {\n const styleTag = document.createElement('style');\n if (this.CspNonce) {\n styleTag.setAttribute('nonce', this.CspNonce);\n }\n return styleTag;\n },\n createScriptElement: () => {\n const styleTag = document.createElement('script');\n if (this.CspNonce) {\n styleTag.setAttribute('nonce', this.CspNonce);\n }\n return styleTag;\n },\n };\n }\n\n private initFieldsToInclude() {\n const fields = EcommerceDefaultFieldsToInclude.concat(this.fieldsToInclude);\n this.store.addFieldsToInclude(fields);\n }\n\n public registerFieldsToInclude() {\n this.engine?.dispatch(\n loadFieldActions(this.engine!).registerFieldsToInclude(\n this.store.state.fieldsToInclude\n )\n );\n }\n\n private updateMobileBreakpoint() {\n const breakpoint = this.host.querySelector(\n 'atomic-search-layout'\n )?.mobileBreakpoint;\n if (breakpoint) {\n this.store.state.mobileBreakpoint = breakpoint;\n }\n }\n\n private initEngine(options: InitializationOptions) {\n const searchConfig = this.getSearchConfiguration(options);\n const analyticsConfig = getAnalyticsConfig(\n options,\n this.analytics,\n this.store\n );\n try {\n this.engine = buildSearchEngine({\n configuration: {\n ...options,\n search: searchConfig,\n analytics: analyticsConfig,\n },\n loggerOptions: {\n level: this.logLevel,\n },\n });\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n private getSearchConfiguration(options: InitializationOptions) {\n const searchConfigFromProps = {\n searchHub: this.searchHub ?? 'default',\n pipeline: this.pipeline,\n locale: this.language,\n timezone: this.timezone,\n };\n\n if (options.search) {\n return {\n ...searchConfigFromProps,\n ...options.search,\n };\n }\n\n return searchConfigFromProps;\n }\n\n private get fragment() {\n return window.location.hash.slice(1);\n }\n\n private initUrlManager() {\n if (!this.reflectStateInUrl) {\n return;\n }\n\n this.urlManager = buildUrlManager(this.engine!, {\n initialState: {fragment: this.fragment},\n });\n\n this.unsubscribeUrlManager = this.urlManager.subscribe(() =>\n this.updateHash()\n );\n\n window.addEventListener('hashchange', this.onHashChange);\n }\n\n private initAriaLive() {\n if (\n Array.from(this.host.children).some(\n (element) => element.tagName === 'ATOMIC-ARIA-LIVE'\n )\n ) {\n return;\n }\n const ariaLive = document.createElement('atomic-aria-live');\n this.host.prepend(ariaLive);\n }\n\n private initRelevanceInspector() {\n if (this.enableRelevanceInspector) {\n this.host.addEventListener('dblclick', (e) => {\n if (e.altKey) {\n this.relevanceInspectorIsOpen = !this.relevanceInspectorIsOpen;\n }\n });\n }\n }\n\n private initSearchStatus() {\n this.searchStatus = buildSearchStatus(this.engine!);\n this.unsubscribeSearchStatus = this.searchStatus.subscribe(() => {\n const hasNoResultsAfterInitialSearch =\n !this.searchStatus.state.hasResults &&\n this.searchStatus.state.firstSearchExecuted &&\n !this.searchStatus.state.hasError;\n\n this.host.classList.toggle(\n noResultsSelector,\n hasNoResultsAfterInitialSearch\n );\n\n this.host.classList.toggle(\n errorSelector,\n this.searchStatus.state.hasError\n );\n\n this.host.classList.toggle(\n firstSearchExecutedSelector,\n this.searchStatus.state.firstSearchExecuted\n );\n\n if (\n this.searchStatus.state.firstSearchExecuted &&\n this.store.hasLoadingFlag(FirstSearchExecutedFlag)\n ) {\n this.store.unsetLoadingFlag(FirstSearchExecutedFlag);\n }\n });\n }\n\n private updateHash() {\n const newFragment = this.urlManager.state.fragment;\n\n if (!this.searchStatus.state.firstSearchExecuted) {\n history.replaceState(null, document.title, `#${newFragment}`);\n this.bindings.engine.logger.info(`History replaceState #${newFragment}`);\n\n return;\n }\n\n history.pushState(null, document.title, `#${newFragment}`);\n this.bindings.engine.logger.info(`History pushState #${newFragment}`);\n }\n\n private onHashChange = () => {\n this.urlManager.synchronize(this.fragment);\n };\n\n private async internalInitialization(initEngine: () => void) {\n await this.componentWillLoadCalledPromise;\n await Promise.all([\n this.commonInterfaceHelper.onInitialization(initEngine),\n this.i18Initialized,\n ]);\n await this.updateLanguage();\n markParentAsReady(this.host);\n this.pipeline = this.engine!.state.pipeline;\n this.searchHub = this.engine!.state.searchHub;\n this.initSearchStatus();\n this.initUrlManager();\n this.initialized = true;\n }\n\n public render() {\n return [\n this.engine && this.enableRelevanceInspector && (\n <atomic-relevance-inspector\n open={this.relevanceInspectorIsOpen}\n bindings={this.bindings}\n ></atomic-relevance-inspector>\n ),\n <slot></slot>,\n ];\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getAnalyticsConfig","searchEngineConfig","enabled","store","analytics","analyticsMode","getNextAnalyticsConfig","getLegacyAnalyticsConfig","analyticsClientMiddleware","event","payload","augmentAnalytics","defaultConfiguration","augmentAnalyticsConfigWithDocument","immutableConfiguration","augmentAnalyticsConfigWithAtomicVersion","config","result","augmentWithExternalMiddleware","augmentAnalyticsWithAtomicVersion","augmentAnalyticsWithFacetTitles","allFacets","getAllFacets","getAtomicFacetLabelOrOriginalTitle","facetId","originalTitle","label","facetState","map","analyticsFacetState","id","title","customData","facetTitle","createSearchStore","createBaseStore","loadingFlags","iconAssetsPath","resultList","undefined","mobileBreakpoint","DEFAULT_MOBILE_BREAKPOINT","facets","numericFacets","dateFacets","categoryFacets","facetElements","fieldsToInclude","sortOptions","unsetLoadingFlag","loadingFlag","setLoadingFlag","isMobile","window","matchMedia","makeDesktopQuery","state","matches","registerFacet","facetType","data","getFacetElements","waitUntilAppLoaded","callback","getUniqueIDFromEngine","engine","search","response","searchUid","hasLoadingFlag","indexOf","addFieldsToInclude","fields","currentFields","atomicSearchInterfaceCss","AtomicSearchInterfaceStyle0","FirstSearchExecutedFlag","AtomicSearchInterface","constructor","hostRef","this","unsubscribeUrlManager","unsubscribeSearchStatus","initialized","relevanceInspectorIsOpen","language","reflectStateInUrl","scrollContainer","languageAssetsPath","enableRelevanceInspector","onHashChange","urlManager","synchronize","fragment","initRelevanceInspector","commonInterfaceHelper","CommonAtomicInterfaceHelper","promise","componentWillLoadCalledPromise","resolve","componentWillLoadResolver","Promise","withResolvers","i18Initialized","i18n","i18next","createInstance","connectedCallback","updateMobileBreakpoint","componentWillLoad","CspNonce","setNonce","initAriaLive","initFieldsToInclude","updateSearchConfiguration","updatedProp","newValue","engineIsCreated","loadSearchConfigurationActions","dispatch","updateSearchHub","searchHub","updatePipeline","pipeline","toggleAnalytics","onAnalyticsChange","updateLanguage","locale","onLanguageChange","updateIconAssetsPath","disconnectedCallback","removeEventListener","handleInitialization","onComponentInitializing","scrollToTop","scrollContainerElement","document","querySelector","bindings","logger","warn","scrollIntoView","behavior","closeRelevanceInspector","initialize","options","internalInitialization","initEngine","initializeWithSearchEngine","console","mismatchedInterfaceAndEnginePropError","executeFirstSearch","error","host","safeStorage","SafeStorage","standaloneSearchBoxData","getParsedJSON","StorageItems","STANDALONE_SEARCH_BOX_DATA","removeItem","updateQuery","loadQueryActions","value","enableQuerySyntax","q","executeFirstSearchAfterStandaloneSearchBoxRedirect","interfaceElement","createStyleElement","styleTag","createElement","setAttribute","createScriptElement","EcommerceDefaultFieldsToInclude","concat","registerFieldsToInclude","loadFieldActions","breakpoint","searchConfig","getSearchConfiguration","analyticsConfig","buildSearchEngine","configuration","loggerOptions","level","logLevel","searchConfigFromProps","timezone","location","hash","slice","initUrlManager","buildUrlManager","initialState","subscribe","updateHash","addEventListener","Array","from","children","some","element","tagName","ariaLive","prepend","e","altKey","initSearchStatus","searchStatus","buildSearchStatus","hasNoResultsAfterInitialSearch","hasResults","firstSearchExecuted","hasError","classList","toggle","noResultsSelector","errorSelector","firstSearchExecutedSelector","newFragment","history","replaceState","info","pushState","all","onInitialization","markParentAsReady","render","h","key","open","__decorate","ArrayProp"],"sources":["src/components/search/atomic-search-interface/analytics-config.ts","src/components/search/atomic-search-interface/store.ts","src/components/search/atomic-search-interface/atomic-search-interface.pcss?tag=atomic-search-interface&encapsulation=shadow","src/components/search/atomic-search-interface/atomic-search-interface.tsx"],"sourcesContent":["import type {\n AnalyticsConfiguration,\n SearchEngineConfiguration,\n} from '@coveo/headless';\nimport {\n type AnalyticsPayload,\n augmentAnalyticsConfigWithAtomicVersion,\n augmentAnalyticsConfigWithDocument,\n augmentAnalyticsWithAtomicVersion,\n augmentWithExternalMiddleware,\n getNextAnalyticsConfig,\n} from '../../common/interface/analytics-config';\nimport type {createSearchStore} from './store';\n\nexport function getAnalyticsConfig(\n searchEngineConfig: SearchEngineConfiguration,\n enabled: boolean,\n store: ReturnType<typeof createSearchStore>\n): AnalyticsConfiguration {\n switch (searchEngineConfig.analytics?.analyticsMode) {\n case 'next':\n return getNextAnalyticsConfig(searchEngineConfig, enabled);\n default:\n return getLegacyAnalyticsConfig(searchEngineConfig, enabled, store);\n }\n}\n\nfunction getLegacyAnalyticsConfig(\n searchEngineConfig: SearchEngineConfiguration,\n enabled: boolean,\n store: ReturnType<typeof createSearchStore>\n): AnalyticsConfiguration {\n const analyticsClientMiddleware = (\n event: string,\n payload: AnalyticsPayload\n ) => augmentAnalytics(event, payload, store, searchEngineConfig);\n\n const defaultConfiguration: AnalyticsConfiguration = {\n analyticsClientMiddleware,\n enabled,\n ...augmentAnalyticsConfigWithDocument(),\n };\n\n const immutableConfiguration: AnalyticsConfiguration = {\n ...augmentAnalyticsConfigWithAtomicVersion(),\n };\n\n if (searchEngineConfig.analytics) {\n return {\n ...defaultConfiguration,\n ...searchEngineConfig.analytics,\n analyticsClientMiddleware,\n ...immutableConfiguration,\n };\n }\n\n return {\n ...defaultConfiguration,\n ...immutableConfiguration,\n };\n}\n\nfunction augmentAnalytics(\n event: string,\n payload: AnalyticsPayload,\n store: ReturnType<typeof createSearchStore>,\n config: SearchEngineConfiguration\n) {\n let result = augmentWithExternalMiddleware(event, payload, config);\n result = augmentAnalyticsWithAtomicVersion(result);\n result = augmentAnalyticsWithFacetTitles(result, store);\n return result;\n}\n\nfunction augmentAnalyticsWithFacetTitles(\n payload: AnalyticsPayload,\n store: ReturnType<typeof createSearchStore>\n) {\n const allFacets = store.getAllFacets();\n const getAtomicFacetLabelOrOriginalTitle = (\n facetId: string,\n originalTitle: string\n ) => (allFacets[facetId] ? allFacets[facetId].label() : originalTitle);\n\n if (payload.facetState) {\n payload.facetState = payload.facetState.map(\n (analyticsFacetState: {id: string; title: string}) => {\n const {id, title: originalTitle} = analyticsFacetState;\n return {\n ...analyticsFacetState,\n title: getAtomicFacetLabelOrOriginalTitle(id, originalTitle),\n };\n }\n );\n }\n\n if (\n payload.customData?.facetTitle &&\n payload.customData.facetId &&\n payload.customData.facetTitle\n ) {\n payload.customData.facetTitle = getAtomicFacetLabelOrOriginalTitle(\n payload.customData.facetId,\n payload.customData.facetTitle\n );\n }\n return payload;\n}\n","import type {\n DateFacetValue,\n NumericFacetValue,\n SearchEngine,\n SortCriterion,\n} from '@coveo/headless';\nimport {DEFAULT_MOBILE_BREAKPOINT} from '../../../utils/replace-breakpoint';\nimport type {\n FacetInfo,\n FacetStore,\n FacetType,\n FacetValueFormat,\n} from '../../common/facets/facet-common-store';\nimport {\n type BaseStore,\n createBaseStore,\n getFacetElements,\n type ResultListInfo,\n registerFacet,\n setLoadingFlag,\n unsetLoadingFlag,\n waitUntilAppLoaded,\n} from '../../common/interface/store';\nimport {makeDesktopQuery} from '../atomic-layout/search-layout';\n\nexport interface SortDropdownOption {\n tabs: {included: string[] | string; excluded: string[] | string};\n expression: string;\n criteria: SortCriterion[];\n label: string;\n}\n\ninterface FacetInfoMap {\n [facetId: string]:\n | FacetInfo\n | (FacetInfo & FacetValueFormat<NumericFacetValue>)\n | (FacetInfo & FacetValueFormat<DateFacetValue>);\n}\n\ninterface Data {\n loadingFlags: string[];\n iconAssetsPath: string;\n resultList: ResultListInfo | undefined;\n mobileBreakpoint: string;\n facets: FacetStore<FacetInfo>;\n numericFacets: FacetStore<FacetInfo & FacetValueFormat<NumericFacetValue>>;\n dateFacets: FacetStore<FacetInfo & FacetValueFormat<DateFacetValue>>;\n categoryFacets: FacetStore<FacetInfo>;\n facetElements: HTMLElement[];\n fieldsToInclude: string[];\n sortOptions: SortDropdownOption[];\n}\n\nexport type SearchStore = BaseStore<Data> & {\n unsetLoadingFlag(loadingFlag: string): void;\n setLoadingFlag(flag: string): void;\n isMobile(): boolean;\n registerFacet<T extends FacetType, U extends string>(\n facetType: T,\n data: Data[T][U] & {facetId: U; element: HTMLElement}\n ): void;\n getFacetElements(): HTMLElement[];\n waitUntilAppLoaded(callback: () => void): void;\n getUniqueIDFromEngine(engine: SearchEngine): string;\n hasLoadingFlag(loadingFlag: string): boolean;\n getAllFacets(): FacetInfoMap;\n addFieldsToInclude(fields: string[]): void;\n};\n\nexport function createSearchStore(): SearchStore {\n const store = createBaseStore<Data>({\n loadingFlags: [],\n iconAssetsPath: '',\n resultList: undefined,\n mobileBreakpoint: DEFAULT_MOBILE_BREAKPOINT,\n facets: {},\n numericFacets: {},\n dateFacets: {},\n categoryFacets: {},\n facetElements: [],\n fieldsToInclude: [],\n sortOptions: [],\n });\n\n return {\n ...store,\n\n unsetLoadingFlag(loadingFlag: string) {\n unsetLoadingFlag(store, loadingFlag);\n },\n\n setLoadingFlag(loadingFlag: string) {\n setLoadingFlag(store, loadingFlag);\n },\n\n isMobile() {\n return !window.matchMedia(makeDesktopQuery(store.state.mobileBreakpoint))\n .matches;\n },\n\n registerFacet<T extends FacetType, U extends string>(\n facetType: T,\n data: Data[T][U] & {facetId: U; element: HTMLElement}\n ) {\n registerFacet(store, facetType, data);\n },\n\n getFacetElements() {\n return getFacetElements(store);\n },\n\n waitUntilAppLoaded(callback: () => void) {\n waitUntilAppLoaded(store, callback);\n },\n\n getUniqueIDFromEngine(engine: SearchEngine): string {\n return engine.state.search.response.searchUid;\n },\n\n hasLoadingFlag(loadingFlag: string) {\n return store.state.loadingFlags.indexOf(loadingFlag) !== -1;\n },\n\n getAllFacets() {\n return {\n ...store.state.facets,\n ...store.state.dateFacets,\n ...store.state.categoryFacets,\n ...store.state.numericFacets,\n };\n },\n\n addFieldsToInclude(fields) {\n const currentFields = store.state.fieldsToInclude;\n store.state.fieldsToInclude = [...currentFields, ...fields];\n },\n };\n}\n","@import '../../../global/global.pcss';\n\n:host {\n display: block;\n height: inherit;\n width: inherit;\n & > slot {\n height: inherit;\n }\n}\n","import {markParentAsReady} from '@/src/utils/init-queue';\nimport {\n LogLevel,\n Unsubscribe,\n buildUrlManager,\n UrlManager,\n buildSearchEngine,\n SearchEngine,\n SearchEngineConfiguration,\n SearchStatus,\n buildSearchStatus,\n loadSearchConfigurationActions,\n loadQueryActions,\n EcommerceDefaultFieldsToInclude,\n loadFieldActions,\n} from '@coveo/headless';\nimport {\n Component,\n Prop,\n h,\n Listen,\n Method,\n Watch,\n Element,\n State,\n setNonce,\n} from '@stencil/core';\nimport i18next, {i18n} from 'i18next';\nimport {InitializeEvent} from '../../../utils/initialization-utils';\nimport {\n SafeStorage,\n StandaloneSearchBoxData,\n StorageItems,\n} from '../../../utils/local-storage-utils';\nimport {ArrayProp} from '../../../utils/props-utils';\nimport {\n StencilBaseAtomicInterface,\n CommonAtomicInterfaceHelper,\n mismatchedInterfaceAndEnginePropError,\n} from '../../common/interface/interface-common-stencil';\nimport {\n errorSelector,\n firstSearchExecutedSelector,\n noResultsSelector,\n} from '../atomic-layout/search-layout';\nimport {getAnalyticsConfig} from './analytics-config';\nimport type {Bindings as _Bindings} from './interfaces';\nimport {createSearchStore, SearchStore} from './store';\n\nconst FirstSearchExecutedFlag = 'firstSearchExecuted';\nexport type InitializationOptions = SearchEngineConfiguration;\nexport type Bindings = _Bindings;\n\n/**\n * The `atomic-search-interface` component is the parent to all other atomic components in a search page. It handles the headless search engine and localization configurations.\n */\n@Component({\n tag: 'atomic-search-interface',\n styleUrl: 'atomic-search-interface.pcss',\n shadow: true,\n assetsDirs: ['lang'],\n})\nexport class AtomicSearchInterface\n implements StencilBaseAtomicInterface<SearchEngine>\n{\n private urlManager!: UrlManager;\n private searchStatus!: SearchStatus;\n private unsubscribeUrlManager: Unsubscribe = () => {};\n private unsubscribeSearchStatus: Unsubscribe = () => {};\n private initialized = false;\n private store: SearchStore;\n private commonInterfaceHelper: CommonAtomicInterfaceHelper<SearchEngine>;\n\n @Element() public host!: HTMLAtomicSearchInterfaceElement;\n\n @State() public error?: Error;\n @State() relevanceInspectorIsOpen = false;\n\n /**\n * A list of non-default fields to include in the query results.\n *\n * Specify the property as an array using a JSON string representation:\n * ```html\n * <atomic-search-interface fields-to-include='[\"fieldA\", \"fieldB\"]'></atomic-search-interface>\n * ```\n */\n @ArrayProp()\n @Prop({mutable: true})\n public fieldsToInclude: string[] | string = '[]';\n\n /**\n * The search interface [query pipeline](https://docs.coveo.com/en/180/).\n *\n * If the search interface is initialized using [`initializeWithSearchEngine`](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-search-interface/#initializewithsearchengine), the query pipeline should instead be configured in the target engine.\n */\n @Prop({reflect: true, mutable: true}) public pipeline?: string;\n\n /**\n * The search interface [search hub](https://docs.coveo.com/en/1342/).\n *\n * If the search interface is initialized using [`initializeWithSearchEngine`](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-search-interface/#initializewithsearchengine, the search hub should instead be configured in the target engine.\n */\n @Prop({reflect: true, mutable: true}) public searchHub?: string;\n\n /**\n * Whether analytics should be enabled.\n */\n @Prop({reflect: true}) public analytics = true;\n\n /**\n * The [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) identifier of the time zone to use to correctly interpret dates in the query expression, facets, and result items.\n * By default, the timezone will be [guessed](https://day.js.org/docs/en/timezone/guessing-user-timezone).\n *\n * Example: \"America/Montreal\"\n */\n @Prop({reflect: true}) public timezone?: string;\n\n /**\n * The severity level of the messages to log in the console.\n */\n @Prop({reflect: true}) public logLevel?: LogLevel;\n\n /**\n * The search interface i18next instance.\n */\n @Prop() public i18n: i18n;\n\n /**\n * The search interface language.\n */\n @Prop({reflect: true}) public language = 'en';\n\n /**\n * The search interface headless engine.\n */\n @Prop({mutable: true}) public engine?: SearchEngine;\n\n /**\n * Whether the state should be reflected in the URL parameters.\n */\n @Prop({reflect: true}) public reflectStateInUrl = true;\n\n /**\n * The CSS selector for the container where the interface will scroll back to.\n */\n @Prop({reflect: true}) public scrollContainer = 'atomic-search-interface';\n\n /**\n * The language assets path. By default, this will be a relative URL pointing to `./lang`.\n *\n * Example: \"/mypublicpath/languages\"\n *\n */\n @Prop({reflect: true}) public languageAssetsPath = './lang';\n\n /**\n * The icon assets path. By default, this will be a relative URL pointing to `./assets`.\n *\n * Example: \"/mypublicpath/icons\"\n *\n */\n @Prop({reflect: true}) public iconAssetsPath = './assets';\n\n /**\n * Whether the relevance inspector shortcut should be enabled for this interface.\n *\n * The relevance inspector can be opened by holding the Alt key (Option on Mac) while over the interface, and performing a double click.\n *\n * The relevance inspector allows to troubleshoot and debug queries.\n */\n @Prop({reflect: true}) public enableRelevanceInspector = true;\n\n /**\n * The value to set the [nonce](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce) attribute to on inline script and style elements generated by this interface and its child components.\n * If your application is served with a Content Security Policy (CSP) that doesn't include the `script-src: 'unsafe-inline'` or `style-src: 'unsafe-inline'` directives,\n * you should ensure that your application server generates a new nonce on every page load and uses the generated value to set this prop and serve the corresponding CSP response headers\n * (i.e., script-src 'nonce-<YOUR_GENERATED_NONCE>' and style-src 'nonce-<YOUR_GENERATED_NONCE>').\n * Otherwise you may see console errors such as\n * - Refused to execute inline script because it violates the following Content Security Policy directive: [...]\n * - Refused to apply inline style because it violates the following Content Security Policy directive: [...].\n * @example:\n * ```html\n * <script nonce=\"<YOUR_GENERATED_NONCE>\">\n * import {setNonce} from '@coveo/atomic';\n * setNonce('<YOUR_GENERATED_NONCE>');\n * </script>\n * ```\n */\n @Prop({reflect: true}) public CspNonce?: string;\n\n private i18Initialized: Promise<void>;\n private componentWillLoadCalledPromise: Promise<void>;\n private componentWillLoadResolver: () => void;\n public constructor() {\n this.initRelevanceInspector();\n this.commonInterfaceHelper = new CommonAtomicInterfaceHelper(\n this,\n 'CoveoAtomic'\n );\n this.store = createSearchStore();\n ({\n promise: this.componentWillLoadCalledPromise,\n resolve: this.componentWillLoadResolver,\n } = Promise.withResolvers<void>());\n const {promise, resolve} = Promise.withResolvers<void>();\n this.i18Initialized = promise;\n this.i18n = i18next.createInstance(undefined, resolve);\n }\n\n public connectedCallback() {\n this.store.setLoadingFlag(FirstSearchExecutedFlag);\n this.updateMobileBreakpoint();\n }\n\n componentWillLoad() {\n if (this.CspNonce) {\n setNonce(this.CspNonce);\n }\n this.initAriaLive();\n this.initFieldsToInclude();\n this.componentWillLoadResolver();\n }\n\n public updateSearchConfiguration(\n updatedProp: 'searchHub' | 'pipeline',\n newValue: string | undefined\n ) {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n if (this.engine.state[updatedProp] === newValue) {\n return;\n }\n\n const {updateSearchConfiguration} = loadSearchConfigurationActions(\n this.engine\n );\n this.engine.dispatch(\n updateSearchConfiguration({\n [updatedProp]: newValue,\n })\n );\n }\n\n @Watch('searchHub')\n public updateSearchHub() {\n this.updateSearchConfiguration('searchHub', this.searchHub ?? 'default');\n }\n\n @Watch('pipeline')\n public updatePipeline() {\n this.updateSearchConfiguration('pipeline', this.pipeline);\n }\n\n @Watch('analytics')\n public toggleAnalytics() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n this.commonInterfaceHelper.onAnalyticsChange();\n }\n\n @Watch('language')\n public updateLanguage() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n const {updateSearchConfiguration} = loadSearchConfigurationActions(\n this.engine\n );\n this.engine.dispatch(\n updateSearchConfiguration({\n locale: this.language,\n })\n );\n return this.commonInterfaceHelper.onLanguageChange();\n }\n\n @Watch('iconAssetsPath')\n public updateIconAssetsPath() {\n this.store.state.iconAssetsPath = this.iconAssetsPath;\n }\n\n public disconnectedCallback() {\n this.unsubscribeUrlManager();\n this.unsubscribeSearchStatus();\n window.removeEventListener('hashchange', this.onHashChange);\n }\n\n @Listen('atomic/initializeComponent')\n public handleInitialization(event: InitializeEvent) {\n this.commonInterfaceHelper.onComponentInitializing(event);\n }\n\n @Listen('atomic/scrollToTop')\n public scrollToTop() {\n const scrollContainerElement = document.querySelector(this.scrollContainer);\n if (!scrollContainerElement) {\n this.bindings.engine.logger.warn(\n `Could not find the scroll container with the selector \"${this.scrollContainer}\". This will prevent UX interactions that require a scroll from working correctly. Please check the CSS selector in the scrollContainer option`\n );\n return;\n }\n\n scrollContainerElement.scrollIntoView({behavior: 'smooth'});\n }\n\n @Listen('atomic/relevanceInspector/close')\n public closeRelevanceInspector() {\n this.relevanceInspectorIsOpen = false;\n }\n\n /**\n * Initializes the connection with the headless search engine using options for `accessToken` (required), `organizationId` (required), `environment` (defaults to `prod`), and `renewAccessToken`.\n */\n @Method() public initialize(options: InitializationOptions) {\n return this.internalInitialization(() => this.initEngine(options));\n }\n\n /**\n * Initializes the connection with an already preconfigured [headless search engine](https://docs.coveo.com/en/headless/latest/reference/modules/Search.html, as opposed to the `initialize` method, which will internally create a new search engine instance.\n * This bypasses the properties set on the component, such as analytics, searchHub, pipeline, language, timezone & logLevel.\n */\n @Method() public initializeWithSearchEngine(engine: SearchEngine) {\n if (this.pipeline && this.pipeline !== engine.state.pipeline) {\n console.warn(\n mismatchedInterfaceAndEnginePropError('search', 'query pipeline')\n );\n }\n if (this.searchHub && this.searchHub !== engine.state.searchHub) {\n console.warn(\n mismatchedInterfaceAndEnginePropError('search', 'search hub')\n );\n }\n return this.internalInitialization(() => (this.engine = engine));\n }\n\n /**\n *\n * Executes the first search and logs the interface load event to analytics, after initializing connection to the headless search engine.\n */\n @Method() public async executeFirstSearch() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n\n if (!this.initialized) {\n console.error(\n 'You have to wait until the \"initialize\" promise is fulfilled before executing a search.',\n this.host\n );\n return;\n }\n\n const safeStorage = new SafeStorage();\n const standaloneSearchBoxData =\n safeStorage.getParsedJSON<StandaloneSearchBoxData | null>(\n StorageItems.STANDALONE_SEARCH_BOX_DATA,\n null\n );\n\n if (!standaloneSearchBoxData) {\n this.engine.executeFirstSearch();\n return;\n }\n\n safeStorage.removeItem(StorageItems.STANDALONE_SEARCH_BOX_DATA);\n const {updateQuery} = loadQueryActions(this.engine!);\n const {value, enableQuerySyntax, analytics} = standaloneSearchBoxData;\n this.engine!.dispatch(updateQuery({q: value, enableQuerySyntax}));\n this.engine.executeFirstSearchAfterStandaloneSearchBoxRedirect(analytics);\n }\n\n public get bindings(): Bindings {\n return {\n engine: this.engine!,\n i18n: this.i18n,\n store: this.store,\n interfaceElement: this.host,\n createStyleElement: () => {\n const styleTag = document.createElement('style');\n if (this.CspNonce) {\n styleTag.setAttribute('nonce', this.CspNonce);\n }\n return styleTag;\n },\n createScriptElement: () => {\n const styleTag = document.createElement('script');\n if (this.CspNonce) {\n styleTag.setAttribute('nonce', this.CspNonce);\n }\n return styleTag;\n },\n };\n }\n\n private initFieldsToInclude() {\n const fields = EcommerceDefaultFieldsToInclude.concat(this.fieldsToInclude);\n this.store.addFieldsToInclude(fields);\n }\n\n public registerFieldsToInclude() {\n this.engine?.dispatch(\n loadFieldActions(this.engine!).registerFieldsToInclude(\n this.store.state.fieldsToInclude\n )\n );\n }\n\n private updateMobileBreakpoint() {\n const breakpoint = this.host.querySelector(\n 'atomic-search-layout'\n )?.mobileBreakpoint;\n if (breakpoint) {\n this.store.state.mobileBreakpoint = breakpoint;\n }\n }\n\n private initEngine(options: InitializationOptions) {\n const searchConfig = this.getSearchConfiguration(options);\n const analyticsConfig = getAnalyticsConfig(\n options,\n this.analytics,\n this.store\n );\n try {\n this.engine = buildSearchEngine({\n configuration: {\n ...options,\n search: searchConfig,\n analytics: analyticsConfig,\n },\n loggerOptions: {\n level: this.logLevel,\n },\n });\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n private getSearchConfiguration(options: InitializationOptions) {\n const searchConfigFromProps = {\n searchHub: this.searchHub ?? 'default',\n pipeline: this.pipeline,\n locale: this.language,\n timezone: this.timezone,\n };\n\n if (options.search) {\n return {\n ...searchConfigFromProps,\n ...options.search,\n };\n }\n\n return searchConfigFromProps;\n }\n\n private get fragment() {\n return window.location.hash.slice(1);\n }\n\n private initUrlManager() {\n if (!this.reflectStateInUrl) {\n return;\n }\n\n this.urlManager = buildUrlManager(this.engine!, {\n initialState: {fragment: this.fragment},\n });\n\n this.unsubscribeUrlManager = this.urlManager.subscribe(() =>\n this.updateHash()\n );\n\n window.addEventListener('hashchange', this.onHashChange);\n }\n\n private initAriaLive() {\n if (\n Array.from(this.host.children).some(\n (element) => element.tagName === 'ATOMIC-ARIA-LIVE'\n )\n ) {\n return;\n }\n const ariaLive = document.createElement('atomic-aria-live');\n this.host.prepend(ariaLive);\n }\n\n private initRelevanceInspector() {\n if (this.enableRelevanceInspector) {\n this.host.addEventListener('dblclick', (e) => {\n if (e.altKey) {\n this.relevanceInspectorIsOpen = !this.relevanceInspectorIsOpen;\n }\n });\n }\n }\n\n private initSearchStatus() {\n this.searchStatus = buildSearchStatus(this.engine!);\n this.unsubscribeSearchStatus = this.searchStatus.subscribe(() => {\n const hasNoResultsAfterInitialSearch =\n !this.searchStatus.state.hasResults &&\n this.searchStatus.state.firstSearchExecuted &&\n !this.searchStatus.state.hasError;\n\n this.host.classList.toggle(\n noResultsSelector,\n hasNoResultsAfterInitialSearch\n );\n\n this.host.classList.toggle(\n errorSelector,\n this.searchStatus.state.hasError\n );\n\n this.host.classList.toggle(\n firstSearchExecutedSelector,\n this.searchStatus.state.firstSearchExecuted\n );\n\n if (\n this.searchStatus.state.firstSearchExecuted &&\n this.store.hasLoadingFlag(FirstSearchExecutedFlag)\n ) {\n this.store.unsetLoadingFlag(FirstSearchExecutedFlag);\n }\n });\n }\n\n private updateHash() {\n const newFragment = this.urlManager.state.fragment;\n\n if (!this.searchStatus.state.firstSearchExecuted) {\n history.replaceState(null, document.title, `#${newFragment}`);\n this.bindings.engine.logger.info(`History replaceState #${newFragment}`);\n\n return;\n }\n\n history.pushState(null, document.title, `#${newFragment}`);\n this.bindings.engine.logger.info(`History pushState #${newFragment}`);\n }\n\n private onHashChange = () => {\n this.urlManager.synchronize(this.fragment);\n };\n\n private async internalInitialization(initEngine: () => void) {\n await this.componentWillLoadCalledPromise;\n await Promise.all([\n this.commonInterfaceHelper.onInitialization(initEngine),\n this.i18Initialized,\n ]);\n await this.updateLanguage();\n markParentAsReady(this.host);\n this.pipeline = this.engine!.state.pipeline;\n this.searchHub = this.engine!.state.searchHub;\n this.initSearchStatus();\n this.initUrlManager();\n this.initialized = true;\n }\n\n public render() {\n return [\n this.engine && this.enableRelevanceInspector && (\n <atomic-relevance-inspector\n open={this.relevanceInspectorIsOpen}\n bindings={this.bindings}\n ></atomic-relevance-inspector>\n ),\n <slot></slot>,\n ];\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as n,h as r,F as t,g as i}from"./p-dc3df5ce.js";import{NumberValue as e}from"@coveo/bueno";import{buildRecommendationList as a,loadConfigurationActions as o,buildInteractiveResult as l}from"@coveo/headless/recommendation";import{I as s,B as c}from"./p-e4f99519.js";import{F as d}from"./p-9f3ecfe5.js";import{r as m}from"./p-0f506869.js";import{R as p}from"./p-8e5e00b4.js";import{c as h}from"./p-5cafb3fe.js";import{I as g,D as w}from"./p-7cb0050f.js";import{I as b}from"./p-cef8175c.js";import{D as u}from"./p-187193bb.js";import{I as v}from"./p-06b55a5e.js";import{g as f}from"./p-ed21f076.js";import{C as y}from"./p-c8e10077.js";import{H as x}from"./p-66d48d1a.js";import"./p-c9074946.js";import"./p-1580513b.js";import"./p-05de7ca3.js";import"./p-cae02339.js";import"./p-f284897c.js";import"./p-0462f723.js";import"@coveo/headless";import"./p-7dd93292.js";import"./p-ad38f245.js";import"./p-cfa9c12b.js";import"./p-b389ea6d.js";import"./p-21ab6f55.js";const k='/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer properties {\n *, :before, :after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: "";\n }\n}\n@layer theme, base, components, utilities;\n@layer theme;\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, var(--atomic-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"));\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n }\n @supports (color: color-mix(in lab, red, red)) {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden="until-found"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container {\n container-type: inline-size;\n }\n .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .collapse {\n visibility: collapse;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n .atomic-grid-clickable-elements [part~=\'outline\'][part~=\'result-list-grid-clickable-container\'] {\n position: relative;\n border: 1px solid transparent;\n padding: 1rem;\n border-radius: 1rem;\n transition: all 0.12s ease-out;\n }\n .atomic-grid-clickable-elements [part~=\'outline\'][part~=\'result-list-grid-clickable-container\']:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n box-shadow: 0px 10px 25px var(--atomic-neutral);\n cursor: pointer;\n }\n .atomic-grid-clickable-elements [part=\'result-list-grid-clickable\']:focus-visible {\n border-radius: 2px;\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--atomic-primary);\n color: var(--atomic-primary);\n cursor: pointer;\n display: inline-block;\n text-decoration: underline;\n text-align: center;\n position: absolute;\n }\n .atomic-grid-clickable-elements [part=\'result-list-grid-clickable\']:not(:focus) {\n clip: rect(1px, 1px, 1px, 1px);\n overflow: hidden;\n position: absolute;\n padding: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .sticky {\n position: sticky;\n }\n .-top-2 {\n top: calc(0.25rem * -2);\n }\n .-top-4 {\n top: calc(0.25rem * -4);\n }\n .top-0 {\n top: calc(0.25rem * 0);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-6 {\n top: calc(0.25rem * 6);\n }\n .top-\\[4px\\] {\n top: 4px;\n }\n .top-full {\n top: 100%;\n }\n .top-px {\n top: 1px;\n }\n .-right-2 {\n right: calc(0.25rem * -2);\n }\n .right-0 {\n right: calc(0.25rem * 0);\n }\n .right-2 {\n right: calc(0.25rem * 2);\n }\n .right-6 {\n right: calc(0.25rem * 6);\n }\n .right-12 {\n right: calc(0.25rem * 12);\n }\n .right-20 {\n right: calc(0.25rem * 20);\n }\n .right-px {\n right: 1px;\n }\n .bottom-0 {\n bottom: calc(0.25rem * 0);\n }\n .bottom-1 {\n bottom: calc(0.25rem * 1);\n }\n .bottom-2 {\n bottom: calc(0.25rem * 2);\n }\n .bottom-px {\n bottom: 1px;\n }\n .left-0 {\n left: calc(0.25rem * 0);\n }\n .left-1 {\n left: calc(0.25rem * 1);\n }\n .left-2 {\n left: calc(0.25rem * 2);\n }\n .left-\\[15px\\] {\n left: 15px;\n }\n .isolate {\n isolation: isolate;\n }\n .z-0 {\n z-index: 0;\n }\n .z-1 {\n z-index: 1;\n }\n .z-10 {\n z-index: 10;\n }\n .z-9998 {\n z-index: 9998;\n }\n .z-9999 {\n z-index: 9999;\n }\n .order-last {\n order: 9999;\n }\n .col-span-2 {\n grid-column: span 2 / span 2;\n }\n .container {\n width: 100%;\n }\n @media (width >= 1024px) {\n .container {\n max-width: 1024px;\n }\n }\n @media (width >= 40rem) {\n .container {\n max-width: 40rem;\n }\n }\n @media (width >= 48rem) {\n .container {\n max-width: 48rem;\n }\n }\n @media (width >= 64rem) {\n .container {\n max-width: 64rem;\n }\n }\n @media (width >= 80rem) {\n .container {\n max-width: 80rem;\n }\n }\n @media (width >= 96rem) {\n .container {\n max-width: 96rem;\n }\n }\n @media not all and (width >= 1024px) {\n @media not all and (min-width: 768px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large {\n grid-template-columns: minmax(auto, 35rem);\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-comfortable [part~=\'outline\']::before {\n margin: 2rem 0;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-normal [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-normal [part~=\'outline\']::before {\n margin: 1.75rem 0;\n }\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-compact [part~=\'outline\']::before {\n margin: 1rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large.density-compact [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large [part~=\'outline\']::before {\n display: block;\n content: \' \';\n height: 1px;\n background-color: var(--atomic-neutral);\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large [part~=\'outline\']:first-of-type::before {\n display: none;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large atomic-result-placeholder::before {\n background-color: transparent;\n }\n }\n @media (min-width: 768px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-large {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n grid-template-columns: 1fr 1fr;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-large atomic-result-placeholder {\n border-color: transparent;\n }\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-small [part~=\'outline\'], .atomic-grid-display-mobile .list-root.display-grid.image-icon [part~=\'outline\'], .atomic-grid-display-mobile .list-root.display-grid.image-none [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-small atomic-result-placeholder, .atomic-grid-display-mobile .list-root.display-grid.image-icon atomic-result-placeholder, .atomic-grid-display-mobile .list-root.display-grid.image-none atomic-result-placeholder {\n border-color: transparent;\n }\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n }\n @media not all and (min-width: 640px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-template-columns: minmax(0, 1fr);\n }\n }\n @media (min-width: 768px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n }\n }\n @media (width >= 1024px) {\n .atomic-grid-display-mobile .list-root.display-grid.image-small, .atomic-grid-display-mobile .list-root.display-grid.image-icon, .atomic-grid-display-mobile .list-root.display-grid.image-none {\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);\n }\n }\n }\n .atomic-list-with-dividers.density-comfortable [part~=\'outline\']::before {\n margin: 2rem 0;\n }\n .atomic-list-with-dividers.density-normal [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-list-with-dividers.density-normal [part~=\'outline\']::before {\n margin: 1.75rem 0;\n }\n }\n .atomic-list-with-dividers.density-compact [part~=\'outline\']::before {\n margin: 1rem 0;\n }\n @media not all and (width >= 1024px) {\n .atomic-list-with-dividers.density-compact [part~=\'outline\']::before {\n margin: 1.5rem 0;\n }\n }\n .atomic-list-with-dividers [part~=\'outline\']::before {\n display: block;\n content: \' \';\n height: 1px;\n background-color: var(--atomic-neutral);\n }\n .atomic-list-with-dividers [part~=\'outline\']:first-of-type::before {\n display: none;\n }\n .atomic-list-with-dividers atomic-result-placeholder::before {\n background-color: transparent;\n }\n .m-0 {\n margin: calc(0.25rem * 0);\n }\n .m-2 {\n margin: calc(0.25rem * 2);\n }\n .mx-0 {\n margin-inline: calc(0.25rem * 0);\n }\n .mx-0\\.5 {\n margin-inline: calc(0.25rem * 0.5);\n }\n .mx-1 {\n margin-inline: calc(0.25rem * 1);\n }\n .mx-6 {\n margin-inline: calc(0.25rem * 6);\n }\n .mx-16 {\n margin-inline: calc(0.25rem * 16);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-2 {\n margin-block: calc(0.25rem * 2);\n }\n .my-3 {\n margin-block: calc(0.25rem * 3);\n }\n .my-4 {\n margin-block: calc(0.25rem * 4);\n }\n .my-6 {\n margin-block: calc(0.25rem * 6);\n }\n .my-auto {\n margin-block: auto;\n }\n .mt-0 {\n margin-top: calc(0.25rem * 0);\n }\n .mt-1 {\n margin-top: calc(0.25rem * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(0.25rem * 1.5);\n }\n .mt-2 {\n margin-top: calc(0.25rem * 2);\n }\n .mt-2\\.5 {\n margin-top: calc(0.25rem * 2.5);\n }\n .mt-3 {\n margin-top: calc(0.25rem * 3);\n }\n .mt-4 {\n margin-top: calc(0.25rem * 4);\n }\n .mt-6 {\n margin-top: calc(0.25rem * 6);\n }\n .mt-7 {\n margin-top: calc(0.25rem * 7);\n }\n .mt-8 {\n margin-top: calc(0.25rem * 8);\n }\n .mt-10 {\n margin-top: calc(0.25rem * 10);\n }\n .mt-px {\n margin-top: 1px;\n }\n .mr-0 {\n margin-right: calc(0.25rem * 0);\n }\n .mr-0\\.5 {\n margin-right: calc(0.25rem * 0.5);\n }\n .mr-1 {\n margin-right: calc(0.25rem * 1);\n }\n .mr-1\\.5 {\n margin-right: calc(0.25rem * 1.5);\n }\n .mr-2 {\n margin-right: calc(0.25rem * 2);\n }\n .mr-3 {\n margin-right: calc(0.25rem * 3);\n }\n .mr-6 {\n margin-right: calc(0.25rem * 6);\n }\n .mb-0 {\n margin-bottom: calc(0.25rem * 0);\n }\n .mb-1 {\n margin-bottom: calc(0.25rem * 1);\n }\n .mb-2 {\n margin-bottom: calc(0.25rem * 2);\n }\n .mb-3 {\n margin-bottom: calc(0.25rem * 3);\n }\n .mb-4 {\n margin-bottom: calc(0.25rem * 4);\n }\n .mb-6 {\n margin-bottom: calc(0.25rem * 6);\n }\n .ml-0\\.5 {\n margin-left: calc(0.25rem * 0.5);\n }\n .ml-1 {\n margin-left: calc(0.25rem * 1);\n }\n .ml-2 {\n margin-left: calc(0.25rem * 2);\n }\n .ml-4 {\n margin-left: calc(0.25rem * 4);\n }\n .ml-6 {\n margin-left: calc(0.25rem * 6);\n }\n .ml-auto {\n margin-left: auto;\n }\n .atomic-grid-display-common .list-wrapper {\n word-break: break-word;\n }\n .atomic-grid-display-common .list-root.display-grid {\n display: grid;\n justify-content: space-evenly;\n }\n .atomic-grid-display-common .list-root.display-grid .result-component {\n height: 100%;\n box-sizing: border-box;\n }\n .box-border {\n box-sizing: border-box;\n }\n .box-content {\n box-sizing: content-box;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .line-clamp-none {\n overflow: visible;\n display: block;\n -webkit-box-orient: horizontal;\n -webkit-line-clamp: unset;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .size-\\[27px\\] {\n width: 27px;\n height: 27px;\n }\n .h-1 {\n height: calc(0.25rem * 1);\n }\n .h-2 {\n height: calc(0.25rem * 2);\n }\n .h-2\\.5 {\n height: calc(0.25rem * 2.5);\n }\n .h-3 {\n height: calc(0.25rem * 3);\n }\n .h-4 {\n height: calc(0.25rem * 4);\n }\n .h-5 {\n height: calc(0.25rem * 5);\n }\n .h-5\\/6 {\n height: calc(5/6 * 100%);\n }\n .h-6 {\n height: calc(0.25rem * 6);\n }\n .h-7 {\n height: calc(0.25rem * 7);\n }\n .h-8 {\n height: calc(0.25rem * 8);\n }\n .h-9 {\n height: calc(0.25rem * 9);\n }\n .h-10 {\n height: calc(0.25rem * 10);\n }\n .h-12 {\n height: calc(0.25rem * 12);\n }\n .h-\\[2\\.6rem\\] {\n height: 2.6rem;\n }\n .h-\\[9px\\] {\n height: 9px;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .max-h-96 {\n max-height: calc(0.25rem * 96);\n }\n .min-h-10 {\n min-height: calc(0.25rem * 10);\n }\n .w-0\\.5 {\n width: calc(0.25rem * 0.5);\n }\n .w-1 {\n width: calc(0.25rem * 1);\n }\n .w-1\\/2 {\n width: calc(1/2 * 100%);\n }\n .w-2 {\n width: calc(0.25rem * 2);\n }\n .w-2\\.5 {\n width: calc(0.25rem * 2.5);\n }\n .w-3 {\n width: calc(0.25rem * 3);\n }\n .w-3\\.5 {\n width: calc(0.25rem * 3.5);\n }\n .w-3\\/5 {\n width: calc(3/5 * 100%);\n }\n .w-4 {\n width: calc(0.25rem * 4);\n }\n .w-5 {\n width: calc(0.25rem * 5);\n }\n .w-5\\/6 {\n width: calc(5/6 * 100%);\n }\n .w-6 {\n width: calc(0.25rem * 6);\n }\n .w-7 {\n width: calc(0.25rem * 7);\n }\n .w-8 {\n width: calc(0.25rem * 8);\n }\n .w-9 {\n width: calc(0.25rem * 9);\n }\n .w-10 {\n width: calc(0.25rem * 10);\n }\n .w-12 {\n width: calc(0.25rem * 12);\n }\n .w-20 {\n width: calc(0.25rem * 20);\n }\n .w-26 {\n width: calc(0.25rem * 26);\n }\n .w-28 {\n width: calc(0.25rem * 28);\n }\n .w-32 {\n width: calc(0.25rem * 32);\n }\n .w-36 {\n width: calc(0.25rem * 36);\n }\n .w-44 {\n width: calc(0.25rem * 44);\n }\n .w-48 {\n width: calc(0.25rem * 48);\n }\n .w-60 {\n width: calc(0.25rem * 60);\n }\n .w-64 {\n width: calc(0.25rem * 64);\n }\n .w-72 {\n width: calc(0.25rem * 72);\n }\n .w-100 {\n width: calc(0.25rem * 100);\n }\n .w-\\[2\\.6rem\\] {\n width: 2.6rem;\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-max {\n width: max-content;\n }\n .max-w-4\\/5 {\n max-width: calc(4/5 * 100%);\n }\n .max-w-60 {\n max-width: calc(0.25rem * 60);\n }\n .max-w-\\[30ch\\] {\n max-width: 30ch;\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: 32rem;\n }\n .max-w-max {\n max-width: max-content;\n }\n .atomic-result-table {\n min-width: 100%;\n border-spacing: 0;\n border-collapse: separate;\n }\n .atomic-result-table th, .atomic-result-table td {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n font-family: var(--atomic-font-family);\n font-size: var(--atomic-text-sm);\n line-height: var(--tw-leading, calc(1.25 / 0.875));\n line-height: 1rem;\n white-space: nowrap;\n }\n .atomic-result-table th:not(:first-child), .atomic-result-table td:not(:first-child) {\n border-left: none;\n }\n .atomic-result-table th:first-child, .atomic-result-table td:first-child {\n min-width: 19rem;\n }\n .atomic-result-table th {\n background-color: var(--atomic-neutral-light);\n border-bottom: none;\n font-weight: bold;\n color: black;\n padding: 1rem var(--padding);\n text-align: left;\n }\n .atomic-result-table th:first-child {\n border-top-left-radius: var(--atomic-border-radius-xl);\n }\n .atomic-result-table th:last-child {\n border-top-right-radius: var(--atomic-border-radius-xl);\n }\n .atomic-result-table td {\n color: var(--atomic-neutral-dark);\n border-top: none;\n vertical-align: top;\n padding: var(--padding);\n }\n .atomic-result-table.density-comfortable {\n --padding: 2rem;\n }\n .atomic-result-table.density-normal {\n --padding: 1.5rem;\n }\n .atomic-result-table.density-compact {\n --padding: 1rem;\n }\n .min-w-0 {\n min-width: calc(0.25rem * 0);\n }\n .min-w-10 {\n min-width: calc(0.25rem * 10);\n }\n .min-w-20 {\n min-width: calc(0.25rem * 20);\n }\n .min-w-24 {\n min-width: calc(0.25rem * 24);\n }\n .min-w-full {\n min-width: 100%;\n }\n .flex-1 {\n flex: 1;\n }\n .flex-none {\n flex: none;\n }\n .flex-shrink {\n flex-shrink: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .grow {\n flex-grow: 1;\n }\n .basis-1\\/2 {\n flex-basis: calc(1/2 * 100%);\n }\n .basis-8 {\n flex-basis: calc(0.25rem * 8);\n }\n .border-collapse {\n border-collapse: collapse;\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-1\\/2 {\n --tw-translate-x: calc(1/2 * 100%);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-75 {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-100 {\n --tw-scale-x: 100%;\n --tw-scale-y: 100%;\n --tw-scale-z: 100%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n .animate-spin {\n animation: spin 1s linear infinite;\n }\n .cursor-\\[inherit\\] {\n cursor: inherit;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-none {\n resize: none;\n }\n .list-outside {\n list-style-position: outside;\n }\n .list-decimal {\n list-style-type: decimal;\n }\n .list-disc {\n list-style-type: disc;\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n @media (width >= 1024px) {\n .atomic-grid-display-desktop .list-root.display-grid {\n grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr));\n }\n .atomic-grid-display-desktop .list-root.display-grid.density-comfortable {\n grid-row-gap: 4rem;\n grid-column-gap: 1.5rem;\n }\n .atomic-grid-display-desktop .list-root.display-grid.density-normal, .atomic-grid-display-desktop .list-root.display-grid.density-compact {\n grid-row-gap: 3rem;\n grid-column-gap: 1.5rem;\n }\n .atomic-grid-display-desktop .list-root.display-grid.image-large {\n grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));\n }\n @media not all and (width >= 1024px) {\n .atomic-grid-display-desktop .list-root.display-grid.image-small {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n @media (width >= 1024px) {\n .atomic-grid-display-desktop .list-root.display-grid.image-small {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n @media (min-width: 1280px) {\n .atomic-grid-display-desktop .list-root.display-grid.image-small {\n grid-template-columns: repeat(4, 1fr);\n }\n }\n }\n .grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n }\n .grid-cols-\\[min-content_auto\\] {\n grid-template-columns: min-content auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-nowrap {\n flex-wrap: nowrap;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-items-center {\n place-items: center;\n }\n .content-center {\n align-content: center;\n }\n .items-baseline {\n align-items: baseline;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .gap-0\\.5 {\n gap: calc(0.25rem * 0.5);\n }\n .gap-1 {\n gap: calc(0.25rem * 1);\n }\n .gap-2 {\n gap: calc(0.25rem * 2);\n }\n .gap-3 {\n gap: calc(0.25rem * 3);\n }\n .gap-4 {\n gap: calc(0.25rem * 4);\n }\n .gap-8 {\n gap: calc(0.25rem * 8);\n }\n :where(.space-y-1 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(0.25rem * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(0.25rem * 1) * calc(1 - var(--tw-space-y-reverse)));\n }\n .gap-x-1\\.5 {\n column-gap: calc(0.25rem * 1.5);\n }\n .gap-x-2 {\n column-gap: calc(0.25rem * 2);\n }\n .gap-x-4 {\n column-gap: calc(0.25rem * 4);\n }\n :where(.space-x-1\\.5 > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(0.25rem * 1.5) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(0.25rem * 1.5) * calc(1 - var(--tw-space-x-reverse)));\n }\n .gap-y-0\\.5 {\n row-gap: calc(0.25rem * 0.5);\n }\n :where(.divide-y > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n :where(.divide-neutral > :not(:last-child)) {\n border-color: var(--atomic-neutral);\n }\n .self-center {\n align-self: center;\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-auto {\n overflow: auto;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-clip {\n overflow-x: clip;\n }\n .overflow-x-scroll {\n overflow-x: scroll;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .overflow-y-visible {\n overflow-y: visible;\n }\n .scroll-smooth {\n scroll-behavior: smooth;\n }\n .atomic-grid-with-cards [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-grid-with-cards atomic-result-placeholder {\n border-color: transparent;\n }\n .atomic-grid-with-cards {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n }\n .atomic-list-with-cards [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n }\n .atomic-list-with-cards atomic-result-placeholder {\n border-color: transparent;\n }\n .rounded {\n border-radius: var(--atomic-border-radius);\n }\n .rounded-3xl {\n border-radius: 1.5rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--atomic-border-radius-lg);\n }\n .rounded-md {\n border-radius: var(--atomic-border-radius-md);\n }\n .rounded-none {\n border-radius: 0;\n }\n .rounded-sm {\n border-radius: var(--atomic-border-radius);\n }\n .rounded-xl {\n border-radius: var(--atomic-border-radius-xl);\n }\n .rounded-tl-none {\n border-top-left-radius: 0;\n }\n .rounded-r-none {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-gray-200 {\n border-color: oklch(0.928 0.006 264.531);\n }\n .border-neutral {\n border-color: var(--atomic-neutral);\n }\n .border-neutral-dark {\n border-color: var(--atomic-neutral-dark);\n }\n .border-neutral-dim {\n border-color: var(--atomic-neutral-dim);\n }\n .border-primary {\n border-color: var(--atomic-primary);\n }\n .border-primary-light {\n border-color: var(--atomic-primary-light);\n }\n .border-t-neutral {\n border-top-color: var(--atomic-neutral);\n }\n .border-b-neutral {\n border-bottom-color: var(--atomic-neutral);\n }\n .border-b-neutral-dim {\n border-bottom-color: var(--atomic-neutral-dim);\n }\n .border-l-neutral {\n border-left-color: var(--atomic-neutral);\n }\n .border-l-neutral-dim {\n border-left-color: var(--atomic-neutral-dim);\n }\n .bg-\\[\\#F1F2FF\\] {\n background-color: #F1F2FF;\n }\n .bg-background {\n background-color: var(--atomic-background);\n }\n .bg-error {\n background-color: var(--atomic-error);\n }\n .bg-gray-50 {\n background-color: oklch(0.985 0.002 247.839);\n }\n .bg-neutral {\n background-color: var(--atomic-neutral);\n }\n .bg-neutral-dark {\n background-color: var(--atomic-neutral-dark);\n }\n .bg-neutral-light {\n background-color: var(--atomic-neutral-light);\n }\n .bg-primary {\n background-color: var(--atomic-primary);\n }\n .bg-primary-background {\n background-color: var(--atomic-primary-background);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: #fff;\n }\n .bg-linear-to-l {\n --tw-gradient-position: to left;\n }\n @supports (background-image: linear-gradient(in lab, red, red)) {\n .bg-linear-to-l {\n --tw-gradient-position: to left in oklab;\n }\n }\n .bg-linear-to-l {\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-linear-to-r {\n --tw-gradient-position: to right;\n }\n @supports (background-image: linear-gradient(in lab, red, red)) {\n .bg-linear-to-r {\n --tw-gradient-position: to right in oklab;\n }\n }\n .bg-linear-to-r {\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-background\\/60 {\n --tw-gradient-from: color-mix(in srgb, #ffffff 60%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .from-background\\/60 {\n --tw-gradient-from: color-mix(in oklab, var(--atomic-background) 60%, transparent);\n }\n }\n .from-background\\/60 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-more-results-progress-bar-color-from {\n --tw-gradient-from: var(\n --atomic-more-results-progress-bar-color-from,\n var(--atomic-primary-dark)\n );\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-more-results-progress-bar-color-to {\n --tw-gradient-to: var(\n --atomic-more-results-progress-bar-color-to,\n var(--atomic-primary-light)\n );\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .fill-current {\n fill: currentcolor;\n }\n .stroke-\\[1\\.25\\] {\n stroke-width: 1.25;\n }\n .object-contain {\n object-fit: contain;\n }\n .p-0 {\n padding: calc(0.25rem * 0);\n }\n .p-1 {\n padding: calc(0.25rem * 1);\n }\n .p-2 {\n padding: calc(0.25rem * 2);\n }\n .p-2\\.5 {\n padding: calc(0.25rem * 2.5);\n }\n .p-3 {\n padding: calc(0.25rem * 3);\n }\n .p-3\\.5 {\n padding: calc(0.25rem * 3.5);\n }\n .p-4 {\n padding: calc(0.25rem * 4);\n }\n .p-6 {\n padding: calc(0.25rem * 6);\n }\n .p-7 {\n padding: calc(0.25rem * 7);\n }\n .p-8 {\n padding: calc(0.25rem * 8);\n }\n .px-1 {\n padding-inline: calc(0.25rem * 1);\n }\n .px-2 {\n padding-inline: calc(0.25rem * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(0.25rem * 2.5);\n }\n .px-3 {\n padding-inline: calc(0.25rem * 3);\n }\n .px-4 {\n padding-inline: calc(0.25rem * 4);\n }\n .px-6 {\n padding-inline: calc(0.25rem * 6);\n }\n .px-9 {\n padding-inline: calc(0.25rem * 9);\n }\n .py-0\\.5 {\n padding-block: calc(0.25rem * 0.5);\n }\n .py-1 {\n padding-block: calc(0.25rem * 1);\n }\n .py-1\\.5 {\n padding-block: calc(0.25rem * 1.5);\n }\n .py-2 {\n padding-block: calc(0.25rem * 2);\n }\n .py-2\\.5 {\n padding-block: calc(0.25rem * 2.5);\n }\n .py-3 {\n padding-block: calc(0.25rem * 3);\n }\n .py-3\\.5 {\n padding-block: calc(0.25rem * 3.5);\n }\n .py-4 {\n padding-block: calc(0.25rem * 4);\n }\n .py-5 {\n padding-block: calc(0.25rem * 5);\n }\n .pt-0\\.5 {\n padding-top: calc(0.25rem * 0.5);\n }\n .pt-8 {\n padding-top: calc(0.25rem * 8);\n }\n .pr-2 {\n padding-right: calc(0.25rem * 2);\n }\n .pr-6 {\n padding-right: calc(0.25rem * 6);\n }\n .pr-24 {\n padding-right: calc(0.25rem * 24);\n }\n .pb-1 {\n padding-bottom: calc(0.25rem * 1);\n }\n .pb-3 {\n padding-bottom: calc(0.25rem * 3);\n }\n .pb-4 {\n padding-bottom: calc(0.25rem * 4);\n }\n .pb-6 {\n padding-bottom: calc(0.25rem * 6);\n }\n .pl-0 {\n padding-left: calc(0.25rem * 0);\n }\n .pl-1 {\n padding-left: calc(0.25rem * 1);\n }\n .pl-3 {\n padding-left: calc(0.25rem * 3);\n }\n .pl-7 {\n padding-left: calc(0.25rem * 7);\n }\n .pl-9 {\n padding-left: calc(0.25rem * 9);\n }\n .pl-10 {\n padding-left: calc(0.25rem * 10);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .align-baseline {\n vertical-align: baseline;\n }\n .align-bottom {\n vertical-align: bottom;\n }\n .align-middle {\n vertical-align: middle;\n }\n .font-sans {\n font-family: var(--atomic-font-family);\n }\n .set-font-size-sm {\n --font-size: var(--atomic-text-sm);\n font-size: var(--font-size);\n --line-height: calc(var(--font-size) * var(--atomic-line-height-ratio));\n line-height: var(--line-height);\n }\n .set-font-size-sm {\n --font-size: var(--atomic-text-sm);\n font-size: var(--font-size);\n --line-height: calc(var(--font-size) * var(--atomic-line-height-ratio));\n line-height: var(--line-height);\n }\n .set-font-size-sm {\n --font-size: var(--atomic-text-sm);\n font-size: var(--font-size);\n --line-height: calc(var(--font-size) * var(--atomic-line-height-ratio));\n line-height: var(--line-height);\n }\n .text-2xl {\n font-size: var(--atomic-text-2xl);\n line-height: var(--tw-leading, calc(2 / 1.5));\n }\n .text-base {\n font-size: var(--atomic-text-base);\n line-height: var(--tw-leading, calc(1.5 / 1));\n }\n .text-lg {\n font-size: var(--atomic-text-lg);\n line-height: var(--tw-leading, calc(1.75 / 1.125));\n }\n .text-sm {\n font-size: var(--atomic-text-sm);\n line-height: var(--tw-leading, calc(1.25 / 0.875));\n }\n .text-xl {\n font-size: var(--atomic-text-xl);\n line-height: var(--tw-leading, calc(1.75 / 1.25));\n }\n .text-xs {\n font-size: 0.75rem;\n line-height: var(--tw-leading, calc(1 / 0.75));\n }\n .text-xs\\/\\[1rem\\] {\n font-size: 0.75rem;\n line-height: 1rem;\n }\n .leading-4 {\n --tw-leading: calc(0.25rem * 4);\n line-height: calc(0.25rem * 4);\n }\n .leading-5 {\n --tw-leading: calc(0.25rem * 5);\n line-height: calc(0.25rem * 5);\n }\n .leading-6 {\n --tw-leading: calc(0.25rem * 6);\n line-height: calc(0.25rem * 6);\n }\n .leading-8 {\n --tw-leading: calc(0.25rem * 8);\n line-height: calc(0.25rem * 8);\n }\n .leading-10 {\n --tw-leading: calc(0.25rem * 10);\n line-height: calc(0.25rem * 10);\n }\n .leading-\\[1\\.5\\] {\n --tw-leading: 1.5;\n line-height: 1.5;\n }\n .leading-\\[calc\\(1\\/\\.75\\)\\] {\n --tw-leading: calc(1 / .75);\n line-height: calc(1 / .75);\n }\n .leading-\\[var\\(--line-height\\)\\] {\n --tw-leading: var(--line-height);\n line-height: var(--line-height);\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .font-bold {\n --tw-font-weight: var(--atomic-font-bold);\n font-weight: var(--atomic-font-bold);\n }\n .font-light {\n --tw-font-weight: 300;\n font-weight: 300;\n }\n .font-medium {\n --tw-font-weight: 500;\n font-weight: 500;\n }\n .font-normal {\n --tw-font-weight: var(--atomic-font-normal);\n font-weight: var(--atomic-font-normal);\n }\n .font-semibold {\n --tw-font-weight: 600;\n font-weight: 600;\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .break-all {\n word-break: break-all;\n }\n .break-keep {\n word-break: keep-all;\n }\n .text-ellipsis {\n text-overflow: ellipsis;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-\\[\\#54698D\\] {\n color: #54698D;\n }\n .text-\\[inherit\\] {\n color: inherit;\n }\n .text-black {\n color: #000;\n }\n .text-error {\n color: var(--atomic-error);\n }\n .text-gray-500 {\n color: oklch(0.551 0.027 264.364);\n }\n .text-gray-600 {\n color: oklch(0.446 0.03 256.802);\n }\n .text-gray-700 {\n color: oklch(0.373 0.034 259.733);\n }\n .text-gray-900 {\n color: oklch(0.21 0.034 264.665);\n }\n .text-green-600 {\n color: oklch(0.627 0.194 149.214);\n }\n .text-inline-code {\n color: var(--atomic-inline-code);\n }\n .text-neutral {\n color: var(--atomic-neutral);\n }\n .text-neutral-dark {\n color: var(--atomic-neutral-dark);\n }\n .text-on-background {\n color: var(--atomic-on-background);\n }\n .text-on-primary {\n color: var(--atomic-on-primary);\n }\n .text-primary {\n color: var(--atomic-primary);\n }\n .text-primary-light {\n color: var(--atomic-primary-light);\n }\n .text-rating-icon-active {\n color: var(--atomic-rating-icon-active-color, #f6ce3c);\n }\n .text-rating-icon-inactive {\n color: var(\n --atomic-rating-icon-inactive-color,\n var(--atomic-neutral)\n );\n }\n .text-success {\n color: var(--atomic-success);\n }\n .text-transparent {\n color: transparent;\n }\n .capitalize {\n text-transform: capitalize;\n }\n .lowercase {\n text-transform: lowercase;\n }\n .italic {\n font-style: italic;\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .placeholder-neutral-dark::placeholder {\n color: var(--atomic-neutral-dark);\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-inner-primary {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--atomic-primary));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0px 2px 8px var(--tw-shadow-color, rgba(229, 232, 232, 0.75));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-t-lg {\n --tw-shadow: 0px -2px 8px var(--tw-shadow-color, rgba(229, 232, 232, 0.75));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-3 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-primary {\n --tw-ring-color: var(--atomic-primary);\n }\n .ring-primary-light {\n --tw-ring-color: var(--atomic-primary-light);\n }\n .ring-ring-primary {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .outline-error {\n outline-color: var(--atomic-error);\n }\n .outline-neutral {\n outline-color: var(--atomic-neutral);\n }\n .outline-primary {\n outline-color: var(--atomic-primary);\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .invert {\n --tw-invert: invert(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .transition-\\[visibility\\] {\n transition-property: visibility;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));\n transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-in-out {\n --tw-ease: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n }\n .\\[scrollbar-gutter\\:stable_both-edges\\] {\n scrollbar-gutter: stable both-edges;\n }\n @media (hover: hover) {\n .group-hover\\:visible:is(:where(.group):hover *) {\n visibility: visible;\n }\n }\n @media (hover: hover) {\n .group-hover\\:text-error:is(:where(.group):hover *) {\n color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .group-hover\\:text-primary:is(:where(.group):hover *) {\n color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .group-hover\\:text-primary-light:is(:where(.group):hover *) {\n color: var(--atomic-primary-light);\n }\n }\n .group-focus\\:text-primary:is(:where(.group):focus *) {\n color: var(--atomic-primary);\n }\n .group-focus\\:text-primary-light:is(:where(.group):focus *) {\n color: var(--atomic-primary-light);\n }\n .group-focus-visible\\:text-error:is(:where(.group):focus-visible *) {\n color: var(--atomic-error);\n }\n .group-focus-visible\\:text-primary:is(:where(.group):focus-visible *) {\n color: var(--atomic-primary);\n }\n .peer-focus-within\\:border-primary-light:is(:where(.peer):focus-within ~ *) {\n border-color: var(--atomic-primary-light);\n }\n .peer-focus-within\\:text-primary-light:is(:where(.peer):focus-within ~ *) {\n color: var(--atomic-primary-light);\n }\n @media (hover: hover) {\n .peer-hover\\:border-primary-light:is(:where(.peer):hover ~ *) {\n border-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .peer-hover\\:text-error:is(:where(.peer):hover ~ *) {\n color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .peer-hover\\:text-primary-light:is(:where(.peer):hover ~ *) {\n color: var(--atomic-primary-light);\n }\n }\n .before\\:inline::before {\n content: var(--tw-content);\n display: inline;\n }\n .before\\:content-\\[\\\'\\,\\\\00a0\\\'\\]::before {\n content: var(--tw-content);\n --tw-content: \',\\00a0\';\n content: var(--tw-content);\n }\n .after\\:absolute::after {\n content: var(--tw-content);\n position: absolute;\n }\n .after\\:-bottom-0\\.5::after {\n content: var(--tw-content);\n bottom: calc(0.25rem * -0.5);\n }\n .after\\:block::after {\n content: var(--tw-content);\n display: block;\n }\n .after\\:h-1::after {\n content: var(--tw-content);\n height: calc(0.25rem * 1);\n }\n .after\\:w-full::after {\n content: var(--tw-content);\n width: 100%;\n }\n .after\\:rounded::after {\n content: var(--tw-content);\n border-radius: var(--atomic-border-radius);\n }\n .after\\:bg-primary::after {\n content: var(--tw-content);\n background-color: var(--atomic-primary);\n }\n .focus-within\\:border-disabled:focus-within {\n border-color: var(--atomic-disabled);\n }\n .focus-within\\:border-primary:focus-within {\n border-color: var(--atomic-primary);\n }\n .focus-within\\:ring-3:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .focus-within\\:ring-neutral:focus-within {\n --tw-ring-color: var(--atomic-neutral);\n }\n .focus-within\\:ring-ring-primary:focus-within {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n @media (hover: hover) {\n .hover\\:border:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n @media (hover: hover) {\n .hover\\:border-error:hover {\n border-color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .hover\\:border-primary-light:hover {\n border-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-error:hover {\n background-color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-neutral-light:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-primary-light:hover {\n background-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .hover\\:bg-transparent:hover {\n background-color: transparent;\n }\n }\n @media (hover: hover) {\n .hover\\:fill-white:hover {\n fill: #fff;\n }\n }\n @media (hover: hover) {\n .hover\\:text-primary-light:hover {\n color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .hover\\:underline:hover {\n text-decoration-line: underline;\n }\n }\n @media (hover: hover) {\n .hover\\:opacity-100:hover {\n opacity: 100%;\n }\n }\n @media (hover: hover) {\n .hover\\:shadow-sm:hover {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:opacity-100:focus {\n opacity: 100%;\n }\n .focus\\:outline-hidden:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n @media (forced-colors: active) {\n .focus\\:outline-hidden:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .focus-visible\\:border:focus-visible {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .focus-visible\\:border-error:focus-visible {\n border-color: var(--atomic-error);\n }\n .focus-visible\\:border-primary:focus-visible {\n border-color: var(--atomic-primary);\n }\n .focus-visible\\:border-primary-light:focus-visible {\n border-color: var(--atomic-primary-light);\n }\n .focus-visible\\:bg-error:focus-visible {\n background-color: var(--atomic-error);\n }\n .focus-visible\\:bg-neutral-light:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .focus-visible\\:bg-primary-light:focus-visible {\n background-color: var(--atomic-primary-light);\n }\n .focus-visible\\:text-primary-light:focus-visible {\n color: var(--atomic-primary-light);\n }\n .focus-visible\\:underline:focus-visible {\n text-decoration-line: underline;\n }\n .focus-visible\\:ring-2:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n @media (width >= 40rem) {\n .sm\\:px-6 {\n padding-inline: calc(0.25rem * 6);\n }\n }\n .\\[part\\=\\"breadcrumb-button\\"\\]\\:visible:is(part="breadcrumb-button") {\n visibility: visible;\n }\n}\n@layer theme, base, components, utilities;\n@layer components {\n .input-primary {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n }\n @media (hover: hover) {\n .input-primary:hover {\n border-color: var(--atomic-primary-light);\n }\n }\n .input-primary:focus-visible {\n border-color: var(--atomic-primary);\n }\n .input-primary:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .input-primary:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .input-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-radio {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n }\n .btn-radio::before {\n content: var(--tw-content);\n --tw-content: attr(value);\n content: var(--tw-content);\n }\n .btn-primary {\n border-radius: var(--atomic-border-radius);\n background-color: var(--atomic-primary);\n color: var(--atomic-on-primary);\n }\n @media (hover: hover) {\n .btn-primary:hover {\n background-color: var(--atomic-primary-light);\n }\n }\n .btn-primary:focus-visible {\n background-color: var(--atomic-primary-light);\n }\n .btn-primary:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-primary:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-primary:disabled {\n cursor: not-allowed;\n }\n .btn-primary:disabled {\n background-color: var(--atomic-disabled);\n }\n .btn-outline-primary {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-primary);\n }\n @media (hover: hover) {\n .btn-outline-primary:hover {\n border-color: var(--atomic-primary-light);\n }\n }\n @media (hover: hover) {\n .btn-outline-primary:hover {\n color: var(--atomic-primary-light);\n }\n }\n .btn-outline-primary:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-primary:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-primary:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-primary:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-primary:disabled {\n cursor: not-allowed;\n }\n .btn-outline-primary:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-primary:disabled {\n color: var(--atomic-neutral);\n }\n .btn-text-primary {\n border-radius: var(--atomic-border-radius);\n background-color: var(--atomic-background);\n color: var(--atomic-primary);\n }\n @media (hover: hover) {\n .btn-text-primary:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n .btn-text-primary:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-text-primary:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-neutral {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-neutral:hover {\n border-color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .btn-outline-neutral:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-outline-neutral:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-neutral:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-neutral:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-neutral:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-neutral:disabled {\n cursor: not-allowed;\n }\n .btn-outline-neutral:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-neutral:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-neutral:disabled {\n opacity: 50%;\n }\n .btn-outline-bg-neutral {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-bg-neutral:hover {\n border-color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-neutral:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-neutral:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-outline-bg-neutral:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-bg-neutral:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-outline-bg-neutral:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-bg-neutral:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-bg-neutral:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-bg-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-bg-neutral:disabled {\n cursor: not-allowed;\n }\n .btn-outline-bg-neutral:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-bg-neutral:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-bg-neutral:disabled {\n opacity: 50%;\n }\n .btn-outline-bg-error {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-bg-error:hover {\n border-color: var(--atomic-primary);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-error:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .btn-outline-bg-error:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-outline-bg-error:focus-visible {\n border-color: var(--atomic-primary);\n }\n .btn-outline-bg-error:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-outline-bg-error:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-outline-bg-error:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-bg-error:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-bg-error:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-bg-error:disabled {\n cursor: not-allowed;\n }\n .btn-outline-bg-error:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-bg-error:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-bg-error:disabled {\n opacity: 50%;\n }\n .btn-outline-error {\n border-radius: var(--atomic-border-radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-outline-error:hover {\n border-color: var(--atomic-error);\n }\n }\n @media (hover: hover) {\n .btn-outline-error:hover {\n color: var(--atomic-error);\n }\n }\n .btn-outline-error:focus-visible {\n border-color: var(--atomic-error);\n }\n .btn-outline-error:focus-visible {\n color: var(--atomic-error);\n }\n .btn-outline-error:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .btn-outline-error:focus-visible {\n --tw-ring-color: var(--atomic-ring-primary);\n }\n .btn-outline-error:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-outline-error:disabled {\n cursor: not-allowed;\n }\n .btn-outline-error:disabled {\n border-color: var(--atomic-neutral);\n }\n .btn-outline-error:disabled {\n color: var(--atomic-on-background);\n }\n .btn-outline-error:disabled {\n opacity: 50%;\n }\n .btn-text-neutral {\n border-radius: var(--atomic-border-radius);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-text-neutral:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n @media (hover: hover) {\n .btn-text-neutral:hover {\n color: var(--atomic-primary);\n }\n }\n .btn-text-neutral:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-text-neutral:focus-visible {\n color: var(--atomic-primary);\n }\n .btn-text-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-text-transparent {\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-text-transparent:hover {\n color: var(--atomic-primary-light);\n }\n }\n .btn-text-transparent:focus-visible {\n color: var(--atomic-primary-light);\n }\n .btn-square-neutral {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n background-color: var(--atomic-background);\n color: var(--atomic-on-background);\n }\n @media (hover: hover) {\n .btn-square-neutral:hover {\n background-color: var(--atomic-neutral-light);\n }\n }\n .btn-square-neutral:focus-visible {\n background-color: var(--atomic-neutral-light);\n }\n .btn-square-neutral:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .btn-page {\n display: grid;\n height: calc(0.25rem * 10);\n width: calc(0.25rem * 10);\n place-items: center;\n border-style: var(--tw-border-style);\n border-width: 0px;\n font-size: var(--atomic-text-lg);\n line-height: var(--tw-leading, calc(1.75 / 1.125));\n }\n @media (hover: hover) {\n .btn-page:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n }\n .btn-page:focus-visible {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .btn-page.selected {\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--atomic-primary);\n --tw-font-weight: var(--atomic-font-bold);\n font-weight: var(--atomic-font-bold);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n border-color: oklch(0.928 0.006 264.531);\n }\n :host {\n display: block;\n }\n :host, button, input, select {\n font-family: var(--atomic-font-family);\n font-size: var(--atomic-text-base);\n line-height: var(--tw-leading, calc(1.5 / 1));\n --tw-font-weight: var(--atomic-font-normal);\n font-weight: var(--atomic-font-normal);\n }\n button {\n cursor: pointer;\n }\n :host(.atomic-hidden) {\n display: none;\n }\n .ripple {\n position: absolute;\n pointer-events: none;\n transform: scale(0);\n border-radius: 50%;\n animation: ripple var(--animation-duration) linear;\n }\n .ripple-relative {\n position: relative;\n }\n .ripple-parent {\n overflow: hidden;\n }\n @keyframes ripple {\n to {\n transform: scale(4);\n opacity: 0;\n }\n }\n}\n@keyframes scaleUp {\n 0% {\n transform: scale(0.7) translateY(150vh);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1) translateY(0px);\n opacity: 1;\n }\n}\n@keyframes slideDown {\n 0% {\n transform: translateY(0px);\n opacity: 1;\n }\n 100% {\n transform: translateY(150vh);\n opacity: 0.7;\n }\n}\n.list-wrapper.placeholder .result-component {\n display: none;\n}\n.list-wrapper.placeholder table.list-root {\n display: none;\n}\n.list-wrapper:not(.placeholder) atomic-result-placeholder {\n display: none;\n}\n.list-wrapper:not(.placeholder) atomic-result-table-placeholder {\n display: none;\n}\n.list-root.loading {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes pulse {\n 0%, 100% {\n opacity: 0.6;\n }\n 50% {\n opacity: 0.2;\n }\n}\n:host [part~=\'outline\'][part~=\'result-list-grid-clickable-container\'] {\n position: relative;\n border: 1px solid transparent;\n padding: 1rem;\n border-radius: 1rem;\n transition: all 0.12s ease-out;\n}\n:host [part~=\'outline\'][part~=\'result-list-grid-clickable-container\']:hover {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n box-shadow: 0px 10px 25px var(--atomic-neutral);\n cursor: pointer;\n}\n:host [part=\'result-list-grid-clickable\']:focus-visible {\n border-radius: 2px;\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--atomic-primary);\n color: var(--atomic-primary);\n cursor: pointer;\n display: inline-block;\n text-decoration: underline;\n text-align: center;\n position: absolute;\n}\n:host [part=\'result-list-grid-clickable\']:not(:focus) {\n clip: rect(1px, 1px, 1px, 1px);\n overflow: hidden;\n position: absolute;\n padding: 0;\n}\n:host .list-wrapper {\n word-break: break-word;\n}\n:host .list-root.display-grid {\n display: grid;\n justify-content: space-evenly;\n}\n:host .list-root.display-grid .result-component {\n height: 100%;\n box-sizing: border-box;\n}\n:host {\n display: block;\n}\n:host .list-root [part~=\'outline\'] {\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--atomic-neutral);\n padding: 1rem;\n border-radius: 1rem;\n}\n:host .list-root atomic-result-placeholder {\n border-color: transparent;\n}\n:host .list-root {\n grid-column-gap: 0.5rem;\n grid-row-gap: 0.5rem;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n}\n:host [part=\'label\'] {\n font-family: var(--atomic-font-family);\n font-size: var(--atomic-text-2xl);\n line-height: var(--tw-leading, calc(2 / 1.5));\n --tw-font-weight: var(--atomic-font-bold);\n font-weight: var(--atomic-font-bold);\n}\n:host atomic-result:not(.hydrated) {\n visibility: hidden;\n}\n@property --tw-border-style {\n syntax: "*";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-translate-x {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-scale-x {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: "*";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: "*";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: "*";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: "*";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: "*";\n inherits: false;\n}\n@property --tw-space-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-divide-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-gradient-position {\n syntax: "*";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: "*";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: "*";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: "*";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: "*";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: "*";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: "<length>";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: "*";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: "*";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: "*";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: "*";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: "*";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: "*";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: "*";\n inherits: false;\n}\n@property --tw-invert {\n syntax: "*";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: "*";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: "*";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: "*";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: "*";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: "*";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: "*";\n inherits: false;\n}\n@property --tw-duration {\n syntax: "*";\n inherits: false;\n}\n@property --tw-ease {\n syntax: "*";\n inherits: false;\n}\n@property --tw-content {\n syntax: "*";\n initial-value: "";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: "";\n }\n }\n}\n';const z=k;var j=undefined&&undefined.__decorate||function(n,r,t,i){var e=arguments.length,a=e<3?r:i===null?i=Object.getOwnPropertyDescriptor(r,t):i,o;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")a=Reflect.decorate(n,r,t,i);else for(var l=n.length-1;l>=0;l--)if(o=n[l])a=(e<3?o(a):e>3?o(r,t,a):o(r,t))||a;return e>3&&a&&Object.defineProperty(r,t,a),a};const R=class{constructor(r){n(this,r);this.loadingFlag=m("firstRecommendationLoaded-");this.isAppLoaded=false;this.resultTemplateRegistered=false;this.templateHasError=false;this.currentPage=0;this.recommendation="Recommendation";this.display="list";this.density="normal";this.imageSize="small";this.numberOfRecommendations=10;this.headingLevel=0;this.error=undefined;this.isAppLoaded=false;this.resultTemplateRegistered=false;this.templateHasError=false;this.currentPage=0;this.recommendationListState=undefined;this.recommendation="Recommendation";this.display="list";this.density="normal";this.imageSize="small";this.numberOfRecommendations=10;this.numberOfRecommendationsPerPage=undefined;this.label=undefined;this.headingLevel=0}async watchNumberOfRecommendationsPerPage(){this.currentPage=0}async setRenderFunction(n){this.itemRenderingFunction=n}async previousPage(){this.currentPage=this.currentPage-1<0?this.numberOfPages-1:this.currentPage-1}async nextPage(){this.currentPage=(this.currentPage+1)%this.numberOfPages}initialize(){this.validateNumberOfRecommendationsPerPage();this.validateRecommendationIdentifier();this.updateOriginLevel2();this.recommendationList=a(this.bindings.engine,{options:{id:this.recommendation,numberOfRecommendations:this.numberOfRecommendations}});this.itemTemplateProvider=new b({includeDefaultTemplate:true,templateElements:Array.from(this.host.querySelectorAll("atomic-recs-result-template")),getResultTemplateRegistered:()=>this.resultTemplateRegistered,getTemplateHasError:()=>this.templateHasError,setResultTemplateRegistered:n=>{this.resultTemplateRegistered=n},setTemplateHasError:n=>{this.templateHasError=n},bindings:this.bindings});this.itemListCommon=new v({engineSubscribe:this.bindings.engine.subscribe,getCurrentNumberOfItems:()=>this.recommendationListState.recommendations.length,getIsLoading:()=>this.recommendationListState.isLoading,host:this.host,loadingFlag:this.loadingFlag,nextNewItemTarget:this.focusTarget,store:this.bindings.store});h(this.bindings.store,(n=>{this.isAppLoaded=n}))}get focusTarget(){if(!this.nextNewResultTarget){this.nextNewResultTarget=new d(this)}return this.nextNewResultTarget}get recommendationListStateWithAugment(){return{...this.recommendationListState,firstRequestExecuted:this.recommendationListState.searchResponseId!=="",hasError:this.recommendationListState.error!==null,hasItems:this.recommendationListState.recommendations.length!==0,results:this.subsetRecommendations}}validateNumberOfRecommendationsPerPage(){const n=new e({min:1,max:this.numberOfRecommendations-1}).validate(this.numberOfRecommendationsPerPage);if(n){this.error=new Error(`The "numberOfRecommendationsPerPage" is invalid: ${n}`)}}validateRecommendationIdentifier(){const n=document.querySelectorAll(`atomic-recs-list[recommendation="${this.recommendation}"]`);if(n.length>1){this.bindings.engine.logger.warn(`There are multiple atomic-recs-list in this page with the same recommendation property "${this.recommendation}". Make sure to set a different recommendation property for each.`)}}updateOriginLevel2(){if(this.label){const n=o(this.bindings.engine).setOriginLevel2({originLevel2:this.label});this.bindings.engine.dispatch(n)}}renderHeading(){if(!this.label){return}if(this.recommendationListStateWithAugment.hasError){return}if(this.recommendationListStateWithAugment.firstRequestExecuted&&!this.recommendationListStateWithAugment.hasItems){return}return r(x,{level:this.headingLevel,part:"label",class:"m-0 mb-2"},this.bindings.i18n.t(this.label))}get currentIndex(){return Math.abs(this.currentPage*this.numberOfRecommendationsPerPage%this.recommendationListState.recommendations.length)}get subsetRecommendations(){if(!this.numberOfRecommendationsPerPage){return this.recommendationListState.recommendations}return this.recommendationListState.recommendations.slice(this.currentIndex,this.currentIndex+this.numberOfRecommendationsPerPage)}get numberOfPages(){return Math.ceil(this.recommendationListState.recommendations.length/this.numberOfRecommendationsPerPage)}get hasPagination(){return this.numberOfPages>1}get shouldRenderPagination(){return this.hasPagination&&this.recommendationListStateWithAugment.hasItems}getPropsForAtomicRecsResult(n){const r=this.itemTemplateProvider.getLinkTemplateContent(n);return{interactiveResult:l(this.bindings.engine,{options:{result:n}}),result:n,renderingFunction:this.itemRenderingFunction,loadingFlag:this.loadingFlag,key:this.itemListCommon.getResultId(n.uniqueId,this.recommendationListState.searchResponseId,this.density,this.imageSize),content:this.itemTemplateProvider.getTemplateContent(n),linkContent:r,stopPropagation:!!r,store:this.bindings.store,density:this.density,display:this.display,imageSize:this.imageSize}}computeListDisplayClasses(){const n=!this.isAppLoaded;return f("grid",this.density,this.imageSize,this.recommendationListState.isLoading,n)}renderAsGrid(n,t){const i=this.getPropsForAtomicRecsResult(n);return r(u,{selectorForItem:"atomic-recs-result",item:n,...i.interactiveResult,setRef:n=>n&&this.itemListCommon.setNewResultRef(n,t)},r("atomic-recs-result",{...i}))}renderListOfRecommendations(){this.itemListCommon.updateBreakpoints();const n=this.computeListDisplayClasses();if(!this.resultTemplateRegistered||this.itemTemplateProvider.hasError||this.error){return}return r(w,{listClasses:n,display:"grid"},r(p,{density:this.density,display:this.display,imageSize:this.imageSize,displayPlaceholders:!this.isAppLoaded,numberOfPlaceholders:this.numberOfRecommendationsPerPage??this.numberOfRecommendations}),r(g,{...this.recommendationListStateWithAugment},this.subsetRecommendations.map(((n,r)=>this.renderAsGrid(n,r)))))}render(){return r(t,{key:"3469818622186a476e010dc43d0ee7662ccc07af"},this.renderHeading(),this.shouldRenderPagination?r(y,{bindings:this.bindings,currentPage:this.currentPage,nextPage:()=>this.nextPage(),previousPage:()=>this.previousPage(),numberOfPages:this.numberOfPages},this.renderListOfRecommendations()):this.renderListOfRecommendations())}get host(){return i(this)}static get watchers(){return{numberOfRecommendationsPerPage:["watchNumberOfRecommendationsPerPage"]}}};j([s()],R.prototype,"bindings",void 0);j([c("recommendationList")],R.prototype,"recommendationListState",void 0);R.style=z;export{R as atomic_recs_list};
2
+ //# sourceMappingURL=p-58fe83ae.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["atomicRecsListCss","AtomicRecsListStyle0","AtomicRecsList","this","loadingFlag","randomID","isAppLoaded","resultTemplateRegistered","templateHasError","currentPage","recommendation","display","density","imageSize","numberOfRecommendations","headingLevel","watchNumberOfRecommendationsPerPage","setRenderFunction","resultRenderingFunction","itemRenderingFunction","previousPage","numberOfPages","nextPage","initialize","validateNumberOfRecommendationsPerPage","validateRecommendationIdentifier","updateOriginLevel2","recommendationList","buildRecommendationList","bindings","engine","options","id","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","Array","from","host","querySelectorAll","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","value","setTemplateHasError","itemListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","recommendationListState","recommendations","length","getIsLoading","isLoading","nextNewItemTarget","focusTarget","store","createAppLoadedListener","nextNewResultTarget","FocusTargetController","recommendationListStateWithAugment","firstRequestExecuted","searchResponseId","hasError","error","hasItems","results","subsetRecommendations","msg","NumberValue","min","max","validate","numberOfRecommendationsPerPage","Error","recListWithRecommendation","document","logger","warn","label","action","loadConfigurationActions","setOriginLevel2","originLevel2","dispatch","renderHeading","h","Heading","level","part","class","i18n","t","currentIndex","Math","abs","slice","ceil","hasPagination","shouldRenderPagination","getPropsForAtomicRecsResult","linkContent","getLinkTemplateContent","interactiveResult","buildRecsInteractiveResult","result","renderingFunction","key","getResultId","uniqueId","content","getTemplateContent","stopPropagation","computeListDisplayClasses","displayPlaceholders","getItemListDisplayClasses","renderAsGrid","i","propsForAtomicRecsResult","DisplayGrid","selectorForItem","item","setRef","element","setNewResultRef","renderListOfRecommendations","updateBreakpoints","listClasses","DisplayWrapper","ResultsPlaceholdersGuard","numberOfPlaceholders","ItemDisplayGuard","map","render","Fragment","Carousel","__decorate","InitializeBindings","BindStateToController"],"sources":["src/components/recommendations/atomic-recs-list/atomic-recs-list.pcss?tag=atomic-recs-list&encapsulation=shadow","src/components/recommendations/atomic-recs-list/atomic-recs-list.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n@import '../../common/item-list/styles/mixins.pcss';\n@import '../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: block;\n\n /**\n * @prop --atomic-recs-number-of-columns: Number of columns for the recommendation list.\n */\n .list-root {\n @apply atomic-grid-with-cards;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n }\n\n [part='label'] {\n @apply font-sans text-2xl font-bold;\n }\n\n atomic-result:not(.hydrated) {\n visibility: hidden;\n }\n}\n","import {NumberValue} from '@coveo/bueno';\nimport {\n buildRecommendationList,\n RecommendationList,\n RecommendationListState,\n loadConfigurationActions,\n buildInteractiveResult as buildRecsInteractiveResult,\n Result as RecsResult,\n} from '@coveo/headless/recommendation';\nimport {\n Component,\n State,\n Element,\n Prop,\n Method,\n h,\n Fragment,\n Watch,\n} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-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 {ItemTemplateProvider} from '../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../common/item-list/stencil-display-grid';\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 ItemDisplayBasicLayout,\n getItemListDisplayClasses,\n} from '../../common/layout/display-options';\nimport {Carousel} from '../../common/stencil-carousel';\nimport {Heading} from '../../common/stencil-heading';\nimport {RecsBindings} from '../atomic-recs-interface/atomic-recs-interface';\n\n/**\n * The `atomic-recs-list` component displays recommendations by applying one or more result templates.\n *\n * @part result-list - The element containing the list of results.\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it.\n * @part result-list-grid-clickable - The clickable link encompassing the result.\n * @part label - The label of the result list.\n * @part previous-button - The previous button.\n * @part next-button - The next button.\n * @part indicators - The list of indicators.\n * @part indicator - A single indicator.\n * @part active-indicator - The active indicator.\n * @slot default - The default slot where to insert the template element.\n */\n@Component({\n tag: 'atomic-recs-list',\n styleUrl: 'atomic-recs-list.pcss',\n shadow: true,\n})\nexport class AtomicRecsList implements InitializableComponent<RecsBindings> {\n @InitializeBindings() public bindings!: RecsBindings;\n public recommendationList!: RecommendationList;\n private loadingFlag = randomID('firstRecommendationLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private itemTemplateProvider!: ItemTemplateProvider;\n private nextNewResultTarget?: FocusTargetController;\n private itemListCommon!: ItemListCommon;\n\n @Element() public host!: HTMLDivElement;\n\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n\n @State() private resultTemplateRegistered = false;\n @State() private templateHasError = false;\n @State() private currentPage = 0;\n @BindStateToController('recommendationList')\n @State()\n public recommendationListState!: RecommendationListState;\n\n /**\n * The Recommendation identifier used by the Coveo platform to retrieve recommended documents.\n * Make sure to set a different value for each atomic-recs-list in your page.\n */\n @Prop({reflect: true}) public recommendation = 'Recommendation';\n\n /**\n * The layout to apply when displaying results themselves. This does not affect the display of the surrounding list itself.\n * To modify the number of recommendations per column, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public display: ItemDisplayBasicLayout = '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 * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true})\n public imageSize: ItemDisplayImageSize = 'small';\n\n /**\n * The total number of recommendations to display.\n * This does not modify the number of recommendations per column. To do so, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public numberOfRecommendations = 10;\n\n /**\n * The number of recommendations to display, per page.\n * Setting a value greater than and lower than the numberOfRecommendations value activates the carousel.\n * This does not affect the display of the list itself, only the number of recommendation pages.\n */\n @Prop({reflect: true}) public numberOfRecommendationsPerPage?: number;\n\n /**\n * The non-localized label for the list of recommendations.\n */\n @Prop({reflect: true}) public label?: string;\n\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n\n @Watch('numberOfRecommendationsPerPage')\n public async watchNumberOfRecommendationsPerPage() {\n this.currentPage = 0;\n }\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 /**\n * Moves to the previous page, when the carousel is activated.\n */\n @Method() public async previousPage() {\n this.currentPage =\n this.currentPage - 1 < 0 ? this.numberOfPages - 1 : this.currentPage - 1;\n }\n\n /**\n * Moves to the next page, when the carousel is activated.\n */\n @Method() public async nextPage() {\n this.currentPage = (this.currentPage + 1) % this.numberOfPages;\n }\n\n public initialize() {\n this.validateNumberOfRecommendationsPerPage();\n this.validateRecommendationIdentifier();\n this.updateOriginLevel2();\n this.recommendationList = buildRecommendationList(this.bindings.engine, {\n options: {\n id: this.recommendation,\n numberOfRecommendations: this.numberOfRecommendations,\n },\n });\n\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-recs-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.itemListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () =>\n this.recommendationListState.recommendations.length,\n getIsLoading: () => this.recommendationListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n private get recommendationListStateWithAugment() {\n return {\n ...this.recommendationListState,\n firstRequestExecuted:\n this.recommendationListState.searchResponseId !== '',\n hasError: this.recommendationListState.error !== null,\n hasItems: this.recommendationListState.recommendations.length !== 0,\n results: this.subsetRecommendations,\n };\n }\n\n private validateNumberOfRecommendationsPerPage() {\n const msg = new NumberValue({\n min: 1,\n max: this.numberOfRecommendations - 1,\n }).validate(this.numberOfRecommendationsPerPage!);\n\n if (msg) {\n this.error = new Error(\n `The \"numberOfRecommendationsPerPage\" is invalid: ${msg}`\n );\n }\n }\n\n private validateRecommendationIdentifier() {\n const recListWithRecommendation = document.querySelectorAll(\n `atomic-recs-list[recommendation=\"${this.recommendation}\"]`\n );\n\n if (recListWithRecommendation.length > 1) {\n this.bindings.engine.logger.warn(\n `There are multiple atomic-recs-list in this page with the same recommendation property \"${this.recommendation}\". Make sure to set a different recommendation property for each.`\n );\n }\n }\n\n private updateOriginLevel2() {\n if (this.label) {\n const action = loadConfigurationActions(\n this.bindings.engine\n ).setOriginLevel2({\n originLevel2: this.label,\n });\n\n this.bindings.engine.dispatch(action);\n }\n }\n\n private renderHeading() {\n if (!this.label) {\n return;\n }\n\n if (this.recommendationListStateWithAugment.hasError) {\n return;\n }\n\n if (\n this.recommendationListStateWithAugment.firstRequestExecuted &&\n !this.recommendationListStateWithAugment.hasItems\n ) {\n return;\n }\n\n return (\n <Heading level={this.headingLevel} part=\"label\" class=\"m-0 mb-2\">\n {this.bindings.i18n.t(this.label)}\n </Heading>\n );\n }\n\n private get currentIndex() {\n return Math.abs(\n (this.currentPage * this.numberOfRecommendationsPerPage!) %\n this.recommendationListState.recommendations.length\n );\n }\n\n private get subsetRecommendations() {\n if (!this.numberOfRecommendationsPerPage) {\n return this.recommendationListState.recommendations;\n }\n\n return this.recommendationListState.recommendations.slice(\n this.currentIndex,\n this.currentIndex + this.numberOfRecommendationsPerPage\n );\n }\n\n private get numberOfPages() {\n return Math.ceil(\n this.recommendationListState.recommendations.length /\n this.numberOfRecommendationsPerPage!\n );\n }\n\n private get hasPagination() {\n return this.numberOfPages > 1;\n }\n\n private get shouldRenderPagination() {\n return (\n this.hasPagination && this.recommendationListStateWithAugment.hasItems\n );\n }\n\n private getPropsForAtomicRecsResult(recommendation: RecsResult) {\n const linkContent =\n this.itemTemplateProvider.getLinkTemplateContent(recommendation);\n\n return {\n interactiveResult: buildRecsInteractiveResult(this.bindings.engine, {\n options: {result: recommendation},\n }),\n result: recommendation,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.itemListCommon.getResultId(\n recommendation.uniqueId,\n this.recommendationListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(recommendation),\n linkContent,\n stopPropagation: !!linkContent,\n store: this.bindings.store,\n density: this.density,\n display: this.display,\n imageSize: this.imageSize,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n 'grid',\n this.density,\n this.imageSize,\n this.recommendationListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid(recommendation: RecsResult, i: number) {\n const propsForAtomicRecsResult =\n this.getPropsForAtomicRecsResult(recommendation);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-recs-result\"\n item={recommendation}\n {...propsForAtomicRecsResult.interactiveResult}\n setRef={(element) =>\n element && this.itemListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-recs-result {...propsForAtomicRecsResult}></atomic-recs-result>\n </DisplayGrid>\n );\n }\n\n private renderListOfRecommendations() {\n this.itemListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n if (\n !this.resultTemplateRegistered ||\n this.itemTemplateProvider.hasError ||\n this.error\n ) {\n return;\n }\n\n return (\n <DisplayWrapper listClasses={listClasses} display=\"grid\">\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={\n this.numberOfRecommendationsPerPage ?? this.numberOfRecommendations\n }\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard {...this.recommendationListStateWithAugment}>\n {this.subsetRecommendations.map((recommendation, i) => {\n return this.renderAsGrid(recommendation, i);\n })}\n </ItemDisplayGuard>\n </DisplayWrapper>\n );\n }\n\n public render() {\n return (\n <Fragment>\n {this.renderHeading()}\n {this.shouldRenderPagination ? (\n <Carousel\n bindings={this.bindings}\n currentPage={this.currentPage}\n nextPage={() => this.nextPage()}\n previousPage={() => this.previousPage()}\n numberOfPages={this.numberOfPages}\n >\n {this.renderListOfRecommendations()}\n </Carousel>\n ) : (\n this.renderListOfRecommendations()\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["atomicRecsListCss","AtomicRecsListStyle0","AtomicRecsList","this","loadingFlag","randomID","isAppLoaded","resultTemplateRegistered","templateHasError","currentPage","recommendation","display","density","imageSize","numberOfRecommendations","headingLevel","watchNumberOfRecommendationsPerPage","setRenderFunction","resultRenderingFunction","itemRenderingFunction","previousPage","numberOfPages","nextPage","initialize","validateNumberOfRecommendationsPerPage","validateRecommendationIdentifier","updateOriginLevel2","recommendationList","buildRecommendationList","bindings","engine","options","id","itemTemplateProvider","ItemTemplateProvider","includeDefaultTemplate","templateElements","Array","from","host","querySelectorAll","getResultTemplateRegistered","getTemplateHasError","setResultTemplateRegistered","value","setTemplateHasError","itemListCommon","ItemListCommon","engineSubscribe","subscribe","getCurrentNumberOfItems","recommendationListState","recommendations","length","getIsLoading","isLoading","nextNewItemTarget","focusTarget","store","createAppLoadedListener","nextNewResultTarget","FocusTargetController","recommendationListStateWithAugment","firstRequestExecuted","searchResponseId","hasError","error","hasItems","results","subsetRecommendations","msg","NumberValue","min","max","validate","numberOfRecommendationsPerPage","Error","recListWithRecommendation","document","logger","warn","label","action","loadConfigurationActions","setOriginLevel2","originLevel2","dispatch","renderHeading","h","Heading","level","part","class","i18n","t","currentIndex","Math","abs","slice","ceil","hasPagination","shouldRenderPagination","getPropsForAtomicRecsResult","linkContent","getLinkTemplateContent","interactiveResult","buildRecsInteractiveResult","result","renderingFunction","key","getResultId","uniqueId","content","getTemplateContent","stopPropagation","computeListDisplayClasses","displayPlaceholders","getItemListDisplayClasses","renderAsGrid","i","propsForAtomicRecsResult","DisplayGrid","selectorForItem","item","setRef","element","setNewResultRef","renderListOfRecommendations","updateBreakpoints","listClasses","DisplayWrapper","ResultsPlaceholdersGuard","numberOfPlaceholders","ItemDisplayGuard","map","render","Fragment","Carousel","__decorate","InitializeBindings","BindStateToController"],"sources":["src/components/recommendations/atomic-recs-list/atomic-recs-list.pcss?tag=atomic-recs-list&encapsulation=shadow","src/components/recommendations/atomic-recs-list/atomic-recs-list.tsx"],"sourcesContent":["@import '../../../global/global.pcss';\n@import '../../common/item-list/styles/mixins.pcss';\n@import '../../common/item-list/styles/placeholders.pcss';\n\n:host {\n @apply atomic-grid-clickable-elements;\n @apply atomic-grid-display-common;\n display: block;\n\n /**\n * @prop --atomic-recs-number-of-columns: Number of columns for the recommendation list.\n */\n .list-root {\n @apply atomic-grid-with-cards;\n grid-template-columns: repeat(var(--atomic-recs-number-of-columns, 1), minmax(0, 1fr));\n }\n\n [part='label'] {\n @apply font-sans text-2xl font-bold;\n }\n\n atomic-result:not(.hydrated) {\n visibility: hidden;\n }\n}\n","import {NumberValue} from '@coveo/bueno';\nimport {\n buildRecommendationList,\n RecommendationList,\n RecommendationListState,\n loadConfigurationActions,\n buildInteractiveResult as buildRecsInteractiveResult,\n Result as RecsResult,\n} from '@coveo/headless/recommendation';\nimport {\n Component,\n State,\n Element,\n Prop,\n Method,\n h,\n Fragment,\n Watch,\n} from '@stencil/core';\nimport {\n BindStateToController,\n InitializableComponent,\n InitializeBindings,\n} from '../../../utils/initialization-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 {ItemTemplateProvider} from '../../common/item-list/item-template-provider';\nimport {DisplayGrid} from '../../common/item-list/stencil-display-grid';\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 ItemDisplayBasicLayout,\n getItemListDisplayClasses,\n} from '../../common/layout/display-options';\nimport {Carousel} from '../../common/stencil-carousel';\nimport {Heading} from '../../common/stencil-heading';\nimport {RecsBindings} from '../atomic-recs-interface/atomic-recs-interface';\n\n/**\n * The `atomic-recs-list` component displays recommendations by applying one or more result templates.\n *\n * @part result-list - The element containing the list of results.\n * @part result-list-grid-clickable-container - The parent of the result & the clickable link encompassing it.\n * @part result-list-grid-clickable - The clickable link encompassing the result.\n * @part label - The label of the result list.\n * @part previous-button - The previous button.\n * @part next-button - The next button.\n * @part indicators - The list of indicators.\n * @part indicator - A single indicator.\n * @part active-indicator - The active indicator.\n * @slot default - The default slot where to insert the template element.\n */\n@Component({\n tag: 'atomic-recs-list',\n styleUrl: 'atomic-recs-list.pcss',\n shadow: true,\n})\nexport class AtomicRecsList implements InitializableComponent<RecsBindings> {\n @InitializeBindings() public bindings!: RecsBindings;\n public recommendationList!: RecommendationList;\n private loadingFlag = randomID('firstRecommendationLoaded-');\n private itemRenderingFunction: ItemRenderingFunction;\n private itemTemplateProvider!: ItemTemplateProvider;\n private nextNewResultTarget?: FocusTargetController;\n private itemListCommon!: ItemListCommon;\n\n @Element() public host!: HTMLDivElement;\n\n @State() public error!: Error;\n @State() private isAppLoaded = false;\n\n @State() private resultTemplateRegistered = false;\n @State() private templateHasError = false;\n @State() private currentPage = 0;\n @BindStateToController('recommendationList')\n @State()\n public recommendationListState!: RecommendationListState;\n\n /**\n * The Recommendation identifier used by the Coveo platform to retrieve recommended documents.\n * Make sure to set a different value for each atomic-recs-list in your page.\n */\n @Prop({reflect: true}) public recommendation = 'Recommendation';\n\n /**\n * The layout to apply when displaying results themselves. This does not affect the display of the surrounding list itself.\n * To modify the number of recommendations per column, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public display: ItemDisplayBasicLayout = '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 * The expected size of the image displayed in the results.\n */\n @Prop({reflect: true})\n public imageSize: ItemDisplayImageSize = 'small';\n\n /**\n * The total number of recommendations to display.\n * This does not modify the number of recommendations per column. To do so, modify the --atomic-recs-number-of-columns CSS variable.\n */\n @Prop({reflect: true}) public numberOfRecommendations = 10;\n\n /**\n * The number of recommendations to display, per page.\n * Setting a value greater than and lower than the numberOfRecommendations value activates the carousel.\n * This does not affect the display of the list itself, only the number of recommendation pages.\n */\n @Prop({reflect: true}) public numberOfRecommendationsPerPage?: number;\n\n /**\n * The non-localized label for the list of recommendations.\n */\n @Prop({reflect: true}) public label?: string;\n\n /**\n * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.\n */\n @Prop({reflect: true}) public headingLevel = 0;\n\n @Watch('numberOfRecommendationsPerPage')\n public async watchNumberOfRecommendationsPerPage() {\n this.currentPage = 0;\n }\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 /**\n * Moves to the previous page, when the carousel is activated.\n */\n @Method() public async previousPage() {\n this.currentPage =\n this.currentPage - 1 < 0 ? this.numberOfPages - 1 : this.currentPage - 1;\n }\n\n /**\n * Moves to the next page, when the carousel is activated.\n */\n @Method() public async nextPage() {\n this.currentPage = (this.currentPage + 1) % this.numberOfPages;\n }\n\n public initialize() {\n this.validateNumberOfRecommendationsPerPage();\n this.validateRecommendationIdentifier();\n this.updateOriginLevel2();\n this.recommendationList = buildRecommendationList(this.bindings.engine, {\n options: {\n id: this.recommendation,\n numberOfRecommendations: this.numberOfRecommendations,\n },\n });\n\n this.itemTemplateProvider = new ItemTemplateProvider({\n includeDefaultTemplate: true,\n templateElements: Array.from(\n this.host.querySelectorAll('atomic-recs-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.itemListCommon = new ItemListCommon({\n engineSubscribe: this.bindings.engine.subscribe,\n getCurrentNumberOfItems: () =>\n this.recommendationListState.recommendations.length,\n getIsLoading: () => this.recommendationListState.isLoading,\n host: this.host,\n loadingFlag: this.loadingFlag,\n nextNewItemTarget: this.focusTarget,\n store: this.bindings.store,\n });\n\n createAppLoadedListener(this.bindings.store, (isAppLoaded) => {\n this.isAppLoaded = isAppLoaded;\n });\n }\n\n public get focusTarget() {\n if (!this.nextNewResultTarget) {\n this.nextNewResultTarget = new FocusTargetController(this);\n }\n return this.nextNewResultTarget;\n }\n\n private get recommendationListStateWithAugment() {\n return {\n ...this.recommendationListState,\n firstRequestExecuted:\n this.recommendationListState.searchResponseId !== '',\n hasError: this.recommendationListState.error !== null,\n hasItems: this.recommendationListState.recommendations.length !== 0,\n results: this.subsetRecommendations,\n };\n }\n\n private validateNumberOfRecommendationsPerPage() {\n const msg = new NumberValue({\n min: 1,\n max: this.numberOfRecommendations - 1,\n }).validate(this.numberOfRecommendationsPerPage!);\n\n if (msg) {\n this.error = new Error(\n `The \"numberOfRecommendationsPerPage\" is invalid: ${msg}`\n );\n }\n }\n\n private validateRecommendationIdentifier() {\n const recListWithRecommendation = document.querySelectorAll(\n `atomic-recs-list[recommendation=\"${this.recommendation}\"]`\n );\n\n if (recListWithRecommendation.length > 1) {\n this.bindings.engine.logger.warn(\n `There are multiple atomic-recs-list in this page with the same recommendation property \"${this.recommendation}\". Make sure to set a different recommendation property for each.`\n );\n }\n }\n\n private updateOriginLevel2() {\n if (this.label) {\n const action = loadConfigurationActions(\n this.bindings.engine\n ).setOriginLevel2({\n originLevel2: this.label,\n });\n\n this.bindings.engine.dispatch(action);\n }\n }\n\n private renderHeading() {\n if (!this.label) {\n return;\n }\n\n if (this.recommendationListStateWithAugment.hasError) {\n return;\n }\n\n if (\n this.recommendationListStateWithAugment.firstRequestExecuted &&\n !this.recommendationListStateWithAugment.hasItems\n ) {\n return;\n }\n\n return (\n <Heading level={this.headingLevel} part=\"label\" class=\"m-0 mb-2\">\n {this.bindings.i18n.t(this.label)}\n </Heading>\n );\n }\n\n private get currentIndex() {\n return Math.abs(\n (this.currentPage * this.numberOfRecommendationsPerPage!) %\n this.recommendationListState.recommendations.length\n );\n }\n\n private get subsetRecommendations() {\n if (!this.numberOfRecommendationsPerPage) {\n return this.recommendationListState.recommendations;\n }\n\n return this.recommendationListState.recommendations.slice(\n this.currentIndex,\n this.currentIndex + this.numberOfRecommendationsPerPage\n );\n }\n\n private get numberOfPages() {\n return Math.ceil(\n this.recommendationListState.recommendations.length /\n this.numberOfRecommendationsPerPage!\n );\n }\n\n private get hasPagination() {\n return this.numberOfPages > 1;\n }\n\n private get shouldRenderPagination() {\n return (\n this.hasPagination && this.recommendationListStateWithAugment.hasItems\n );\n }\n\n private getPropsForAtomicRecsResult(recommendation: RecsResult) {\n const linkContent =\n this.itemTemplateProvider.getLinkTemplateContent(recommendation);\n\n return {\n interactiveResult: buildRecsInteractiveResult(this.bindings.engine, {\n options: {result: recommendation},\n }),\n result: recommendation,\n renderingFunction: this.itemRenderingFunction,\n loadingFlag: this.loadingFlag,\n key: this.itemListCommon.getResultId(\n recommendation.uniqueId,\n this.recommendationListState.searchResponseId,\n this.density,\n this.imageSize\n ),\n content: this.itemTemplateProvider.getTemplateContent(recommendation),\n linkContent,\n stopPropagation: !!linkContent,\n store: this.bindings.store,\n density: this.density,\n display: this.display,\n imageSize: this.imageSize,\n };\n }\n\n private computeListDisplayClasses() {\n const displayPlaceholders = !this.isAppLoaded;\n\n return getItemListDisplayClasses(\n 'grid',\n this.density,\n this.imageSize,\n this.recommendationListState.isLoading,\n displayPlaceholders\n );\n }\n\n private renderAsGrid(recommendation: RecsResult, i: number) {\n const propsForAtomicRecsResult =\n this.getPropsForAtomicRecsResult(recommendation);\n return (\n <DisplayGrid\n selectorForItem=\"atomic-recs-result\"\n item={recommendation}\n {...propsForAtomicRecsResult.interactiveResult}\n setRef={(element) =>\n element && this.itemListCommon.setNewResultRef(element, i)\n }\n >\n <atomic-recs-result {...propsForAtomicRecsResult}></atomic-recs-result>\n </DisplayGrid>\n );\n }\n\n private renderListOfRecommendations() {\n this.itemListCommon.updateBreakpoints();\n const listClasses = this.computeListDisplayClasses();\n\n if (\n !this.resultTemplateRegistered ||\n this.itemTemplateProvider.hasError ||\n this.error\n ) {\n return;\n }\n\n return (\n <DisplayWrapper listClasses={listClasses} display=\"grid\">\n <ResultsPlaceholdersGuard\n density={this.density}\n display={this.display}\n imageSize={this.imageSize}\n displayPlaceholders={!this.isAppLoaded}\n numberOfPlaceholders={\n this.numberOfRecommendationsPerPage ?? this.numberOfRecommendations\n }\n ></ResultsPlaceholdersGuard>\n <ItemDisplayGuard {...this.recommendationListStateWithAugment}>\n {this.subsetRecommendations.map((recommendation, i) => {\n return this.renderAsGrid(recommendation, i);\n })}\n </ItemDisplayGuard>\n </DisplayWrapper>\n );\n }\n\n public render() {\n return (\n <Fragment>\n {this.renderHeading()}\n {this.shouldRenderPagination ? (\n <Carousel\n bindings={this.bindings}\n currentPage={this.currentPage}\n nextPage={() => this.nextPage()}\n previousPage={() => this.previousPage()}\n numberOfPages={this.numberOfPages}\n >\n {this.renderListOfRecommendations()}\n </Carousel>\n ) : (\n this.renderListOfRecommendations()\n )}\n </Fragment>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}