Commit Graph
4827 Commits
Author SHA1 Message Date
Brandon Thomas 9dc2068580 Merge PR #857 2026-10-14 01:54:41 -04:00
Brandon Thomas 21472519c0 Merge PR #858 2026-10-14 01:54:40 -04:00
Brandon Thomas c1ce6f77bf Merge PR #860 2026-10-14 01:54:39 -04:00
Brandon Thomas af6992dc65 Merge PR #837 2026-10-14 01:54:39 -04:00
Brandon Thomas 986c5487e9 Merge PR #849 2026-10-14 01:54:38 -04:00
Brandon Thomas d34384574c Merge PR #853 2026-10-14 01:54:37 -04:00
Brandon Thomas d83184f8b3 Merge PR #863 2026-10-14 01:54:37 -04:00
LabDennis ff5d866ff3 chore(sync): merge upstream main into PR #854 2026-10-14 06:51:45 +02:00
aiongg 4f97e08cd0 Merge upstream main 0f4f382b (#84 squash)
# Conflicts:
#	Cargo.lock
#	ROADMAP.md
#	crates/compose/src/lib.rs
#	crates/compose/src/overlay.rs
#	crates/compose/src/shape.rs
#	crates/compose/src/tests.rs
#	crates/doc/src/attrs.rs
#	crates/doc/src/edit.rs
#	crates/doc/src/item.rs
#	crates/doc/src/slice.rs
#	crates/engine/src/cmd/edit.rs
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/cmd/mod.rs
#	crates/engine/src/cmd/notes.rs
#	crates/engine/src/cmd/object.rs
#	crates/engine/src/cmd/place_text.rs
#	crates/engine/src/cmd/style.rs
#	crates/engine/src/cmd/text.rs
#	crates/engine/src/cmd/thread.rs
#	crates/engine/src/lib.rs
#	crates/engine/src/tests.rs
#	crates/engine/src/tests_idml.rs
#	crates/fonts/src/fontdb.rs
#	crates/fonts/src/tests_vertical.rs
#	crates/fonts/src/vertical.rs
#	crates/format/src/lib.rs
#	crates/geom/src/corners.rs
#	crates/idml/src/export.rs
#	crates/idml/src/import.rs
#	crates/idml/src/tests.rs
#	crates/mcp/src/backend.rs
#	crates/tools/src/select.rs
#	crates/tools/src/snap.rs
#	crates/tools/src/tests.rs
#	crates/tools/src/text.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/it.rs
#	crates/ui-egui/src/i18n/uk.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/panels/swatches.rs
#	crates/ui-egui/src/toolbar.rs
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
2026-10-14 04:25:38 +00:00
aiongg 8403fabeae Integration: #84 renaming a swatch (Add to Swatches, Swatch Options) refuses stories nested deeper than 32 levels before the shared rename_swatch_refs walk 2026-10-14 04:25:26 +00:00
aiongg 8e2c62e08a Integration: #84 control-channel paste and IME use the control queue with keys and clicks; click count 1-255 checked inside the pending-event budget, which counts the control queue 2026-10-14 04:24:39 +00:00
aiongg 2f6b62a831 Merge #84 (final head 9b7a0ec6): Text editing, snapping and text threading
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/edit.rs
#	crates/engine/src/cmd/style.rs
#	crates/engine/src/cmd/text.rs
#	crates/engine/src/cmd/thread.rs
#	crates/geom/src/corners.rs
#	crates/idml/src/import.rs
#	crates/idml/src/tests.rs
#	crates/mcp/src/backend.rs
#	crates/tools/src/select.rs
#	crates/tools/src/tests.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/toolbar.rs
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-14 04:19:26 +00:00
zydvc26s67-web 0a0a6ce5dd Merge remote-tracking branch 'origin/main' into zydvc26s67-web-paragraph-styles-save-delete
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-13 20:58:27 -07:00
0f4f382b0e feat(text): improve editing, snapping, and threading
Add multi-click text selection, pending caret formatting and clipboard support, text-aware colour controls, guide/grid snapping, and frame threading with loaded-port interactions.

Include the layout, drop-cap and IDML updates carried from #83, with safeguards for generated and linked stories, external text references, local IDs, locked frames and atomic colour edits.

Fixes #23.

Co-authored-by: Sean Hammond <sean.hammond@und.edu>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:41:46 -06:00
aiongg 1c788654bf Merge t15-b: #863 #860 #869 #870, new heads of #802 #319 #829 #589 #490 #562, #643's test
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/tests.rs
2026-10-14 02:02:22 +00:00
aiongg 41f5099700 Integration: #870 i18n rows next already has (pt-BR, Arabic, French Apply Parent to Pages) stay next's, no duplicate keys 2026-10-14 01:59:13 +00:00
aiongg 4ced37c0aa Integration: #869 duplicateSpread's params doc parses (no comma inside the to? text) 2026-10-14 01:55:54 +00:00
skylar taylor-barrick 9b7a0ec66d fix(text): preserve document state while threading and formatting
Merge current main into the text editing and layout work, retaining the original contributor commits. Preserve generated and linked stories, incoming text references, local IDs and locked frames when threading.

Keep pending formatting and text colours consistent, isolate deferred control clipboard input, and handle inherited IDML frame properties with bounded column allocations. Add focused state-preservation and round-trip regressions and correct the socket and swatch test fixtures.

M2; refs #84.
2026-10-13 19:54:50 -06:00
aiongg 0ceff048d8 Merge t15-a: #868 #862 #864 #866 #867 2026-10-14 01:54:16 +00:00
aiongg 1c3af71eb7 Integration: cargo fmt 2026-10-14 01:41:51 +00:00
aiongg a6ec09afb2 Integration: #643's test (an empty Effects field path sets nothing) 2026-10-14 01:41:17 +00:00
aiongg 1c1449c207 Merge #867: Liquid Layout panel (Auto-Fit, Object Constraints); Create Alternate Layout in the Layout menu
# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/panels/interactive.rs
2026-10-14 01:41:00 +00:00
aiongg b52b9a99fc Integration: ROADMAP lines for #869 and #870 describe the integration fixes 2026-10-14 01:40:50 +00:00
aiongg 49a5cb87bb Integration: #490 drop its second Quit DesignCraft row (already in the Czech table) 2026-10-14 01:40:38 +00:00
aiongg 3e97c8fd58 Merge #562: IDML: anchored objects take unset settings from their object style; left-aligned X offsets read in the layout's direction (new head)
# Conflicts:
#	ROADMAP.md
2026-10-14 01:40:29 +00:00
aiongg a4b8ee994f Merge #866: Page tool: liquid pins and resize locks on the canvas for object-based pages
# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/i18n.rs
#	docs/target-app-parity.md
2026-10-14 01:40:21 +00:00
aiongg 172ec3a941 Merge #490: i18n: Czech interface language (new head) 2026-10-14 01:39:55 +00:00
aiongg 434c9ab35a Merge #589: (fix)Small frame wrap for overset small text boxes (new head) 2026-10-14 01:39:49 +00:00
aiongg 0efd3792ec Merge #829: i18n: add Polish interface language (new head) 2026-10-14 01:39:49 +00:00
aiongg 560f1161ea Merge #319: DTD: bound parameter-entity expansion, nesting and sequence matching (new head) 2026-10-14 01:39:48 +00:00
aiongg 0383f46953 Merge #802: File › Open Recent, and recent files with previews on the start screen (new head) 2026-10-14 01:39:48 +00:00
aiongg 9912a386a8 Integration: #870 the page menu always offers Delete Page for the clicked page, Delete Spread separately for multi-page spreads 2026-10-14 01:39:48 +00:00
aiongg 47b51d6377 Integration: #864 drops the Controlled by Parent rule from the menus and the Objects Move with Page checkbox (neither has an effect yet) 2026-10-14 01:39:08 +00:00
aiongg dcaa4371ee Merge #870: Pages panel menu order
# Conflicts:
#	crates/ui-egui/src/i18n.rs
2026-10-14 01:38:57 +00:00
aiongg 7889b25a37 Integration: #869 Alt-drag copies a page in one command and one undo step (layout.pages.duplicateSpread takes to) 2026-10-14 01:38:39 +00:00
aiongg d0035c0722 Merge #864: Control panel for the Page tool (W/H, preset, orientation, Liquid Page Rule); Controlled by Parent; Show Parent Page Overlay
# Conflicts:
#	crates/idml/src/import.rs
#	crates/ui-egui/src/chrome.rs
#	crates/ui-egui/src/i18n.rs
2026-10-14 01:37:34 +00:00
aiongg 2036194de6 Merge #869: Pages panel: Alt-drag copies a page, drop a page on Create new page, Edit page size; duplicates keep their size
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/panels/pages.rs
2026-10-14 01:37:07 +00:00
aiongg f1f8aaa9f7 Merge #862: Page tool: click selects a page; its handles preview the liquid rule, Alt-drag resizes, Shift keeps proportions
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/tests.rs
#	crates/tools/src/lib.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/i18n.rs
2026-10-14 01:36:53 +00:00
aiongg fa511f80cd Merge #868: Page tool draws liquid guides from the rulers (dashed)
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/guides.rs
#	crates/ui-egui/src/canvas.rs
2026-10-14 01:33:37 +00:00
aiongg 3497da3939 Merge #860: fix(compose): odd/even page starts keep their parity at the top of a frame
# Conflicts:
#	crates/compose/src/lib.rs
2026-10-14 01:33:30 +00:00
aiongg 9294b3b68a Merge #863: Tables: table.options limits header and footer rows 2026-10-14 01:33:03 +00:00
moppeeerandClaude Opus 5.5 8156e575bc feat(ui): Pages panel menu in InDesign's order
The Pages panel menu in Chris Cicchino's "Adobe InDesign – Page Tool
and Liquid Layout" (0:47) reads: Insert Pages…, Move Pages…, Duplicate
Spread, Duplicate Spread at End of Document, Delete Spread, … New
Parent…, Apply Parent to Pages…, Override All Parent Page Items, Parent
Pages ▸, Create Alternate Layout…, Numbering & Section Options…, Allow
Selected Spread to Shuffle. DesignCraft's menu (and the page thumbnails'
context menu) had Insert Page After, Delete Page, Duplicate Spread, Add
to Previous Spread, Allow Spread to Shuffle and the parent items in
another order.

