{"version":3,"file":"alfresco-aca-content-viewer.mjs","sources":["../../../../projects/aca-content/viewer/src/lib/services/viewer.service.ts","../../../../projects/aca-content/viewer/src/lib/components/viewer/viewer.component.ts","../../../../projects/aca-content/viewer/src/lib/components/viewer/viewer.component.html","../../../../projects/aca-content/viewer/src/lib/components/preview/preview.component.ts","../../../../projects/aca-content/viewer/src/lib/components/preview/preview.component.html","../../../../projects/aca-content/viewer/src/lib/viewer.module.ts","../../../../projects/aca-content/viewer/src/public-api.ts","../../../../projects/aca-content/viewer/src/alfresco-aca-content-viewer.ts"],"sourcesContent":["/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ObjectUtils, UserPreferencesService } from '@alfresco/adf-core';\nimport { FavoritePaging, Node, NodePaging, SearchRequest, ResultSetPaging, SharedLink, SharedLinkPaging } from '@alfresco/js-api';\nimport { Injectable } from '@angular/core';\nimport { ContentApiService } from '@alfresco/aca-shared';\n\ninterface AdjacentFiles {\n  left: string;\n  right: string;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ViewerService {\n  private _customNodesOrder: string[] = [];\n\n  set customNodesOrder(customNodesOrder: string[]) {\n    this._customNodesOrder = customNodesOrder;\n  }\n\n  constructor(\n    private preferences: UserPreferencesService,\n    private contentApi: ContentApiService\n  ) {}\n\n  recentFileFilters = [\n    'TYPE:\"content\"',\n    '-PATH:\"//cm:wiki/*\"',\n    '-TYPE:\"app:filelink\"',\n    '-TYPE:\"fm:post\"',\n    '-TYPE:\"cm:thumbnail\"',\n    '-TYPE:\"cm:failedThumbnail\"',\n    '-TYPE:\"cm:rating\"',\n    '-TYPE:\"dl:dataList\"',\n    '-TYPE:\"dl:todoList\"',\n    '-TYPE:\"dl:issue\"',\n    '-TYPE:\"dl:contact\"',\n    '-TYPE:\"dl:eventAgenda\"',\n    '-TYPE:\"dl:event\"',\n    '-TYPE:\"dl:task\"',\n    '-TYPE:\"dl:simpletask\"',\n    '-TYPE:\"dl:meetingAgenda\"',\n    '-TYPE:\"dl:location\"',\n    '-TYPE:\"fm:topic\"',\n    '-TYPE:\"fm:post\"',\n    '-TYPE:\"ia:calendarEvent\"',\n    '-TYPE:\"lnk:link\"'\n  ];\n\n  /**\n   * Retrieves nearest node information for the given node and folder.\n   *\n   * @param nodeId Unique identifier of the document node\n   * @param folderId Unique identifier of the containing folder node.\n   * @param source Data source name. Returns file ids for personal-files, libraries, favorites, shared and recent-files, otherwise returns empty.\n   */\n  async getNearestNodes(nodeId: string, folderId: string, source: string): Promise<AdjacentFiles> {\n    const empty: AdjacentFiles = {\n      left: null,\n      right: null\n    };\n\n    if (nodeId && folderId) {\n      try {\n        const ids = await this.getFileIds(source, folderId);\n        const idx = ids.indexOf(nodeId);\n\n        if (idx >= 0) {\n          return {\n            left: ids[idx - 1] || null,\n            right: ids[idx + 1] || null\n          };\n        }\n      } catch {}\n    }\n    return empty;\n  }\n\n  /**\n   * Retrieves a list of node identifiers for the folder and data source.\n   *\n   * @param source Data source name. Returns file ids for personal-files, libraries, favorites, shared and recent-files, otherwise returns empty.\n   * @param folderId Optional parameter containing folder node identifier for 'personal-files' and 'libraries' sources.\n   */\n  async getFileIds(source: string, folderId?: string): Promise<string[]> {\n    if (source === 'libraries') {\n      source = 'libraries-files';\n    }\n    const isClient = this.preferences.get(`${source}.sorting.mode`) === 'client';\n    const [sortKey, sortDirection, previousSortKey, previousSortDir] = this.getSortKeyDir(source);\n    let nodes: NodePaging | FavoritePaging | SharedLinkPaging | ResultSetPaging;\n\n    if (source === 'personal-files' || source === 'libraries-files') {\n      if (!folderId) {\n        return [];\n      }\n      const orderBy = isClient ? null : ['isFolder desc', `${sortKey} ${sortDirection}`];\n      nodes = await this.contentApi\n        .getNodeChildren(folderId, {\n          orderBy: orderBy,\n          fields: this.getFields(sortKey, previousSortKey),\n          where: '(isFile=true)'\n        })\n        .toPromise();\n    }\n\n    if (source === 'favorites') {\n      nodes = await this.contentApi\n        .getFavorites('-me-', {\n          where: '(EXISTS(target/file))',\n          fields: ['target']\n        })\n        .toPromise();\n    }\n\n    if (source === 'shared') {\n      nodes = await this.contentApi\n        .findSharedLinks({\n          fields: ['nodeId', this.getRootField(sortKey)]\n        })\n        .toPromise();\n    }\n\n    if (source === 'recent-files') {\n      const person = await this.contentApi.getPerson('-me-').toPromise();\n      const username = person.entry.id;\n      const query: SearchRequest = {\n        query: {\n          query: '*',\n          language: 'afts'\n        },\n        filterQueries: [\n          { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },\n          { query: `cm:modifier:${username} OR cm:creator:${username}` },\n          {\n            query: this.recentFileFilters.join(' AND ')\n          }\n        ],\n        fields: this.getFields(sortKey, previousSortKey),\n        include: ['path', 'properties', 'allowableOperations'],\n        sort: [\n          {\n            type: 'FIELD',\n            field: 'cm:modified',\n            ascending: false\n          }\n        ]\n      };\n      nodes = await this.contentApi.search(query).toPromise();\n    }\n    return this.getCustomNodesOrderIfNoNodes(nodes, isClient, previousSortKey, previousSortDir, sortKey, sortDirection);\n  }\n\n  /**\n   * Get the root field name from the property path.\n   * Example: 'property1.some.child.property' => 'property1'\n   *\n   * @param path Property path\n   */\n  getRootField(path: string): string {\n    if (path) {\n      return path.split('.')[0];\n    }\n    return path;\n  }\n\n  private sort(items: Node[] | SharedLink[], key: string, direction: string) {\n    const options: Intl.CollatorOptions = {};\n    if (key.includes('sizeInBytes') || key === 'name') {\n      options.numeric = true;\n    }\n\n    items.sort((a: Node | SharedLink, b: Node | SharedLink) => {\n      let left = ObjectUtils.getValue(a, key) ?? '';\n      left = left instanceof Date ? left.valueOf().toString() : left.toString();\n\n      let right = ObjectUtils.getValue(b, key) ?? '';\n      right = right instanceof Date ? right.valueOf().toString() : right.toString();\n\n      return direction === 'asc' ? left.localeCompare(right, undefined, options) : right.localeCompare(left, undefined, options);\n    });\n  }\n\n  private getFields(sortKey: string, previousSortKey?: string): string[] {\n    return ['id', this.getRootField(sortKey), this.getRootField(previousSortKey)];\n  }\n\n  private getSortKeyDir(source: string): string[] {\n    const previousSortKey = this.preferences.get(`${source}.sorting.previousKey`);\n    const previousSortDir = this.preferences.get(`${source}.sorting.previousDirection`);\n    const sortKey = this.preferences.get(`${source}.sorting.key`) || this.getDefaults(source)[0];\n    const sortDirection = this.preferences.get(`${source}.sorting.direction`) || this.getDefaults(source)[1];\n    return [sortKey, sortDirection, previousSortKey, previousSortDir];\n  }\n\n  private getDefaults(source: string): string[] {\n    if (source === 'personal-files' || source === 'libraries-files') {\n      return ['name', 'asc'];\n    } else {\n      return ['modifiedAt', 'desc'];\n    }\n  }\n\n  private getCustomNodesOrderIfNoNodes(\n    nodes: NodePaging | FavoritePaging | SharedLinkPaging | ResultSetPaging,\n    isClient: boolean,\n    previousSortKey: string,\n    previousSortDir: string,\n    sortKey: string,\n    sortDirection: string\n  ): string[] {\n    if (nodes) {\n      const entries = nodes.list.entries.map((obj) => obj.entry.target?.file ?? obj.entry);\n      if (isClient) {\n        if (previousSortKey) {\n          this.sort(entries, previousSortKey, previousSortDir);\n        }\n        this.sort(entries, sortKey, sortDirection);\n      }\n      return entries.map((entry) => entry.id ?? entry.nodeId);\n    } else {\n      return this._customNodesOrder;\n    }\n  }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n  AppExtensionService,\n  AppHookService,\n  AppSettingsService,\n  ContentApiService,\n  InfoDrawerComponent,\n  ToolbarComponent,\n  ToolbarMenuItemComponent\n} from '@alfresco/aca-shared';\nimport {\n  AppStore,\n  ClosePreviewAction,\n  getAppSelection,\n  isInfoDrawerOpened,\n  RefreshPreviewAction,\n  SetCurrentNodeVersionAction,\n  SetSelectedNodesAction,\n  ViewerActionTypes,\n  ViewNodeAction\n} from '@alfresco/aca-shared/store';\nimport { ContentActionRef, SelectionState } from '@alfresco/adf-extensions';\nimport { Node, VersionEntry, VersionsApi } from '@alfresco/js-api';\nimport { Component, DestroyRef, HostListener, inject, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, PRIMARY_OUTLET, Router } from '@angular/router';\nimport { ViewerOpenWithComponent, ViewerSidebarComponent, ViewerToolbarActionsComponent } from '@alfresco/adf-core';\nimport { Store } from '@ngrx/store';\nimport { from, Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { AlfrescoApiService, AlfrescoViewerComponent, DocumentListService, NodesApiService, UploadService } from '@alfresco/adf-content-services';\nimport { CommonModule } from '@angular/common';\nimport { ViewerService } from '../../services/viewer.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [\n    CommonModule,\n    InfoDrawerComponent,\n    ToolbarMenuItemComponent,\n    ToolbarComponent,\n    AlfrescoViewerComponent,\n    ViewerToolbarActionsComponent,\n    ViewerOpenWithComponent,\n    ViewerSidebarComponent\n  ],\n  selector: 'aca-viewer',\n  templateUrl: './viewer.component.html',\n  styleUrls: ['./viewer.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-viewer' }\n})\nexport class AcaViewerComponent implements OnInit, OnDestroy {\n  settings = inject(AppSettingsService);\n\n  private documentListService = inject(DocumentListService);\n\n  private _versionsApi: VersionsApi;\n  get versionsApi(): VersionsApi {\n    this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());\n    return this._versionsApi;\n  }\n\n  fileName: string;\n  folderId: string = null;\n  infoDrawerOpened$: Observable<boolean>;\n  navigateMultiple = true;\n  navigateSource: string = null;\n  navigationSources = ['favorites', 'libraries', 'personal-files', 'recent-files', 'shared'];\n  nextNodeId: string;\n  node: Node;\n  nodeId: string = null;\n  openWith: ContentActionRef[] = [];\n  previousNodeId: string;\n  selection: SelectionState;\n  showRightSide = false;\n  toolbarActions: ContentActionRef[] = [];\n  versionId: string = null;\n\n  private navigationPath: string;\n  private previewLocation: string;\n  private containersSkipNavigation = ['adf-viewer__sidebar', 'cdk-overlay-container', 'adf-image-viewer'];\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private actions$: Actions,\n    private apiService: AlfrescoApiService,\n    private appHookService: AppHookService,\n    private contentApi: ContentApiService,\n    private extensions: AppExtensionService,\n    private nodesApiService: NodesApiService,\n    private route: ActivatedRoute,\n    private router: Router,\n    private store: Store<AppStore>,\n    private uploadService: UploadService,\n    private viewerService: ViewerService\n  ) {}\n\n  ngOnInit() {\n    this.infoDrawerOpened$ = this.store.select(isInfoDrawerOpened);\n\n    from(this.infoDrawerOpened$)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((val) => {\n        this.showRightSide = val;\n      });\n\n    this.store\n      .select(getAppSelection)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((selection) => {\n        this.selection = selection;\n      });\n\n    this.extensions\n      .getViewerToolbarActions()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((actions) => {\n        this.toolbarActions = actions;\n      });\n\n    this.extensions\n      .getOpenWithActions()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((actions) => {\n        this.openWith = actions;\n      });\n\n    this.route.params.subscribe((params) => {\n      this.folderId = params.folderId;\n      const { nodeId } = params;\n      this.versionId = params.versionId;\n      if (this.versionId) {\n        void this.versionsApi.getVersion(nodeId, this.versionId).then((version: VersionEntry) => {\n          if (version) {\n            this.store.dispatch(new SetCurrentNodeVersionAction(version));\n          }\n        });\n      }\n      if (nodeId) {\n        void this.displayNode(nodeId);\n      }\n    });\n\n    this.route.queryParams.subscribe((params) => {\n      this.navigationPath = params.path || params.location;\n    });\n\n    if (this.route.snapshot.data?.navigateSource) {\n      const source = this.route.snapshot.data.navigateSource.toLowerCase();\n      if (this.navigationSources.includes(source)) {\n        this.navigateSource = this.route.snapshot.data.navigateSource;\n      }\n    }\n\n    this.actions$.pipe(ofType<ClosePreviewAction>(ViewerActionTypes.ClosePreview), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.store.dispatch(new SetCurrentNodeVersionAction(null));\n      this.navigateToFileLocation();\n    });\n\n    this.actions$\n      .pipe(ofType<RefreshPreviewAction>(ViewerActionTypes.RefreshPreview), takeUntilDestroyed(this.destroyRef))\n      .subscribe((action: RefreshPreviewAction) => {\n        this.nodesApiService.nodeUpdated.next(action.node);\n        void this.displayNode(action.node.id);\n      });\n\n    this.appHookService.nodesDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.navigateToFileLocation());\n\n    this.uploadService.fileUploadDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.navigateToFileLocation());\n\n    this.uploadService.fileUploadComplete.pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef)).subscribe((file) => {\n      this.nodesApiService.nodeUpdated.next(file.data.entry);\n      void this.displayNode(file.data.entry.id);\n    });\n\n    this.previewLocation = this.router.url.substring(0, this.router.url.indexOf('/', 1)).replace(/\\//g, '');\n  }\n\n  onViewerVisibilityChanged() {\n    this.documentListService.reload();\n    this.navigateToFileLocation();\n  }\n\n  ngOnDestroy() {\n    this.store.dispatch(new SetCurrentNodeVersionAction(null));\n  }\n\n  trackByActionId(_: number, obj: ContentActionRef): string {\n    return obj.id;\n  }\n\n  async displayNode(nodeId: string) {\n    if (nodeId) {\n      try {\n        this.node = await this.contentApi.getNodeInfo(nodeId).toPromise();\n        this.store.dispatch(new SetSelectedNodesAction([{ entry: this.node }]));\n        this.navigateMultiple = this.extensions.canShowViewerNavigation({ entry: this.node });\n\n        if (this.node?.isFile) {\n          this.nodeId = this.node.id;\n          this.fileName = this.node.name + this.node?.properties?.['cm:versionLabel'];\n          if (this.navigateMultiple) {\n            const nearest = await this.viewerService.getNearestNodes(this.node.id, this.node.parentId, this.navigateSource);\n            this.previousNodeId = nearest.left;\n            this.nextNodeId = nearest.right;\n          }\n          return;\n        }\n        this.navigateToFileLocation();\n      } catch (error) {\n        const statusCode = JSON.parse(error.message).error.statusCode;\n\n        if (statusCode !== 401) {\n          await this.router.navigate([this.previewLocation, { outlets: { viewer: null } }]).then(() => {\n            void this.router.navigate([this.previewLocation, nodeId]);\n          });\n        }\n      }\n    }\n  }\n\n  onNavigateBefore(event: MouseEvent | KeyboardEvent): void {\n    if (event.type !== 'click' && this.shouldNavigate(event.target as HTMLElement)) {\n      return;\n    }\n\n    const location = this.getFileLocation();\n    this.store.dispatch(new ViewNodeAction(this.previousNodeId, { location }));\n  }\n\n  onNavigateNext(event: MouseEvent | KeyboardEvent): void {\n    if (event.type !== 'click' && this.shouldNavigate(event.target as HTMLElement)) {\n      return;\n    }\n\n    const location = this.getFileLocation();\n    this.store.dispatch(new ViewNodeAction(this.nextNodeId, { location }));\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyboardEvent(event: KeyboardEvent) {\n    const key = event.key;\n\n    if (key === 'ArrowRight' || key === 'ArrowLeft') {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    }\n  }\n\n  private navigateToFileLocation() {\n    const location = this.getFileLocation();\n    void this.router.navigateByUrl(location);\n  }\n\n  private getFileLocation(): string {\n    return this.navigationPath || this.router.parseUrl(this.router.url).root.children[PRIMARY_OUTLET].toString();\n  }\n\n  private shouldNavigate(element: HTMLElement): boolean {\n    let currentElement = element.parentElement;\n\n    while (currentElement && !this.isChild(currentElement.classList)) {\n      currentElement = currentElement.parentElement;\n    }\n\n    return !!currentElement;\n  }\n\n  private isChild(list: DOMTokenList): boolean {\n    return Array.from(list).some((className: string) => this.containersSkipNavigation.includes(className));\n  }\n}\n","<ng-container *ngIf=\"nodeId\">\n  <adf-alfresco-viewer\n    [ngClass]=\"{\n      'aca-right_side--hide': !showRightSide\n    }\"\n    [maxRetries]=\"settings.viewerMaxRetries\"\n    [nodeId]=\"nodeId\"\n    [versionId]=\"versionId\"\n    [allowNavigate]=\"navigateMultiple\"\n    [allowRightSidebar]=\"true\"\n    [allowPrint]=\"false\"\n    [showRightSidebar]=\"true\"\n    [allowDownload]=\"false\"\n    [allowFullScreen]=\"false\"\n    [overlayMode]=\"true\"\n    [hideInfoButton]=\"true\"\n    [closeButtonPosition]=\"settings.viewerCloseButtonPosition\"\n    (showViewerChange)=\"onViewerVisibilityChanged()\"\n    [canNavigateBefore]=\"!!previousNodeId\"\n    [canNavigateNext]=\"!!nextNodeId\"\n    (navigateBefore)=\"onNavigateBefore($event)\"\n    (navigateNext)=\"onNavigateNext($event)\"\n  >\n    <adf-viewer-sidebar *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.file\" />\n    </adf-viewer-sidebar>\n\n    <adf-viewer-open-with *ngIf=\"openWith.length\">\n      <ng-container *ngFor=\"let action of openWith; trackBy: trackByActionId\">\n        <app-toolbar-menu-item [actionRef]=\"action\" />\n      </ng-container>\n    </adf-viewer-open-with>\n\n    <adf-viewer-toolbar-actions>\n      <aca-toolbar [items]=\"toolbarActions\" />\n    </adf-viewer-toolbar-actions>\n  </adf-alfresco-viewer>\n</ng-container>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, HostListener, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CommonModule, Location } from '@angular/common';\nimport { ActivatedRoute, PRIMARY_OUTLET, UrlSegment, UrlSegmentGroup, UrlTree } from '@angular/router';\nimport { debounceTime, map } from 'rxjs/operators';\nimport { ViewerModule } from '@alfresco/adf-core';\nimport { ClosePreviewAction, SetSelectedNodesAction, ViewerActionTypes } from '@alfresco/aca-shared/store';\nimport {\n  AppHookService,\n  ContentApiService,\n  InfoDrawerComponent,\n  PageComponent,\n  ToolbarComponent,\n  ToolbarMenuItemComponent\n} from '@alfresco/aca-shared';\nimport { ContentActionRef } from '@alfresco/adf-extensions';\nimport { from } from 'rxjs';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { AlfrescoViewerModule, NodesApiService } from '@alfresco/adf-content-services';\nimport { ViewerService } from '../../services/viewer.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  imports: [CommonModule, ViewerModule, AlfrescoViewerModule, InfoDrawerComponent, ToolbarMenuItemComponent, ToolbarComponent],\n  selector: 'app-preview',\n  templateUrl: './preview.component.html',\n  styleUrls: ['./preview.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'app-preview' }\n})\nexport class PreviewComponent extends PageComponent implements OnInit {\n  folderId: string = null;\n  navigateBackAsClose = false;\n  navigateMultiple = false;\n  navigateSource: string = null;\n  navigationSources = ['favorites', 'libraries', 'personal-files', 'recent-files', 'shared'];\n  nextNodeId: string;\n  nodeId: string = null;\n  openWith: Array<ContentActionRef> = [];\n  previewLocation: string = null;\n  previousNodeId: string;\n  routesSkipNavigation = ['favorites', 'recent-files', 'shared'];\n  showRightSide = false;\n  simplestMode = false;\n\n  private containersSkipNavigation = ['adf-viewer__sidebar', 'cdk-overlay-container', 'adf-image-viewer'];\n\n  constructor(\n    private actions$: Actions,\n    private appHookService: AppHookService,\n    private contentApi: ContentApiService,\n    private location: Location,\n    private nodesApiService: NodesApiService,\n    private route: ActivatedRoute,\n    private viewerService: ViewerService\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    from(this.infoDrawerOpened$)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((val) => {\n        this.showRightSide = val;\n      });\n\n    this.previewLocation = this.router.url.substr(0, this.router.url.indexOf('/', 1)).replace(/\\//g, '');\n\n    const routeData = this.route.snapshot.data;\n    this.navigateBackAsClose = !!routeData.navigateBackAsClose;\n    this.simplestMode = !!routeData.simplestMode;\n\n    if (routeData.navigateMultiple) {\n      this.navigateMultiple = true;\n    }\n\n    if (routeData.navigateSource) {\n      const source = routeData.navigateSource.toLowerCase();\n      if (this.navigationSources.includes(source)) {\n        this.navigateSource = routeData.navigateSource;\n      }\n    }\n\n    this.route.params.subscribe((params) => {\n      this.folderId = params.folderId;\n      const id = params.nodeId;\n      if (id) {\n        void this.displayNode(id);\n      }\n    });\n\n    this.subscriptions = this.subscriptions.concat([\n      this.appHookService.nodesDeleted.subscribe(() => this.navigateToFileLocation(true)),\n\n      this.uploadService.fileUploadDeleted.subscribe(() => this.navigateToFileLocation(true)),\n\n      this.uploadService.fileUploadComplete.pipe(debounceTime(300)).subscribe((file) => this.nodesApiService.nodeUpdated.next(file.data.entry)),\n\n      this.actions$\n        .pipe(\n          ofType<ClosePreviewAction>(ViewerActionTypes.ClosePreview),\n          map(() => this.navigateToFileLocation(true))\n        )\n        .subscribe(() => {})\n    ]);\n\n    this.extensions\n      .getOpenWithActions()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((actions) => {\n        this.openWith = actions;\n      });\n  }\n\n  /**\n   * Loads the particular node into the Viewer\n   *\n   * @param id Unique identifier for the Node to display\n   */\n  async displayNode(id: string) {\n    if (id) {\n      try {\n        this.node = await this.contentApi.getNodeInfo(id).toPromise();\n        this.store.dispatch(new SetSelectedNodesAction([{ entry: this.node }]));\n\n        if (this.node?.isFile) {\n          this.nodeId = this.node.id;\n          if (this.navigateMultiple) {\n            const nearest = await this.viewerService.getNearestNodes(this.node.id, this.node.parentId, this.navigateSource);\n            this.previousNodeId = nearest.left;\n            this.nextNodeId = nearest.right;\n          }\n          return;\n        }\n        await this.router.navigate([this.previewLocation, id]);\n      } catch (err) {\n        if (!err || err.status !== 401) {\n          await this.router.navigate([this.previewLocation, id]);\n        }\n      }\n    }\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyboardEvent(event: KeyboardEvent) {\n    const key = event.key;\n\n    if (key === 'ArrowRight' || key === 'ArrowLeft') {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    }\n  }\n\n  /**\n   * Handles the visibility change of the Viewer component.\n   *\n   * @param isVisible Indicator whether Viewer is visible or hidden.\n   */\n  onVisibilityChanged(isVisible: boolean): void {\n    const shouldNavigate = !isVisible;\n    this.navigateToFileLocation(shouldNavigate);\n  }\n\n  navigateToFileLocation(shouldNavigate: boolean) {\n    if (shouldNavigate) {\n      if (this.navigateBackAsClose) {\n        this.location.back();\n      } else {\n        const shouldSkipNavigation = this.routesSkipNavigation.includes(this.previewLocation);\n        const route = this.getNavigationCommands(this.previewLocation);\n\n        if (!shouldSkipNavigation && this.folderId) {\n          route.push(this.folderId);\n        }\n        void this.router.navigate(route);\n      }\n    }\n  }\n\n  /** Handles navigation to a previous document */\n  onNavigateBefore(event: MouseEvent | KeyboardEvent): void {\n    if (event.type !== 'click' && this.shouldNavigate(event.target as HTMLElement)) {\n      return;\n    }\n\n    if (this.previousNodeId) {\n      void this.router.navigate(this.getPreviewPath(this.folderId, this.previousNodeId));\n    }\n  }\n\n  /** Handles navigation to a next document */\n  onNavigateNext(event: MouseEvent | KeyboardEvent): void {\n    if (event.type !== 'click' && this.shouldNavigate(event.target as HTMLElement)) {\n      return;\n    }\n\n    if (this.nextNodeId) {\n      void this.router.navigate(this.getPreviewPath(this.folderId, this.nextNodeId));\n    }\n  }\n\n  /**\n   * Generates a node preview route based on folder and node IDs.\n   *\n   * @param folderId Folder ID\n   * @param nodeId Node ID\n   */\n  getPreviewPath(folderId: string, nodeId: string): any[] {\n    const route = [this.previewLocation];\n\n    if (folderId) {\n      route.push(folderId);\n    }\n\n    if (nodeId) {\n      route.push('preview', nodeId);\n    }\n\n    return route;\n  }\n\n  private getNavigationCommands(url: string): any[] {\n    const urlTree: UrlTree = this.router.parseUrl(url);\n    const urlSegmentGroup: UrlSegmentGroup = urlTree.root.children[PRIMARY_OUTLET];\n\n    if (!urlSegmentGroup) {\n      return [url];\n    }\n\n    const urlSegments: UrlSegment[] = urlSegmentGroup.segments;\n\n    return urlSegments.reduce(function (acc, item) {\n      acc.push(item.path, item.parameters);\n      return acc;\n    }, []);\n  }\n\n  private shouldNavigate(element: HTMLElement): boolean {\n    let currentElement = element.parentElement;\n\n    while (currentElement && !this.isChild(currentElement.classList)) {\n      currentElement = currentElement.parentElement;\n    }\n\n    return !!currentElement;\n  }\n\n  private isChild(list: DOMTokenList): boolean {\n    return Array.from(list).some((className: string) => this.containersSkipNavigation.includes(className));\n  }\n}\n","<ng-container *ngIf=\"nodeId\">\n  <adf-alfresco-viewer\n    [ngClass]=\"{\n      'aca-right_side--hide': !showRightSide\n    }\"\n    [nodeId]=\"nodeId\"\n    [allowNavigate]=\"navigateMultiple\"\n    [allowRightSidebar]=\"true\"\n    [allowPrint]=\"false\"\n    [showRightSidebar]=\"true\"\n    [allowDownload]=\"false\"\n    [allowFullScreen]=\"false\"\n    [canNavigateBefore]=\"!!previousNodeId\"\n    [canNavigateNext]=\"!!nextNodeId\"\n    [overlayMode]=\"true\"\n    (showViewerChange)=\"onVisibilityChanged($event)\"\n    (navigateBefore)=\"onNavigateBefore($event)\"\n    (navigateNext)=\"onNavigateNext($event)\"\n  >\n    <adf-viewer-sidebar *ngIf=\"infoDrawerOpened$ | async\">\n      <aca-info-drawer [node]=\"selection.file\" />\n    </adf-viewer-sidebar>\n\n    <adf-viewer-open-with *ngIf=\"openWith.length\">\n      <ng-container *ngFor=\"let action of openWith; trackBy: trackByActionId\">\n        <app-toolbar-menu-item [actionRef]=\"action\" />\n      </ng-container>\n    </adf-viewer-open-with>\n\n    <adf-viewer-toolbar-actions *ngIf=\"!simplestMode\">\n      <aca-toolbar [items]=\"viewerToolbarActions\" />\n    </adf-viewer-toolbar-actions>\n  </adf-alfresco-viewer>\n</ng-container>\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { NgModule } from '@angular/core';\nimport { AcaViewerComponent } from './components/viewer/viewer.component';\nimport { PreviewComponent } from './components/preview/preview.component';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n  {\n    path: '',\n    data: {\n      title: 'APP.PREVIEW.TITLE',\n      navigateMultiple: true\n    },\n    component: AcaViewerComponent\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes), AcaViewerComponent, PreviewComponent],\n  exports: [AcaViewerComponent, PreviewComponent]\n})\nexport class AcaViewerModule {}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Public API Surface of aca-viewer\n */\n\nexport * from './lib/components/viewer/viewer.component';\nexport * from './lib/components/preview/preview.component';\nexport * from './lib/viewer.module';\nexport * from './lib/services/viewer.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i6.ViewerService","i7","i3","i4","i5"],"mappings":"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"}