@coveo/atomic 3.32.4-pre.6ea53b7cff → 3.32.4-pre.70ec661453

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 (86) hide show
  1. package/dist/atomic/_atomic.esm.js +1 -1
  2. package/dist/atomic/autoloader/index.cjs.js +2 -2
  3. package/dist/atomic/autoloader/index.esm.js +2 -2
  4. package/dist/atomic/components/analytics-config.js +1 -1
  5. package/dist/atomic/components/atomic-insight-interface.js +1 -1
  6. package/dist/atomic/components/atomic-insight-interface.js.map +1 -1
  7. package/dist/atomic/components/atomic-insight-user-actions-timeline2.js.map +1 -1
  8. package/dist/atomic/components/atomic-quickview-modal2.js +4 -4
  9. package/dist/atomic/components/atomic-quickview-modal2.js.map +1 -1
  10. package/dist/atomic/components/components/commerce/atomic-commerce-interface/atomic-commerce-interface.js +0 -15
  11. package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.js +6 -3
  12. package/dist/atomic/components/components/commerce/atomic-product-template/atomic-product-template.js +1 -1
  13. package/dist/atomic/components/components/commerce/atomic-product-text/atomic-product-text.js +2 -15
  14. package/dist/atomic/components/decorators/bind-state.js +6 -6
  15. package/dist/atomic/components/global/environment.js +1 -1
  16. package/dist/atomic/lang/cs.json +1 -1
  17. package/dist/atomic/lang/da.json +1 -1
  18. package/dist/atomic/lang/de.json +1 -1
  19. package/dist/atomic/lang/dev.json +1 -1
  20. package/dist/atomic/lang/el.json +1 -1
  21. package/dist/atomic/lang/en.json +1 -1
  22. package/dist/atomic/lang/es.json +1 -1
  23. package/dist/atomic/lang/fi.json +1 -1
  24. package/dist/atomic/lang/fr.json +1 -1
  25. package/dist/atomic/lang/hu.json +1 -1
  26. package/dist/atomic/lang/id.json +1 -1
  27. package/dist/atomic/lang/it.json +1 -1
  28. package/dist/atomic/lang/ja.json +1 -1
  29. package/dist/atomic/lang/ko.json +1 -1
  30. package/dist/atomic/lang/nl.json +1 -1
  31. package/dist/atomic/lang/no.json +1 -1
  32. package/dist/atomic/lang/pl.json +1 -1
  33. package/dist/atomic/lang/pt-BR.json +1 -1
  34. package/dist/atomic/lang/pt.json +1 -1
  35. package/dist/atomic/lang/ru.json +1 -1
  36. package/dist/atomic/lang/sv.json +1 -1
  37. package/dist/atomic/lang/th.json +1 -1
  38. package/dist/atomic/lang/tr.json +1 -1
  39. package/dist/atomic/lang/zh-CN.json +1 -1
  40. package/dist/atomic/lang/zh-TW.json +1 -1
  41. package/dist/atomic/lang/zh.json +1 -1
  42. package/dist/atomic/{p-8355335b.js → p-23301097.js} +2 -2
  43. package/dist/atomic/{p-fa75288e.entry.js → p-45f99d37.entry.js} +2 -2
  44. package/dist/atomic/p-45f99d37.entry.js.map +1 -0
  45. package/dist/atomic/p-8bba9f56.entry.js +2 -0
  46. package/dist/atomic/p-8bba9f56.entry.js.map +1 -0
  47. package/dist/atomic/{p-823e6445.entry.js → p-9fad23d0.entry.js} +2 -2
  48. package/dist/atomic/p-a3aaf456.entry.js.map +1 -1
  49. package/dist/atomic/{p-7375f250.entry.js → p-e6229429.entry.js} +2 -2
  50. package/dist/cjs/{analytics-config-dc11e713.js → analytics-config-6943cd15.js} +2 -2
  51. package/dist/cjs/{analytics-config-dc11e713.js.map → analytics-config-6943cd15.js.map} +1 -1
  52. package/dist/cjs/atomic-insight-interface.cjs.entry.js +2 -2
  53. package/dist/cjs/atomic-insight-interface.cjs.entry.js.map +1 -1
  54. package/dist/cjs/atomic-insight-user-actions-session_2.cjs.entry.js.map +1 -1
  55. package/dist/cjs/atomic-quickview-modal.cjs.entry.js +4 -4
  56. package/dist/cjs/atomic-quickview-modal.cjs.entry.js.map +1 -1
  57. package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
  58. package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
  59. package/dist/cjs/version.cjs.js +2 -2
  60. package/dist/esm/{analytics-config-30e28f5f.js → analytics-config-fcf488d0.js} +2 -2
  61. package/dist/esm/{analytics-config-30e28f5f.js.map → analytics-config-fcf488d0.js.map} +1 -1
  62. package/dist/esm/atomic-insight-interface.entry.js +2 -2
  63. package/dist/esm/atomic-insight-interface.entry.js.map +1 -1
  64. package/dist/esm/atomic-insight-user-actions-session_2.entry.js.map +1 -1
  65. package/dist/esm/atomic-quickview-modal.entry.js +4 -4
  66. package/dist/esm/atomic-quickview-modal.entry.js.map +1 -1
  67. package/dist/esm/atomic-recs-interface.entry.js +1 -1
  68. package/dist/esm/atomic-search-interface.entry.js +1 -1
  69. package/dist/esm/version.js +2 -2
  70. package/dist/types/components/commerce/atomic-commerce-category-facet/atomic-commerce-category-facet.d.ts +0 -8
  71. package/dist/types/components/commerce/atomic-commerce-interface/atomic-commerce-interface.d.ts +1 -6
  72. package/dist/types/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.d.ts +1 -1
  73. package/dist/types/components/commerce/atomic-commerce-recommendation-list/atomic-commerce-recommendation-list.d.ts +1 -14
  74. package/dist/types/components/commerce/atomic-product-text/atomic-product-text.d.ts +1 -6
  75. package/dist/types/components/insight/atomic-insight-interface/atomic-insight-interface.d.ts +3 -0
  76. package/dist/types/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.d.ts +1 -2
  77. package/dist/types/components/search/result-template-components/quickview-iframe/quickview-iframe.d.ts +0 -1
  78. package/dist/types/components.d.ts +0 -16
  79. package/docs/atomic-docs.json +1 -519
  80. package/package.json +14 -8
  81. package/dist/atomic/p-6083c9be.entry.js +0 -2
  82. package/dist/atomic/p-6083c9be.entry.js.map +0 -1
  83. package/dist/atomic/p-fa75288e.entry.js.map +0 -1
  84. /package/dist/atomic/{p-8355335b.js.map → p-23301097.js.map} +0 -0
  85. /package/dist/atomic/{p-823e6445.entry.js.map → p-9fad23d0.entry.js.map} +0 -0
  86. /package/dist/atomic/{p-7375f250.entry.js.map → p-e6229429.entry.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, s as setNonce, h, H as Host, g as getElement } from './index-3f35faca.js';
2
2
  import { m as markParentAsReady } from './init-queue-fbe942c3.js';
3
3
  import { buildResultsPerPage, loadFieldActions, buildInsightEngine } from '@coveo/headless/insight';
4
- import { g as getNextAnalyticsConfig, a as augmentWithExternalMiddleware, b as augmentAnalyticsWithAtomicVersion, C as CommonAtomicInterfaceHelper, i as instance } from './analytics-config-30e28f5f.js';
4
+ import { g as getNextAnalyticsConfig, a as augmentWithExternalMiddleware, b as augmentAnalyticsWithAtomicVersion, C as CommonAtomicInterfaceHelper, i as instance } from './analytics-config-fcf488d0.js';
5
5
  import { A as ArrayProp } from './props-utils-76e19fa7.js';
6
6
  import { D as DEFAULT_MOBILE_BREAKPOINT } from './replace-breakpoint-213367f8.js';
7
7
  import { u as unsetLoadingFlag, s as setLoadingFlag, r as registerFacet, g as getFacetElements, w as waitUntilAppLoaded, a as createBaseStore } from './store-e14e2958.js';
@@ -284,7 +284,7 @@ const AtomicInsightInterface = class {
284
284
  this.initialized = true;
285
285
  }
286
286
  render() {
287
- return (this.engine && (h(Host, { key: 'aed4bfd7d85a00c74732bbe3ee8aeb96ce93b640' }, h("slot", { key: '2b01a05f3df814e6ba4624ebe5c4fad59b8667c9', name: "full-search" }), h("slot", { key: '5729d003ec8ebf565d4b706fe5b6bfb1a749c5f3' }))));
287
+ return (this.engine && (h(Host, { key: '04852e1a6818bd3c74a44c3691799aec694b6e38' }, h("slot", { key: '1d606b9bfa99cb112aec69852e55738c741d1435', name: "full-search" }), h("slot", { key: 'dba5553c25beb05f139ad632021254595281129c' }))));
288
288
  }
289
289
  get host() { return getElement(this); }
