web@2.11.23
·
1085 commits
to main
since this release
2.11.23 (2026-09-14)
Bug Fixes
- web: disable route auto-code-splitting under vitest (64fb440)
- web: give Stryker's typescript-checker a program covering router.ts and workers/** (d6ff4fb)
- web: give StubResizeObserver a real constructor matching ResizeObserver's own (783ee13)
- web: omit the router codegen plugin entirely under test mode (a28d040)
- web: remove the unreachable '.bin' fallback in the native save-picker's accept extension (3e3ff8f)
- web: stop the worker test from pulling documents.worker.ts into tsconfig.node.json (0ecac3d)
- web: sync the ooxml.js devDependency pin to its released version (2d4036c)
- web: use the real "string" cell-value kind in the alignment test fixture (2b9df7a)
Code Refactoring
- web: collapse paragraphsOf/appendParagraphOf switches to their one real branch (7b2347a)
- web: create FileUpload's file access port via useState's lazy initializer (5e164de)
- web: derive RecentFilesPanel's reopen tooltip from the same handle check as disabled (72a641a)
- web: drop FileUpload's unreachable native-picker guard and memoise the file access port (8e454d9)
- web: drop SlidesPreview's redundant fontScale and empty-slides guards (26d4e0e)
- web: drop the redundant ceil around an image asset's byteLength estimate (4a7690c)
- web: extract mountApp out of main.tsx for direct unit testing (e5dc729), references missing-#root #root
- web: extract RootLayout's tooltip label and navbar config (239efc7)
- web: extract Sidebar's version-label logic into testable helpers (84239cb)
- web: extract the root layout's colour-scheme cycling as pure, testable lookups (14a5ea9)
- web: find a filename's final path segment without an unreachable fallback (fb945c4)
- web: give useRecentFiles' live query a module-scope, never-changing deps array (ba5a349)
- web: remove dead sentinel and redundant guards from contentBlocks (f06b373)
- web: resolve heading match without a fallback string, drop a redundant length guard (bd79532)
Tests
- web: add a QueryClientProvider-wrapped mount harness (937167b)
- web: assert InspectPanel's pdf item-kind table by exact row content (04beffb)
- web: build the dropped-file fixture with defineProperties instead of Object.assign (3500c30)
- web: cover contentBlocks' run formatting, tables, images, and lists (ae57291)
- web: cover contentSummary's presentation and drawing branches (4acfb50)
- web: cover convert route's option lists, inspection backing, and error-free previews (1163db2)
- web: cover DiagnosticsPanel's collapse-threshold branching (0efc262)
- web: cover editors route accept map, per-paragraph identity, and inline flex styling (0b37213)
- web: cover every branch of appendMathMlNodes' node-kind dispatch (7be6f8d)
- web: cover every RPC-client-wrapping hook and the worker document converter (5253859)
- web: cover FileUpload's drop/click file handling and accept normalisation (9a65186)
- web: cover FontsPage's extraction trigger and unrecognised-format guard (387518b)
- web: cover FontsPage's reset, error notification, and bold/italic cells (344db3b)
- web: cover getRpcClient's Worker construction, caching, and transfer wiring (9ba5cc0)
- web: cover InspectPanel, the format-neutral preview shells, and SheetPreview (ee92036)
- web: cover main entry mounting and RecentPage's heading/panel rendering (865c86f)
- web: cover MarkdownPreview's paragraph styling and list grouping (6de4fa1)
- web: cover mountComponent/renderHook's own append, rerender, and unmount behaviour (2031061)
- web: cover mountWithClassName's DOM lifecycle and remaining small edge cases (4aab0ba)
- web: cover notifySuccess's warning-count branching and notifyError's Error/non-Error split (dacc061)
- web: cover odb.read and odm.render against real minimal packages (f95cd6a)
- web: cover RecentFilesPanel's reopen permission flow and size formatting (d0362d8)
- web: cover RootLayout's colour-scheme button and outlet rendering (21242bb)
- web: cover router's list/heading/code-block/rule heuristics and remaining format branches (6531ce0)
- web: cover Sheet/SlidesPreview interaction, colour math, and abort forwarding (335fa5e)
- web: cover SlidesPreview's shape/vector rendering and paint ordering (42d5a6f)
- web: cover StructureTree's empty-vs-populated render branch (a12c804)
- web: cover the / route's unconditional redirect to /convert (381ba6b)
- web: cover the convert route's format-family branching and full flow (1a5bb08)
- web: cover the filename-extension and relative-time helpers (5b62bc5)
- web: cover the IndexedDB-backed recent-files store (fcabc03)
- web: cover the pending-reopen mailbox's write-once, read-once contract (5824e4d)
- web: cover the structural PDF/content inspection hooks (27208f4)
- web: cover title/author-override and in-flight-read carry-over on file switch (92c0836)
- web: distinguish FileUpload's icon slots, multiple flag, and accept memo (2937c0a)
- web: enable real CSS injection for vanilla-extract mutation coverage (875d366)
- web: exercise normalizeDocxListKinds against a real docx numbering.xml (e99f6e4), references ExaDev/documents.js#1273
- web: exercise the router's own oRPC procedures end to end (8b95f3c)
- web: give flushPromises' setTimeout callback a block body (bb7a767)
- web: give the package route's mocked content fixture a real schema shape (c86ef23)
- web: make jsdom's matchMedia/ResizeObserver/document.fonts stubs directly testable (c107978)
- web: pin dexie orderBy ordering and cover markdown/odt content.read (d3a4f91), references ExaDev/documents.js#1273
- web: pin jsonTree's length-cap boundaries and kind-suffix edge cases (539bfb4)
- web: pin MarkdownPreview's no-loading state and ordered-list DOM shape (396427c)
- web: pin RecentFilesPanel's size boundaries, permission flow, and tooltip label (a5b2cd2)
- web: pin SheetPreview's percentage/currency alignment and drop its empty-sheets branch (9a811dd)
- web: pin the exact previewFrame variant each preview component requests (c75ec23)
- web: pin the exact queryKey and Blob content useConversions/usePdfObjectUrl produce (ed19ca5)
- web: pin the fallback picker's input type, once-listener, and blob contents (f685620)
- web: pin the remaining boundary and direct-array-element cases (41c0831)
- web: reach 100% mutation coverage for DiagnosticsPanel (a7a0dca)
- web: reach 100% mutation coverage for the .odb browse route (e4b2eab)
- web: reach 100% mutation coverage for the .odm render route (d549fcf)
- web: reach 100% mutation coverage for the convert route (7316f49)
- web: reach 100% mutation coverage for the documents.worker entry point (1281808)
- web: reach 100% mutation coverage for the editors route (087a783)
- web: reach 100% mutation coverage for the inspect route (c77766e)
- web: reach 100% mutation coverage for the metadata and package routes (69a34d4)
- web: reach 100% mutation coverage for useRecentFiles.ts (2820775)
- web: reject a leading-dot final segment once a directory prefix is present (4d40e2b)
- web: resolve a docx list against a genuine non-bullet numFmt (4226658), references ExaDev/documents.js#1273
- web: resolve a none numFmt as bullet and a cross-format numId as bullet (2dccf13)
- web: type matchMedia listener mocks as void-returning (aaa2d8f)
- web: wait for the async structure-inspection calls before asserting on them (ee7da13)
Miscellaneous Chores
- web: exclude vanilla-extract style modules from mutation testing (278b5ed)
- web: raise the mutation breakThreshold to 100 (d01a389)
- web: raise the mutation breakThreshold to the newly measured floor (54fa049)
- web: raise the mutation breakThreshold to the newly measured floor (fca4f7a)
- web: raise the mutation breakThreshold to the newly measured floor (326d177)
- web: reword the stryker.config.ts break-threshold comment around the literal banned phrase (b9ca084)
Dependencies
- Updated documents.js to 7.20.12