Skip to content

chore(deps): adopt dialogs 8 with isolated native viewer - #9301

Merged
vitormattos merged 17 commits into
mainfrom
dependabot/npm_and_yarn/nextcloud/dialogs-8.0.0
Nov 2, 2026
Merged

vitormattos merged 17 commits into
mainfrom
dependabot/npm_and_yarn/nextcloud/dialogs-8.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Migrate LibreSign's own notifications and PDF file picker to @nextcloud/dialogs 8.0.0, using the official package name without npm aliases, peer overrides, or forced installation.

Native Viewer compatibility

The native @nextcloud/viewer and its Image Editor still require dialogs 7 as a peer dependency. The Viewer is essential to LibreSign's signed-document preview, including the protection that prevents a signed UUID PDF from exposing the owner's original file ID.

To preserve that public Viewer API and keep each package's declared peer contract intact:

  • The main LibreSign manifest depends directly on dialogs 8, as normal.
  • src/viewer/ contains a minimal, private installation boundary for the existing Viewer and its dialogs 7 peer, with its own lockfile and a public-API re-export. The root postinstall installs this lockfile reproducibly.
  • The native Viewer uses its original supported API. LibreSign continues to use getViewer(), getHandlers(), and canView(), with existing signed-UUID access safeguards unchanged.
  • Vite/Vitest resolve a shared Vue runtime, and Dependabot includes the Viewer dependency directory.

No upstream package files were modified. No external pull requests, issues, or comments were created.

Visual behavior

Dialogs 8 uses accessible Vue toasts at the Nextcloud bottom-start position by design; no global CSS offset was added. Real browser testing revealed a mobile overlap after requesting signatures: the redundant success toast covered the Open file action in the request sidebar. Since the signer and document status already update to Ready to sign, the two success toasts for individual and bulk signature requests were removed. Other contextual toasts and persistent NcNoteCard notifications remain unchanged.

Actual LibreSign screenshots — Nextcloud 36 development environment

Captured in the real LibreSign request-signature UI on an isolated Nextcloud 36 environment, using the repository's small_valid.pdf fixture and a disposable test account. The account language and browser locale were set to English (en / en-US). No synthetic mockups.

Mobile after (390×844): a signature request moves to Ready to sign; Open file remains unobstructed, with no redundant success toast.

Real LibreSign mobile request-signature UI in English, Ready to sign status and unobstructed Open file action

Desktop after (1440×900): the same real signing-request interface shows the updated signer and document status, without a redundant toast.

Real LibreSign desktop signing-request UI in English after requesting a signature

Regression: before the fix, the success toast overlapped the Open file action on mobile. It was reproduced in a real browser. The historical Portuguese-language capture is intentionally not retained here; all screenshots shown in this PR are in English.

These images are attached to the PR description only; none are committed to the repository.

Native PDF Viewer regression verification

Using an isolated Nextcloud 36 environment with LibreSign 16.0.0-dev.3 and files_pdfviewer 9.0.0-dev.0, the actual LibreSign Open file action opened a PDF using the native data-handler=pdf dialog and the PDFViewer iframe, without browser popups or JavaScript exceptions.

Actual LibreSign native PDF Viewer open in Nextcloud 36

Regression protection in commit 5a7f970: CI now installs files_pdfviewer, and the anonymous signed-PDF Playwright scenario requires the native Viewer and a loaded PDF page. The complete GitHub Actions matrix has passed on HEAD 20d5d39.

Temporary Viewer cleanup guard

Dependabot already checks /src/viewer daily. When a PR changes the isolated Viewer manifest or lockfile, the existing Build Javascript CI checks whether the updated Viewer (including its Image Editor) can resolve with dialogs 8 using strict npm peer dependencies.

  • Still incompatible: CI passes; the native Viewer isolation stays in place.
  • Compatible without a nested dialogs 7: CI fails with a cleanup instruction. The update PR must remove src/viewer/, the extra postinstall, nested Dependabot and REUSE entries, restore direct Viewer imports/mocks, and run the PDF security and E2E tests.
  • The guard itself must be removed with the isolation. The build step fails if the Viewer directory disappears but the guard is left behind.
  • Temporary code and configurations are marked TODO(viewer-compat) with a reference to PR chore(deps): adopt dialogs 8 with isolated native viewer #9301. Search for this marker during cleanup. The temporary root package.json scripts.postinstall cannot carry a comment in JSON, so both the Viewer bridge and CI guard explicitly identify it for removal.
  • Keep src/tests/utils/dialogs.spec.ts: it is permanent API regression coverage for dialogs 8, not part of the temporary Viewer isolation. Reassess Vue deduplication instead of removing it automatically.