- Pages panel menu and page context menu in InDesign's order and labels:
  Insert Pages… and Move Pages… open their dialogs for the page; Delete
  Spread for a spread of several pages; Parent Pages ▸ holds Remove All
  Local Overrides and Detach All Objects from Parent; Create Alternate
  Layout… and Numbering & Section Options… open theirs. Add to Previous
  Spread stays last (InDesign drags pages into spreads instead).
- Translations (pt-BR gains the existing items it lacked).

Builds on #869 (Duplicate Spread at End of Document).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:15:27 +02:00
aiongg 063856cc4c Merge t14-b: #836 #840 #846 #854, Find/Change first:true
# Conflicts:
#	ROADMAP.md
2026-10-14 00:09:13 +00:00
moppeeerandClaude Opus 5.5 3939b825d3 feat(ui): Pages panel duplicates pages by Alt-drag and the New Page button; Edit page size
Chris Cicchino's "Adobe InDesign – Page Tool and Liquid Layout" (0:42,
2:06) holds Option and drags a page in the Pages panel to copy it,
drags a page onto the New Page button to duplicate it ("click and drag
onto my plus sign I can duplicate that"), and resizes pages; InDesign's
panel also has an Edit page size button. DesignCraft's panel only moved
pages on drag, had no Edit page size button, and duplicating a page gave
the copy the size of the page before it (not its own) without its
liquid rule or guides. A page of its own size also drew its thumbnail
at the document's scale, over the panel's footer.

- Pages panel: Alt-drag copies the page to where it's dropped; a page
  dropped on Create new page is duplicated at the end of the document;
  Edit page size lists the presets (in the page's orientation) and
  Custom Page Size…; InDesign's tooltips (Create new page, Delete
  selected pages).
- Thumbnails share one scale (the document's page size, smaller when a
  taller page would pass 1.8 times the usual height); rows fit their
  spread's tallest page.
- engine: layout.pages.duplicateSpread copies the pages' size, margins,
  columns, guides and liquid rule, takes `atEnd`, and returns the copy's
  first page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:02:16 +02:00
moppeeerandClaude Opus 5.5 db19963bad feat(ui): the Page tool draws liquid guides from the rulers
Chris Cicchino's "Adobe InDesign – Page Tool and Liquid Layout" (11:00–
13:30) drags guides out of the rulers with the Page tool on a
guide-based page: "these guides are a little bit different... they are a
dashed line, a cyan dashed line" - liquid guides, which let the objects
they cross stretch with the page. DesignCraft drew liquid guides dashed
and applied them, but a guide could only become liquid through the
Liquid Layout panel's list: ruler drags always made ruler guides.

