typograph-editor-documentation
    Preparing search index...

    Release Notes - Version 1.0.0-20260930

    Roles said whether a customer may resize or move an element. Now they can say how far.

    • Limits on resize and move. In the role editor, beside May the customer…, a new column — Within these limits:

      • Resize from and to a percentage of the element's size, or between widths and heights in millimetres, optionally keeping the proportions;
      • Move up to ± a distance from where the element was placed, in millimetres or percent.

      "May be resized 80–120% and nudged ±12 mm" is now a role. Every element using it follows, the Role panel says so in its summary, and Preview as viewer lets you feel it.

      ⚠️ A percentage is of the size as drawn — permanently. Each element remembers its size and position when the role is applied, and limits are always measured from that. A frame a customer enlarged to 120% does not get another 20% the next time the document is opened.

      ⚠️ The editor is never limited. Limits are rules for the customer; a designer can always go past them. Use Preview as viewer to check them.

      How limits combine with groups, frames that grow with their text, and elements that sit against a page edge: docs/EditPermissions.md.

    • Text wraps around pictures in multi-column frames. Text wrap used to be switched off for any frame with more than one column, so the text ran straight under the picture. Each column now flows around it on its own side, balanced columns included.

    • ⚠️ Documents saved in the editor can be printed again. Since 20260929 the editor saved two settings — an element's page anchor and its rotation point — as an empty value when they were not set, and the PDF service rejected every such document. They are now left out, as the service expects. A document saved before this release needs to be opened and saved once more before it will print.

    • A story that continues on the next spread gets its text there. A text chain stopped at the spread edge, so a frame on the following spread stayed empty, and nothing reported the text that did not fit.

    • A linked text frame shows only the lines that fit it. It drew the rest of the story below itself, over whatever was underneath, even though that text continues in the next frame.

    • Soft returns start a new line. A line break made with Shift+Enter in InDesign — an address block, say — ran together on one line, and printed with a box where each break should be.

    • Text beside a very narrow gap next to a picture is no longer lost. A gap too narrow for a word made the text vanish for as long as the picture lasted; it now continues below.

    • Text frames with columns print in their columns. A two- or three-column frame showed its columns on screen but printed as one narrow column down its left edge, running under any picture in the way. It now prints as it looks. A document saved before this release prints in columns once it has been opened and saved again.

    • Size and move limits are enforced. The editor's move and resize gestures — which the viewer shares — went around the permission checks' limit step entirely, so any limit a template carried did nothing. They now go through it, including after snapping to a guide.

    • Limits survive saving. A template's limits were written to the file and never read back, so they were lost on every open.

    These come from the converter and the PDF service, not from the editor, and reach users when those services deploy:

    • Import: a gradient feather over a gradient of one colour fades that colour (TYP-771), and a placed SVG keeps its proportions — it was sized from its artwork, not its canvas (TYP-772).
    • PDF: gradients print in colour in CMYK — they printed from black (TYP-780); a gradient runs in the direction the page shows (TYP-782); a clipped picture's border follows its clipping path (TYP-781); a soft return prints no box (TYP-776); an SVG whose colours are set by a stylesheet — how Illustrator exports — prints in its colours instead of black (TYP-779); and a text frame with columns is never shifted up or down as a whole once its text runs into a second column, which is what the editor shows (TYP-778).

    The reference is docs/EditPermissions.md ("Limits: how far, not just whether"); decisions and evidence are on TYP-762.

    • edit_constraints = { resize?: {min_width, max_width, min_height, max_height, aspect_lock}, move?: {dx, dy}, reference?: {x, y, width, height} }, each bound {value, unit: 'mm'|'percent'}. A role carries the limits; ⚠️ only an element carries a reference. apply_role() captures it; apply_roles() at load keeps it — re-measuring there is the ratchet.

    • ⚠️ constrain() passes everything through in editor mode, as can() grants everything.

    • ⚠️ PageElement.limit_resize() turns limits into drag offsets for any handle — offsets, not a clamped rect, because resize_n() rescales a picture and a group's children from them. The old try_resize() was right only for the bottom-right handle, and nothing called it.

    • AutoSize growth is clamped to a largest-height limit in do_auto_size(), outside the editor.

    • Only resize, move and the reference are in document-schema. The colour and image allow-lists and a movement region exist in the canvas policy but are not modelled, so nothing may write them.

    • Canvas pin b5b5088 (first shipped at 68e0386, build 674) — besides TYP-762 it carries the Testdocument fixes (epic TYP-770):

      • find_element() / chain_element() follow a text chain across spreads (TYP-775)
      • a chained frame draws only the lines that fit it (TYP-774)
      • text wrap in multi-column frames (TYP-773): per-column exclusions, iterated until the column tops settle
      • a composer band too narrow for the next word counts as obstructed (TYP-773)
      • U+2028 is a soft-return word (TYP-776)
      • unset page_anchor / rotation_origin are omitted from the wire (TYP-777)
      • the emitted rich_text_layout places each line in its column (TYP-778, place_layout_in_columns()) — the PDF draws from positions, so a multi-column frame printed as one tall column. Added to this release by a second deploy, at b5b5088.

      The editor-side half of TYP-775 (overflowutils, toolbar, overfloweditor) is merged into this branch.

    • ⚠️ TYP-777 is the reason this release cannot wait: every document the 20260929 editor saves fails the schema's Assert\Choice on ''.

    1. ✅ document-schema TYP-762-limits — editConstraints on PageElement and Role.
    2. ✅ The lock bumps in converter-service, publisher-service and document-service: ALLOW_EXTRA_ATTRIBUTES=false rejects edit_constraints on the current schema.
    3. ✅ canvas — TYP-762, then TYP-775, 774, 773, 777 and 776, all on master (68e0386).
    4. ✅ publisher-service chore/bump-document-generator-testdocument — the PDF fixes (TYP-780/781/776/782). Independent of the editor.
    5. ✅ editor-ui TYP-762-limits-ui, pinned to canvas 68e0386 — deployed as build 674.
    6. ✅ publisher-service chore/bump-document-generator-778-779 — document-generator 1803c6f: the column vertical-align rule (TYP-778) and SVG stylesheet colours (TYP-779). Independent of the editor.
    7. ✅ canvas TYP-778-columns-in-print — master b5b5088.
    8. editor-ui docs/release-note-20260930-print-fixes last, pinned to canvas b5b5088 — it carries this note, and merging it deploys.