From 3defbba5fdff0b99b27aad3cac28cd1bd45d4e9e Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Fri, 3 Apr 2026 19:50:46 +0000 Subject: [PATCH] feat(pdf-viewer): enhance PDF viewer with file size display and footer layout --- .../dees-pdf-viewer/component.ts | 40 ++++++- .../00group-media/dees-pdf-viewer/demo.ts | 5 +- .../00group-media/dees-pdf-viewer/styles.ts | 102 +++++++++++++++--- 3 files changed, 125 insertions(+), 22 deletions(-) diff --git a/ts_web/elements/00group-media/dees-pdf-viewer/component.ts b/ts_web/elements/00group-media/dees-pdf-viewer/component.ts index 23becde..43d0c17 100644 --- a/ts_web/elements/00group-media/dees-pdf-viewer/component.ts +++ b/ts_web/elements/00group-media/dees-pdf-viewer/component.ts @@ -3,6 +3,7 @@ import { PdfManager } from '../dees-pdf-shared/PdfManager.js'; import { viewerStyles } from './styles.js'; import { demo as demoFunc } from './demo.js'; import '../../00group-utility/dees-icon/dees-icon.js'; +import '../../00group-layout/dees-tile/dees-tile.js'; declare global { interface HTMLElementTagNameMap { @@ -54,6 +55,9 @@ export class DeesPdfViewer extends DeesElement { @property({ type: Array }) accessor pageData: Array<{page: number, rendered: boolean, rendering: boolean, textLayerRendered: boolean}> = []; + @property({ type: Number }) + accessor pdfFileSize: number = 0; + private pdfDocument: any; private renderState: RenderState = 'idle'; private renderAbortController: AbortController | null = null; @@ -85,9 +89,9 @@ export class DeesPdfViewer extends DeesElement { public render(): TemplateResult { return html` -
+ ${this.showToolbar ? html` -
+
-
+ + `; } @@ -305,6 +325,12 @@ export class DeesPdfViewer extends DeesElement { } } + private formatFileSize(bytes: number): string { + if (bytes < 1024) return `${bytes} B`; + if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; + return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; + } + private async loadPdf() { this.loading = true; this.renderState = 'loading'; @@ -323,6 +349,14 @@ export class DeesPdfViewer extends DeesElement { this.currentPage = this.initialPage; this.resolveInitialViewportMode(); + // Get file size + try { + const data = await this.pdfDocument.getData(); + this.pdfFileSize = data.length; + } catch (e) { + this.pdfFileSize = 0; + } + // Initialize thumbnail and page data arrays this.thumbnailData = Array.from({length: this.totalPages}, (_, i) => ({ page: i + 1, diff --git a/ts_web/elements/00group-media/dees-pdf-viewer/demo.ts b/ts_web/elements/00group-media/dees-pdf-viewer/demo.ts index 6fbeab7..b9bb932 100644 --- a/ts_web/elements/00group-media/dees-pdf-viewer/demo.ts +++ b/ts_web/elements/00group-media/dees-pdf-viewer/demo.ts @@ -3,8 +3,8 @@ import { html } from '@design.estate/dees-element'; export const demo = () => html`