- canvas: with the Page tool, a page guide dragged from a ruler is a
  liquid guide; its preview is dashed while it's dragged.
- engine: guide.add takes `liquid`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:37:30 +02:00
moppeeerandClaude Opus 5.5 9da44a042f feat(ui): Liquid Layout panel in InDesign's layout; Create Alternate Layout in the Layout menu
Chris Cicchino's "Adobe InDesign – Page Tool and Liquid Layout" (2:47,
7:24) uses the Liquid Layout panel: "Liquid Page Rule:" with "Page: n",
Content › Auto-Fit, and Object Constraints › Resize with Page (Height,
Width) and Pin (Top, Left, Bottom, Right), greyed until an object on an
object-based page is selected. DesignCraft's panel had a "Page 1" label,
the rule, six wrapped checkboxes ("Resize width", "Pin top"…) only once
an object was selected, and a Create Alternate Layout form.

- Liquid Layout panel: InDesign's layout and labels; the page is the one
  the Page tool selected (else the page in view); Auto-Fit (graphic
  frames) runs object.fittingOptions; the constraints apply on
  object-based pages (also through Controlled by Parent) and stay
  greyed otherwise. The page's liquid guides stay listed below for now.
- Layout menu: Create Alternate Layout… (as in InDesign).
- Translations for the new labels.

