{"version":3,"file":"sinequa-components-preview.mjs","sources":["../../../projects/components/preview/preview-search-form/preview-search-form.component.ts","../../../projects/components/preview/preview-frames.service.ts","../../../projects/components/preview/preview.service.ts","../../../projects/components/preview/preview-navigator.ts","../../../projects/components/preview/preview.component.ts","../../../projects/components/preview/preview.component.html","../../../projects/components/preview/preview-tooltip/preview-tooltip.component.ts","../../../projects/components/preview/preview-tooltip/preview-tooltip.component.html","../../../projects/components/preview/preview-minimap/preview-minimap.component.ts","../../../projects/components/preview/preview-minimap/preview-minimap.component.html","../../../projects/components/preview/preview-extracts-panel/preview-extracts-panel.component.ts","../../../projects/components/preview/preview-extracts-panel/preview-extracts-panel.component.html","../../../projects/components/preview/preview-entity-facet/preview-entity-facet.component.ts","../../../projects/components/preview/preview-entity-facet/preview-entity-facet.component.html","../../../projects/components/preview/preview-entity-panel/preview-entity-panel.component.ts","../../../projects/components/preview/preview-entity-panel/preview-entity-panel.component.html","../../../projects/components/preview/preview.module.ts","../../../projects/components/preview/messages/en.ts","../../../projects/components/preview/messages/fr.ts","../../../projects/components/preview/messages/de.ts","../../../projects/components/preview/messages/index.ts","../../../projects/components/preview/sinequa-components-preview.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, UntypedFormControl } from '@angular/forms';\nimport { Query } from '@sinequa/core/app-utils';\n\n@Component({\n    selector: 'sq-preview-search-form',\n    template: `\n<form novalidate [formGroup]=\"form\">\n  <div class=\"input-group\">\n    <input id=\"search-input\" type=\"text\" placeholder=\"{{ 'msg#searchForm.searchFor' | sqMessage }}\" formControlName=\"search\" class=\"form-control\" sqAutofocus>\n\n    <button class=\"btn btn-primary\" type=\"submit\" (click)=\"search()\" title=\"{{ 'msg#searchForm.search' | sqMessage }}\">\n      <i class=\"fas fa-fw fa-search\"></i>\n    </button>\n  </div>\n</form>\n  `,\n    standalone: false\n})\nexport class PreviewSearchFormComponent implements OnChanges {\n  @Input() query: Query;\n  @Output() searchText = new EventEmitter<string>();\n\n  // Search form\n  readonly form: UntypedFormGroup;\n  readonly searchControl: UntypedFormControl;\n\n  constructor(\n    private formBuilder: UntypedFormBuilder) {\n\n    this.searchControl = new UntypedFormControl('');\n    this.form = this.formBuilder.group({\n      search: this.searchControl\n    });\n  }\n\n  /**\n   * Updates the text of the search form when the query changes\n   */\n  ngOnChanges() {\n    this.searchControl.setValue((!this.query || !this.query.text) ? \"\" : this.query.text);\n  }\n\n  /**\n   * Emits an event for the parent component to search this next text\n   */\n  search() {\n    this.searchText.next(this.searchControl.value || \"\");\n  }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { AppService } from \"@sinequa/core/app-utils\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { StartConfig, START_CONFIG } from \"@sinequa/core/web-services\";\n\nexport type FrameMessage<T = undefined> = { type: string, url: string, data?: T };\n\n@Injectable({providedIn: 'root'})\nexport class PreviewFrameService {\n\n  subscribers: {\n    [url: string]: {\n      [type: string]: (data: any) => void\n    }\n  } = {};\n\n  constructor(\n    public appService: AppService,\n    @Inject(START_CONFIG) public startConfig: StartConfig\n  ) {\n    window.addEventListener(\"message\", (event: MessageEvent) => {\n      const message = event.data as FrameMessage;\n      if(message?.url && message?.type) {\n        this.subscribers[message.url]?.[message.type]?.(message.data);\n      }\n    });\n  }\n\n  subscribe<T>(url: string, type: string, callback: (data: T) => void) {\n    if(!Utils.isUrlAbsolute(url)) {\n      url = Utils.addUrl(this.appService.origin, url);\n    }\n    if(!this.subscribers[url]) {\n      this.subscribers[url] = {};\n    }\n    this.subscribers[url][type] = callback;\n  }\n\n  unsubscribe(url: string) {\n    delete this.subscribers[url];\n  }\n\n}\n","import { Observable, Subject, tap } from \"rxjs\";\n\nimport { Inject, Injectable, InjectionToken, Optional, Type } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { RecentDocumentsService } from '@sinequa/components/saved-queries';\nimport { SearchService } from \"@sinequa/components/search\";\nimport { AppService, Query } from \"@sinequa/core/app-utils\";\nimport { JsonObject, Utils } from \"@sinequa/core/base\";\nimport { AuthenticationService } from \"@sinequa/core/login\";\nimport { ModalService } from \"@sinequa/core/modal\";\nimport { AuditEvent, AuditEventType, CustomHighlights, PreviewData, PreviewWebService, Record, Results } from \"@sinequa/core/web-services\";\n\nexport const enum PreviewEventType {\n    Data = \"Preview_Data\",\n    Modal = \"Preview_Modal\",\n    Route = \"Preview_Route\",\n    Window = \"Preview_Window\"\n}\n\nexport interface PreviewEvent {\n    type: PreviewEventType;\n    record?: Record;\n    query: Query;\n}\n\nexport const PREVIEW_MODAL = new InjectionToken<Type<any>>(\"PREVIEW_MODAL\");\n\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class PreviewService {\n\n    private readonly _events = new Subject<PreviewEvent>();\n    private rank: number;\n\n    constructor(\n        @Optional() @Inject(PREVIEW_MODAL) public previewModal: Type<any>,\n        private router: Router,\n        private previewWebService: PreviewWebService,\n        private appService: AppService,\n        private authenticationService: AuthenticationService,\n        private searchService: SearchService,\n        private modalService: ModalService,\n        private recentDocumentsService: RecentDocumentsService\n    ) {\n\n        // Subscribe to own events and add documents to the recent documents service\n        this.events.subscribe(event => {\n            if(event.record && (event.type === PreviewEventType.Modal || event.type === PreviewEventType.Route || event.type === PreviewEventType.Window)){\n                this.recentDocumentsService.addDocument(event.record, false);\n            }\n        });\n    }\n\n    /**\n     * Triggers any event among PreviewEvent\n     */\n    public get events() : Subject<PreviewEvent> {\n        return this._events;\n    }\n\n    private makeQuery(query: Query): Query {\n        query = Utils.copy(query);\n        delete query.sort;\n        delete query.scope;\n        delete query.tab;\n        delete query.basket;\n        delete query.page;\n        delete query.queryId;\n        delete query.select;\n        delete query.filters;\n        return query;\n    }\n\n    public getPreviewData(id: string, query: Query, customHighlights?: CustomHighlights[], audit = true): Observable<PreviewData> {\n        let auditEvent: AuditEvent | undefined;\n        const record = this.searchService.getRecordFromId(id);\n        const resultId = record ? this.searchService.results?.id : undefined;\n        if (audit) {\n            auditEvent = {\n                type: AuditEventType.Doc_Preview,\n                detail: this.getAuditPreviewDetail(id, query, record, resultId)\n            };\n        }\n        query = this.makeQuery(query);\n        this._events.next({type: PreviewEventType.Data, record, query});\n        return this.previewWebService.get(id, query, customHighlights, auditEvent).pipe(\n          tap(data => data.resultId = resultId || \"\")\n        );\n    }\n\n    openModal(record: Record, query: Query, model: any) {\n        model.record = record;\n        model.query = query;\n\n        this._events.next({type: PreviewEventType.Modal, record, query});\n\n        this.modalService.open(this.previewModal, { model });\n    }\n\n    openNewWindow(record: Record, query: Query): Window | null {\n        const params = {\n            id: record.id,\n            query: this.makeQuery(query).toJsonForQueryString(),\n            app: this.appService.appName\n        };\n\n        if (this.authenticationService.userOverrideActive && this.authenticationService.userOverride) {\n            params[\"overrideUser\"] = this.authenticationService.userOverride.userName;\n            params[\"overrideDomain\"] = this.authenticationService.userOverride.domain;\n        }\n        const httpParams = Utils.makeHttpParams(params);\n        const url = \"#/preview?\" + httpParams.toString();\n\n        this._events.next({type: PreviewEventType.Window, record, query});\n\n        return window.open(url, \"_blank\");\n    }\n\n    openRoute(record: Record, query: Query, path = \"preview\"): Promise<Boolean> {\n\n        this._events.next({type:PreviewEventType.Route, record, query});\n        this.rank = record.rank;\n\n        return this.router.navigate([path], {\n            queryParams: {\n                id: record.id,\n                query: this.makeQuery(query).toJsonForQueryString()\n            }\n        });\n    }\n\n    /**\n     * Get the page number of a splitted document's record or undefined if\n     * it is not in fact splitted. Stores the page number in the record itself ($page property)\n     * @param record\n     */\n    getPageNumber(record: Record): number | undefined {\n        const containerid: string | undefined = record.containerid;\n        if(containerid && record.id.startsWith(containerid)) {\n            const pageNumberStr = record.id.slice(containerid.length+1);\n            if(/#\\d+#/g.test(pageNumberStr)) {\n                const pageNumber = parseInt(pageNumberStr.slice(1, pageNumberStr.length-1), 10);\n                if(!isNaN(pageNumber)) {\n                    record.$page = pageNumber;\n                    return pageNumber;\n                }\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * Returns the pages of a given record id\n     * @param containerid\n     * @param query\n     */\n    fetchPages(containerid: string, query: Query): Observable<Results> {\n        query = this.makeQuery(query);\n        query.groupBy = \"\"; // If the query web service uses GROUP BY containerid\n        query.addFilter({field: \"containerid\", value: containerid});\n        return this.searchService.getResults(query);\n    }\n\n    getAuditPreviewDetail(id: string, query: Query, record?: Record, resultId?: string): JsonObject {\n        const queryLanguage = this.searchService.results?.queryAnalysis?.queryLanguage\n            || this.searchService?.query?.questionLanguage\n            || this.appService?.ccquery?.questionLanguage;\n        const collectionColumn = record?.collection;\n        const collection = !!collectionColumn ? collectionColumn[0] : Utils.split(id, \"|\")[0];\n        const rank = !!record ? record.rank : this.rank || 0;\n        const passages = record?.matchingpassages?.passages;\n        const score = passages && passages.length ? passages[0].score : undefined;\n        return {\n            docid: id,\n            rank,\n            collection,\n            source: Utils.treeFirstNode(collection),\n            resultid: resultId,\n            querylang: queryLanguage,\n            querytext: query.text,\n            filename: record?.filename,\n            fileext: record?.fileext,\n            score\n        }\n    }\n\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\n@Component({\n  selector: \"preview-navigator\",\n  standalone: true,\n  template: `\n    <button class=\"btn btn-light\"\n      (click)=\"firstPage.emit()\"\n      [disabled]=\"isFirst()\"\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        fill=\"none\"\n        viewBox=\"0 0 24 24\"\n        stroke-width=\"1.5\"\n        stroke=\"currentColor\"\n        class=\"\"\n      >\n        <path\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          d=\"m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5\"\n        />\n      </svg>\n    </button>\n    <button class=\"btn btn-light\"\n      (click)=\"prevPage.emit()\"\n      [disabled]=\"isFirst()\"\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        fill=\"none\"\n        viewBox=\"0 0 24 24\"\n        stroke-width=\"1.5\"\n        stroke=\"currentColor\"\n        class=\"\"\n      >\n        <path\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          d=\"M15.75 19.5 8.25 12l7.5-7.5\"\n        />\n      </svg>\n    </button>\n\n    <div class=\"d-inline-flex gap-1 align-items-center text-body\">\n      <input\n        #page\n        type=\"text\"\n        class=\"input-page border rounded w-100 text-center\"\n        [min]=\"1\"\n        [max]=\"total || 1\"\n        [value]=\"current\"\n        (keydown.enter)=\"goto(page.value)\"\n        (focus)=\"page.select()\"\n        pattern=\"\\\\d+\"\n      />\n\n      <span>/</span>\n      <span>{{ total }}</span>\n    </div>\n    <button class=\"btn btn-light\"\n      (click)=\"nextPage.emit()\"\n      [disabled]=\"isLast()\"\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        fill=\"none\"\n        viewBox=\"0 0 24 24\"\n        stroke-width=\"1.5\"\n        stroke=\"currentColor\"\n        class=\"\"\n      >\n        <path\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          d=\"m8.25 4.5 7.5 7.5-7.5 7.5\"\n        />\n      </svg>\n    </button>\n    <button class=\"btn btn-light\"\n      aria-label=\"Page suivante\"\n      (click)=\"lastPage.emit()\"\n      [disabled]=\"isLast()\"\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        fill=\"none\"\n        viewBox=\"0 0 24 24\"\n        stroke-width=\"1.5\"\n        stroke=\"currentColor\"\n        class=\"size-6\"\n      >\n        <path\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          d=\"m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5\"\n        />\n      </svg>\n    </button>\n  `,\n  styles: [\n    `\n    :host {\n      width: 300px;\n    }\n    button > svg {\n      width: 1rem;\n      height: 1rem;\n    }\n    .input-page {\n      outline: none;\n      &:invalid {\n        background-color: lightpink;\n      }\n    }\n    `\n  ],\n  host: {\n    \"class\": \"d-inline-flex gap-1 justify-content-around bg-light border rounded px-2 py-1\",\n    \"[class.invisible]\": \"!total || total <= 1\"\n  },\n})\nexport class PreviewNavigator {\n  @Output() firstPage = new EventEmitter<void>();\n  @Output() prevPage = new EventEmitter<void>();\n  @Output() nextPage = new EventEmitter<void>();\n  @Output() lastPage = new EventEmitter<void>();\n  @Output() gotoPage = new EventEmitter<number>();\n\n  @Input() total = 1;\n  @Input() current = 1;\n\n  isFirst = () => this.current <= 1;\n  isLast = () => this.current >= this.total;\n\n  goto(raw: string | number) {\n    const t = this.total || 1;\n    let n = Math.floor(Number(raw) || 1);\n    n = Math.max(1, Math.min(n, t));\n    this.gotoPage.emit(n);\n  }\n}\n","import { BehaviorSubject, Observable, Subject, catchError, of } from \"rxjs\";\n\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, ViewChild } from \"@angular/core\";\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\nimport { Action } from \"@sinequa/components/action\";\nimport { AbstractFacet } from \"@sinequa/components/facet\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport { UserPreferences } from \"@sinequa/components/user-settings\";\nimport { UIService } from \"@sinequa/components/utils\";\nimport { AppService, Query } from \"@sinequa/core/app-utils\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { AuditEventType, CustomHighlights, PreviewData } from \"@sinequa/core/web-services\";\n\nimport { PreviewFrameService } from \"./preview-frames.service\";\nimport { PreviewService } from \"./preview.service\";\n\nexport interface PreviewHighlightColors {\n  name: string;\n  color?: string;\n  bgColor?: string;\n}\n\n@Component({\n  selector: 'sq-preview',\n  standalone: false,\n  templateUrl: './preview.component.html',\n  styleUrls: ['./preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    'class': 'position-relative'\n  }\n})\nexport class Preview extends AbstractFacet implements OnChanges, OnDestroy {\n\n  // Document management\n  @Input() id: string;\n  @Input() query?: Query;\n  @Input() customHighlights?: CustomHighlights[];\n\n  // Scale management\n  /** Default scale */\n  @Input() scale = 1;\n  /** Increment/decrement of scale (additive) */\n  @Input() scaleIncrement = 0.1;\n\n  // Highlight management\n  /** Highlights configuration */\n  @Input() highlightColors: PreviewHighlightColors[] = [];\n  /** Whether to highlight entities by default */\n  @Input() highlightEntities = true;\n  /** Whether to highlight extracts by default */\n  @Input() highlightExtracts = true;\n  /** Whether to display the highlight actions */\n  @Input() highlightActions = true;\n  /** List of highlights considered as \"extracts\" */\n  @Input() extracts = [\"matchlocations\", \"extractslocations\", \"matchingpassages\"];\n  /** List of highlights considered as \"entities\" */\n  get entities() {\n    return this.allHighlights.filter(name => !this.extracts.includes(name));\n  }\n  @Input() usePassageHighlighter = [\"extractslocations\", \"matchingpassages\"]\n  /** Name of the preference property used to stored the highlight preferences */\n  @Input() preferenceName = 'preview';\n\n  //Misc\n  /** Whether to show an action to download the PDF version of the document (if it exists) */\n  @Input() downloadablePdf = true;\n\n  /** Emits an event when the preview is ready for any interaction via this component */\n  @Output() ready = new EventEmitter();\n\n  @Output() resize = new EventEmitter();\n\n  // Reference to the iframe's window\n  @ViewChild(\"preview\") iframe: ElementRef<HTMLIFrameElement>;\n  get preview(): Window | null {\n    return this.iframe?.nativeElement?.contentWindow;\n  }\n\n  /** Subject emitting a value when the \"selected highlight\" changes */\n  public selectedId$ = new BehaviorSubject<string|undefined>(undefined);\n\n  /** Subject emitting the list of highlights when it changes */\n  public highlights$ = new BehaviorSubject<string[]>([]);\n\n  // Actions\n\n  zoomInAction: Action;\n  zoomOutAction: Action;\n  toggleEntitiesAction: Action;\n  toggleExtractsAction: Action;\n  toggleDescriptionAction: Action;\n  pdfDownloadAction: Action;\n\n  _actions: Action[];\n  override get actions() { return this._actions; }\n\n\n  // Other state\n\n  loading = false;\n  url?: string;               // URL as a string\n  safeUrl?: SafeResourceUrl;  // Sanitized URL, ready for the iframe\n  data?: PreviewData;         // The preview data returned by the /api/v1/preview web service\n\n  /**\n   * Determines if the file format is Excel.\n   * This allow to display the preview in a different way (without sandbox).\n   * @returns {boolean} True if the file format is Excel, false otherwise.\n   */\n    get isExcelDocFormat() { return [\"xlsx\",\"xls\"].includes(this.data?.record.docformat || \"\")}\n\n  constructor(\n    public previewService: PreviewService,\n    public previewFrames: PreviewFrameService,\n    public sanitizer: DomSanitizer,\n    public appService: AppService,\n    public searchService: SearchService,\n    public prefs: UserPreferences,\n    public cdRef: ChangeDetectorRef,\n    public ui: UIService,\n    public el: ElementRef<HTMLElement>\n  ) {\n    super();\n\n    this.zoomOutAction = new Action({\n      icon: \"fas fa-fw fa-search-minus\",\n      title: \"msg#preview.minimize\",\n      action: () => {\n        this.scale -= this.scaleIncrement;\n        this.sendMessage({ action: 'zoom', factor: this.scale });\n        this.updateActions();\n        this.cdRef.detectChanges();\n        this.onResize();\n      },\n      updater: action => action.disabled = this.scale <= 0.2\n    });\n\n    this.zoomInAction = new Action({\n      icon: \"fas fa-fw fa-search-plus\",\n      title: \"msg#preview.maximize\",\n      action: () => {\n        this.scale += this.scaleIncrement;\n        this.sendMessage({ action: 'zoom', factor: this.scale });\n        this.updateActions();\n        this.cdRef.detectChanges();\n        this.onResize();\n      },\n      updater: action => action.disabled = this.scale >= 3\n    });\n\n    this.toggleEntitiesAction = new Action({\n      icon: \"fas fa-fw fa-lightbulb\",\n      title: \"msg#preview.toggleEntities\",\n      action: (action) => this.toggleEntities(!action.selected),\n      updater: action => action.selected = this.entities.some(e => this.highlightsPref.includes(e))\n    });\n\n    this.toggleExtractsAction = new Action({\n      icon: \"fas fa-fw fa-highlighter\",\n      title: \"msg#preview.toggleExtracts\",\n      action: (action) => this.toggleExtracts(!action.selected),\n      updater: action => action.selected = this.extracts.some(e => this.highlightsPref.includes(e))\n    });\n\n    this.toggleDescriptionAction = new Action({\n      icon: \"fas fa-fw fa-wand-magic-sparkles\",\n      title: \"msg#preview.toggleDescription\",\n      action: (action) => {\n        this.sendMessage({ action: 'toggle-description', show: !action.selected });\n        action.selected = !action.selected;\n      },\n      updater: action => action.selected = false // Default to false, will be updated by the preview\n    });\n\n    this.pdfDownloadAction = new Action({\n      icon: \"fas fa-fw fa-file-pdf\",\n      title: \"msg#preview.downloadPdf\",\n      action: () => this.searchService.notifyOpenOriginalDocument(this.data!.record, undefined, AuditEventType.Doc_CachePdf)\n    });\n\n    this.ui.addElementResizeListener(this.el.nativeElement, this.onResize);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    // Update the preview content\n    if(changes.id || changes.query || changes.customHighlights) {\n\n      this.loading = true;\n      this.totalPages = 0;\n\n      const query = this.query || this.searchService.query;\n      this.previewService.getPreviewData(this.id, query, this.customHighlights)\n      .pipe(catchError(() => {\n        // In case of error, return an empty preview data\n        // to avoid breaking the preview component\n        return of({\n          resultId: \"\",\n          cacheId: \"\",\n          highlightsPerCategory: {\n            \"matchingpassages\": {\n              categoryDisplayLabel: \"\",\n              categoryDisplayLabelPlural: \"\",\n              categoryFilterAllLabel: \"\",\n              categoryFilterNoneLabel: \"\",\n              values: []\n            }\n          },\n          highlightsPerLocation: {},\n          documentCachedContentUrl: \"\",\n          record: { id: \"\", pdfUrl: \"\" }\n        });\n      }))\n      .subscribe(data => {\n        this.data = data as PreviewData;\n        if(this.url) {\n          this.previewFrames.unsubscribe(this.url);\n        }\n\n        if(!data.record || !data.record.id) {\n          // No preview available\n          this.loading = false;\n          this.ready.emit();\n          this.cdRef.detectChanges();\n          return;\n        }\n\n        this.pdfDownloadAction.href = data.record.pdfUrl;\n        this.url = this.appService.updateUrlForCors(data.documentCachedContentUrl);\n        if(this.safeUrl) {\n          this.safeUrl = undefined;\n          this.cdRef.detectChanges(); // Destruct and reconstruct the iframe to prevent navigation issues\n        }\n        this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);\n        this.previewFrames.subscribe(this.url, 'ready', () => this.onReady());\n        this.previewFrames.subscribe<{current: number, total: number}>(this.url, 'page-info', (info) => this.onPageInfo(info));\n        this.cdRef.detectChanges();\n      });\n    }\n    else if(changes.preferenceName || changes.highlights) {\n      this.updateHighlights();\n    }\n\n    this.updateActions();\n  }\n\n  ngOnDestroy(): void {\n    if(this.url) {\n      this.previewFrames.unsubscribe(this.url);\n    }\n    this.ui.removeElementResizeListener(this.el.nativeElement, this.onResize);\n  }\n\n  sendMessage(message: any) {\n    this.preview?.postMessage(message, this.appService.origin);\n  }\n\n  onReady() {\n    const highlights = this.getHighlights();\n    this.sendMessage({ action: 'init', highlights });\n    this.sendMessage({ action: 'zoom', factor: this.scale });\n    this.highlights$.next(this.highlightsPref);\n    this.updateActions();\n    this.loading = false;\n    this.ready.emit();\n    this.cdRef.detectChanges();\n  }\n\n  totalPages: number = 0;\n  currentPage: number = 0;\n  onPageInfo({current, total}: {current: number, total: number}) {\n    // Handle page info updates\n    this.totalPages = total ?? 1;\n    this.currentPage = current ?? 1;\n    console.log(`Preview page info: ${this.currentPage}/${this.totalPages}`);\n    this.cdRef.detectChanges();\n  }\n\n  onLoad() {\n    if(this.iframe && this.loading) { // onload is called a first time even before we have a reference to the iframe\n      this.loading = false;\n      this.updateActions();\n      this.ready.emit();\n    }\n  }\n\n  onResize = Utils.debounce(() => {\n    if(!this.loading) {\n      const id = this.selectedId$.getValue();\n      if(id) {\n        this.select(id); // Reselect the item to force a redraw of the passage highlighter\n      }\n      this.resize.emit();\n    }\n  }, 100);\n\n  /**\n   * Update the facet actions (PDF, highlight toggle, Zoom In/Out)\n   */\n  updateActions() {\n    this._actions = [];\n    if(this.preview) {\n      if (this.downloadablePdf && this.pdfDownloadAction.href) {\n        this._actions.push(this.pdfDownloadAction);\n      }\n      if (this.highlightActions) {\n        this._actions.push(this.toggleExtractsAction, this.toggleEntitiesAction);\n      }\n      // Add the toggle description action only if the record has the \"ps\" flag\n      if(this.data?.record.flags?.includes(\"ps\")) {\n        this._actions.push(this.toggleDescriptionAction);\n      }\n      this._actions.push(this.zoomOutAction, this.zoomInAction);\n      this._actions.forEach(a => a.update());\n    }\n  }\n\n\n  /**\n   * Update the preview highlights, based on the user settings or defaults.\n   */\n  updateHighlights() {\n    const highlights = this.getHighlights();\n    this.sendMessage({ action: 'highlight', highlights });\n    setTimeout(() => this.highlights$.next(this.highlightsPref)); // Fire asynchronously to avoid \"change after checked\" errors\n  }\n\n  /**\n   * Return highlight colors based on user settings or defaults.\n   */\n  getHighlights(): PreviewHighlightColors[] {\n    return this.highlightColors.filter(\n      hl => this.highlightsPref.includes(hl.name)\n    );\n  }\n\n  /**\n   * Toggle highlight of entities via the user preferences\n   */\n  toggleEntities(showEntities: boolean) {\n    this.highlightsPref = showEntities?\n      this.highlightsPref.concat(this.entities.filter(e => this.highlightsPref.indexOf(e) === -1)) :\n      this.highlightsPref.filter(hl => !this.entities.includes(hl));\n    this.updateHighlights();\n    this.toggleEntitiesAction.update();\n  }\n\n  /**\n   * Toggle highlight of extracts via the user preferences\n   */\n  toggleExtracts(showExtracts: boolean) {\n    this.highlightsPref = showExtracts?\n      this.highlightsPref.concat(this.extracts.filter(e => this.highlightsPref.indexOf(e) === -1)) :\n      this.highlightsPref.filter(hl => !this.extracts.includes(hl));\n    this.updateHighlights();\n    this.toggleExtractsAction.update();\n  }\n\n  /**\n   * Toggle the highlight of a specific type\n   */\n  toggleHighlight(highlight: string) {\n    if(this.highlightsPref.includes(highlight)) {\n      this.highlightsPref = this.highlightsPref.filter(hl => hl !== highlight);\n    }\n    else {\n      this.highlightsPref = this.highlightsPref.concat(highlight);\n    }\n    this.updateHighlights();\n    this.toggleEntitiesAction.update();\n    this.toggleExtractsAction.update();\n  }\n\n  selectMostRelevant() {\n    if(this.data?.highlightsPerCategory['matchingpassages']?.values.length) {\n      this.select(this.getMostRelevantId('matchingpassages'));\n    }\n    else if(this.data?.highlightsPerCategory['extractslocations']?.values.length) {\n      this.select(this.getMostRelevantId('extractslocations'));\n    }\n  }\n\n  getMostRelevantId(type: string) {\n    const passages = this.data?.highlightsPerCategory[type]?.values[0].locations.map(l => l.start).sort((a,b) => a-b);\n    const idx = passages?.findIndex(start => start === this.data?.highlightsPerCategory[type]?.values[0].locations[0].start);\n    return `${type}_${idx}`;\n  }\n\n  select(id: string) {\n    if(this.selectedId$.value === id) {\n      this.unselect();\n    }\n    else {\n      const usePassageHighlighter = this.usePassageHighlighter.some(highlight => id.startsWith(highlight));\n      this.sendMessage({ action: 'select', id, usePassageHighlighter});\n      this.selectedId$.next(id);\n    }\n  }\n\n  unselect() {\n    this.sendMessage({action: 'unselect'});\n    this.selectedId$.next(undefined);\n  }\n\n  getHtml(highlight: string): Observable<string[]> {\n    if(this.preview && this.data && this.url) {\n\n      // Generate the list of items we want to retrieve\n      const ids = this.data.highlightsPerCategory[highlight]?.values[0]?.locations.map(\n        (_,i) => `${highlight}_${i}`\n      );\n\n      if(ids?.length) {\n        const obs = new Subject<string[]>();\n        this.previewFrames.subscribe<string[]>(this.url, 'get-html-results', data => obs.next(data));\n        this.sendMessage({action: 'get-html', ids});\n        return obs.asObservable();\n      }\n    }\n    return of([]);\n  }\n\n\n  selectEntity(type: string, value: string, index=0) {\n    if (this.data) {\n      const entity = this.data.highlightsPerCategory[type].values\n        .find(v => v.value === value);\n      if(entity) {\n        const start = entity.locations[index].start;\n        this.selectStart(type, start, entity.value);\n      }\n    }\n  }\n\n  selectStart(type: string, start: number, value?: string) {\n    if(this.data) {\n      const location = Object.values(this.data.highlightsPerLocation)\n        .find(l => l.start === start && l.positionInCategories.hasOwnProperty(type) && (!value || l.values.includes(value)));\n      const id = location?.positionInCategories[type];\n      if(typeof id === 'number') {\n        this.select(`${type}_${id}`);\n      }\n    }\n  }\n\n  // Manage user preferences for entity/extract highlighting\n\n  get allHighlights(): string[] {\n    return this.highlightColors.map(hl => hl.name);\n  }\n\n  get defaultHighlights(): string[] {\n    return this.allHighlights.filter(\n      hl => this.extracts.includes(hl)? this.highlightExtracts : this.highlightEntities\n    );\n  }\n\n  get highlightsPref(): string[] {\n    // Get preferences from user settings\n    const values = this.prefs.get(`${this.preferenceName}-highlights`);\n    // check if the \"values\" is an array\n    return (values !== undefined && Array.isArray(values))\n    ? values\n    : this.defaultHighlights ?? this.allHighlights; // Or from the highlight colors\n  }\n\n  set highlightsPref(pref: string[]) {\n    this.prefs.set(`${this.preferenceName}-highlights`, pref);\n  }\n\n  gotoPage(page: number) {\n    this.currentPage = page;\n    this.sendMessage({ action: 'goto-page', page });\n  }\n\n  nextPage() {\n    this.currentPage = this.currentPage + 1;\n    this.sendMessage({ action: 'next-page' });\n  }\n  prevPage() {\n    this.currentPage = this.currentPage - 1;\n    this.sendMessage({ action: 'prev-page' });\n  }\n  firstPage() {\n    this.currentPage = 1;\n    this.sendMessage({ action: 'first-page' });\n  }\n  lastPage() {\n    this.currentPage = this.totalPages;\n    this.sendMessage({ action: 'last-page' });\n  }\n\n}\n","\n<sq-loading-bar [active]=\"loading\"></sq-loading-bar>\n\n<preview-navigator class=\"m-2 position-absolute top-0 z-1\"\n  [total]=\"totalPages\"\n  [current]=\"currentPage\"\n  (firstPage)=\"firstPage()\"\n  (prevPage)=\"prevPage()\"\n  (nextPage)=\"nextPage()\"\n  (lastPage)=\"lastPage()\"\n  (gotoPage)=\"gotoPage($event)\"\n></preview-navigator>\n<iframe *ngIf=\"safeUrl && !isExcelDocFormat; else noSandbox\" class=\"position-absolute top-0\"\n  #preview\n  [src]=\"safeUrl\"\n  sandbox=\"allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts\"\n  (load)=\"onLoad()\">\n</iframe>\n<ng-template #noSandbox>\n  <iframe *ngIf=\"safeUrl\" class=\"position-absolute top-0\"\n    #preview\n    [src]=\"safeUrl\"\n    (load)=\"onLoad()\">\n  </iframe>\n</ng-template>\n\n<ng-content></ng-content>\n","import { ConnectedPosition, Overlay, OverlayPositionBuilder, OverlayRef } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { Component, Input, OnDestroy, OnInit, TemplateRef, ViewChild } from \"@angular/core\";\nimport { TooltipComponent } from \"@sinequa/components/utils\";\nimport { Action } from \"@sinequa/components/action\";\nimport { Preview } from \"../preview.component\";\nimport { PreviewFrameService } from \"../preview-frames.service\";\nimport { Subscription } from \"rxjs\";\n\ninterface EntityHoverEvent {id: string, position: DOMRect};\ninterface TextSelectionEvent {selectedText: string, position: DOMRect};\n\nexport interface PreviewEntityOccurrence {\n  id: string;\n  type: string;\n  index: number;\n  count: number;\n  value: string;\n  label: string;\n  display: string;\n  position: DOMRect;\n}\n\n@Component({\n    selector: 'sq-preview-tooltip',\n    templateUrl: './preview-tooltip.component.html',\n    standalone: false\n})\nexport class PreviewTooltipComponent implements OnInit, OnDestroy {\n  /** Actions to display above a hovered entity */\n  @Input() entityActions?: Action[];\n\n  /** Actions to display above a selected text */\n  @Input() textActions?: Action[];\n\n  entityNavActions: Action[];\n\n  @ViewChild(TemplateRef) tooltipTpl: TemplateRef<any>;\n\n  entity?: PreviewEntityOccurrence;\n  text?: string;\n\n  placement: ConnectedPosition = {\n    originX: \"center\",\n    originY: \"top\",\n    overlayX: \"center\",\n    overlayY: \"bottom\",\n    offsetY: -2\n  }\n\n  overlayRef?: OverlayRef;\n\n  sub: Subscription;\n\n  constructor(\n    public overlayPositionBuilder: OverlayPositionBuilder,\n    public overlay: Overlay,\n    public previewFrames: PreviewFrameService,\n    public preview: Preview\n  ) {}\n\n  ngOnInit(): void {\n    this.sub = this.preview.ready.subscribe(() => {\n      this.initTooltip(this.preview?.url!);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.detach();\n    this.sub.unsubscribe();\n  }\n\n  showTooltip(position: DOMRect) {\n    this.detach();\n\n    if(!this.preview) {\n      return;\n    }\n\n    const preview = this.preview.el.nativeElement.getBoundingClientRect();\n    const y = preview.y + position.y * this.preview.scale;\n    const x = preview.x + position.x * this.preview.scale;\n    const width = position.width * this.preview.scale;\n    const height = position.height * this.preview.scale;\n\n    // set the tooltip's position strategy\n    const positionStrategy = this.overlayPositionBuilder\n      .flexibleConnectedTo({x, y, width, height})\n      .withPositions([this.placement]);\n\n    const scrollStrategy = this.overlay.scrollStrategies.close();\n    this.overlayRef = this.overlay.create({positionStrategy, scrollStrategy});\n\n    const tooltipRef = this.overlayRef.attach(new ComponentPortal(TooltipComponent));\n    tooltipRef.instance.template = this.tooltipTpl;\n  }\n\n\n  detach() {\n    this.overlayRef?.detach();\n  }\n\n\n  // Tooltip management\n\n  /**\n   * Subscribe to the preview events needed to display or hide the tooltip.\n   * The subscription is needed for a given preview URL\n   */\n  initTooltip(url: string) {\n    this.previewFrames.subscribe<EntityHoverEvent|undefined>(url, 'highlight-hover',\n      (event) => this.onHighlightHover(event)\n    );\n    this.previewFrames.subscribe<TextSelectionEvent|undefined>(url, 'text-selection',\n      (event) => this.onTextSelection(event)\n    );\n    this.previewFrames.subscribe<{x: number, y: number}>(url, 'scroll',\n      (event) => this.onScroll(event)\n    );\n  }\n\n  tooltipTimeout?: NodeJS.Timeout;\n\n  onHighlightHover(event: EntityHoverEvent|undefined) {\n    if(this.text) {\n      return; // Text selection has priority over entity hover\n    }\n    if(event) {\n      this.cancelHideTooltip();\n      this.showEntityTooltip(event);\n    }\n    else {\n      this.initHideTooltip();\n    }\n  }\n\n  onTextSelection(event: TextSelectionEvent|undefined) {\n    if(event && this.textActions) {\n      this.cancelHideTooltip();\n      this.showTextTooltip(event);\n    }\n    else {\n      this.hideTextTooltip();\n    }\n  }\n\n  showEntityTooltip(event: EntityHoverEvent) {\n    if(this.preview?.data) {\n      const i = event.id.lastIndexOf('_');\n      const type = event.id.substring(0, i);\n      // TODO Refactor this mess with better data structures from new web service\n      const positionInCategories = +event.id.substring(i+1);\n      const location = (this.preview?.data.highlightsPerLocation as any).find(value => value.positionInCategories[type] === positionInCategories);\n      const display = location.displayValue;\n      const category = this.preview?.data.highlightsPerCategory[type];\n      const entity = category.values.find(v => location.values.includes(v.value));\n      const occurrences = entity?.locations;\n      const count = occurrences?.length || 0;\n      const index = occurrences?.findIndex(o => o.start === location.start) || 0;\n      const value = entity?.value;\n      const label = category.categoryDisplayLabel;\n      if(value) {\n        this.text = undefined;\n        this.entity = {...event, type, index, count, value, display, label};\n        this.entityActions?.forEach(action => action.data = entity);\n        this.entityNavActions = [\n          new Action({\n            icon: 'fas fa-chevron-left',\n            disabled: this.entity.index === 0,\n            action: () => this.preview?.selectEntity(this.entity!.type, this.entity!.value, this.entity!.index-1)\n          }),\n          new Action({\n            icon: 'fas fa-chevron-right',\n            disabled: this.entity.index === this.entity.count-1,\n            action: () => this.preview?.selectEntity(this.entity!.type, this.entity!.value, this.entity!.index+1)\n          })\n        ];\n        this.showTooltip(event.position);\n      }\n    }\n  }\n\n  showTextTooltip(event: TextSelectionEvent) {\n    this.entity = undefined;\n    this.textActions?.forEach(action => {\n      action.data = event.selectedText;\n      action.messageParams = {values:{text: event.selectedText}};\n    });\n    this.text = event.selectedText;\n    this.showTooltip(event.position);\n  }\n\n  hideTextTooltip() {\n    this.text = undefined;\n    this.hideTooltip();\n  }\n\n  initHideTooltip() {\n    this.tooltipTimeout = setTimeout(() => this.hideTooltip(), 200);\n  }\n\n  hideTooltip() {\n    this.detach();\n    this.cancelHideTooltip();\n  }\n\n  cancelHideTooltip() {\n    if(this.tooltipTimeout) {\n      clearTimeout(this.tooltipTimeout);\n      delete this.tooltipTimeout;\n    }\n  }\n\n  onScroll(event: {x: number, y: number}) {\n    this.hideTooltip();\n  }\n\n}\n","\n<ng-template>\n\n  <div *ngIf=\"entity\"\n    class=\"sq-tooltip d-flex align-items-center\"\n    (mouseenter)=\"cancelHideTooltip()\"\n    (mouseleave)=\"initHideTooltip()\">\n    <span class=\"text-truncate\">\n      <b>{{entity.display}}</b> ({{entity.label | sqMessage}})\n    </span>\n    <span class=\"ms-1 text-nowrap\"> {{entity.index+1}} / {{entity.count}}</span>\n    <div class=\"btn-group btn-group-sm ms-3\" [sq-action-buttons]=\"{items: entityNavActions, style:'secondary'}\"></div>\n    <div class=\"btn-group btn-group-sm ms-2\" [sq-action-buttons]=\"{items: entityActions, style:'secondary'}\" *ngIf=\"entityActions\"></div>\n  </div>\n\n  <div *ngIf=\"text && textActions\">\n    <div class=\"btn-group btn-group-sm\" [sq-action-buttons]=\"{items: textActions, style:'secondary'}\"></div>\n  </div>\n\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { merge, Subscription } from 'rxjs';\nimport { PreviewFrameService } from '../preview-frames.service';\nimport { Preview } from '../preview.component';\n\nexport interface MinimapItem {\n  id: string;\n  type: string;\n  top: number;\n  height: number | undefined;\n  text: string;\n}\n\n@Component({\n    selector: 'sq-preview-minimap',\n    templateUrl: './preview-minimap.component.html',\n    styleUrls: [`./preview-minimap.component.scss`],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PreviewMinimapComponent implements OnInit {\n  /** Which highlight type should the minimap display */\n  @Input() minimapType = 'extractslocations';\n\n  locations?: MinimapItem[];\n  selectedLocation?: MinimapItem;\n  selectedId?: string;\n\n  sub: Subscription;\n\n  constructor(\n    public previewFrames: PreviewFrameService,\n    public preview: Preview,\n    public cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n\n    const minimapChange$ = merge(\n      this.preview.ready,\n      this.preview.resize\n    )\n\n    this.sub = minimapChange$.subscribe(() => {\n      this.initMinimap(this.preview?.url!);\n    });\n\n    this.sub.add(this.preview.selectedId$.subscribe(id => {\n      this.selectedId = id;\n      this.selectedLocation = undefined; // SelectedLocation is updated asynchronously\n      this.cdr.detectChanges();\n    }));\n\n    // Manually make space for the minimap in the parent preview component\n    this.preview.el.nativeElement.style.paddingRight = \"1rem\";\n  }\n\n  ngOnDestroy(): void {\n    this.sub.unsubscribe();\n  }\n\n  // Minimap management\n\n  initMinimap(url: string) {\n    this.preview.sendMessage({action: 'get-positions', highlight: this.minimapType});\n    this.previewFrames.subscribe<MinimapItem[]>(url, 'get-positions-results', locations => {\n      this.locations = locations;\n      this.cdr.detectChanges();\n    });\n    this.previewFrames.subscribe<MinimapItem>(url, 'selected-position', location => {\n      this.selectedLocation = location;\n      this.cdr.detectChanges();\n    });\n  }\n\n}\n","\n<a *ngFor=\"let location of locations\"\n  role=\"button\"\n  class=\"minimap-section\"\n  [ngClass]=\"{selected: location.id === selectedId}\"\n  (click)=\"preview.select(location.id)\"\n  [title]=\"location.text\"\n  [style.top.%]=\"location.top\"\n  [style.height.%]=\"location.height\">\n</a>\n\n<!-- Marker for the selected element (if not already in the list above) -->\n<div *ngIf=\"selectedLocation && selectedLocation.type !== minimapType\"\n  class=\"minimap-section selected\"\n  [title]=\"selectedLocation.text\"\n  [style.top.%]=\"selectedLocation.top\"\n  [style.height.%]=\"selectedLocation.height\">\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { PreviewData } from '@sinequa/core/web-services';\nimport { Action } from \"@sinequa/components/action\";\nimport { Preview, PreviewHighlightColors } from '../preview.component';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\n\nexport type Extract = {\n  id: string,\n  text: SafeHtml, // Sanitized HTML text\n  startIndex : number, // this is the start index of the extracts within the Document Text\n  relevanceIndex : number, // 0 the most relevant to N the less relevant\n  textIndex : number // index of the extract in the text. e.g 0 is the first extract displayed in the document\n}\n\ntype ExtractsLocations = Extract & {\n  text: string // HTML text\n}\n\n@Component({\n    selector: 'sq-preview-extracts-panel',\n    templateUrl: './preview-extracts-panel.component.html',\n    styleUrls: ['./preview-extracts-panel.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PreviewExtractsPanelComponent implements OnChanges, OnDestroy {\n  @Input() previewData: PreviewData;\n  @Input() preview: Preview;\n  @Input() type = \"extractslocations\";\n  @Input() highlights: PreviewHighlightColors[];\n\n  /** Whether the extracts pagination should be displayed at the footer of the side menu */\n  @Input() showPagination = true;\n\n  /** The number of items per page */\n  @Input() extractsNumber: number = 10;\n\n  extracts: Extract[] = [];\n  displayedExtracts: Extract[] = [];\n  sortAction: Action;\n  currentIndex = -1;\n  scrollIndex: number;\n  loading = false;\n\n  constructor(\n    public cdr: ChangeDetectorRef,\n    public sanitizer: DomSanitizer\n  ) { }\n\n  /**\n   * Extracts the list of extracts from the preview document\n   */\n  ngOnChanges(changes: SimpleChanges) {\n    if(changes.previewData && this.previewData) {\n      this.fetchExtracts(this.previewData);\n      this.buildSortAction();\n      this.updateCurrentIndex();\n    }\n    if(this.preview && !this.sub) {\n      this.sub = this.preview.selectedId$.subscribe(() => this.updateCurrentIndex());\n    }\n  }\n\n  sub?: Subscription;\n  ngOnDestroy(): void {\n    this.sub?.unsubscribe();\n  }\n\n  private fetchExtracts(data: PreviewData) {\n    this.loading = true;\n    this.preview.getHtml(this.type).subscribe(extracts => {\n      // extracts contains the html of extracts in chronological order\n      // locations contains the list of start positions sorted by score\n      const locations = data.highlightsPerCategory[this.type]?.values[0]?.locations || [];\n\n      // first extract all the extracts locations\n      let extractslocations = locations.map((l, relevanceIndex) => ({\n        startIndex: l.start,\n        relevanceIndex\n      })) as ExtractsLocations[];\n\n      // sort them by start index\n      extractslocations.sort((a,b) => a.startIndex - b.startIndex);\n\n      // then extract the text of each extract\n      extractslocations  = extractslocations.map((ex,textIndex) =>  ({\n        ...ex,\n        textIndex: textIndex,\n        text: extracts[textIndex] || \"\",\n        id: `${this.type}_${textIndex}`,\n      }));\n\n      // then sanitize the text and remove empty extracts\n      this.extracts = extractslocations.filter(item => item.text.trim().length > 0).map(item =>  ({\n        ...item,\n        text: this.sanitizer.bypassSecurityTrustHtml(item.text)\n      }));\n\n\n      // finally sort them by relevance index\n      this.extracts.sort((a,b) => a.relevanceIndex - b.relevanceIndex);\n\n      this.loading = false;\n      this.cdr.detectChanges();\n    });\n  }\n\n  updateCurrentIndex() {\n    const selectedId = this.preview.selectedId$.getValue();\n    this.currentIndex = this.extracts.length && selectedId ? this.extracts.findIndex(e => e.id === selectedId) : -1;\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Build Sort Action for Extracts\n   * @param i\n   */\n  buildSortAction() {\n    this.sortAction = new Action({\n      icon: 'fas fa-sort-amount-down',\n      title: \"msg#sortSelector.sortByTitle\",\n      messageParams: { values: { text: \"msg#preview.relevanceSortHighlightButtonText\" } },\n      text: \"msg#preview.relevanceSortHighlightButtonText\",\n      children: [\n        new Action({\n          icon: 'fas fa-sort-amount-down',\n          text: \"msg#preview.relevanceSortHighlightButtonText\",\n          action: item => this.updateSort(item.text!, 'relevanceIndex')\n        }),\n        new Action({\n          icon: 'fas fa-sort-amount-down',\n          text: \"msg#preview.textOrderSortHighlightButtonText\",\n          action: item => this.updateSort(item.text!, 'textIndex')\n        })\n      ]\n    });\n\n  }\n\n  updateSort(text: string, key: 'textIndex' | 'relevanceIndex') {\n    // return a new map to re-render the collection\n    this.extracts = this.extracts.map(el => el).sort((a, b) => a[key] - b[key]);\n    this.sortAction.text = text;\n    this.sortAction.messageParams = { values: { text } };\n    this.currentIndex = 0;\n    this.scrollExtract(this.extracts[0]);\n  }\n\n  /**\n   * Scroll to a specific extract\n   * @param i\n   */\n  scrollExtract(extract: Extract) {\n    // extracts are always at textIndex position whatever the sort\n    this.preview.select(`${this.type}_${extract.textIndex}`);\n  }\n\n\n  /**\n   * Select the previous extract in the list\n   */\n  previousExtract() {\n    this.currentIndex--;\n    this.scrollIndex = this.currentIndex;\n    this.scrollExtract(this.displayedExtracts[this.currentIndex]);\n  }\n\n  /**\n   * Select the next extract in the list\n   */\n  nextExtract() {\n    this.currentIndex++;\n    this.scrollIndex = this.currentIndex;\n    this.scrollExtract(this.displayedExtracts[this.currentIndex]);\n  }\n}\n","<ng-container *ngIf=\"(previewData && !loading) else loadingTpl\">\n\n  <div class=\"text-center text-muted\" *ngIf=\"extracts?.length === 0; else extractsTpl\">\n    <span>{{ 'msg#preview.noextract' | sqMessage}}</span>\n  </div>\n\n  <ng-template #extractsTpl>\n\n    <div class=\"d-flex flex-row-reverse px-3 py-2\">\n      <div class=\"btn-group\" [sq-action-buttons]=\"{items: [sortAction], autoAdjust: true, style: 'link'}\"></div>\n    </div>\n\n    <sq-virtual-scroller class=\"flex-grow-1 overflow-auto mb-4 list-group\"\n      id=\"extracts-list\"\n      [list]=\"extracts\"\n      [itemsNumber]=\"extractsNumber\"\n      [scrollIndex]=\"scrollIndex\"\n      (newList)=\"displayedExtracts = $event\">\n\n      <div *ngFor=\"let extract of displayedExtracts; let i = index\"\n        class=\"px-2 px-lg-3\"\n        [sqScrollIntoView]=\"{active: i === currentIndex, first: i === 0}\"\n        [id]=\"'extract-' + extract.relevanceIndex\">\n        <a role=\"button\"\n          class=\"my-2 list-group-item list-group-item-action\"\n          [ngClass]=\"{'active': currentIndex === i}\"\n          (click)=\"scrollExtract(extract)\">\n          <p class=\"m-0\" [innerHTML]=\"extract.text\"></p>\n        </a>\n        <hr class=\"my-0 mx-3\">\n      </div>\n\n    </sq-virtual-scroller>\n\n    <div class=\"d-flex align-items-center justify-content-between p-4 pt-0\" *ngIf=\"showPagination\">\n      <button class=\"btn btn-primary\" (click)=\"previousExtract()\" [disabled]=\"currentIndex < 1\">\n        <div class=\"d-flex align-items-center\">\n          <i class=\"fas fa-arrow-left\"></i>\n          <span class=\"d-none d-md-block ms-md-2\">{{ 'msg#preview.previous' | sqMessage}}</span>\n        </div>\n      </button>\n      <div *ngIf=\"currentIndex >= 0\" class=\"extracts-counter\">\n        {{currentIndex+1}}/{{extracts?.length}}\n      </div>\n      <button class=\"btn btn-primary\" (click)=\"nextExtract()\" [disabled]=\"currentIndex >= extracts.length-1\">\n        <div class=\"d-flex align-items-center\">\n          <span class=\"d-none d-md-block me-md-2\">{{ 'msg#preview.next' | sqMessage}}</span>\n          <i class=\"fas fa-arrow-right\"></i>\n        </div>\n      </button>\n    </div>\n  </ng-template>\n\n</ng-container>\n\n<ng-template #loadingTpl>\n  <div class=\"d-flex justify-content-center align-items-center h-100\">\n    <div class=\"spinner-grow\" role=\"status\"></div>\n  </div>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { HighlightValue, PreviewData, CCColumn } from '@sinequa/core/web-services';\nimport { AbstractFacet } from '@sinequa/components/facet';\nimport { Action } from '@sinequa/components/action';\nimport { AppService } from '@sinequa/core/app-utils';\nimport { Preview, PreviewHighlightColors } from '../preview.component';\nimport { map, Observable, Subscription, tap } from 'rxjs';\n\ninterface PreviewEntity {\n  display: string;\n  ids: number[];\n  current?: number;\n}\n\n@Component({\n    selector: 'sq-preview-entity-facet',\n    templateUrl: './preview-entity-facet.component.html',\n    styleUrls: ['./preview-entity-facet.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PreviewEntityFacetComponent extends AbstractFacet implements OnChanges, OnDestroy {\n  @Input() entity: string;  // Required from init\n  @Input() data: HighlightValue[];  // Required from init\n  @Input() previewData: PreviewData;  // Required from init and does not change (facet is rebuilt if it does)\n  @Input() preview: Preview;\n  @Input() count: number = 10;\n  @Input() sortFreq: boolean = true;\n  @Input() label?: string;\n  @Input() icon?: string;\n  @Input() highlights?: PreviewHighlightColors;\n\n  _actions: Action[];\n\n  items: PreviewEntity[];\n\n  column: CCColumn | undefined;\n\n  sortFreqAction: Action;\n  sortAlphaAction: Action;\n\n  highlighted$: Observable<string>;\n\n  constructor(\n    public appService:AppService,\n    public cdRef: ChangeDetectorRef\n  ) {\n    super();\n\n    this._actions = [\n      new Action({\n        action: () => {\n          this.sortFreq = !this.sortFreq;\n          this.updateSort();\n          this.cdRef.detectChanges();\n        },\n        updater: action => {\n          action.icon = this.sortFreq? \"fas fa-fw fa-sort-amount-down\" : \"fas fa-fw fa-sort-alpha-down\";\n          action.title = this.sortFreq? \"msg#preview.sortFrequency\" : \"msg#preview.sortAlphabetically\";\n        }\n      })\n    ];\n  }\n\n  override get actions(): Action[]{\n    return this._actions;\n  }\n\n  /**\n   * Since the preview document comes after the preview data, we need to wait for that change\n   * and apply the hidden state in the document.\n   * @param changes\n   */\n  ngOnChanges(changes: SimpleChanges) {\n    if(changes.data) {\n      this.column = this.appService.getColumn(this.entity);\n      this.updateValues();\n    }\n    if(changes.sortFreq) {\n      this.updateSort();\n    }\n    if(this.preview && !this.sub) {\n\n      // Listen to changes of the preview's currently selected id, and update the state of this component accordingly\n      this.sub = this.preview.selectedId$.pipe(\n        tap(id => this.updateSelected(id))\n      ).subscribe(() => this.cdRef.detectChanges());\n\n      // Listen to changes of the preview's currently highlighted categories, and update the state of this component accordingly\n      this.highlighted$ = this.preview.highlights$.pipe(\n        map(hl => hl.includes(this.entity)? 'highlighted' : '')\n      );\n    }\n  }\n\n  sub?: Subscription;\n  ngOnDestroy() {\n    this.sub?.unsubscribe();\n  }\n\n  /**\n   * Returns the entities to be displayed in the facet, performing truncation and sorting of the input list\n   */\n  updateValues() {\n    // Map of items by value\n    const items: Record<string,PreviewEntity> = Object.fromEntries(\n      this.data.map(d => [d.value, {display: d.displayValue, ids: []}])\n    );\n\n    // For each highlight location\n    for (let i = 0; i < this.previewData.highlightsPerLocation['length']; i++) {\n      const highlight = this.previewData.highlightsPerLocation[i];\n      const index = highlight.positionInCategories[this.entity];\n      if(typeof index === 'number') {\n        for (const value of highlight.values) {\n          items[value]?.ids.push(index);\n        }\n      }\n    }\n\n    this.items = Object.values(items);\n    this.updateSort();\n  }\n\n  /**\n   * Update the order of items\n   */\n  updateSort() {\n    this.items.sort((a,b) => {\n      const d = b.ids.length - a.ids.length;\n      return this.sortFreq && d !== 0?  d : a.display.localeCompare(b.display);\n    });\n    this._actions[0].update();\n  }\n\n  /**\n   * selectedId is the id of the currently selected highlight\n   * in the form \"company_123\". If this facet displays the entity \"company\",\n   * then we set occurrence 123 of this entity as the \"current\" one\n   */\n  updateSelected(selectedId: string|undefined) {\n    let id = -1;\n    if(selectedId) {\n      const i = selectedId.lastIndexOf('_');\n      const type = selectedId.slice(0, i);\n      if(type === this.entity) {\n        id = +selectedId.slice(i+1);\n      }\n    }\n    this.setCurrent(id);\n  }\n\n  /**\n   * For each entity in this facet, search for an occurrence of the given id, and\n   * set the \"current\" property of this entity accordingly (= the index of the currently\n   * selected occurrence).\n   */\n  setCurrent(id: number) {\n    this.items.forEach(item => item.current = item.ids.indexOf(id)+1);\n  }\n\n\n  /**\n   * Shows all the entities in the list\n   */\n  showAll(){\n    this.count = this.data.length;\n  }\n\n  /**\n   * Navigate to the next value of this entity.\n   * Modifies the provided preview document.\n   * @param value\n   */\n  nextEntity(value: PreviewEntity){\n    const i = value.current && value.current < value.ids.length? value.current+1 : 1;\n    this.selectEntity(value.ids[i-1]);\n  }\n\n  /**\n   * Navigate to the next value of this entity.\n   * Modifies the provided preview document.\n   * @param value\n   */\n  prevEntity(value: PreviewEntity){\n    const i = value.current && value.current > 1? value.current-1 : 1;\n    this.selectEntity(value.ids[i-1]);\n  }\n\n  /**\n   * Navigate to the given occurrence of an entity in a specific category\n   * Modifies the provided preview document.\n   * @param category\n   * @param value\n   * @param i\n   */\n  selectEntity(id: number){\n    this.preview.select(`${this.entity}_${id}`);\n  }\n\n  toggleHighlight() {\n    this.preview.toggleHighlight(this.entity);\n  }\n\n}\n","<div class=\"list-group list-group-flush entity-facet\">\n  <div *ngFor=\"let item of items | slice:0:count\"\n    class=\"list-group-item align-items-center border-0 py-1 px-3 d-flex\">\n    <span class=\"mx-1 text-truncate\">{{ item.display | sqValue:column }}</span>\n    <span class=\"text-muted small ms-auto me-1\">\n      <ng-container *ngIf=\"item.current\">{{ item.current }} / </ng-container>\n      {{ item.ids.length }}\n    </span>\n    <span class=\"text-muted px-1\" role=\"button\" (click)=\"prevEntity(item)\" title=\"{{ 'msg#preview.previous' | sqMessage }}\">\n      <i class=\"fas fa-chevron-left\"></i>\n    </span>\n    <span class=\"text-muted px-1\" role=\"button\" (click)=\"nextEntity(item)\" title=\"{{ 'msg#preview.next' | sqMessage }}\">\n      <i class=\"fas fa-chevron-right\"></i>\n    </span>\n  </div>\n  <div class=\"list-group-item border-0 py-1 text-center\" *ngIf=\"items.length > count\">\n    <a class=\"text-muted small\" role=\"button\" (click)=\"showAll()\" title=\"{{ 'msg#preview.showAll' | sqMessage }}\">\n      {{ 'msg#preview.showAll' | sqMessage }}\n    </a>\n  </div>\n</div>\n\n<ng-template #headerTpl>\n  <div class=\"header text-truncate py-1 me-2\"\n    [ngClass]=\"highlighted$ | async\"\n    role=\"button\"\n    (click)=\"toggleHighlight()\"\n    [sqTooltip]=\"'msg#preview.toggleHighlight' | sqMessage\"\n    [style.--sq-entity-color]=\"highlights?.color\"\n    [style.--sq-entity-bg-color]=\"highlights?.bgColor\">\n    <i [ngClass]=\"icon\" *ngIf=\"icon\"></i>\n    <span class=\"ms-2\">{{label | sqMessage}}</span>\n  </div>\n</ng-template>\n\n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { HighlightValue, PreviewData } from '@sinequa/core/web-services';\nimport { Preview, PreviewHighlightColors } from '../preview.component';\n\n@Component({\n    selector: 'sq-preview-entity-panel',\n    templateUrl: './preview-entity-panel.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class PreviewEntityPanelComponent implements OnChanges {\n  @Input() preview: Preview;\n  @Input() previewData: PreviewData;\n  @Input() style: string;\n  @Input() ignored = [\"extractslocations\", \"matchingpassages\"];\n  @Input() highlights?: PreviewHighlightColors[];\n\n  entities: {\n    type: string,\n    icon: string,\n    display: string,\n    values: HighlightValue[],\n    highlights?: PreviewHighlightColors\n  }[] | undefined;\n\n  /**\n   * Extracts the list of entities from the preview data\n   */\n  ngOnChanges() {\n\n    if(!this.previewData) {\n      this.entities = undefined;\n      return;\n    }\n\n    this.entities = Object.entries(this.previewData.highlightsPerCategory)\n      .filter(([type, data]) => !this.ignored.includes(type) && data.values?.length)\n      .map(([type, data]) => ({\n        type,\n        values: data.values,\n        icon: \"sq-icon-\"+type,\n        display: data.categoryDisplayLabelPlural || data.categoryDisplayLabel,\n        highlights: this.highlights?.find(hl => hl.name === type)\n      }));\n  }\n\n}\n","<sq-facet-card *ngFor=\"let entity of entities\"\n  class=\"my-3\"\n  [collapsible]=\"false\"\n  [buttonsStyle]=\"style\">\n  <sq-preview-entity-facet #facet\n    [entity]=\"entity.type\"\n    [data]=\"entity.values\"\n    [preview]=\"preview\"\n    [previewData]=\"previewData\"\n    [label]=\"entity.display\"\n    [icon]=\"entity.icon\"\n    [highlights]=\"entity.highlights\">\n  </sq-preview-entity-facet>\n</sq-facet-card>\n\n<div class=\"d-flex justify-content-center align-items-center h-100\" *ngIf=\"!entities\">\n  <div class=\"spinner-grow\" role=\"status\"></div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\n\nimport { IntlModule } from \"@sinequa/core/intl\";\nimport { WebServicesModule } from \"@sinequa/core/web-services\";\nimport { UtilsModule } from \"@sinequa/components/utils\";\nimport { BsActionModule } from \"@sinequa/components/action\";\nimport { BsFacetModule } from \"@sinequa/components/facet\";\nimport { BsSearchModule } from \"@sinequa/components/search\";\n\nimport { Preview } from \"./preview.component\";\nimport { PreviewSearchFormComponent } from './preview-search-form/preview-search-form.component';\nimport { PreviewTooltipComponent } from \"./preview-tooltip/preview-tooltip.component\";\nimport { PreviewExtractsPanelComponent } from './preview-extracts-panel/preview-extracts-panel.component';\nimport { PreviewMinimapComponent } from \"./preview-minimap/preview-minimap.component\";\nimport { PreviewEntityFacetComponent } from \"./preview-entity-facet/preview-entity-facet.component\";\nimport { PreviewEntityPanelComponent } from \"./preview-entity-panel/preview-entity-panel.component\";\nimport { PreviewNavigator } from \"./preview-navigator\";\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    IntlModule,\n    WebServicesModule,\n    UtilsModule,\n    BsActionModule,\n    BsFacetModule,\n    BsSearchModule,\n    PreviewNavigator\n  ],\n  declarations: [\n    Preview,\n    PreviewSearchFormComponent,\n    PreviewExtractsPanelComponent,\n    PreviewEntityFacetComponent,\n    PreviewEntityPanelComponent,\n\n    PreviewTooltipComponent,\n    PreviewMinimapComponent,\n  ],\n  exports: [\n    Preview,\n    PreviewSearchFormComponent,\n    PreviewExtractsPanelComponent,\n    PreviewEntityFacetComponent,\n    PreviewEntityPanelComponent,\n\n    PreviewTooltipComponent,\n    PreviewMinimapComponent\n  ],\n})\nexport class PreviewModule { }\n","export default {\n    \"preview\": {\n        \"previous\": \"Previous\",\n        \"next\": \"Next\",\n        \"relevanceSortHighlightButtonText\": \"Relevance\",\n        \"textOrderSortHighlightButtonText\": \"Text order\",\n        \"showAll\": \"Show all values\",\n        \"sortAlphabetically\": \"Sort alphabetically\",\n        \"sortFrequency\": \"Sort by frequency\",\n        \"loading\": \"Loading...\",\n        \"noextract\": \"No extract\",\n        \"search\": \"Search\",\n        \"closeTitle\": \"Close\",\n        \"expandTitle\": \"Maximize\",\n        \"minimize\": \"Zoom out\",\n        \"maximize\": \"Zoom in\",\n        \"toggleHighlight\": \"Toggle highlighting\",\n        \"toggleExtracts\": \"Toggle relevant extracts highlighting\",\n        \"toggleEntities\": \"Toggle entities highlighting\",\n        \"toggleDescription\": \"Show AI description / Hide AI description\",\n        \"extracts\": \"Relevant Extracts\",\n        \"entities\": \"Entities\",\n        \"downloadPdf\": \"Download PDF version\",\n        \"viewPreview\": \"Preview\",\n        \"viewPassages\": \"Snippets\",\n        \"viewDuplicates\": \"Duplicates\",\n        \"documentPreview\": \"Document preview\",\n        \"documentPreviewTitle\": \"This is the document preview\",\n        \"documentPreviewDescription\": \"Click on one of your search results to preview the document here.\"\n    }\n};\n","export default {\n    \"preview\": {\n        \"previous\": \"Précédent\",\n        \"next\": \"Suivant\",\n        \"relevanceSortHighlightButtonText\": \"Pertinence\",\n        \"textOrderSortHighlightButtonText\": \"Ordre du texte\",\n        \"showAll\": \"Montrer toutes les valeurs\",\n        \"sortAlphabetically\": \"Trier par ordre alphabetique\",\n        \"sortFrequency\": \"Trier par fréquence\",\n        \"loading\": \"Chargement...\",\n        \"noextract\": \"Pas d'extrait\",\n        \"search\": \"Recherche\",\n        \"closeTitle\": \"Fermer\",\n        \"expandTitle\": \"Maximiser\",\n        \"minimize\": \"Réduire\",\n        \"maximize\": \"Agrandir\",\n        \"toggleHighlight\": \"Activer/désactiver le surlignage\",\n        \"toggleExtracts\": \"Surlignage des extraits pertinents\",\n        \"toggleDescription\": \"Afficher la description de l'IA / Cacher la description de l'IA\",\n        \"extracts\": \"Extraits Pertinents\",\n        \"toggleEntities\": \"Surlignage des entités\",\n        \"entities\": \"Entités\",\n        \"downloadPdf\": \"Télécharger la version PDF\",\n        \"viewPreview\": \"Aperçu\",\n        \"viewPassages\": \"Extraits\",\n        \"viewDuplicates\": \"Doublons\",\n        \"documentPreview\": \"Aperçu de document\",\n        \"documentPreviewTitle\": \"Ceci est l'aperçu de document\",\n        \"documentPreviewDescription\": \"Cliquez sur l'un des résultats de votre recherche pour avoir un aperçu du document ici.\"\n    }\n};\n","export default {\n    \"preview\": {\n        \"previous\": \"Vorheriges\",\n        \"next\": \"Nächstes\",\n        \"relevanceSortHighlightButtonText\": \"Relevanz\",\n        \"textOrderSortHighlightButtonText\": \"Textreihenfolge\",\n        \"showAll\": \"Zeige alle Werte\",\n        \"sortAlphabetically\": \"Alphabetische Sortierung\",\n        \"sortFrequency\": \"Sortierung nach Häufigkeit\",\n        \"loading\": \"Laden...\",\n        \"noextract\": \"kein Auszug\",\n        \"search\": \"Suche\",\n        \"closeTitle\": \"Schließen\",\n        \"expandTitle\": \"Maximieren\",\n        \"minimize\": \"Rauszoomen\",\n        \"maximize\": \"hineinzoomen\",\n        \"toggleHighlight\": \"Alle Hervorhebungen schalten\",\n        \"toggleExtracts\": \"Schalten Sie die Hervorhebung relevanter Auszüge um\",\n        \"toggleEntities\": \"Schalten Sie die Hervorhebung von Objekten\",\n        \"toggleDescription\": \"AI-Beschreibung anzeigen / AI-Beschreibung ausblenden\",\n        \"extracts\": \"Relevante Auszüge\",\n        \"entities\": \"Objekten\",\n        \"downloadPdf\": \"PDF-Version herunterladen\",\n        \"viewPreview\": \"Vorschau\",\n        \"viewPassages\": \"Ausschnitte\",\n        \"viewDuplicates\": \"Duplikate\",\n        \"documentPreview\": \"Dokumentvorschau\",\n        \"documentPreviewTitle\": \"Dies ist die Dokumentenvorschau\",\n        \"documentPreviewDescription\": \"Klicken Sie auf eines Ihrer Suchergebnisse, um das Dokument hier in der Vorschau anzuzeigen.\"\n    }\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enSearch, frSearch, deSearch} from \"@sinequa/components/search\";\nimport {enCollapse, frCollapse, deCollapse} from \"@sinequa/components/collapse\";\nimport {enModal, frModal, deModal} from \"@sinequa/components/modal\";\nimport {enFacet, frFacet, deFacet} from \"@sinequa/components/facet\";\nimport {enResult, frResult, deResult} from \"@sinequa/components/result\";\n\nimport _enPreview from \"./en\";\nimport _frPreview from \"./fr\";\nimport _dePreview from \"./de\";\n\nconst enPreview = Utils.merge({}, _enPreview, enSearch, enCollapse, enModal, enFacet, enResult);\nconst frPreview = Utils.merge({}, _frPreview, frSearch, frCollapse, frModal, frFacet, frResult);\nconst dePreview = Utils.merge({}, _dePreview, deSearch, deCollapse, deModal, deFacet, deResult);\n\nexport { enPreview, frPreview, dePreview };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i1.PreviewService","i2.PreviewFrameService","i4","i6","i7","i8","i9.PreviewNavigator","i3.Preview","i5","i1.PreviewFrameService","i2.Preview","i3.PreviewEntityFacetComponent"],"mappings":"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"}