Merge main 8dff7ecdb0 into the original
reader head 4b7e4aaab6, preserving both
histories and their attribution. Keep main's placed-page crop/cache APIs,
crop-aware raster sizing, linked-file reads and unrelated dependencies while
retaining the shared reader's checked layered-export errors.
Route main's added PDF bounds code and placed-PDF tests through craft-pdf.
Correct the fetched-source notice to craft-libs 89dcbb3 and the transferred
source snapshot to PdfCraft 7437bde, with asset provenance recorded separately.
Add a regression for hidden-layer export with a placed TrimBox.
This records unchanged tree bf630f5252,
validated locally on 2026-10-20: 13 PDF backend tests, 94 renderer tests,
16 WASM package checks and PDF test compilation to WASM passed. Seven PDF
exports / ten pages match exact main in native PNGs, independent Poppler
pixels and extracted text. Formatting, dependency, clippy, asset and layer
checks passed; the lockfile did not drift.
Full local CI is not green: native validation recorded 2,927 passes, two
sandbox-denied listener binds and one unavailable GPU-adapter case. Five
other listener-dependent tests were not attempted; five existing ignores
remain. Runtime WASM was not executed without an available runner. These
limits are preserved, and no builds or tests were rerun for this commit.
Progress docs per craftrules standards/progress-docs.md: target-app parity, gaps, roadmap with alpha gate, readiness by audience (full / mainstream / essentials) with Opus 5.5 hours, and feature, format, hardware, UI and localization parity docs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* ci: simplify testkit dependency match for Clippy
* IDML: resolve table styles and shared cell edges
* Compose: size table cells by baseline and physical bounds
---------
Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
New designcraft-pptx crate (L3) and file.exportPptx command (File ›
Export PowerPoint…, CLI --export x.pptx). Each page becomes a slide of
native objects: shapes with fills, gradients, strokes and effects,
pictures cropped like their frames, native tables, and text boxes.
Text keeps DesignCraft's composition by default: composed lines end in
line breaks, justified spacing becomes character spacing, and leading
becomes percentage line spacing (PowerPoint rounds exact spacing to
whole points; its 100% line is 1.2 em for every font). Threaded
stories split at their frames and wrapped lines get their own boxes.
lineBreaks: reflow writes one box per frame in native columns instead.
TrueType fonts are embedded as Embedded OpenType when their licences
allow. Objects PowerPoint can't represent (placed PDF/EPS, type on a
path, some effects) are rasterised through the existing
rasterize_where path.
Checked in PowerPoint for Mac and LibreOffice: on the sample magazine,
word positions match DesignCraft's PDF to within 0.8 pt horizontally
and 1.6 pt vertically.
- designcraft-textimport (L3): DOCX (styles by name with spacing/indents/alignment and font,
size, bold/italic/underline/strike/caps/position; runs, tabs, breaks, footnotes, tables,
hyperlink/field results; used styles only), RTF (text, paragraphs, bold/italic/underline/
strike, size, Unicode/cp1252, skipped destinations), plain text (+ tests)
- engine: file.place routes text files into the insertion point, the selected frame or a new
frame on the page; imported styles added (existing win); removeStyles; autoflow adds pages
with threaded frames until the story fits (+ test)
- app/web: Place dialogs accept .docx/.rtf/.txt/.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>