Builds on #864 (rule list, Controlled by Parent) and #862.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:29:44 +02:00
moppeeerandClaude Opus 5.5 8f71219533 feat(tools): Page tool pins and locks objects on object-based pages, on the canvas
Chris Cicchino's "Adobe InDesign – Page Tool and Liquid Layout" (6:32–
9:58) clicks an object with the Page tool on an object-based page and
gets InDesign's on-canvas liquid controls: a pin outside each edge
("Object is pinned relative to the page edge. Click to release.") and a
padlock on the width and height lines ("The object's width is locked.
Click to let the object change width as the page changes width."). The
pins and resize settings existed (liquid.object, the Liquid Layout
panel) but the canvas showed none of it.

- tools: on an object-based page a Page tool click selects the object
  with its page (layout.selectPage takes `ids`); its pins (14 px outside
  each edge's middle) and width/height locks (beside the centre) toggle
  liquid.object on click, show InDesign's tooltips on hover and a hand
  cursor.
- canvas: LiquidPins (orange dashed width/height lines with padlocks,
  open when the object follows the page; hollow pins, or a line to the
  page edge when pinned) and Tip overlays; tooltip translations.

Builds on the Page tool PR (#862).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:21:51 +02:00
moppeeerandClaude Opus 5.5 8864307d7c docs: the Page tool's Control panel in the parity notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 00:52:06 +02:00
aiongg 6692e061d6 Merge t14-c: #839 #843
# Conflicts:
#	ROADMAP.md
2026-10-13 22:51:48 +00:00
moppeeerandClaude Opus 5.5 59b6125af1 feat(ui): Control panel for the Page tool; Controlled by Parent; Show Parent Page Overlay
Chris Cicchino's "Adobe InDesign – Page Tool and Liquid Layout" (1:02–
2:06, 13:47) sizes pages from the Control panel with the Page tool
selected: X/Y, W/H, the page-size preset ("US Business Card"),
orientation, Liquid Page Rule ("Controlled by Parent"), Objects Move with
Page and Show Parent Page Overlay. DesignCraft's Control panel showed the
(empty) object controls.

- ui: with the Page tool, the Control panel shows the selected page (or
  the page in view): the reference point (W/H, preset and orientation
  keep it in place via layout.pageSize's anchor), X/Y (read-only),
  W/H, the preset dropdown, portrait/landscape, Liquid Page Rule, Objects
  Move with Page (always on: pages don't move within spreads yet) and
  Show Parent Page Overlay.
- doc: LiquidRule::ControlledByParent (the parent page's rule, Off
  without one; resolved by liquid::effective_rule); Page.show_parent_overlay.
- engine: layout.pageOptions {pages, showParentOverlay}; liquid.pageRule
  takes controlledByParent.
- canvas: the parent page's size over a page with the overlay on.
- Liquid Layout panel and Control panel share InDesign's rule list
  (Off, Scale, Re-center, Object-based, Guide-based, Controlled by
  Parent); "US Business Card" preset; translations.

Builds on the Page tool PR (#862) for the selected page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 00:51:47 +02:00