Resolve main dependency migration; retain flate2 production usage and route new PDF parsing through craft-pdf. Owner directs hosted CI validation for this integration; full local gate not run.
The IDML story writer skipped the endnote reference character, so an
exported body story lost every endnote's place: "an endnote here. End."
with nothing between "here" and the full stop. The endnote frame's
story was written with its numbers as text, so nothing linked the
listed endnote back to where it was referenced.
Each reference is now written as its own superscript character range
holding the endnote's number, formatted by Endnote Options (start,
style, prefix and suffix) as the endnote frame lists it. IDML's
Endnote / EndnoteRange elements are not written yet.
The Text Frame Options dialog filled its fields from the document's
ruler unit but never set the dialog's own unit, so it stayed at picas.
The spinner fields (Top, Bottom, Left, Right, a non-rectangular frame's
Inset, the column width and gutter, Paragraph Spacing Limit) showed
their values in picas whatever Preferences > Units & Increments said,
and a bare number typed in any measure field, Min under First Baseline
included, was read as picas.
The dialog now takes the document's horizontal ruler unit when it opens
and keeps it while open, as the Rectangle dialog does (#1964).
Do not use font.obj_id() for inline Type3 font resources so the enclosing container is never overwritten; inspect alternate/base spaces of Separation, DeviceN, Pattern, and nested Indexed spaces in uses_device_cmyk; scope scan memoization in CmykScan to each effective resource chain while keeping cycles bounded; return an explicit error when non-cyclic nesting exceeds MAX_DEPTH.
Fixes#2742.
Make UiState::hidden_panels session-only (#[serde(skip)]) and clear hidden_panels when opening or revealing panels, toggling the Control bar while hidden, or loading/resetting workspaces. Treat hidden panels and flyouts as not visible in checked/toggle checks so Window commands unhide them instead of toggling them off invisibly.
* Tools: snap Gap tool drags to active snapping settings (#2637)
* Tools: reject unreachable Gap tool snap targets beyond resize clamp
* Tools: preserve raw Gap tool delta when no reachable snap matches
Fixes#2743.
Attach /DefaultCMYK [/ICCBased ...] referencing the CMYK working space profile on every page, inherited /Pages resource dict, Form XObject, SMask form, tiling pattern, and Type3 font resource scope outside PDF/X-1a and PDF/A-2b. Plain print exports and booklets embed one shared Flate-compressed /N 4 ICC profile stream without adding /OutputIntents or /Trapped; PDF/X-4 reuses the catalog GTS_PDFX /DestOutputProfile stream; RGB-blend documents attach /DefaultCMYK only when content or resources use DeviceCMYK.
* Text Frame Options: every dropdown and field has an accessible name
The Columns and Align dropdowns on the General tab, and the dropdowns and
text fields on the Column Rules, Baseline Options and Auto-Size tabs, had
no accessible name, so a screen reader announced them without a caption
and kittest's accessibility check failed on the dialog. Each one now takes
the caption shown next to it. The non-rectangular frame test runs with the
check on and opens every tab.
* Text Frame Options: numeric fields take their captions as names
The Number, Width, Gutter, Maximum, inset and Paragraph Spacing Limit
fields on the General tab were named by their internal ids, so a screen
reader announced tfo_columnWidth and its spinner read as Increase
tfo_columnWidth. Each field and its spinner buttons now take the caption
shown beside it.
* Text Frame Options: test the numeric editors' accessible names
The test checked only the spinner buttons' names. It now also finds each
numeric editor of the General tab (Number, Width, Gutter, Maximum, Paragraph
Spacing Limit, the four sides and Inset) by the text-input role and its
caption.