ngx-extended-pdf-viewer
Version:
Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.
1 lines • 739 kB
Source Map (JSON)
{"version":3,"file":"ngx-extended-pdf-viewer.mjs","sources":["../../../projects/ngx-extended-pdf-viewer/src/lib/options/editor-annotations.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/pdf-default-options.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/dynamic-css/positioning.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/focus-management.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/events/find-result.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/pdf-cursor-tools.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/pdf-viewer.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/verbosity-level.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dummy-components/pdf-dummy-components.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dummy-components/pdf-dummy-components.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/ngx-form-support.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/pdf-sidebar-views.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-notification-service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/ngx-extended-pdf-viewer.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-csp-policy.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-script-loader.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/ngx-keyboard-manager.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/services/ios-canvas-optimization.service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/responsive-visibility.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/unit-to-px.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/dynamic-css/dynamic-css.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/dynamic-css/dynamic-css.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/theme/acroform-default-theme/pdf-acroform-default-theme.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-add-signature-dialog/pdf-add-signature-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-add-signature-dialog/pdf-add-signature-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-context-menu/pdf-context-menu.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-context-menu/pdf-context-menu.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/theme/pdf-dark-theme/pdf-dark-theme.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/theme/pdf-dark-theme/pdf-dark-theme.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-alt-text-dialog/pdf-alt-text-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-alt-text-dialog/pdf-alt-text-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-alt-text-settings-dialog/pdf-alt-text-settings-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-alt-text-settings-dialog/pdf-alt-text-settings-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-document-properties-dialog/pdf-document-properties-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-document-properties-dialog/pdf-document-properties-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-edit-signature-dialog/pdf-edit-signature-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-edit-signature-dialog/pdf-edit-signature-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-error-message/pdf-error-message.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-error-message/pdf-error-message.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-message-container/pdf-findbar-message-container.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-message-container/pdf-findbar-message-container.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-two-container/pdf-find-entire-word/pdf-find-entire-word.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-two-container/pdf-find-entire-word/pdf-find-entire-word.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-highlight-all/pdf-find-highlight-all.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-highlight-all/pdf-find-highlight-all.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-find-next/pdf-find-next.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-find-next/pdf-find-next.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-find-previous/pdf-find-previous.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-find-previous/pdf-find-previous.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-search-input-field/pdf-search-input-field.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-search-input-field/pdf-search-input-field.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-find-input-area/pdf-find-input-area.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-find-input-area/pdf-find-input-area.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-match-case/pdf-find-match-case.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-match-case/pdf-find-match-case.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-multiple/pdf-find-multiple.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-multiple/pdf-find-multiple.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-regexp/pdf-find-regexp.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-one-container/pdf-find-regexp/pdf-find-regexp.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-three-container/pdf-find-results-count/pdf-find-results-count.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-three-container/pdf-find-results-count/pdf-find-results-count.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-two-container/pdf-match-diacritics/pdf-match-diacritics.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar-options-two-container/pdf-match-diacritics/pdf-match-diacritics.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-findbar/pdf-findbar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/theme/pdf-light-theme/pdf-light-theme.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/theme/pdf-light-theme/pdf-light-theme.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-password-dialog/pdf-password-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-password-dialog/pdf-password-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-prepare-printing-dialog/pdf-prepare-printing-dialog.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-dialog/pdf-prepare-printing-dialog/pdf-prepare-printing-dialog.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-shy-button/pdf-shy-button-service.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/secondary-toolbar/pdf-secondary-toolbar/pdf-secondary-toolbar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/secondary-toolbar/pdf-secondary-toolbar/pdf-secondary-toolbar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/sidebar/pdf-sidebar/pdf-sidebar-content/pdf-sidebar-content.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/sidebar/pdf-sidebar/pdf-sidebar-content/pdf-sidebar-content.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/sidebar/pdf-sidebar/pdf-sidebar-toolbar/pdf-sidebar-toolbar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/sidebar/pdf-sidebar/pdf-sidebar-toolbar/pdf-sidebar-toolbar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/sidebar/pdf-sidebar/pdf-sidebar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/sidebar/pdf-sidebar/pdf-sidebar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-shy-button/pdf-shy-button.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-shy-button/pdf-shy-button.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-book-mode/pdf-book-mode.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-book-mode/pdf-book-mode.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-document-properties/pdf-document-properties.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-document-properties/pdf-document-properties.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-download/pdf-download.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-download/pdf-download.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-comment-editor/pdf-comment-editor.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-comment-editor/pdf-comment-editor.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-draw-editor/pdf-draw-editor.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-draw-editor/pdf-draw-editor.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-editor-signature/pdf-editor-signature.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-editor-signature/pdf-editor-signature.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-highlight-editor/pdf-highlight-editor.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-highlight-editor/pdf-highlight-editor.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-stamp-editor/pdf-stamp-editor.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-stamp-editor/pdf-stamp-editor.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-text-editor/pdf-text-editor.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-text-editor/pdf-text-editor.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-editor/pdf-editor.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-editor/pdf-editor.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-even-spread/pdf-even-spread.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-even-spread/pdf-even-spread.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-find-button/pdf-find-button.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-find-button/pdf-find-button.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-hand-tool/pdf-hand-tool.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-hand-tool/pdf-hand-tool.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/options/pdf-scroll-mode.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-horizontal-scroll/pdf-horizontal-scroll.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-horizontal-scroll/pdf-horizontal-scroll.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-infinite-scroll/pdf-infinite-scroll.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-infinite-scroll/pdf-infinite-scroll.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-move-down/pdf-move-down.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-move-down/pdf-move-down.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-move-up/pdf-move-up.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-move-up/pdf-move-up.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-no-spread/pdf-no-spread.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-no-spread/pdf-no-spread.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-odd-spread/pdf-odd-spread.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-odd-spread/pdf-odd-spread.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-open-file/pdf-open-file.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-open-file/pdf-open-file.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-first-page/pdf-first-page.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-first-page/pdf-first-page.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-last-page/pdf-last-page.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-last-page/pdf-last-page.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-next-page/pdf-next-page.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-next-page/pdf-next-page.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-page-number/pdf-page-number.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-page-number/pdf-page-number.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-previous-page/pdf-previous-page.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-previous-page/pdf-previous-page.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-paging-area.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-paging-area/pdf-paging-area.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-presentation-mode/pdf-presentation-mode.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-presentation-mode/pdf-presentation-mode.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-print/pdf-print.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-print/pdf-print.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-rotate-page-cw/pdf-rotate-page-cw.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-rotate-page-cw/pdf-rotate-page-cw.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-rotate-page-ccw/pdf-rotate-page-ccw.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-rotate-page-ccw/pdf-rotate-page-ccw.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-select-tool/pdf-select-tool.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-select-tool/pdf-select-tool.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-single-page-mode/pdf-single-page-mode.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-single-page-mode/pdf-single-page-mode.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-toggle-secondary-toolbar/pdf-toggle-secondary-toolbar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-toggle-secondary-toolbar/pdf-toggle-secondary-toolbar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-toggle-sidebar/pdf-toggle-sidebar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-toggle-sidebar/pdf-toggle-sidebar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-vertical-scroll-button/pdf-vertical-scroll-mode.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-vertical-scroll-button/pdf-vertical-scroll-mode.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-wrapped-scroll-mode/pdf-wrapped-scroll-mode.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-wrapped-scroll-mode/pdf-wrapped-scroll-mode.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-dropdown/pdf-zoom-dropdown.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-dropdown/pdf-zoom-dropdown.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-in/pdf-zoom-in.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-in/pdf-zoom-in.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-out/pdf-zoom-out.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-out/pdf-zoom-out.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-toolbar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-zoom-toolbar/pdf-zoom-toolbar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-toolbar/pdf-toolbar.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-toolbar/pdf-toolbar.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/translate.pipe.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/ngx-extended-pdf-viewer.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/ngx-extended-pdf-viewer.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-rotate-page/pdf-rotate-page.component.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/toolbar/pdf-rotate-page/pdf-rotate-page.component.html","../../../projects/ngx-extended-pdf-viewer/src/lib/ngx-extended-pdf-viewer.module.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/annotation-layer-builder.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/link-target.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/password-prompt.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/options/pdf-spread-mode.ts","../../../projects/ngx-extended-pdf-viewer/src/lib/pdf-document-properties-extractor.ts","../../../projects/ngx-extended-pdf-viewer/src/public_api.ts","../../../projects/ngx-extended-pdf-viewer/src/ngx-extended-pdf-viewer.ts"],"sourcesContent":["export enum AnnotationMode {\n DISABLE = 0,\n ENABLE = 1,\n ENABLE_FORMS = 2,\n ENABLE_STORAGE = 3,\n}\n\nexport enum AnnotationEditorType {\n DISABLE = -1,\n NONE = 0,\n FREETEXT = 3,\n HIGHLIGHT = 9,\n STAMP = 13,\n INK = 15,\n POPUP = 16,\n SIGNATURE = 101,\n COMMENT = 102,\n}\n\nexport const AnnotationEditorParamsType = {\n RESIZE: 1,\n CREATE: 2,\n FREETEXT_SIZE: 11,\n FREETEXT_COLOR: 12,\n FREETEXT_OPACITY: 13,\n INK_COLOR: 21,\n INK_THICKNESS: 22,\n INK_OPACITY: 23,\n HIGHLIGHT_COLOR: 31,\n HIGHLIGHT_DEFAULT_COLOR: 32,\n HIGHLIGHT_THICKNESS: 33,\n HIGHLIGHT_FREE: 34,\n HIGHLIGHT_SHOW_ALL: 35,\n DRAW_STEP: 41,\n};\n\nexport type AnnotationEditorTypeValue = -1 | 0 | 3 | 9 | 13 | 15 | 16;\n\nexport type InkPaths = {\n lines: Array<Array<number>>; // Array of bezier curve arrays\n points: Array<Array<number>>; // Array of raw point arrays\n};\n\nexport type InkEditorAnnotation = {\n annotationType: 15;\n color: Array<number>; // an array of three integer numbers\n thickness: number;\n opacity: number;\n paths: InkPaths;\n pageIndex: number;\n rect: Array<number>; // [left, bottom, right, top]\n rotation: 0 | 90 | 180 | 270; // in degrees\n isCopy?: boolean;\n};\n\nexport type FreeTextEditorAnnotation = {\n annotationType: 3;\n color: Array<number>; // an array of three integer numbers\n fontSize: number;\n value: string;\n pageIndex: number;\n rect: Array<number>; // rect[1] is the y position; rect[2] is the x position\n rotation: 0 | 90 | 180 | 270; // in degrees\n isCopy?: boolean;\n};\n\nexport type StampEditorAnnotation = {\n annotationType: 13;\n pageIndex: number;\n bitmapUrl: string | Blob;\n rect: Array<number>; // [left, bottom, right, top]\n rotation: 0 | 90 | 180 | 270; // in degrees\n isCopy?: boolean;\n};\n\nexport type HighlightEditorAnnotation = {\n annotationType: 9;\n color: Array<number>; // an array of three integer numbers\n opacity: number;\n thickness: number;\n quadPoints?: any; // Object with numeric keys containing text bounds\n outlines?: Array<Array<number>>; // Array of coordinate arrays for highlight shapes\n pageIndex: number;\n rect: Array<number>; // [left, bottom, right, top]\n rotation: 0 | 90 | 180 | 270; // in degrees\n isCopy?: boolean;\n};\n\nexport type PopupEditorAnnotation = {\n annotationType: 16;\n content: string;\n pageIndex: number;\n rect: Array<number>; // [left, bottom, right, top]\n rotation: 0 | 90 | 180 | 270; // in degrees\n isCopy?: boolean;\n};\n\nexport type EditorAnnotation = InkEditorAnnotation | FreeTextEditorAnnotation | StampEditorAnnotation | HighlightEditorAnnotation | PopupEditorAnnotation;\n","import { AnnotationMode } from './editor-annotations';\n\nconst _isIE11 = typeof window === 'undefined' ? false : !!(<any>globalThis).MSInputMethodContext && !!(<any>document).documentMode;\nconst isEdge = typeof navigator === 'undefined' || /Edge\\/\\d./i.test(navigator.userAgent);\nconst needsES5 = typeof ReadableStream === 'undefined' || typeof Promise['allSettled'] === 'undefined';\n\nexport const pdfjsVersion = '5.4.1100';\nexport const pdfjsBleedingEdgeVersion = '5.4.1101';\nexport function getVersionSuffix(folder: string): string {\n if (folder?.includes('bleeding-edge')) {\n return pdfjsBleedingEdgeVersion;\n }\n return pdfjsVersion;\n}\n\nexport function assetsUrl(url: string, postfixIfPathIsRelativ = ''): string {\n if (url.includes('://')) {\n // the assets folder is on an absolute path (like https://example.com/assets)\n return url;\n }\n return `./${url + postfixIfPathIsRelativ}`;\n}\n\nexport function isBleedingEdge(): boolean {\n return pdfDefaultOptions.assetsFolder?.includes('bleeding-edge');\n}\n\ndeclare const process: any;\n\nfunction isTestEnvironment(): boolean {\n return (\n typeof process !== 'undefined' &&\n typeof (process as any).env !== 'undefined' &&\n ((process as any).env.NODE_ENV === 'test' || (process as any).env.JEST_WORKER_ID !== undefined || (process as any).env.VITEST !== undefined)\n );\n}\n\nexport function getSafeCanvasSize(): number {\n if (typeof window === 'undefined' || typeof document === 'undefined' || isTestEnvironment()) {\n return 4096;\n }\n\n // Use PDF.js defaults for maximum compatibility\n // The IOSCanvasOptimizationService handles dynamic optimization\n const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n const isMobile = /Android|iPhone|iPad|iPod/.test(navigator.userAgent);\n\n if (isIOS || isMobile) {\n return 5242880; // PDF.js iOS/Android limit (5 megapixels)\n }\n\n return 33554432; // PDF.js desktop default (32 megapixels)\n}\n\n// sonar ignore next line\nexport const pdfDefaultOptions = {\n needsES5: _isIE11 || isEdge || needsES5,\n annotationEditorMode: 0,\n annotationMode: AnnotationMode.ENABLE_FORMS,\n defaultZoomDelay: 400, // milliseconds\n cursorToolOnLoad: 0,\n defaultUrl: '',\n defaultZoomValue: '',\n disableHistory: false,\n disablePageLabels: false,\n enableComment: false,\n enablePermissions: false,\n docBaseUrl: '',\n enablePrintAutoRotate: true,\n enableSignatureEditor: false,\n externalLinkRel: 'noopener noreferrer nofollow',\n externalLinkTarget: 0,\n findController: undefined, // must extend PDFFindController\n historyUpdateUrl: false,\n ignoreDestinationZoom: false,\n imageResourcesPath: './images/',\n maxCanvasPixels: getSafeCanvasSize(),\n forcePageColors: false,\n pageColorsBackground: 'Canvas',\n pageColorsForeground: 'CanvasText',\n pdfBugEnabled: false,\n printResolution: 150,\n rangeChunkSize: 65536,\n removePageBorders: false,\n enableXfa: true,\n fontExtraProperties: false,\n sidebarViewOnLoad: -1,\n scrollModeOnLoad: -1,\n spreadModeOnLoad: -1,\n textLayerMode: 1,\n // viewerCssTheme: 0, // not supported by ngx-extended-pdf-viewer, use [theme] instead\n viewOnLoad: 0,\n cMapPacked: true,\n cMapUrl: function () {\n return `${assetsUrl(pdfDefaultOptions.assetsFolder, '/..')}/cmaps/`;\n },\n disableAutoFetch: false,\n disableFontFace: false,\n disableRange: false,\n disableStream: true,\n isEvalSupported: true,\n isOffscreenCanvasSupported: true,\n maxImageSize: -1,\n pdfBug: false,\n verbosity: 1,\n workerPort: null,\n assetsFolder: 'assets',\n _internalFilenameSuffix: '.min', // don't modify this - it's an internal field\n sandboxBundleSrc: function () {\n return pdfDefaultOptions.needsES5\n ? `./pdf.sandbox-${getVersionSuffix(assetsUrl(pdfDefaultOptions.assetsFolder))}-es5.mjs`\n : `./pdf.sandbox-${getVersionSuffix(assetsUrl(pdfDefaultOptions.assetsFolder))}${pdfDefaultOptions._internalFilenameSuffix}.mjs`;\n },\n workerSrc: function () {\n return pdfDefaultOptions.needsES5\n ? `${assetsUrl(pdfDefaultOptions.assetsFolder)}/pdf.worker-${getVersionSuffix(assetsUrl(pdfDefaultOptions.assetsFolder))}-es5.mjs`\n : `${assetsUrl(pdfDefaultOptions.assetsFolder)}/pdf.worker-${getVersionSuffix(assetsUrl(pdfDefaultOptions.assetsFolder))}${\n pdfDefaultOptions._internalFilenameSuffix\n }.mjs`;\n },\n standardFontDataUrl: () => `${assetsUrl(pdfDefaultOptions.assetsFolder, '/..')}/standard_fonts/`,\n wasmUrl: () => `${assetsUrl(pdfDefaultOptions.assetsFolder, '/..')}/wasm/`,\n\n // options specific to ngx-extended-pdf-viewer (as opposed to being used by pdf.js)\n doubleTapZoomFactor: 'page-width',\n doubleTapZoomsInHandMode: true,\n doubleTapZoomsInTextSelectionMode: false,\n doubleTapResetsZoomOnSecondDoubleTap: false,\n enableScripting: false,\n enableCatalogAAJavaScript: false,\n enableOpenActionJavaScript: false,\n defaultCacheSize: 50,\n passwordPrompt: undefined,\n enableHWA: true, // enable hardware acceleration. Active since pdf.js 4.4.\n positionPopupDialogsWithJavaScript: true,\n enablePageReordering: false, // allows users to reorder pages by dragging thumbnails,\n pdfBackgroundColor: '', // background color for PDF content rendering\n};\n","import { pdfDefaultOptions } from '../options/pdf-default-options';\n\nexport class PositioningService {\n private static readonly DOORHANGER_OFFSET = 17;\n private static readonly TOOLBAR_MARGIN = 4;\n\n public positionPopupBelowItsButton(buttonId: string, popupId: string): void {\n if (!pdfDefaultOptions.positionPopupDialogsWithJavaScript) {\n return;\n }\n\n setTimeout(() => {\n const button = this.findVisibleButton(buttonId);\n const popup = this.getPopupElement(popupId);\n\n if (!button || !popup) return;\n\n this.applyPopupPositioning(button, popup);\n });\n }\n\n private findVisibleButton(buttonId: string): HTMLElement | null {\n const findVisible = (selector: string) => Array.from(document.querySelectorAll<HTMLElement>(`#${selector}`)).find((el) => el.offsetParent !== null);\n\n return findVisible(buttonId) || findVisible('secondaryToolbarToggle') || null;\n }\n\n private getPopupElement(popupId: string): HTMLElement | null {\n const popup = document.querySelector<HTMLElement>(`#${popupId}`);\n return popup?.offsetParent ? popup : null;\n }\n\n private applyPopupPositioning(button: HTMLElement, popup: HTMLElement): void {\n const popupContainer = popup.offsetParent as HTMLElement;\n const buttonRect = button.getBoundingClientRect();\n const containerRect = popupContainer.getBoundingClientRect();\n\n const isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n let isRightAligned = isRTL;\n if (popup.classList.contains('doorHangerRight')) {\n isRightAligned = !isRTL;\n }\n\n this.setBasicPopupStyles(popup, isRightAligned);\n this.setHorizontalPosition(popup, buttonRect, containerRect, isRightAligned);\n this.setVerticalPosition(popup, containerRect);\n }\n\n private setBasicPopupStyles(popup: HTMLElement, isRightAligned: boolean): void {\n Object.assign(popup.style, {\n position: 'absolute',\n display: 'block',\n transformOrigin: isRightAligned ? 'top right' : 'top left',\n });\n }\n\n private setHorizontalPosition(popup: HTMLElement, buttonRect: DOMRect, containerRect: DOMRect, isRightAligned: boolean): void {\n const centerOffset = buttonRect.width / 2 - PositioningService.DOORHANGER_OFFSET;\n\n if (!isRightAligned) {\n popup.style.left = `${buttonRect.left - containerRect.left + centerOffset}px`;\n popup.style.right = '';\n } else {\n popup.style.right = `${containerRect.right - buttonRect.right + centerOffset}px`;\n popup.style.left = '';\n }\n }\n\n private setVerticalPosition(popup: HTMLElement, containerRect: DOMRect): void {\n const toolbarContainer = document.querySelector<HTMLElement>('#toolbarContainer');\n if (!toolbarContainer) return;\n\n const toolbarRect = toolbarContainer.getBoundingClientRect();\n const top = toolbarRect.bottom - containerRect.top + PositioningService.TOOLBAR_MARGIN;\n popup.style.top = `${top}px`;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FocusManagementService {\n private previousActiveElement: HTMLElement | null = null;\n private ariaLiveRegion: HTMLDivElement | null = null;\n private activeDialogId: string | null = null;\n private keydownHandler: ((event: KeyboardEvent) => void) | null = null;\n\n constructor() {\n this.initializeAriaLiveRegion();\n }\n\n /**\n * Initializes a hidden aria-live region for screen reader announcements\n */\n private initializeAriaLiveRegion(): void {\n if (typeof document === 'undefined') {\n return; // SSR guard\n }\n\n this.ariaLiveRegion = document.createElement('div');\n this.ariaLiveRegion.setAttribute('aria-live', 'polite');\n this.ariaLiveRegion.setAttribute('aria-atomic', 'true');\n this.ariaLiveRegion.setAttribute('class', 'sr-only');\n this.ariaLiveRegion.style.position = 'absolute';\n this.ariaLiveRegion.style.left = '-10000px';\n this.ariaLiveRegion.style.width = '1px';\n this.ariaLiveRegion.style.height = '1px';\n this.ariaLiveRegion.style.overflow = 'hidden';\n\n if (document.body) {\n document.body.appendChild(this.ariaLiveRegion);\n } else {\n // If body is not ready yet, wait for DOMContentLoaded\n document.addEventListener('DOMContentLoaded', () => {\n if (this.ariaLiveRegion) {\n document.body.appendChild(this.ariaLiveRegion);\n }\n });\n }\n }\n\n /**\n * Announces a message to screen readers via aria-live region\n * @param message The message to announce\n */\n public announce(message: string): void {\n if (!this.ariaLiveRegion) {\n return;\n }\n\n // Clear previous message\n this.ariaLiveRegion.textContent = '';\n\n // Announce new message after a brief delay to ensure screen readers pick it up\n setTimeout(() => {\n if (this.ariaLiveRegion) {\n this.ariaLiveRegion.textContent = message;\n }\n }, 100);\n }\n\n /**\n * Moves focus to the first focusable element within a dialog\n * @param dialogId The ID of the dialog element\n * @param announceMessage Optional message to announce when dialog opens\n * @param buttonId Optional ID of the button that triggered the dialog (for reliable focus return)\n */\n public moveFocusToDialog(dialogId: string, announceMessage?: string, buttonId?: string): void {\n if (typeof document === 'undefined') {\n return; // SSR guard\n }\n\n // Store the button element for reliable focus return\n // Use buttonId if provided, otherwise fall back to activeElement\n if (buttonId) {\n const button = document.getElementById(buttonId);\n if (button) {\n this.previousActiveElement = button;\n }\n } else {\n const activeElement = document.activeElement as HTMLElement;\n if (activeElement && activeElement !== document.body) {\n this.previousActiveElement = activeElement;\n }\n }\n\n // Find dialog and first focusable element\n const dialog = document.getElementById(dialogId);\n if (!dialog) {\n console.warn(`Dialog with ID \"${dialogId}\" not found`);\n return;\n }\n\n // Check if dialog is visible\n if (dialog.classList.contains('hidden') || dialog.style.display === 'none') {\n console.warn(`Dialog \"${dialogId}\" is not visible`);\n return;\n }\n\n // Track active dialog and set up focus cycling\n this.activeDialogId = dialogId;\n this.setupFocusCycling(dialog);\n\n const firstFocusable = this.findFirstFocusableElement(dialog);\n\n if (firstFocusable) {\n // Small delay to ensure dialog is fully rendered\n setTimeout(() => {\n firstFocusable.focus();\n }, 50);\n }\n\n // Announce dialog opening to screen readers\n if (announceMessage) {\n this.announce(announceMessage);\n }\n }\n\n /**\n * Sets up focus cycling so that tabbing past the last element returns to the toolbar\n * @param dialog The dialog element\n */\n private setupFocusCycling(dialog: HTMLElement): void {\n // Clean up any existing handler\n this.cleanupFocusCycling();\n\n this.keydownHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') {\n return;\n }\n\n const focusableElements = this.getAllFocusableElements(dialog);\n if (focusableElements.length === 0) {\n return;\n }\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement;\n\n // Tab on last element -> go to toolbar (previous element that opened the dialog)\n if (!event.shiftKey && activeElement === lastElement) {\n event.preventDefault();\n if (this.previousActiveElement) {\n this.previousActiveElement.focus();\n }\n }\n // Shift+Tab on first element -> go to last element in dialog\n else if (event.shiftKey && activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n };\n\n document.addEventListener('keydown', this.keydownHandler);\n }\n\n /**\n * Cleans up focus cycling event listeners\n */\n private cleanupFocusCycling(): void {\n if (this.keydownHandler) {\n document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n this.activeDialogId = null;\n }\n\n /**\n * Gets all focusable elements within a container\n * @param container The container element\n * @returns Array of focusable elements\n */\n private getAllFocusableElements(container: HTMLElement): HTMLElement[] {\n const focusableSelectors = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n const elements = container.querySelectorAll<HTMLElement>(focusableSelectors);\n return Array.from(elements).filter((el) => this.isVisible(el));\n }\n\n /**\n * Returns focus to the previously focused element (typically the button that opened the dialog)\n * @param announceMessage Optional message to announce when dialog closes\n */\n public returnFocusToPrevious(announceMessage?: string): void {\n // Clean up focus cycling\n this.cleanupFocusCycling();\n\n if (this.previousActiveElement) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n\n // Announce dialog closing to screen readers\n if (announceMessage) {\n this.announce(announceMessage);\n }\n }\n\n /**\n * Finds the first focusable element within a container\n * @param container The container element to search within\n * @returns The first focusable element or null\n */\n private findFirstFocusableElement(container: HTMLElement | null): HTMLElement | null {\n if (!container) {\n return null;\n }\n\n const focusableSelectors = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n const focusableElements = container.querySelectorAll<HTMLElement>(focusableSelectors);\n\n // Return first visible and focusable element\n for (const element of Array.from(focusableElements)) {\n if (this.isVisible(element)) {\n return element;\n }\n }\n\n return null;\n }\n\n /**\n * Checks if an element is visible\n * @param element The element to check\n * @returns True if the element is visible\n */\n private isVisible(element: HTMLElement): boolean {\n const style = window.getComputedStyle(element);\n return style.display !== 'none' && style.visibility !== 'hidden' && element.offsetParent !== null;\n }\n}\n","export enum FindState {\n FOUND = 0,\n NOT_FOUND = 1,\n WRAPPED = 2,\n PENDING = 3,\n}\n\nexport interface FindResultMatchesCount {\n current: number;\n total: number;\n matches: Array<any>;\n matchesLength: Array<any>;\n caseSensitive: boolean;\n entireWord: boolean;\n findPrevious: boolean;\n highlightAll: boolean;\n matchDiacritics: boolean;\n query: string | string[] | RegExp;\n type: 'findagain' | 'highlightallchange' | 'casesensitivitychange' | 'entirewordchange' | 'diacriticmatchingchange' | 'find';\n}\n\nexport interface FindResult {\n state: FindState;\n previous: any;\n matchesCount: FindResultMatchesCount;\n rawquery: string;\n}\n","export enum PdfCursorTools {\n SELECT = 0,\n HAND = 1,\n ZOOM = 2\n}\n","import { EditorAnnotation } from './editor-annotations';\nimport { OptionalContentConfig } from './optional_content_config';\nimport { PDFPageView } from './pdf_page_view';\n\nexport enum ScrollModeType {\n vertical = 0,\n horizontal = 1,\n wrapped = 2,\n page = 3,\n}\n\nexport enum SpreadModeType {\n UNKNOWN = -1,\n NONE = 0, // Default value.\n ODD = 1,\n EVEN = 2,\n}\n\nexport type PageViewModeType = 'single' | 'book' | 'multiple' | 'infinite-scroll';\n\nexport interface ScrollModeChangedEvent {\n mode: ScrollModeType;\n}\nexport interface IPDFRenderingQueue {\n getHighestPriority(visiblePage: Array<any>, pages: Array<any>, scrolledDown: boolean, preRenderExtra: boolean);\n renderView(pageView: any): void; // Added for iOS canvas optimization\n}\n\nexport interface IPDFViewer {\n maxZoom: number;\n minZoom: number;\n maxCanvasPixels: number; // Added for iOS canvas optimization\n setTextLayerMode(textLayerMode: number): unknown;\n annotationEditorMode: any;\n currentPageLabel: string | undefined;\n currentPageNumber: number;\n enablePrintAutoRotate: boolean;\n currentScaleValue: string | number;\n pagesRotation: 0 | 90 | 180 | 270;\n removePageBorders: boolean;\n renderingQueue: IPDFRenderingQueue;\n scrollMode: ScrollModeType;\n pageViewMode: PageViewModeType;\n spreadMode: 0 | 1 | 2;\n _pages: Array<PDFPageView>;\n addPageToRenderQueue(pageIndex: number): boolean;\n _getVisiblePages(): Array<any>;\n optionalContentConfigPromise: Promise<OptionalContentConfig> | null;\n _scrollPageIntoView({ pageDiv, pageSpot, pageNumber }: { pageDiv: HTMLElement; pageSpot: any; pageNumber: number }): void;\n getSerializedAnnotations(): EditorAnnotation[] | null; // #1783 added by ngx-extended-pdf-viewer\n addEditorAnnotation(serialized: string | EditorAnnotation): Promise<void>; // #1783 added by ngx-extended-pdf-viewer\n removeEditorAnnotations(filter?: (serialized: EditorAnnotation) => boolean): void; // #1783 added by ngx-extended-pdf-viewer\n getPageView(index: number): PDFPageView;\n destroyBookMode(): void;\n stopRendering(): void;\n}\n","export enum VerbosityLevel {\n ERRORS = 0,\n WARNINGS = 1,\n INFOS = 5,\n}\n","import { Component } from '@angular/core';\n\n/** List of all fields that can be customized */\nconst requiredIds = [\n 'attachmentsView',\n 'authorField',\n 'contextFirstPage',\n 'contextLastPage',\n 'contextPageRotateCcw',\n 'contextPageRotateCw',\n 'creationDateField',\n 'creatorField',\n 'currentOutlineItem',\n 'cursorHandTool',\n 'cursorSelectTool',\n 'customScaleOption',\n 'documentProperties',\n 'documentPropertiesClose',\n 'download',\n 'editorSignatureButton',\n 'primaryEditorFreeText',\n 'primaryEditorHighlight',\n 'primaryEditorInk',\n 'primaryEditorStamp',\n 'editorModeButtons',\n 'editorNone',\n // 'editorSignatureButton',\n // 'editorSignatureAddSignature',\n 'editorStampAddImage',\n 'errorClose',\n 'errorMessage',\n 'errorMoreInfo',\n 'errorShowLess',\n 'errorShowMore',\n 'errorWrapper',\n 'fileNameField',\n 'fileSizeField',\n 'findbar',\n 'findCurrentPage',\n 'findEntireWord',\n 'findFuzzy',\n 'findHighlightAll',\n 'findIgnoreAccents',\n 'findInput',\n 'findInputMultiline',\n 'findMatchCase',\n 'findMatchDiacritics',\n 'findMsg',\n 'findMultipleSearchTexts',\n 'findNext',\n 'findPrevious',\n 'findRange',\n 'findResultsCount',\n 'firstPage',\n 'individualWordsMode',\n 'individualWordsModeLabel',\n 'keywordsField',\n 'lastPage',\n 'linearizedField',\n 'modificationDateField',\n 'movePageUpButton',\n 'movePageDownButton',\n 'next',\n 'numPages',\n 'openFile',\n 'outerContainer',\n 'outerContainer',\n 'outlineOptionsContainer',\n 'outlineView',\n 'pageCountField',\n 'pageNumber',\n 'pageRotateCcw',\n 'pageRotateCw',\n 'pageSizeField',\n 'password',\n 'passwordCancel',\n 'passwordSubmit',\n 'passwordText',\n 'presentationMode',\n 'previous',\n 'printButton',\n 'producerField',\n 'scaleSelect',\n 'scaleSelectContainer',\n 'scrollHorizontal',\n 'scrollPage',\n 'scrollVertical',\n 'scrollWrapped',\n 'secondaryDownload',\n 'secondaryOpenFile',\n 'secondaryPresentationMode',\n 'secondaryPrintButton',\n 'secondaryToolbar',\n 'secondaryToolbarButtonContainer',\n 'secondaryToolbarToggle',\n 'secondaryViewBookmark',\n 'sidebarResizer',\n 'primarySidebarToggle',\n 'spreadEven',\n 'spreadNone',\n 'spreadOdd',\n 'subjectField',\n 'thumbnailView',\n 'titleField',\n 'toolbarViewer',\n 'versionField',\n 'viewAttachments',\n 'viewAttachments',\n 'viewBookmark',\n 'viewerContainer',\n 'viewFind',\n 'viewLayers',\n 'viewOutline',\n 'viewOutline',\n 'viewThumbnail',\n 'viewThumbnail',\n 'primaryZoomIn',\n 'primaryZoomOut',\n];\n\n@Component({\n selector: 'pdf-dummy-components',\n templateUrl: './pdf-dummy-components.component.html',\n})\nexport class PdfDummyComponentsComponent {\n private dummyComponentsContainer: Element;\n\n public addMissingStandardWidgets(): void {\n this.dummyComponentsContainer = document.getElementsByClassName('dummy-pdf-viewer-components')[0];\n const container = this.dummyComponentsContainer as HTMLElement;\n if (!container) {\n return;\n }\n\n for (let i = 0; i < container.children.length; i++) {\n const child = container.firstChild;\n if (child) {\n container.removeChild(child);\n }\n }\n\n requiredIds.forEach((id) => {\n if (this.needsDummyWidget(id)) {\n const dummy = document.createElement('span');\n dummy.id = id;\n dummy.className = 'invisible dummy-component';\n this.dummyComponentsContainer.appendChild(dummy);\n }\n });\n\n if (this.needsDummyWidget('scaleSelect')) {\n const dummy = document.createElement('select');\n dummy.id = 'scaleSelect';\n dummy.className = 'invisible dummy-component';\n this.dummyComponentsContainer.appendChild(dummy);\n }\n }\n\n private needsDummyWidget(id: string): boolean {\n const widget = document.getElementById(id);\n if (!widget) {\n return true;\n }\n return false;\n }\n}\n","<span class=\"invisible dummy-pdf-viewer-components\">\n</span>\n","import { ChangeDetectorRef, EventEmitter, NgZone } from '@angular/core';\nimport { FormDataType } from './ngx-extended-pdf-viewer.component';\nimport { IPDFViewerApplication } from './options/pdf-viewer-application';\n\nexport type HtmlFormElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\nexport class NgxFormSupport {\n /** Maps the internal ids of the annotations of pdf.js to their field name */\n private formIdToFullFieldName: { [key: string]: string } = {};\n\n private formIdToField: { [key: string]: HtmlFormElement } = {};\n\n private radioButtons: { [key: string]: Array<HTMLInputElement> } = {};\n\n public formData: FormDataType = {};\n\n public initialFormDataStoredInThePDF: FormDataType = {};\n\n public formDataChange = new EventEmitter<FormDataType>();\n\n private PDFViewerApplication: IPDFViewerApplication | undefined;\n\n public ngZone!: NgZone; // set during the initializaion of the PDF viewer\n\n public cdr!: ChangeDetectorRef; // set during the initializaion of the PDF viewer\n\n public reset() {\n this.formData = {};\n this.formIdToFullFieldName = {};\n }\n\n public registerFormSupportWithPdfjs(PDFViewerApplication: IPDFViewerApplication): void {\n this.PDFViewerApplication = PDFViewerApplication;\n (globalThis as any).getFormValueFromAngular = (key: string) => this.getFormValueFromAngular(key);\n (globalThis as any).updateAngularFormValue = (key: string | HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement, value: { value: string }) =>\n this.updateAngularFormValueCalledByPdfjs(key, value);\n (globalThis as any).registerAcroformField = (\n id: string,\n element: HtmlFormElement,\n value: string | Array<string>,\n radioButtonValueName: string,\n initialValueFromPDF: string,\n ) => this.registerAcroformField(id, element, value, radioButtonValueName, initialValueFromPDF);\n\n (globalThis as any).registerXFAField = (element: HtmlFormElement, value: { value: string }, initialValueFromPDF: string) =>\n this.registerXFAField(element, value, initialValueFromPDF);\n }\n\n private registerAcroformField(\n id: string,\n element: HtmlFormElement,\n value: null | string | Array<string>,\n radioButtonValueName: string,\n initialFormValueFromPDF: string,\n ): void {\n const fieldName = element.name;\n this.formIdToField[id] = element;\n this.formIdToFullFieldName[id] = fieldName;\n if (element instanceof HTMLInputElement && element.type === 'radio') {\n const groupName = fieldName;\n this.formIdToFullFieldName[id] = groupName;\n if (value) {\n this.formData[groupName] = radioButtonValueName;\n this.initialFormDataStoredInThePDF[groupName] = initialFormValueFromPDF;\n }\n element.setAttribute('exportValue', radioButtonValueName);\n if (!this.radioButtons[groupName]) {\n this.radioButtons[groupName] = [];\n }\n this.radioButtons[groupName].push(element);\n } else if (element instanceof HTMLSelectElement) {\n this.formData[fieldName] = this.getValueOfASelectField(element);\n this.initialFormDataStoredInThePDF[fieldName] = initialFormValueFromPDF;\n } else {\n if (value !== undefined) {\n this.formData[fieldName] = value;\n }\n this.initialFormDataStoredInThePDF[fieldName] = initialFormValueFromPDF;\n }\n }\n\n private registerXFAField(element: HTMLElement, value: { value: string }, initialFormValueFromPDF: string): void {\n const fullFieldName = this.findFullXFAName(element);\n if (element instanceof HTMLInputElement && element.type === 'radio') {\n const id = element.getAttribute('fieldid') ?? '';\n // remove the xfa name of the radio button itself form the field name,\n // because the field name refers to the entire group of relatated ra