290
290
  static get watchers() { return {
@@ -1 +1 @@
1
- {"file":"atomic-insight-interface.entry.js","mappings":"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","names":["i18next","buildInsightResultsPerPage"],"sources":["src/components/insight/atomic-insight-interface/analytics-config.ts","src/components/insight/atomic-insight-interface/store.ts","src/components/insight/atomic-insight-interface/atomic-insight-interface.pcss?tag=atomic-insight-interface&encapsulation=shadow","src/components/insight/atomic-insight-interface/atomic-insight-interface.tsx"],"sourcesContent":["import type {\n AnalyticsConfiguration as InsightAnalyticsConfiguration,\n EngineConfiguration as InsightEngineConfiguration,\n} from '@coveo/headless/insight';\nimport {\n type AnalyticsPayload,\n augmentAnalyticsWithAtomicVersion,\n augmentWithExternalMiddleware,\n getNextAnalyticsConfig,\n} from '../../common/interface/analytics-config';\n\nexport function getAnalyticsConfig(\n searchEngineConfig: InsightEngineConfiguration,\n enabled: boolean\n): InsightAnalyticsConfiguration {\n switch (searchEngineConfig.analytics?.analyticsMode) {\n case 'next':\n return getNextAnalyticsConfig(searchEngineConfig, enabled);\n default:\n return getLegacyAnalyticsConfig(searchEngineConfig, enabled);\n }\n}\n\nfunction getLegacyAnalyticsConfig(\n searchEngineConfig: InsightEngineConfiguration,\n enabled: boolean\n): InsightAnalyticsConfiguration {\n const analyticsClientMiddleware = (\n event: string,\n payload: AnalyticsPayload\n ) => augmentAnalytics(event, payload, searchEngineConfig);\n\n const defaultConfiguration: InsightAnalyticsConfiguration = {\n analyticsClientMiddleware,\n enabled,\n documentLocation: document.location.href,\n ...(document.referrer && {originLevel3: document.referrer}),\n };\n\n if (searchEngineConfig.analytics) {\n return {\n ...defaultConfiguration,\n ...searchEngineConfig.analytics,\n analyticsClientMiddleware,\n };\n }\n return defaultConfiguration;\n}\n\nfunction augmentAnalytics(\n event: string,\n payload: AnalyticsPayload,\n config: InsightEngineConfiguration\n) {\n let result = augmentWithExternalMiddleware(event, payload, config);\n result = augmentAnalyticsWithAtomicVersion(result);\n return result;\n}\n","import type {\n DateFacetValue,\n InsightEngine,\n NumericFacetValue,\n} from '@coveo/headless/insight';\nimport {DEFAULT_MOBILE_BREAKPOINT} from '@/src/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-insight-layout/insight-layout';\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}\n\nexport type InsightStore = BaseStore<Data> & {\n isMobile(): boolean;\n unsetLoadingFlag(loadingFlag: string): void;\n setLoadingFlag(flag: string): void;\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: InsightEngine): string;\n getAllFacets(): FacetInfoMap;\n};\n\nexport function createInsightStore(): InsightStore {\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 });\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 getAllFacets() {\n return {\n ...store.state.facets,\n ...store.state.dateFacets,\n ...store.state.categoryFacets,\n ...store.state.numericFacets,\n };\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: InsightEngine): string {\n return engine.state.search.searchResponseId;\n },\n };\n}\n","@import '../../../global/global.pcss';\n\n:host {\n position: relative;\n display: block;\n}\n\nslot[name='full-search'] {\n position: absolute;\n top: 0;\n right: 0;\n display: block;\n}\n","import {markParentAsReady} from '@/src/utils/init-queue';\nimport {loadFieldActions} from '@coveo/headless/insight';\nimport {\n LogLevel as InsightLogLevel,\n InsightEngine,\n InsightEngineConfiguration,\n buildInsightEngine,\n buildResultsPerPage as buildInsightResultsPerPage,\n} from '@coveo/headless/insight';\nimport {\n Component,\n Element,\n h,\n Host,\n Listen,\n Method,\n Prop,\n setNonce,\n State,\n Watch,\n} from '@stencil/core';\nimport i18next, {i18n} from 'i18next';\nimport {InitializeEvent} from '../../../utils/initialization-utils';\nimport {ArrayProp} from '../../../utils/props-utils';\nimport {CommonBindings, NonceBindings} from '../../common/interface/bindings';\nimport {\n StencilBaseAtomicInterface,\n CommonAtomicInterfaceHelper,\n} from '../../common/interface/interface-common-stencil';\nimport {getAnalyticsConfig} from './analytics-config';\nimport {createInsightStore, InsightStore} from './store';\n\nconst FirstInsightRequestExecutedFlag = 'firstInsightRequestExecuted';\nexport type InsightInitializationOptions = InsightEngineConfiguration;\nexport type InsightBindings = CommonBindings<\n InsightEngine,\n InsightStore,\n HTMLAtomicInsightInterfaceElement\n> &\n NonceBindings;\n\n@Component({\n tag: 'atomic-insight-interface',\n styleUrl: 'atomic-insight-interface.pcss',\n shadow: true,\n})\nexport class AtomicInsightInterface\n implements StencilBaseAtomicInterface<InsightEngine>\n{\n private initialized = false;\n\n @State() public error?: Error;\n\n /**\n * The service insight interface headless engine.\n */\n @Prop({mutable: true}) public engine?: InsightEngine;\n /**\n * Whether analytics should be enabled.\n */\n @Prop({reflect: true}) public analytics = true;\n\n /**\n * The service insight interface i18next instance.\n */\n @Prop() public i18n: i18n;\n /**\n * The severity level of the messages to log in the console.\n */\n @Prop({reflect: true}) public logLevel?: InsightLogLevel;\n\n /**\n * The service insight interface language.\n */\n @Prop({reflect: true}) public language = 'en';\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 * 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-insight-interface fields-to-include='[\"fieldA\", \"fieldB\"]'></atomic-insight-interface>\n * ```\n */\n @ArrayProp()\n @Prop({mutable: true})\n public fieldsToInclude: string[] | string = '[]';\n\n /**\n * The number of results per page. By default, this is set to `5`.\n */\n @Prop({reflect: true}) resultsPerPage = 5;\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 * When using a nonce, the first import of Atomic should be to import & call the `setNonce` function with the generated nonce value.\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 @Element() public host!: HTMLAtomicInsightInterfaceElement;\n\n private store = createInsightStore();\n private commonInterfaceHelper: CommonAtomicInterfaceHelper<InsightEngine>;\n\n private i18Initialized: Promise<void>;\n private componentWillLoadCalledPromise: Promise<void>;\n private componentWillLoadResolver: () => void;\n\n public constructor() {\n this.commonInterfaceHelper = new CommonAtomicInterfaceHelper(\n this,\n 'CoveoAtomic'\n );\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(FirstInsightRequestExecutedFlag);\n }\n\n public componentWillLoad() {\n if (this.CspNonce) {\n setNonce(this.CspNonce);\n }\n this.componentWillLoadResolver();\n }\n\n private initResultsPerPage() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n buildInsightResultsPerPage(this.bindings.engine, {\n initialState: {numberOfResults: this.resultsPerPage},\n });\n }\n\n public registerFieldsToInclude() {\n if (this.fieldsToInclude.length) {\n this.engine!.dispatch(\n loadFieldActions(this.engine!).registerFieldsToInclude([\n ...this.fieldsToInclude,\n ])\n );\n }\n }\n\n /**\n * Initializes the connection with the headless insight engine using options for `accessToken` (required), `organizationId` (required), `environment` (defaults to `prod`), and `renewAccessToken`.\n */\n @Method() public initialize(options: InsightInitializationOptions) {\n return this.internalInitialization(() => this.initEngine(options));\n }\n\n /**\n * Initializes the connection with an already preconfigured headless insight engine.\n *\n */\n @Method() public initializeWithInsightEngine(engine: InsightEngine) {\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 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 this.engine.executeFirstSearch();\n }\n\n @Watch('iconAssetsPath')\n public updateIconAssetsPath() {\n this.store.state.iconAssetsPath = this.iconAssetsPath;\n }\n\n @Listen('atomic/initializeComponent')\n public handleInitialization(event: InitializeEvent) {\n this.commonInterfaceHelper.onComponentInitializing(event);\n }\n\n @Watch('language')\n public updateLanguage() {\n return this.commonInterfaceHelper.onLanguageChange();\n }\n\n @Watch('analytics')\n public toggleAnalytics() {\n this.commonInterfaceHelper.onAnalyticsChange();\n }\n\n public get bindings(): InsightBindings {\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 initEngine(options: InsightInitializationOptions) {\n const analyticsConfig = getAnalyticsConfig(options, this.analytics);\n try {\n this.engine = buildInsightEngine({\n configuration: {\n ...options,\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 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.store.unsetLoadingFlag(FirstInsightRequestExecutedFlag);\n this.initResultsPerPage();\n this.initialized = true;\n }\n\n render() {\n return (\n this.engine && (\n <Host>\n <slot name=\"full-search\"></slot>\n <slot></slot>\n </Host>\n )\n );\n }\n}\n"],"version":3}
1
+ {"file":"atomic-insight-interface.entry.js","mappings":"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","names":["i18next","buildInsightResultsPerPage"],"sources":["src/components/insight/atomic-insight-interface/analytics-config.ts","src/components/insight/atomic-insight-interface/store.ts","src/components/insight/atomic-insight-interface/atomic-insight-interface.pcss?tag=atomic-insight-interface&encapsulation=shadow","src/components/insight/atomic-insight-interface/atomic-insight-interface.tsx"],"sourcesContent":["import type {\n AnalyticsConfiguration as InsightAnalyticsConfiguration,\n EngineConfiguration as InsightEngineConfiguration,\n} from '@coveo/headless/insight';\nimport {\n type AnalyticsPayload,\n augmentAnalyticsWithAtomicVersion,\n augmentWithExternalMiddleware,\n getNextAnalyticsConfig,\n} from '../../common/interface/analytics-config';\n\nexport function getAnalyticsConfig(\n searchEngineConfig: InsightEngineConfiguration,\n enabled: boolean\n): InsightAnalyticsConfiguration {\n switch (searchEngineConfig.analytics?.analyticsMode) {\n case 'next':\n return getNextAnalyticsConfig(searchEngineConfig, enabled);\n default:\n return getLegacyAnalyticsConfig(searchEngineConfig, enabled);\n }\n}\n\nfunction getLegacyAnalyticsConfig(\n searchEngineConfig: InsightEngineConfiguration,\n enabled: boolean\n): InsightAnalyticsConfiguration {\n const analyticsClientMiddleware = (\n event: string,\n payload: AnalyticsPayload\n ) => augmentAnalytics(event, payload, searchEngineConfig);\n\n const defaultConfiguration: InsightAnalyticsConfiguration = {\n analyticsClientMiddleware,\n enabled,\n documentLocation: document.location.href,\n ...(document.referrer && {originLevel3: document.referrer}),\n };\n\n if (searchEngineConfig.analytics) {\n return {\n ...defaultConfiguration,\n ...searchEngineConfig.analytics,\n analyticsClientMiddleware,\n };\n }\n return defaultConfiguration;\n}\n\nfunction augmentAnalytics(\n event: string,\n payload: AnalyticsPayload,\n config: InsightEngineConfiguration\n) {\n let result = augmentWithExternalMiddleware(event, payload, config);\n result = augmentAnalyticsWithAtomicVersion(result);\n return result;\n}\n","import type {\n DateFacetValue,\n InsightEngine,\n NumericFacetValue,\n} from '@coveo/headless/insight';\nimport {DEFAULT_MOBILE_BREAKPOINT} from '@/src/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-insight-layout/insight-layout';\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}\n\nexport type InsightStore = BaseStore<Data> & {\n isMobile(): boolean;\n unsetLoadingFlag(loadingFlag: string): void;\n setLoadingFlag(flag: string): void;\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: InsightEngine): string;\n getAllFacets(): FacetInfoMap;\n};\n\nexport function createInsightStore(): InsightStore {\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 });\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 getAllFacets() {\n return {\n ...store.state.facets,\n ...store.state.dateFacets,\n ...store.state.categoryFacets,\n ...store.state.numericFacets,\n };\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: InsightEngine): string {\n return engine.state.search.searchResponseId;\n },\n };\n}\n","@import '../../../global/global.pcss';\n\n:host {\n position: relative;\n display: block;\n}\n\nslot[name='full-search'] {\n position: absolute;\n top: 0;\n right: 0;\n display: block;\n}\n","import {markParentAsReady} from '@/src/utils/init-queue';\nimport {loadFieldActions} from '@coveo/headless/insight';\nimport {\n LogLevel as InsightLogLevel,\n InsightEngine,\n InsightEngineConfiguration,\n buildInsightEngine,\n buildResultsPerPage as buildInsightResultsPerPage,\n} from '@coveo/headless/insight';\nimport {\n Component,\n Element,\n h,\n Host,\n Listen,\n Method,\n Prop,\n setNonce,\n State,\n Watch,\n} from '@stencil/core';\nimport i18next, {i18n} from 'i18next';\nimport {InitializeEvent} from '../../../utils/initialization-utils';\nimport {ArrayProp} from '../../../utils/props-utils';\nimport {CommonBindings, NonceBindings} from '../../common/interface/bindings';\nimport {\n StencilBaseAtomicInterface,\n CommonAtomicInterfaceHelper,\n} from '../../common/interface/interface-common-stencil';\nimport {getAnalyticsConfig} from './analytics-config';\nimport {createInsightStore, InsightStore} from './store';\n\nconst FirstInsightRequestExecutedFlag = 'firstInsightRequestExecuted';\nexport type InsightInitializationOptions = InsightEngineConfiguration;\nexport type InsightBindings = CommonBindings<\n InsightEngine,\n InsightStore,\n HTMLAtomicInsightInterfaceElement\n> &\n NonceBindings;\n\n/**\n * @internal\n */\n@Component({\n tag: 'atomic-insight-interface',\n styleUrl: 'atomic-insight-interface.pcss',\n shadow: true,\n})\nexport class AtomicInsightInterface\n implements StencilBaseAtomicInterface<InsightEngine>\n{\n private initialized = false;\n\n @State() public error?: Error;\n\n /**\n * The service insight interface headless engine.\n */\n @Prop({mutable: true}) public engine?: InsightEngine;\n /**\n * Whether analytics should be enabled.\n */\n @Prop({reflect: true}) public analytics = true;\n\n /**\n * The service insight interface i18next instance.\n */\n @Prop() public i18n: i18n;\n /**\n * The severity level of the messages to log in the console.\n */\n @Prop({reflect: true}) public logLevel?: InsightLogLevel;\n\n /**\n * The service insight interface language.\n */\n @Prop({reflect: true}) public language = 'en';\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 * 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-insight-interface fields-to-include='[\"fieldA\", \"fieldB\"]'></atomic-insight-interface>\n * ```\n */\n @ArrayProp()\n @Prop({mutable: true})\n public fieldsToInclude: string[] | string = '[]';\n\n /**\n * The number of results per page. By default, this is set to `5`.\n */\n @Prop({reflect: true}) resultsPerPage = 5;\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 * When using a nonce, the first import of Atomic should be to import & call the `setNonce` function with the generated nonce value.\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 @Element() public host!: HTMLAtomicInsightInterfaceElement;\n\n private store = createInsightStore();\n private commonInterfaceHelper: CommonAtomicInterfaceHelper<InsightEngine>;\n\n private i18Initialized: Promise<void>;\n private componentWillLoadCalledPromise: Promise<void>;\n private componentWillLoadResolver: () => void;\n\n public constructor() {\n this.commonInterfaceHelper = new CommonAtomicInterfaceHelper(\n this,\n 'CoveoAtomic'\n );\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(FirstInsightRequestExecutedFlag);\n }\n\n public componentWillLoad() {\n if (this.CspNonce) {\n setNonce(this.CspNonce);\n }\n this.componentWillLoadResolver();\n }\n\n private initResultsPerPage() {\n if (!this.commonInterfaceHelper.engineIsCreated(this.engine)) {\n return;\n }\n buildInsightResultsPerPage(this.bindings.engine, {\n initialState: {numberOfResults: this.resultsPerPage},\n });\n }\n\n public registerFieldsToInclude() {\n if (this.fieldsToInclude.length) {\n this.engine!.dispatch(\n loadFieldActions(this.engine!).registerFieldsToInclude([\n ...this.fieldsToInclude,\n ])\n );\n }\n }\n\n /**\n * Initializes the connection with the headless insight engine using options for `accessToken` (required), `organizationId` (required), `environment` (defaults to `prod`), and `renewAccessToken`.\n */\n @Method() public initialize(options: InsightInitializationOptions) {\n return this.internalInitialization(() => this.initEngine(options));\n }\n\n /**\n * Initializes the connection with an already preconfigured headless insight engine.\n *\n */\n @Method() public initializeWithInsightEngine(engine: InsightEngine) {\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 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 this.engine.executeFirstSearch();\n }\n\n @Watch('iconAssetsPath')\n public updateIconAssetsPath() {\n this.store.state.iconAssetsPath = this.iconAssetsPath;\n }\n\n @Listen('atomic/initializeComponent')\n public handleInitialization(event: InitializeEvent) {\n this.commonInterfaceHelper.onComponentInitializing(event);\n }\n\n @Watch('language')\n public updateLanguage() {\n return this.commonInterfaceHelper.onLanguageChange();\n }\n\n @Watch('analytics')\n public toggleAnalytics() {\n this.commonInterfaceHelper.onAnalyticsChange();\n }\n\n public get bindings(): InsightBindings {\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 initEngine(options: InsightInitializationOptions) {\n const analyticsConfig = getAnalyticsConfig(options, this.analytics);\n try {\n this.engine = buildInsightEngine({\n configuration: {\n ...options,\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 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.store.unsetLoadingFlag(FirstInsightRequestExecutedFlag);\n this.initResultsPerPage();\n this.initialized = true;\n }\n\n render() {\n return (\n this.engine && (\n <Host>\n <slot name=\"full-search\"></slot>\n <slot></slot>\n </Host>\n )\n );\n }\n}\n"],"version":3}
@@ -1 +1 @@
1
- {"file":"atomic-insight-user-actions-session.atomic-insight-user-actions-timeline.entry.js","mappings":"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","names":["__decorate","buildInsightUserActions"],"sources":["src/components/insight/user-actions/atomic-insight-user-actions-session/user-action.tsx","src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.pcss?tag=atomic-insight-user-actions-session&encapsulation=shadow","src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.tsx","src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.pcss?tag=atomic-insight-user-actions-timeline&encapsulation=shadow","src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.tsx"],"sourcesContent":["import {UserAction as IUserAction} from '@coveo/headless/insight';\nimport {FunctionalComponent, h} from '@stencil/core';\nimport BookmarkIcon from '../../../../images/bookmark.svg';\nimport DocumentIcon from '../../../../images/document.svg';\nimport PointIcon from '../../../../images/point.svg';\nimport QuickviewIcon from '../../../../images/quickview.svg';\nimport SearchIcon from '../../../../images/search.svg';\nimport {parseTimestampToDateDetails} from '../../../../utils/date-utils';\nimport {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface';\n\nconst icons = {\n SEARCH: SearchIcon,\n CLICK: DocumentIcon,\n VIEW: QuickviewIcon,\n CUSTOM: PointIcon,\n TICKET_CREATION: BookmarkIcon,\n};\n\ninterface UserAction {\n action: IUserAction;\n bindings: InsightBindings;\n}\n\nexport const UserAction: FunctionalComponent<UserAction> = ({\n bindings,\n action,\n}) => {\n const renderActionTimestamp = () => {\n const {hours, minutes} = parseTimestampToDateDetails(action.timestamp);\n\n const formattedHours = String(hours).padStart(2, '0');\n const formattedMinutes = String(minutes).padStart(2, '0');\n\n return `${formattedHours}:${formattedMinutes}`;\n };\n\n const renderIcon = () => {\n const iconClasses = `w-3 h-3 ${['CLICK', 'VIEW'].includes(action.actionType) ? 'text-primary' : ''}`;\n\n return (\n <atomic-icon\n icon={icons[action.actionType]}\n class={iconClasses}\n ></atomic-icon>\n );\n };\n\n const renderActionTitle = () => {\n switch (action.actionType) {\n case 'TICKET_CREATION':\n return (\n <div class=\"ticket-creation-action__text text-xs font-semibold\">\n {bindings.i18n.t('ticket-created')}\n </div>\n );\n case 'CUSTOM':\n return (\n <div class=\"text-xs font-semibold\">\n {action.eventData?.value ?? action.eventData?.type}\n </div>\n );\n case 'SEARCH':\n return (\n <div class=\"text-xs font-semibold\">\n {action.query || bindings.i18n.t('empty-search')}\n </div>\n );\n case 'VIEW':\n return (\n <a\n href={action.document?.contentIdValue}\n class=\"text-primary text-xs font-semibold\"\n target=\"_blank\"\n >\n {action.document?.title}\n </a>\n );\n case 'CLICK':\n return (\n <div class=\"text-xs font-semibold\">{action.document?.title}</div>\n );\n default:\n return null;\n }\n };\n\n return (\n <div class=\"flex\">\n <div class=\"flex-none pr-2\">\n <div class=\"flex justify-center py-1\">{renderIcon()}</div>\n <div class=\"flex justify-center py-1\">\n <div class=\"user-action__separator h-7 w-0.5 rounded\"></div>\n </div>\n </div>\n <div class=\"flex-1\">\n {renderActionTitle()}\n <div class=\"text-neutral-dark text-xxs flex py-2 font-light\">\n <div>{renderActionTimestamp()}</div>\n <div class=\"px-2\">{action.searchHub}</div>\n </div>\n </div>\n </div>\n );\n};\n","@import '../../../../global/global.pcss';\n\n.session-start-icon__container {\n background-color: #fbb439;\n}\n\n.user-action__separator {\n @apply bg-neutral;\n}\n\n.ticket-creation-action__text {\n @apply text-success;\n}\n\n.text-xxs {\n font-size: 0.625rem;\n}\n","import {UserAction as IUserAction} from '@coveo/headless/insight';\nimport {Component, h, Prop, Watch, State} from '@stencil/core';\nimport Flag from '../../../../images/flag.svg';\nimport ThreeDotsIcon from '../../../../images/three-dots.svg';\nimport {parseTimestampToDateDetails} from '../../../../utils/date-utils';\nimport {InitializeBindings} from '../../../../utils/initialization-utils';\nimport {Button} from '../../../common/stencil-button';\nimport {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface';\nimport {UserAction} from './user-action';\n\nexport type UserActionType =\n | 'SEARCH'\n | 'CLICK'\n | 'TICKET_CREATION'\n | 'VIEW'\n | 'CUSTOM';\n\n/**\n * @internal\n * The `AtomicInsightUserActionSession` component displays all the user actions that took place during a specific user session.\n * @category Insight Panel\n * @example\n * <atomic-insight-user-actions-session userActions={actions} startTimestamp={1723035731}></atomic-insight-user-actions-session>\n */\n@Component({\n tag: 'atomic-insight-user-actions-session',\n styleUrl: 'atomic-insight-user-actions-session.pcss',\n shadow: true,\n})\nexport class AtomicInsightUserActionsSession {\n @InitializeBindings() public bindings!: InsightBindings;\n @State() public error!: Error;\n\n /**\n * The start time of the session as a Unix timestamp.\n */\n @Prop() public startTimestamp!: number;\n /**\n * The list of user actions performed during the session.\n */\n @Prop() public userActions!: Array<IUserAction>;\n\n private userActionsToDisplay: Array<IUserAction> = [];\n private userActionsAfterCaseCreation: Array<IUserAction> = [];\n @State() areActionsAfterCaseCreationVisible = false;\n\n connectedCallback() {\n this.prepareUserActionsToDisplay();\n }\n\n @Watch('userActions')\n prepareUserActionsToDisplay() {\n const caseCreationIndex = this.userActions.findIndex(\n ({actionType}) => actionType === 'TICKET_CREATION'\n );\n const isCaseCreationSession = caseCreationIndex !== -1;\n\n if (!isCaseCreationSession) {\n this.userActionsToDisplay = this.userActions;\n this.userActionsAfterCaseCreation = [];\n } else {\n this.userActionsToDisplay = this.userActions.slice(caseCreationIndex);\n this.userActionsAfterCaseCreation = this.userActions.slice(\n 0,\n caseCreationIndex\n );\n }\n }\n\n showActionsAfterCaseCreation() {\n this.areActionsAfterCaseCreationVisible = true;\n }\n\n renderSessionStartDate() {\n const caseCreationIndex = this.userActions.findIndex(\n ({actionType}) => actionType === 'TICKET_CREATION'\n );\n const isCaseCreationSession = caseCreationIndex !== -1;\n\n const {year, month, dayOfWeek, day} = parseTimestampToDateDetails(\n this.startTimestamp\n );\n\n const formatedStartDate = `${dayOfWeek}. ${month} ${day}, ${year}`;\n return (\n <div class=\"flex items-center px-2 pb-3\">\n {isCaseCreationSession ? (\n <div class=\"session-start-icon__container mr-2 flex h-5 w-5 items-center justify-center rounded-full\">\n <atomic-icon icon={Flag} class=\"h-3 w-3\"></atomic-icon>\n </div>\n ) : null}\n\n <div class=\"flex-1 font-semibold\">{formatedStartDate}</div>\n </div>\n );\n }\n\n renderActions(actions: Array<IUserAction>) {\n return (\n <ol class=\"px-3\">\n {actions?.map((action) => (\n <UserAction action={action} bindings={this.bindings}></UserAction>\n ))}\n </ol>\n );\n }\n\n renderShowMoreActionsButton() {\n const btnClasses = 'flex items-center p-1 max-w-full';\n const label = this.bindings.i18n.t('more-actions-in-session', {\n count: this.userActionsAfterCaseCreation.length,\n });\n return (\n <div\n data-testid=\"show-more-actions-button\"\n class=\"flex items-center px-3 pb-3\"\n >\n <div class=\"flex justify-center pr-2\">\n <atomic-icon icon={ThreeDotsIcon} class=\"h-3 w-3\"></atomic-icon>\n </div>\n <div class=\"flex-1\">\n <Button\n style=\"text-primary\"\n part=\"show-more-actions-button\"\n class={btnClasses}\n ariaLabel={label}\n onClick={this.showActionsAfterCaseCreation.bind(this)}\n >\n <span class=\"truncate text-xs font-light\">{label}</span>\n </Button>\n </div>\n </div>\n );\n }\n\n public render() {\n const isShowMoreActionsButtonVisible =\n !this.areActionsAfterCaseCreationVisible &&\n !!this.userActionsAfterCaseCreation.length;\n\n return (\n <div>\n {this.renderSessionStartDate()}\n\n {this.areActionsAfterCaseCreationVisible && (\n <div data-testid=\"more-actions-section\">\n {this.renderActions(this.userActionsAfterCaseCreation)}\n </div>\n )}\n\n {isShowMoreActionsButtonVisible && this.renderShowMoreActionsButton()}\n\n {this.renderActions(this.userActionsToDisplay)}\n </div>\n );\n }\n}\n","@import '../../../../global/global.pcss';\n\n.separator {\n height: 1px;\n background-color: #e0e1dd;\n}\n","import {\n buildUserActions as buildInsightUserActions,\n UserActions as InsightUserActions,\n UserActionsState as InsightUserActionsState,\n UserSession as InsightUserSession,\n} from '@coveo/headless/insight';\nimport {Component, h, State, Prop} from '@stencil/core';\nimport ArrowDownIcon from '../../../../images/big-arrow-down.svg';\nimport ArrowUpIcon from '../../../../images/big-arrow-up.svg';\nimport {\n InitializableComponent,\n InitializeBindings,\n BindStateToController,\n} from '../../../../utils/initialization-utils';\nimport {NoItemsContainer} from '../../../common/no-items/stencil-container';\nimport {MagnifyingGlass} from '../../../common/no-items/stencil-magnifying-glass';\nimport {Button} from '../../../common/stencil-button';\nimport {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface';\n\n/**\n * Internal component used by the `atomic-insight-user-actions-modal`. Do not use directly.\n * \n * This component displays all the actions performed by a user around the time they created a case.\n * The actions are grouped into multiple sessions, including the session during which the case was created,\n * the sessions preceding the case creation and the sessions following the case creation.\n *\n * @component\n * @example\n * <AtomicInsightUserActionsTimeline userId={'123'} caseCreationDate={'2024-08-15T10:00:00Z'} />\n *\n */\n@Component({\n tag: 'atomic-insight-user-actions-timeline',\n styleUrl: 'atomic-insight-user-actions-timeline.pcss',\n shadow: true,\n})\nexport class AtomicInsightUserActionsTimeline\n implements InitializableComponent<InsightBindings>\n{\n @InitializeBindings() public bindings!: InsightBindings;\n public userActions!: InsightUserActions;\n\n @BindStateToController('userActions')\n @State()\n public userActionsState!: InsightUserActionsState;\n public error!: Error;\n\n /**\n * The ID of the user whose actions are being displayed. For example in email format \"someone@company.com\".\n */\n @Prop() public userId!: string;\n /**\n * The date and time when the case was created. For example \"2024-01-01T00:00:00Z\"\n */\n @Prop() public ticketCreationDateTime!: string;\n /**\n * The names of custom events to exclude.\n */\n @Prop() public excludedCustomActions: string[] = [];\n\n public initialize() {\n this.userActions = buildInsightUserActions(this.bindings.engine, {\n options: {\n ticketCreationDate: this.ticketCreationDateTime,\n excludedCustomActions: this.excludedCustomActions,\n },\n });\n\n this.userActions.fetchUserActions(this.userId);\n }\n\n @State() followingSessionsAreVisible = false;\n @State() precedingSessionsAreVisible = false;\n\n private toggleFollowingSessions() {\n this.followingSessionsAreVisible = !this.followingSessionsAreVisible;\n }\n\n private togglePrecedingSessions() {\n this.precedingSessionsAreVisible = !this.precedingSessionsAreVisible;\n }\n\n private renderSessions(\n sessions: Array<InsightUserSession> | undefined,\n renderSeparator?: Function,\n testId?: string\n ) {\n return (\n <div>\n {sessions?.map(({actions, start}) => [\n <div class=\"mt-4\">\n <atomic-insight-user-actions-session\n startTimestamp={start}\n userActions={actions}\n data-testid={testId}\n ></atomic-insight-user-actions-session>\n </div>,\n renderSeparator ? renderSeparator() : null,\n ])}\n </div>\n );\n }\n\n private renderToggleFollowingSessionsButton() {\n const btnClasses = 'flex items-center text-left p-2 text-sm max-w-full';\n const iconClasses = 'h-3 w-3 mr-1';\n const label = this.followingSessionsAreVisible\n ? this.bindings.i18n.t('hide-following-sessions')\n : this.bindings.i18n.t('show-following-sessions');\n const icon = this.followingSessionsAreVisible ? ArrowDownIcon : ArrowUpIcon;\n\n return (\n <div class=\"flex justify-center p-2\">\n <Button\n style=\"text-primary\"\n part=\"toggle-following-sessions\"\n class={btnClasses}\n ariaLabel={label}\n onClick={this.toggleFollowingSessions.bind(this)}\n >\n <atomic-icon\n part=\"toggle-following-sessions-icon\"\n class={iconClasses}\n icon={icon}\n ></atomic-icon>\n <span class=\"truncate\">{label}</span>\n </Button>\n </div>\n );\n }\n\n private renderTogglePrecedingSessionsButton() {\n const btnClasses = 'flex items-center text-left p-2 text-sm max-w-full';\n const iconClasses = 'h-3 w-3 mr-1';\n const label = this.precedingSessionsAreVisible\n ? this.bindings.i18n.t('hide-preceding-sessions')\n : this.bindings.i18n.t('show-preceding-sessions');\n const icon = this.precedingSessionsAreVisible ? ArrowUpIcon : ArrowDownIcon;\n\n return (\n <div class=\"flex justify-center p-2\">\n <Button\n style=\"text-primary\"\n part=\"toggle-preceding-sessions\"\n class={btnClasses}\n ariaLabel={label}\n onClick={this.togglePrecedingSessions.bind(this)}\n >\n <atomic-icon\n part=\"toggle-preceding-sessions-icon\"\n class={iconClasses}\n icon={icon}\n ></atomic-icon>\n <span class=\"truncate\">{label}</span>\n </Button>\n </div>\n );\n }\n\n private renderFollowingSessionsSection() {\n if (!this.userActionsState.timeline?.followingSessions?.length) {\n return null;\n }\n return [\n this.renderToggleFollowingSessionsButton(),\n <div class=\"separator mx-1 rounded\"></div>,\n this.followingSessionsAreVisible\n ? this.renderSessions(\n this.userActionsState.timeline?.followingSessions,\n () => <div class=\"separator mx-1 mt-4 rounded\"></div>,\n 'following-session'\n )\n : null,\n ];\n }\n\n private renderPrecedingSessionsSection() {\n if (!this.userActionsState.timeline?.precedingSessions?.length) {\n return null;\n }\n return [\n <div class=\"separator mx-1 mt-4 rounded\"></div>,\n this.precedingSessionsAreVisible\n ? this.renderSessions(\n this.userActionsState.timeline?.precedingSessions,\n () => <div class=\"separator mx-1 mt-4 rounded\"></div>,\n 'preceding-session'\n )\n : null,\n this.renderTogglePrecedingSessionsButton(),\n ];\n }\n\n private renderTimeline() {\n return (\n <div>\n {this.renderFollowingSessionsSection()}\n <div class=\"mt-4\">\n <atomic-insight-user-actions-session\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n startTimestamp={this.userActionsState.timeline?.session?.start!}\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n userActions={this.userActionsState?.timeline?.session?.actions!}\n data-testid=\"active-session\"\n ></atomic-insight-user-actions-session>\n </div>\n {this.renderPrecedingSessionsSection()}\n </div>\n );\n }\n\n private renderNoUserActionsScreen() {\n return (\n <div class=\"my-6 py-3\" data-testid=\"user-actions-error\">\n <NoItemsContainer>\n <MagnifyingGlass />\n <div class=\"my-2 max-w-full text-center text-2xl font-light\">\n {this.bindings.i18n.t('no-user-actions-available')}\n </div>\n <div class=\"text-neutral-dark my-2 text-center text-lg\">\n {this.bindings.i18n.t('no-user-actions-associated-with-params')}\n </div>\n </NoItemsContainer>\n </div>\n );\n }\n\n render() {\n const areUserActionsAvailable = this.userActionsState.timeline?.session;\n const hasError = this.userActionsState.error;\n\n if (areUserActionsAvailable && !hasError) {\n return this.renderTimeline();\n }\n return this.renderNoUserActionsScreen();\n }\n}\n"],"version":3}
1
+ {"file":"atomic-insight-user-actions-session.atomic-insight-user-actions-timeline.entry.js","mappings":"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","names":["__decorate","buildInsightUserActions"],"sources":["src/components/insight/user-actions/atomic-insight-user-actions-session/user-action.tsx","src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.pcss?tag=atomic-insight-user-actions-session&encapsulation=shadow","src/components/insight/user-actions/atomic-insight-user-actions-session/atomic-insight-user-actions-session.tsx","src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.pcss?tag=atomic-insight-user-actions-timeline&encapsulation=shadow","src/components/insight/user-actions/atomic-insight-user-actions-timeline/atomic-insight-user-actions-timeline.tsx"],"sourcesContent":["import {UserAction as IUserAction} from '@coveo/headless/insight';\nimport {FunctionalComponent, h} from '@stencil/core';\nimport BookmarkIcon from '../../../../images/bookmark.svg';\nimport DocumentIcon from '../../../../images/document.svg';\nimport PointIcon from '../../../../images/point.svg';\nimport QuickviewIcon from '../../../../images/quickview.svg';\nimport SearchIcon from '../../../../images/search.svg';\nimport {parseTimestampToDateDetails} from '../../../../utils/date-utils';\nimport {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface';\n\nconst icons = {\n SEARCH: SearchIcon,\n CLICK: DocumentIcon,\n VIEW: QuickviewIcon,\n CUSTOM: PointIcon,\n TICKET_CREATION: BookmarkIcon,\n};\n\ninterface UserAction {\n action: IUserAction;\n bindings: InsightBindings;\n}\n\nexport const UserAction: FunctionalComponent<UserAction> = ({\n bindings,\n action,\n}) => {\n const renderActionTimestamp = () => {\n const {hours, minutes} = parseTimestampToDateDetails(action.timestamp);\n\n const formattedHours = String(hours).padStart(2, '0');\n const formattedMinutes = String(minutes).padStart(2, '0');\n\n return `${formattedHours}:${formattedMinutes}`;\n };\n\n const renderIcon = () => {\n const iconClasses = `w-3 h-3 ${['CLICK', 'VIEW'].includes(action.actionType) ? 'text-primary' : ''}`;\n\n return (\n <atomic-icon\n icon={icons[action.actionType]}\n class={iconClasses}\n ></atomic-icon>\n );\n };\n\n const renderActionTitle = () => {\n switch (action.actionType) {\n case 'TICKET_CREATION':\n return (\n <div class=\"ticket-creation-action__text text-xs font-semibold\">\n {bindings.i18n.t('ticket-created')}\n </div>\n );\n case 'CUSTOM':\n return (\n <div class=\"text-xs font-semibold\">\n {action.eventData?.value ?? action.eventData?.type}\n </div>\n );\n case 'SEARCH':\n return (\n <div class=\"text-xs font-semibold\">\n {action.query || bindings.i18n.t('empty-search')}\n </div>\n );\n case 'VIEW':\n return (\n <a\n href={action.document?.contentIdValue}\n class=\"text-primary text-xs font-semibold\"\n target=\"_blank\"\n >\n {action.document?.title}\n </a>\n );\n case 'CLICK':\n return (\n <div class=\"text-xs font-semibold\">{action.document?.title}</div>\n );\n default:\n return null;\n }\n };\n\n return (\n <div class=\"flex\">\n <div class=\"flex-none pr-2\">\n <div class=\"flex justify-center py-1\">{renderIcon()}</div>\n <div class=\"flex justify-center py-1\">\n <div class=\"user-action__separator h-7 w-0.5 rounded\"></div>\n </div>\n </div>\n <div class=\"flex-1\">\n {renderActionTitle()}\n <div class=\"text-neutral-dark text-xxs flex py-2 font-light\">\n <div>{renderActionTimestamp()}</div>\n <div class=\"px-2\">{action.searchHub}</div>\n </div>\n </div>\n </div>\n );\n};\n","@import '../../../../global/global.pcss';\n\n.session-start-icon__container {\n background-color: #fbb439;\n}\n\n.user-action__separator {\n @apply bg-neutral;\n}\n\n.ticket-creation-action__text {\n @apply text-success;\n}\n\n.text-xxs {\n font-size: 0.625rem;\n}\n","import {UserAction as IUserAction} from '@coveo/headless/insight';\nimport {Component, h, Prop, Watch, State} from '@stencil/core';\nimport Flag from '../../../../images/flag.svg';\nimport ThreeDotsIcon from '../../../../images/three-dots.svg';\nimport {parseTimestampToDateDetails} from '../../../../utils/date-utils';\nimport {InitializeBindings} from '../../../../utils/initialization-utils';\nimport {Button} from '../../../common/stencil-button';\nimport {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface';\nimport {UserAction} from './user-action';\n\nexport type UserActionType =\n | 'SEARCH'\n | 'CLICK'\n | 'TICKET_CREATION'\n | 'VIEW'\n | 'CUSTOM';\n\n/**\n * @internal\n * The `AtomicInsightUserActionSession` component displays all the user actions that took place during a specific user session.\n * @category Insight Panel\n * @example\n * <atomic-insight-user-actions-session userActions={actions} startTimestamp={1723035731}></atomic-insight-user-actions-session>\n */\n@Component({\n tag: 'atomic-insight-user-actions-session',\n styleUrl: 'atomic-insight-user-actions-session.pcss',\n shadow: true,\n})\nexport class AtomicInsightUserActionsSession {\n @InitializeBindings() public bindings!: InsightBindings;\n @State() public error!: Error;\n\n /**\n * The start time of the session as a Unix timestamp.\n */\n @Prop() public startTimestamp!: number;\n /**\n * The list of user actions performed during the session.\n */\n @Prop() public userActions!: Array<IUserAction>;\n\n private userActionsToDisplay: Array<IUserAction> = [];\n private userActionsAfterCaseCreation: Array<IUserAction> = [];\n @State() areActionsAfterCaseCreationVisible = false;\n\n connectedCallback() {\n this.prepareUserActionsToDisplay();\n }\n\n @Watch('userActions')\n prepareUserActionsToDisplay() {\n const caseCreationIndex = this.userActions.findIndex(\n ({actionType}) => actionType === 'TICKET_CREATION'\n );\n const isCaseCreationSession = caseCreationIndex !== -1;\n\n if (!isCaseCreationSession) {\n this.userActionsToDisplay = this.userActions;\n this.userActionsAfterCaseCreation = [];\n } else {\n this.userActionsToDisplay = this.userActions.slice(caseCreationIndex);\n this.userActionsAfterCaseCreation = this.userActions.slice(\n 0,\n caseCreationIndex\n );\n }\n }\n\n showActionsAfterCaseCreation() {\n this.areActionsAfterCaseCreationVisible = true;\n }\n\n renderSessionStartDate() {\n const caseCreationIndex = this.userActions.findIndex(\n ({actionType}) => actionType === 'TICKET_CREATION'\n );\n const isCaseCreationSession = caseCreationIndex !== -1;\n\n const {year, month, dayOfWeek, day} = parseTimestampToDateDetails(\n this.startTimestamp\n );\n\n const formatedStartDate = `${dayOfWeek}. ${month} ${day}, ${year}`;\n return (\n <div class=\"flex items-center px-2 pb-3\">\n {isCaseCreationSession ? (\n <div class=\"session-start-icon__container mr-2 flex h-5 w-5 items-center justify-center rounded-full\">\n <atomic-icon icon={Flag} class=\"h-3 w-3\"></atomic-icon>\n </div>\n ) : null}\n\n <div class=\"flex-1 font-semibold\">{formatedStartDate}</div>\n </div>\n );\n }\n\n renderActions(actions: Array<IUserAction>) {\n return (\n <ol class=\"px-3\">\n {actions?.map((action) => (\n <UserAction action={action} bindings={this.bindings}></UserAction>\n ))}\n </ol>\n );\n }\n\n renderShowMoreActionsButton() {\n const btnClasses = 'flex items-center p-1 max-w-full';\n const label = this.bindings.i18n.t('more-actions-in-session', {\n count: this.userActionsAfterCaseCreation.length,\n });\n return (\n <div\n data-testid=\"show-more-actions-button\"\n class=\"flex items-center px-3 pb-3\"\n >\n <div class=\"flex justify-center pr-2\">\n <atomic-icon icon={ThreeDotsIcon} class=\"h-3 w-3\"></atomic-icon>\n </div>\n <div class=\"flex-1\">\n <Button\n style=\"text-primary\"\n part=\"show-more-actions-button\"\n class={btnClasses}\n ariaLabel={label}\n onClick={this.showActionsAfterCaseCreation.bind(this)}\n >\n <span class=\"truncate text-xs font-light\">{label}</span>\n </Button>\n </div>\n </div>\n );\n }\n\n public render() {\n const isShowMoreActionsButtonVisible =\n !this.areActionsAfterCaseCreationVisible &&\n !!this.userActionsAfterCaseCreation.length;\n\n return (\n <div>\n {this.renderSessionStartDate()}\n\n {this.areActionsAfterCaseCreationVisible && (\n <div data-testid=\"more-actions-section\">\n {this.renderActions(this.userActionsAfterCaseCreation)}\n </div>\n )}\n\n {isShowMoreActionsButtonVisible && this.renderShowMoreActionsButton()}\n\n {this.renderActions(this.userActionsToDisplay)}\n </div>\n );\n }\n}\n","@import '../../../../global/global.pcss';\n\n.separator {\n height: 1px;\n background-color: #e0e1dd;\n}\n","import {\n buildUserActions as buildInsightUserActions,\n UserActions as InsightUserActions,\n UserActionsState as InsightUserActionsState,\n UserSession as InsightUserSession,\n} from '@coveo/headless/insight';\nimport {Component, h, State, Prop} from '@stencil/core';\nimport ArrowDownIcon from '../../../../images/big-arrow-down.svg';\nimport ArrowUpIcon from '../../../../images/big-arrow-up.svg';\nimport {\n InitializableComponent,\n InitializeBindings,\n BindStateToController,\n} from '../../../../utils/initialization-utils';\nimport {NoItemsContainer} from '../../../common/no-items/stencil-container';\nimport {MagnifyingGlass} from '../../../common/no-items/stencil-magnifying-glass';\nimport {Button} from '../../../common/stencil-button';\nimport {InsightBindings} from '../../atomic-insight-interface/atomic-insight-interface';\n\n/**\n * @internal\n * This component displays all the actions performed by a user around the time they created a case.\n * The actions are grouped into multiple sessions, including the session during which the case was created,\n * the sessions preceding the case creation and the sessions following the case creation.\n *\n * @component\n * @example\n * <AtomicInsightUserActionsTimeline userId={'123'} caseCreationDate={'2024-08-15T10:00:00Z'} />\n *\n */\n@Component({\n tag: 'atomic-insight-user-actions-timeline',\n styleUrl: 'atomic-insight-user-actions-timeline.pcss',\n shadow: true,\n})\nexport class AtomicInsightUserActionsTimeline\n implements InitializableComponent<InsightBindings>\n{\n @InitializeBindings() public bindings!: InsightBindings;\n public userActions!: InsightUserActions;\n\n @BindStateToController('userActions')\n @State()\n public userActionsState!: InsightUserActionsState;\n public error!: Error;\n\n /**\n * The ID of the user whose actions are being displayed. For example in email format \"someone@company.com\".\n */\n @Prop() public userId!: string;\n /**\n * The date and time when the case was created. For example \"2024-01-01T00:00:00Z\"\n */\n @Prop() public ticketCreationDateTime!: string;\n /**\n * The names of custom events to exclude.\n */\n @Prop() public excludedCustomActions: string[] = [];\n\n public initialize() {\n this.userActions = buildInsightUserActions(this.bindings.engine, {\n options: {\n ticketCreationDate: this.ticketCreationDateTime,\n excludedCustomActions: this.excludedCustomActions,\n },\n });\n\n this.userActions.fetchUserActions(this.userId);\n }\n\n @State() followingSessionsAreVisible = false;\n @State() precedingSessionsAreVisible = false;\n\n private toggleFollowingSessions() {\n this.followingSessionsAreVisible = !this.followingSessionsAreVisible;\n }\n\n private togglePrecedingSessions() {\n this.precedingSessionsAreVisible = !this.precedingSessionsAreVisible;\n }\n\n private renderSessions(\n sessions: Array<InsightUserSession> | undefined,\n renderSeparator?: Function,\n testId?: string\n ) {\n return (\n <div>\n {sessions?.map(({actions, start}) => [\n <div class=\"mt-4\">\n <atomic-insight-user-actions-session\n startTimestamp={start}\n userActions={actions}\n data-testid={testId}\n ></atomic-insight-user-actions-session>\n </div>,\n renderSeparator ? renderSeparator() : null,\n ])}\n </div>\n );\n }\n\n private renderToggleFollowingSessionsButton() {\n const btnClasses = 'flex items-center text-left p-2 text-sm max-w-full';\n const iconClasses = 'h-3 w-3 mr-1';\n const label = this.followingSessionsAreVisible\n ? this.bindings.i18n.t('hide-following-sessions')\n : this.bindings.i18n.t('show-following-sessions');\n const icon = this.followingSessionsAreVisible ? ArrowDownIcon : ArrowUpIcon;\n\n return (\n <div class=\"flex justify-center p-2\">\n <Button\n style=\"text-primary\"\n part=\"toggle-following-sessions\"\n class={btnClasses}\n ariaLabel={label}\n onClick={this.toggleFollowingSessions.bind(this)}\n >\n <atomic-icon\n part=\"toggle-following-sessions-icon\"\n class={iconClasses}\n icon={icon}\n ></atomic-icon>\n <span class=\"truncate\">{label}</span>\n </Button>\n </div>\n );\n }\n\n private renderTogglePrecedingSessionsButton() {\n const btnClasses = 'flex items-center text-left p-2 text-sm max-w-full';\n const iconClasses = 'h-3 w-3 mr-1';\n const label = this.precedingSessionsAreVisible\n ? this.bindings.i18n.t('hide-preceding-sessions')\n : this.bindings.i18n.t('show-preceding-sessions');\n const icon = this.precedingSessionsAreVisible ? ArrowUpIcon : ArrowDownIcon;\n\n return (\n <div class=\"flex justify-center p-2\">\n <Button\n style=\"text-primary\"\n part=\"toggle-preceding-sessions\"\n class={btnClasses}\n ariaLabel={label}\n onClick={this.togglePrecedingSessions.bind(this)}\n >\n <atomic-icon\n part=\"toggle-preceding-sessions-icon\"\n class={iconClasses}\n icon={icon}\n ></atomic-icon>\n <span class=\"truncate\">{label}</span>\n </Button>\n </div>\n );\n }\n\n private renderFollowingSessionsSection() {\n if (!this.userActionsState.timeline?.followingSessions?.length) {\n return null;\n }\n return [\n this.renderToggleFollowingSessionsButton(),\n <div class=\"separator mx-1 rounded\"></div>,\n this.followingSessionsAreVisible\n ? this.renderSessions(\n this.userActionsState.timeline?.followingSessions,\n () => <div class=\"separator mx-1 mt-4 rounded\"></div>,\n 'following-session'\n )\n : null,\n ];\n }\n\n private renderPrecedingSessionsSection() {\n if (!this.userActionsState.timeline?.precedingSessions?.length) {\n return null;\n }\n return [\n <div class=\"separator mx-1 mt-4 rounded\"></div>,\n this.precedingSessionsAreVisible\n ? this.renderSessions(\n this.userActionsState.timeline?.precedingSessions,\n () => <div class=\"separator mx-1 mt-4 rounded\"></div>,\n 'preceding-session'\n )\n : null,\n this.renderTogglePrecedingSessionsButton(),\n ];\n }\n\n private renderTimeline() {\n return (\n <div>\n {this.renderFollowingSessionsSection()}\n <div class=\"mt-4\">\n <atomic-insight-user-actions-session\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n startTimestamp={this.userActionsState.timeline?.session?.start!}\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n userActions={this.userActionsState?.timeline?.session?.actions!}\n data-testid=\"active-session\"\n ></atomic-insight-user-actions-session>\n </div>\n {this.renderPrecedingSessionsSection()}\n </div>\n );\n }\n\n private renderNoUserActionsScreen() {\n return (\n <div class=\"my-6 py-3\" data-testid=\"user-actions-error\">\n <NoItemsContainer>\n <MagnifyingGlass />\n <div class=\"my-2 max-w-full text-center text-2xl font-light\">\n {this.bindings.i18n.t('no-user-actions-available')}\n </div>\n <div class=\"text-neutral-dark my-2 text-center text-lg\">\n {this.bindings.i18n.t('no-user-actions-associated-with-params')}\n </div>\n </NoItemsContainer>\n </div>\n );\n }\n\n render() {\n const areUserActionsAvailable = this.userActionsState.timeline?.session;\n const hasError = this.userActionsState.error;\n\n if (areUserActionsAvailable && !hasError) {\n return this.renderTimeline();\n }\n return this.renderNoUserActionsScreen();\n }\n}\n"],"version":3}
@@ -111,14 +111,14 @@ const ensureSameResultIsNotOverwritten = (documentWriter, uniqueIdentifier) => {
111
111
  const warnAboutLimitedUsageQuickview = (logger) => {
112
112
  logger?.warn('Quickview initialized in restricted mode due to incompatible sandboxing environment. Keywords hit navigation will be disabled.');
113
113
  };
114
- const QuickviewIframe = ({ title, onSetIframeRef, uniqueIdentifier, content, sandbox, src, logger }) => {
114
+ const QuickviewIframe = ({ onSetIframeRef, uniqueIdentifier, content, sandbox, src, logger }) => {
115
115
  // When a document is written with document.open/document.write/document.close
116
116
  // it is not synchronous and the content of the iframe is only available to be queried at the end of the current call stack.
117
117
  // This add a "wait" (setTimeout 0) before calling the `onSetIframeRef` from the parent modal quickview
118
118
  const waitForIframeContentToBeWritten = () => {
119
119
  return new Promise((resolve) => setTimeout(resolve));
120
120
  };
121
- return (h("iframe", { title: title, src: "about:blank", class: "h-full w-full", sandbox: sandbox, ref: async (el) => {
121
+ return (h("iframe", { src: "about:blank", class: "h-full w-full", sandbox: sandbox, ref: async (el) => {
122
122
  const iframeRef = el;
123
123
  if (!uniqueIdentifier || !content) {
124
124
  return;
@@ -485,7 +485,7 @@ const AtomicQuickviewModal = class {
485
485
  return (h("div", { slot: "header", class: "flex w-full items-center justify-between" }, headerContent));
486
486
  }
487
487
  renderBody() {
488
- return (h("div", { slot: "body", class: "grid h-full grid-cols-[min-content_auto]" }, h("div", { class: "h-full overflow-y-auto", style: { backgroundColor: 'var(--atomic-neutral-light)' } }, h(QuickviewSidebar, { words: this.words, i18n: this.bindings.i18n, highlightKeywords: this.highlightKeywords, onHighlightKeywords: (highlight) => (this.highlightKeywords = highlight), minimized: this.minimizeSidebar, onMinimize: (minimize) => (this.minimizeSidebar = minimize) })), h("div", { class: "relative overflow-auto" }, h(QuickviewIframe, { title: this.result?.title ?? this.bindings.i18n.t('preview-modal-title'), logger: this.logger, src: this.quickviewSrc, sandbox: this.sandbox, uniqueIdentifier: this.quickviewUniqueIdentifier, content: this.content, onSetIframeRef: async (ref) => {
488
+ return (h("div", { slot: "body", class: "grid h-full grid-cols-[min-content_auto]" }, h("div", { class: "h-full overflow-y-auto", style: { backgroundColor: 'var(--atomic-neutral-light)' } }, h(QuickviewSidebar, { words: this.words, i18n: this.bindings.i18n, highlightKeywords: this.highlightKeywords, onHighlightKeywords: (highlight) => (this.highlightKeywords = highlight), minimized: this.minimizeSidebar, onMinimize: (minimize) => (this.minimizeSidebar = minimize) })), h("div", { class: "relative overflow-auto" }, h(QuickviewIframe, { logger: this.logger, src: this.quickviewSrc, sandbox: this.sandbox, uniqueIdentifier: this.quickviewUniqueIdentifier, content: this.content, onSetIframeRef: async (ref) => {
489
489
  this.iframeRef = ref;
490
490
  this.words = getWordsHighlights(this.termsToHighlight, this.iframeRef);
491
491
  this.handleHighlightsScripts();
@@ -586,7 +586,7 @@ const AtomicQuickviewModal = class {
586
586
  });
587
587
  }
588
588
  render() {
589
- return (h("atomic-modal", { key: 'add7af86888f080b12fa1b5d117ce4745668df00', fullscreen: this.bindings.store.isMobile(), class: 'atomic-quickview-modal', isOpen: this.isOpen, close: () => this.onClose(), exportparts: ATOMIC_MODAL_EXPORT_PARTS }, this.renderHeader(), this.renderBody(), this.renderFooter()));
589
+ return (h("atomic-modal", { key: '21dbc83d06fcb1b393d13f7b2d116f68732c77d7', fullscreen: this.bindings.store.isMobile(), class: 'atomic-quickview-modal', isOpen: this.isOpen, close: () => this.onClose(), exportparts: ATOMIC_MODAL_EXPORT_PARTS }, this.renderHeader(), this.renderBody(), this.renderFooter()));
590
590
  }
591
591
  static get watchers() { return {
592
592
  "highlightKeywords": ["watchHighlightKeywords"]
@@ -1 +1 @@
1
- {"file":"atomic-quickview-modal.entry.js","mappings":"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","names":["ArrowDown"],"sources":["src/components/search/result-template-components/atomic-quickview-sidebar/atomic-quickview-sidebar.tsx","src/components/search/result-template-components/quickview-iframe/quickview-iframe.tsx","src/components/search/result-template-components/quickview-preview-bar/quickview-preview-bar.ts","src/utils/color-utils.ts","src/components/search/result-template-components/quickview-word-highlight/quickview-word-highlight.tsx","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.pcss?tag=atomic-quickview-modal&encapsulation=shadow","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.tsx"],"sourcesContent":["import {Fragment, FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport Add from '../../../../images/add.svg';\nimport ArrowDown from '../../../../images/arrow-bottom-rounded.svg';\nimport ArrowUp from '../../../../images/arrow-top-rounded.svg';\nimport MinimizeIcon from '../../../../images/menu.svg';\nimport Remove from '../../../../images/remove.svg';\nimport {IconButton} from '../../../common/iconButton';\nimport {StencilCheckbox} from '../../../common/stencil-checkbox';\nimport {FieldsetGroup} from '../../../common/stencil-fieldset-group';\nimport type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nconst identifierKeywordsSection = 'coveo-quickview-sidebar-keywords';\n\nexport interface QuickviewSidebarProps {\n words: Record<string, QuickviewWordHighlight>;\n i18n: i18n;\n highlightKeywords: HighlightKeywords;\n onHighlightKeywords: (highlight: HighlightKeywords) => void;\n minimized: boolean;\n onMinimize: (minimize: boolean) => void;\n}\n\nexport const QuickviewSidebar: FunctionalComponent<QuickviewSidebarProps> = (\n props\n) => {\n const {words, minimized} = props;\n const numberOfWords = Object.values(words).length;\n\n if (numberOfWords === 0) {\n return;\n }\n\n const minimizeButton = (\n <MinimizeButton {...props} wordsLength={numberOfWords} />\n );\n\n return (\n <div class=\"border-neutral h-full border-r p-4\">\n {minimized && minimizeButton}\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center\">\n <HighlightKeywordsCheckbox {...props} />\n </div>\n {!minimized && <div>{minimizeButton}</div>}\n </div>\n\n {!minimized && <Keywords {...props} words={words} />}\n </div>\n );\n};\n\nconst MinimizeButton: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'minimized' | 'onMinimize' | 'highlightKeywords'\n > & {wordsLength: number}\n> = ({i18n, minimized, onMinimize, highlightKeywords, wordsLength}) => (\n <IconButton\n partPrefix=\"sidebar-minimize\"\n icon={MinimizeIcon}\n style=\"text-transparent\"\n title={i18n.t('quickview-toggle-navigation')}\n ariaLabel={i18n.t('quickview-toggle-navigation')}\n onClick={() => onMinimize(!minimized)}\n badge={\n highlightKeywords && minimized ? <slot>{wordsLength}</slot> : undefined\n }\n class={`w-fit ${minimized ? '' : 'ml-auto'}`}\n ariaExpanded={(!minimized).toString()}\n ariaControls={identifierKeywordsSection}\n />\n);\n\nconst HighlightKeywordsCheckbox: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'highlightKeywords' | 'onHighlightKeywords' | 'minimized'\n >\n> = ({i18n, highlightKeywords, onHighlightKeywords, minimized}) => (\n <Fragment>\n <StencilCheckbox\n text={i18n.t('keywords-highlight')}\n class=\"mr-2\"\n id=\"atomic-quickview-sidebar-highlight-keywords\"\n checked={!highlightKeywords.highlightNone}\n onToggle={(checked) =>\n onHighlightKeywords({\n ...highlightKeywords,\n highlightNone: !checked,\n })\n }\n ></StencilCheckbox>\n {!minimized && (\n <label\n class=\"cursor-pointer font-bold whitespace-nowrap\"\n htmlFor=\"atomic-quickview-sidebar-highlight-keywords\"\n >\n {i18n.t('keywords-highlight')}\n </label>\n )}\n </Fragment>\n);\n\nconst Keywords: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'onHighlightKeywords' | 'highlightKeywords'\n > & {\n words: Record<string, QuickviewWordHighlight>;\n }\n> = ({words, i18n, highlightKeywords, onHighlightKeywords}) => {\n return (\n <div id={identifierKeywordsSection}>\n {Object.values(words).map((keyword) => {\n const wordIsEnabled =\n !highlightKeywords.highlightNone &&\n (highlightKeywords.keywords[keyword.text] === undefined ||\n highlightKeywords.keywords[keyword.text].enabled === true);\n\n return (\n <div\n key={keyword.text}\n class=\"my-4 flex w-100 items-center justify-between gap-x-2\"\n >\n <div\n class={`bg-background border-neutral flex grow items-center overflow-x-auto rounded-lg border ${\n !wordIsEnabled ? 'pointer-events-none opacity-50' : ''\n }`}\n >\n <div\n class=\"flex grow items-center border-r p-4\"\n aria-hidden=\"true\"\n >\n <div\n class=\"mr-2 h-5 w-5 flex-none\"\n style={{backgroundColor: keyword.color}}\n ></div>\n <div class=\"mr-2 grow whitespace-nowrap\">{keyword.text}</div>\n <div class=\"flex-none\">\n (\n {new Intl.NumberFormat(i18n.language, {\n notation: 'compact',\n }).format(keyword.occurrences)}\n )\n </div>\n </div>\n <FieldsetGroup\n label={i18n.t('quickview-navigate-keywords', {\n occurrences: keyword.occurrences,\n keyword: keyword.text,\n })}\n >\n <div class=\"flex px-2\">\n <IconButton\n partPrefix=\"sidebar-next\"\n icon={ArrowDown}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('next')}\n title={i18n.t('next')}\n onClick={() => keyword.navigateForward()}\n />\n <IconButton\n partPrefix=\"sidebar-previous\"\n icon={ArrowUp}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('previous')}\n title={i18n.t('previous')}\n onClick={() => keyword.navigateBackward()}\n />\n </div>\n </FieldsetGroup>\n </div>\n <IconButton\n partPrefix=\"sidebar-remove-word\"\n class={`${\n highlightKeywords.highlightNone\n ? 'pointer-events-none opacity-50'\n : ''\n }`}\n tabIndex={highlightKeywords.highlightNone ? '-1' : '0'}\n ariaPressed={(!wordIsEnabled).toString()}\n style=\"text-transparent\"\n icon={wordIsEnabled ? Remove : Add}\n ariaLabel={i18n.t('quickview-remove-word')}\n onClick={() => {\n onHighlightKeywords({\n ...highlightKeywords,\n keywords: {\n ...highlightKeywords.keywords,\n [keyword.text]: {\n enabled: !wordIsEnabled,\n indexIdentifier: keyword.indexIdentifier,\n },\n },\n });\n }}\n />\n </div>\n );\n })}\n </div>\n );\n};\n","import {SearchEngine} from '@coveo/headless';\nimport {FunctionalComponent, h} from '@stencil/core';\n\nconst documentIdentifierInIframe = 'CoveoDocIdentifier';\n\nconst writeDocument = (documentWriter: Document, content: string) => {\n documentWriter.open();\n documentWriter.write(content);\n documentWriter.close();\n if (documentWriter.scrollingElement) {\n documentWriter.scrollingElement.scrollTop = 0;\n }\n};\n\nconst currentResultAlreadyWrittenToDocument = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const currentDocIdentifier = documentWriter.getElementById(\n documentIdentifierInIframe\n );\n\n return (\n currentDocIdentifier &&\n currentDocIdentifier.textContent === uniqueIdentifier\n );\n};\n\nconst ensureSameResultIsNotOverwritten = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const docIdentifier = documentWriter.createElement('div');\n docIdentifier.style.display = 'none';\n docIdentifier.setAttribute('aria-hidden', 'true');\n docIdentifier.id = documentIdentifierInIframe;\n docIdentifier.textContent = uniqueIdentifier;\n documentWriter.body.appendChild(docIdentifier);\n};\n\nconst warnAboutLimitedUsageQuickview = (logger?: SearchEngine['logger']) => {\n logger?.warn(\n 'Quickview initialized in restricted mode due to incompatible sandboxing environment. Keywords hit navigation will be disabled.'\n );\n};\n\nexport const QuickviewIframe: FunctionalComponent<{\n title: string;\n content?: string;\n onSetIframeRef: (ref: HTMLIFrameElement) => void;\n uniqueIdentifier?: string;\n sandbox?: string;\n src?: string;\n logger?: SearchEngine['logger'];\n}> = ({title, onSetIframeRef, uniqueIdentifier, content, sandbox, src, logger}) => {\n // When a document is written with document.open/document.write/document.close\n // it is not synchronous and the content of the iframe is only available to be queried at the end of the current call stack.\n // This add a \"wait\" (setTimeout 0) before calling the `onSetIframeRef` from the parent modal quickview\n const waitForIframeContentToBeWritten = () => {\n return new Promise((resolve) => setTimeout(resolve));\n };\n\n return (\n <iframe\n title={title}\n src=\"about:blank\"\n class=\"h-full w-full\"\n sandbox={sandbox}\n ref={async (el) => {\n const iframeRef = el as HTMLIFrameElement;\n\n if (!uniqueIdentifier || !content) {\n return;\n }\n\n const documentWriter = iframeRef.contentDocument;\n if (!documentWriter) {\n if (src) {\n warnAboutLimitedUsageQuickview(logger);\n iframeRef.src = src;\n }\n\n return;\n }\n if (\n currentResultAlreadyWrittenToDocument(\n documentWriter,\n uniqueIdentifier\n )\n ) {\n return;\n }\n\n writeDocument(documentWriter, content);\n ensureSameResultIsNotOverwritten(documentWriter, uniqueIdentifier);\n\n await waitForIframeContentToBeWritten();\n onSetIframeRef(iframeRef);\n }}\n ></iframe>\n );\n};\n","import type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport type {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nconst buildPreviewBar = (documentWriter: Document) => {\n const previewBarId = 'CoveoPreviewBar';\n const bar =\n documentWriter.getElementById(previewBarId) ||\n documentWriter.createElement('div');\n\n bar.id = previewBarId;\n bar.innerHTML = '';\n bar.style.position = 'fixed';\n bar.style.top = '0';\n bar.style.right = '0';\n bar.style.width = '15px';\n bar.style.height = '100%';\n bar.setAttribute('aria-hidden', 'true');\n return bar;\n};\n\nconst buildPreviewUnit = (\n documentWriter: Document,\n word: QuickviewWordHighlight,\n wordElement: HTMLElement,\n docHeight: number,\n highlightKeywords: HighlightKeywords\n) => {\n const previewUnit = documentWriter.createElement('div');\n if (highlightKeywords.keywords[word.text]?.enabled === false) {\n previewUnit.style.display = 'none';\n return previewUnit;\n }\n\n const elementPosition = wordElement.getBoundingClientRect().top;\n\n previewUnit.style.position = 'absolute';\n previewUnit.style.top = `${(elementPosition / docHeight) * 100}%`;\n previewUnit.style.width = '100%';\n previewUnit.style.height = '1px';\n previewUnit.style.border = `1px solid ${word.previewBorderColor}`;\n previewUnit.style.backgroundColor = word.color;\n return previewUnit;\n};\n\nexport const buildQuickviewPreviewBar = (\n words: Record<string, QuickviewWordHighlight>,\n highlightKeywords: HighlightKeywords,\n iframe?: HTMLIFrameElement\n) => {\n if (!iframe) {\n return;\n }\n const documentWriter = iframe.contentDocument;\n if (!documentWriter) {\n return;\n }\n const bar = buildPreviewBar(documentWriter);\n if (highlightKeywords.highlightNone) {\n bar.remove();\n return;\n }\n const docHeight = documentWriter.body.scrollHeight;\n\n Object.values(words).forEach((word) => {\n word.elements.forEach((wordElement) => {\n const previewUnit = buildPreviewUnit(\n documentWriter,\n word,\n wordElement,\n docHeight,\n highlightKeywords\n );\n\n bar.appendChild(previewUnit);\n });\n });\n documentWriter.body.appendChild(bar);\n};\n","export const rgbToHsv = (r: number, g: number, b: number) => {\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n let h: number;\n const v = max;\n\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n default:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {h, s, v};\n};\n\nexport const hsvToRgb = (h: number, s: number, v: number) => {\n let r: number, g: number, b: number;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return {\n r: Math.round(r),\n g: Math.round(g),\n b: Math.round(b),\n };\n};\n","import {TermsToHighlight} from '@coveo/headless';\nimport {hsvToRgb, rgbToHsv} from '../../../../utils/color-utils';\n\nexport const HIGHLIGHT_PREFIX = 'CoveoHighlight';\nexport class QuickviewWordHighlight {\n public text: string;\n public indexIdentifier: string;\n public occurrences = 0;\n public color: string;\n public focusedColor: string;\n public previewBorderColor: string;\n public elements: HTMLElement[] = [];\n\n private currentNavigationPosition = -1;\n\n constructor(\n private stemmingInfoFromIndex: TermsToHighlight,\n keywordElementInIframe: HTMLElement\n ) {\n const parsed = this.parseKeywordIdentifier(keywordElementInIframe);\n if (!parsed) {\n throw 'Invalid keyword identifier for quickview';\n }\n\n this.text = this.getText(keywordElementInIframe);\n this.indexIdentifier = `${parsed.keywordIdentifier}`;\n this.color = keywordElementInIframe.style.backgroundColor;\n this.focusedColor = this.computeInvertedColor();\n this.previewBorderColor = this.computeSaturatedColor();\n\n this.addElement(keywordElementInIframe);\n }\n\n public addElement(keywordElementInIframe: HTMLElement) {\n this.occurrences++;\n this.elements.push(keywordElementInIframe);\n }\n\n public navigateForward() {\n this.currentNavigationPosition++;\n if (this.currentNavigationPosition >= this.elements.length) {\n this.currentNavigationPosition = 0;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n public navigateBackward() {\n this.currentNavigationPosition--;\n if (this.currentNavigationPosition < 0) {\n this.currentNavigationPosition = this.elements.length - 1;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n private isTaggedWord(element: HTMLElement) {\n return element.nodeName.toLowerCase() === 'coveotaggedword';\n }\n\n private highlightNavigation() {\n const currentElement = this.elements[this.currentNavigationPosition];\n const otherElements = this.elements.filter((el) => el !== currentElement);\n currentElement.style.color = this.color;\n currentElement.style.backgroundColor = this.focusedColor;\n otherElements.forEach((element) => {\n element.style.color = '';\n element.style.backgroundColor = this.color;\n });\n }\n\n private putElementIntoView() {\n const element = this.elements[this.currentNavigationPosition];\n element.scrollIntoView();\n }\n\n private getText(element: HTMLElement) {\n const innerTextOfHTMLElement = this.getHighlightedInnerText(element);\n return this.resolveOriginalTerm(innerTextOfHTMLElement).trim();\n }\n\n private resolveOriginalTerm(highlight: string): string {\n // First try to find either an exact match between the highlight and the original non-stemmed keyword.\n // Otherwise try to find a match between the highlight and the stemming keyword expansions\n // If nothing is found (which should not normally happen...), simply return the highlight keyword as is.\n\n const found = Object.keys(this.stemmingInfoFromIndex).find(\n (originalTerm) => {\n const originalTermMatch =\n originalTerm.toLowerCase() === highlight.toLowerCase();\n if (originalTermMatch) {\n return true;\n }\n const stemmingExpansions = this.stemmingInfoFromIndex[originalTerm];\n if (!stemmingExpansions) {\n return false;\n }\n\n const stemmingExpansionMatch = stemmingExpansions.find(\n (stemmingExpansion) =>\n stemmingExpansion.toLowerCase() === highlight.toLowerCase()\n );\n return stemmingExpansionMatch;\n }\n );\n return found || highlight;\n }\n\n private getHighlightedInnerText(element: HTMLElement): string {\n if (!this.isTaggedWord(element)) {\n return this.getTextOfHTMLElement(element);\n }\n\n const children = Array.from(element.children) as HTMLElement[];\n if (children.length >= 1) {\n return this.getTextOfHTMLElement(children[0]);\n }\n\n return '';\n }\n\n private parseKeywordIdentifier(element: HTMLElement) {\n const parts = element.id\n .substring(HIGHLIGHT_PREFIX.length + 1)\n .match(/^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/);\n\n if (!parts || parts.length <= 3) {\n return null;\n }\n\n return {\n keywordIdentifier: parts[1],\n keywordTermPart: parseInt(parts[3], 10),\n };\n }\n\n private getTextOfHTMLElement(el: HTMLElement) {\n return el.innerText || el.textContent || '';\n }\n\n private computeInvertedColor() {\n const {r, g, b} = this.extractRgb();\n return `rgb(${255 - r}, ${255 - g}, ${255 - b})`;\n }\n\n private computeSaturatedColor() {\n const {r, g, b} = this.extractRgb();\n const {h, s, v} = rgbToHsv(r, g, b);\n let newSaturation = s * 2;\n if (newSaturation > 1) {\n newSaturation = 1;\n }\n const {\n r: rSaturated,\n g: gSaturated,\n b: bSaturated,\n } = hsvToRgb(h, newSaturation, v);\n return `rgb(${rSaturated}, ${gSaturated}, ${bSaturated})`;\n }\n\n private extractRgb() {\n const rgbExtracted = this.color.match(/\\d+/g);\n if (!rgbExtracted) {\n return {r: 255, g: 255, b: 255};\n }\n\n return {\n r: parseInt(rgbExtracted[0], 10),\n g: parseInt(rgbExtracted[1], 10),\n b: parseInt(rgbExtracted[2], 10),\n };\n }\n}\n\nexport const getWordsHighlights = (\n stemmingInfoFromIndex: TermsToHighlight,\n iframe?: HTMLIFrameElement\n) => {\n const wordsHighlights: Record<string, QuickviewWordHighlight> = {};\n if (!iframe) {\n return wordsHighlights;\n }\n\n iframe.contentDocument?.body\n .querySelectorAll(`[id^=\"${HIGHLIGHT_PREFIX}\"]`)\n .forEach((el) => {\n const wordHTMLElementToHighlight = el as HTMLElement;\n\n const wordHighlight = new QuickviewWordHighlight(\n stemmingInfoFromIndex,\n wordHTMLElementToHighlight\n );\n\n if (!wordHighlight.text) {\n return;\n }\n\n const alreadyScannedKeyword =\n wordsHighlights[wordHighlight.indexIdentifier];\n\n if (alreadyScannedKeyword) {\n alreadyScannedKeyword.addElement(wordHTMLElementToHighlight);\n } else {\n wordsHighlights[wordHighlight.indexIdentifier] = wordHighlight;\n }\n });\n\n return wordsHighlights;\n};\n","@import '../../../../global/global.pcss';\n@import '../../../../utils/tailwind-utilities/link-style.tw.css';\n\n.atomic-quickview-modal {\n &::part(backdrop) {\n grid-template-columns: 1fr max(80vw, 30rem) 1fr;\n }\n &::part(body),\n &::part(header),\n &::part(footer) {\n @apply max-w-full;\n }\n\n &::part(footer) {\n @apply flex justify-center;\n }\n\n &::part(body-wrapper) {\n @apply h-full overflow-hidden p-0;\n }\n\n &::part(body) {\n @apply h-full;\n }\n\n &::part(backdrop) {\n grid-template-rows: 1fr 100% 3fr;\n }\n\n &::part(header-wrapper) {\n @apply bg-neutral-light;\n }\n\n a {\n @apply link-style;\n }\n}\n","import {\n buildInteractiveResult,\n Result,\n InteractiveResult,\n TermsToHighlight,\n} from '@coveo/headless';\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Watch,\n Method,\n VNode,\n Fragment,\n} from '@stencil/core';\nimport CloseIcon from '../../../../images/close.svg';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ATOMIC_MODAL_EXPORT_PARTS} from '../../../common/atomic-modal/export-parts';\nimport {IconButton} from '../../../common/iconButton';\nimport {LinkWithItemAnalytics} from '../../../common/item-link/stencil-item-link';\nimport {Button} from '../../../common/stencil-button';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\nimport {QuickviewSidebar} from '../atomic-quickview-sidebar/atomic-quickview-sidebar';\nimport {QuickviewIframe} from '../quickview-iframe/quickview-iframe';\nimport {buildQuickviewPreviewBar} from '../quickview-preview-bar/quickview-preview-bar';\nimport {\n getWordsHighlights,\n HIGHLIGHT_PREFIX,\n QuickviewWordHighlight,\n} from '../quickview-word-highlight/quickview-word-highlight';\n\nexport interface HighlightKeywords {\n highlightNone: boolean;\n keywords: {\n [text: string]: {\n indexIdentifier: string;\n enabled: boolean;\n };\n };\n}\n\n/**\n * The modal opened when clicking on a quickview button.\n * Do not use this component directly; use `atomic-quickview` instead.\n *\n * @part backdrop - The transparent backdrop hiding the content behind the modal.\n * @part container - The modal's outermost container with the outline and background.\n * @part header-wrapper - The wrapper around the header.\n * @part header - The header at the top of the modal.\n * @part header-ruler - The horizontal ruler underneath the header.\n * @part body-wrapper - The wrapper around the body.\n * @part body - The body of the modal, between the header and the footer.\n * @part footer-wrapper - The wrapper with a shadow or background color around the footer.\n * @part footer - The footer at the bottom of the modal.\n * @part quickview-modal-header-icon - The close icon of the modal.\n * @part quickview-modal-header-title - The title of the modal.\n */\n@Component({\n tag: 'atomic-quickview-modal',\n styleUrl: 'atomic-quickview-modal.pcss',\n shadow: true,\n})\nexport class AtomicQuickviewModal implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n @State() public error!: Error;\n\n @State() private highlightKeywords: HighlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n @Watch('highlightKeywords')\n watchHighlightKeywords() {\n this.handleHighlightsScripts();\n }\n\n @Event({eventName: 'atomic/quickview/next'}) nextQuickview?: EventEmitter;\n @Event({eventName: 'atomic/quickview/previous'})\n previousQuickview?: EventEmitter;\n\n @State() private minimizeSidebar = false;\n @State() private words: Record<string, QuickviewWordHighlight> = {};\n private iframeRef?: HTMLIFrameElement;\n\n @Prop({mutable: true, reflect: false}) content?: string;\n @Prop({mutable: true, reflect: false}) result?: Result;\n @Prop() current?: number;\n @Prop() total?: number;\n @Prop() sandbox?: string;\n @Prop() modalCloseCallback?: () => void;\n\n private interactiveResult?: InteractiveResult;\n\n public componentWillLoad(): void {\n this.minimizeSidebar = this.bindings.store.isMobile();\n }\n\n @Method()\n public async reset() {\n this.highlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n this.minimizeSidebar = false;\n this.iframeRef = undefined;\n this.content = undefined;\n this.result = undefined;\n this.interactiveResult = undefined;\n }\n\n private renderHeader() {\n let headerContent: VNode | null = null;\n if (this.result) {\n this.interactiveResult = buildInteractiveResult(this.bindings.engine, {\n options: {result: this.result},\n });\n headerContent = (\n <Fragment>\n <LinkWithItemAnalytics\n href={this.result?.clickUri}\n onSelect={() => this.interactiveResult?.select()}\n onBeginDelayedSelect={() =>\n this.interactiveResult?.beginDelayedSelect()\n }\n onCancelPendingSelect={() =>\n this.interactiveResult?.cancelPendingSelect()\n }\n className=\"truncate\"\n part=\"quickview-modal-header-title\"\n >\n {this.result.title}\n </LinkWithItemAnalytics>\n <IconButton\n partPrefix=\"quickview-modal-header\"\n icon={CloseIcon}\n onClick={() => this.onClose()}\n ariaLabel={this.bindings.i18n.t('close')}\n style=\"text-transparent\"\n title={this.bindings.i18n.t('close')}\n />\n </Fragment>\n );\n }\n return (\n <div slot=\"header\" class=\"flex w-full items-center justify-between\">\n {headerContent}\n </div>\n );\n }\n\n private renderBody() {\n return (\n <div slot=\"body\" class=\"grid h-full grid-cols-[min-content_auto]\">\n <div\n class=\"h-full overflow-y-auto\"\n style={{backgroundColor: 'var(--atomic-neutral-light)'}}\n >\n <QuickviewSidebar\n words={this.words}\n i18n={this.bindings.i18n}\n highlightKeywords={this.highlightKeywords}\n onHighlightKeywords={(highlight) =>\n (this.highlightKeywords = highlight)\n }\n minimized={this.minimizeSidebar}\n onMinimize={(minimize) => (this.minimizeSidebar = minimize)}\n />\n </div>\n <div class=\"relative overflow-auto\">\n <QuickviewIframe\n title={this.result?.title ?? this.bindings.i18n.t('preview-modal-title')} \n logger={this.logger}\n src={this.quickviewSrc}\n sandbox={this.sandbox}\n uniqueIdentifier={this.quickviewUniqueIdentifier}\n content={this.content}\n onSetIframeRef={async (ref) => {\n this.iframeRef = ref;\n this.words = getWordsHighlights(\n this.termsToHighlight,\n this.iframeRef\n );\n this.handleHighlightsScripts();\n }}\n />\n {buildQuickviewPreviewBar(\n this.words,\n this.highlightKeywords,\n this.iframeRef\n )}\n </div>\n </div>\n );\n }\n\n private renderFooter() {\n return (\n <div slot=\"footer\" class=\"flex items-center gap-2\">\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.previousQuickview?.emit()}\n disabled={this.current === 1}\n text={this.bindings.i18n.t('quickview-previous')}\n ></Button>\n <p class=\"text-center\">\n {this.bindings.i18n.t('showing-results-of', {\n first: this.current,\n total: this.total,\n })}\n </p>\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.nextQuickview?.emit()}\n disabled={this.current === this.total}\n text={this.bindings.i18n.t('quickview-next')}\n ></Button>\n </div>\n );\n }\n\n private onClose() {\n this.content = undefined;\n this.result = undefined;\n this.modalCloseCallback && this.modalCloseCallback();\n }\n\n private get isOpen() {\n return !!this.content && !!this.result;\n }\n\n private get highlightScriptId() {\n return 'CoveoDisableHighlightStyle';\n }\n\n private get logger() {\n return this.bindings.engine.logger;\n }\n\n private get quickviewSrc() {\n return this.bindings.engine.state.resultPreview?.contentURL;\n }\n\n private enableHighlights() {\n this.removeDisableHighlightScript();\n }\n\n private enableHighlightsSpecificKeyword(identifier: string) {\n this.removeDisableHighlightScript(identifier);\n }\n\n private disableHighlights() {\n this.createDisableHighlightScript();\n }\n\n private disableHighlightsSpecificKeyword(identifier: string) {\n this.createDisableHighlightScript(identifier);\n }\n\n private removeDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n doc\n .getElementById(\n `${this.highlightScriptId}${identifier ? `:${identifier}` : ''}`\n )\n ?.remove();\n }\n\n private createDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n\n const head = doc.head;\n const scriptId = `${this.highlightScriptId}${\n identifier ? `:${identifier}` : ''\n }`;\n const style =\n doc.getElementById(scriptId) || this.bindings.createStyleElement();\n style.setAttribute('id', scriptId);\n head.appendChild(style);\n style.appendChild(\n doc.createTextNode(`[id^=\"${HIGHLIGHT_PREFIX}${\n identifier ? `:${identifier}` : ''\n }\"] {\n background-color: inherit !important;\n color: inherit !important;\n }`)\n );\n }\n\n private get termsToHighlight() {\n const flatPhrasesToHighlight: TermsToHighlight = {};\n\n const phrasesToHighlight =\n this.bindings.engine.state.search.response.phrasesToHighlight;\n\n Object.entries(phrasesToHighlight).forEach(([phrase, keywords]) => {\n flatPhrasesToHighlight[phrase] = Object.entries(keywords).flatMap(\n ([keywordEntry, keywordStemming]) => {\n return [keywordEntry, ...keywordStemming];\n }\n );\n });\n\n return {\n ...this.bindings.engine.state.search.response.termsToHighlight,\n ...flatPhrasesToHighlight,\n };\n }\n\n private get requestId() {\n return this.bindings.engine.state.search.requestId;\n }\n\n private get quickviewUniqueIdentifier() {\n return this.result?.uniqueId + this.requestId;\n }\n\n private handleHighlightsScripts() {\n if (!this.highlightKeywords.highlightNone) {\n this.enableHighlights();\n } else {\n this.disableHighlights();\n }\n Object.values(this.highlightKeywords.keywords).forEach((word) => {\n if (word.enabled) {\n this.enableHighlightsSpecificKeyword(word.indexIdentifier);\n } else {\n this.disableHighlightsSpecificKeyword(word.indexIdentifier);\n }\n });\n }\n\n public render() {\n return (\n <atomic-modal\n fullscreen={this.bindings.store.isMobile()}\n class={'atomic-quickview-modal'}\n isOpen={this.isOpen}\n close={() => this.onClose()}\n exportparts={ATOMIC_MODAL_EXPORT_PARTS}\n >\n {this.renderHeader()}\n {this.renderBody()}\n {this.renderFooter()}\n </atomic-modal>\n );\n }\n}\n"],"version":3}
1
+ {"file":"atomic-quickview-modal.entry.js","mappings":"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","names":["ArrowDown"],"sources":["src/components/search/result-template-components/atomic-quickview-sidebar/atomic-quickview-sidebar.tsx","src/components/search/result-template-components/quickview-iframe/quickview-iframe.tsx","src/components/search/result-template-components/quickview-preview-bar/quickview-preview-bar.ts","src/utils/color-utils.ts","src/components/search/result-template-components/quickview-word-highlight/quickview-word-highlight.tsx","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.pcss?tag=atomic-quickview-modal&encapsulation=shadow","src/components/search/result-template-components/atomic-quickview-modal/atomic-quickview-modal.tsx"],"sourcesContent":["import {Fragment, FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport Add from '../../../../images/add.svg';\nimport ArrowDown from '../../../../images/arrow-bottom-rounded.svg';\nimport ArrowUp from '../../../../images/arrow-top-rounded.svg';\nimport MinimizeIcon from '../../../../images/menu.svg';\nimport Remove from '../../../../images/remove.svg';\nimport {IconButton} from '../../../common/iconButton';\nimport {StencilCheckbox} from '../../../common/stencil-checkbox';\nimport {FieldsetGroup} from '../../../common/stencil-fieldset-group';\nimport type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nconst identifierKeywordsSection = 'coveo-quickview-sidebar-keywords';\n\nexport interface QuickviewSidebarProps {\n words: Record<string, QuickviewWordHighlight>;\n i18n: i18n;\n highlightKeywords: HighlightKeywords;\n onHighlightKeywords: (highlight: HighlightKeywords) => void;\n minimized: boolean;\n onMinimize: (minimize: boolean) => void;\n}\n\nexport const QuickviewSidebar: FunctionalComponent<QuickviewSidebarProps> = (\n props\n) => {\n const {words, minimized} = props;\n const numberOfWords = Object.values(words).length;\n\n if (numberOfWords === 0) {\n return;\n }\n\n const minimizeButton = (\n <MinimizeButton {...props} wordsLength={numberOfWords} />\n );\n\n return (\n <div class=\"border-neutral h-full border-r p-4\">\n {minimized && minimizeButton}\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center\">\n <HighlightKeywordsCheckbox {...props} />\n </div>\n {!minimized && <div>{minimizeButton}</div>}\n </div>\n\n {!minimized && <Keywords {...props} words={words} />}\n </div>\n );\n};\n\nconst MinimizeButton: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'minimized' | 'onMinimize' | 'highlightKeywords'\n > & {wordsLength: number}\n> = ({i18n, minimized, onMinimize, highlightKeywords, wordsLength}) => (\n <IconButton\n partPrefix=\"sidebar-minimize\"\n icon={MinimizeIcon}\n style=\"text-transparent\"\n title={i18n.t('quickview-toggle-navigation')}\n ariaLabel={i18n.t('quickview-toggle-navigation')}\n onClick={() => onMinimize(!minimized)}\n badge={\n highlightKeywords && minimized ? <slot>{wordsLength}</slot> : undefined\n }\n class={`w-fit ${minimized ? '' : 'ml-auto'}`}\n ariaExpanded={(!minimized).toString()}\n ariaControls={identifierKeywordsSection}\n />\n);\n\nconst HighlightKeywordsCheckbox: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'highlightKeywords' | 'onHighlightKeywords' | 'minimized'\n >\n> = ({i18n, highlightKeywords, onHighlightKeywords, minimized}) => (\n <Fragment>\n <StencilCheckbox\n text={i18n.t('keywords-highlight')}\n class=\"mr-2\"\n id=\"atomic-quickview-sidebar-highlight-keywords\"\n checked={!highlightKeywords.highlightNone}\n onToggle={(checked) =>\n onHighlightKeywords({\n ...highlightKeywords,\n highlightNone: !checked,\n })\n }\n ></StencilCheckbox>\n {!minimized && (\n <label\n class=\"cursor-pointer font-bold whitespace-nowrap\"\n htmlFor=\"atomic-quickview-sidebar-highlight-keywords\"\n >\n {i18n.t('keywords-highlight')}\n </label>\n )}\n </Fragment>\n);\n\nconst Keywords: FunctionalComponent<\n Pick<\n QuickviewSidebarProps,\n 'i18n' | 'onHighlightKeywords' | 'highlightKeywords'\n > & {\n words: Record<string, QuickviewWordHighlight>;\n }\n> = ({words, i18n, highlightKeywords, onHighlightKeywords}) => {\n return (\n <div id={identifierKeywordsSection}>\n {Object.values(words).map((keyword) => {\n const wordIsEnabled =\n !highlightKeywords.highlightNone &&\n (highlightKeywords.keywords[keyword.text] === undefined ||\n highlightKeywords.keywords[keyword.text].enabled === true);\n\n return (\n <div\n key={keyword.text}\n class=\"my-4 flex w-100 items-center justify-between gap-x-2\"\n >\n <div\n class={`bg-background border-neutral flex grow items-center overflow-x-auto rounded-lg border ${\n !wordIsEnabled ? 'pointer-events-none opacity-50' : ''\n }`}\n >\n <div\n class=\"flex grow items-center border-r p-4\"\n aria-hidden=\"true\"\n >\n <div\n class=\"mr-2 h-5 w-5 flex-none\"\n style={{backgroundColor: keyword.color}}\n ></div>\n <div class=\"mr-2 grow whitespace-nowrap\">{keyword.text}</div>\n <div class=\"flex-none\">\n (\n {new Intl.NumberFormat(i18n.language, {\n notation: 'compact',\n }).format(keyword.occurrences)}\n )\n </div>\n </div>\n <FieldsetGroup\n label={i18n.t('quickview-navigate-keywords', {\n occurrences: keyword.occurrences,\n keyword: keyword.text,\n })}\n >\n <div class=\"flex px-2\">\n <IconButton\n partPrefix=\"sidebar-next\"\n icon={ArrowDown}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('next')}\n title={i18n.t('next')}\n onClick={() => keyword.navigateForward()}\n />\n <IconButton\n partPrefix=\"sidebar-previous\"\n icon={ArrowUp}\n disabled={!wordIsEnabled}\n style=\"text-transparent\"\n class=\"border-0\"\n ariaLabel={i18n.t('previous')}\n title={i18n.t('previous')}\n onClick={() => keyword.navigateBackward()}\n />\n </div>\n </FieldsetGroup>\n </div>\n <IconButton\n partPrefix=\"sidebar-remove-word\"\n class={`${\n highlightKeywords.highlightNone\n ? 'pointer-events-none opacity-50'\n : ''\n }`}\n tabIndex={highlightKeywords.highlightNone ? '-1' : '0'}\n ariaPressed={(!wordIsEnabled).toString()}\n style=\"text-transparent\"\n icon={wordIsEnabled ? Remove : Add}\n ariaLabel={i18n.t('quickview-remove-word')}\n onClick={() => {\n onHighlightKeywords({\n ...highlightKeywords,\n keywords: {\n ...highlightKeywords.keywords,\n [keyword.text]: {\n enabled: !wordIsEnabled,\n indexIdentifier: keyword.indexIdentifier,\n },\n },\n });\n }}\n />\n </div>\n );\n })}\n </div>\n );\n};\n","import {SearchEngine} from '@coveo/headless';\nimport {FunctionalComponent, h} from '@stencil/core';\n\nconst documentIdentifierInIframe = 'CoveoDocIdentifier';\n\nconst writeDocument = (documentWriter: Document, content: string) => {\n documentWriter.open();\n documentWriter.write(content);\n documentWriter.close();\n if (documentWriter.scrollingElement) {\n documentWriter.scrollingElement.scrollTop = 0;\n }\n};\n\nconst currentResultAlreadyWrittenToDocument = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const currentDocIdentifier = documentWriter.getElementById(\n documentIdentifierInIframe\n );\n\n return (\n currentDocIdentifier &&\n currentDocIdentifier.textContent === uniqueIdentifier\n );\n};\n\nconst ensureSameResultIsNotOverwritten = (\n documentWriter: Document,\n uniqueIdentifier: string\n) => {\n const docIdentifier = documentWriter.createElement('div');\n docIdentifier.style.display = 'none';\n docIdentifier.setAttribute('aria-hidden', 'true');\n docIdentifier.id = documentIdentifierInIframe;\n docIdentifier.textContent = uniqueIdentifier;\n documentWriter.body.appendChild(docIdentifier);\n};\n\nconst warnAboutLimitedUsageQuickview = (logger?: SearchEngine['logger']) => {\n logger?.warn(\n 'Quickview initialized in restricted mode due to incompatible sandboxing environment. Keywords hit navigation will be disabled.'\n );\n};\n\nexport const QuickviewIframe: FunctionalComponent<{\n content?: string;\n onSetIframeRef: (ref: HTMLIFrameElement) => void;\n uniqueIdentifier?: string;\n sandbox?: string;\n src?: string;\n logger?: SearchEngine['logger'];\n}> = ({onSetIframeRef, uniqueIdentifier, content, sandbox, src, logger}) => {\n // When a document is written with document.open/document.write/document.close\n // it is not synchronous and the content of the iframe is only available to be queried at the end of the current call stack.\n // This add a \"wait\" (setTimeout 0) before calling the `onSetIframeRef` from the parent modal quickview\n const waitForIframeContentToBeWritten = () => {\n return new Promise((resolve) => setTimeout(resolve));\n };\n\n return (\n <iframe\n src=\"about:blank\"\n class=\"h-full w-full\"\n sandbox={sandbox}\n ref={async (el) => {\n const iframeRef = el as HTMLIFrameElement;\n\n if (!uniqueIdentifier || !content) {\n return;\n }\n\n const documentWriter = iframeRef.contentDocument;\n if (!documentWriter) {\n if (src) {\n warnAboutLimitedUsageQuickview(logger);\n iframeRef.src = src;\n }\n\n return;\n }\n if (\n currentResultAlreadyWrittenToDocument(\n documentWriter,\n uniqueIdentifier\n )\n ) {\n return;\n }\n\n writeDocument(documentWriter, content);\n ensureSameResultIsNotOverwritten(documentWriter, uniqueIdentifier);\n\n await waitForIframeContentToBeWritten();\n onSetIframeRef(iframeRef);\n }}\n ></iframe>\n );\n};\n","import type {HighlightKeywords} from '../atomic-quickview-modal/atomic-quickview-modal';\nimport type {QuickviewWordHighlight} from '../quickview-word-highlight/quickview-word-highlight';\n\nconst buildPreviewBar = (documentWriter: Document) => {\n const previewBarId = 'CoveoPreviewBar';\n const bar =\n documentWriter.getElementById(previewBarId) ||\n documentWriter.createElement('div');\n\n bar.id = previewBarId;\n bar.innerHTML = '';\n bar.style.position = 'fixed';\n bar.style.top = '0';\n bar.style.right = '0';\n bar.style.width = '15px';\n bar.style.height = '100%';\n bar.setAttribute('aria-hidden', 'true');\n return bar;\n};\n\nconst buildPreviewUnit = (\n documentWriter: Document,\n word: QuickviewWordHighlight,\n wordElement: HTMLElement,\n docHeight: number,\n highlightKeywords: HighlightKeywords\n) => {\n const previewUnit = documentWriter.createElement('div');\n if (highlightKeywords.keywords[word.text]?.enabled === false) {\n previewUnit.style.display = 'none';\n return previewUnit;\n }\n\n const elementPosition = wordElement.getBoundingClientRect().top;\n\n previewUnit.style.position = 'absolute';\n previewUnit.style.top = `${(elementPosition / docHeight) * 100}%`;\n previewUnit.style.width = '100%';\n previewUnit.style.height = '1px';\n previewUnit.style.border = `1px solid ${word.previewBorderColor}`;\n previewUnit.style.backgroundColor = word.color;\n return previewUnit;\n};\n\nexport const buildQuickviewPreviewBar = (\n words: Record<string, QuickviewWordHighlight>,\n highlightKeywords: HighlightKeywords,\n iframe?: HTMLIFrameElement\n) => {\n if (!iframe) {\n return;\n }\n const documentWriter = iframe.contentDocument;\n if (!documentWriter) {\n return;\n }\n const bar = buildPreviewBar(documentWriter);\n if (highlightKeywords.highlightNone) {\n bar.remove();\n return;\n }\n const docHeight = documentWriter.body.scrollHeight;\n\n Object.values(words).forEach((word) => {\n word.elements.forEach((wordElement) => {\n const previewUnit = buildPreviewUnit(\n documentWriter,\n word,\n wordElement,\n docHeight,\n highlightKeywords\n );\n\n bar.appendChild(previewUnit);\n });\n });\n documentWriter.body.appendChild(bar);\n};\n","export const rgbToHsv = (r: number, g: number, b: number) => {\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n let h: number;\n const v = max;\n\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n default:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {h, s, v};\n};\n\nexport const hsvToRgb = (h: number, s: number, v: number) => {\n let r: number, g: number, b: number;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return {\n r: Math.round(r),\n g: Math.round(g),\n b: Math.round(b),\n };\n};\n","import {TermsToHighlight} from '@coveo/headless';\nimport {hsvToRgb, rgbToHsv} from '../../../../utils/color-utils';\n\nexport const HIGHLIGHT_PREFIX = 'CoveoHighlight';\nexport class QuickviewWordHighlight {\n public text: string;\n public indexIdentifier: string;\n public occurrences = 0;\n public color: string;\n public focusedColor: string;\n public previewBorderColor: string;\n public elements: HTMLElement[] = [];\n\n private currentNavigationPosition = -1;\n\n constructor(\n private stemmingInfoFromIndex: TermsToHighlight,\n keywordElementInIframe: HTMLElement\n ) {\n const parsed = this.parseKeywordIdentifier(keywordElementInIframe);\n if (!parsed) {\n throw 'Invalid keyword identifier for quickview';\n }\n\n this.text = this.getText(keywordElementInIframe);\n this.indexIdentifier = `${parsed.keywordIdentifier}`;\n this.color = keywordElementInIframe.style.backgroundColor;\n this.focusedColor = this.computeInvertedColor();\n this.previewBorderColor = this.computeSaturatedColor();\n\n this.addElement(keywordElementInIframe);\n }\n\n public addElement(keywordElementInIframe: HTMLElement) {\n this.occurrences++;\n this.elements.push(keywordElementInIframe);\n }\n\n public navigateForward() {\n this.currentNavigationPosition++;\n if (this.currentNavigationPosition >= this.elements.length) {\n this.currentNavigationPosition = 0;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n public navigateBackward() {\n this.currentNavigationPosition--;\n if (this.currentNavigationPosition < 0) {\n this.currentNavigationPosition = this.elements.length - 1;\n }\n this.highlightNavigation();\n this.putElementIntoView();\n return this.elements[this.currentNavigationPosition];\n }\n\n private isTaggedWord(element: HTMLElement) {\n return element.nodeName.toLowerCase() === 'coveotaggedword';\n }\n\n private highlightNavigation() {\n const currentElement = this.elements[this.currentNavigationPosition];\n const otherElements = this.elements.filter((el) => el !== currentElement);\n currentElement.style.color = this.color;\n currentElement.style.backgroundColor = this.focusedColor;\n otherElements.forEach((element) => {\n element.style.color = '';\n element.style.backgroundColor = this.color;\n });\n }\n\n private putElementIntoView() {\n const element = this.elements[this.currentNavigationPosition];\n element.scrollIntoView();\n }\n\n private getText(element: HTMLElement) {\n const innerTextOfHTMLElement = this.getHighlightedInnerText(element);\n return this.resolveOriginalTerm(innerTextOfHTMLElement).trim();\n }\n\n private resolveOriginalTerm(highlight: string): string {\n // First try to find either an exact match between the highlight and the original non-stemmed keyword.\n // Otherwise try to find a match between the highlight and the stemming keyword expansions\n // If nothing is found (which should not normally happen...), simply return the highlight keyword as is.\n\n const found = Object.keys(this.stemmingInfoFromIndex).find(\n (originalTerm) => {\n const originalTermMatch =\n originalTerm.toLowerCase() === highlight.toLowerCase();\n if (originalTermMatch) {\n return true;\n }\n const stemmingExpansions = this.stemmingInfoFromIndex[originalTerm];\n if (!stemmingExpansions) {\n return false;\n }\n\n const stemmingExpansionMatch = stemmingExpansions.find(\n (stemmingExpansion) =>\n stemmingExpansion.toLowerCase() === highlight.toLowerCase()\n );\n return stemmingExpansionMatch;\n }\n );\n return found || highlight;\n }\n\n private getHighlightedInnerText(element: HTMLElement): string {\n if (!this.isTaggedWord(element)) {\n return this.getTextOfHTMLElement(element);\n }\n\n const children = Array.from(element.children) as HTMLElement[];\n if (children.length >= 1) {\n return this.getTextOfHTMLElement(children[0]);\n }\n\n return '';\n }\n\n private parseKeywordIdentifier(element: HTMLElement) {\n const parts = element.id\n .substring(HIGHLIGHT_PREFIX.length + 1)\n .match(/^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/);\n\n if (!parts || parts.length <= 3) {\n return null;\n }\n\n return {\n keywordIdentifier: parts[1],\n keywordTermPart: parseInt(parts[3], 10),\n };\n }\n\n private getTextOfHTMLElement(el: HTMLElement) {\n return el.innerText || el.textContent || '';\n }\n\n private computeInvertedColor() {\n const {r, g, b} = this.extractRgb();\n return `rgb(${255 - r}, ${255 - g}, ${255 - b})`;\n }\n\n private computeSaturatedColor() {\n const {r, g, b} = this.extractRgb();\n const {h, s, v} = rgbToHsv(r, g, b);\n let newSaturation = s * 2;\n if (newSaturation > 1) {\n newSaturation = 1;\n }\n const {\n r: rSaturated,\n g: gSaturated,\n b: bSaturated,\n } = hsvToRgb(h, newSaturation, v);\n return `rgb(${rSaturated}, ${gSaturated}, ${bSaturated})`;\n }\n\n private extractRgb() {\n const rgbExtracted = this.color.match(/\\d+/g);\n if (!rgbExtracted) {\n return {r: 255, g: 255, b: 255};\n }\n\n return {\n r: parseInt(rgbExtracted[0], 10),\n g: parseInt(rgbExtracted[1], 10),\n b: parseInt(rgbExtracted[2], 10),\n };\n }\n}\n\nexport const getWordsHighlights = (\n stemmingInfoFromIndex: TermsToHighlight,\n iframe?: HTMLIFrameElement\n) => {\n const wordsHighlights: Record<string, QuickviewWordHighlight> = {};\n if (!iframe) {\n return wordsHighlights;\n }\n\n iframe.contentDocument?.body\n .querySelectorAll(`[id^=\"${HIGHLIGHT_PREFIX}\"]`)\n .forEach((el) => {\n const wordHTMLElementToHighlight = el as HTMLElement;\n\n const wordHighlight = new QuickviewWordHighlight(\n stemmingInfoFromIndex,\n wordHTMLElementToHighlight\n );\n\n if (!wordHighlight.text) {\n return;\n }\n\n const alreadyScannedKeyword =\n wordsHighlights[wordHighlight.indexIdentifier];\n\n if (alreadyScannedKeyword) {\n alreadyScannedKeyword.addElement(wordHTMLElementToHighlight);\n } else {\n wordsHighlights[wordHighlight.indexIdentifier] = wordHighlight;\n }\n });\n\n return wordsHighlights;\n};\n","@import '../../../../global/global.pcss';\n@import '../../../../utils/tailwind-utilities/link-style.tw.css';\n\n.atomic-quickview-modal {\n &::part(backdrop) {\n grid-template-columns: 1fr max(80vw, 30rem) 1fr;\n }\n &::part(body),\n &::part(header),\n &::part(footer) {\n @apply max-w-full;\n }\n\n &::part(footer) {\n @apply flex justify-center;\n }\n\n &::part(body-wrapper) {\n @apply h-full overflow-hidden p-0;\n }\n\n &::part(body) {\n @apply h-full;\n }\n\n &::part(backdrop) {\n grid-template-rows: 1fr 100% 3fr;\n }\n\n &::part(header-wrapper) {\n @apply bg-neutral-light;\n }\n\n a {\n @apply link-style;\n }\n}\n","import {\n buildInteractiveResult,\n Result,\n InteractiveResult,\n TermsToHighlight,\n} from '@coveo/headless';\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Watch,\n Method,\n VNode,\n Fragment,\n} from '@stencil/core';\nimport CloseIcon from '../../../../images/close.svg';\nimport {\n InitializableComponent,\n InitializeBindings,\n} from '../../../../utils/initialization-utils';\nimport {ATOMIC_MODAL_EXPORT_PARTS} from '../../../common/atomic-modal/export-parts';\nimport {IconButton} from '../../../common/iconButton';\nimport {LinkWithItemAnalytics} from '../../../common/item-link/stencil-item-link';\nimport {Button} from '../../../common/stencil-button';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\nimport {QuickviewSidebar} from '../atomic-quickview-sidebar/atomic-quickview-sidebar';\nimport {QuickviewIframe} from '../quickview-iframe/quickview-iframe';\nimport {buildQuickviewPreviewBar} from '../quickview-preview-bar/quickview-preview-bar';\nimport {\n getWordsHighlights,\n HIGHLIGHT_PREFIX,\n QuickviewWordHighlight,\n} from '../quickview-word-highlight/quickview-word-highlight';\n\nexport interface HighlightKeywords {\n highlightNone: boolean;\n keywords: {\n [text: string]: {\n indexIdentifier: string;\n enabled: boolean;\n };\n };\n}\n\n/**\n * The modal opened when clicking on a quickview button.\n * Do not use this component directly; use `atomic-quickview` instead.\n *\n * @part backdrop - The transparent backdrop hiding the content behind the modal.\n * @part container - The modal's outermost container with the outline and background.\n * @part header-wrapper - The wrapper around the header.\n * @part header - The header at the top of the modal.\n * @part header-ruler - The horizontal ruler underneath the header.\n * @part body-wrapper - The wrapper around the body.\n * @part body - The body of the modal, between the header and the footer.\n * @part footer-wrapper - The wrapper with a shadow or background color around the footer.\n * @part footer - The footer at the bottom of the modal.\n * @part quickview-modal-header-icon - The close icon of the modal.\n * @part quickview-modal-header-title - The title of the modal.\n */\n@Component({\n tag: 'atomic-quickview-modal',\n styleUrl: 'atomic-quickview-modal.pcss',\n shadow: true,\n})\nexport class AtomicQuickviewModal implements InitializableComponent {\n @InitializeBindings() public bindings!: Bindings;\n @State() public error!: Error;\n\n @State() private highlightKeywords: HighlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n @Watch('highlightKeywords')\n watchHighlightKeywords() {\n this.handleHighlightsScripts();\n }\n\n @Event({eventName: 'atomic/quickview/next'}) nextQuickview?: EventEmitter;\n @Event({eventName: 'atomic/quickview/previous'})\n previousQuickview?: EventEmitter;\n\n @State() private minimizeSidebar = false;\n @State() private words: Record<string, QuickviewWordHighlight> = {};\n private iframeRef?: HTMLIFrameElement;\n\n @Prop({mutable: true, reflect: false}) content?: string;\n @Prop({mutable: true, reflect: false}) result?: Result;\n @Prop() current?: number;\n @Prop() total?: number;\n @Prop() sandbox?: string;\n @Prop() modalCloseCallback?: () => void;\n\n private interactiveResult?: InteractiveResult;\n\n public componentWillLoad(): void {\n this.minimizeSidebar = this.bindings.store.isMobile();\n }\n\n @Method()\n public async reset() {\n this.highlightKeywords = {\n highlightNone: false,\n keywords: {},\n };\n this.minimizeSidebar = false;\n this.iframeRef = undefined;\n this.content = undefined;\n this.result = undefined;\n this.interactiveResult = undefined;\n }\n\n private renderHeader() {\n let headerContent: VNode | null = null;\n if (this.result) {\n this.interactiveResult = buildInteractiveResult(this.bindings.engine, {\n options: {result: this.result},\n });\n headerContent = (\n <Fragment>\n <LinkWithItemAnalytics\n href={this.result?.clickUri}\n onSelect={() => this.interactiveResult?.select()}\n onBeginDelayedSelect={() =>\n this.interactiveResult?.beginDelayedSelect()\n }\n onCancelPendingSelect={() =>\n this.interactiveResult?.cancelPendingSelect()\n }\n className=\"truncate\"\n part=\"quickview-modal-header-title\"\n >\n {this.result.title}\n </LinkWithItemAnalytics>\n <IconButton\n partPrefix=\"quickview-modal-header\"\n icon={CloseIcon}\n onClick={() => this.onClose()}\n ariaLabel={this.bindings.i18n.t('close')}\n style=\"text-transparent\"\n title={this.bindings.i18n.t('close')}\n />\n </Fragment>\n );\n }\n return (\n <div slot=\"header\" class=\"flex w-full items-center justify-between\">\n {headerContent}\n </div>\n );\n }\n\n private renderBody() {\n return (\n <div slot=\"body\" class=\"grid h-full grid-cols-[min-content_auto]\">\n <div\n class=\"h-full overflow-y-auto\"\n style={{backgroundColor: 'var(--atomic-neutral-light)'}}\n >\n <QuickviewSidebar\n words={this.words}\n i18n={this.bindings.i18n}\n highlightKeywords={this.highlightKeywords}\n onHighlightKeywords={(highlight) =>\n (this.highlightKeywords = highlight)\n }\n minimized={this.minimizeSidebar}\n onMinimize={(minimize) => (this.minimizeSidebar = minimize)}\n />\n </div>\n <div class=\"relative overflow-auto\">\n <QuickviewIframe\n logger={this.logger}\n src={this.quickviewSrc}\n sandbox={this.sandbox}\n uniqueIdentifier={this.quickviewUniqueIdentifier}\n content={this.content}\n onSetIframeRef={async (ref) => {\n this.iframeRef = ref;\n this.words = getWordsHighlights(\n this.termsToHighlight,\n this.iframeRef\n );\n this.handleHighlightsScripts();\n }}\n />\n {buildQuickviewPreviewBar(\n this.words,\n this.highlightKeywords,\n this.iframeRef\n )}\n </div>\n </div>\n );\n }\n\n private renderFooter() {\n return (\n <div slot=\"footer\" class=\"flex items-center gap-2\">\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.previousQuickview?.emit()}\n disabled={this.current === 1}\n text={this.bindings.i18n.t('quickview-previous')}\n ></Button>\n <p class=\"text-center\">\n {this.bindings.i18n.t('showing-results-of', {\n first: this.current,\n total: this.total,\n })}\n </p>\n <Button\n class=\"p-2\"\n style=\"square-neutral\"\n onClick={() => this.nextQuickview?.emit()}\n disabled={this.current === this.total}\n text={this.bindings.i18n.t('quickview-next')}\n ></Button>\n </div>\n );\n }\n\n private onClose() {\n this.content = undefined;\n this.result = undefined;\n this.modalCloseCallback && this.modalCloseCallback();\n }\n\n private get isOpen() {\n return !!this.content && !!this.result;\n }\n\n private get highlightScriptId() {\n return 'CoveoDisableHighlightStyle';\n }\n\n private get logger() {\n return this.bindings.engine.logger;\n }\n\n private get quickviewSrc() {\n return this.bindings.engine.state.resultPreview?.contentURL;\n }\n\n private enableHighlights() {\n this.removeDisableHighlightScript();\n }\n\n private enableHighlightsSpecificKeyword(identifier: string) {\n this.removeDisableHighlightScript(identifier);\n }\n\n private disableHighlights() {\n this.createDisableHighlightScript();\n }\n\n private disableHighlightsSpecificKeyword(identifier: string) {\n this.createDisableHighlightScript(identifier);\n }\n\n private removeDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n doc\n .getElementById(\n `${this.highlightScriptId}${identifier ? `:${identifier}` : ''}`\n )\n ?.remove();\n }\n\n private createDisableHighlightScript(identifier?: string) {\n const doc = this.iframeRef?.contentWindow?.document;\n if (!doc) {\n return;\n }\n\n const head = doc.head;\n const scriptId = `${this.highlightScriptId}${\n identifier ? `:${identifier}` : ''\n }`;\n const style =\n doc.getElementById(scriptId) || this.bindings.createStyleElement();\n style.setAttribute('id', scriptId);\n head.appendChild(style);\n style.appendChild(\n doc.createTextNode(`[id^=\"${HIGHLIGHT_PREFIX}${\n identifier ? `:${identifier}` : ''\n }\"] {\n background-color: inherit !important;\n color: inherit !important;\n }`)\n );\n }\n\n private get termsToHighlight() {\n const flatPhrasesToHighlight: TermsToHighlight = {};\n\n const phrasesToHighlight =\n this.bindings.engine.state.search.response.phrasesToHighlight;\n\n Object.entries(phrasesToHighlight).forEach(([phrase, keywords]) => {\n flatPhrasesToHighlight[phrase] = Object.entries(keywords).flatMap(\n ([keywordEntry, keywordStemming]) => {\n return [keywordEntry, ...keywordStemming];\n }\n );\n });\n\n return {\n ...this.bindings.engine.state.search.response.termsToHighlight,\n ...flatPhrasesToHighlight,\n };\n }\n\n private get requestId() {\n return this.bindings.engine.state.search.requestId;\n }\n\n private get quickviewUniqueIdentifier() {\n return this.result?.uniqueId + this.requestId;\n }\n\n private handleHighlightsScripts() {\n if (!this.highlightKeywords.highlightNone) {\n this.enableHighlights();\n } else {\n this.disableHighlights();\n }\n Object.values(this.highlightKeywords.keywords).forEach((word) => {\n if (word.enabled) {\n this.enableHighlightsSpecificKeyword(word.indexIdentifier);\n } else {\n this.disableHighlightsSpecificKeyword(word.indexIdentifier);\n }\n });\n }\n\n public render() {\n return (\n <atomic-modal\n fullscreen={this.bindings.store.isMobile()}\n class={'atomic-quickview-modal'}\n isOpen={this.isOpen}\n close={() => this.onClose()}\n exportparts={ATOMIC_MODAL_EXPORT_PARTS}\n >\n {this.renderHeader()}\n {this.renderBody()}\n {this.renderFooter()}\n </atomic-modal>\n );\n }\n}\n"],"version":3}
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, s as setNonce, h, g as getElement } from './index-3f35faca.js';
2
2
  import { m as markParentAsReady } from './init-queue-fbe942c3.js';
3
3
  import { loadRecommendationActions, loadSearchConfigurationActions, EcommerceDefaultFieldsToInclude, loadFieldActions, buildRecommendationEngine } from '@coveo/headless/recommendation';
4
- import { g as getNextAnalyticsConfig, c as augmentAnalyticsConfigWithDocument, d as augmentAnalyticsConfigWithAtomicVersion, a as augmentWithExternalMiddleware, b as augmentAnalyticsWithAtomicVersion, C as CommonAtomicInterfaceHelper, i as instance, m as mismatchedInterfaceAndEnginePropError } from './analytics-config-30e28f5f.js';
4
+ import { g as getNextAnalyticsConfig, c as augmentAnalyticsConfigWithDocument, d as augmentAnalyticsConfigWithAtomicVersion, a as augmentWithExternalMiddleware, b as augmentAnalyticsWithAtomicVersion, C as CommonAtomicInterfaceHelper, i as instance, m as mismatchedInterfaceAndEnginePropError } from './analytics-config-fcf488d0.js';
5
5
  import { A as ArrayProp } from './props-utils-76e19fa7.js';
6
6
  import { u as unsetLoadingFlag, s as setLoadingFlag, a as createBaseStore } from './store-e14e2958.js';
7
7
  import './dayjs.min-d04628c6.js';
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, s as setNonce, h, g as getElement } from './index-3f35faca.js';
2
2
  import { m as markParentAsReady } from './init-queue-fbe942c3.js';
3
3
  import { loadSearchConfigurationActions, loadQueryActions, EcommerceDefaultFieldsToInclude, loadFieldActions, buildSearchEngine, buildUrlManager, buildSearchStatus } from '@coveo/headless';
4
- import { g as getNextAnalyticsConfig, d as augmentAnalyticsConfigWithAtomicVersion, c as augmentAnalyticsConfigWithDocument, a as augmentWithExternalMiddleware, b as augmentAnalyticsWithAtomicVersion, C as CommonAtomicInterfaceHelper, i as instance, m as mismatchedInterfaceAndEnginePropError } from './analytics-config-30e28f5f.js';
4
+ import { g as getNextAnalyticsConfig, d as augmentAnalyticsConfigWithAtomicVersion, c as augmentAnalyticsConfigWithDocument, a as augmentWithExternalMiddleware, b as augmentAnalyticsWithAtomicVersion, C as CommonAtomicInterfaceHelper, i as instance, m as mismatchedInterfaceAndEnginePropError } from './analytics-config-fcf488d0.js';
5
5
  import { a as StorageItems, S as SafeStorage } from './local-storage-utils-410269e6.js';
6
6
  import { A as ArrayProp } from './props-utils-76e19fa7.js';
7
7
  import { m as makeDesktopQuery, n as noResultsSelector, e as errorSelector, f as firstSearchExecutedSelector } from './search-layout-1e3bd9fd.js';