Release v2.5.0
-
#441 by @bobsingor – Implemented per-document rotation normalization in the PDFium engine:
- Updated
PdfCache.setDocument()to accept per-documentnormalizeRotationflag - Added
normalizeRotationproperty toDocumentContextfor tracking document-level setting - Updated
PageCacheto useEPDF_LoadPageNormalizedwhen normalization is enabled - Modified page size retrieval to use
EPDF_GetPageSizeByIndexNormalizedfor normalized documents - Propagated
doc: PdfDocumentObjectparameter through 30+ coordinate transformation methods to access the normalization flag - Updated
convertDevicePointToPagePointandconvertPagePointToDevicePointto use 0° rotation when normalization is enabled
This change allows annotations, text selection, and rendering to work correctly across pages with different rotations by treating all coordinates in a consistent 0° space.
- Updated
-
#441 by @bobsingor – Added support for per-document rotation normalization:
- Added
normalizedRotation: booleanproperty toPdfDocumentObjectto track whether the document was opened with normalized rotation - Added
normalizeRotation?: booleanoption toPdfOpenDocumentBufferOptionsinterface - Added
normalizeRotation?: booleanoption toPdfOpenDocumentUrlOptionsinterface
When
normalizeRotationis enabled, all page coordinates (annotations, text, rendering) are in 0° space regardless of the page's original rotation. - Added
-
#441 by @bobsingor – Added new PDFium functions to support normalized page rotation:
EPDF_GetPageSizeByIndexNormalized: Returns page dimensions as if the page had 0° rotation (swaps width/height for 90°/270° rotated pages)EPDF_LoadPageNormalized: Loads a page with normalized rotation, treating all coordinates in 0° space
These functions enable the engine to work with page coordinates consistently regardless of original page rotation.
-
#441 by @bobsingor – Enabled rotation normalization by default for all documents opened through the document manager:
- Added
normalizeRotation: truetoopenDocumentFromUrl()method - Added
normalizeRotation: truetoopenDocumentFromBuffer()method - Added
normalizeRotation: trueto internaldoOpen()method
This ensures all documents managed by the plugin have consistent coordinate handling regardless of individual page rotations.
- Added
- #441 by @bobsingor – Fixed rotation calculation in AnnotationLayer components to properly combine page intrinsic rotation with document rotation:
- Updated React
AnnotationLayercomponent to compute effective rotation as(pageRotation + docRotation) % 4 - Updated Vue
annotation-layer.vuecomponent with the same rotation logic - Updated Svelte
AnnotationLayer.sveltecomponent with the same rotation logic
- Updated React
- #441 by @bobsingor – Fixed rotation calculation in PagePointerProvider components to properly handle rotation override and combine page intrinsic rotation with document rotation:
- Updated React
PagePointerProviderto use rotation override directly when provided, otherwise combine page and document rotation - Updated Vue
page-pointer-provider.vuewith the same rotation logic - Updated Svelte
PagePointerProvider.sveltewith the same rotation logic
- Updated React
- #441 by @bobsingor – Fixed rotation calculation in RedactionLayer components to properly combine page intrinsic rotation with document rotation:
- Updated React
RedactionLayercomponent to compute effective rotation as(pageRotation + docRotation) % 4 - Updated Vue
redaction-layer.vuecomponent with the same rotation logic - Updated Svelte
redaction-layer.sveltecomponent with the same rotation logic
- Updated React
- #441 by @bobsingor – Fixed rotation calculation in Rotate components to properly handle rotation override and combine page intrinsic rotation with document rotation:
- Updated React
Rotatecomponent to use rotation override directly when provided, otherwise combine page and document rotation - Updated Vue
rotate.vuecomponent with the same rotation logic - Updated Svelte
Rotate.sveltecomponent with the same rotation logic
- Updated React
- #441 by @bobsingor – Fixed scroll calculations to account for page intrinsic rotation:
- Updated
getSpreadPagesWithSizes()to compute effective rotation as(pageRotation + docRotation) % 4for each page - Updated
scrollToPage()to use effective rotation when calculating scroll position - Updated
getRectPositionForPage()to use effective rotation when provided rotation is undefined - Fixed
calculatePageVisibility()in base strategy to account for horizontal centering offset
- Updated
- #441 by @bobsingor – Fixed rotation calculation in SelectionLayer components to properly combine page intrinsic rotation with document rotation:
- Updated React
SelectionLayercomponent to compute effective rotation as(pageRotation + docRotation) % 4 - Updated Vue
selection-layer.vuecomponent with the same rotation logic - Updated Svelte
SelectionLayer.sveltecomponent with the same rotation logic
- Updated React
- #441 by @bobsingor – Fixed thumbnail rendering to account for page intrinsic rotation:
- Updated
rebuildLayout()to swap width/height for pages with 90° or 270° rotation when calculating thumbnail dimensions - Added
rotation: page.rotationto render options inrenderThumb()to ensure thumbnails display with correct orientation
- Updated
- #441 by @bobsingor – Fixed tile calculations to account for page intrinsic rotation:
- Updated
refreshTilesForPages()to compute effective rotation as(pageRotation + docRotation) % 4for each page - Updated
onScrollMetricsChange()to use effective rotation per page when calculating tiles
- Updated
-
#441 by @bobsingor – Fixed resize handle cursors to account for page rotation:
- Updated
diagonalCursor()function to swapns-resizeandew-resizecursors for edge handles (n, s, e, w) on odd rotation values (90° and 270°) - Reorganized cursor logic to handle edge handles separately from corner handles
Previously, edge resize handles showed incorrect cursors on rotated pages (e.g., north handle showed
ns-resizeinstead ofew-resizeon 90° rotated pages). - Updated
@astrojs/markdoc@1.0.0-beta.8
- Updated dependencies [
80f0225]:- @astrojs/markdown-remark@7.0.0-beta.5
@astrojs/mdx@5.0.0-beta.5
- Updated dependencies [
80f0225]:- @astrojs/markdown-remark@7.0.0-beta.5
@astrojs/vercel@10.0.0-beta.2
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
astro@6.0.0-beta.8
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
-
#15167
4fca170Thanks @HiDeoo! - Fixes an issue where CSS from unused components, when using content collections, could be incorrectly included between page navigations in development mode. -
#15268
54e5cc4Thanks @rururux! - fix: avoid creating unused images during build in Picture component -
#15133
53b125bThanks @HiDeoo! - Fixes an issue where adding or removing<style>tags in Astro components would not visually update styles during development without restarting the development server. -
Updated dependencies [
80f0225]:- @astrojs/markdown-remark@7.0.0-beta.5
@astrojs/node@10.0.0-beta.2
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
@astrojs/netlify@7.0.0-beta.7
-
#15258
d339a18Thanks @ematipico! - Stabilizes the adapter featureexperimentalStatiHeaders. If you were using this feature in any of the supported adapters, you'll need to change the name of the flag:export default defineConfig({ adapter: netlify({ - experimentalStaticHeaders: true + staticHeaders: true }) })
- Updated dependencies []:
- @astrojs/underscore-redirects@1.0.0