From 12a7156928ba279b053c18f180dd0ef4bccd2f90 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 11 Dec 2025 23:35:43 +0000 Subject: [PATCH] fix(dees-pdf-viewer): Scroll active PDF thumbnail into view after rendering and on page changes; update dependency versions --- changelog.md | 8 ++ package.json | 8 +- pnpm-lock.yaml | 136 +++++++++++------- ts_web/00_commitinfo_data.ts | 2 +- .../00group-pdf/dees-pdf-viewer/component.ts | 7 + 5 files changed, 101 insertions(+), 60 deletions(-) diff --git a/changelog.md b/changelog.md index febd96a..a000ca8 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,13 @@ # Changelog +## 2025-12-11 - 3.3.1 - fix(dees-pdf-viewer) +Scroll active PDF thumbnail into view after rendering and on page changes; update dependency versions + +- Ensure the active thumbnail is scrolled into view after thumbnails are rendered (improves sidebar navigation for dees-pdf-viewer). +- Scroll the thumbnail into view when navigating pages if the sidebar is visible (prevents the active page from being off-screen). +- Retain re-setup of the intersection observer for lazy-loading pages after thumbnail re-render. +- Bumped dependencies in package.json: @design.estate/dees-wcctools -> ^2.0.1, lucide -> ^0.560.0, @git.zone/tswatch -> ^2.3.13, @types/node -> ^25.0.0. + ## 2025-12-09 - 3.3.0 - feat(dees-appui-base) Add unified App UI API to dees-appui-base with ViewRegistry, AppRouter and StateManager diff --git a/package.json b/package.json index 2f12de4..425a99d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "dependencies": { "@design.estate/dees-domtools": "^2.3.6", "@design.estate/dees-element": "^2.1.3", - "@design.estate/dees-wcctools": "^1.2.1", + "@design.estate/dees-wcctools": "^2.0.1", "@fortawesome/fontawesome-svg-core": "^7.1.0", "@fortawesome/free-brands-svg-icons": "^7.1.0", "@fortawesome/free-regular-svg-icons": "^7.1.0", @@ -38,7 +38,7 @@ "highlight.js": "11.11.1", "ibantools": "^4.5.1", "lit": "^3.3.1", - "lucide": "^0.555.0", + "lucide": "^0.560.0", "monaco-editor": "0.52.2", "pdfjs-dist": "^4.10.38", "xterm": "^5.3.0", @@ -48,10 +48,10 @@ "@git.zone/tsbuild": "^3.1.2", "@git.zone/tsbundle": "^2.6.3", "@git.zone/tstest": "^3.1.3", - "@git.zone/tswatch": "^2.3.5", + "@git.zone/tswatch": "^2.3.13", "@push.rocks/projectinfo": "^5.0.2", "@push.rocks/tapbundle": "^6.0.3", - "@types/node": "^24.10.1" + "@types/node": "^25.0.0" }, "files": [ "ts/**/*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 438c048..39ea362 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^2.1.3 version: 2.1.3 '@design.estate/dees-wcctools': - specifier: ^1.2.1 - version: 1.2.1 + specifier: ^2.0.1 + version: 2.0.1 '@fortawesome/fontawesome-svg-core': specifier: ^7.1.0 version: 7.1.0 @@ -75,8 +75,8 @@ importers: specifier: ^3.3.1 version: 3.3.1 lucide: - specifier: ^0.555.0 - version: 0.555.0 + specifier: ^0.560.0 + version: 0.560.0 monaco-editor: specifier: 0.52.2 version: 0.52.2 @@ -100,8 +100,8 @@ importers: specifier: ^3.1.3 version: 3.1.3(@push.rocks/smartserve@1.4.0)(socks@2.8.7)(typescript@5.9.3) '@git.zone/tswatch': - specifier: ^2.3.5 - version: 2.3.5(@tiptap/pm@2.27.1) + specifier: ^2.3.13 + version: 2.3.13(@tiptap/pm@2.27.1) '@push.rocks/projectinfo': specifier: ^5.0.2 version: 5.0.2 @@ -109,8 +109,8 @@ importers: specifier: ^6.0.3 version: 6.0.3(socks@2.8.7) '@types/node': - specifier: ^24.10.1 - version: 24.10.1 + specifier: ^25.0.0 + version: 25.0.0 packages: @@ -322,6 +322,9 @@ packages: '@cloudflare/workers-types@4.20251205.0': resolution: {integrity: sha512-7pup7fYkuQW5XD8RUS/vkxF9SXlrGyCXuZ4ro3uVQvca/GTeSa+8bZ8T4wbq1Aea5lmLIGSlKbhl2msME7bRBA==} + '@cloudflare/workers-types@4.20251211.0': + resolution: {integrity: sha512-e87o6KbelCz7dnI5ngrGT2ca15vJZ+COb2eqJ52iDHmOaujyC6aYZ71e2vor8X6V9T6tcDElC5sAqPR93j09EA==} + '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} @@ -332,8 +335,8 @@ packages: '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} - '@design.estate/dees-catalog@3.1.2': - resolution: {integrity: sha512-T4ZhoZzl6NAWGhrz00MDFla5syeMz53euZ+QcBftRMmHuqPHDU/JlBi+K2SmILtnRfWH/lGYWBKugYop6q0chg==} + '@design.estate/dees-catalog@3.3.0': + resolution: {integrity: sha512-iPT8QtMrheH8ZO6xmyZfAC+51smTsA9Og63BC2mKFixoGiAG7UScN1ywM/uHEmnKCd+KBY+dn4ZaHyR4UrrX2A==} '@design.estate/dees-comms@1.0.30': resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==} @@ -344,8 +347,11 @@ packages: '@design.estate/dees-element@2.1.3': resolution: {integrity: sha512-TjXWxVcdSPaT1IOk31ckfxvAZnJLuTxhFGsNCKoh63/UE2FVf6slp8//UFvN+ADigiA9ZsY0azkY99XbJCwDDA==} - '@design.estate/dees-wcctools@1.2.1': - resolution: {integrity: sha512-ESFas1MPPwDUcXRssyHRsc63XPTBJSTBA+5RhYXDZx8mbV6HxEKiJR8Oz1Mv7DBdW+ZSuUTD/fA6Aa/fCxGYTQ==} + '@design.estate/dees-wcctools@1.3.0': + resolution: {integrity: sha512-+yd8c1gTIKNRQYCvG0xu6Am8dHsRm7ymluX2gnoBQN4aFOpZgIBi/v9CvGyPhTD1p/VRouIBz1wsUCejnwrFCA==} + + '@design.estate/dees-wcctools@2.0.1': + resolution: {integrity: sha512-1DaQtvoMmD+uH9cjSrL4szk7h0nbBlT/ZBmz+qvWCOqzZXE3wPOAdgASZ73NeQlehLx4KGbfJTCG15DSB0W3LQ==} '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} @@ -555,8 +561,8 @@ packages: resolution: {integrity: sha512-t+/cKV21JHK8X7NGAmihs5M/eMm+V+jn4R5rzfwGG97WJFAcP5qE1Os9VYtyZw3tx/NZXA2yA4abo/ELluTuRA==} hasBin: true - '@git.zone/tswatch@2.3.5': - resolution: {integrity: sha512-wYekG7Q/wg5uptXHPHhVi7dHq19QnLoevQpcpAzF6hMiNbOozN3+4zxOktyJBl6EHUYcFvHXA4fZ4bkJpo5TcA==} + '@git.zone/tswatch@2.3.13': + resolution: {integrity: sha512-43995OlWl8UzCA+cX3ehYba/ksm6CqHbMljHKjosrDRpx8EU+LY4bWTc8JT/Ldgwsw3iW9vur2bBqpgMmdeJJw==} hasBin: true '@hapi/bourne@3.0.0': @@ -1023,8 +1029,8 @@ packages: '@push.rocks/smartversion@3.0.5': resolution: {integrity: sha512-8MZSo1yqyaKxKq0Q5N188l4un++9GFWVbhCAX5mXJwewZHn97ujffTeL+eOQYpWFTEpUhaq1QhL4NhqObBCt1Q==} - '@push.rocks/smartwatch@6.1.1': - resolution: {integrity: sha512-wmhLKu9bdpvRcjOfitJOi4jsNKD7S2hVlVq6fAv3IhB2ZbRlSB+Hai4DwOlrdUZaWrg+dFIZU+/ifTOozOPiMg==} + '@push.rocks/smartwatch@6.3.0': + resolution: {integrity: sha512-TeZ1PGBoBMpC4/CK8StIj5InEiFfKp7xWJSm3aYMjB/uaoeRP0vXqv1ORIC/TKYGJuEDuAXUsit8tZVjn0qT1Q==} engines: {node: '>=20.0.0'} '@push.rocks/smartxml@2.0.0': @@ -1798,8 +1804,8 @@ packages: '@types/node-forge@1.3.14': resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@25.0.0': + resolution: {integrity: sha512-rl78HwuZlaDIUSeUKkmogkhebA+8K1Hy7tddZuJ3D0xV8pZSfsYGTsliGUol1JPzu9EKnTxPC4L1fiWouStRew==} '@types/parse5@6.0.3': resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -3309,6 +3315,9 @@ packages: lucide@0.555.0: resolution: {integrity: sha512-R7BkO2/XRpMADcMIRn1UOZOvirxr2Z6s/R82k0EUK71ZXXrlRbvkVwTAIf+9DRApeyH+zNMIGfiUdmrOhoAygQ==} + lucide@0.560.0: + resolution: {integrity: sha512-w7++Pwdz0NxxMtC4ugLmsy66Ar95HnDIMjzJZdHl0kQKIHto3icgI+lbOZMlovZ1Mo4RGITWGhYn1ro7hcY/UA==} + make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -4712,8 +4721,8 @@ snapshots: '@api.global/typedrequest': 3.2.5 '@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedsocket': 4.1.0(@push.rocks/smartserve@1.4.0) - '@cloudflare/workers-types': 4.20251205.0 - '@design.estate/dees-catalog': 3.1.2(@tiptap/pm@2.27.1) + '@cloudflare/workers-types': 4.20251211.0 + '@design.estate/dees-catalog': 3.3.0(@tiptap/pm@2.27.1) '@design.estate/dees-comms': 1.0.30 '@push.rocks/lik': 6.2.2 '@push.rocks/smartdelay': 3.0.5 @@ -4738,7 +4747,7 @@ snapshots: '@push.rocks/smartsitemap': 2.0.4 '@push.rocks/smartstream': 3.2.5 '@push.rocks/smarttime': 4.1.1 - '@push.rocks/smartwatch': 6.1.1 + '@push.rocks/smartwatch': 6.3.0 '@push.rocks/taskbuffer': 3.5.0 '@push.rocks/webrequest': 4.0.1 '@push.rocks/webstore': 2.0.20 @@ -5281,6 +5290,8 @@ snapshots: '@cloudflare/workers-types@4.20251205.0': {} + '@cloudflare/workers-types@4.20251211.0': {} + '@colors/colors@1.6.0': {} '@configvault.io/interfaces@1.0.17': @@ -5293,11 +5304,11 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@design.estate/dees-catalog@3.1.2(@tiptap/pm@2.27.1)': + '@design.estate/dees-catalog@3.3.0(@tiptap/pm@2.27.1)': dependencies: '@design.estate/dees-domtools': 2.3.6 '@design.estate/dees-element': 2.1.3 - '@design.estate/dees-wcctools': 1.2.1 + '@design.estate/dees-wcctools': 1.3.0 '@fortawesome/fontawesome-svg-core': 7.1.0 '@fortawesome/free-brands-svg-icons': 7.1.0 '@fortawesome/free-regular-svg-icons': 7.1.0 @@ -5374,7 +5385,19 @@ snapshots: - supports-color - vue - '@design.estate/dees-wcctools@1.2.1': + '@design.estate/dees-wcctools@1.3.0': + dependencies: + '@design.estate/dees-domtools': 2.3.6 + '@design.estate/dees-element': 2.1.3 + '@push.rocks/smartdelay': 3.0.5 + lit: 3.3.1 + transitivePeerDependencies: + - '@nuxt/kit' + - react + - supports-color + - vue + + '@design.estate/dees-wcctools@2.0.1': dependencies: '@design.estate/dees-domtools': 2.3.6 '@design.estate/dees-element': 2.1.3 @@ -5618,7 +5641,7 @@ snapshots: - utf-8-validate - vue - '@git.zone/tswatch@2.3.5(@tiptap/pm@2.27.1)': + '@git.zone/tswatch@2.3.13(@tiptap/pm@2.27.1)': dependencies: '@api.global/typedserver': 7.11.1(@tiptap/pm@2.27.1) '@git.zone/tsbundle': 2.6.3 @@ -5631,7 +5654,7 @@ snapshots: '@push.rocks/smartlog': 3.1.10 '@push.rocks/smartlog-destination-local': 9.0.2 '@push.rocks/smartshell': 3.3.0 - '@push.rocks/smartwatch': 6.1.1 + '@push.rocks/smartwatch': 6.3.0 '@push.rocks/taskbuffer': 3.5.0 transitivePeerDependencies: - '@nuxt/kit' @@ -5677,7 +5700,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -6678,12 +6701,13 @@ snapshots: '@types/semver': 7.7.1 semver: 7.7.3 - '@push.rocks/smartwatch@6.1.1': + '@push.rocks/smartwatch@6.3.0': dependencies: '@push.rocks/lik': 6.2.2 '@push.rocks/smartenv': 6.0.0 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrx': 3.0.10 + chokidar: 5.0.0 picomatch: 4.0.3 '@push.rocks/smartxml@2.0.0': @@ -7479,18 +7503,18 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/babel__code-frame@7.0.6': {} '@types/bn.js@5.2.0': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/buffer-json@2.0.3': {} @@ -7507,17 +7531,17 @@ snapshots: '@types/clean-css@4.2.11': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 source-map: 0.6.1 '@types/co-body@6.1.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/qs': 6.14.0 '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/content-disposition@0.5.9': {} @@ -7528,11 +7552,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.6 '@types/keygrip': 1.0.6 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/cors@2.8.19': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/debounce@1.2.4': {} @@ -7544,7 +7568,7 @@ snapshots: '@types/dns-packet@5.6.5': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/elliptic@6.4.18': dependencies: @@ -7552,7 +7576,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -7565,17 +7589,17 @@ snapshots: '@types/from2@2.3.6': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/hast@3.0.4': dependencies: @@ -7609,7 +7633,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/keygrip@1.0.6': {} @@ -7626,7 +7650,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/linkify-it@5.0.0': {} @@ -7649,9 +7673,9 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 - '@types/node@24.10.1': + '@types/node@25.0.0': dependencies: undici-types: 7.16.0 @@ -7669,18 +7693,18 @@ snapshots: '@types/s3rver@3.7.4': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/semver@7.7.1': {} '@types/send@1.2.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/sinon-chai@3.2.12': dependencies: @@ -7699,11 +7723,11 @@ snapshots: '@types/tar-stream@3.1.4': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/through2@2.0.41': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/triple-beam@1.3.5': {} @@ -7729,11 +7753,11 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 '@types/yargs-parser@21.0.3': {} @@ -7743,7 +7767,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.0 optional: true '@ungap/structured-clone@1.3.0': {} @@ -8379,7 +8403,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 24.10.1 + '@types/node': 25.0.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -9115,7 +9139,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 25.0.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -9324,6 +9348,8 @@ snapshots: lucide@0.555.0: {} + lucide@0.560.0: {} + make-dir@3.1.0: dependencies: semver: 6.3.1 diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index 82ee55e..669cb36 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@design.estate/dees-catalog', - version: '3.3.0', + version: '3.3.1', description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.' } diff --git a/ts_web/elements/00group-pdf/dees-pdf-viewer/component.ts b/ts_web/elements/00group-pdf/dees-pdf-viewer/component.ts index feda04d..0fb6cf4 100644 --- a/ts_web/elements/00group-pdf/dees-pdf-viewer/component.ts +++ b/ts_web/elements/00group-pdf/dees-pdf-viewer/component.ts @@ -299,6 +299,8 @@ export class DeesPdfViewer extends DeesElement { await this.renderThumbnails(); // Re-setup intersection observer for lazy loading of pages this.setupIntersectionObserver(); + // Scroll to active thumbnail after rendering + this.scrollThumbnailIntoView(this.currentPage); } } @@ -578,6 +580,11 @@ export class DeesPdfViewer extends DeesElement { // Update current page this.currentPage = pageNum; + // Scroll thumbnail into view if sidebar is visible + if (this.showSidebar) { + this.scrollThumbnailIntoView(pageNum); + } + // Ensure the page is rendered await this.renderPageIfNeeded(pageNum); }