typograph-editor-documentation
    Preparing search index...

    Release Notes - Version 1.0.0-20261006

    Every event name now follows one convention, and the Page panel's Type is tidied up.

    • The text-typing event has a snake_case name: typograph_text_input. It was the one event name in camelCase, typograph_textInput. Both names fire for now, with the same { text, uuid }, so a page listening for the old one keeps working — but please move to typograph_text_input: the old name will be removed in a later release. Every event name is now snake_case, starting typograph_.

    • Shadows can be see-through. The Shadow panel has a new Opacity field beside length, blur and angle. A shadow was always fully opaque; at 75 %, InDesign's default, it looks much more natural. Existing shadows stay as they were (100 %).

    • Shadows are drawn at their real size on high-resolution screens. On a Retina or other high-resolution display every shadow was drawn at half its distance and half its softness. It now matches what is set — and what InDesign shows.

    • Round a rectangle's corners by dragging. A selected rectangle shows a small circle just inside each corner, as in Illustrator and Figma. Drag one towards the middle to round the corners — all four together. Hold Option or Cmd while dragging to round only that corner. The Corners panel follows; one undo step per drag.

    • Know which page is shown — the event typograph_page_shown. A host page now hears when a different spread comes into view, however that happens: the page bar, navigation, opening a document, or deleting or moving pages. The event says which spread and which pages, once per change. See typograph_page_shown in Page Action Events.

    • Convert to Path keeps a pie slice or ring. Converting an opened circle — a slice, a ring or a ring segment — gave back the whole circle. It now gives the shape you see, ready to edit point by point; a ring becomes a compound path with its hole.

    • A document with an uploaded or linked font prints again. A font added from a link or uploaded was saved with an empty date, and one whose file names no version with an empty version, and the PDF service turned the whole document away. If such a font's files could not be loaded when the document was opened, saving it again also lost the font's identity, with the same result. Both are now saved in a form the PDF service accepts. A document saved before this release is repaired by opening it and saving it again. (Second deploy of this release.)

    • Release notes 20261005 corrected. The note said the Page panel's old Type menu did nothing when used. It did: choosing "spread" on a single page doubled it into a spread, and choosing "single" on a spread left one page twice as wide. The entry now says so. Nothing changes in the editor.

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

    • Drop shadows come over from InDesign. A converted InDesign document keeps its drop shadows — distance, direction, softness, colour and opacity — including shadows that come from an object style or from the document's defaults. Only a shadow on the whole object is taken; a shadow on just the fill, stroke or picture is not yet.
    • Shadows print. A shadow set in the editor or brought over from InDesign is now in the PDF, soft and see-through as on screen. On an unfilled text frame it is the letters that cast it. In a CMYK job a black shadow is printed in black ink only.
    • A rotated rectangle's border turns with it in the PDF. A filled rectangle with a border, turned at an angle, printed its border as a straight box around the turned fill.
    • editor-ui fix/page-type-dead-plumbing (PR #119, already deployed on its merge): removes set_PageType() (menucommands.ts), its two popupmenu_page_type branches in menucontroler.ts and its menuactions registration — unreachable since the Type popup became a read-only field in 20261005, and nothing else produced those ids. Converting a page between single and spread is deliberately not offered as a command: a spread's pages change through the Page menu (add, remove, split, duplicate).
    • Canvas pin ec13a39 — TYP-627 (PR #158), TYP-800 (shadow opacity and the hidpi shadow size), the corner knobs, Convert to Path of an opened circle, typograph_page_shown (TYP-808) and the font data a document is saved with (fix/font-data-wire, PR #167).
    • TYP-627 (canvas typograph_events.ts): typograph_text_input is the event; typograph_textInput stays exported as a DEPRECATED alias and send_text_input() dispatches both, the send_page_images_loaded() remedy. TYP-797 removes the alias. tests/text_input_event.test.ts pins both names, the payload and that inserts are not throttled. The retired standalone viewer-ui repo still has the old literal in its compiled scripts/viewer_ui.js; it is not maintained and not touched.
    • TYP-800 (epic TYP-798, shadows from InDesign): element shadow_opacity (0–1, absent = 1 and kept off the wire). get_shadow_color() returns the colour with an #rrggbbaa alpha, so every draw site picks it up. Canvas TYP-800-shadow-opacity (merged), editor-ui TYP-800-shadow-opacity (panel field, in this note branch). ⚠️ Merge order: document-schema TYP-799-shadow-opacity (shadowOpacity) → lock bumps in converter-, publisher- and document-service → canvas → editor-ui; an editor that writes shadow_opacity before the services know it fails PDF validation. The PDF does not draw shadows yet (TYP-802).
    • Canvas TYP-800-shadow-opacity also fixes the hidpi size: ctx.shadowOffsetX/Y and shadowBlur are device pixels the transform does not scale, so on a dpr-2 view every shadow drew at half size; set_screen_rect() multiplies by view.dpr.
    • TYP-801 (indesign-converter TYP-801-drop-shadow, unmerged): DropShadowResolver merges the item's object-level DropShadowSetting over its object style (BasedOn chain) over Preferences.xml <TransparencyDefaultContainerObject> — the items in a real document usually state only Mode="Drop". Needs document-schema TYP-799 first, then a converter-service lock bump.
    • TYP-802 (document-generator TYP-802-pdf-shadow, unmerged): the element is drawn ALONE by its own drawing code into a throwaway PDF on a transparent page, rasterised by Ghostscript (pngalpha, 200 dpi); the alpha channel is the silhouette. Blurred (σ = blur/2, the canvas convention) and placed as a soft mask over a solid image in the shadow colour, in the document's colour space. About 0.7 s per shadow. Needs Ghostscript and Imagick in the publisher image — both are there.
    • document-generator fix/rounded-rect-rotated-stroke (unmerged): drawPageElementRoundedRect popped the element's rotation after the fill; the stroke printed unrotated and the closing StopTransform() popped an unsaved state.
    • Canvas feat/corner-knobs (merged) — PageElementRoundedRect.corner_knobs() / corner_knob_at() / drag_corner_knob(view, corner, p, only_this) / set_corner_radius(); to_unrotated() moved from the circle to PageElement. Browser suite run_corner_knobs_tests(). editor-ui feat/corner-knobs: cornerknob.ts, hooked in the idle mouse-down beside the arc knobs, before the scale handles. The editor branch is folded into this one.
    • Canvas fix/circle-arc-to-path (merged): PageElementCircel.arc_paths() — the opened outline as poly paths, used by changeelementtype('poly').
    • Canvas fix/font-data-wire: font data went to the wire with modification_date: '' (every font from add_fonts_from_urls() or an upload) and version: '' (a font file without a version string). document-schema parses the date as a DateTime and has version NotBlank, so the template failed validation at the publisher (fontData[1].data.modificationDate — … not an string, an empty string, or null). font_data_for_wire() (fontmanager.ts) leaves an empty date out and writes 'unknown' for an empty version, on the registry (FontManager.fontdata_for_wire()) and on the font copy every text element carries (PageElement.toJSON()); the registry itself is unchanged. Also: add_fonts_from_fontdata() dropped the document's font uuid. That path only runs when the manifest fonts failed to load, so the next save wrote uuid '' (NotBlank). Reported from a MyVivenda document; with this and the host's own corrections it validates with 0 violations. ⚠️ Symfony reports type errors first and checks constraints only after, so one fix can reveal the next failure.
    • TYP-808 — canvas TYP-808-page-shown (merged): typograph_page_shown with {container_index, record_indexes, page_names}, fired from redraw() (the one place every route that changes the shown spread passes), compared by index and spread uuid; open_document() resets it. Browser suite run_page_shown_tests(). Documented in docs/PageEvents.md.