@ngstarter-ui/components 21.0.47 → 21.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-pdf-viewer.mjs","sources":["../../../projects/components/pdf-viewer/src/pdf-viewer-annotations/pdf-viewer-annotations.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-annotations/pdf-viewer-annotations.html","../../../projects/components/pdf-viewer/src/pdf-viewer-annotation-def.directive.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-engine.service.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-search/pdf-viewer-search.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-search/pdf-viewer-search.html","../../../projects/components/pdf-viewer/src/pdf-viewer/pdf-viewer.ts","../../../projects/components/pdf-viewer/src/pdf-viewer/pdf-viewer.html","../../../projects/components/pdf-viewer/ngstarter-ui-components-pdf-viewer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal, TemplateRef } from '@angular/core';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { FormField, IconButtonSuffix, IconPrefix } from '@ngstarter-ui/components/form-field';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Input as NgsInput } from '@ngstarter-ui/components/input';\nimport { Panel, PanelContent, PanelHeader, PanelSubheader } from '@ngstarter-ui/components/panel';\nimport {\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n} from '@ngstarter-ui/components/toolbar';\nimport { PdfViewerAnnotationDef } from '../pdf-viewer-annotation-def.directive';\nimport type {\n PdfViewerAnnotationTemplateContext,\n PdfViewerAnnotationView,\n} from '../types';\n\n@Component({\n selector: 'ngs-pdf-viewer-annotations',\n standalone: true,\n imports: [\n Button,\n FormField,\n Icon,\n IconButtonSuffix,\n IconPrefix,\n NgsInput,\n NgTemplateOutlet,\n Panel,\n PanelContent,\n PanelHeader,\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n PanelSubheader,\n ],\n templateUrl: './pdf-viewer-annotations.html',\n styleUrl: './pdf-viewer-annotations.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-pdf-viewer-annotations',\n },\n})\nexport class PdfViewerAnnotations {\n annotations = input<PdfViewerAnnotationView[]>([]);\n annotationDefs = input<readonly PdfViewerAnnotationDef[]>([]);\n annotationTypeProperty = input('type');\n\n closed = output<void>();\n pageSelected = output<number>();\n\n protected readonly filterQuery = signal('');\n protected readonly filteredAnnotations = computed(() => {\n const query = this.filterQuery().trim().toLocaleLowerCase();\n const annotations = this.annotations();\n\n if (!query) {\n return annotations;\n }\n\n return annotations.filter((annotation) => this.annotationMatchesFilter(annotation, query));\n });\n\n protected setFilterQuery(event: Event): void {\n this.filterQuery.set((event.target as HTMLInputElement).value);\n }\n\n protected clearFilterQuery(): void {\n this.filterQuery.set('');\n }\n\n protected getAnnotationTemplate(\n annotation: PdfViewerAnnotationView,\n index: number,\n ): TemplateRef<PdfViewerAnnotationTemplateContext> | null {\n const annotationDefs = this.annotationDefs();\n const typeProperty = this.annotationTypeProperty();\n const matchingDef = annotationDefs.find((def) => def.matches(annotation, index, typeProperty))\n ?? annotationDefs.find((def) => !def.hasWhen());\n\n return matchingDef?.template ?? null;\n }\n\n protected getAnnotationTemplateContext(\n annotation: PdfViewerAnnotationView,\n index: number,\n ): PdfViewerAnnotationTemplateContext {\n return {\n $implicit: annotation,\n annotation,\n index,\n goToPage: (pageNumber: number) => this.pageSelected.emit(pageNumber),\n };\n }\n\n protected getAnnotationTypeLabel(annotation: PdfViewerAnnotationView): string {\n const label = annotation.label ?? annotation.type;\n\n return typeof label === 'string' && label.trim().length > 0 ? label : 'Comment';\n }\n\n protected getAvatarLabel(annotation: PdfViewerAnnotationView): string {\n const explicitLabel = annotation.avatarLabel;\n\n if (typeof explicitLabel === 'string' && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n return annotation.author\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase())\n .join('');\n }\n\n protected getAvatarImage(annotation: PdfViewerAnnotationView): string {\n return typeof annotation.avatarUrl === 'string' ? annotation.avatarUrl : '';\n }\n\n protected getReplyLabel(annotation: PdfViewerAnnotationView): string {\n return typeof annotation.replyLabel === 'string' && annotation.replyLabel.trim().length > 0\n ? annotation.replyLabel\n : 'Reply';\n }\n\n private annotationMatchesFilter(annotation: PdfViewerAnnotationView, query: string): boolean {\n return [\n annotation.author,\n annotation.time,\n annotation.text,\n annotation.type,\n annotation.label,\n `page ${annotation.pageNumber}`,\n ]\n .filter((value): value is string => typeof value === 'string')\n .some((value) => value.toLocaleLowerCase().includes(query));\n }\n}\n","<ngs-panel class=\"pdf-viewer-annotations bg-surface\" aria-label=\"PDF annotations\">\n <ngs-panel-header class=\"p-0\">\n <ngs-toolbar class=\"w-full py-0 pr-2 ps-4\" aria-label=\"PDF annotations toolbar\">\n <ngs-toolbar-title>\n Annotations\n </ngs-toolbar-title>\n <ngs-toolbar-spacer />\n <ngs-toolbar-item>\n <button\n class=\"pdf-viewer-annotations__close\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Close annotations panel\"\n (click)=\"closed.emit()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </ngs-toolbar-item>\n </ngs-toolbar>\n </ngs-panel-header>\n\n <ngs-panel-subheader autoHeight class=\"px-4 pb-4\">\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-icon ngsIconPrefix name=\"fluent:search-24-regular\" />\n <input\n ngsInput\n type=\"text\"\n aria-label=\"Filter annotations\"\n placeholder=\"Filter annotations...\"\n [value]=\"filterQuery()\"\n (input)=\"setFilterQuery($event)\" />\n @if (filterQuery()) {\n <button\n ngsIconButton\n ngsIconButtonSuffix\n type=\"button\"\n aria-label=\"Clear annotation filter\"\n (click)=\"clearFilterQuery()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n }\n </ngs-form-field>\n </ngs-panel-subheader>\n\n <ngs-panel-content>\n <div class=\"flex min-h-full flex-col\">\n <div class=\"flex flex-1 flex-col gap-4 pb-4 px-4\">\n <ng-template #defaultAnnotationTemplate let-annotation let-goToPage=\"goToPage\">\n <article class=\"rounded-2xl border border-border bg-surface p-4 shadow-xs\">\n <header class=\"flex items-start gap-3\">\n <span class=\"flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-full bg-primary-container text-xs font-semibold text-on-primary-container\">\n @if (getAvatarImage(annotation); as avatarImage) {\n <img\n class=\"h-full w-full object-cover\"\n [src]=\"avatarImage\"\n [alt]=\"annotation.author\" />\n } @else {\n {{ getAvatarLabel(annotation) }}\n }\n </span>\n\n <span class=\"min-w-0 flex-1\">\n <span class=\"block truncate text-sm font-semibold text-on-surface\">{{ annotation.author }}</span>\n @if (annotation.time) {\n <span class=\"block truncate text-xs text-on-surface-variant\">{{ annotation.time }}</span>\n }\n </span>\n\n <span class=\"rounded-full bg-surface-container-high px-2 py-1 text-xs font-medium tracking-normal text-on-surface-variant uppercase\">\n {{ getAnnotationTypeLabel(annotation) }}\n </span>\n </header>\n\n <p class=\"mt-3 mb-0 text-base leading-relaxed text-on-surface\">{{ annotation.text }}</p>\n\n <footer class=\"mt-4 flex items-center justify-between gap-2\">\n <button\n ngsButton=\"tonal\"\n type=\"button\"\n (click)=\"goToPage(annotation.pageNumber)\">\n Page {{ annotation.pageNumber }}\n </button>\n\n <button ngsButton=\"text\" type=\"button\">\n {{ getReplyLabel(annotation) }}\n </button>\n </footer>\n </article>\n </ng-template>\n\n @for (annotation of filteredAnnotations(); track annotation.id ?? annotation.pageNumber + '-' + $index) {\n <ng-container\n [ngTemplateOutlet]=\"getAnnotationTemplate(annotation, $index) ?? defaultAnnotationTemplate\"\n [ngTemplateOutletContext]=\"getAnnotationTemplateContext(annotation, $index)\" />\n } @empty {\n <div class=\"p-4 text-center text-sm text-on-surface-variant\">No annotations found.</div>\n }\n </div>\n </div>\n </ngs-panel-content>\n</ngs-panel>\n","import { Directive, input, TemplateRef } from '@angular/core';\nimport type {\n PdfViewerAnnotationTemplateContext,\n PdfViewerAnnotationWhen,\n PdfViewerAnnotationView,\n} from './types';\n\n@Directive({\n selector: '[ngsPdfViewerAnnotationDef], [ngsPdfViewerAnnotation]',\n standalone: true,\n})\nexport class PdfViewerAnnotationDef {\n readonly annotationWhen = input<PdfViewerAnnotationWhen | undefined>(undefined, {\n alias: 'ngsPdfViewerAnnotation',\n });\n readonly defWhen = input<PdfViewerAnnotationWhen | undefined>(undefined, {\n alias: 'ngsPdfViewerAnnotationDef',\n });\n readonly when = input<PdfViewerAnnotationWhen | undefined>(undefined, {\n alias: 'ngsPdfViewerAnnotationWhen',\n });\n\n constructor(public template: TemplateRef<PdfViewerAnnotationTemplateContext>) {}\n\n matches(annotation: PdfViewerAnnotationView, index: number, typeProperty: string): boolean {\n const whenValue = this.whenValue();\n\n if (!whenValue) {\n return false;\n }\n\n if (typeof whenValue === 'function') {\n return whenValue(annotation, index);\n }\n\n return annotation[typeProperty] === whenValue;\n }\n\n hasWhen(): boolean {\n return !!this.whenValue();\n }\n\n private whenValue(): PdfViewerAnnotationWhen | undefined {\n return this.when() ?? this.defWhen() ?? this.annotationWhen();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PluginRegistry } from '@embedpdf/core';\nimport type { PdfEngine } from '@embedpdf/models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfViewerEngineService {\n private readonly engines = new Map<string, Promise<PdfEngine<Blob>>>();\n\n getEngine(wasmUrl: string): Promise<PdfEngine<Blob>> {\n const cachedEngine = this.engines.get(wasmUrl);\n\n if (cachedEngine) {\n return cachedEngine;\n }\n\n const engine = this.createEngine(wasmUrl).catch((error: unknown) => {\n this.engines.delete(wasmUrl);\n throw error;\n });\n this.engines.set(wasmUrl, engine);\n return engine;\n }\n\n createRegistry(engine: PdfEngine<Blob>, defaultScale: number): Promise<PluginRegistry> {\n const registry = new PluginRegistry(engine, { defaultScale });\n return registry.initialize().then(() => registry);\n }\n\n private async createEngine(wasmUrl: string): Promise<PdfEngine<Blob>> {\n const { createPdfiumEngine } = await import('@embedpdf/engines/pdfium-direct-engine');\n return createPdfiumEngine(wasmUrl, { encoderPoolSize: 0 });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal, untracked } from '@angular/core';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Checkbox } from '@ngstarter-ui/components/checkbox';\nimport { FormField, IconButtonSuffix, IconPrefix } from '@ngstarter-ui/components/form-field';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Input as NgsInput } from '@ngstarter-ui/components/input';\nimport { Panel, PanelContent, PanelHeader, PanelSubheader } from '@ngstarter-ui/components/panel';\nimport { Toolbar, ToolbarSpacer, ToolbarTitle } from '@ngstarter-ui/components/toolbar';\nimport type { PdfViewerSearchOptions, PdfViewerSearchResultView } from '../types';\n\ninterface PdfViewerSearchResultPart {\n text: string;\n highlight: boolean;\n}\n\ninterface PdfViewerSearchResultGroup {\n pageNumber: number;\n results: Array<{\n result: PdfViewerSearchResultView;\n index: number;\n }>;\n}\n\n@Component({\n selector: 'ngs-pdf-viewer-search',\n standalone: true,\n imports: [\n Button,\n Checkbox,\n FormField,\n Icon,\n IconButtonSuffix,\n IconPrefix,\n NgsInput,\n Panel,\n PanelContent,\n PanelHeader,\n Toolbar,\n ToolbarSpacer,\n ToolbarTitle,\n PanelSubheader,\n ],\n templateUrl: './pdf-viewer-search.html',\n styleUrl: './pdf-viewer-search.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-pdf-viewer-search',\n },\n})\nexport class PdfViewerSearch {\n results = input<PdfViewerSearchResultView[]>([]);\n query = input('');\n\n closed = output<void>();\n resultSelected = output<PdfViewerSearchResultView>();\n searchChanged = output<{\n query: string;\n options: PdfViewerSearchOptions;\n }>();\n\n protected readonly caseSensitive = signal(false);\n protected readonly wholeWord = signal(false);\n protected readonly activeResultIndex = signal(0);\n protected readonly queryValue = signal('');\n protected readonly hasQuery = computed(() => this.queryValue().trim().length > 0);\n protected readonly visibleResultGroups = computed<PdfViewerSearchResultGroup[]>(() => {\n const groups = new Map<number, PdfViewerSearchResultGroup>();\n\n this.results().forEach((result, index) => {\n const group = groups.get(result.pageNumber) ?? {\n pageNumber: result.pageNumber,\n results: [],\n };\n\n group.results.push({ result, index });\n groups.set(result.pageNumber, group);\n });\n\n return [...groups.values()];\n });\n protected readonly resultCountLabel = computed(() => {\n const count = this.results().length;\n\n return `${count} ${count === 1 ? 'result' : 'results'} found`;\n });\n\n constructor() {\n effect(() => {\n const query = this.query();\n\n untracked(() => {\n this.queryValue.set(query);\n this.activeResultIndex.set(0);\n });\n });\n }\n\n protected setQuery(event: Event): void {\n this.queryValue.set((event.target as HTMLInputElement).value);\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected clearQuery(): void {\n this.queryValue.set('');\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected setCaseSensitive(value: boolean): void {\n this.caseSensitive.set(value);\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected setWholeWord(value: boolean): void {\n this.wholeWord.set(value);\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected previousResult(): void {\n const count = this.results().length;\n\n if (count === 0) {\n return;\n }\n\n this.activeResultIndex.update((index) => (index - 1 + count) % count);\n }\n\n protected nextResult(): void {\n const count = this.results().length;\n\n if (count === 0) {\n return;\n }\n\n this.activeResultIndex.update((index) => (index + 1) % count);\n }\n\n protected selectResult(result: PdfViewerSearchResultView, index: number): void {\n this.activeResultIndex.set(index);\n this.resultSelected.emit(result);\n }\n\n protected resultParts(result: PdfViewerSearchResultView): PdfViewerSearchResultPart[] {\n const query = this.queryValue().trim();\n\n if (!query) {\n return [{ text: result.excerpt, highlight: false }];\n }\n\n const flags = this.caseSensitive() ? 'g' : 'gi';\n const escapedQuery = this.escapeRegExp(query);\n const pattern = this.wholeWord()\n ? new RegExp(`\\\\b${escapedQuery}\\\\b`, flags)\n : new RegExp(escapedQuery, flags);\n const parts: PdfViewerSearchResultPart[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(result.excerpt)) !== null) {\n if (match.index > lastIndex) {\n parts.push({ text: result.excerpt.slice(lastIndex, match.index), highlight: false });\n }\n\n parts.push({ text: match[0], highlight: true });\n lastIndex = match.index + match[0].length;\n\n if (match[0].length === 0) {\n pattern.lastIndex++;\n }\n }\n\n if (lastIndex < result.excerpt.length) {\n parts.push({ text: result.excerpt.slice(lastIndex), highlight: false });\n }\n\n return parts.length > 0 ? parts : [{ text: result.excerpt, highlight: false }];\n }\n\n private emitSearchChanged(): void {\n this.searchChanged.emit({\n query: this.queryValue(),\n options: {\n caseSensitive: this.caseSensitive(),\n wholeWord: this.wholeWord(),\n },\n });\n }\n\n private escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","<ngs-panel class=\"pdf-viewer-search\" aria-label=\"PDF search\">\n <ngs-panel-header class=\"ps-4 pe-3\">\n <ngs-toolbar>\n <ngs-toolbar-title>Search</ngs-toolbar-title>\n <ngs-toolbar-spacer />\n <button ngsIconButton type=\"button\" aria-label=\"Close search panel\" (click)=\"closed.emit()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </ngs-toolbar>\n </ngs-panel-header>\n\n <ngs-panel-subheader autoHeight class=\"px-4 pb-4\">\n <ngs-form-field class=\"pdf-viewer-search__field\" subscriptHiddenIfEmpty>\n <ngs-icon name=\"fluent:search-24-regular\" ngsIconPrefix />\n <input\n ngsInput\n type=\"text\"\n aria-label=\"Search PDF\"\n placeholder=\"Search\"\n [value]=\"queryValue()\"\n (input)=\"setQuery($event)\" />\n @if (queryValue()) {\n <button ngsIconButtonSuffix ngsIconButton type=\"button\" aria-label=\"Clear search\" (click)=\"clearQuery()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n }\n </ngs-form-field>\n\n <div class=\"pdf-viewer-search__options mt-4 grid gap-3 text-base text-on-surface\">\n <ngs-checkbox [checked]=\"caseSensitive()\" (checkedChange)=\"setCaseSensitive($event)\">\n Case sensitive\n </ngs-checkbox>\n <ngs-checkbox [checked]=\"wholeWord()\" (checkedChange)=\"setWholeWord($event)\">\n Whole word\n </ngs-checkbox>\n </div>\n\n @if (hasQuery()) {\n <div class=\"pdf-viewer-search__summary mt-4 flex items-center justify-between gap-4 text-base text-on-surface-variant\">\n <span>{{ resultCountLabel() }}</span>\n <div class=\"pdf-viewer-search__nav flex items-center gap-3\">\n <button\n class=\"text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Previous search result\"\n [disabled]=\"results().length === 0\"\n (click)=\"previousResult()\">\n <ngs-icon name=\"fluent:chevron-left-24-regular\" />\n </button>\n <button\n class=\"text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Next search result\"\n [disabled]=\"results().length === 0\"\n (click)=\"nextResult()\">\n <ngs-icon name=\"fluent:chevron-right-24-regular\" />\n </button>\n </div>\n </div>\n }\n </ngs-panel-subheader>\n\n <ngs-panel-content>\n <div class=\"pdf-viewer-search__content flex min-h-full flex-col gap-4 px-4 pb-4\">\n @if (hasQuery()) {\n <div class=\"pdf-viewer-search__results grid min-h-0 gap-4\">\n @for (group of visibleResultGroups(); track group.pageNumber) {\n <section class=\"pdf-viewer-search__page-group grid gap-3 bg-surface\">\n <h3 class=\"m-0 text-base font-medium text-on-surface-variant\">Page {{ group.pageNumber }}</h3>\n @for (item of group.results; track item.result.id ?? item.result.pageNumber + '-' + item.index) {\n <button\n class=\"pdf-viewer-search__result w-full cursor-pointer rounded-2xl border border-border p-4 text-left text-base leading-snug text-on-surface\"\n type=\"button\"\n [class.bg-primary-container]=\"item.index === activeResultIndex()\"\n [class.bg-surface]=\"item.index !== activeResultIndex()\"\n (click)=\"selectResult(item.result, item.index)\">\n @for (part of resultParts(item.result); track part.text + '-' + $index) {\n <span\n [class.font-bold]=\"part.highlight\"\n [class.text-primary]=\"part.highlight\">{{ part.text }}</span>\n }\n </button>\n }\n </section>\n } @empty {\n <div class=\"pdf-viewer-search__empty p-4 text-center text-sm text-on-surface-variant\">No results.</div>\n }\n </div>\n }\n </div>\n </ngs-panel-content>\n</ngs-panel>\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MatchFlag, Rotation } from '@embedpdf/models';\nimport type { PdfDocumentObject, PdfEngine, PdfPageObject, SearchResult } from '@embedpdf/models';\nimport { BlockLoader } from '@ngstarter-ui/components/block-loader';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Divider } from '@ngstarter-ui/components/divider';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { ImagePlaceholder } from '@ngstarter-ui/components/image-placeholder';\nimport {\n Menu,\n MenuDivider,\n MenuHeading,\n MenuItem,\n MenuTrigger,\n} from '@ngstarter-ui/components/menu';\nimport {\n Panel,\n PanelAside,\n PanelContent,\n PanelHeader,\n PanelSidebar,\n} from '@ngstarter-ui/components/panel';\nimport {\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n} from '@ngstarter-ui/components/toolbar';\nimport { isObservable } from 'rxjs';\nimport type { Subscription } from 'rxjs';\nimport { PdfViewerAnnotations } from '../pdf-viewer-annotations/pdf-viewer-annotations';\nimport { PdfViewerAnnotationDef } from '../pdf-viewer-annotation-def.directive';\nimport { PdfViewerEngineService } from '../pdf-viewer-engine.service';\nimport { PdfViewerSearch } from '../pdf-viewer-search/pdf-viewer-search';\nimport {\n PdfViewerAnnotationDataSource,\n PdfViewerAnnotationDataSourceContext,\n PdfViewerAnnotationDataSourceResult,\n PdfViewerAnnotationView,\n PdfViewerLoadedEvent,\n PdfViewerPageRenderedEvent,\n PdfViewerSearchOptions,\n PdfViewerSearchResultView,\n PdfViewerThumbnailView,\n PdfViewerPageView,\n PdfViewerSelectionRectView,\n PdfViewerServerAnnotationDataSource,\n PdfViewerSource,\n PdfViewerTextGlyphView,\n} from '../types';\n\ninterface PdfViewerPageListItem {\n pageNumber: number;\n thumbnail: PdfViewerThumbnailView | null;\n}\n\ninterface PdfViewerPageSpread {\n id: string;\n leadingPlaceholder: boolean;\n leadingPlaceholderPage: PdfViewerPageView | null;\n pages: PdfViewerPageView[];\n}\n\ntype PdfViewerSpreadMode = 'single' | 'two-odd' | 'two-even';\ntype PdfViewerScrollLayout = 'vertical' | 'horizontal';\ntype PdfViewerZoomMode = 'custom' | 'fit-page' | 'fit-width';\n\ninterface PdfViewerSelectionPoint {\n pageNumber: number;\n x: number;\n y: number;\n offset: number;\n}\n\ninterface PdfViewerTextLineView {\n lineId: number;\n glyphs: PdfViewerTextGlyphView[];\n top: number;\n bottom: number;\n left: number;\n right: number;\n center: number;\n}\n\ninterface PdfViewerZoomAnchor {\n container: HTMLElement;\n pageNumber: number;\n relativeX: number;\n relativeY: number;\n viewportX: number;\n viewportY: number;\n}\n\n@Component({\n selector: 'ngs-pdf-viewer',\n exportAs: 'ngsPdfViewer',\n imports: [\n BlockLoader,\n Button,\n Divider,\n Icon,\n ImagePlaceholder,\n Menu,\n MenuDivider,\n MenuHeading,\n MenuItem,\n MenuTrigger,\n Panel,\n PanelAside,\n PanelContent,\n PanelHeader,\n PanelSidebar,\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n PdfViewerAnnotations,\n PdfViewerSearch,\n ],\n templateUrl: './pdf-viewer.html',\n styleUrl: './pdf-viewer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-pdf-viewer not-prose',\n '[class.is-loading]': 'isLoading()',\n '[class.has-toolbar]': 'showToolbar()',\n '[class.has-page-list]': 'isPageListVisible()',\n '[class.has-error]': 'errorState()',\n },\n})\nexport class PdfViewer {\n private readonly textSelectionHorizontalPadding = 2;\n private readonly textSelectionLineHeight = 1.2;\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly engineService = inject(PdfViewerEngineService);\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly viewerBody = viewChild<ElementRef<HTMLElement>>('viewerBody');\n private readonly pageList = viewChild<ElementRef<HTMLElement>>('pageList');\n protected readonly annotationDefs = contentChildren(PdfViewerAnnotationDef, { descendants: true });\n\n src = input<PdfViewerSource>(null);\n documentName = input<string | null>(null);\n wasmUrl = input('/assets/embedpdf/pdfium.wasm');\n page = input(1, { transform: numberAttribute });\n scale = input(1, { transform: numberAttribute });\n minScale = input(0.2, { transform: numberAttribute });\n maxScale = input(60, { transform: numberAttribute });\n zoomStep = input(0.1, { transform: numberAttribute });\n maxRenderPixels = input(128_000_000, { transform: numberAttribute });\n maxRenderDimension = input(13_000, { transform: numberAttribute });\n renderAll = input(true, { transform: booleanAttribute });\n showToolbar = input(true, { transform: booleanAttribute });\n showPageList = input(true, { transform: booleanAttribute });\n showSearchPanel = input(true, { transform: booleanAttribute });\n showAnnotationsPanel = input(false, { transform: booleanAttribute });\n annotations = input<PdfViewerAnnotationView[]>([]);\n annotationsDataSource = input<PdfViewerAnnotationDataSource | null>(null);\n annotationTypeProperty = input('type');\n searchQuery = input('');\n withAnnotations = input(true, { transform: booleanAttribute });\n withForms = input(true, { transform: booleanAttribute });\n\n loaded = output<PdfViewerLoadedEvent>();\n pageChanged = output<number>();\n pageRendered = output<PdfViewerPageRenderedEvent>();\n error = output<unknown>();\n\n protected readonly isLoading = signal(false);\n protected readonly errorState = signal<unknown>(null);\n protected readonly renderedPages = signal<PdfViewerPageView[]>([]);\n protected readonly thumbnailPages = signal<PdfViewerThumbnailView[]>([]);\n protected readonly pageCount = signal(0);\n protected readonly activePage = signal(1);\n protected readonly zoom = signal(1);\n protected readonly pageListVisible = signal(false);\n protected readonly searchPanelVisible = signal(false);\n protected readonly annotationsPanelVisible = signal(false);\n protected readonly asidePanelInteractive = signal(false);\n protected readonly spreadMode = signal<PdfViewerSpreadMode>('single');\n protected readonly scrollLayout = signal<PdfViewerScrollLayout>('vertical');\n protected readonly pageRotation = signal<Rotation>(Rotation.Degree0);\n protected readonly zoomMode = signal<PdfViewerZoomMode>('custom');\n protected readonly annotationItems = signal<PdfViewerAnnotationView[]>([]);\n protected readonly activeSearchQuery = signal('');\n protected readonly pdfSearchResults = signal<PdfViewerSearchResultView[]>([]);\n protected readonly selectionRects = signal<PdfViewerSelectionRectView[]>([]);\n protected readonly hasDocument = computed(() => this.pageCount() > 0);\n protected readonly isPageListVisible = computed(() =>\n this.showPageList() && this.pageListVisible(),\n );\n protected readonly isSearchPanelVisible = computed(() =>\n this.showSearchPanel() && this.searchPanelVisible(),\n );\n protected readonly isAnnotationsPanelVisible = computed(() =>\n this.showAnnotationsPanel() && !this.searchPanelVisible() && this.annotationsPanelVisible(),\n );\n protected readonly thumbnailPageMap = computed(() =>\n new Map(this.thumbnailPages().map((thumbnail) => [thumbnail.pageNumber, thumbnail])),\n );\n protected readonly pageItems = computed<PdfViewerPageListItem[]>(() =>\n Array.from({ length: this.pageCount() }, (_, index) => {\n const pageNumber = index + 1;\n\n return {\n pageNumber,\n thumbnail: this.thumbnailPageMap().get(pageNumber) ?? null,\n };\n }),\n );\n protected readonly canGoPrevious = computed(() => this.activePage() > 1);\n protected readonly canGoNext = computed(() => this.activePage() < this.pageCount());\n protected readonly canZoomOut = computed(() => this.zoom() > this.getScaleBounds().min);\n protected readonly canZoomIn = computed(() => this.zoom() < this.getScaleBounds().max);\n protected readonly zoomLabel = computed(() => `${Math.round(this.zoom() * 100)}%`);\n protected readonly displayDocumentName = computed(() => this.documentName() || this.getSourceName(this.src()));\n protected readonly pageSpreads = computed<PdfViewerPageSpread[]>(() =>\n this.groupPagesIntoSpreads(this.renderedPages(), this.spreadMode()),\n );\n protected readonly zoomPresets = [0.25, 0.5, 1, 1.25, 1.5, 2, 4, 8, 16];\n\n private engine: PdfEngine<Blob> | null = null;\n private pdfDocument: PdfDocumentObject | null = null;\n private registry: { destroy(): Promise<void> | void } | null = null;\n private pageIntersectionObserver: IntersectionObserver | null = null;\n private visiblePageRatios = new Map<number, number>();\n private loadToken = 0;\n private renderToken = 0;\n private searchToken = 0;\n private scrollSyncFrame: number | null = null;\n private programmaticScrollTargetPage: number | null = null;\n private programmaticScrollTimeout: number | null = null;\n private pageObserverFrame: number | null = null;\n private pageObserverTimeout: number | null = null;\n private visiblePageRenderFrame: number | null = null;\n private visiblePageRenderTimeout: number | null = null;\n private pageObserverRefreshAttempts = 0;\n private selectionStart: PdfViewerSelectionPoint | null = null;\n private isViewInitialized = false;\n private annotationDataSourceToken = 0;\n private annotationDataSourceCleanup: (() => void) | null = null;\n private lastZoomChangeTime = 0;\n private readonly programmaticScrollMinDuration = 900;\n private readonly programmaticScrollMaxDuration = 6000;\n private readonly qualityRenderZoomIdleDelay = 160;\n private readonly documentOpenTimeoutMs = 15000;\n\n constructor() {\n afterNextRender(() => {\n if (this.isBrowser) {\n this.asidePanelInteractive.set(true);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.loadToken++;\n this.renderToken++;\n this.searchToken++;\n this.annotationDataSourceToken++;\n this.annotationDataSourceCleanup?.();\n this.cancelScrollSyncFrame();\n this.clearProgrammaticScrollLock();\n this.cancelPageObserverFrame();\n this.cancelVisiblePageRenderFrame();\n this.disconnectPageObserver();\n this.revokeRenderedPages();\n this.revokeThumbnailPages();\n void this.closeDocument();\n void this.registry?.destroy();\n });\n\n effect((onCleanup) => {\n const dataSource = this.annotationsDataSource();\n const fallbackAnnotations = this.annotations();\n const source = this.src();\n const documentName = this.documentName() || this.getSourceName(source);\n const pageCount = this.pageCount();\n const token = ++this.annotationDataSourceToken;\n const context: PdfViewerAnnotationDataSourceContext = {\n source,\n documentName,\n pageCount,\n };\n\n this.annotationDataSourceCleanup?.();\n this.annotationDataSourceCleanup = untracked(() =>\n this.loadAnnotationsDataSource(dataSource ?? fallbackAnnotations, context, token),\n );\n\n onCleanup(() => {\n this.annotationDataSourceCleanup?.();\n this.annotationDataSourceCleanup = null;\n });\n });\n\n effect(() => {\n const source = this.src();\n const wasmUrl = this.wasmUrl();\n\n if (!this.isViewInitialized || !this.isBrowser) {\n return;\n }\n\n untracked(() => {\n void this.loadDocument(source, wasmUrl);\n });\n });\n\n effect(() => {\n const scale = this.sanitizeScale(this.scale());\n\n if (untracked(() => this.zoom()) !== scale) {\n untracked(() => this.setZoom(scale));\n }\n });\n\n effect(() => {\n const requestedPage = this.sanitizePage(this.page());\n\n if (requestedPage !== untracked(() => this.activePage())) {\n this.activePage.set(requestedPage);\n }\n });\n\n effect(() => {\n const query = this.searchQuery();\n\n if (query !== untracked(() => this.activeSearchQuery())) {\n this.activeSearchQuery.set(query);\n untracked(() => {\n void this.searchPdf(query, {\n caseSensitive: false,\n wholeWord: false,\n });\n });\n }\n });\n\n effect(() => {\n const zoom = this.zoom();\n const renderAll = this.renderAll();\n const activePage = renderAll ? untracked(() => this.activePage()) : this.activePage();\n const withAnnotations = this.withAnnotations();\n const withForms = this.withForms();\n this.pageRotation();\n this.spreadMode();\n this.scrollLayout();\n\n if (!this.pdfDocument || !this.engine || this.isLoading()) {\n return;\n }\n\n untracked(() => {\n this.applyInstantZoom(zoom);\n this.schedulePageObserverRefresh();\n this.scheduleVisiblePagesRender({ zoom, activePage, renderAll, withAnnotations, withForms });\n });\n });\n\n effect(() => {\n const withAnnotations = this.withAnnotations();\n const isLoading = this.isLoading();\n const pageCount = this.pageCount();\n this.pageRotation();\n\n if (isLoading || pageCount === 0 || !this.pdfDocument || !this.engine) {\n return;\n }\n\n untracked(() => {\n void this.renderThumbnails(this.loadToken, { withAnnotations });\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.isViewInitialized = true;\n\n if (this.isBrowser) {\n void this.loadDocument(this.src(), this.wasmUrl());\n }\n }\n\n previousPage(): void {\n if (!this.canGoPrevious()) {\n return;\n }\n\n this.setPage(this.activePage() - 1);\n }\n\n nextPage(): void {\n if (!this.canGoNext()) {\n return;\n }\n\n this.setPage(this.activePage() + 1);\n }\n\n zoomIn(): void {\n this.zoomMode.set('custom');\n this.setZoom(this.roundZoom(this.zoom() + this.sanitizeZoomStep()));\n }\n\n zoomOut(): void {\n this.zoomMode.set('custom');\n this.setZoom(this.roundZoom(this.zoom() - this.sanitizeZoomStep()));\n }\n\n togglePageList(): void {\n this.pageListVisible.update((isVisible) => !isVisible);\n }\n\n protected toggleSearchPanel(): void {\n const nextVisible = !this.searchPanelVisible();\n this.searchPanelVisible.set(nextVisible);\n\n if (nextVisible) {\n this.annotationsPanelVisible.set(false);\n const query = this.searchQuery();\n this.activeSearchQuery.set(query);\n void this.searchPdf(query, {\n caseSensitive: false,\n wholeWord: false,\n });\n }\n }\n\n protected toggleAnnotationsPanel(): void {\n const nextVisible = !this.annotationsPanelVisible();\n this.annotationsPanelVisible.set(nextVisible);\n\n if (nextVisible) {\n this.searchPanelVisible.set(false);\n }\n }\n\n protected closeAsidePanel(): void {\n this.searchPanelVisible.set(false);\n this.annotationsPanelVisible.set(false);\n }\n\n protected updatePdfSearch(\n event: {\n query: string;\n options: PdfViewerSearchOptions;\n },\n ): Promise<void> {\n this.activeSearchQuery.set(event.query);\n return this.searchPdf(event.query, event.options);\n }\n\n protected selectSearchResult(result: PdfViewerSearchResultView): void {\n this.setPage(result.pageNumber);\n }\n\n protected setZoomPreset(scale: number): void {\n this.zoomMode.set('custom');\n this.setZoom(scale);\n }\n\n protected isZoomPresetSelected(scale: number): boolean {\n return this.zoomMode() === 'custom' && Math.abs(this.zoom() - this.sanitizeScale(scale)) < 0.0001;\n }\n\n protected fitToPage(): void {\n const scale = this.getFitScale('fit-page');\n\n if (scale === null) {\n return;\n }\n\n this.zoomMode.set('fit-page');\n this.setZoom(scale);\n }\n\n protected fitToWidth(): void {\n const scale = this.getFitScale('fit-width');\n\n if (scale === null) {\n return;\n }\n\n this.zoomMode.set('fit-width');\n this.setZoom(scale);\n }\n\n protected setSpreadMode(mode: PdfViewerSpreadMode): void {\n this.spreadMode.set(mode);\n this.refreshLayoutAfterModeChange();\n }\n\n protected setScrollLayout(layout: PdfViewerScrollLayout): void {\n this.scrollLayout.set(layout);\n this.refreshLayoutAfterModeChange();\n }\n\n protected rotateClockwise(): void {\n this.setPageRotation(this.rotatePageBy(1));\n }\n\n protected rotateCounterClockwise(): void {\n this.setPageRotation(this.rotatePageBy(-1));\n }\n\n private groupPagesIntoSpreads(\n pages: PdfViewerPageView[],\n mode: PdfViewerSpreadMode,\n ): PdfViewerPageSpread[] {\n if (mode === 'single') {\n return pages.map((page) => ({\n id: `single-${page.pageNumber}`,\n leadingPlaceholder: false,\n leadingPlaceholderPage: null,\n pages: [page],\n }));\n }\n\n const spreads: PdfViewerPageSpread[] = [];\n let pageIndex = 0;\n\n if (mode === 'two-even' && pages.length > 0) {\n spreads.push({\n id: 'two-even-cover',\n leadingPlaceholder: true,\n leadingPlaceholderPage: pages[0],\n pages: [pages[0]],\n });\n pageIndex = 1;\n }\n\n while (pageIndex < pages.length) {\n const spreadPages = pages.slice(pageIndex, pageIndex + 2);\n spreads.push({\n id: `${mode}-${spreadPages.map((page) => page.pageNumber).join('-')}`,\n leadingPlaceholder: false,\n leadingPlaceholderPage: null,\n pages: spreadPages,\n });\n pageIndex += 2;\n }\n\n return spreads;\n }\n\n private setPageRotation(rotation: Rotation): void {\n this.pageRotation.set(rotation);\n this.applyInstantZoom(this.zoom());\n this.refreshLayoutAfterModeChange();\n }\n\n private rotatePageBy(delta: 1 | -1): Rotation {\n return this.normalizeRotation(this.pageRotation() + delta);\n }\n\n private refreshLayoutAfterModeChange(): void {\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.schedulePageObserverRefresh();\n\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n this.scrollToPage(this.activePage());\n return;\n }\n\n targetWindow.requestAnimationFrame(() => this.scrollToPage(this.activePage()));\n }\n\n protected toggleFullscreen(): void {\n if (!this.isBrowser) {\n return;\n }\n\n const target = this.hostElement.nativeElement;\n const currentFullscreenElement = this.document.fullscreenElement;\n\n if (currentFullscreenElement) {\n void this.document.exitFullscreen?.();\n return;\n }\n\n void target.requestFullscreen?.();\n }\n\n setPage(pageNumber: number): void {\n const nextPage = this.clamp(pageNumber, 1, Math.max(this.pageCount(), 1));\n const hasChanged = nextPage !== this.activePage();\n\n if (!hasChanged) {\n this.scrollToPage(nextPage);\n this.scrollPageListToPage(nextPage);\n return;\n }\n\n this.activePage.set(nextPage);\n this.pageChanged.emit(nextPage);\n this.scrollToPage(nextPage);\n this.scrollPageListToPage(nextPage);\n }\n\n protected onViewerScroll(): void {\n if (!this.renderAll() || !this.isBrowser || this.renderedPages().length < 2) {\n return;\n }\n\n if (this.scrollSyncFrame !== null) {\n return;\n }\n\n this.scrollSyncFrame = this.document.defaultView?.requestAnimationFrame(() => {\n this.scrollSyncFrame = null;\n\n if (this.isProgrammaticScrollActive()) {\n this.completeProgrammaticScrollIfSettled();\n return;\n }\n\n this.syncActivePageFromViewport();\n this.scheduleCurrentVisiblePagesRender();\n }) ?? null;\n }\n\n protected onViewerWheel(event: WheelEvent): void {\n if (!event.metaKey && !event.ctrlKey) {\n return;\n }\n\n if (!this.pdfDocument || this.isLoading()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const container = this.viewerBody()?.nativeElement;\n const anchor = container ? this.getZoomAnchor(container, event) : null;\n const delta = event.deltaY || event.deltaX;\n const direction = delta < 0 ? 1 : -1;\n const multiplier = Math.max(1, Math.min(6, Math.abs(delta) / 100));\n const nextZoom = this.roundZoom(this.zoom() + direction * this.sanitizeZoomStep() * multiplier);\n\n if (nextZoom === this.zoom()) {\n return;\n }\n\n this.zoomMode.set('custom');\n this.setZoom(nextZoom);\n this.restoreZoomAnchor(anchor);\n }\n\n protected selectionRectsForPage(pageNumber: number): PdfViewerSelectionRectView[] {\n return this.selectionRects().filter((rect) => rect.pageNumber === pageNumber);\n }\n\n protected startTextSelection(event: PointerEvent | MouseEvent, page: PdfViewerPageView): void {\n if (event.button !== 0 || page.textGlyphs.length === 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const surface = event.currentTarget as HTMLElement;\n if ('pointerId' in event) {\n surface.setPointerCapture?.(event.pointerId);\n }\n\n this.selectionStart = this.getSelectionPoint(event, page, surface);\n this.selectionRects.set([]);\n }\n\n protected updateTextSelection(event: PointerEvent | MouseEvent, page: PdfViewerPageView): void {\n if (!this.selectionStart || this.selectionStart.pageNumber !== page.pageNumber) {\n return;\n }\n\n event.preventDefault();\n const surface = event.currentTarget as HTMLElement;\n const currentPoint = this.getSelectionPoint(event, page, surface);\n\n if (this.selectionStart.offset === currentPoint.offset) {\n this.selectionRects.set([]);\n return;\n }\n\n this.selectionRects.set(this.getSelectionRects(page, this.selectionStart.offset, currentPoint.offset));\n }\n\n protected finishTextSelection(event: PointerEvent | MouseEvent, page: PdfViewerPageView): void {\n if (!this.selectionStart) {\n return;\n }\n\n this.updateTextSelection(event, page);\n this.selectionStart = null;\n\n const surface = event.currentTarget as HTMLElement;\n if ('pointerId' in event) {\n surface.releasePointerCapture?.(event.pointerId);\n }\n }\n\n private loadAnnotationsDataSource(\n dataSource: PdfViewerAnnotationDataSource | null | undefined,\n context: PdfViewerAnnotationDataSourceContext,\n token: number,\n ): () => void {\n if (!dataSource) {\n this.setAnnotationItems([], token);\n return () => {};\n }\n\n try {\n if (Array.isArray(dataSource)) {\n this.setAnnotationItems(dataSource, token);\n return () => {};\n }\n\n if (this.isServerAnnotationDataSource(dataSource)) {\n let isActive = true;\n\n dataSource.getAnnotations({\n ...context,\n successCallback: (annotations) => {\n if (isActive) {\n this.setAnnotationItems(annotations, token);\n }\n },\n failCallback: () => {\n if (isActive) {\n this.setAnnotationItems([], token);\n }\n },\n });\n\n return () => {\n isActive = false;\n };\n }\n\n const result = typeof dataSource === 'function' ? dataSource(context) : dataSource;\n\n return this.applyAnnotationDataSourceResult(result, token);\n } catch {\n this.setAnnotationItems([], token);\n return () => {};\n }\n }\n\n private applyAnnotationDataSourceResult(\n result: PdfViewerAnnotationDataSourceResult,\n token: number,\n ): () => void {\n if (isObservable(result)) {\n const subscription: Subscription = result.subscribe({\n next: (annotations) => this.setAnnotationItems(annotations, token),\n error: () => this.setAnnotationItems([], token),\n });\n\n return () => subscription.unsubscribe();\n }\n\n if (this.isPromiseLike(result)) {\n let isActive = true;\n\n result\n .then((annotations) => {\n if (isActive) {\n this.setAnnotationItems(annotations, token);\n }\n })\n .catch(() => {\n if (isActive) {\n this.setAnnotationItems([], token);\n }\n });\n\n return () => {\n isActive = false;\n };\n }\n\n this.setAnnotationItems(result, token);\n\n return () => {};\n }\n\n private setAnnotationItems(annotations: PdfViewerAnnotationView[], token: number): void {\n if (token === this.annotationDataSourceToken) {\n this.annotationItems.set(annotations ?? []);\n }\n }\n\n private isServerAnnotationDataSource(\n dataSource: PdfViewerAnnotationDataSource,\n ): dataSource is PdfViewerServerAnnotationDataSource {\n return typeof dataSource === 'object'\n && dataSource !== null\n && 'getAnnotations' in dataSource\n && typeof dataSource.getAnnotations === 'function';\n }\n\n private isPromiseLike<T>(value: unknown): value is Promise<T> {\n return typeof value === 'object'\n && value !== null\n && 'then' in value\n && typeof (value as Promise<T>).then === 'function';\n }\n\n protected cancelTextSelection(): void {\n this.selectionStart = null;\n }\n\n private async searchPdf(query: string, options: PdfViewerSearchOptions): Promise<void> {\n const token = ++this.searchToken;\n const keyword = query.trim();\n\n if (!keyword || !this.engine || !this.pdfDocument) {\n this.pdfSearchResults.set([]);\n return;\n }\n\n const flags: MatchFlag[] = [];\n\n if (options.caseSensitive) {\n flags.push(MatchFlag.MatchCase);\n }\n\n if (options.wholeWord) {\n flags.push(MatchFlag.MatchWholeWord);\n }\n\n try {\n const searchResult = await this.engine.searchAllPages(this.pdfDocument, keyword, { flags }).toPromise();\n\n if (token !== this.searchToken) {\n return;\n }\n\n this.pdfSearchResults.set(searchResult.results.map((result, index) => this.toSearchResultView(result, index)));\n } catch (error) {\n if (token === this.searchToken) {\n this.pdfSearchResults.set([]);\n this.error.emit(error);\n }\n }\n }\n\n private toSearchResultView(result: SearchResult, index: number): PdfViewerSearchResultView {\n const context = result.context;\n const excerpt = [\n context.truncatedLeft ? '...' : '',\n context.before,\n context.match,\n context.after,\n context.truncatedRight ? '...' : '',\n ]\n .filter((part) => part.length > 0)\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return {\n id: `${result.pageIndex}-${result.charIndex}-${result.charCount}-${index}`,\n pageNumber: result.pageIndex + 1,\n excerpt,\n };\n }\n\n private async loadDocument(source: PdfViewerSource, wasmUrl: string): Promise<void> {\n const token = ++this.loadToken;\n this.renderToken++;\n this.isLoading.set(true);\n this.errorState.set(null);\n this.pageCount.set(0);\n this.searchToken++;\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.pdfSearchResults.set([]);\n this.revokeRenderedPages();\n this.revokeThumbnailPages();\n\n await this.closeDocument();\n await this.registry?.destroy();\n this.registry = null;\n\n if (!source) {\n this.isLoading.set(false);\n return;\n }\n\n try {\n const engine = await this.engineService.getEngine(wasmUrl);\n\n if (token !== this.loadToken) {\n return;\n }\n\n this.engine = engine;\n this.registry = await this.engineService.createRegistry(engine, this.zoom());\n\n if (token !== this.loadToken) {\n return;\n }\n\n const documentId = this.createDocumentId();\n const pdfDocument = await this.openSource(engine, documentId, source);\n\n if (token !== this.loadToken) {\n await engine.closeDocument(pdfDocument).toPromise();\n return;\n }\n\n this.pdfDocument = pdfDocument;\n this.pageCount.set(pdfDocument.pageCount);\n this.activePage.set(this.clamp(this.activePage(), 1, Math.max(pdfDocument.pageCount, 1)));\n this.loaded.emit({ pageCount: pdfDocument.pageCount });\n this.initializePageShells(pdfDocument, this.zoom(), this.renderAll(), this.activePage());\n this.schedulePageObserverRefresh();\n await this.searchPdf(this.activeSearchQuery() || this.searchQuery(), {\n caseSensitive: false,\n wholeWord: false,\n });\n await this.renderVisiblePages(token, ++this.renderToken, {\n zoom: this.zoom(),\n activePage: this.activePage(),\n renderAll: this.renderAll(),\n withAnnotations: this.withAnnotations(),\n withForms: this.withForms(),\n });\n } catch (error) {\n if (token === this.loadToken) {\n this.errorState.set(error);\n this.error.emit(error);\n }\n } finally {\n if (token === this.loadToken) {\n this.isLoading.set(false);\n }\n }\n }\n\n private initializePageShells(\n pdfDocument: PdfDocumentObject,\n scale: number,\n renderAll: boolean,\n activePage: number,\n ): void {\n const previousPages = this.renderedPages();\n const previousPageMap = new Map(previousPages.map((page) => [page.pageNumber, page]));\n const pageNumbers = this.getPageNumbersToDisplay(pdfDocument, renderAll, activePage);\n const nextScale = this.sanitizeScale(scale);\n const nextPages = pageNumbers.map((pageNumber) => {\n const pdfPage = pdfDocument.pages[pageNumber - 1];\n const previousPage = previousPageMap.get(pageNumber);\n const displaySize = this.getPageDisplaySize(pdfPage, nextScale);\n const displayRotation = this.getPageDisplayRotation(pdfPage);\n const isFresh = previousPage?.url\n && Math.abs((previousPage.renderedScale ?? 0) - nextScale) < 0.0001\n && previousPage.renderedRotation === displayRotation;\n\n return {\n pageNumber,\n url: isFresh ? previousPage.url : null,\n scale: nextScale,\n renderedScale: isFresh ? previousPage.renderedScale : null,\n rotation: displayRotation,\n renderedRotation: isFresh ? previousPage.renderedRotation : null,\n width: displaySize.width,\n height: displaySize.height,\n isRendering: false,\n textGlyphs: isFresh ? previousPage.textGlyphs : [],\n };\n });\n const nextUrlSet = new Set(nextPages.map((page) => page.url).filter((url): url is string => !!url));\n\n for (const page of previousPages) {\n if (page.url && !nextUrlSet.has(page.url)) {\n this.revokeObjectUrl(page.url);\n }\n }\n\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.disconnectPageObserver();\n this.renderedPages.set(nextPages);\n }\n\n private getPageNumbersToDisplay(\n pdfDocument: PdfDocumentObject,\n renderAll: boolean,\n activePage: number,\n ): number[] {\n if (!renderAll) {\n return [this.clamp(activePage, 1, pdfDocument.pageCount)];\n }\n\n return Array.from({ length: pdfDocument.pageCount }, (_, index) => index + 1);\n }\n\n private scheduleVisiblePagesRender(\n options: {\n zoom: number;\n activePage: number;\n renderAll: boolean;\n withAnnotations: boolean;\n withForms: boolean;\n },\n ): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.cancelVisiblePageRenderFrame();\n const token = this.loadToken;\n const renderToken = ++this.renderToken;\n const renderDelay = this.getQualityRenderDelay();\n\n if (renderDelay > 0) {\n this.visiblePageRenderTimeout = targetWindow.setTimeout(() => {\n this.visiblePageRenderTimeout = null;\n this.queueVisiblePageRenderFrame(token, renderToken, options);\n }, renderDelay);\n return;\n }\n\n this.queueVisiblePageRenderFrame(token, renderToken, options);\n }\n\n private queueVisiblePageRenderFrame(\n token: number,\n renderToken: number,\n options: {\n zoom: number;\n activePage: number;\n renderAll: boolean;\n withAnnotations: boolean;\n withForms: boolean;\n },\n ): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.visiblePageRenderFrame = targetWindow.requestAnimationFrame(() => {\n this.visiblePageRenderFrame = null;\n void this.renderVisiblePages(token, renderToken, options);\n });\n }\n\n private scheduleCurrentVisiblePagesRender(): void {\n this.scheduleVisiblePagesRender({\n zoom: this.zoom(),\n activePage: this.activePage(),\n renderAll: this.renderAll(),\n withAnnotations: this.withAnnotations(),\n withForms: this.withForms(),\n });\n }\n\n private async renderVisiblePages(\n token: number,\n renderToken: number,\n options: {\n zoom: number;\n activePage: number;\n renderAll: boolean;\n withAnnotations: boolean;\n withForms: boolean;\n },\n ): Promise<void> {\n if (!this.engine || !this.pdfDocument) {\n return;\n }\n\n const pdfDocument = this.pdfDocument;\n const renderScale = this.sanitizeScale(options.zoom);\n const pageNumbers = this.getPriorityPageNumbers(options.activePage, options.renderAll);\n\n for (const pageNumber of pageNumbers) {\n if (!this.isRenderCurrent(token, renderToken)) {\n return;\n }\n\n const currentPage = this.renderedPages().find((page) => page.pageNumber === pageNumber);\n const page = pdfDocument.pages[pageNumber - 1];\n const renderRotation = this.getPageDisplayRotation(page);\n\n if (!currentPage || Math.abs(currentPage.scale - renderScale) > 0.0001) {\n continue;\n }\n\n if (\n currentPage.url\n && Math.abs((currentPage.renderedScale ?? 0) - renderScale) < 0.0001\n && currentPage.renderedRotation === renderRotation\n ) {\n continue;\n }\n\n this.patchRenderedPage(pageNumber, { isRendering: !currentPage.url });\n const rasterOptions = this.getPageRasterRenderOptions(page, renderScale);\n const blob = await this.engine.renderPage(pdfDocument, page, {\n scaleFactor: rasterOptions.scaleFactor,\n rotation: renderRotation,\n dpr: rasterOptions.dpr,\n withAnnotations: options.withAnnotations,\n withForms: options.withForms,\n }).toPromise();\n\n if (!this.isRenderCurrent(token, renderToken)) {\n return;\n }\n\n const displaySize = this.getPageDisplaySize(page, renderScale);\n const textGlyphs = this.pageRotation() === Rotation.Degree0\n ? await this.getPageTextGlyphs(pdfDocument, page, renderScale)\n : [];\n\n if (!this.isRenderCurrent(token, renderToken)) {\n return;\n }\n\n const url = this.document.defaultView?.URL.createObjectURL(blob) ?? URL.createObjectURL(blob);\n const previousUrl = this.renderedPages().find((renderedPage) => renderedPage.pageNumber === pageNumber)?.url;\n\n this.patchRenderedPage(pageNumber, {\n url,\n scale: renderScale,\n renderedScale: renderScale,\n rotation: renderRotation,\n renderedRotation: renderRotation,\n width: displaySize.width,\n height: displaySize.height,\n isRendering: false,\n textGlyphs,\n });\n\n if (previousUrl && previousUrl !== url) {\n this.revokeObjectUrl(previousUrl);\n }\n\n this.pageRendered.emit({ pageNumber, url, width: displaySize.width, height: displaySize.height });\n }\n }\n\n private setZoom(scale: number): void {\n const nextZoom = this.sanitizeScale(scale);\n\n if (this.zoom() !== nextZoom) {\n this.lastZoomChangeTime = this.getCurrentTime();\n this.zoom.set(nextZoom);\n }\n\n this.applyInstantZoom(nextZoom);\n }\n\n private applyInstantZoom(scale: number): void {\n const nextScale = this.sanitizeScale(scale);\n const pdfDocument = this.pdfDocument;\n const pages = this.renderedPages();\n\n if (!pdfDocument || pages.length === 0) {\n return;\n }\n\n let hasChanges = false;\n const urlsToRevoke: string[] = [];\n const nextPages = pages.map((page) => {\n const pdfPage = pdfDocument.pages[page.pageNumber - 1];\n const displaySize = this.getPageDisplaySize(pdfPage, nextScale);\n const displayRotation = this.getPageDisplayRotation(pdfPage);\n const scaleChanged = Math.abs(page.scale - nextScale) >= 0.0001;\n const rotationChanged = page.rotation !== displayRotation || page.renderedRotation !== displayRotation;\n\n if (!scaleChanged && !rotationChanged && page.width === displaySize.width && page.height === displaySize.height) {\n return page;\n }\n\n hasChanges = true;\n\n if (rotationChanged && page.url) {\n urlsToRevoke.push(page.url);\n }\n\n return {\n ...page,\n url: rotationChanged ? null : page.url,\n scale: nextScale,\n renderedScale: rotationChanged ? null : page.renderedScale,\n rotation: displayRotation,\n renderedRotation: rotationChanged ? null : page.renderedRotation,\n width: displaySize.width,\n height: displaySize.height,\n isRendering: false,\n textGlyphs: [],\n };\n });\n\n if (!hasChanges) {\n return;\n }\n\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.renderedPages.set(nextPages);\n for (const url of urlsToRevoke) {\n this.revokeObjectUrl(url);\n }\n this.schedulePageObserverRefresh();\n }\n\n private getPriorityPageNumbers(activePage: number, renderAll: boolean): number[] {\n if (!this.pdfDocument) {\n return [];\n }\n\n const pageCount = this.pdfDocument.pageCount;\n const visiblePageNumbers = renderAll\n ? this.getVisiblePageNumbers()\n : [this.clamp(activePage, 1, pageCount)];\n const priorityPageNumbers = new Set<number>();\n\n for (const pageNumber of visiblePageNumbers.length > 0 ? visiblePageNumbers : [activePage]) {\n for (let candidate = pageNumber - 1; candidate <= pageNumber + 1; candidate++) {\n if (candidate >= 1 && candidate <= pageCount) {\n priorityPageNumbers.add(candidate);\n }\n }\n }\n\n priorityPageNumbers.add(this.clamp(activePage, 1, pageCount));\n\n return [...priorityPageNumbers].sort((a, b) => {\n const activeDistance = Math.abs(a - activePage) - Math.abs(b - activePage);\n\n return activeDistance || a - b;\n });\n }\n\n private getVisiblePageNumbers(): number[] {\n const container = this.viewerBody()?.nativeElement;\n\n if (!container) {\n return [];\n }\n\n const containerRect = container.getBoundingClientRect();\n const verticalPrefetchMargin = containerRect.height;\n const horizontalPrefetchMargin = containerRect.width;\n const pages = Array.from(container.querySelectorAll<HTMLElement>('[data-ngs-pdf-page]'));\n const visiblePageNumbers: number[] = [];\n\n for (const page of pages) {\n const rect = page.getBoundingClientRect();\n const pageNumber = Number(page.dataset['ngsPdfPage']);\n\n if (\n Number.isFinite(pageNumber) &&\n rect.bottom >= containerRect.top - verticalPrefetchMargin &&\n rect.top <= containerRect.bottom + verticalPrefetchMargin &&\n rect.right >= containerRect.left - horizontalPrefetchMargin &&\n rect.left <= containerRect.right + horizontalPrefetchMargin\n ) {\n visiblePageNumbers.push(pageNumber);\n }\n }\n\n return visiblePageNumbers;\n }\n\n private patchRenderedPage(pageNumber: number, patch: Partial<PdfViewerPageView>): void {\n this.renderedPages.update((pages) =>\n pages.map((page) => page.pageNumber === pageNumber ? { ...page, ...patch } : page),\n );\n }\n\n private async renderThumbnails(\n token: number,\n options: {\n withAnnotations: boolean;\n },\n ): Promise<void> {\n if (!this.engine || !this.pdfDocument) {\n return;\n }\n\n const pdfDocument = this.pdfDocument;\n const thumbnailScale = 0.18;\n const nextThumbnails: PdfViewerThumbnailView[] = [];\n const previousThumbnails = this.thumbnailPages();\n\n for (const page of pdfDocument.pages) {\n const blob = await this.engine.renderThumbnail(pdfDocument, page, {\n scaleFactor: thumbnailScale,\n rotation: this.getPageDisplayRotation(page),\n dpr: this.getDevicePixelRatio(),\n withAnnotations: options.withAnnotations,\n }).toPromise();\n\n if (token !== this.loadToken) {\n const staleUrl = this.document.defaultView?.URL.createObjectURL(blob) ?? URL.createObjectURL(blob);\n this.revokeObjectUrl(staleUrl);\n return;\n }\n\n const url = this.document.defaultView?.URL.createObjectURL(blob) ?? URL.createObjectURL(blob);\n const pageNumber = page.index + 1;\n const displaySize = this.getPageDisplaySize(page, thumbnailScale);\n nextThumbnails.push({ pageNumber, url, width: displaySize.width, height: displaySize.height });\n }\n\n if (token !== this.loadToken) {\n for (const thumbnail of nextThumbnails) {\n this.revokeObjectUrl(thumbnail.url);\n }\n return;\n }\n\n this.thumbnailPages.set(nextThumbnails);\n\n for (const thumbnail of previousThumbnails) {\n this.revokeObjectUrl(thumbnail.url);\n }\n }\n\n private async getPageTextGlyphs(\n pdfDocument: PdfDocumentObject,\n page: PdfPageObject,\n scale: number,\n ): Promise<PdfViewerTextGlyphView[]> {\n if (!this.engine) {\n return [];\n }\n\n try {\n const geometry = await this.engine.getPageGeometry(pdfDocument, page).toPromise();\n const displaySize = this.getPageDisplaySize(page, scale);\n const glyphs: PdfViewerTextGlyphView[] = [];\n\n for (const run of geometry.runs) {\n for (const glyph of run.glyphs) {\n if ((glyph.flags & 2) === 2 || glyph.width <= 0 || glyph.height <= 0) {\n continue;\n }\n\n const glyphLeft = glyph.x * scale;\n const glyphTop = glyph.y * scale;\n const glyphWidth = glyph.width * scale;\n const glyphHeight = glyph.height * scale;\n const lineHeight = Math.max(\n glyphHeight,\n (run.fontSize ?? glyph.height) * this.textSelectionLineHeight * scale,\n );\n const lineTop = this.clamp(glyphTop - (lineHeight - glyphHeight) / 2, 0, displaySize.height);\n const lineBottom = this.clamp(lineTop + lineHeight, 0, displaySize.height);\n const left = this.clamp(glyphLeft, 0, displaySize.width);\n const right = this.clamp(glyphLeft + glyphWidth, 0, displaySize.width);\n\n glyphs.push({\n index: glyphs.length,\n left,\n top: this.clamp(glyphTop, 0, displaySize.height),\n width: Math.max(0, right - left),\n height: Math.max(0, glyphHeight),\n lineTop,\n lineHeight: Math.max(0, lineBottom - lineTop),\n lineId: -1,\n });\n }\n }\n\n return this.assignTextGlyphLines(glyphs).map((glyph) => ({\n ...glyph,\n left: this.roundCssPixel(glyph.left),\n top: this.roundCssPixel(glyph.top),\n width: this.roundCssPixel(glyph.width),\n height: this.roundCssPixel(glyph.height),\n lineTop: this.roundCssPixel(glyph.lineTop),\n lineHeight: this.roundCssPixel(glyph.lineHeight),\n }));\n } catch {\n return [];\n }\n }\n\n private assignTextGlyphLines(glyphs: PdfViewerTextGlyphView[]): PdfViewerTextGlyphView[] {\n const lines: PdfViewerTextLineView[] = [];\n\n for (const glyph of [...glyphs].sort((a, b) => a.lineTop - b.lineTop || a.left - b.left)) {\n const glyphBottom = glyph.lineTop + glyph.lineHeight;\n const glyphCenter = glyph.lineTop + glyph.lineHeight / 2;\n let line = lines.find((candidate) =>\n this.rangesOverlap(candidate.top, candidate.bottom, glyph.lineTop, glyphBottom) ||\n Math.abs(candidate.center - glyphCenter) <= Math.max(2, glyph.lineHeight * 0.4),\n );\n\n if (!line) {\n line = {\n lineId: lines.length,\n glyphs: [],\n top: glyph.lineTop,\n bottom: glyphBottom,\n left: glyph.left,\n right: glyph.left + glyph.width,\n center: glyphCenter,\n };\n lines.push(line);\n }\n\n glyph.lineId = line.lineId;\n line.glyphs.push(glyph);\n line.top = Math.min(line.top, glyph.lineTop);\n line.bottom = Math.max(line.bottom, glyphBottom);\n line.left = Math.min(line.left, glyph.left);\n line.right = Math.max(line.right, glyph.left + glyph.width);\n line.center = line.top + (line.bottom - line.top) / 2;\n }\n\n return glyphs;\n }\n\n private getTextLines(glyphs: PdfViewerTextGlyphView[]): PdfViewerTextLineView[] {\n const lines = new Map<number, PdfViewerTextLineView>();\n\n for (const glyph of glyphs) {\n const glyphBottom = glyph.lineTop + glyph.lineHeight;\n const glyphRight = glyph.left + glyph.width;\n const existing = lines.get(glyph.lineId);\n\n if (!existing) {\n lines.set(glyph.lineId, {\n lineId: glyph.lineId,\n glyphs: [glyph],\n top: glyph.lineTop,\n bottom: glyphBottom,\n left: glyph.left,\n right: glyphRight,\n center: glyph.lineTop + glyph.lineHeight / 2,\n });\n continue;\n }\n\n existing.glyphs.push(glyph);\n existing.top = Math.min(existing.top, glyph.lineTop);\n existing.bottom = Math.max(existing.bottom, glyphBottom);\n existing.left = Math.min(existing.left, glyph.left);\n existing.right = Math.max(existing.right, glyphRight);\n existing.center = existing.top + (existing.bottom - existing.top) / 2;\n }\n\n return [...lines.values()]\n .map((line) => ({\n ...line,\n glyphs: [...line.glyphs].sort((a, b) => a.left - b.left || a.index - b.index),\n }))\n .sort((a, b) => a.top - b.top || a.left - b.left);\n }\n\n private rangesOverlap(aStart: number, aEnd: number, bStart: number, bEnd: number): boolean {\n return aStart < bEnd && aEnd > bStart;\n }\n\n private getCaretOffsetAtPoint(page: PdfViewerPageView, point: Pick<PdfViewerSelectionPoint, 'x' | 'y'>): number {\n const lines = this.getTextLines(page.textGlyphs);\n\n if (lines.length === 0) {\n return 0;\n }\n\n const line =\n lines.find((candidate) => point.y >= candidate.top && point.y <= candidate.bottom) ??\n lines.reduce((closest, candidate) =>\n Math.abs(candidate.center - point.y) < Math.abs(closest.center - point.y) ? candidate : closest,\n );\n const glyphs = line.glyphs;\n\n if (glyphs.length === 0) {\n return 0;\n }\n\n for (const glyph of glyphs) {\n if (point.x < glyph.left + glyph.width / 2) {\n return glyph.index;\n }\n }\n\n return glyphs[glyphs.length - 1].index + 1;\n }\n\n private getSelectionPoint(\n event: PointerEvent | MouseEvent,\n page: PdfViewerPageView,\n surface: HTMLElement,\n ): PdfViewerSelectionPoint {\n const rect = surface.getBoundingClientRect();\n const x = this.clamp(event.clientX - rect.left, 0, page.width);\n const y = this.clamp(event.clientY - rect.top, 0, page.height);\n\n return {\n pageNumber: page.pageNumber,\n x,\n y,\n offset: this.getCaretOffsetAtPoint(page, { x, y }),\n };\n }\n\n private getSelectionRects(\n page: PdfViewerPageView,\n startOffset: number,\n endOffset: number,\n ): PdfViewerSelectionRectView[] {\n const rangeStart = Math.min(startOffset, endOffset);\n const rangeEnd = Math.max(startOffset, endOffset);\n const selectedGlyphs = page.textGlyphs.filter((glyph) =>\n glyph.index >= rangeStart && glyph.index < rangeEnd,\n );\n\n return this.getTextLines(selectedGlyphs).map((line) => {\n const left = this.clamp(line.left - this.textSelectionHorizontalPadding, 0, page.width);\n const top = this.clamp(line.top, 0, page.height);\n const right = this.clamp(line.right + this.textSelectionHorizontalPadding, 0, page.width);\n const bottom = this.clamp(line.bottom, 0, page.height);\n\n return {\n text: '',\n pageNumber: page.pageNumber,\n left: this.roundCssPixel(left),\n top: this.roundCssPixel(top),\n width: this.roundCssPixel(Math.max(0, right - left)),\n height: this.roundCssPixel(Math.max(0, bottom - top)),\n };\n });\n }\n\n private async openSource(\n engine: PdfEngine<Blob>,\n documentId: string,\n source: Exclude<PdfViewerSource, null | undefined>,\n ): Promise<PdfDocumentObject> {\n if (typeof source === 'string') {\n const content = await this.fetchPdfSource(source);\n return this.openDocumentBuffer(engine, documentId, content);\n }\n\n if (source instanceof Blob) {\n return this.openDocumentBuffer(engine, documentId, await source.arrayBuffer());\n }\n\n if (source instanceof Uint8Array) {\n const content = new Uint8Array(source).buffer;\n return this.openDocumentBuffer(engine, documentId, content);\n }\n\n return this.openDocumentBuffer(engine, documentId, source);\n }\n\n private async fetchPdfSource(source: string): Promise<ArrayBuffer> {\n const response = await fetch(source);\n\n if (!response.ok) {\n throw new Error(`PDF request failed with status ${response.status}`);\n }\n\n return response.arrayBuffer();\n }\n\n private openDocumentBuffer(\n engine: PdfEngine<Blob>,\n documentId: string,\n content: ArrayBuffer,\n ): Promise<PdfDocumentObject> {\n return this.withTimeout(\n engine.openDocumentBuffer({ id: documentId, content }).toPromise(),\n this.documentOpenTimeoutMs,\n 'PDF document opening timed out',\n );\n }\n\n private withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timeoutId = setTimeout(() => reject(new Error(message)), timeoutMs);\n\n promise.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error: unknown) => {\n clearTimeout(timeoutId);\n reject(error);\n }\n );\n });\n }\n\n private async closeDocument(): Promise<void> {\n if (!this.engine || !this.pdfDocument) {\n this.pdfDocument = null;\n return;\n }\n\n const documentToClose = this.pdfDocument;\n this.pdfDocument = null;\n\n try {\n await this.engine.closeDocument(documentToClose).toPromise();\n } catch {\n // Best-effort cleanup; the viewer should not surface cleanup failures as user-facing load errors.\n }\n }\n\n private revokeRenderedPages(): void {\n this.disconnectPageObserver();\n this.cancelVisiblePageRenderFrame();\n\n for (const page of this.renderedPages()) {\n if (page.url) {\n this.revokeObjectUrl(page.url);\n }\n }\n\n this.renderedPages.set([]);\n }\n\n private revokeThumbnailPages(): void {\n for (const thumbnail of this.thumbnailPages()) {\n this.revokeObjectUrl(thumbnail.url);\n }\n\n this.thumbnailPages.set([]);\n }\n\n private revokeObjectUrl(url: string): void {\n const targetWindow = this.document.defaultView;\n\n if (targetWindow) {\n targetWindow.URL.revokeObjectURL(url);\n return;\n }\n\n URL.revokeObjectURL(url);\n }\n\n private getSourceName(source: PdfViewerSource): string {\n if (typeof File !== 'undefined' && source instanceof File && source.name) {\n return source.name;\n }\n\n if (typeof source !== 'string' || source.trim().length === 0) {\n return 'Document.pdf';\n }\n\n try {\n const url = new URL(source, this.document.baseURI);\n const pathName = url.pathname.split('/').filter(Boolean).pop();\n\n return pathName ? decodeURIComponent(pathName) : 'Document.pdf';\n } catch {\n const pathName = source.split('?')[0]?.split('#')[0]?.split('/').filter(Boolean).pop();\n\n return pathName ? decodeURIComponent(pathName) : 'Document.pdf';\n }\n }\n\n private sanitizePage(pageNumber: number): number {\n return this.clamp(Math.trunc(Number.isFinite(pageNumber) ? pageNumber : 1), 1, Math.max(this.pageCount(), 1));\n }\n\n private sanitizeScale(scale: number): number {\n const bounds = this.getScaleBounds();\n return this.clamp(Number.isFinite(scale) ? scale : 1, bounds.min, bounds.max);\n }\n\n private roundZoom(value: number): number {\n return this.sanitizeScale(Math.round(this.sanitizeScale(value) * 100) / 100);\n }\n\n private floorFitZoom(value: number): number {\n return this.sanitizeScale(Math.floor(this.sanitizeScale(value) * 100) / 100);\n }\n\n private clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n }\n\n private roundCssPixel(value: number): number {\n return Math.round(value * 100) / 100;\n }\n\n private parseCssPixel(value: string): number {\n const parsed = Number.parseFloat(value);\n\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private getDevicePixelRatio(): number {\n return this.document.defaultView?.devicePixelRatio || 1;\n }\n\n private getPageRasterRenderOptions(page: PdfPageObject, scale: number): { scaleFactor: number; dpr: number } {\n const devicePixelRatio = Math.max(1, this.getDevicePixelRatio());\n const pageSize = this.getPageBaseSize(page);\n const maxRenderPixels = this.sanitizePositiveNumber(this.maxRenderPixels(), 128_000_000);\n const maxRenderDimension = this.sanitizePositiveNumber(this.maxRenderDimension(), 13_000);\n const targetEffectiveScale = scale * devicePixelRatio;\n const dimensionEffectiveScale = maxRenderDimension / Math.max(pageSize.width, pageSize.height);\n const pixelEffectiveScale = Math.sqrt(maxRenderPixels / (pageSize.width * pageSize.height));\n const effectiveScale = this.clamp(\n Math.min(targetEffectiveScale, dimensionEffectiveScale, pixelEffectiveScale),\n 0.05,\n targetEffectiveScale,\n );\n const dprAtLayoutScale = effectiveScale / scale;\n\n if (dprAtLayoutScale >= 1) {\n return {\n scaleFactor: scale,\n dpr: this.clamp(dprAtLayoutScale, 1, devicePixelRatio),\n };\n }\n\n return {\n scaleFactor: effectiveScale,\n dpr: 1,\n };\n }\n\n private createDocumentId(): string {\n return `ngs-pdf-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n\n private isRenderCurrent(loadToken: number, renderToken: number): boolean {\n return loadToken === this.loadToken && renderToken === this.renderToken;\n }\n\n private cancelScrollSyncFrame(): void {\n if (this.scrollSyncFrame === null) {\n return;\n }\n\n this.document.defaultView?.cancelAnimationFrame(this.scrollSyncFrame);\n this.scrollSyncFrame = null;\n }\n\n private cancelPageObserverFrame(): void {\n if (this.pageObserverTimeout !== null) {\n this.document.defaultView?.clearTimeout(this.pageObserverTimeout);\n this.pageObserverTimeout = null;\n }\n\n if (this.pageObserverFrame === null) {\n return;\n }\n\n this.document.defaultView?.cancelAnimationFrame(this.pageObserverFrame);\n this.pageObserverFrame = null;\n }\n\n private cancelVisiblePageRenderFrame(): void {\n if (this.visiblePageRenderTimeout !== null) {\n this.document.defaultView?.clearTimeout(this.visiblePageRenderTimeout);\n this.visiblePageRenderTimeout = null;\n }\n\n if (this.visiblePageRenderFrame === null) {\n return;\n }\n\n this.document.defaultView?.cancelAnimationFrame(this.visiblePageRenderFrame);\n this.visiblePageRenderFrame = null;\n }\n\n private getCurrentTime(): number {\n return this.document.defaultView?.performance?.now() ?? Date.now();\n }\n\n private getQualityRenderDelay(): number {\n const elapsed = this.getCurrentTime() - this.lastZoomChangeTime;\n\n if (elapsed >= this.qualityRenderZoomIdleDelay) {\n return 0;\n }\n\n return Math.max(0, this.qualityRenderZoomIdleDelay - elapsed);\n }\n\n private getZoomAnchor(container: HTMLElement, event: WheelEvent): PdfViewerZoomAnchor | null {\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n return null;\n }\n\n const targetDocument = container.ownerDocument;\n const targetElement = targetDocument.elementFromPoint(event.clientX, event.clientY);\n const pageElement = targetElement?.closest<HTMLElement>('[data-ngs-pdf-page]');\n\n if (!pageElement || !container.contains(pageElement)) {\n return null;\n }\n\n const containerRect = container.getBoundingClientRect();\n const pageRect = pageElement.getBoundingClientRect();\n const pageNumber = Number(pageElement.dataset['ngsPdfPage']);\n\n if (!Number.isFinite(pageNumber) || pageRect.width <= 0 || pageRect.height <= 0) {\n return null;\n }\n\n return {\n container,\n pageNumber,\n relativeX: this.clamp((event.clientX - pageRect.left) / pageRect.width, 0, 1),\n relativeY: this.clamp((event.clientY - pageRect.top) / pageRect.height, 0, 1),\n viewportX: event.clientX - containerRect.left,\n viewportY: event.clientY - containerRect.top,\n };\n }\n\n private restoreZoomAnchor(anchor: PdfViewerZoomAnchor | null): void {\n if (!anchor) {\n return;\n }\n\n const targetWindow = this.document.defaultView;\n const restore = (): void => {\n const pageElement = anchor.container.querySelector<HTMLElement>(`[data-ngs-pdf-page=\"${anchor.pageNumber}\"]`);\n\n if (!pageElement) {\n return;\n }\n\n const containerRect = anchor.container.getBoundingClientRect();\n const pageRect = pageElement.getBoundingClientRect();\n const targetLeft =\n anchor.container.scrollLeft +\n pageRect.left -\n containerRect.left +\n pageRect.width * anchor.relativeX -\n anchor.viewportX;\n const targetTop =\n anchor.container.scrollTop +\n pageRect.top -\n containerRect.top +\n pageRect.height * anchor.relativeY -\n anchor.viewportY;\n\n anchor.container.scrollLeft = this.clamp(targetLeft, 0, Math.max(0, anchor.container.scrollWidth - anchor.container.clientWidth));\n anchor.container.scrollTop = this.clamp(targetTop, 0, Math.max(0, anchor.container.scrollHeight - anchor.container.clientHeight));\n };\n\n if (!targetWindow) {\n restore();\n return;\n }\n\n targetWindow.requestAnimationFrame(restore);\n }\n\n private disconnectPageObserver(): void {\n this.cancelPageObserverFrame();\n this.pageIntersectionObserver?.disconnect();\n this.pageIntersectionObserver = null;\n this.visiblePageRatios.clear();\n }\n\n private schedulePageObserverRefresh(): void {\n const targetWindow = this.document.defaultView;\n\n if (!this.isBrowser || !targetWindow) {\n return;\n }\n\n this.cancelPageObserverFrame();\n this.pageObserverRefreshAttempts = 0;\n this.scheduleNextPageObserverRefresh();\n }\n\n private scheduleNextPageObserverRefresh(): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.pageObserverTimeout = targetWindow.setTimeout(() => {\n this.pageObserverTimeout = null;\n this.pageObserverFrame = targetWindow.requestAnimationFrame(() => {\n this.pageObserverFrame = null;\n const isReady = this.setupPageIntersectionObserver();\n\n if (!isReady && this.pageObserverRefreshAttempts < 10) {\n this.pageObserverRefreshAttempts++;\n this.scheduleNextPageObserverRefresh();\n return;\n }\n\n this.syncActivePageFromViewport();\n });\n }, 0);\n }\n\n private setupPageIntersectionObserver(): boolean {\n const targetWindow = this.document.defaultView;\n const container = this.viewerBody()?.nativeElement;\n\n if (!targetWindow || !container || !('IntersectionObserver' in targetWindow)) {\n return false;\n }\n\n const pages = Array.from(container.querySelectorAll<HTMLElement>('[data-ngs-pdf-page]'));\n\n if (pages.length === 0) {\n return false;\n }\n\n this.pageIntersectionObserver?.disconnect();\n this.visiblePageRatios.clear();\n this.pageIntersectionObserver = new targetWindow.IntersectionObserver((entries) => {\n if (this.isProgrammaticScrollActive()) {\n this.scheduleCurrentVisiblePagesRender();\n return;\n }\n\n for (const entry of entries) {\n const pageNumber = Number(entry.target.getAttribute('data-ngs-pdf-page'));\n\n if (!Number.isFinite(pageNumber)) {\n continue;\n }\n\n this.visiblePageRatios.set(pageNumber, entry.intersectionRatio);\n }\n\n this.syncActivePageFromIntersections();\n this.scheduleCurrentVisiblePagesRender();\n }, {\n root: container,\n threshold: [0, 0.1, 0.25, 0.5, 0.75, 1],\n });\n\n for (const page of pages) {\n this.pageIntersectionObserver.observe(page);\n }\n\n return true;\n }\n\n private getFitScale(mode: Extract<PdfViewerZoomMode, 'fit-page' | 'fit-width'>): number | null {\n const container = this.viewerBody()?.nativeElement;\n const page = this.pdfDocument?.pages[this.clamp(this.activePage(), 1, Math.max(this.pageCount(), 1)) - 1];\n\n if (!container || !page) {\n return null;\n }\n\n const pageSize = this.getPageBaseSize(page);\n const pagesElement = container.querySelector<HTMLElement>('.pdf-viewer-pages');\n const computedStyle = pagesElement && this.document.defaultView\n ? this.document.defaultView.getComputedStyle(pagesElement)\n : null;\n const horizontalPadding = computedStyle\n ? this.parseCssPixel(computedStyle.paddingLeft) + this.parseCssPixel(computedStyle.paddingRight)\n : 0;\n const verticalPadding = computedStyle\n ? this.parseCssPixel(computedStyle.paddingTop) + this.parseCssPixel(computedStyle.paddingBottom)\n : 0;\n const fitAllowance = 1;\n const availableWidth = Math.max(1, container.clientWidth - horizontalPadding - fitAllowance);\n const availableHeight = Math.max(1, container.clientHeight - verticalPadding - fitAllowance);\n const widthScale = availableWidth / pageSize.width;\n\n if (mode === 'fit-width') {\n return this.floorFitZoom(widthScale);\n }\n\n return this.floorFitZoom(Math.min(widthScale, availableHeight / pageSize.height));\n }\n\n private getScaleBounds(): { min: number; max: number } {\n const min = this.sanitizePositiveNumber(this.minScale(), 0.2);\n const max = this.sanitizePositiveNumber(this.maxScale(), 60);\n\n return min <= max ? { min, max } : { min: max, max: min };\n }\n\n private sanitizeZoomStep(): number {\n return this.sanitizePositiveNumber(this.zoomStep(), 0.1);\n }\n\n private sanitizePositiveNumber(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? value : fallback;\n }\n\n private getPageDisplaySize(page: PdfPageObject, scale: number): { width: number; height: number } {\n const pageSize = this.getPageBaseSize(page);\n\n return {\n width: Math.max(1, Math.round(pageSize.width * scale)),\n height: Math.max(1, Math.round(pageSize.height * scale)),\n };\n }\n\n private getPageBaseSize(page: PdfPageObject): { width: number; height: number } {\n const rotation = this.getPageDisplayRotation(page);\n const isRotatedSideways = rotation === Rotation.Degree90 || rotation === Rotation.Degree270;\n const width = isRotatedSideways ? page.size.height : page.size.width;\n const height = isRotatedSideways ? page.size.width : page.size.height;\n\n return {\n width: Math.max(1, width),\n height: Math.max(1, height),\n };\n }\n\n private getPageDisplayRotation(page: PdfPageObject): Rotation {\n return this.normalizeRotation(page.rotation + this.pageRotation());\n }\n\n private normalizeRotation(rotation: number): Rotation {\n return (((rotation % 4) + 4) % 4) as Rotation;\n }\n\n private scrollToPage(pageNumber: number): void {\n if (!this.renderAll()) {\n return;\n }\n\n const container = this.viewerBody()?.nativeElement;\n const target = container?.querySelector<HTMLElement>(`[data-ngs-pdf-page=\"${pageNumber}\"]`);\n\n if (!container || !target) {\n return;\n }\n\n const nextScrollTop = this.getPageScrollTop(container, target);\n const nextScrollLeft = this.getPageScrollLeft(container, target);\n const scrollDistance = Math.hypot(\n container.scrollTop - nextScrollTop,\n container.scrollLeft - nextScrollLeft,\n );\n\n this.startProgrammaticScrollLock(pageNumber, scrollDistance);\n container.scrollTo({\n top: nextScrollTop,\n left: nextScrollLeft,\n behavior: 'smooth',\n });\n }\n\n private syncActivePageFromViewport(): void {\n const pageNumber = this.findActivePageInViewport();\n\n this.activatePageFromScroll(pageNumber);\n }\n\n private syncActivePageFromIntersections(): void {\n let activePage: number | null = null;\n let activeRatio = 0;\n\n for (const [pageNumber, ratio] of this.visiblePageRatios) {\n if (ratio > activeRatio) {\n activeRatio = ratio;\n activePage = pageNumber;\n }\n }\n\n if (!activePage) {\n activePage = this.findActivePageInViewport();\n }\n\n this.activatePageFromScroll(activePage);\n }\n\n private activatePageFromScroll(pageNumber: number | null): void {\n if (this.isProgrammaticScrollActive()) {\n return;\n }\n\n if (!pageNumber || pageNumber === this.activePage()) {\n return;\n }\n\n this.activePage.set(pageNumber);\n this.pageChanged.emit(pageNumber);\n this.scrollPageListToPage(pageNumber);\n this.scheduleCurrentVisiblePagesRender();\n }\n\n private findActivePageInViewport(): number | null {\n const container = this.viewerBody()?.nativeElement;\n\n if (!container) {\n return null;\n }\n\n const containerRect = container.getBoundingClientRect();\n const viewportCenterX = containerRect.left + containerRect.width / 2;\n const viewportCenterY = containerRect.top + containerRect.height / 2;\n const pages = Array.from(container.querySelectorAll<HTMLElement>('[data-ngs-pdf-page]'));\n\n let closestPage: number | null = null;\n let closestDistance = Number.POSITIVE_INFINITY;\n let mostVisiblePage: number | null = null;\n let mostVisibleArea = 0;\n\n for (const page of pages) {\n const rect = page.getBoundingClientRect();\n const pageNumber = Number(page.dataset['ngsPdfPage']);\n\n if (!Number.isFinite(pageNumber)) {\n continue;\n }\n\n if (\n rect.left <= viewportCenterX &&\n rect.right >= viewportCenterX &&\n rect.top <= viewportCenterY &&\n rect.bottom >= viewportCenterY\n ) {\n return pageNumber;\n }\n\n const visibleWidth = Math.max(0, Math.min(rect.right, containerRect.right) - Math.max(rect.left, containerRect.left));\n const visibleHeight = Math.max(0, Math.min(rect.bottom, containerRect.bottom) - Math.max(rect.top, containerRect.top));\n const visibleArea = visibleWidth * visibleHeight;\n\n if (visibleArea > mostVisibleArea) {\n mostVisibleArea = visibleArea;\n mostVisiblePage = pageNumber;\n }\n\n const pageCenterX = rect.left + rect.width / 2;\n const pageCenterY = rect.top + rect.height / 2;\n const distance = Math.hypot(pageCenterX - viewportCenterX, pageCenterY - viewportCenterY);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestPage = pageNumber;\n }\n }\n\n return mostVisiblePage ?? closestPage;\n }\n\n private scrollPageListToPage(pageNumber: number): void {\n const container = this.pageList()?.nativeElement;\n const target = container?.querySelector<HTMLElement>(`[data-ngs-pdf-page-button=\"${pageNumber}\"]`);\n\n if (!container || !target) {\n return;\n }\n\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const isAbove = targetRect.top < containerRect.top;\n const isBelow = targetRect.bottom > containerRect.bottom;\n\n if (!isAbove && !isBelow) {\n return;\n }\n\n container.scrollTo({\n top: this.getElementScrollTop(container, target, 'center'),\n behavior: 'smooth',\n });\n }\n\n private getPageScrollTop(container: HTMLElement, target: HTMLElement): number {\n return this.getElementScrollTop(container, target, 'start');\n }\n\n private getPageScrollLeft(container: HTMLElement, target: HTMLElement): number {\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const targetLeft = container.scrollLeft + targetRect.left - containerRect.left;\n\n return this.clamp(targetLeft, 0, Math.max(0, container.scrollWidth - container.clientWidth));\n }\n\n private getElementScrollTop(container: HTMLElement, target: HTMLElement, align: 'start' | 'center'): number {\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const targetTop = container.scrollTop + targetRect.top - containerRect.top;\n const alignedTop = align === 'center'\n ? targetTop - container.clientHeight / 2 + targetRect.height / 2\n : targetTop;\n\n return this.clamp(alignedTop, 0, Math.max(0, container.scrollHeight - container.clientHeight));\n }\n\n private getProgrammaticScrollTimeout(distance: number): number {\n return this.clamp(\n this.programmaticScrollMinDuration + distance * 0.45,\n this.programmaticScrollMinDuration,\n this.programmaticScrollMaxDuration,\n );\n }\n\n private startProgrammaticScrollLock(pageNumber: number, distance: number): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.clearProgrammaticScrollLock();\n this.programmaticScrollTargetPage = pageNumber;\n this.programmaticScrollTimeout = targetWindow.setTimeout(() => {\n this.programmaticScrollTimeout = null;\n this.completeProgrammaticScroll();\n }, this.getProgrammaticScrollTimeout(distance));\n }\n\n private isProgrammaticScrollActive(): boolean {\n return this.programmaticScrollTargetPage !== null;\n }\n\n private completeProgrammaticScrollIfSettled(): void {\n const pageNumber = this.programmaticScrollTargetPage;\n\n if (pageNumber === null) {\n return;\n }\n\n const container = this.viewerBody()?.nativeElement;\n const target = container?.querySelector<HTMLElement>(`[data-ngs-pdf-page=\"${pageNumber}\"]`);\n\n if (!container || !target) {\n this.completeProgrammaticScroll();\n return;\n }\n\n if (\n Math.abs(container.scrollTop - this.getPageScrollTop(container, target)) <= 2 &&\n Math.abs(container.scrollLeft - this.getPageScrollLeft(container, target)) <= 2\n ) {\n this.completeProgrammaticScroll();\n }\n }\n\n private completeProgrammaticScroll(): void {\n const pageNumber = this.programmaticScrollTargetPage;\n\n this.clearProgrammaticScrollLock();\n\n if (pageNumber === null) {\n return;\n }\n\n if (pageNumber !== this.activePage()) {\n this.activePage.set(pageNumber);\n this.pageChanged.emit(pageNumber);\n }\n\n this.scrollPageListToPage(pageNumber);\n }\n\n private clearProgrammaticScrollLock(): void {\n if (this.programmaticScrollTimeout !== null) {\n this.document.defaultView?.clearTimeout(this.programmaticScrollTimeout);\n this.programmaticScrollTimeout = null;\n }\n\n this.programmaticScrollTargetPage = null;\n }\n}\n","<ngs-panel class=\"pdf-viewer-panel h-full overflow-hidden rounded-lg border border-border bg-surface-container-low text-on-surface\">\n @if (showToolbar()) {\n <ngs-panel-header class=\"min-w-0 border-b border-border bg-surface\" flex>\n <ngs-toolbar class=\"pdf-viewer-toolbar flex h-14 w-full min-w-0 items-center gap-4 overflow-visible px-2 text-on-surface-variant\" aria-label=\"PDF viewer controls\">\n <ngs-toolbar-item class=\"pdf-viewer-toolbar__start flex min-w-0 flex-none items-center gap-2\">\n @if (showPageList()) {\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n [attr.aria-label]=\"pageListVisible() ? 'Hide pages panel' : 'Show pages panel'\"\n [attr.aria-pressed]=\"pageListVisible()\"\n (click)=\"togglePageList()\">\n <ngs-icon\n class=\"text-2xl\"\n [name]=\"pageListVisible() ? 'fluent:panel-left-contract-24-regular' : 'fluent:panel-left-expand-24-regular'\" />\n </button>\n }\n <ngs-divider vertical fixedHeight />\n </ngs-toolbar-item>\n <ngs-toolbar-title class=\"min-w-0 flex-1 truncate text-sm! max-w-[20%] font-semibold! text-on-surface-variant\" [title]=\"displayDocumentName()\">\n {{ displayDocumentName() }}\n </ngs-toolbar-title>\n\n <ngs-toolbar-item class=\"pdf-viewer-toolbar__center flex flex-none items-center gap-3\">\n <div class=\"pdf-viewer-toolbar__cluster flex min-w-0 items-center gap-2\" aria-label=\"Zoom controls\">\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Zoom out\"\n [disabled]=\"!canZoomOut()\"\n (click)=\"zoomOut()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:zoom-out-24-regular\" />\n </button>\n <button\n class=\"pdf-viewer-toolbar__zoom min-w-12 cursor-pointer border-0 bg-transparent p-0 text-center text-sm text-on-surface hover:text-primary\"\n type=\"button\"\n aria-label=\"Zoom presets\"\n [ngsMenuTriggerFor]=\"zoomMenu\">\n {{ zoomLabel() }}\n </button>\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Zoom in\"\n [disabled]=\"!canZoomIn()\"\n (click)=\"zoomIn()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:zoom-in-24-regular\" />\n </button>\n </div>\n\n <ngs-divider vertical fixedHeight />\n\n <div class=\"pdf-viewer-toolbar__cluster flex min-w-0 items-center gap-2\" aria-label=\"Page navigation\">\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Previous page\"\n [disabled]=\"!canGoPrevious()\"\n (click)=\"previousPage()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:chevron-left-24-regular\" />\n </button>\n <span class=\"pdf-viewer-toolbar__page inline-flex h-9 min-w-16 items-center justify-center gap-2 rounded bg-surface-container-low text-sm font-bold text-on-surface\">\n <span>{{ activePage() }}</span>\n <span>/</span>\n <span>{{ pageCount() || 1 }}</span>\n </span>\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Next page\"\n [disabled]=\"!canGoNext()\"\n (click)=\"nextPage()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:chevron-right-24-regular\" />\n </button>\n </div>\n </ngs-toolbar-item>\n\n <ngs-toolbar-spacer />\n\n <ngs-toolbar-item class=\"pdf-viewer-toolbar__end flex min-w-0 flex-1 items-center justify-end gap-2\" aria-label=\"PDF tools\">\n @if (showSearchPanel()) {\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n [attr.aria-pressed]=\"isSearchPanelVisible()\"\n aria-label=\"Search\"\n [disabled]=\"!asidePanelInteractive()\"\n (click)=\"toggleSearchPanel()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:search-24-regular\" />\n </button>\n }\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"PDF viewer settings\"\n [ngsMenuTriggerFor]=\"settingsMenu\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:settings-24-regular\" />\n </button>\n @if (showAnnotationsPanel()) {\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n [attr.aria-pressed]=\"isAnnotationsPanelVisible()\"\n aria-label=\"Toggle annotations panel\"\n [disabled]=\"!asidePanelInteractive()\"\n (click)=\"toggleAnnotationsPanel()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:text-bullet-list-square-edit-24-regular\" />\n </button>\n }\n </ngs-toolbar-item>\n </ngs-toolbar>\n\n <ngs-menu #zoomMenu=\"ngsMenu\">\n @for (zoomPreset of zoomPresets; track zoomPreset) {\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"isZoomPresetSelected(zoomPreset)\"\n (click)=\"setZoomPreset(zoomPreset)\">\n <span>{{ zoomPreset * 100 }}%</span>\n </button>\n }\n\n <ngs-menu-divider />\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"zoomMode() === 'fit-page'\"\n (click)=\"fitToPage()\">\n <ngs-icon name=\"fluent:resize-large-24-regular\" />\n <span>Fit to Page</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"zoomMode() === 'fit-width'\"\n (click)=\"fitToWidth()\">\n <ngs-icon name=\"fluent:resize-24-regular\" />\n <span>Fit to Width</span>\n </button>\n </ngs-menu>\n\n <ngs-menu #settingsMenu=\"ngsMenu\" xPosition=\"before\">\n <ngs-menu-heading>SPREAD MODE</ngs-menu-heading>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"spreadMode() === 'single'\"\n (click)=\"setSpreadMode('single')\">\n <ngs-icon name=\"fluent:document-24-regular\" />\n <span>Single Page</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"spreadMode() === 'two-odd'\"\n (click)=\"setSpreadMode('two-odd')\">\n <ngs-icon name=\"fluent:book-open-24-regular\" />\n <span>Two Page (Odd)</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"spreadMode() === 'two-even'\"\n (click)=\"setSpreadMode('two-even')\">\n <ngs-icon name=\"fluent:document-text-24-regular\" />\n <span>Two Page (Even)</span>\n </button>\n\n <ngs-menu-divider />\n <ngs-menu-heading>SCROLL LAYOUT</ngs-menu-heading>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"scrollLayout() === 'vertical'\"\n (click)=\"setScrollLayout('vertical')\">\n <ngs-icon name=\"fluent:arrow-sort-24-regular\" />\n <span>Vertical</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"scrollLayout() === 'horizontal'\"\n (click)=\"setScrollLayout('horizontal')\">\n <ngs-icon name=\"fluent:arrow-swap-24-regular\" />\n <span>Horizontal</span>\n </button>\n\n <ngs-menu-divider />\n <ngs-menu-heading>PAGE ROTATION</ngs-menu-heading>\n <button ngs-menu-item type=\"button\" (click)=\"rotateClockwise()\">\n <ngs-icon name=\"fluent:arrow-clockwise-24-regular\" />\n <span>Rotate Clockwise</span>\n </button>\n <button ngs-menu-item type=\"button\" (click)=\"rotateCounterClockwise()\">\n <ngs-icon name=\"fluent:arrow-counterclockwise-24-regular\" />\n <span>Rotate Counter-Clockwise</span>\n </button>\n\n <ngs-menu-divider />\n <button ngs-menu-item type=\"button\" (click)=\"toggleFullscreen()\">\n <ngs-icon name=\"fluent:arrow-maximize-24-regular\" />\n <span>Fullscreen</span>\n </button>\n </ngs-menu>\n </ngs-panel-header>\n }\n\n @if (isPageListVisible()) {\n <ngs-panel-sidebar class=\"w-[var(--ngs-pdf-viewer-sidebar-width)] min-w-[var(--ngs-pdf-viewer-sidebar-width)] border-r border-border bg-surface\">\n <div class=\"pdf-viewer-sidebar flex h-full min-h-0 flex-col gap-2 overflow-auto p-3\" #pageList>\n <div class=\"pdf-viewer-sidebar__title px-1 text-xs font-semibold text-on-surface-variant\">Pages</div>\n <div class=\"pdf-viewer-sidebar__pages flex min-h-0 flex-col gap-2\" aria-label=\"PDF pages\">\n @for (pageItem of pageItems(); track pageItem.pageNumber) {\n <button\n class=\"pdf-viewer-sidebar__page group flex w-full cursor-pointer flex-col items-stretch gap-1 rounded border border-transparent bg-transparent p-1 text-left text-on-surface-variant focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary [&.is-active]:text-on-surface\"\n type=\"button\"\n [class.is-active]=\"pageItem.pageNumber === activePage()\"\n [attr.aria-current]=\"pageItem.pageNumber === activePage() ? 'page' : null\"\n [attr.aria-label]=\"'Open page ' + pageItem.pageNumber\"\n [attr.data-ngs-pdf-page-button]=\"pageItem.pageNumber\"\n (click)=\"setPage(pageItem.pageNumber)\">\n <span class=\"pdf-viewer-sidebar__thumb flex aspect-[3/4] w-full items-center justify-center overflow-hidden rounded border border-border bg-surface shadow-xs group-hover:border-border\" aria-hidden=\"true\">\n @if (pageItem.thumbnail; as thumbnail) {\n <img\n class=\"block h-full w-full select-none object-contain\"\n [src]=\"thumbnail.url\"\n [attr.width]=\"thumbnail.width\"\n [attr.height]=\"thumbnail.height\"\n alt=\"\"\n draggable=\"false\" />\n } @else {\n <ngs-image-placeholder class=\"h-full w-full\" />\n }\n </span>\n <span class=\"pdf-viewer-sidebar__label block truncate text-center text-xs font-medium leading-tight\">Page {{ pageItem.pageNumber }}</span>\n </button>\n }\n </div>\n </div>\n </ngs-panel-sidebar>\n }\n\n <ngs-panel-content class=\"min-h-0 min-w-0 overflow-hidden bg-surface-container-low\">\n <div class=\"pdf-viewer-body absolute inset-0 overflow-auto\" #viewerBody (scroll)=\"onViewerScroll()\" (wheel)=\"onViewerWheel($event)\">\n <ngs-block-loader [loading]=\"isLoading()\">Loading PDF...</ngs-block-loader>\n @if (errorState()) {\n <div class=\"pdf-viewer-state pdf-viewer-state--error absolute inset-0 flex flex-col items-center justify-center gap-3 p-6 text-center text-danger\">\n <ngs-icon class=\"text-3xl\" name=\"fluent:error-circle-24-regular\" />\n <span>PDF could not be loaded.</span>\n </div>\n } @else if (!src()) {\n <div class=\"pdf-viewer-state absolute inset-0 flex flex-col items-center justify-center gap-3 p-6 text-center text-on-surface-variant\">\n <ngs-icon class=\"text-3xl\" name=\"fluent:document-pdf-24-regular\" />\n <span>No PDF selected.</span>\n </div>\n } @else {\n <div\n class=\"pdf-viewer-pages\"\n [class.is-horizontal]=\"scrollLayout() === 'horizontal'\"\n [class.is-vertical]=\"scrollLayout() === 'vertical'\"\n [class.is-spread]=\"spreadMode() !== 'single'\">\n @for (spread of pageSpreads(); track spread.id) {\n <div class=\"pdf-viewer-spread\" [attr.data-ngs-pdf-spread]=\"spread.id\">\n @if (spread.leadingPlaceholder) {\n @if (spread.leadingPlaceholderPage; as placeholderPage) {\n <div\n class=\"pdf-viewer-spread__placeholder\"\n [style.width.px]=\"placeholderPage.width\"\n [style.height.px]=\"placeholderPage.height\"\n aria-hidden=\"true\"></div>\n }\n }\n @for (pdfPage of spread.pages; track pdfPage.pageNumber) {\n <article\n class=\"pdf-viewer-page w-max max-w-none\"\n [attr.aria-label]=\"'PDF page ' + pdfPage.pageNumber\"\n [attr.data-ngs-pdf-page]=\"pdfPage.pageNumber\">\n <div\n class=\"pdf-viewer-page__surface relative cursor-text overflow-hidden rounded bg-surface shadow-md select-none touch-none\"\n [style.width.px]=\"pdfPage.width\"\n [style.height.px]=\"pdfPage.height\"\n (pointerdown)=\"startTextSelection($event, pdfPage)\"\n (pointermove)=\"updateTextSelection($event, pdfPage)\"\n (pointerup)=\"finishTextSelection($event, pdfPage)\"\n (pointercancel)=\"cancelTextSelection()\"\n (mousedown)=\"startTextSelection($event, pdfPage)\"\n (mousemove)=\"updateTextSelection($event, pdfPage)\"\n (mouseup)=\"finishTextSelection($event, pdfPage)\">\n @if (pdfPage.url; as pageUrl) {\n <img\n class=\"block h-full w-full max-w-none select-none pointer-events-none\"\n [src]=\"pageUrl\"\n [alt]=\"'PDF page ' + pdfPage.pageNumber\"\n [attr.width]=\"pdfPage.width\"\n [attr.height]=\"pdfPage.height\"\n draggable=\"false\" />\n } @else {\n <div class=\"pdf-viewer-page__placeholder pointer-events-none absolute inset-0 flex items-center justify-center bg-surface\" aria-hidden=\"true\">\n @if (pdfPage.isRendering) {\n <span class=\"size-8 animate-spin rounded-full border-2 border-border border-t-primary\"></span>\n }\n </div>\n }\n @if (selectionRectsForPage(pdfPage.pageNumber); as selectionRects) {\n @if (selectionRects.length > 0) {\n <div class=\"pdf-viewer-page__selection-layer pointer-events-none absolute inset-0 z-[1] isolate overflow-hidden mix-blend-multiply\" aria-hidden=\"true\">\n @for (selectionRect of selectionRects; track selectionRect.left + '-' + selectionRect.top + '-' + $index) {\n <div\n class=\"pdf-viewer-page__selection-rect pointer-events-none absolute bg-primary/30\"\n [style.left.px]=\"selectionRect.left\"\n [style.top.px]=\"selectionRect.top\"\n [style.width.px]=\"selectionRect.width\"\n [style.height.px]=\"selectionRect.height\"></div>\n }\n </div>\n }\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n }\n </div>\n </ngs-panel-content>\n\n @if (isSearchPanelVisible() || isAnnotationsPanelVisible()) {\n <ngs-panel-aside class=\"w-[var(--ngs-pdf-viewer-aside-width)] min-w-[var(--ngs-pdf-viewer-aside-width)] border-l border-border bg-surface\">\n @if (isSearchPanelVisible()) {\n <ngs-pdf-viewer-search\n [query]=\"activeSearchQuery()\"\n [results]=\"pdfSearchResults()\"\n (closed)=\"closeAsidePanel()\"\n (searchChanged)=\"updatePdfSearch($event)\"\n (resultSelected)=\"selectSearchResult($event)\" />\n } @else {\n <ngs-pdf-viewer-annotations\n [annotations]=\"annotationItems()\"\n [annotationDefs]=\"annotationDefs()\"\n [annotationTypeProperty]=\"annotationTypeProperty()\"\n (closed)=\"closeAsidePanel()\"\n (pageSelected)=\"setPage($event)\" />\n }\n </ngs-panel-aside>\n }\n</ngs-panel>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgsInput"],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-pdf-viewer.mjs","sources":["../../../projects/components/pdf-viewer/src/pdf-viewer-annotations/pdf-viewer-annotations.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-annotations/pdf-viewer-annotations.html","../../../projects/components/pdf-viewer/src/pdf-viewer-annotation-def.directive.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-engine.service.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-search/pdf-viewer-search.ts","../../../projects/components/pdf-viewer/src/pdf-viewer-search/pdf-viewer-search.html","../../../projects/components/pdf-viewer/src/pdf-viewer/pdf-viewer.ts","../../../projects/components/pdf-viewer/src/pdf-viewer/pdf-viewer.html","../../../projects/components/pdf-viewer/ngstarter-ui-components-pdf-viewer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal, TemplateRef } from '@angular/core';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { FormField, IconButtonSuffix, IconPrefix } from '@ngstarter-ui/components/form-field';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Input as NgsInput } from '@ngstarter-ui/components/input';\nimport { Panel, PanelContent, PanelHeader, PanelSubheader } from '@ngstarter-ui/components/panel';\nimport {\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n} from '@ngstarter-ui/components/toolbar';\nimport { PdfViewerAnnotationDef } from '../pdf-viewer-annotation-def.directive';\nimport type {\n PdfViewerAnnotationTemplateContext,\n PdfViewerAnnotationView,\n} from '../types';\n\n@Component({\n selector: 'ngs-pdf-viewer-annotations',\n standalone: true,\n imports: [\n Button,\n FormField,\n Icon,\n IconButtonSuffix,\n IconPrefix,\n NgsInput,\n NgTemplateOutlet,\n Panel,\n PanelContent,\n PanelHeader,\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n PanelSubheader,\n ],\n templateUrl: './pdf-viewer-annotations.html',\n styleUrl: './pdf-viewer-annotations.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-pdf-viewer-annotations',\n },\n})\nexport class PdfViewerAnnotations {\n annotations = input<PdfViewerAnnotationView[]>([]);\n annotationDefs = input<readonly PdfViewerAnnotationDef[]>([]);\n annotationTypeProperty = input('type');\n\n closed = output<void>();\n pageSelected = output<number>();\n\n protected readonly filterQuery = signal('');\n protected readonly filteredAnnotations = computed(() => {\n const query = this.filterQuery().trim().toLocaleLowerCase();\n const annotations = this.annotations();\n\n if (!query) {\n return annotations;\n }\n\n return annotations.filter((annotation) => this.annotationMatchesFilter(annotation, query));\n });\n\n protected setFilterQuery(event: Event): void {\n this.filterQuery.set((event.target as HTMLInputElement).value);\n }\n\n protected clearFilterQuery(): void {\n this.filterQuery.set('');\n }\n\n protected getAnnotationTemplate(\n annotation: PdfViewerAnnotationView,\n index: number,\n ): TemplateRef<PdfViewerAnnotationTemplateContext> | null {\n const annotationDefs = this.annotationDefs();\n const typeProperty = this.annotationTypeProperty();\n const matchingDef = annotationDefs.find((def) => def.matches(annotation, index, typeProperty))\n ?? annotationDefs.find((def) => !def.hasWhen());\n\n return matchingDef?.template ?? null;\n }\n\n protected getAnnotationTemplateContext(\n annotation: PdfViewerAnnotationView,\n index: number,\n ): PdfViewerAnnotationTemplateContext {\n return {\n $implicit: annotation,\n annotation,\n index,\n goToPage: (pageNumber: number) => this.pageSelected.emit(pageNumber),\n };\n }\n\n protected getAnnotationTypeLabel(annotation: PdfViewerAnnotationView): string {\n const label = annotation.label ?? annotation.type;\n\n return typeof label === 'string' && label.trim().length > 0 ? label : 'Comment';\n }\n\n protected getAvatarLabel(annotation: PdfViewerAnnotationView): string {\n const explicitLabel = annotation.avatarLabel;\n\n if (typeof explicitLabel === 'string' && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n return annotation.author\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase())\n .join('');\n }\n\n protected getAvatarImage(annotation: PdfViewerAnnotationView): string {\n return typeof annotation.avatarUrl === 'string' ? annotation.avatarUrl : '';\n }\n\n protected getReplyLabel(annotation: PdfViewerAnnotationView): string {\n return typeof annotation.replyLabel === 'string' && annotation.replyLabel.trim().length > 0\n ? annotation.replyLabel\n : 'Reply';\n }\n\n private annotationMatchesFilter(annotation: PdfViewerAnnotationView, query: string): boolean {\n return [\n annotation.author,\n annotation.time,\n annotation.text,\n annotation.type,\n annotation.label,\n `page ${annotation.pageNumber}`,\n ]\n .filter((value): value is string => typeof value === 'string')\n .some((value) => value.toLocaleLowerCase().includes(query));\n }\n}\n","<ngs-panel class=\"pdf-viewer-annotations bg-surface\" aria-label=\"PDF annotations\">\n <ngs-panel-header class=\"p-0\">\n <ngs-toolbar class=\"w-full py-0 pr-2 ps-4\" aria-label=\"PDF annotations toolbar\">\n <ngs-toolbar-title>\n Annotations\n </ngs-toolbar-title>\n <ngs-toolbar-spacer />\n <ngs-toolbar-item>\n <button\n class=\"pdf-viewer-annotations__close\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Close annotations panel\"\n (click)=\"closed.emit()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </ngs-toolbar-item>\n </ngs-toolbar>\n </ngs-panel-header>\n\n <ngs-panel-subheader autoHeight class=\"px-4 pb-4\">\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-icon ngsIconPrefix name=\"fluent:search-24-regular\" />\n <input\n ngsInput\n type=\"text\"\n aria-label=\"Filter annotations\"\n placeholder=\"Filter annotations...\"\n [value]=\"filterQuery()\"\n (input)=\"setFilterQuery($event)\" />\n @if (filterQuery()) {\n <button\n ngsIconButton\n ngsIconButtonSuffix\n type=\"button\"\n aria-label=\"Clear annotation filter\"\n (click)=\"clearFilterQuery()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n }\n </ngs-form-field>\n </ngs-panel-subheader>\n\n <ngs-panel-content>\n <div class=\"flex min-h-full flex-col\">\n <div class=\"flex flex-1 flex-col gap-4 pb-4 px-4\">\n <ng-template #defaultAnnotationTemplate let-annotation let-goToPage=\"goToPage\">\n <article class=\"rounded-2xl border border-border bg-surface p-4 shadow-xs\">\n <header class=\"flex items-start gap-3\">\n <span class=\"flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-full bg-primary-container text-xs font-semibold text-on-primary-container\">\n @if (getAvatarImage(annotation); as avatarImage) {\n <img\n class=\"h-full w-full object-cover\"\n [src]=\"avatarImage\"\n [alt]=\"annotation.author\" />\n } @else {\n {{ getAvatarLabel(annotation) }}\n }\n </span>\n\n <span class=\"min-w-0 flex-1\">\n <span class=\"block truncate text-sm font-semibold text-on-surface\">{{ annotation.author }}</span>\n @if (annotation.time) {\n <span class=\"block truncate text-xs text-on-surface-variant\">{{ annotation.time }}</span>\n }\n </span>\n\n <span class=\"rounded-full bg-surface-container-high px-2 py-1 text-xs font-medium tracking-normal text-on-surface-variant uppercase\">\n {{ getAnnotationTypeLabel(annotation) }}\n </span>\n </header>\n\n <p class=\"mt-3 mb-0 text-base leading-relaxed text-on-surface\">{{ annotation.text }}</p>\n\n <footer class=\"mt-4 flex items-center justify-between gap-2\">\n <button\n ngsButton=\"tonal\"\n type=\"button\"\n (click)=\"goToPage(annotation.pageNumber)\">\n Page {{ annotation.pageNumber }}\n </button>\n\n <button ngsButton=\"text\" type=\"button\">\n {{ getReplyLabel(annotation) }}\n </button>\n </footer>\n </article>\n </ng-template>\n\n @for (annotation of filteredAnnotations(); track annotation.id ?? annotation.pageNumber + '-' + $index) {\n <ng-container\n [ngTemplateOutlet]=\"getAnnotationTemplate(annotation, $index) ?? defaultAnnotationTemplate\"\n [ngTemplateOutletContext]=\"getAnnotationTemplateContext(annotation, $index)\" />\n } @empty {\n <div class=\"p-4 text-center text-sm text-on-surface-variant\">No annotations found.</div>\n }\n </div>\n </div>\n </ngs-panel-content>\n</ngs-panel>\n","import { Directive, input, TemplateRef } from '@angular/core';\nimport type {\n PdfViewerAnnotationTemplateContext,\n PdfViewerAnnotationWhen,\n PdfViewerAnnotationView,\n} from './types';\n\n@Directive({\n selector: '[ngsPdfViewerAnnotationDef], [ngsPdfViewerAnnotation]',\n standalone: true,\n})\nexport class PdfViewerAnnotationDef {\n readonly annotationWhen = input<PdfViewerAnnotationWhen | undefined>(undefined, {\n alias: 'ngsPdfViewerAnnotation',\n });\n readonly defWhen = input<PdfViewerAnnotationWhen | undefined>(undefined, {\n alias: 'ngsPdfViewerAnnotationDef',\n });\n readonly when = input<PdfViewerAnnotationWhen | undefined>(undefined, {\n alias: 'ngsPdfViewerAnnotationWhen',\n });\n\n constructor(public template: TemplateRef<PdfViewerAnnotationTemplateContext>) {}\n\n matches(annotation: PdfViewerAnnotationView, index: number, typeProperty: string): boolean {\n const whenValue = this.whenValue();\n\n if (!whenValue) {\n return false;\n }\n\n if (typeof whenValue === 'function') {\n return whenValue(annotation, index);\n }\n\n return annotation[typeProperty] === whenValue;\n }\n\n hasWhen(): boolean {\n return !!this.whenValue();\n }\n\n private whenValue(): PdfViewerAnnotationWhen | undefined {\n return this.when() ?? this.defWhen() ?? this.annotationWhen();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PluginRegistry } from '@embedpdf/core';\nimport type { PdfEngine } from '@embedpdf/models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfViewerEngineService {\n private readonly engines = new Map<string, Promise<PdfEngine<Blob>>>();\n\n getEngine(wasmUrl: string): Promise<PdfEngine<Blob>> {\n const cachedEngine = this.engines.get(wasmUrl);\n\n if (cachedEngine) {\n return cachedEngine;\n }\n\n const engine = this.createEngine(wasmUrl).catch((error: unknown) => {\n this.engines.delete(wasmUrl);\n throw error;\n });\n this.engines.set(wasmUrl, engine);\n return engine;\n }\n\n createRegistry(engine: PdfEngine<Blob>, defaultScale: number): Promise<PluginRegistry> {\n const registry = new PluginRegistry(engine, { defaultScale });\n return registry.initialize().then(() => registry);\n }\n\n private async createEngine(wasmUrl: string): Promise<PdfEngine<Blob>> {\n const { createPdfiumEngine } = await import('@embedpdf/engines/pdfium-direct-engine');\n return createPdfiumEngine(wasmUrl, { encoderPoolSize: 0 });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal, untracked } from '@angular/core';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Checkbox } from '@ngstarter-ui/components/checkbox';\nimport { FormField, IconButtonSuffix, IconPrefix } from '@ngstarter-ui/components/form-field';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Input as NgsInput } from '@ngstarter-ui/components/input';\nimport { Panel, PanelContent, PanelHeader, PanelSubheader } from '@ngstarter-ui/components/panel';\nimport { Toolbar, ToolbarSpacer, ToolbarTitle } from '@ngstarter-ui/components/toolbar';\nimport type { PdfViewerSearchOptions, PdfViewerSearchResultView } from '../types';\n\ninterface PdfViewerSearchResultPart {\n text: string;\n highlight: boolean;\n}\n\ninterface PdfViewerSearchResultGroup {\n pageNumber: number;\n results: Array<{\n result: PdfViewerSearchResultView;\n index: number;\n }>;\n}\n\n@Component({\n selector: 'ngs-pdf-viewer-search',\n standalone: true,\n imports: [\n Button,\n Checkbox,\n FormField,\n Icon,\n IconButtonSuffix,\n IconPrefix,\n NgsInput,\n Panel,\n PanelContent,\n PanelHeader,\n Toolbar,\n ToolbarSpacer,\n ToolbarTitle,\n PanelSubheader,\n ],\n templateUrl: './pdf-viewer-search.html',\n styleUrl: './pdf-viewer-search.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-pdf-viewer-search',\n },\n})\nexport class PdfViewerSearch {\n results = input<PdfViewerSearchResultView[]>([]);\n query = input('');\n\n closed = output<void>();\n resultSelected = output<PdfViewerSearchResultView>();\n searchChanged = output<{\n query: string;\n options: PdfViewerSearchOptions;\n }>();\n\n protected readonly caseSensitive = signal(false);\n protected readonly wholeWord = signal(false);\n protected readonly activeResultIndex = signal(0);\n protected readonly queryValue = signal('');\n protected readonly hasQuery = computed(() => this.queryValue().trim().length > 0);\n protected readonly visibleResultGroups = computed<PdfViewerSearchResultGroup[]>(() => {\n const groups = new Map<number, PdfViewerSearchResultGroup>();\n\n this.results().forEach((result, index) => {\n const group = groups.get(result.pageNumber) ?? {\n pageNumber: result.pageNumber,\n results: [],\n };\n\n group.results.push({ result, index });\n groups.set(result.pageNumber, group);\n });\n\n return [...groups.values()];\n });\n protected readonly resultCountLabel = computed(() => {\n const count = this.results().length;\n\n return `${count} ${count === 1 ? 'result' : 'results'} found`;\n });\n\n constructor() {\n effect(() => {\n const query = this.query();\n\n untracked(() => {\n this.queryValue.set(query);\n this.activeResultIndex.set(0);\n });\n });\n }\n\n protected setQuery(event: Event): void {\n this.queryValue.set((event.target as HTMLInputElement).value);\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected clearQuery(): void {\n this.queryValue.set('');\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected setCaseSensitive(value: boolean): void {\n this.caseSensitive.set(value);\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected setWholeWord(value: boolean): void {\n this.wholeWord.set(value);\n this.activeResultIndex.set(0);\n this.emitSearchChanged();\n }\n\n protected previousResult(): void {\n const count = this.results().length;\n\n if (count === 0) {\n return;\n }\n\n this.activeResultIndex.update((index) => (index - 1 + count) % count);\n }\n\n protected nextResult(): void {\n const count = this.results().length;\n\n if (count === 0) {\n return;\n }\n\n this.activeResultIndex.update((index) => (index + 1) % count);\n }\n\n protected selectResult(result: PdfViewerSearchResultView, index: number): void {\n this.activeResultIndex.set(index);\n this.resultSelected.emit(result);\n }\n\n protected resultParts(result: PdfViewerSearchResultView): PdfViewerSearchResultPart[] {\n const query = this.queryValue().trim();\n\n if (!query) {\n return [{ text: result.excerpt, highlight: false }];\n }\n\n const flags = this.caseSensitive() ? 'g' : 'gi';\n const escapedQuery = this.escapeRegExp(query);\n const pattern = this.wholeWord()\n ? new RegExp(`\\\\b${escapedQuery}\\\\b`, flags)\n : new RegExp(escapedQuery, flags);\n const parts: PdfViewerSearchResultPart[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(result.excerpt)) !== null) {\n if (match.index > lastIndex) {\n parts.push({ text: result.excerpt.slice(lastIndex, match.index), highlight: false });\n }\n\n parts.push({ text: match[0], highlight: true });\n lastIndex = match.index + match[0].length;\n\n if (match[0].length === 0) {\n pattern.lastIndex++;\n }\n }\n\n if (lastIndex < result.excerpt.length) {\n parts.push({ text: result.excerpt.slice(lastIndex), highlight: false });\n }\n\n return parts.length > 0 ? parts : [{ text: result.excerpt, highlight: false }];\n }\n\n private emitSearchChanged(): void {\n this.searchChanged.emit({\n query: this.queryValue(),\n options: {\n caseSensitive: this.caseSensitive(),\n wholeWord: this.wholeWord(),\n },\n });\n }\n\n private escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","<ngs-panel class=\"pdf-viewer-search\" aria-label=\"PDF search\">\n <ngs-panel-header class=\"ps-4 pe-3\">\n <ngs-toolbar>\n <ngs-toolbar-title>Search</ngs-toolbar-title>\n <ngs-toolbar-spacer />\n <button ngsIconButton type=\"button\" aria-label=\"Close search panel\" (click)=\"closed.emit()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </ngs-toolbar>\n </ngs-panel-header>\n\n <ngs-panel-subheader autoHeight class=\"px-4 pb-4\">\n <ngs-form-field class=\"pdf-viewer-search__field\" subscriptHiddenIfEmpty>\n <ngs-icon name=\"fluent:search-24-regular\" ngsIconPrefix />\n <input\n ngsInput\n type=\"text\"\n aria-label=\"Search PDF\"\n placeholder=\"Search\"\n [value]=\"queryValue()\"\n (input)=\"setQuery($event)\" />\n @if (queryValue()) {\n <button ngsIconButtonSuffix ngsIconButton type=\"button\" aria-label=\"Clear search\" (click)=\"clearQuery()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n }\n </ngs-form-field>\n\n <div class=\"pdf-viewer-search__options mt-4 grid gap-3 text-base text-on-surface\">\n <ngs-checkbox [checked]=\"caseSensitive()\" (checkedChange)=\"setCaseSensitive($event)\">\n Case sensitive\n </ngs-checkbox>\n <ngs-checkbox [checked]=\"wholeWord()\" (checkedChange)=\"setWholeWord($event)\">\n Whole word\n </ngs-checkbox>\n </div>\n\n @if (hasQuery()) {\n <div class=\"pdf-viewer-search__summary mt-4 flex items-center justify-between gap-4 text-base text-on-surface-variant\">\n <span>{{ resultCountLabel() }}</span>\n <div class=\"pdf-viewer-search__nav flex items-center gap-3\">\n <button\n class=\"text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Previous search result\"\n [disabled]=\"results().length === 0\"\n (click)=\"previousResult()\">\n <ngs-icon name=\"fluent:chevron-left-24-regular\" />\n </button>\n <button\n class=\"text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Next search result\"\n [disabled]=\"results().length === 0\"\n (click)=\"nextResult()\">\n <ngs-icon name=\"fluent:chevron-right-24-regular\" />\n </button>\n </div>\n </div>\n }\n </ngs-panel-subheader>\n\n <ngs-panel-content>\n <div class=\"pdf-viewer-search__content flex min-h-full flex-col gap-4 px-4 pb-4\">\n @if (hasQuery()) {\n <div class=\"pdf-viewer-search__results grid min-h-0 gap-4\">\n @for (group of visibleResultGroups(); track group.pageNumber) {\n <section class=\"pdf-viewer-search__page-group grid gap-3 bg-surface\">\n <h3 class=\"m-0 text-base font-medium text-on-surface-variant\">Page {{ group.pageNumber }}</h3>\n @for (item of group.results; track item.result.id ?? item.result.pageNumber + '-' + item.index) {\n <button\n class=\"pdf-viewer-search__result w-full cursor-pointer rounded-2xl border border-border p-4 text-left text-base leading-snug text-on-surface\"\n type=\"button\"\n [class.bg-primary-container]=\"item.index === activeResultIndex()\"\n [class.bg-surface]=\"item.index !== activeResultIndex()\"\n (click)=\"selectResult(item.result, item.index)\">\n @for (part of resultParts(item.result); track part.text + '-' + $index) {\n <span\n [class.font-bold]=\"part.highlight\"\n [class.text-primary]=\"part.highlight\">{{ part.text }}</span>\n }\n </button>\n }\n </section>\n } @empty {\n <div class=\"pdf-viewer-search__empty p-4 text-center text-sm text-on-surface-variant\">No results.</div>\n }\n </div>\n }\n </div>\n </ngs-panel-content>\n</ngs-panel>\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MatchFlag, Rotation } from '@embedpdf/models';\nimport type { PdfDocumentObject, PdfEngine, PdfPageObject, SearchResult } from '@embedpdf/models';\nimport { BlockLoader } from '@ngstarter-ui/components/block-loader';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Divider } from '@ngstarter-ui/components/divider';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { ImagePlaceholder } from '@ngstarter-ui/components/image-placeholder';\nimport {\n Menu,\n MenuDivider,\n MenuHeading,\n MenuItem,\n MenuTrigger,\n} from '@ngstarter-ui/components/menu';\nimport {\n Panel,\n PanelAside,\n PanelContent,\n PanelHeader,\n PanelSidebar,\n} from '@ngstarter-ui/components/panel';\nimport {\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n} from '@ngstarter-ui/components/toolbar';\nimport { isObservable } from 'rxjs';\nimport type { Subscription } from 'rxjs';\nimport { PdfViewerAnnotations } from '../pdf-viewer-annotations/pdf-viewer-annotations';\nimport { PdfViewerAnnotationDef } from '../pdf-viewer-annotation-def.directive';\nimport { PdfViewerEngineService } from '../pdf-viewer-engine.service';\nimport { PdfViewerSearch } from '../pdf-viewer-search/pdf-viewer-search';\nimport {\n PdfViewerAnnotationDataSource,\n PdfViewerAnnotationDataSourceContext,\n PdfViewerAnnotationDataSourceResult,\n PdfViewerAnnotationView,\n PdfViewerLoadedEvent,\n PdfViewerPageRenderedEvent,\n PdfViewerSearchOptions,\n PdfViewerSearchResultView,\n PdfViewerThumbnailView,\n PdfViewerPageView,\n PdfViewerSelectionRectView,\n PdfViewerServerAnnotationDataSource,\n PdfViewerSource,\n PdfViewerTextGlyphView,\n} from '../types';\n\ninterface PdfViewerPageListItem {\n pageNumber: number;\n thumbnail: PdfViewerThumbnailView | null;\n}\n\ninterface PdfViewerPageSpread {\n id: string;\n leadingPlaceholder: boolean;\n leadingPlaceholderPage: PdfViewerPageView | null;\n pages: PdfViewerPageView[];\n}\n\ntype PdfViewerSpreadMode = 'single' | 'two-odd' | 'two-even';\ntype PdfViewerScrollLayout = 'vertical' | 'horizontal';\ntype PdfViewerZoomMode = 'custom' | 'fit-page' | 'fit-width';\n\ninterface PdfViewerSelectionPoint {\n pageNumber: number;\n x: number;\n y: number;\n offset: number;\n}\n\ninterface PdfViewerTextLineView {\n lineId: number;\n glyphs: PdfViewerTextGlyphView[];\n top: number;\n bottom: number;\n left: number;\n right: number;\n center: number;\n}\n\ninterface PdfViewerZoomAnchor {\n container: HTMLElement;\n pageNumber: number;\n relativeX: number;\n relativeY: number;\n viewportX: number;\n viewportY: number;\n}\n\n@Component({\n selector: 'ngs-pdf-viewer',\n exportAs: 'ngsPdfViewer',\n imports: [\n BlockLoader,\n Button,\n Divider,\n Icon,\n ImagePlaceholder,\n Menu,\n MenuDivider,\n MenuHeading,\n MenuItem,\n MenuTrigger,\n Panel,\n PanelAside,\n PanelContent,\n PanelHeader,\n PanelSidebar,\n Toolbar,\n ToolbarItem,\n ToolbarSpacer,\n ToolbarTitle,\n PdfViewerAnnotations,\n PdfViewerSearch,\n ],\n templateUrl: './pdf-viewer.html',\n styleUrl: './pdf-viewer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-pdf-viewer not-prose',\n '[class.is-loading]': 'isLoading()',\n '[class.has-toolbar]': 'showToolbar()',\n '[class.has-page-list]': 'isPageListVisible()',\n '[class.has-error]': 'errorState()',\n },\n})\nexport class PdfViewer {\n private readonly textSelectionHorizontalPadding = 2;\n private readonly textSelectionLineHeight = 1.2;\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly engineService = inject(PdfViewerEngineService);\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly viewerBody = viewChild<ElementRef<HTMLElement>>('viewerBody');\n private readonly pageList = viewChild<ElementRef<HTMLElement>>('pageList');\n protected readonly annotationDefs = contentChildren(PdfViewerAnnotationDef, { descendants: true });\n\n src = input<PdfViewerSource>(null);\n documentName = input<string | null>(null);\n wasmUrl = input('/assets/embedpdf/pdfium.wasm');\n page = input(1, { transform: numberAttribute });\n scale = input(1, { transform: numberAttribute });\n minScale = input(0.2, { transform: numberAttribute });\n maxScale = input(60, { transform: numberAttribute });\n zoomStep = input(0.1, { transform: numberAttribute });\n maxRenderPixels = input(128_000_000, { transform: numberAttribute });\n maxRenderDimension = input(13_000, { transform: numberAttribute });\n renderAll = input(true, { transform: booleanAttribute });\n showToolbar = input(true, { transform: booleanAttribute });\n showPageList = input(true, { transform: booleanAttribute });\n showSearchPanel = input(true, { transform: booleanAttribute });\n showAnnotationsPanel = input(false, { transform: booleanAttribute });\n annotations = input<PdfViewerAnnotationView[]>([]);\n annotationsDataSource = input<PdfViewerAnnotationDataSource | null>(null);\n annotationTypeProperty = input('type');\n searchQuery = input('');\n withAnnotations = input(true, { transform: booleanAttribute });\n withForms = input(true, { transform: booleanAttribute });\n\n loaded = output<PdfViewerLoadedEvent>();\n pageChanged = output<number>();\n pageRendered = output<PdfViewerPageRenderedEvent>();\n error = output<unknown>();\n\n protected readonly isLoading = signal(false);\n protected readonly errorState = signal<unknown>(null);\n protected readonly renderedPages = signal<PdfViewerPageView[]>([]);\n protected readonly thumbnailPages = signal<PdfViewerThumbnailView[]>([]);\n protected readonly pageCount = signal(0);\n protected readonly activePage = signal(1);\n protected readonly zoom = signal(1);\n protected readonly pageListVisible = signal(false);\n protected readonly searchPanelVisible = signal(false);\n protected readonly annotationsPanelVisible = signal(false);\n protected readonly asidePanelInteractive = signal(false);\n protected readonly spreadMode = signal<PdfViewerSpreadMode>('single');\n protected readonly scrollLayout = signal<PdfViewerScrollLayout>('vertical');\n protected readonly pageRotation = signal<Rotation>(Rotation.Degree0);\n protected readonly zoomMode = signal<PdfViewerZoomMode>('custom');\n protected readonly annotationItems = signal<PdfViewerAnnotationView[]>([]);\n protected readonly activeSearchQuery = signal('');\n protected readonly pdfSearchResults = signal<PdfViewerSearchResultView[]>([]);\n protected readonly selectionRects = signal<PdfViewerSelectionRectView[]>([]);\n protected readonly hasDocument = computed(() => this.pageCount() > 0);\n protected readonly isPageListVisible = computed(() =>\n this.showPageList() && this.pageListVisible(),\n );\n protected readonly isSearchPanelVisible = computed(() =>\n this.showSearchPanel() && this.searchPanelVisible(),\n );\n protected readonly isAnnotationsPanelVisible = computed(() =>\n this.showAnnotationsPanel() && !this.searchPanelVisible() && this.annotationsPanelVisible(),\n );\n protected readonly thumbnailPageMap = computed(() =>\n new Map(this.thumbnailPages().map((thumbnail) => [thumbnail.pageNumber, thumbnail])),\n );\n protected readonly pageItems = computed<PdfViewerPageListItem[]>(() =>\n Array.from({ length: this.pageCount() }, (_, index) => {\n const pageNumber = index + 1;\n\n return {\n pageNumber,\n thumbnail: this.thumbnailPageMap().get(pageNumber) ?? null,\n };\n }),\n );\n protected readonly canGoPrevious = computed(() => this.activePage() > 1);\n protected readonly canGoNext = computed(() => this.activePage() < this.pageCount());\n protected readonly canZoomOut = computed(() => this.zoom() > this.getScaleBounds().min);\n protected readonly canZoomIn = computed(() => this.zoom() < this.getScaleBounds().max);\n protected readonly zoomLabel = computed(() => `${Math.round(this.zoom() * 100)}%`);\n protected readonly displayDocumentName = computed(() => this.documentName() || this.getSourceName(this.src()));\n protected readonly pageSpreads = computed<PdfViewerPageSpread[]>(() =>\n this.groupPagesIntoSpreads(this.renderedPages(), this.spreadMode()),\n );\n protected readonly zoomPresets = [0.25, 0.5, 1, 1.25, 1.5, 2, 4, 8, 16];\n\n private engine: PdfEngine<Blob> | null = null;\n private pdfDocument: PdfDocumentObject | null = null;\n private registry: { destroy(): Promise<void> | void } | null = null;\n private pageIntersectionObserver: IntersectionObserver | null = null;\n private visiblePageRatios = new Map<number, number>();\n private loadToken = 0;\n private renderToken = 0;\n private searchToken = 0;\n private scrollSyncFrame: number | null = null;\n private programmaticScrollTargetPage: number | null = null;\n private programmaticScrollTimeout: number | null = null;\n private pageObserverFrame: number | null = null;\n private pageObserverTimeout: number | null = null;\n private visiblePageRenderFrame: number | null = null;\n private visiblePageRenderTimeout: number | null = null;\n private pageObserverRefreshAttempts = 0;\n private selectionStart: PdfViewerSelectionPoint | null = null;\n private isViewInitialized = false;\n private annotationDataSourceToken = 0;\n private annotationDataSourceCleanup: (() => void) | null = null;\n private lastZoomChangeTime = 0;\n private readonly programmaticScrollMinDuration = 900;\n private readonly programmaticScrollMaxDuration = 6000;\n private readonly qualityRenderZoomIdleDelay = 160;\n private readonly documentOpenTimeoutMs = 15000;\n\n constructor() {\n afterNextRender(() => {\n if (this.isBrowser) {\n this.asidePanelInteractive.set(true);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.loadToken++;\n this.renderToken++;\n this.searchToken++;\n this.annotationDataSourceToken++;\n this.annotationDataSourceCleanup?.();\n this.cancelScrollSyncFrame();\n this.clearProgrammaticScrollLock();\n this.cancelPageObserverFrame();\n this.cancelVisiblePageRenderFrame();\n this.disconnectPageObserver();\n this.revokeRenderedPages();\n this.revokeThumbnailPages();\n void this.closeDocument();\n void this.registry?.destroy();\n });\n\n effect((onCleanup) => {\n const dataSource = this.annotationsDataSource();\n const fallbackAnnotations = this.annotations();\n const source = this.src();\n const documentName = this.documentName() || this.getSourceName(source);\n const pageCount = this.pageCount();\n const token = ++this.annotationDataSourceToken;\n const context: PdfViewerAnnotationDataSourceContext = {\n source,\n documentName,\n pageCount,\n };\n\n this.annotationDataSourceCleanup?.();\n this.annotationDataSourceCleanup = untracked(() =>\n this.loadAnnotationsDataSource(dataSource ?? fallbackAnnotations, context, token),\n );\n\n onCleanup(() => {\n this.annotationDataSourceCleanup?.();\n this.annotationDataSourceCleanup = null;\n });\n });\n\n effect(() => {\n const source = this.src();\n const wasmUrl = this.wasmUrl();\n\n if (!this.isViewInitialized || !this.isBrowser) {\n return;\n }\n\n untracked(() => {\n void this.loadDocument(source, wasmUrl);\n });\n });\n\n effect(() => {\n const scale = this.sanitizeScale(this.scale());\n\n if (untracked(() => this.zoom()) !== scale) {\n untracked(() => this.setZoom(scale));\n }\n });\n\n effect(() => {\n const requestedPage = this.sanitizePage(this.page());\n\n if (requestedPage !== untracked(() => this.activePage())) {\n this.activePage.set(requestedPage);\n }\n });\n\n effect(() => {\n const query = this.searchQuery();\n\n if (query !== untracked(() => this.activeSearchQuery())) {\n this.activeSearchQuery.set(query);\n untracked(() => {\n void this.searchPdf(query, {\n caseSensitive: false,\n wholeWord: false,\n });\n });\n }\n });\n\n effect(() => {\n const zoom = this.zoom();\n const renderAll = this.renderAll();\n const activePage = renderAll ? untracked(() => this.activePage()) : this.activePage();\n const withAnnotations = this.withAnnotations();\n const withForms = this.withForms();\n this.pageRotation();\n this.spreadMode();\n this.scrollLayout();\n\n if (!this.pdfDocument || !this.engine || this.isLoading()) {\n return;\n }\n\n untracked(() => {\n this.applyInstantZoom(zoom);\n this.schedulePageObserverRefresh();\n this.scheduleVisiblePagesRender({ zoom, activePage, renderAll, withAnnotations, withForms });\n });\n });\n\n effect(() => {\n const withAnnotations = this.withAnnotations();\n const isLoading = this.isLoading();\n const pageCount = this.pageCount();\n this.pageRotation();\n\n if (isLoading || pageCount === 0 || !this.pdfDocument || !this.engine) {\n return;\n }\n\n untracked(() => {\n void this.renderThumbnails(this.loadToken, { withAnnotations });\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.isViewInitialized = true;\n\n if (this.isBrowser) {\n void this.loadDocument(this.src(), this.wasmUrl());\n }\n }\n\n previousPage(): void {\n if (!this.canGoPrevious()) {\n return;\n }\n\n this.setPage(this.activePage() - 1);\n }\n\n nextPage(): void {\n if (!this.canGoNext()) {\n return;\n }\n\n this.setPage(this.activePage() + 1);\n }\n\n zoomIn(): void {\n this.zoomMode.set('custom');\n this.setZoom(this.roundZoom(this.zoom() + this.sanitizeZoomStep()));\n }\n\n zoomOut(): void {\n this.zoomMode.set('custom');\n this.setZoom(this.roundZoom(this.zoom() - this.sanitizeZoomStep()));\n }\n\n togglePageList(): void {\n this.pageListVisible.update((isVisible) => !isVisible);\n }\n\n protected toggleSearchPanel(): void {\n const nextVisible = !this.searchPanelVisible();\n this.searchPanelVisible.set(nextVisible);\n\n if (nextVisible) {\n this.annotationsPanelVisible.set(false);\n const query = this.searchQuery();\n this.activeSearchQuery.set(query);\n void this.searchPdf(query, {\n caseSensitive: false,\n wholeWord: false,\n });\n }\n }\n\n protected toggleAnnotationsPanel(): void {\n const nextVisible = !this.annotationsPanelVisible();\n this.annotationsPanelVisible.set(nextVisible);\n\n if (nextVisible) {\n this.searchPanelVisible.set(false);\n }\n }\n\n protected closeAsidePanel(): void {\n this.searchPanelVisible.set(false);\n this.annotationsPanelVisible.set(false);\n }\n\n protected updatePdfSearch(\n event: {\n query: string;\n options: PdfViewerSearchOptions;\n },\n ): Promise<void> {\n this.activeSearchQuery.set(event.query);\n return this.searchPdf(event.query, event.options);\n }\n\n protected selectSearchResult(result: PdfViewerSearchResultView): void {\n this.setPage(result.pageNumber);\n }\n\n protected setZoomPreset(scale: number): void {\n this.zoomMode.set('custom');\n this.setZoom(scale);\n }\n\n protected isZoomPresetSelected(scale: number): boolean {\n return this.zoomMode() === 'custom' && Math.abs(this.zoom() - this.sanitizeScale(scale)) < 0.0001;\n }\n\n protected fitToPage(): void {\n const scale = this.getFitScale('fit-page');\n\n if (scale === null) {\n return;\n }\n\n this.zoomMode.set('fit-page');\n this.setZoom(scale);\n }\n\n protected fitToWidth(): void {\n const scale = this.getFitScale('fit-width');\n\n if (scale === null) {\n return;\n }\n\n this.zoomMode.set('fit-width');\n this.setZoom(scale);\n }\n\n protected setSpreadMode(mode: PdfViewerSpreadMode): void {\n this.spreadMode.set(mode);\n this.refreshLayoutAfterModeChange();\n }\n\n protected setScrollLayout(layout: PdfViewerScrollLayout): void {\n this.scrollLayout.set(layout);\n this.refreshLayoutAfterModeChange();\n }\n\n protected rotateClockwise(): void {\n this.setPageRotation(this.rotatePageBy(1));\n }\n\n protected rotateCounterClockwise(): void {\n this.setPageRotation(this.rotatePageBy(-1));\n }\n\n private groupPagesIntoSpreads(\n pages: PdfViewerPageView[],\n mode: PdfViewerSpreadMode,\n ): PdfViewerPageSpread[] {\n if (mode === 'single') {\n return pages.map((page) => ({\n id: `single-${page.pageNumber}`,\n leadingPlaceholder: false,\n leadingPlaceholderPage: null,\n pages: [page],\n }));\n }\n\n const spreads: PdfViewerPageSpread[] = [];\n let pageIndex = 0;\n\n if (mode === 'two-even' && pages.length > 0) {\n spreads.push({\n id: 'two-even-cover',\n leadingPlaceholder: true,\n leadingPlaceholderPage: pages[0],\n pages: [pages[0]],\n });\n pageIndex = 1;\n }\n\n while (pageIndex < pages.length) {\n const spreadPages = pages.slice(pageIndex, pageIndex + 2);\n spreads.push({\n id: `${mode}-${spreadPages.map((page) => page.pageNumber).join('-')}`,\n leadingPlaceholder: false,\n leadingPlaceholderPage: null,\n pages: spreadPages,\n });\n pageIndex += 2;\n }\n\n return spreads;\n }\n\n private setPageRotation(rotation: Rotation): void {\n this.pageRotation.set(rotation);\n this.applyInstantZoom(this.zoom());\n this.refreshLayoutAfterModeChange();\n }\n\n private rotatePageBy(delta: 1 | -1): Rotation {\n return this.normalizeRotation(this.pageRotation() + delta);\n }\n\n private refreshLayoutAfterModeChange(): void {\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.schedulePageObserverRefresh();\n\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n this.scrollToPage(this.activePage());\n return;\n }\n\n targetWindow.requestAnimationFrame(() => this.scrollToPage(this.activePage()));\n }\n\n protected toggleFullscreen(): void {\n if (!this.isBrowser) {\n return;\n }\n\n const target = this.hostElement.nativeElement;\n const currentFullscreenElement = this.document.fullscreenElement;\n\n if (currentFullscreenElement) {\n void this.document.exitFullscreen?.();\n return;\n }\n\n void target.requestFullscreen?.();\n }\n\n setPage(pageNumber: number): void {\n const nextPage = this.clamp(pageNumber, 1, Math.max(this.pageCount(), 1));\n const hasChanged = nextPage !== this.activePage();\n\n if (!hasChanged) {\n this.scrollToPage(nextPage);\n this.scrollPageListToPage(nextPage);\n return;\n }\n\n this.activePage.set(nextPage);\n this.pageChanged.emit(nextPage);\n this.scrollToPage(nextPage);\n this.scrollPageListToPage(nextPage);\n }\n\n protected onViewerScroll(): void {\n if (!this.renderAll() || !this.isBrowser || this.renderedPages().length < 2) {\n return;\n }\n\n if (this.scrollSyncFrame !== null) {\n return;\n }\n\n this.scrollSyncFrame = this.document.defaultView?.requestAnimationFrame(() => {\n this.scrollSyncFrame = null;\n\n if (this.isProgrammaticScrollActive()) {\n this.completeProgrammaticScrollIfSettled();\n return;\n }\n\n this.syncActivePageFromViewport();\n this.scheduleCurrentVisiblePagesRender();\n }) ?? null;\n }\n\n protected onViewerWheel(event: WheelEvent): void {\n if (!event.metaKey && !event.ctrlKey) {\n return;\n }\n\n if (!this.pdfDocument || this.isLoading()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const container = this.viewerBody()?.nativeElement;\n const anchor = container ? this.getZoomAnchor(container, event) : null;\n const delta = event.deltaY || event.deltaX;\n const direction = delta < 0 ? 1 : -1;\n const multiplier = Math.max(1, Math.min(6, Math.abs(delta) / 100));\n const nextZoom = this.roundZoom(this.zoom() + direction * this.sanitizeZoomStep() * multiplier);\n\n if (nextZoom === this.zoom()) {\n return;\n }\n\n this.zoomMode.set('custom');\n this.setZoom(nextZoom);\n this.restoreZoomAnchor(anchor);\n }\n\n protected selectionRectsForPage(pageNumber: number): PdfViewerSelectionRectView[] {\n return this.selectionRects().filter((rect) => rect.pageNumber === pageNumber);\n }\n\n protected startTextSelection(event: PointerEvent | MouseEvent, page: PdfViewerPageView): void {\n if (event.button !== 0 || page.textGlyphs.length === 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const surface = event.currentTarget as HTMLElement;\n if ('pointerId' in event) {\n surface.setPointerCapture?.(event.pointerId);\n }\n\n this.selectionStart = this.getSelectionPoint(event, page, surface);\n this.selectionRects.set([]);\n }\n\n protected updateTextSelection(event: PointerEvent | MouseEvent, page: PdfViewerPageView): void {\n if (!this.selectionStart || this.selectionStart.pageNumber !== page.pageNumber) {\n return;\n }\n\n event.preventDefault();\n const surface = event.currentTarget as HTMLElement;\n const currentPoint = this.getSelectionPoint(event, page, surface);\n\n if (this.selectionStart.offset === currentPoint.offset) {\n this.selectionRects.set([]);\n return;\n }\n\n this.selectionRects.set(this.getSelectionRects(page, this.selectionStart.offset, currentPoint.offset));\n }\n\n protected finishTextSelection(event: PointerEvent | MouseEvent, page: PdfViewerPageView): void {\n if (!this.selectionStart) {\n return;\n }\n\n this.updateTextSelection(event, page);\n this.selectionStart = null;\n\n const surface = event.currentTarget as HTMLElement;\n if ('pointerId' in event) {\n surface.releasePointerCapture?.(event.pointerId);\n }\n }\n\n private loadAnnotationsDataSource(\n dataSource: PdfViewerAnnotationDataSource | null | undefined,\n context: PdfViewerAnnotationDataSourceContext,\n token: number,\n ): () => void {\n if (!dataSource) {\n this.setAnnotationItems([], token);\n return () => {};\n }\n\n try {\n if (Array.isArray(dataSource)) {\n this.setAnnotationItems(dataSource, token);\n return () => {};\n }\n\n if (this.isServerAnnotationDataSource(dataSource)) {\n let isActive = true;\n\n dataSource.getAnnotations({\n ...context,\n successCallback: (annotations) => {\n if (isActive) {\n this.setAnnotationItems(annotations, token);\n }\n },\n failCallback: () => {\n if (isActive) {\n this.setAnnotationItems([], token);\n }\n },\n });\n\n return () => {\n isActive = false;\n };\n }\n\n const result = typeof dataSource === 'function' ? dataSource(context) : dataSource;\n\n return this.applyAnnotationDataSourceResult(result, token);\n } catch {\n this.setAnnotationItems([], token);\n return () => {};\n }\n }\n\n private applyAnnotationDataSourceResult(\n result: PdfViewerAnnotationDataSourceResult,\n token: number,\n ): () => void {\n if (isObservable(result)) {\n const subscription: Subscription = result.subscribe({\n next: (annotations) => this.setAnnotationItems(annotations, token),\n error: () => this.setAnnotationItems([], token),\n });\n\n return () => subscription.unsubscribe();\n }\n\n if (this.isPromiseLike(result)) {\n let isActive = true;\n\n result\n .then((annotations) => {\n if (isActive) {\n this.setAnnotationItems(annotations, token);\n }\n })\n .catch(() => {\n if (isActive) {\n this.setAnnotationItems([], token);\n }\n });\n\n return () => {\n isActive = false;\n };\n }\n\n this.setAnnotationItems(result, token);\n\n return () => {};\n }\n\n private setAnnotationItems(annotations: PdfViewerAnnotationView[], token: number): void {\n if (token === this.annotationDataSourceToken) {\n this.annotationItems.set(annotations ?? []);\n }\n }\n\n private isServerAnnotationDataSource(\n dataSource: PdfViewerAnnotationDataSource,\n ): dataSource is PdfViewerServerAnnotationDataSource {\n return typeof dataSource === 'object'\n && dataSource !== null\n && 'getAnnotations' in dataSource\n && typeof dataSource.getAnnotations === 'function';\n }\n\n private isPromiseLike<T>(value: unknown): value is Promise<T> {\n return typeof value === 'object'\n && value !== null\n && 'then' in value\n && typeof (value as Promise<T>).then === 'function';\n }\n\n protected cancelTextSelection(): void {\n this.selectionStart = null;\n }\n\n private async searchPdf(query: string, options: PdfViewerSearchOptions): Promise<void> {\n const token = ++this.searchToken;\n const keyword = query.trim();\n\n if (!keyword || !this.engine || !this.pdfDocument) {\n this.pdfSearchResults.set([]);\n return;\n }\n\n const flags: MatchFlag[] = [];\n\n if (options.caseSensitive) {\n flags.push(MatchFlag.MatchCase);\n }\n\n if (options.wholeWord) {\n flags.push(MatchFlag.MatchWholeWord);\n }\n\n try {\n const searchResult = await this.engine.searchAllPages(this.pdfDocument, keyword, { flags }).toPromise();\n\n if (token !== this.searchToken) {\n return;\n }\n\n this.pdfSearchResults.set(searchResult.results.map((result, index) => this.toSearchResultView(result, index)));\n } catch (error) {\n if (token === this.searchToken) {\n this.pdfSearchResults.set([]);\n this.error.emit(error);\n }\n }\n }\n\n private toSearchResultView(result: SearchResult, index: number): PdfViewerSearchResultView {\n const context = result.context;\n const excerpt = [\n context.truncatedLeft ? '...' : '',\n context.before,\n context.match,\n context.after,\n context.truncatedRight ? '...' : '',\n ]\n .filter((part) => part.length > 0)\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return {\n id: `${result.pageIndex}-${result.charIndex}-${result.charCount}-${index}`,\n pageNumber: result.pageIndex + 1,\n excerpt,\n };\n }\n\n private async loadDocument(source: PdfViewerSource, wasmUrl: string): Promise<void> {\n const token = ++this.loadToken;\n this.renderToken++;\n this.isLoading.set(true);\n this.errorState.set(null);\n this.pageCount.set(0);\n this.searchToken++;\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.pdfSearchResults.set([]);\n this.revokeRenderedPages();\n this.revokeThumbnailPages();\n\n await this.closeDocument();\n await this.registry?.destroy();\n this.registry = null;\n\n if (!source) {\n this.isLoading.set(false);\n return;\n }\n\n try {\n const engine = await this.engineService.getEngine(wasmUrl);\n\n if (token !== this.loadToken) {\n return;\n }\n\n this.engine = engine;\n this.registry = await this.engineService.createRegistry(engine, this.zoom());\n\n if (token !== this.loadToken) {\n return;\n }\n\n const documentId = this.createDocumentId();\n const pdfDocument = await this.openSource(engine, documentId, source);\n\n if (token !== this.loadToken) {\n await engine.closeDocument(pdfDocument).toPromise();\n return;\n }\n\n this.pdfDocument = pdfDocument;\n this.pageCount.set(pdfDocument.pageCount);\n this.activePage.set(this.clamp(this.activePage(), 1, Math.max(pdfDocument.pageCount, 1)));\n this.loaded.emit({ pageCount: pdfDocument.pageCount });\n this.initializePageShells(pdfDocument, this.zoom(), this.renderAll(), this.activePage());\n this.schedulePageObserverRefresh();\n await this.searchPdf(this.activeSearchQuery() || this.searchQuery(), {\n caseSensitive: false,\n wholeWord: false,\n });\n await this.renderVisiblePages(token, ++this.renderToken, {\n zoom: this.zoom(),\n activePage: this.activePage(),\n renderAll: this.renderAll(),\n withAnnotations: this.withAnnotations(),\n withForms: this.withForms(),\n });\n } catch (error) {\n if (token === this.loadToken) {\n this.errorState.set(error);\n this.error.emit(error);\n }\n } finally {\n if (token === this.loadToken) {\n this.isLoading.set(false);\n }\n }\n }\n\n private initializePageShells(\n pdfDocument: PdfDocumentObject,\n scale: number,\n renderAll: boolean,\n activePage: number,\n ): void {\n const previousPages = this.renderedPages();\n const previousPageMap = new Map(previousPages.map((page) => [page.pageNumber, page]));\n const pageNumbers = this.getPageNumbersToDisplay(pdfDocument, renderAll, activePage);\n const nextScale = this.sanitizeScale(scale);\n const nextPages = pageNumbers.map((pageNumber) => {\n const pdfPage = pdfDocument.pages[pageNumber - 1];\n const previousPage = previousPageMap.get(pageNumber);\n const displaySize = this.getPageDisplaySize(pdfPage, nextScale);\n const displayRotation = this.getPageDisplayRotation(pdfPage);\n const isFresh = previousPage?.url\n && Math.abs((previousPage.renderedScale ?? 0) - nextScale) < 0.0001\n && previousPage.renderedRotation === displayRotation;\n\n return {\n pageNumber,\n url: isFresh ? previousPage.url : null,\n scale: nextScale,\n renderedScale: isFresh ? previousPage.renderedScale : null,\n rotation: displayRotation,\n renderedRotation: isFresh ? previousPage.renderedRotation : null,\n width: displaySize.width,\n height: displaySize.height,\n isRendering: false,\n textGlyphs: isFresh ? previousPage.textGlyphs : [],\n };\n });\n const nextUrlSet = new Set(nextPages.map((page) => page.url).filter((url): url is string => !!url));\n\n for (const page of previousPages) {\n if (page.url && !nextUrlSet.has(page.url)) {\n this.revokeObjectUrl(page.url);\n }\n }\n\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.disconnectPageObserver();\n this.renderedPages.set(nextPages);\n }\n\n private getPageNumbersToDisplay(\n pdfDocument: PdfDocumentObject,\n renderAll: boolean,\n activePage: number,\n ): number[] {\n if (!renderAll) {\n return [this.clamp(activePage, 1, pdfDocument.pageCount)];\n }\n\n return Array.from({ length: pdfDocument.pageCount }, (_, index) => index + 1);\n }\n\n private scheduleVisiblePagesRender(\n options: {\n zoom: number;\n activePage: number;\n renderAll: boolean;\n withAnnotations: boolean;\n withForms: boolean;\n },\n ): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.cancelVisiblePageRenderFrame();\n const token = this.loadToken;\n const renderToken = ++this.renderToken;\n const renderDelay = this.getQualityRenderDelay();\n\n if (renderDelay > 0) {\n this.visiblePageRenderTimeout = targetWindow.setTimeout(() => {\n this.visiblePageRenderTimeout = null;\n this.queueVisiblePageRenderFrame(token, renderToken, options);\n }, renderDelay);\n return;\n }\n\n this.queueVisiblePageRenderFrame(token, renderToken, options);\n }\n\n private queueVisiblePageRenderFrame(\n token: number,\n renderToken: number,\n options: {\n zoom: number;\n activePage: number;\n renderAll: boolean;\n withAnnotations: boolean;\n withForms: boolean;\n },\n ): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.visiblePageRenderFrame = targetWindow.requestAnimationFrame(() => {\n this.visiblePageRenderFrame = null;\n void this.renderVisiblePages(token, renderToken, options);\n });\n }\n\n private scheduleCurrentVisiblePagesRender(): void {\n this.scheduleVisiblePagesRender({\n zoom: this.zoom(),\n activePage: this.activePage(),\n renderAll: this.renderAll(),\n withAnnotations: this.withAnnotations(),\n withForms: this.withForms(),\n });\n }\n\n private async renderVisiblePages(\n token: number,\n renderToken: number,\n options: {\n zoom: number;\n activePage: number;\n renderAll: boolean;\n withAnnotations: boolean;\n withForms: boolean;\n },\n ): Promise<void> {\n if (!this.engine || !this.pdfDocument) {\n return;\n }\n\n const pdfDocument = this.pdfDocument;\n const renderScale = this.sanitizeScale(options.zoom);\n const pageNumbers = this.getPriorityPageNumbers(options.activePage, options.renderAll);\n\n for (const pageNumber of pageNumbers) {\n if (!this.isRenderCurrent(token, renderToken)) {\n return;\n }\n\n const currentPage = this.renderedPages().find((page) => page.pageNumber === pageNumber);\n const page = pdfDocument.pages[pageNumber - 1];\n const renderRotation = this.getPageDisplayRotation(page);\n\n if (!currentPage || Math.abs(currentPage.scale - renderScale) > 0.0001) {\n continue;\n }\n\n if (\n currentPage.url\n && Math.abs((currentPage.renderedScale ?? 0) - renderScale) < 0.0001\n && currentPage.renderedRotation === renderRotation\n ) {\n continue;\n }\n\n this.patchRenderedPage(pageNumber, { isRendering: !currentPage.url });\n const rasterOptions = this.getPageRasterRenderOptions(page, renderScale);\n const blob = await this.engine.renderPage(pdfDocument, page, {\n scaleFactor: rasterOptions.scaleFactor,\n rotation: renderRotation,\n dpr: rasterOptions.dpr,\n withAnnotations: options.withAnnotations,\n withForms: options.withForms,\n }).toPromise();\n\n if (!this.isRenderCurrent(token, renderToken)) {\n return;\n }\n\n const displaySize = this.getPageDisplaySize(page, renderScale);\n const textGlyphs = this.pageRotation() === Rotation.Degree0\n ? await this.getPageTextGlyphs(pdfDocument, page, renderScale)\n : [];\n\n if (!this.isRenderCurrent(token, renderToken)) {\n return;\n }\n\n const url = this.document.defaultView?.URL.createObjectURL(blob) ?? URL.createObjectURL(blob);\n const previousUrl = this.renderedPages().find((renderedPage) => renderedPage.pageNumber === pageNumber)?.url;\n\n this.patchRenderedPage(pageNumber, {\n url,\n scale: renderScale,\n renderedScale: renderScale,\n rotation: renderRotation,\n renderedRotation: renderRotation,\n width: displaySize.width,\n height: displaySize.height,\n isRendering: false,\n textGlyphs,\n });\n\n if (previousUrl && previousUrl !== url) {\n this.revokeObjectUrl(previousUrl);\n }\n\n this.pageRendered.emit({ pageNumber, url, width: displaySize.width, height: displaySize.height });\n }\n }\n\n private setZoom(scale: number): void {\n const nextZoom = this.sanitizeScale(scale);\n\n if (this.zoom() !== nextZoom) {\n this.lastZoomChangeTime = this.getCurrentTime();\n this.zoom.set(nextZoom);\n }\n\n this.applyInstantZoom(nextZoom);\n }\n\n private applyInstantZoom(scale: number): void {\n const nextScale = this.sanitizeScale(scale);\n const pdfDocument = this.pdfDocument;\n const pages = this.renderedPages();\n\n if (!pdfDocument || pages.length === 0) {\n return;\n }\n\n let hasChanges = false;\n const urlsToRevoke: string[] = [];\n const nextPages = pages.map((page) => {\n const pdfPage = pdfDocument.pages[page.pageNumber - 1];\n const displaySize = this.getPageDisplaySize(pdfPage, nextScale);\n const displayRotation = this.getPageDisplayRotation(pdfPage);\n const scaleChanged = Math.abs(page.scale - nextScale) >= 0.0001;\n const rotationChanged = page.rotation !== displayRotation || page.renderedRotation !== displayRotation;\n\n if (!scaleChanged && !rotationChanged && page.width === displaySize.width && page.height === displaySize.height) {\n return page;\n }\n\n hasChanges = true;\n\n if (rotationChanged && page.url) {\n urlsToRevoke.push(page.url);\n }\n\n return {\n ...page,\n url: rotationChanged ? null : page.url,\n scale: nextScale,\n renderedScale: rotationChanged ? null : page.renderedScale,\n rotation: displayRotation,\n renderedRotation: rotationChanged ? null : page.renderedRotation,\n width: displaySize.width,\n height: displaySize.height,\n isRendering: false,\n textGlyphs: [],\n };\n });\n\n if (!hasChanges) {\n return;\n }\n\n this.selectionStart = null;\n this.selectionRects.set([]);\n this.renderedPages.set(nextPages);\n for (const url of urlsToRevoke) {\n this.revokeObjectUrl(url);\n }\n this.schedulePageObserverRefresh();\n }\n\n private getPriorityPageNumbers(activePage: number, renderAll: boolean): number[] {\n if (!this.pdfDocument) {\n return [];\n }\n\n const pageCount = this.pdfDocument.pageCount;\n const visiblePageNumbers = renderAll\n ? this.getVisiblePageNumbers()\n : [this.clamp(activePage, 1, pageCount)];\n const priorityPageNumbers = new Set<number>();\n\n for (const pageNumber of visiblePageNumbers.length > 0 ? visiblePageNumbers : [activePage]) {\n for (let candidate = pageNumber - 1; candidate <= pageNumber + 1; candidate++) {\n if (candidate >= 1 && candidate <= pageCount) {\n priorityPageNumbers.add(candidate);\n }\n }\n }\n\n priorityPageNumbers.add(this.clamp(activePage, 1, pageCount));\n\n return [...priorityPageNumbers].sort((a, b) => {\n const activeDistance = Math.abs(a - activePage) - Math.abs(b - activePage);\n\n return activeDistance || a - b;\n });\n }\n\n private getVisiblePageNumbers(): number[] {\n const container = this.viewerBody()?.nativeElement;\n\n if (!container) {\n return [];\n }\n\n const containerRect = container.getBoundingClientRect();\n const verticalPrefetchMargin = containerRect.height;\n const horizontalPrefetchMargin = containerRect.width;\n const pages = Array.from(container.querySelectorAll<HTMLElement>('[data-ngs-pdf-page]'));\n const visiblePageNumbers: number[] = [];\n\n for (const page of pages) {\n const rect = page.getBoundingClientRect();\n const pageNumber = Number(page.dataset['ngsPdfPage']);\n\n if (\n Number.isFinite(pageNumber) &&\n rect.bottom >= containerRect.top - verticalPrefetchMargin &&\n rect.top <= containerRect.bottom + verticalPrefetchMargin &&\n rect.right >= containerRect.left - horizontalPrefetchMargin &&\n rect.left <= containerRect.right + horizontalPrefetchMargin\n ) {\n visiblePageNumbers.push(pageNumber);\n }\n }\n\n return visiblePageNumbers;\n }\n\n private patchRenderedPage(pageNumber: number, patch: Partial<PdfViewerPageView>): void {\n this.renderedPages.update((pages) =>\n pages.map((page) => page.pageNumber === pageNumber ? { ...page, ...patch } : page),\n );\n }\n\n private async renderThumbnails(\n token: number,\n options: {\n withAnnotations: boolean;\n },\n ): Promise<void> {\n if (!this.engine || !this.pdfDocument) {\n return;\n }\n\n const pdfDocument = this.pdfDocument;\n const thumbnailScale = 0.18;\n const nextThumbnails: PdfViewerThumbnailView[] = [];\n const previousThumbnails = this.thumbnailPages();\n\n for (const page of pdfDocument.pages) {\n const blob = await this.engine.renderThumbnail(pdfDocument, page, {\n scaleFactor: thumbnailScale,\n rotation: this.getPageDisplayRotation(page),\n dpr: this.getDevicePixelRatio(),\n withAnnotations: options.withAnnotations,\n }).toPromise();\n\n if (token !== this.loadToken) {\n const staleUrl = this.document.defaultView?.URL.createObjectURL(blob) ?? URL.createObjectURL(blob);\n this.revokeObjectUrl(staleUrl);\n return;\n }\n\n const url = this.document.defaultView?.URL.createObjectURL(blob) ?? URL.createObjectURL(blob);\n const pageNumber = page.index + 1;\n const displaySize = this.getPageDisplaySize(page, thumbnailScale);\n nextThumbnails.push({ pageNumber, url, width: displaySize.width, height: displaySize.height });\n }\n\n if (token !== this.loadToken) {\n for (const thumbnail of nextThumbnails) {\n this.revokeObjectUrl(thumbnail.url);\n }\n return;\n }\n\n this.thumbnailPages.set(nextThumbnails);\n\n for (const thumbnail of previousThumbnails) {\n this.revokeObjectUrl(thumbnail.url);\n }\n }\n\n private async getPageTextGlyphs(\n pdfDocument: PdfDocumentObject,\n page: PdfPageObject,\n scale: number,\n ): Promise<PdfViewerTextGlyphView[]> {\n if (!this.engine) {\n return [];\n }\n\n try {\n const geometry = await this.engine.getPageGeometry(pdfDocument, page).toPromise();\n const displaySize = this.getPageDisplaySize(page, scale);\n const glyphs: PdfViewerTextGlyphView[] = [];\n\n for (const run of geometry.runs) {\n for (const glyph of run.glyphs) {\n if ((glyph.flags & 2) === 2 || glyph.width <= 0 || glyph.height <= 0) {\n continue;\n }\n\n const glyphLeft = glyph.x * scale;\n const glyphTop = glyph.y * scale;\n const glyphWidth = glyph.width * scale;\n const glyphHeight = glyph.height * scale;\n const lineHeight = Math.max(\n glyphHeight,\n (run.fontSize ?? glyph.height) * this.textSelectionLineHeight * scale,\n );\n const lineTop = this.clamp(glyphTop - (lineHeight - glyphHeight) / 2, 0, displaySize.height);\n const lineBottom = this.clamp(lineTop + lineHeight, 0, displaySize.height);\n const left = this.clamp(glyphLeft, 0, displaySize.width);\n const right = this.clamp(glyphLeft + glyphWidth, 0, displaySize.width);\n\n glyphs.push({\n index: glyphs.length,\n left,\n top: this.clamp(glyphTop, 0, displaySize.height),\n width: Math.max(0, right - left),\n height: Math.max(0, glyphHeight),\n lineTop,\n lineHeight: Math.max(0, lineBottom - lineTop),\n lineId: -1,\n });\n }\n }\n\n return this.assignTextGlyphLines(glyphs).map((glyph) => ({\n ...glyph,\n left: this.roundCssPixel(glyph.left),\n top: this.roundCssPixel(glyph.top),\n width: this.roundCssPixel(glyph.width),\n height: this.roundCssPixel(glyph.height),\n lineTop: this.roundCssPixel(glyph.lineTop),\n lineHeight: this.roundCssPixel(glyph.lineHeight),\n }));\n } catch {\n return [];\n }\n }\n\n private assignTextGlyphLines(glyphs: PdfViewerTextGlyphView[]): PdfViewerTextGlyphView[] {\n const lines: PdfViewerTextLineView[] = [];\n\n for (const glyph of [...glyphs].sort((a, b) => a.lineTop - b.lineTop || a.left - b.left)) {\n const glyphBottom = glyph.lineTop + glyph.lineHeight;\n const glyphCenter = glyph.lineTop + glyph.lineHeight / 2;\n let line = lines.find((candidate) =>\n this.rangesOverlap(candidate.top, candidate.bottom, glyph.lineTop, glyphBottom) ||\n Math.abs(candidate.center - glyphCenter) <= Math.max(2, glyph.lineHeight * 0.4),\n );\n\n if (!line) {\n line = {\n lineId: lines.length,\n glyphs: [],\n top: glyph.lineTop,\n bottom: glyphBottom,\n left: glyph.left,\n right: glyph.left + glyph.width,\n center: glyphCenter,\n };\n lines.push(line);\n }\n\n glyph.lineId = line.lineId;\n line.glyphs.push(glyph);\n line.top = Math.min(line.top, glyph.lineTop);\n line.bottom = Math.max(line.bottom, glyphBottom);\n line.left = Math.min(line.left, glyph.left);\n line.right = Math.max(line.right, glyph.left + glyph.width);\n line.center = line.top + (line.bottom - line.top) / 2;\n }\n\n return glyphs;\n }\n\n private getTextLines(glyphs: PdfViewerTextGlyphView[]): PdfViewerTextLineView[] {\n const lines = new Map<number, PdfViewerTextLineView>();\n\n for (const glyph of glyphs) {\n const glyphBottom = glyph.lineTop + glyph.lineHeight;\n const glyphRight = glyph.left + glyph.width;\n const existing = lines.get(glyph.lineId);\n\n if (!existing) {\n lines.set(glyph.lineId, {\n lineId: glyph.lineId,\n glyphs: [glyph],\n top: glyph.lineTop,\n bottom: glyphBottom,\n left: glyph.left,\n right: glyphRight,\n center: glyph.lineTop + glyph.lineHeight / 2,\n });\n continue;\n }\n\n existing.glyphs.push(glyph);\n existing.top = Math.min(existing.top, glyph.lineTop);\n existing.bottom = Math.max(existing.bottom, glyphBottom);\n existing.left = Math.min(existing.left, glyph.left);\n existing.right = Math.max(existing.right, glyphRight);\n existing.center = existing.top + (existing.bottom - existing.top) / 2;\n }\n\n return [...lines.values()]\n .map((line) => ({\n ...line,\n glyphs: [...line.glyphs].sort((a, b) => a.left - b.left || a.index - b.index),\n }))\n .sort((a, b) => a.top - b.top || a.left - b.left);\n }\n\n private rangesOverlap(aStart: number, aEnd: number, bStart: number, bEnd: number): boolean {\n return aStart < bEnd && aEnd > bStart;\n }\n\n private getCaretOffsetAtPoint(page: PdfViewerPageView, point: Pick<PdfViewerSelectionPoint, 'x' | 'y'>): number {\n const lines = this.getTextLines(page.textGlyphs);\n\n if (lines.length === 0) {\n return 0;\n }\n\n const line =\n lines.find((candidate) => point.y >= candidate.top && point.y <= candidate.bottom) ??\n lines.reduce((closest, candidate) =>\n Math.abs(candidate.center - point.y) < Math.abs(closest.center - point.y) ? candidate : closest,\n );\n const glyphs = line.glyphs;\n\n if (glyphs.length === 0) {\n return 0;\n }\n\n for (const glyph of glyphs) {\n if (point.x < glyph.left + glyph.width / 2) {\n return glyph.index;\n }\n }\n\n return glyphs[glyphs.length - 1].index + 1;\n }\n\n private getSelectionPoint(\n event: PointerEvent | MouseEvent,\n page: PdfViewerPageView,\n surface: HTMLElement,\n ): PdfViewerSelectionPoint {\n const rect = surface.getBoundingClientRect();\n const x = this.clamp(event.clientX - rect.left, 0, page.width);\n const y = this.clamp(event.clientY - rect.top, 0, page.height);\n\n return {\n pageNumber: page.pageNumber,\n x,\n y,\n offset: this.getCaretOffsetAtPoint(page, { x, y }),\n };\n }\n\n private getSelectionRects(\n page: PdfViewerPageView,\n startOffset: number,\n endOffset: number,\n ): PdfViewerSelectionRectView[] {\n const rangeStart = Math.min(startOffset, endOffset);\n const rangeEnd = Math.max(startOffset, endOffset);\n const selectedGlyphs = page.textGlyphs.filter((glyph) =>\n glyph.index >= rangeStart && glyph.index < rangeEnd,\n );\n\n return this.getTextLines(selectedGlyphs).map((line) => {\n const left = this.clamp(line.left - this.textSelectionHorizontalPadding, 0, page.width);\n const top = this.clamp(line.top, 0, page.height);\n const right = this.clamp(line.right + this.textSelectionHorizontalPadding, 0, page.width);\n const bottom = this.clamp(line.bottom, 0, page.height);\n\n return {\n text: '',\n pageNumber: page.pageNumber,\n left: this.roundCssPixel(left),\n top: this.roundCssPixel(top),\n width: this.roundCssPixel(Math.max(0, right - left)),\n height: this.roundCssPixel(Math.max(0, bottom - top)),\n };\n });\n }\n\n private async openSource(\n engine: PdfEngine<Blob>,\n documentId: string,\n source: Exclude<PdfViewerSource, null | undefined>,\n ): Promise<PdfDocumentObject> {\n if (typeof source === 'string') {\n const content = await this.fetchPdfSource(source);\n return this.openDocumentBuffer(engine, documentId, content);\n }\n\n if (source instanceof Blob) {\n return this.openDocumentBuffer(engine, documentId, await source.arrayBuffer());\n }\n\n if (source instanceof Uint8Array) {\n const content = new Uint8Array(source).buffer;\n return this.openDocumentBuffer(engine, documentId, content);\n }\n\n return this.openDocumentBuffer(engine, documentId, source);\n }\n\n private async fetchPdfSource(source: string): Promise<ArrayBuffer> {\n const response = await fetch(source);\n\n if (!response.ok) {\n throw new Error(`PDF request failed with status ${response.status}`);\n }\n\n return response.arrayBuffer();\n }\n\n private openDocumentBuffer(\n engine: PdfEngine<Blob>,\n documentId: string,\n content: ArrayBuffer,\n ): Promise<PdfDocumentObject> {\n return this.withTimeout(\n engine.openDocumentBuffer({ id: documentId, content }).toPromise(),\n this.documentOpenTimeoutMs,\n 'PDF document opening timed out',\n );\n }\n\n private withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timeoutId = setTimeout(() => reject(new Error(message)), timeoutMs);\n\n promise.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error: unknown) => {\n clearTimeout(timeoutId);\n reject(error);\n }\n );\n });\n }\n\n private async closeDocument(): Promise<void> {\n if (!this.engine || !this.pdfDocument) {\n this.pdfDocument = null;\n return;\n }\n\n const documentToClose = this.pdfDocument;\n this.pdfDocument = null;\n\n try {\n await this.engine.closeDocument(documentToClose).toPromise();\n } catch {\n // Best-effort cleanup; the viewer should not surface cleanup failures as user-facing load errors.\n }\n }\n\n private revokeRenderedPages(): void {\n this.disconnectPageObserver();\n this.cancelVisiblePageRenderFrame();\n\n for (const page of this.renderedPages()) {\n if (page.url) {\n this.revokeObjectUrl(page.url);\n }\n }\n\n this.renderedPages.set([]);\n }\n\n private revokeThumbnailPages(): void {\n for (const thumbnail of this.thumbnailPages()) {\n this.revokeObjectUrl(thumbnail.url);\n }\n\n this.thumbnailPages.set([]);\n }\n\n private revokeObjectUrl(url: string): void {\n const targetWindow = this.document.defaultView;\n\n if (targetWindow) {\n targetWindow.URL.revokeObjectURL(url);\n return;\n }\n\n URL.revokeObjectURL(url);\n }\n\n private getSourceName(source: PdfViewerSource): string {\n if (typeof File !== 'undefined' && source instanceof File && source.name) {\n return source.name;\n }\n\n if (typeof source !== 'string' || source.trim().length === 0) {\n return 'Document.pdf';\n }\n\n try {\n const url = new URL(source, this.document.baseURI);\n const pathName = url.pathname.split('/').filter(Boolean).pop();\n\n return pathName ? decodeURIComponent(pathName) : 'Document.pdf';\n } catch {\n const pathName = source.split('?')[0]?.split('#')[0]?.split('/').filter(Boolean).pop();\n\n return pathName ? decodeURIComponent(pathName) : 'Document.pdf';\n }\n }\n\n private sanitizePage(pageNumber: number): number {\n return this.clamp(Math.trunc(Number.isFinite(pageNumber) ? pageNumber : 1), 1, Math.max(this.pageCount(), 1));\n }\n\n private sanitizeScale(scale: number): number {\n const bounds = this.getScaleBounds();\n return this.clamp(Number.isFinite(scale) ? scale : 1, bounds.min, bounds.max);\n }\n\n private roundZoom(value: number): number {\n return this.sanitizeScale(Math.round(this.sanitizeScale(value) * 100) / 100);\n }\n\n private floorFitZoom(value: number): number {\n return this.sanitizeScale(Math.floor(this.sanitizeScale(value) * 100) / 100);\n }\n\n private clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n }\n\n private roundCssPixel(value: number): number {\n return Math.round(value * 100) / 100;\n }\n\n private parseCssPixel(value: string): number {\n const parsed = Number.parseFloat(value);\n\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private getDevicePixelRatio(): number {\n return this.document.defaultView?.devicePixelRatio || 1;\n }\n\n private getPageRasterRenderOptions(page: PdfPageObject, scale: number): { scaleFactor: number; dpr: number } {\n const devicePixelRatio = Math.max(1, this.getDevicePixelRatio());\n const pageSize = this.getPageBaseSize(page);\n const maxRenderPixels = this.sanitizePositiveNumber(this.maxRenderPixels(), 128_000_000);\n const maxRenderDimension = this.sanitizePositiveNumber(this.maxRenderDimension(), 13_000);\n const targetEffectiveScale = scale * devicePixelRatio;\n const dimensionEffectiveScale = maxRenderDimension / Math.max(pageSize.width, pageSize.height);\n const pixelEffectiveScale = Math.sqrt(maxRenderPixels / (pageSize.width * pageSize.height));\n const effectiveScale = this.clamp(\n Math.min(targetEffectiveScale, dimensionEffectiveScale, pixelEffectiveScale),\n 0.05,\n targetEffectiveScale,\n );\n const dprAtLayoutScale = effectiveScale / scale;\n\n if (dprAtLayoutScale >= 1) {\n return {\n scaleFactor: scale,\n dpr: this.clamp(dprAtLayoutScale, 1, devicePixelRatio),\n };\n }\n\n return {\n scaleFactor: effectiveScale,\n dpr: 1,\n };\n }\n\n private createDocumentId(): string {\n return `ngs-pdf-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n\n private isRenderCurrent(loadToken: number, renderToken: number): boolean {\n return loadToken === this.loadToken && renderToken === this.renderToken;\n }\n\n private cancelScrollSyncFrame(): void {\n if (this.scrollSyncFrame === null) {\n return;\n }\n\n this.document.defaultView?.cancelAnimationFrame(this.scrollSyncFrame);\n this.scrollSyncFrame = null;\n }\n\n private cancelPageObserverFrame(): void {\n if (this.pageObserverTimeout !== null) {\n this.document.defaultView?.clearTimeout(this.pageObserverTimeout);\n this.pageObserverTimeout = null;\n }\n\n if (this.pageObserverFrame === null) {\n return;\n }\n\n this.document.defaultView?.cancelAnimationFrame(this.pageObserverFrame);\n this.pageObserverFrame = null;\n }\n\n private cancelVisiblePageRenderFrame(): void {\n if (this.visiblePageRenderTimeout !== null) {\n this.document.defaultView?.clearTimeout(this.visiblePageRenderTimeout);\n this.visiblePageRenderTimeout = null;\n }\n\n if (this.visiblePageRenderFrame === null) {\n return;\n }\n\n this.document.defaultView?.cancelAnimationFrame(this.visiblePageRenderFrame);\n this.visiblePageRenderFrame = null;\n }\n\n private getCurrentTime(): number {\n return this.document.defaultView?.performance?.now() ?? Date.now();\n }\n\n private getQualityRenderDelay(): number {\n const elapsed = this.getCurrentTime() - this.lastZoomChangeTime;\n\n if (elapsed >= this.qualityRenderZoomIdleDelay) {\n return 0;\n }\n\n return Math.max(0, this.qualityRenderZoomIdleDelay - elapsed);\n }\n\n private getZoomAnchor(container: HTMLElement, event: WheelEvent): PdfViewerZoomAnchor | null {\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n return null;\n }\n\n const targetDocument = container.ownerDocument;\n const targetElement = targetDocument.elementFromPoint(event.clientX, event.clientY);\n const pageElement = targetElement?.closest<HTMLElement>('[data-ngs-pdf-page]');\n\n if (!pageElement || !container.contains(pageElement)) {\n return null;\n }\n\n const containerRect = container.getBoundingClientRect();\n const pageRect = pageElement.getBoundingClientRect();\n const pageNumber = Number(pageElement.dataset['ngsPdfPage']);\n\n if (!Number.isFinite(pageNumber) || pageRect.width <= 0 || pageRect.height <= 0) {\n return null;\n }\n\n return {\n container,\n pageNumber,\n relativeX: this.clamp((event.clientX - pageRect.left) / pageRect.width, 0, 1),\n relativeY: this.clamp((event.clientY - pageRect.top) / pageRect.height, 0, 1),\n viewportX: event.clientX - containerRect.left,\n viewportY: event.clientY - containerRect.top,\n };\n }\n\n private restoreZoomAnchor(anchor: PdfViewerZoomAnchor | null): void {\n if (!anchor) {\n return;\n }\n\n const targetWindow = this.document.defaultView;\n const restore = (): void => {\n const pageElement = anchor.container.querySelector<HTMLElement>(`[data-ngs-pdf-page=\"${anchor.pageNumber}\"]`);\n\n if (!pageElement) {\n return;\n }\n\n const containerRect = anchor.container.getBoundingClientRect();\n const pageRect = pageElement.getBoundingClientRect();\n const targetLeft =\n anchor.container.scrollLeft +\n pageRect.left -\n containerRect.left +\n pageRect.width * anchor.relativeX -\n anchor.viewportX;\n const targetTop =\n anchor.container.scrollTop +\n pageRect.top -\n containerRect.top +\n pageRect.height * anchor.relativeY -\n anchor.viewportY;\n\n anchor.container.scrollLeft = this.clamp(targetLeft, 0, Math.max(0, anchor.container.scrollWidth - anchor.container.clientWidth));\n anchor.container.scrollTop = this.clamp(targetTop, 0, Math.max(0, anchor.container.scrollHeight - anchor.container.clientHeight));\n };\n\n if (!targetWindow) {\n restore();\n return;\n }\n\n targetWindow.requestAnimationFrame(restore);\n }\n\n private disconnectPageObserver(): void {\n this.cancelPageObserverFrame();\n this.pageIntersectionObserver?.disconnect();\n this.pageIntersectionObserver = null;\n this.visiblePageRatios.clear();\n }\n\n private schedulePageObserverRefresh(): void {\n const targetWindow = this.document.defaultView;\n\n if (!this.isBrowser || !targetWindow) {\n return;\n }\n\n this.cancelPageObserverFrame();\n this.pageObserverRefreshAttempts = 0;\n this.scheduleNextPageObserverRefresh();\n }\n\n private scheduleNextPageObserverRefresh(): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.pageObserverTimeout = targetWindow.setTimeout(() => {\n this.pageObserverTimeout = null;\n this.pageObserverFrame = targetWindow.requestAnimationFrame(() => {\n this.pageObserverFrame = null;\n const isReady = this.setupPageIntersectionObserver();\n\n if (!isReady && this.pageObserverRefreshAttempts < 10) {\n this.pageObserverRefreshAttempts++;\n this.scheduleNextPageObserverRefresh();\n return;\n }\n\n this.syncActivePageFromViewport();\n });\n }, 0);\n }\n\n private setupPageIntersectionObserver(): boolean {\n const targetWindow = this.document.defaultView;\n const container = this.viewerBody()?.nativeElement;\n\n if (!targetWindow || !container || !('IntersectionObserver' in targetWindow)) {\n return false;\n }\n\n const pages = Array.from(container.querySelectorAll<HTMLElement>('[data-ngs-pdf-page]'));\n\n if (pages.length === 0) {\n return false;\n }\n\n this.pageIntersectionObserver?.disconnect();\n this.visiblePageRatios.clear();\n this.pageIntersectionObserver = new targetWindow.IntersectionObserver((entries) => {\n if (this.isProgrammaticScrollActive()) {\n this.scheduleCurrentVisiblePagesRender();\n return;\n }\n\n for (const entry of entries) {\n const pageNumber = Number(entry.target.getAttribute('data-ngs-pdf-page'));\n\n if (!Number.isFinite(pageNumber)) {\n continue;\n }\n\n this.visiblePageRatios.set(pageNumber, entry.intersectionRatio);\n }\n\n this.syncActivePageFromIntersections();\n this.scheduleCurrentVisiblePagesRender();\n }, {\n root: container,\n threshold: [0, 0.1, 0.25, 0.5, 0.75, 1],\n });\n\n for (const page of pages) {\n this.pageIntersectionObserver.observe(page);\n }\n\n return true;\n }\n\n private getFitScale(mode: Extract<PdfViewerZoomMode, 'fit-page' | 'fit-width'>): number | null {\n const container = this.viewerBody()?.nativeElement;\n const page = this.pdfDocument?.pages[this.clamp(this.activePage(), 1, Math.max(this.pageCount(), 1)) - 1];\n\n if (!container || !page) {\n return null;\n }\n\n const pageSize = this.getPageBaseSize(page);\n const pagesElement = container.querySelector<HTMLElement>('.pdf-viewer-pages');\n const computedStyle = pagesElement && this.document.defaultView\n ? this.document.defaultView.getComputedStyle(pagesElement)\n : null;\n const horizontalPadding = computedStyle\n ? this.parseCssPixel(computedStyle.paddingLeft) + this.parseCssPixel(computedStyle.paddingRight)\n : 0;\n const verticalPadding = computedStyle\n ? this.parseCssPixel(computedStyle.paddingTop) + this.parseCssPixel(computedStyle.paddingBottom)\n : 0;\n const fitAllowance = 1;\n const availableWidth = Math.max(1, container.clientWidth - horizontalPadding - fitAllowance);\n const availableHeight = Math.max(1, container.clientHeight - verticalPadding - fitAllowance);\n const widthScale = availableWidth / pageSize.width;\n\n if (mode === 'fit-width') {\n return this.floorFitZoom(widthScale);\n }\n\n return this.floorFitZoom(Math.min(widthScale, availableHeight / pageSize.height));\n }\n\n private getScaleBounds(): { min: number; max: number } {\n const min = this.sanitizePositiveNumber(this.minScale(), 0.2);\n const max = this.sanitizePositiveNumber(this.maxScale(), 60);\n\n return min <= max ? { min, max } : { min: max, max: min };\n }\n\n private sanitizeZoomStep(): number {\n return this.sanitizePositiveNumber(this.zoomStep(), 0.1);\n }\n\n private sanitizePositiveNumber(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? value : fallback;\n }\n\n private getPageDisplaySize(page: PdfPageObject, scale: number): { width: number; height: number } {\n const pageSize = this.getPageBaseSize(page);\n\n return {\n width: Math.max(1, Math.round(pageSize.width * scale)),\n height: Math.max(1, Math.round(pageSize.height * scale)),\n };\n }\n\n private getPageBaseSize(page: PdfPageObject): { width: number; height: number } {\n const rotation = this.getPageDisplayRotation(page);\n const isRotatedSideways = rotation === Rotation.Degree90 || rotation === Rotation.Degree270;\n const width = isRotatedSideways ? page.size.height : page.size.width;\n const height = isRotatedSideways ? page.size.width : page.size.height;\n\n return {\n width: Math.max(1, width),\n height: Math.max(1, height),\n };\n }\n\n private getPageDisplayRotation(page: PdfPageObject): Rotation {\n return this.normalizeRotation(page.rotation + this.pageRotation());\n }\n\n private normalizeRotation(rotation: number): Rotation {\n return (((rotation % 4) + 4) % 4) as Rotation;\n }\n\n private scrollToPage(pageNumber: number): void {\n if (!this.renderAll()) {\n return;\n }\n\n const container = this.viewerBody()?.nativeElement;\n const target = container?.querySelector<HTMLElement>(`[data-ngs-pdf-page=\"${pageNumber}\"]`);\n\n if (!container || !target) {\n return;\n }\n\n const nextScrollTop = this.getPageScrollTop(container, target);\n const nextScrollLeft = this.getPageScrollLeft(container, target);\n const scrollDistance = Math.hypot(\n container.scrollTop - nextScrollTop,\n container.scrollLeft - nextScrollLeft,\n );\n\n this.startProgrammaticScrollLock(pageNumber, scrollDistance);\n container.scrollTo({\n top: nextScrollTop,\n left: nextScrollLeft,\n behavior: 'smooth',\n });\n }\n\n private syncActivePageFromViewport(): void {\n const pageNumber = this.findActivePageInViewport();\n\n this.activatePageFromScroll(pageNumber);\n }\n\n private syncActivePageFromIntersections(): void {\n let activePage: number | null = null;\n let activeRatio = 0;\n\n for (const [pageNumber, ratio] of this.visiblePageRatios) {\n if (ratio > activeRatio) {\n activeRatio = ratio;\n activePage = pageNumber;\n }\n }\n\n if (!activePage) {\n activePage = this.findActivePageInViewport();\n }\n\n this.activatePageFromScroll(activePage);\n }\n\n private activatePageFromScroll(pageNumber: number | null): void {\n if (this.isProgrammaticScrollActive()) {\n return;\n }\n\n if (!pageNumber || pageNumber === this.activePage()) {\n return;\n }\n\n this.activePage.set(pageNumber);\n this.pageChanged.emit(pageNumber);\n this.scrollPageListToPage(pageNumber);\n this.scheduleCurrentVisiblePagesRender();\n }\n\n private findActivePageInViewport(): number | null {\n const container = this.viewerBody()?.nativeElement;\n\n if (!container) {\n return null;\n }\n\n const containerRect = container.getBoundingClientRect();\n const viewportCenterX = containerRect.left + containerRect.width / 2;\n const viewportCenterY = containerRect.top + containerRect.height / 2;\n const pages = Array.from(container.querySelectorAll<HTMLElement>('[data-ngs-pdf-page]'));\n\n let closestPage: number | null = null;\n let closestDistance = Number.POSITIVE_INFINITY;\n let mostVisiblePage: number | null = null;\n let mostVisibleArea = 0;\n\n for (const page of pages) {\n const rect = page.getBoundingClientRect();\n const pageNumber = Number(page.dataset['ngsPdfPage']);\n\n if (!Number.isFinite(pageNumber)) {\n continue;\n }\n\n if (\n rect.left <= viewportCenterX &&\n rect.right >= viewportCenterX &&\n rect.top <= viewportCenterY &&\n rect.bottom >= viewportCenterY\n ) {\n return pageNumber;\n }\n\n const visibleWidth = Math.max(0, Math.min(rect.right, containerRect.right) - Math.max(rect.left, containerRect.left));\n const visibleHeight = Math.max(0, Math.min(rect.bottom, containerRect.bottom) - Math.max(rect.top, containerRect.top));\n const visibleArea = visibleWidth * visibleHeight;\n\n if (visibleArea > mostVisibleArea) {\n mostVisibleArea = visibleArea;\n mostVisiblePage = pageNumber;\n }\n\n const pageCenterX = rect.left + rect.width / 2;\n const pageCenterY = rect.top + rect.height / 2;\n const distance = Math.hypot(pageCenterX - viewportCenterX, pageCenterY - viewportCenterY);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestPage = pageNumber;\n }\n }\n\n return mostVisiblePage ?? closestPage;\n }\n\n private scrollPageListToPage(pageNumber: number): void {\n const container = this.pageList()?.nativeElement;\n const target = container?.querySelector<HTMLElement>(`[data-ngs-pdf-page-button=\"${pageNumber}\"]`);\n\n if (!container || !target) {\n return;\n }\n\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const isAbove = targetRect.top < containerRect.top;\n const isBelow = targetRect.bottom > containerRect.bottom;\n\n if (!isAbove && !isBelow) {\n return;\n }\n\n container.scrollTo({\n top: this.getElementScrollTop(container, target, 'center'),\n behavior: 'smooth',\n });\n }\n\n private getPageScrollTop(container: HTMLElement, target: HTMLElement): number {\n return this.getElementScrollTop(container, target, 'start');\n }\n\n private getPageScrollLeft(container: HTMLElement, target: HTMLElement): number {\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const targetLeft = container.scrollLeft + targetRect.left - containerRect.left;\n\n return this.clamp(targetLeft, 0, Math.max(0, container.scrollWidth - container.clientWidth));\n }\n\n private getElementScrollTop(container: HTMLElement, target: HTMLElement, align: 'start' | 'center'): number {\n const containerRect = container.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const targetTop = container.scrollTop + targetRect.top - containerRect.top;\n const alignedTop = align === 'center'\n ? targetTop - container.clientHeight / 2 + targetRect.height / 2\n : targetTop;\n\n return this.clamp(alignedTop, 0, Math.max(0, container.scrollHeight - container.clientHeight));\n }\n\n private getProgrammaticScrollTimeout(distance: number): number {\n return this.clamp(\n this.programmaticScrollMinDuration + distance * 0.45,\n this.programmaticScrollMinDuration,\n this.programmaticScrollMaxDuration,\n );\n }\n\n private startProgrammaticScrollLock(pageNumber: number, distance: number): void {\n const targetWindow = this.document.defaultView;\n\n if (!targetWindow) {\n return;\n }\n\n this.clearProgrammaticScrollLock();\n this.programmaticScrollTargetPage = pageNumber;\n this.programmaticScrollTimeout = targetWindow.setTimeout(() => {\n this.programmaticScrollTimeout = null;\n this.completeProgrammaticScroll();\n }, this.getProgrammaticScrollTimeout(distance));\n }\n\n private isProgrammaticScrollActive(): boolean {\n return this.programmaticScrollTargetPage !== null;\n }\n\n private completeProgrammaticScrollIfSettled(): void {\n const pageNumber = this.programmaticScrollTargetPage;\n\n if (pageNumber === null) {\n return;\n }\n\n const container = this.viewerBody()?.nativeElement;\n const target = container?.querySelector<HTMLElement>(`[data-ngs-pdf-page=\"${pageNumber}\"]`);\n\n if (!container || !target) {\n this.completeProgrammaticScroll();\n return;\n }\n\n if (\n Math.abs(container.scrollTop - this.getPageScrollTop(container, target)) <= 2 &&\n Math.abs(container.scrollLeft - this.getPageScrollLeft(container, target)) <= 2\n ) {\n this.completeProgrammaticScroll();\n }\n }\n\n private completeProgrammaticScroll(): void {\n const pageNumber = this.programmaticScrollTargetPage;\n\n this.clearProgrammaticScrollLock();\n\n if (pageNumber === null) {\n return;\n }\n\n if (pageNumber !== this.activePage()) {\n this.activePage.set(pageNumber);\n this.pageChanged.emit(pageNumber);\n }\n\n this.scrollPageListToPage(pageNumber);\n }\n\n private clearProgrammaticScrollLock(): void {\n if (this.programmaticScrollTimeout !== null) {\n this.document.defaultView?.clearTimeout(this.programmaticScrollTimeout);\n this.programmaticScrollTimeout = null;\n }\n\n this.programmaticScrollTargetPage = null;\n }\n}\n","<ngs-panel class=\"pdf-viewer-panel h-full overflow-hidden rounded-lg border border-border bg-surface-container-low text-on-surface\">\n @if (showToolbar()) {\n <ngs-panel-header class=\"min-w-0 border-b border-border bg-surface\" flex>\n <ngs-toolbar class=\"pdf-viewer-toolbar flex h-14 w-full min-w-0 items-center gap-4 overflow-visible px-2 text-on-surface-variant\" aria-label=\"PDF viewer controls\">\n <ngs-toolbar-item class=\"pdf-viewer-toolbar__start flex min-w-0 flex-none items-center gap-2\">\n @if (showPageList()) {\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n [attr.aria-label]=\"pageListVisible() ? 'Hide pages panel' : 'Show pages panel'\"\n [attr.aria-pressed]=\"pageListVisible()\"\n (click)=\"togglePageList()\">\n <ngs-icon\n class=\"text-2xl\"\n [name]=\"pageListVisible() ? 'fluent:panel-left-contract-24-regular' : 'fluent:panel-left-expand-24-regular'\" />\n </button>\n }\n <ngs-divider vertical fixedHeight />\n </ngs-toolbar-item>\n <ngs-toolbar-title class=\"min-w-0 flex-1 truncate text-sm! max-w-[20%] font-semibold! text-on-surface-variant\" [title]=\"displayDocumentName()\">\n {{ displayDocumentName() }}\n </ngs-toolbar-title>\n\n <ngs-toolbar-item class=\"pdf-viewer-toolbar__center flex flex-none items-center gap-3\">\n <div class=\"pdf-viewer-toolbar__cluster flex min-w-0 items-center gap-2\" aria-label=\"Zoom controls\">\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Zoom out\"\n [disabled]=\"!canZoomOut()\"\n (click)=\"zoomOut()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:zoom-out-24-regular\" />\n </button>\n <button\n class=\"pdf-viewer-toolbar__zoom min-w-12 cursor-pointer border-0 bg-transparent p-0 text-center text-sm text-on-surface hover:text-primary\"\n type=\"button\"\n aria-label=\"Zoom presets\"\n [ngsMenuTriggerFor]=\"zoomMenu\">\n {{ zoomLabel() }}\n </button>\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Zoom in\"\n [disabled]=\"!canZoomIn()\"\n (click)=\"zoomIn()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:zoom-in-24-regular\" />\n </button>\n </div>\n\n <ngs-divider vertical fixedHeight />\n\n <div class=\"pdf-viewer-toolbar__cluster flex min-w-0 items-center gap-2\" aria-label=\"Page navigation\">\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Previous page\"\n [disabled]=\"!canGoPrevious()\"\n (click)=\"previousPage()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:chevron-left-24-regular\" />\n </button>\n <span class=\"pdf-viewer-toolbar__page inline-flex h-9 min-w-16 items-center justify-center gap-2 rounded bg-surface-container-low text-sm font-bold text-on-surface\">\n <span>{{ activePage() }}</span>\n <span>/</span>\n <span>{{ pageCount() || 1 }}</span>\n </span>\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"Next page\"\n [disabled]=\"!canGoNext()\"\n (click)=\"nextPage()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:chevron-right-24-regular\" />\n </button>\n </div>\n </ngs-toolbar-item>\n\n <ngs-toolbar-spacer />\n\n <ngs-toolbar-item class=\"pdf-viewer-toolbar__end flex min-w-0 flex-1 items-center justify-end gap-2\" aria-label=\"PDF tools\">\n @if (showSearchPanel()) {\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n [attr.aria-pressed]=\"isSearchPanelVisible()\"\n aria-label=\"Search\"\n [disabled]=\"!asidePanelInteractive()\"\n (click)=\"toggleSearchPanel()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:search-24-regular\" />\n </button>\n }\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n aria-label=\"PDF viewer settings\"\n [ngsMenuTriggerFor]=\"settingsMenu\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:settings-24-regular\" />\n </button>\n @if (showAnnotationsPanel()) {\n <button\n class=\"pdf-viewer-toolbar__button size-10 text-on-surface-variant hover:bg-surface-container-low hover:text-on-surface\"\n ngsIconButton\n type=\"button\"\n [attr.aria-pressed]=\"isAnnotationsPanelVisible()\"\n aria-label=\"Toggle annotations panel\"\n [disabled]=\"!asidePanelInteractive()\"\n (click)=\"toggleAnnotationsPanel()\">\n <ngs-icon class=\"text-2xl\" name=\"fluent:text-bullet-list-square-edit-24-regular\" />\n </button>\n }\n </ngs-toolbar-item>\n </ngs-toolbar>\n\n <ngs-menu #zoomMenu=\"ngsMenu\">\n @for (zoomPreset of zoomPresets; track zoomPreset) {\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"isZoomPresetSelected(zoomPreset)\"\n (click)=\"setZoomPreset(zoomPreset)\">\n <span>{{ zoomPreset * 100 }}%</span>\n </button>\n }\n\n <ngs-menu-divider />\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"zoomMode() === 'fit-page'\"\n (click)=\"fitToPage()\">\n <ngs-icon name=\"fluent:resize-large-24-regular\" />\n <span>Fit to Page</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"zoomMode() === 'fit-width'\"\n (click)=\"fitToWidth()\">\n <ngs-icon name=\"fluent:resize-24-regular\" />\n <span>Fit to Width</span>\n </button>\n </ngs-menu>\n\n <ngs-menu #settingsMenu=\"ngsMenu\" xPosition=\"before\">\n <ngs-menu-heading>SPREAD MODE</ngs-menu-heading>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"spreadMode() === 'single'\"\n (click)=\"setSpreadMode('single')\">\n <ngs-icon name=\"fluent:document-24-regular\" />\n <span>Single Page</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"spreadMode() === 'two-odd'\"\n (click)=\"setSpreadMode('two-odd')\">\n <ngs-icon name=\"fluent:book-open-24-regular\" />\n <span>Two Page (Odd)</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"spreadMode() === 'two-even'\"\n (click)=\"setSpreadMode('two-even')\">\n <ngs-icon name=\"fluent:document-text-24-regular\" />\n <span>Two Page (Even)</span>\n </button>\n\n <ngs-menu-divider />\n <ngs-menu-heading>SCROLL LAYOUT</ngs-menu-heading>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"scrollLayout() === 'vertical'\"\n (click)=\"setScrollLayout('vertical')\">\n <ngs-icon name=\"fluent:arrow-sort-24-regular\" />\n <span>Vertical</span>\n </button>\n <button\n ngs-menu-item\n type=\"button\"\n [selected]=\"scrollLayout() === 'horizontal'\"\n (click)=\"setScrollLayout('horizontal')\">\n <ngs-icon name=\"fluent:arrow-swap-24-regular\" />\n <span>Horizontal</span>\n </button>\n\n <ngs-menu-divider />\n <ngs-menu-heading>PAGE ROTATION</ngs-menu-heading>\n <button ngs-menu-item type=\"button\" (click)=\"rotateClockwise()\">\n <ngs-icon name=\"fluent:arrow-clockwise-24-regular\" />\n <span>Rotate Clockwise</span>\n </button>\n <button ngs-menu-item type=\"button\" (click)=\"rotateCounterClockwise()\">\n <ngs-icon name=\"fluent:arrow-counterclockwise-24-regular\" />\n <span>Rotate Counter-Clockwise</span>\n </button>\n\n <ngs-menu-divider />\n <button ngs-menu-item type=\"button\" (click)=\"toggleFullscreen()\">\n <ngs-icon name=\"fluent:arrow-maximize-24-regular\" />\n <span>Fullscreen</span>\n </button>\n </ngs-menu>\n </ngs-panel-header>\n }\n\n @if (isPageListVisible()) {\n <ngs-panel-sidebar class=\"w-[var(--ngs-pdf-viewer-sidebar-width)] min-w-[var(--ngs-pdf-viewer-sidebar-width)] border-r border-border bg-surface\">\n <div class=\"pdf-viewer-sidebar flex h-full min-h-0 flex-col gap-2 overflow-auto p-3\" #pageList>\n <div class=\"pdf-viewer-sidebar__title px-1 text-xs font-semibold text-on-surface-variant\">Pages</div>\n <div class=\"pdf-viewer-sidebar__pages flex min-h-0 flex-col gap-2\" aria-label=\"PDF pages\">\n @for (pageItem of pageItems(); track pageItem.pageNumber) {\n <button\n class=\"pdf-viewer-sidebar__page group flex w-full cursor-pointer flex-col items-stretch gap-1 rounded border border-transparent bg-transparent p-1 text-left text-on-surface-variant focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary [&.is-active]:text-on-surface\"\n type=\"button\"\n [class.is-active]=\"pageItem.pageNumber === activePage()\"\n [attr.aria-current]=\"pageItem.pageNumber === activePage() ? 'page' : null\"\n [attr.aria-label]=\"'Open page ' + pageItem.pageNumber\"\n [attr.data-ngs-pdf-page-button]=\"pageItem.pageNumber\"\n (click)=\"setPage(pageItem.pageNumber)\">\n <span class=\"pdf-viewer-sidebar__thumb flex aspect-[3/4] w-full items-center justify-center overflow-hidden rounded border border-border bg-surface shadow-xs group-hover:border-border\" aria-hidden=\"true\">\n @if (pageItem.thumbnail; as thumbnail) {\n <img\n class=\"block h-full w-full select-none object-contain\"\n [src]=\"thumbnail.url\"\n [attr.width]=\"thumbnail.width\"\n [attr.height]=\"thumbnail.height\"\n alt=\"\"\n draggable=\"false\" />\n } @else {\n <ngs-image-placeholder class=\"h-full w-full\" />\n }\n </span>\n <span class=\"pdf-viewer-sidebar__label block truncate text-center text-xs font-medium leading-tight\">Page {{ pageItem.pageNumber }}</span>\n </button>\n }\n </div>\n </div>\n </ngs-panel-sidebar>\n }\n\n <ngs-panel-content class=\"min-h-0 min-w-0 overflow-hidden bg-surface-container-low\">\n <div class=\"pdf-viewer-body absolute inset-0 overflow-auto\" #viewerBody (scroll)=\"onViewerScroll()\" (wheel)=\"onViewerWheel($event)\">\n <ngs-block-loader [loading]=\"isLoading()\">Loading PDF...</ngs-block-loader>\n @if (errorState()) {\n <div class=\"pdf-viewer-state pdf-viewer-state--error absolute inset-0 flex flex-col items-center justify-center gap-3 p-6 text-center text-danger\">\n <ngs-icon class=\"text-3xl\" name=\"fluent:error-circle-24-regular\" />\n <span>PDF could not be loaded.</span>\n </div>\n } @else if (!src()) {\n <div class=\"pdf-viewer-state absolute inset-0 flex flex-col items-center justify-center gap-3 p-6 text-center text-on-surface-variant\">\n <ngs-icon class=\"text-3xl\" name=\"fluent:document-pdf-24-regular\" />\n <span>No PDF selected.</span>\n </div>\n } @else {\n <div\n class=\"pdf-viewer-pages\"\n [class.is-horizontal]=\"scrollLayout() === 'horizontal'\"\n [class.is-vertical]=\"scrollLayout() === 'vertical'\"\n [class.is-spread]=\"spreadMode() !== 'single'\">\n @for (spread of pageSpreads(); track spread.id) {\n <div class=\"pdf-viewer-spread\" [attr.data-ngs-pdf-spread]=\"spread.id\">\n @if (spread.leadingPlaceholder) {\n @if (spread.leadingPlaceholderPage; as placeholderPage) {\n <div\n class=\"pdf-viewer-spread__placeholder\"\n [style.width.px]=\"placeholderPage.width\"\n [style.height.px]=\"placeholderPage.height\"\n aria-hidden=\"true\"></div>\n }\n }\n @for (pdfPage of spread.pages; track pdfPage.pageNumber) {\n <article\n class=\"pdf-viewer-page w-max max-w-none\"\n [attr.aria-label]=\"'PDF page ' + pdfPage.pageNumber\"\n [attr.data-ngs-pdf-page]=\"pdfPage.pageNumber\">\n <div\n class=\"pdf-viewer-page__surface relative cursor-text overflow-hidden rounded bg-surface shadow-md select-none touch-none\"\n [style.width.px]=\"pdfPage.width\"\n [style.height.px]=\"pdfPage.height\"\n (pointerdown)=\"startTextSelection($event, pdfPage)\"\n (pointermove)=\"updateTextSelection($event, pdfPage)\"\n (pointerup)=\"finishTextSelection($event, pdfPage)\"\n (pointercancel)=\"cancelTextSelection()\"\n (mousedown)=\"startTextSelection($event, pdfPage)\"\n (mousemove)=\"updateTextSelection($event, pdfPage)\"\n (mouseup)=\"finishTextSelection($event, pdfPage)\">\n @if (pdfPage.url; as pageUrl) {\n <img\n class=\"block h-full w-full max-w-none select-none pointer-events-none\"\n [src]=\"pageUrl\"\n [alt]=\"'PDF page ' + pdfPage.pageNumber\"\n [attr.width]=\"pdfPage.width\"\n [attr.height]=\"pdfPage.height\"\n draggable=\"false\" />\n } @else {\n <div class=\"pdf-viewer-page__placeholder pointer-events-none absolute inset-0 flex items-center justify-center bg-surface\" aria-hidden=\"true\">\n @if (pdfPage.isRendering) {\n <span class=\"size-8 animate-spin rounded-full border-2 border-border border-t-primary\"></span>\n }\n </div>\n }\n @if (selectionRectsForPage(pdfPage.pageNumber); as selectionRects) {\n @if (selectionRects.length > 0) {\n <div class=\"pdf-viewer-page__selection-layer pointer-events-none absolute inset-0 z-[1] isolate overflow-hidden mix-blend-multiply\" aria-hidden=\"true\">\n @for (selectionRect of selectionRects; track selectionRect.left + '-' + selectionRect.top + '-' + $index) {\n <div\n class=\"pdf-viewer-page__selection-rect pointer-events-none absolute bg-primary/30\"\n [style.left.px]=\"selectionRect.left\"\n [style.top.px]=\"selectionRect.top\"\n [style.width.px]=\"selectionRect.width\"\n [style.height.px]=\"selectionRect.height\"></div>\n }\n </div>\n }\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n }\n </div>\n </ngs-panel-content>\n\n @if (isSearchPanelVisible() || isAnnotationsPanelVisible()) {\n <ngs-panel-aside class=\"w-[var(--ngs-pdf-viewer-aside-width)] min-w-[var(--ngs-pdf-viewer-aside-width)] border-l border-border bg-surface\">\n @if (isSearchPanelVisible()) {\n <ngs-pdf-viewer-search\n [query]=\"activeSearchQuery()\"\n [results]=\"pdfSearchResults()\"\n (closed)=\"closeAsidePanel()\"\n (searchChanged)=\"updatePdfSearch($event)\"\n (resultSelected)=\"selectSearchResult($event)\" />\n } @else {\n <ngs-pdf-viewer-annotations\n [annotations]=\"annotationItems()\"\n [annotationDefs]=\"annotationDefs()\"\n [annotationTypeProperty]=\"annotationTypeProperty()\"\n (closed)=\"closeAsidePanel()\"\n (pageSelected)=\"setPage($event)\" />\n }\n </ngs-panel-aside>\n }\n</ngs-panel>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgsInput"],"mappings":"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"}