Release Next v3.0.0-next.14
- #827 by @bobsingor – Describe measurement annotation fields and add typed APIs to read page viewports and update page calibration.
-
#827 by @bobsingor – Expose page measurement calibration and viewport reads in the cloud engine, and deliver viewport change events with document version coherence.
-
#800 by @LazyCompiler – Cloud-backed search honours the
ignoreWhitespacequery flag, which travels inside the search token, and search cursors are pinned to it: replaying a cursor minted with the flag against a query without it (or vice versa) is rejected withInvalidArg, matching the local engine.
- #827 by @bobsingor – Add generated page viewport and scale APIs and measurement annotation types.
-
#827 by @bobsingor – Persist page measurement calibration in layer artifacts with authorization and audit events. Calibration advances the document version while retaining existing page cache versions and annotation scales.
-
#800 by @LazyCompiler – The layer search routes (
/v1/docs/:docId/layers/:layerName/search/{rects,full}/data) acceptignoreWhitespace=truealongside the other query flags and forward it to the engine, so a cloud search forinvoicefinds a letter-spacedi n v o i c e. Combining it withregex=trueis rejected withInvalidArg, and the flag is carried by the search tokens that page through results.
-
#827 by @bobsingor – Add distance drawing with separate endpoint and leader placement, four geometry handles, and directly draggable captions. Keep previews, hit testing, and selection bounds aligned, including short dimensions with outside arrows and displaced-label connectors. Measurement labels use the engine's PDF-coordinate rounding rules.
Rotate measurements around the center of their complete oriented selection frame, including leaders and displaced captions. Use the same frame for pointer rotation, quarter turns, reset, selection, and hit testing, keeping the center stable after a saved appearance is reloaded. Attach the rotation handle to the selection border without extra measurement-specific spacing.
Add perimeter and area creation through the existing polyline and polygon gestures, live labels, direct caption dragging, and complete selection bounds. Carry manual PDF-space caption centers through whole-shape transforms while vertex edits leave them fixed. Reject invalid area creation and vertex edits.
-
#827 by @bobsingor – Add measurement DTOs, page calibration contracts, and shared distance, perimeter, area, and number-format helpers. Caption positions use PDF coordinates and support partial updates and explicit resets.
Report invalid geometry for crossing, overlapping, or degenerate area boundaries while accepting either winding and an explicit closing vertex.
-
#800 by @LazyCompiler – Add the
ignoreWhitespaceflag toSearchQuery. A literal query folded with it drops whitespace on both sides instead of collapsing it, soinvoicefinds the letter-spacedi n v o i c ethat OCR'd scans and tracked-out headings produce, andtotal amountfindstotalamount. Hits still span the original text including the dropped whitespace, andwholeWordboundaries are checked on the original text. The flag is literal-only —validateSearchQueryrejects it together withregex(ignore-whitespace-with-regex) — and it round-trips through search tokens.foldTextgains the matchingdropWhitespaceoption, and the shared search conformance suite covers the flag.
- #827 by @bobsingor – Support distance, perimeter, and area measurements through the local engine. Add page measurement viewport reads and calibration writes, with persistence in saved PDFs and layers and viewport change events.
-
#827 by @bobsingor – Read and write PDF measurement dictionaries and viewports, derive labels on geometry or scale edits, and preserve imported labels on style edits. Move manual shape captions with rigid geometry transforms and validate measurement input before native writes.
Avoid an additional full-document buffer copy when exporting a saved PDF.
-
#800 by @LazyCompiler – Local engines honour the
ignoreWhitespacesearch flag: a query carrying it re-folds the cached page text with whitespace dropped, soinvoicefinds a letter-spacedi n v o i c e, and search cursors key on the flag so a resumed search never mixes hits from the two folds. Combining the flag withregexis rejected withInvalidArg.
- #827 by @bobsingor – Add the measurement feature entry with reactive calibration, page-scale, and readout hooks. Render rotated distance captions and use the standard square handles for measurement endpoints and leaders during annotation gestures.
-
#827 by @bobsingor – Add distance and calibration presets, point-based viewport scale selection, and per-annotation recalculation reports. Persist leader and caption edits in native PDF fields, preserve the measured endpoints during offset edits, and keep derived measurement values read-only in comments.
Use the standard selection spacing for measurement annotations.
Keep locally created and edited measurements vector-rendered after the engine saves their appearance, matching the existing annotation lifecycle and avoiding repeated switches to raster rendering.
Add area and perimeter presets with scale snapshots captured at the first vertex. Persist shape captions and derived values through ordinary annotation edits, retaining vector rendering after engine responses.
-
#827 by @bobsingor – Introduce page calibration, scale presets, units, precision, measurement readouts, and optional recalculation of existing annotations. Report partial results across pages and support session-only calibration on older engines.
Expose area unit choices and independent area-unit updates that preserve distance formatting.
-
#827 by @bobsingor – Add a Measure toolbar with distance drawing, a scale sidebar, and known-length calibration controls. Support Escape to cancel an unfinished drawing, with English and Spanish labels.
Use distinct calibration and scale-setting icons that inherit the viewer's theme and active-state colors.
Add Perimeter and Area tools, dynamic stroke-colored measurement icons across toolbar and cursor, separate area-unit controls, selected area/perimeter readouts, and a reset-label-position action.
- #827 by @bobsingor – Export MeasurementToken through every viewer entry point so applications can access page calibration and measurement controls through the viewer handle.
6.6.5
- 🐞 Fix numeric
0content rendering across Result, message, notification, Avatar, Modal, Descriptions, and Form.Item. #59153 #59125 #59289 @bhumin18 @nrps9909 @QDyanbing - Upload
- 🐞 Fix Upload.Dragger custom
style.heightbeing overridden when theheightprop is not set. #59319 @dogledogle - ♿ Fix Upload file names being focusable as buttons when no preview action is available. #59295 @QDyanbing
- 🐞 Fix Upload.Dragger custom
- Transfer
- 🐞 Fix Transfer calling a stale
onSelectChangecallback after it is replaced or removed. #59307 @yunfeizhu - 🐞 Fix Transfer
footercallbacks not receivingdirectionwhen using rest parameters. #59303 @QDyanbing
- 🐞 Fix Transfer calling a stale
- 🐞 Fix Avatar not retrying image loading after
srcSetchanges. #59297 @QDyanbing - 🐞 Fix Anchor scrolling and Table and Transfer range selection using stale values after updates. #59308 @QDyanbing
- 🐞 Fix Select inconsistent single and multiple heights after customizing global
fontSizeorlineHeight. #59298 @zombieJ - 🤖 Fix Tooltip, Popover, Popconfirm, and Slider TypeScript definitions accepting unsupported rc Tooltip props. #59288 @QDyanbing
- 🛎 Fix Drawer not warning that
destroyOnCloseis deprecated. #59299 @dogledogle
- 🐞 修复 Result、message、notification、Avatar、Modal、Descriptions 和 Form.Item 无法正确渲染数值
0内容的问题。#59153 #59125 #59289 @bhumin18 @nrps9909 @QDyanbing - Upload
- 🐞 修复 Upload.Dragger 未设置
height属性时自定义style.height被覆盖的问题。#59319 @dogledogle - ♿ 修复 Upload 没有可用预览操作时文件名仍可作为按钮聚焦的问题。#59295 @QDyanbing
- 🐞 修复 Upload.Dragger 未设置
- Transfer
- 🐞 修复 Transfer 在替换或移除
onSelectChange后仍调用旧回调的问题。#59307 @yunfeizhu - 🐞 修复 Transfer 使用剩余参数的
footer回调无法获取direction的问题。#59303 @QDyanbing
- 🐞 修复 Transfer 在替换或移除
- 🐞 修复 Avatar 图片加载失败后更新
srcSet无法重新加载的问题。#59297 @QDyanbing - 🐞 修复 Anchor 滚动及 Table 和 Transfer 范围选择在更新后仍使用旧值的问题。#59308 @QDyanbing
- 🐞 修复 Select 自定义全局
fontSize或lineHeight后单选与多选高度不一致的问题。#59298 @zombieJ - 🤖 修正 Tooltip、Popover、Popconfirm 和 Slider 的 TypeScript 类型定义,避免接受实际无效的 rc Tooltip 属性。#59288 @QDyanbing
- 🛎 修复 Drawer 未提示
destroyOnClose已废弃的问题。#59299 @dogledogle
v2.16.0
- A fallback codec class passed as
CompressionStreamFallbackorDecompressionStreamFallbackcan declare two static flags, now documented onCompressionStreamLikeandDecompressionStreamLike.supportedFormatslists the formats the class supports, e.g.["deflate-raw", "gzip"], and the library reads it instead of probing a format by constructing the class.requiresModule, whentrue, says the class cannot be constructed before the module of the worker is ready, the WebAssembly module of zip.js or the module loaded by theinitfunction passed toinitWorker: the library then waits for that module, uses the native codec instead when the module fails to load, and opens a compression class as"gzip"to read the CRC-32 of the data from the trailer, so such a class must support that format
- With
checkCrc32: true, the WebAssembly codec and the nativeDecompressionStreamverify the CRC-32 while inflating, so the separate pass over the output on the JavaScript thread is gone for those two codecs. On the WebAssembly codec the check costs about 7 ms per 20 MB instead of 15, and reading a 20 MB text entry takes 53 ms instead of 62 ms on Node.js; on Node'sDecompressionStreamthe pass was already overlapped by the threadpool and the gain is within the noise. Entries compressed with deflate64 or a registered codec, AES entries whose CRC-32 is not stored, and the pure-JavaScript zlib port keep the separate pass. The mechanism is the one the writer has used since 2.15.0: the raw deflate data is framed as gzip with a trailer holding the CRC-32 and size declared by the entry, which the inflater checks HttpReaderwithcombineSizeEocd: true, the option, off by default, that fetches the last 64 KB of the archive with the request that reads its size, now serves the entry data lying in those bytes from that response. Reading an archive shorter than 64 KB costs that one request, where each entry used to issue a range request of its own, and in a larger archive an entry stored in its last 64 KB costs no extra request. WithuseXHR: truethe reader already behaved that way
- On a host whose
DecompressionStreamlacks"deflate-raw", Chromium 80 to 102 and Node.js 18 for instance, an entry with a corrupted CRC-32 read withcheckCrc32: falsewas delivered as if it were valid, and an entry whose stored uncompressed size was wrong failed only after a 5 second watchdog. The gzip decoder of such a host checks the CRC-32 and size in the trailer it is given regardless, so the verification is free: a corrupted entry now fails withERR_INVALID_CRC32whatevercheckCrc32says, and a wrong size fails withERR_INVALID_UNCOMPRESSED_SIZEas soon as the output has been read - With
useCompressionStream: falseand aCompressionStreamFallbackorDecompressionStreamFallbackwhose constructor throws, the entry now fails with that error. It used to be served silently by the gzip format of the native codec, souseCompressionStream: falsewas not honoured
BENCHMARKS.mdstates the cost of the CRC-32 check on read: about 7 ms per 20 MB on the WebAssembly codec, within the noise on Node'sDecompressionStream, and about 15 ms on the pure-JavaScript zlib port, which keeps a separate pass
- New tests pin the gzip trailer on the inflate side, with the corrupted CRC-32 and size errors on the WebAssembly and native codecs and the raw route with the check off, the end of archive cache of
HttpReaderwith the request counts of a small archive and of an entry in the cached tail, the propagation of a fallback codec failure, the CRC-32 and size verification on a host without"deflate-raw", and the formats such a host is asked for on the deflate and inflate sides - The continuous integration runs on Ubuntu 26.04, and the reader stream release test allows 30 s per step instead of 5, a test timeout only, which the Firefox 102 lane of the native build exceeded under load in three of four runs
Full Changelog: https://github.com/gildas-lormeau/zip.js/compare/v2.15.0...v2.16.0
Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com
v16.4.0-canary.37
- Preserve closed-parameter restrictions in client route prediction: #98889
- [test] Fix deployment tests that relied on implicit startup: #98935
- Turbopack: Add support for specifying additional roots: #98003
- Turbopack: Add symlinks and additional roots to NFT metadata: #98469
Huge thanks to @gnoff, @unstubbable, and @bgw for helping!
@formatjs/ts-transformer: 4.4.22
4.4.22 (2026-09-19)
- The following workspace dependencies were updated
- dependencies
- @formatjs/icu-messageformat-parser bumped to 3.5.20
- dependencies
formatjs_cli: 1.7.4
1.7.4 (2026-09-19)
- macOS Apple Silicon:
formatjs_cli-darwin-arm64 - Linux ARM64:
formatjs_cli-linux-arm64 - Linux x86_64:
formatjs_cli-linux-x64 - Windows x64:
formatjs_cli-win32-x64.exe
# macOS (Apple Silicon)
curl -LO https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v1.7.4/formatjs_cli-darwin-arm64
chmod +x formatjs_cli-darwin-arm64
sudo mv formatjs_cli-darwin-arm64 /usr/local/bin/formatjs
# Linux
curl -LO https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v1.7.4/formatjs_cli-linux-x64
chmod +x formatjs_cli-linux-x64
sudo mv formatjs_cli-linux-x64 /usr/local/bin/formatjs
# Linux ARM64
curl -LO https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v1.7.4/formatjs_cli-linux-arm64
chmod +x formatjs_cli-linux-arm64
sudo mv formatjs_cli-linux-arm64 /usr/local/bin/formatjs
# Windows x64 (PowerShell)
curl.exe -LO https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v1.7.4/formatjs_cli-win32-x64.exe
Verify the checksums:
curl -LO https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v1.7.4/checksums.txt
shasum -a 256 -c checksums.txt
@formatjs/unplugin: 1.2.12
1.2.12 (2026-09-19)
- The following workspace dependencies were updated
- dependencies
- @formatjs/icu-messageformat-parser bumped to 3.5.20
- @formatjs/ts-transformer bumped to 4.4.22
- dependencies
react-intl: 12.1.2
12.1.2 (2026-09-19)
- The following workspace dependencies were updated
- dependencies
- @formatjs/icu-messageformat-parser bumped to 3.5.20
- @formatjs/intl bumped to 6.1.2
- intl-messageformat bumped to 12.1.2
- dependencies
eslint-plugin-formatjs: 8.0.5
8.0.5 (2026-09-19)
- The following workspace dependencies were updated
- dependencies
- @formatjs/icu-messageformat-parser bumped to 3.5.20
- @formatjs/ts-transformer bumped to 4.4.22
- dependencies
@formatjs/svelte-intl: 2.1.2
2.1.2 (2026-09-19)
- The following workspace dependencies were updated
- dependencies
- @formatjs/icu-messageformat-parser bumped to 3.5.20
- @formatjs/intl bumped to 6.1.2
- dependencies