No additional scheduled workflow or monitoring scripts are maintained. This mechanism reacts to Dependabot PRs rather than to every new upstream release, and never changes upstream repositories or creates external comments.

Verification

  • Clean npm ci, including the native Viewer's nested npm ci: passed.
  • Root and Viewer npm ls: passed with no peer conflicts, no aliases and no overrides.
  • npm run ts:check, npm run lint, npm run stylelint, npm run build: passed locally.
  • npm run test: 3,555 tests passed across 275 files on the rebased HEAD.
  • 15 native Viewer behavior/security tests and 4 real dialogs 8 notification/file picker integration tests: passed.
  • Real Nextcloud 36 browser test (desktop 1440×900 and mobile 390×844): reproduced and fixed request-toast overlap, verified unobstructed actions and zero JavaScript errors.
  • The compiled CSS includes dialogs 8 toast styles.

Merge-conflict resolution and regression verification (2026-11-02): The original 13 commits were replayed individually on the current main using signed DCO commits (no squash); two further signed commits reconciled package-lock.json with newer main dependencies and fixed two ESLint format errors surfaced by the newer toolchain. The resulting 15-commit branch is mergeable without a conflict, with dialogs 8 in the application and the Viewer isolated on its supported dialogs 7 dependency. Validated with clean root and Viewer npm ci/npm ls, TypeScript, production build, lint, 3,555 unit tests, real native PDF Viewer and file picker, plus focused signing E2E scenarios in an isolated Nextcloud 36 environment. The complete GitHub Actions CI for HEAD 20d5d39 completed successfully (22 workflows). No merge was performed.

Playwright CI regression repairs (20d5d39, 2026-11-02)

  • Observer validation: the test had expected a browser popup even though the newly enabled native PDFViewer correctly opens a PDF dialog. It now requires the native Viewer and a loaded PDF page, without a popup.
  • Policy Workbench geolocation: tests now expand the persisted/collapsed category before checking independent device/IP cards or accessing the GeoIP configuration.
  • PDFViewer assets: the upstream files_pdfviewer development branch references a non-existent files_pdfviewer-main.css entry point. In the disposable CI installation only, a missing empty CSS entry point is supplied; the actual styles remain in the upstream Vite CSS chunks. Marked TODO(viewer-compat) referencing PR chore(deps): adopt dialogs 8 with isolated native viewer #9301 for eventual removal.
  • Local checks: 4 focused Playwright scenarios passed without retries in isolated Nextcloud 36, CSS served as HTTP 200 text/css in a CI-equivalent static path, 3,555 Vitest cases passed, ESLint passed with no errors, TypeScript, build, YAML and git diff --check passed.
  • The complete GitHub Actions matrix passed for HEAD 20d5d39; no upstream repository was changed and no merge was performed.

@dependabot dependabot Bot added the dependencies Dependency updates label Oct 30, 2026
@dependabot
dependabot Bot requested a review from a team as a code owner October 30, 2026 16:03
@dependabot dependabot Bot added the javascript Work involving JavaScript code label Oct 30, 2026
github-actions[bot]
github-actions Bot previously approved these changes Oct 30, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
@vitormattos vitormattos changed the title chore(deps): Bump @nextcloud/dialogs from 7.5.0 to 8.0.0 chore(deps): adopt dialogs 8 in LibreSign with compatible viewer Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
@vitormattos vitormattos changed the title chore(deps): adopt dialogs 8 in LibreSign with compatible viewer chore(deps): adopt dialogs 8 while retaining viewer's v7 peer Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
@vitormattos vitormattos changed the title chore(deps): adopt dialogs 8 while retaining viewer's v7 peer chore(deps): bump @nextcloud/dialogs from 7.5.0 to 7.6.0 Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 1, 2026
@vitormattos vitormattos changed the title chore(deps): bump @nextcloud/dialogs from 7.5.0 to 7.6.0 chore(deps): adopt dialogs 8 with isolated native viewer Nov 1, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 2, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 2, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 2, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 2, 2026
github-actions[bot]
github-actions Bot previously approved these changes Nov 2, 2026
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
@vitormattos
vitormattos force-pushed the dependabot/npm_and_yarn/nextcloud/dialogs-8.0.0 branch from 40e2a84 to a95e263 Compare November 2, 2026 16:19
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
@vitormattos
vitormattos merged commit 01f34df into main Nov 2, 2026
69 of 70 checks passed
@vitormattos
vitormattos deleted the dependabot/npm_and_yarn/nextcloud/dialogs-8.0.0 branch November 2, 2026 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates javascript Work involving JavaScript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant