Commit Graph
3087 Commits
Author SHA1 Message Date
Brandon Thomas fffe2fdc3d Merge pull request #1768 from alichaudhry55/fix/table-gradient-fills
Tables: gradient cell fills draw as gradients on screen and in PDF
2026-10-25 12:26:38 -04:00
Brandon Thomas 743eced7ba Merge pull request #1712 from dotCooCoo/feat/file-info
File Info: PDF export writes the document's title, author, description and keywords
2026-10-25 12:26:32 -04:00
Brandon Thomas 58402f01e2 Merge pull request #1783 from dotCooCoo/feat/split-note
Notes: Split Note splits a note in two at the insertion point in its text, as in InDesign
2026-10-25 12:26:26 -04:00
Brandon Thomas 019c1d9e67 Merge pull request #1785 from dotCooCoo/fix/editorial-note-keeps-caret
Notes: deleting a note or converting it to text keeps the caret on the same text
2026-10-25 12:26:20 -04:00
Brandon Thomas 94bf1bf7f9 Merge pull request #1780 from dotCooCoo/fix/note-delete-keeps-caret
Footnotes: deleting a footnote or endnote keeps the caret on the same text
2026-10-25 12:26:13 -04:00
Brandon Thomas bb45cdcc50 Merge pull request #1775 from dotCooCoo/fix/footnote-moves-drop-typing-format
Footnotes: moving the caret into or out of a footnote drops formatting not yet typed
2026-10-25 12:26:06 -04:00
Brandon Thomas 05a8d6ac02 Merge pull request #1777 from Silvertree2010/fix/h2047-gradient-swatch-feather-tool-dra
Convert gradient tool drag to spread space on rotated spreads
2026-10-25 12:26:00 -04:00
Brandon Thomas f2b62c9473 Merge pull request #1778 from dotCooCoo/fix/link-tests-on-windows
Links: the folder relink and IDML link tests expect Windows paths on Windows
2026-10-25 12:25:54 -04:00
Brandon Thomas a8b8b3eb62 Merge pull request #1779 from dotCooCoo/fix/automation-roots-tests-on-windows
MCP: the several-roots tests expect Windows paths without the \\?\ prefix
2026-10-25 12:25:47 -04:00
Brandon Thomas 7d005471a8 Merge pull request #1784 from Silvertree2010/fix/h2077-docx-import-adds-an-empty-paragr
Fix spurious empty paragraph after tables in DOCX import
2026-10-25 12:25:41 -04:00
Brandon Thomas 564b3befc5 Merge pull request #1796 from dotCooCoo/fix/preflight-test-absolute-temp-dir
Preflight: the missing-link test makes the temporary folder absolute
2026-10-25 12:25:35 -04:00
Brandon Thomas a5ede44ce0 Merge pull request #1803 from Silvertree2010/fix/h2386-mcp-server-stops-serving-when-a
Reply with a parse error on non-UTF-8 lines in MCP serve
2026-10-25 12:25:29 -04:00
Brandon Thomas 912e49fa9c Merge pull request #1808 from Silvertree2010/fix/h2418-ruler-tick-spacing-skips-the-10x
Fix ruler major tick spacing skipping the 10x step
2026-10-25 12:25:23 -04:00
aiongg fec0897a5d Application bar: use craft-window's shared title bar (#1811)
* UI: the application bar uses craft-window's title bar

DesignCraft's title-bar code moved to craft-libs as craft_window::title_bar.
The application bar calls it instead of its own copy, and the macOS shell
takes sync_movable from it. Differences: a drag on an in-window panel lying
over the bar no longer moves the window, full screen ignores the bar's drag
and double-click, and floating panels in their own windows keep their own
movable flag.

* UI: craft-window from craft-libs main

* UI: the application bar ignores the title bar's response
2026-10-25 12:06:36 -04:00
Brandon ThomasandClaude Opus 5.5 dcce40fb87 Release 0.13.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.13.0
2026-10-25 09:03:51 -04:00
NetterSilverandClaude Haiku 5.5 58060a5804 Fix ruler major tick spacing skipping the 10x step
Found while testing crates/geom/src/units.rs:~147 (Unit::ruler_ticks, the `while major * zoom < 50.0` loop)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 07:04:03 +01:00
skylar taylor-barrick 7ca39c6c10 Merge pull request #1806 from storytold/fix/idml-nested-pdf-layer-agreement
Keep nested placed-PDF layer choices in embedded IDML
2026-10-24 23:45:11 -06:00
skylar taylor-barrick 73d95475e0 Merge pull request #1804 from storytold/fix/main-text-target-grid-validation
Fix Story Options explicit targets and baseline-grid validation text
2026-10-24 22:59:43 -06:00
skylar taylor-barrick 7417172663 M6: reject conflicting shared-id PDF layer choices in IDML 2026-10-24 22:59:09 -06:00
NetterSilverandClaude Haiku 5.5 22f896536d Reply with a parse error on non-UTF-8 lines in MCP serve
Found while testing crates/mcp/src/server.rs:62-64 (Server::serve)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 04:05:32 +00:00
skylar taylor-barrick dae8a622eb Count distinct placement ids in the IDML layer-variant guard
A duplicated text frame holding an anchored placed PDF leaves two placements sharing one ItemId, so the raw update count exceeded the variant count and a correct export failed. The guard now checks that every mapped id was reached. Replaces the mismatch test with a duplicated-frame export regression.
2026-10-24 21:13:58 -06:00
skylar taylor-barrick 3c24fc290b Text: explain the positive baseline-grid increment requirement 2026-10-24 21:06:26 -06:00
skylar taylor-barrick 3bacb1b022 Text: reject malformed explicit Story Options targets 2026-10-24 21:06:21 -06:00
skylar taylor-barrick 21a54becce M6: guard IDML variant coverage and strengthen export tests 2026-10-24 20:45:22 -06:00
dotCooCoo 346a005c20 File Info: a keyword list or null from ui.dialog.open reaches file.info as it is 2026-10-24 19:39:52 -07:00
skylar taylor-barrick 25218f3759 M6: preserve nested PDF layer choices in embedded IDML 2026-10-24 20:16:22 -06:00
dotCooCoo 2c7bbaa79e File Info: OK keeps the fields the dialog does not hold, and the active document's Data Merge preview 2026-10-24 18:40:43 -07:00
skylar taylor-barrick 5971d46391 Merge pull request #1799 from storytold/fix/placed-pdf-export-traversal
Fix nested placed-PDF layer choices in PDF/A-2b export
2026-10-24 19:40:42 -06:00
skylar taylor-barrick 53d9b6d7f8 M6: merge current main and retain nested PDF/A placement traversal 2026-10-24 19:25:12 -06:00
skylar taylor-barrick 755e4d194c Merge pull request #1671 from andeecollard/codex/pdf-layer-explicit-visibility
Keep explicit all-on PDF layer choices through saves and exports
2026-10-24 19:16:40 -06:00
dotCooCoo 0f037cb67e Merge main into feat/file-info 2026-10-24 18:14:03 -07:00
skylar taylor-barrick df526527cd Merge main into the explicit-visibility branch 2026-10-24 18:58:31 -06:00
skylar taylor-barrick 0f1ff65e7a Merge pull request #1647 from andeecollard/codex/placed-graphic-layer-overrides
M6: preserve placed-graphic layer settings across IDML and native saves
2026-10-24 18:55:32 -06:00
aiongg befc2e0346 Styles: renaming a style keeps its Export Tagging (#1790)
* Styles: renaming a style keeps its Export Tagging

Renaming a paragraph or character style, or moving it into a style
group, moves its Export Tagging to the new name. Deleting a style drops
its tagging and leaves the replacement's own tagging unchanged.

* Styles: a paragraph style can't be renamed onto another style's name

* Styles: a refused rename says the name is taken and shows the General section

Renaming a paragraph or character style onto a name another style has
now says so ("a paragraph style named `Body` already exists"); empty
or bracketed names keep the generic message. The Paragraph Style Options
dialog switches to General, where the name field is, when the rename is
refused. Paragraph style names are trimmed like character style names,
and a renamed style never picks up an export tag left under its new name.

* Styles: the rename test's stale tagging takes the Split Document field

* ROADMAP: date the style rename line 2026-10-24
2026-10-24 20:37:21 -04:00
aiongg a59880394d Search: Delete Workspace is left out of Quick Apply and command search (#1791)
* Search: Delete Workspace is left out of Quick Apply and command search

It needs a saved workspace's name, which a search entry can't supply,
so choosing it there failed. The application bar's workspace menu lists
the saved workspaces to delete.

* Search: leave out the interface commands that fail or reset a setting there

Quick Apply and the application bar's search ran their entries without
parameters. Commands that need a workspace, a command and shortcut, a
menu item, a panel, a window edge, an app page, a recent file, or a
swatch or color group failed when chosen there. Interface Color Theme
and UI Scaling switched to the dark theme and 100%, Workspace switched
to Essentials, and Reset Shortcuts cleared every custom shortcut without
asking. Search leaves all of them out; each stays in the menu, panel or
dialog that gives it the value.

* Search: the flattener preset, Screen Mode, Zoom To and the Task Bar pin stay out of Quick Apply
2026-10-24 20:23:48 -04:00
skylar taylor-barrick 6fa23269b0 M6: record skylartaylor contributor display name 2026-10-24 18:07:19 -06:00
skylar taylor-barrick 9f6cb08591 M6: preserve nested placed-PDF layer choices in PDF/A export 2026-10-24 18:07:19 -06:00
skylar taylor-barrick d5d1b9236e Docs: stop claiming every placement in the placed_items comment 2026-10-24 17:55:46 -06:00
skylar taylor-barrick 040e388e68 M6: let rustfmt lay out the anchored regression's item
Formatting only: the gate's `cargo fmt --check` rejected the three-argument layout.
2026-10-24 17:50:41 -06:00
skylar taylor-barrick fc59be5b2a Docs: say which placements the package report names
The report asks for a placement the export walk reaches whose asset is still a PDF, so it cannot
name a choice anchored inside a table cell or a note. The paragraph now says that rather than
leaving the scope to the sentence above.
2026-10-24 17:49:38 -06:00
skylar taylor-barrick 07759907dc Merge the published #1647 head (a32ad396) into the pair 2026-10-24 17:45:16 -06:00
skylar taylor-barrick 921fcc16d0 Merge current main (b595f1b7) into the #1647+#1671 pair 2026-10-24 17:45:15 -06:00
skylar taylor-barrick 15963c69b1 Docs: scope placed-PDF layer choices to the placements the export walks reach
The placed-PDF doc said every placement counts. Both exports and the PDF/A-2b rasterisation pass
walk document and parent spreads, groups and objects anchored in a story; a placement anchored
inside a table cell's or a footnote's text is not reached yet, so the doc now says what happens
to it instead of claiming it is carried. Gap 19 states the same boundary in one line.
2026-10-24 17:45:12 -06:00
skylar taylor-barrick 2d81510d19 M6: keep an anchored placement's layer choice in a regression
The parent-page regression covers a placement a page inherits. The other placement the export
walks reach is an object anchored in a story: the IDML copy gets a variant that shows every
layer, an external-only copy is refused, and PDF/A-2b rasterises it and warns. The nested-story
regression that used to cover this case also asserted placements anchored inside a table cell and
a footnote, which this pass does not reach; this one keeps the anchored case alone.
2026-10-24 17:45:12 -06:00
skylar taylor-barrick dfba0a3f9d M6: leave placements nested in cells and notes out of the PDF layer pass
Both exports walk Document::placed_items: document and parent spreads, groups, and the objects
anchored in a story. That is the walk the parent-page and anchored fix introduced. The
nested-story traversal (table cells, notes, endnotes), Document::update_placed_items and the
fail-closed refusals that went with it are not part of it: that is the traversal change on its
own, not the placements this pass carries. update_items keeps its reach, so the two exports clear
the choice where the placement actually is again.

A choice anchored inside a table cell's or a note's text therefore stays on the document and is
not carried into the embedded IDML copy, as on main; the refusal that turned that silent
difference into an export error goes with the traversal it guarded, since asking the walk's own
predicate it could never fire. The stale-field half keeps: has_applicable_pdf_layer_overrides
still asks for a graphic whose asset is a PDF, so relinking a placed PDF to an image no longer
makes the package report name a choice that does not exist.

Tests: the nested-placement regression and the relink integration test of the removed refusal
go; the parent-page regression, the stale-field predicate test and the format 4 cell-only reader
test stay. The comments no longer claim every placement counts.
2026-10-24 17:44:02 -06:00
skylar taylor-barrick a32ad396f3 PDF: give the test-only Graphic literals the layer_options field
Graphic gained an optional layer_options field, so the test-only literals in the PDF
crate and in the engine's optional-content support need it. No behaviour changes.
2026-10-24 17:39:46 -06:00
skylar taylor-barrick ba8936e061 M6: keep the relink regression off the file guard's path
The workspace file guard scans test modules too when they are declared `pub(crate) mod` (it only
skips a plain `mod`), so a temp file written inside pdflayers.rs' tests failed
no_crate_touches_the_file_system_outside_the_checked_readers. The unit test now builds the state a
relink leaves behind - layer fields on an item whose asset is an image - and asserts the refusal
predicate ignores it while all three exports run. The user path (a real links.relink to a PNG) moves
to tests/pdf_optional_content.rs, where the guard exempts fixtures written by test files.
2026-10-24 17:05:13 -06:00
skylar taylor-barrick fa741a157d Doc: keep the pointer test clear of a clippy lint
`spreads.to_vec()` instead of `.iter().cloned().collect()`, which `-D warnings` rejects. Caught by
the gate run, not by the test.
2026-10-24 16:46:26 -06:00
dotCooCoo c1561f7ccf Preflight: the missing-link test makes the temporary folder absolute
a_missing_link_shown_by_its_preview_is_still_reported builds its link
under std::env::temp_dir(). On macOS and Linux that returns TMPDIR as
set, so a relative TMPDIR gave a relative link, which document_path
refuses in a document without a path, and the test failed with
"(the path is not valid)". The test now passes the temporary folder
through std::path::absolute first. The preflight code is unchanged.
2026-10-24 15:43:49 -07:00
skylar taylor-barrick 1731c95bad M6: say plainly that the export refusal is a tripwire
Comment-only: the refusal in both exports cannot fire while the walk and the predicate cover the
same placements, so the comments now say it is a tripwire for a future nesting construct and ask
nobody to narrow the walk to match it.
2026-10-24 16:12:40 -06:00