Commit Graph
2702 Commits
Author SHA1 Message Date
Brandon ThomasandClaude Opus 5.5 4aa76b85f9 T: Underline / Strikethrough Options — weight, offset, colour, tint
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:57:02 -04:00
Brandon ThomasandClaude Opus 5.5 3a36772023 L: Relink to Folder / Relink File Extension (links.relinkFolder)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:52:31 -04:00
Brandon ThomasandClaude Opus 5.5 acfb542391 O: File › Package and Copy Links To (file.package, links.copyTo)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:50:56 -04:00
Brandon ThomasandClaude Opus 5.5 67dd4852ca F: Load/Save Swatches (.ase) — swatch.load, swatch.save, Swatches panel menu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:49:27 -04:00
Brandon ThomasandClaude Opus 5.5 9dd44f63cf D: Pathfinder — add, subtract, intersect, exclude overlap, minus back (curves kept)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:45:34 -04:00
Brandon ThomasandClaude Opus 5.5 ea1a0b16c7 D: compound paths, Create Outlines, Scissors tool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:09:32 -04:00
Brandon ThomasandClaude Opus 5.5 571e1043f7 O: Transform Again family, Clear Transformations, layer merge/unused/others, Break Link to Style
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:09:32 -04:00
Brandon ThomasandClaude Opus 5.5 4b2417a8c0 designcraft-cli: support --version (the release packaging smoke tests call it)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.1.0
2026-10-02 12:34:06 -04:00
Brandon ThomasandClaude Opus 5.5 c59133bd3e README: tagline names the Adobe app it reimplements; standard Adobe trademark and non-affiliation notice
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:24:21 -04:00
Brandon ThomasandClaude Opus 5.5 be83f2e23c README: Crafting Apps table in five columns (icon, app, purpose, GitHub, Website)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:19:10 -04:00
Brandon ThomasandClaude Opus 5.5 93fa6900e6 README: drop the old DrawCraft name; VectorCraft links to /apps/vectorcraft
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:18:21 -04:00
Brandon ThomasandClaude Opus 5.5 42e57e56bf README: app icons in the Crafting Apps table
Drop the app icon from the top of the README, matching PhotoCraft, and
show each app's icon next to its name in the Crafting Apps table in place
of the coloured name badges. The table is now identical across all seven
apps apart from the "you are here" row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:17:22 -04:00
Brandon ThomasandClaude Opus 4.8 fe02bca705 Signed release pipeline (macOS/Windows/Linux/Web); README community note
Ports photocraft's release workflow + packaging (signing, notarization,
MSI/DMG/deb/rpm/AppImage/web), adds `cargo xtask version`. File-type
associations omitted (route B); app keeps its own .desktop. Fresh WiX
UpgradeCode. README 'about' note updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 12:06:29 -04:00
Brandon ThomasandClaude Opus 5.5 de51043c4c W: floating panels — tear off, dock back, persisted (window.floatPanel/dockPanel)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:05:13 -04:00
Brandon ThomasandClaude Opus 5.5 ba1843789d G: Preferences — Grids, Guides & Pasteboard, Display Performance sections
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:57:06 -04:00
Brandon ThomasandClaude Opus 5.5 5971553d60 H: place SVG (vector PDF export), PSD, BMP, AI — designcraft-images crate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:51:48 -04:00
Brandon ThomasandClaude Opus 5.5 c0f8679ba5 V: Display Performance — Fast, Typical, High Quality display
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:34:40 -04:00
Brandon ThomasandClaude Opus 5.5 5c547f9a96 T: OpenType menu — feature toggles, figure styles, stylistic sets (type.openType, IDML OTF attributes)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:29:36 -04:00
Brandon ThomasandClaude Opus 5.5 349525bae8 D: Add/Delete Anchor Point and Convert Direction Point tools (path.addAnchor/deleteAnchor/convertAnchor)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:22:27 -04:00
Brandon ThomasandClaude Opus 5.5 66ab252044 F: Gradient Swatch tool, Gradient panel, unnamed gradients (object.gradient)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:15:01 -04:00
Brandon ThomasandClaude Opus 5.5 53272183a2 A: Document Setup — pages, start page #, intent, size presets, orientation, bleed and slug
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:03:17 -04:00
Brandon ThomasandClaude Opus 5.5 97b305fdcd F: Stroke panel — arrowheads (screen and PDF), cap/join/miter, gap colour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:56:14 -04:00
Brandon ThomasandClaude Opus 5.5 b97828eb50 app icon: calico cat in a polka-dot scarf (owner's ArtCraft drawing), Dock/taskbar/launcher wiring, palette docs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:44:07 -04:00
Brandon ThomasandClaude Opus 5.5 7143973f52 G: Preferences (⌘K), scale strokes, Dimensions Include Stroke Weight, Quick Apply (⌘Return)
prefs.set (application) and document.preferences (units, increments, grids; undoable).
Scaling applies to content: paths and placed graphics take the scale, stroke weights follow
with Include Stroke Weight. X/Y/W/H and transform.set measure the stroke's outer edge.
The command palette becomes Quick Apply and lists styles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:26:39 -04:00
Brandon ThomasandClaude Opus 5.5 b3679cbe63 D: parent item overrides — override (Cmd+Shift-click, Override All), remove local overrides, detach
Also records Place PDF in ROADMAP and the parity catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:11:04 -04:00
Brandon ThomasandClaude Opus 5.5 da0e87b86b H: place PDF — sized by crop box, hayro on screen, vector form XObjects in PDF export
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:11:04 -04:00
Brandon ThomasandClaude Opus 5.5 446c70af04 H: place text files — Word (.docx), RTF, plain text; autoflow
- designcraft-textimport (L3): DOCX (styles by name with spacing/indents/alignment and font,
  size, bold/italic/underline/strike/caps/position; runs, tabs, breaks, footnotes, tables,
  hyperlink/field results; used styles only), RTF (text, paragraphs, bold/italic/underline/
  strike, size, Unicode/cp1252, skipped destinations), plain text (+ tests)
- engine: file.place routes text files into the insertion point, the selected frame or a new
  frame on the page; imported styles added (existing win); removeStyles; autoflow adds pages
  with threaded frames until the story fits (+ test)
- app/web: Place dialogs accept .docx/.rtf/.txt/.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:55:28 -04:00
Brandon ThomasandClaude Opus 5.5 f8ccff2470 F: Color panel, Color Picker, unnamed colours
- color: Swatch.hidden — unnamed colours (applied, not listed in Swatches until added)
- engine: object.color (reuses a swatch with the same colour, else an unnamed one; fill or
  stroke), swatch.addToSwatches (optionally named; users follow the rename),
  swatch.addUnnamed (+ test)
- UI: Color panel with fill/stroke proxy, CMYK/RGB/Lab, channel sliders with gradient tracks and
  value fields, tint slider for named swatches, spectrum ramp, Add to Swatches; Color Picker
  dialog (double-click a proxy chip); Swatches hides unnamed colours

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:45:39 -04:00
Brandon ThomasandClaude Opus 5.5 87727f279a D: Paste Into, Polygon Settings
- Edit › Paste Into (⌥⌘V): copied objects (with their stories and images) become the selected
  frame's content, clipped by it; Item::is_group / has_nested_items; renderer and PDF draw fill,
  clipped content, stroke; IDML nests the items inside the frame both ways (verified in
  InDesign 2026) (+ tests)
- Polygon Settings: sides and star inset as engine preferences used by the polygon tools and
  frame.create; double-click the Polygon tool (+ test)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:24:48 -04:00
Brandon ThomasandClaude Opus 5.5 4696178f62 R: crash recovery, Revert, Save a Copy
- engine::recovery: unsaved documents written to a recovery folder (atomic write + metadata),
  reopened as unsaved documents that remember their files; entries dropped on save/close
  (+ tests); file.recovery.list/save/open, file.revert, file.saveACopy (+ test)
- app: recovery folder per platform, recovered on launch with a status message; UI writes
  recovery data every 30 s while documents are unsaved; File › Save a Copy…, Revert
- parity: recovery, revert, save a copy done

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:11:25 -04:00
Brandon ThomasandClaude Opus 5.5 7145107896 Agents: command scripts with result references (CLI, MCP, app); parity estimate
- engine::script: parse scripts (lines, JSON lines, JSON arrays), resolve "$N.path" /
  "${N.path}" references to earlier results, run with a failure report (+ tests)
- CLI: script [FILE|-] (headless or --connect to the running app; --save/--export,
  --keep-going), app COMMAND [JSON] / --method, describe ID, commands FILTER, $N references in
  run --cmd (+ integration tests)
- MCP batch: references and a script-text alternative (+ test)
- docs/agents.md; docs/parity.md scored over 275 catalogue features with cargo xtask parity;
  ROADMAP: parity ~63% breadth / ~55% overall, ~600 agent-hours remaining

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:06:42 -04:00
Brandon ThomasandClaude Opus 5.5 ded7c7ad04 M9: damage-region repaint — re-render only changed frames and patch the canvas texture
- render: damage()/damage_with() — changed items and only the frames whose composition changed
  (cache keeps the composition each edit replaced; Cache::composed_for matches a document
  version exactly); conservative full repaint for styles, swatches, layers, parents, wrap,
  effects and cross-story text (+ tests incl. pixel-identical patch vs full render)
- UI: canvas patches its texture after edits with the view unchanged (0.6 ms vs 22 ms on the
  sample when typing); perf harness row for the damage repaint

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:54:31 -04:00
Brandon ThomasandClaude Opus 5.5 69563933be M2: Find/Replace Font and missing-font highlighting
- engine: font.list (fonts used, missing first), font.replace (text, cells, footnotes, styles) (+ test)
- compose: RunStyle.missing_font (memoized per composition); render: pink highlight behind such
  text when RenderOptions.highlight_missing_fonts (canvas only, never output) (+ test)
- UI: Type › Find/Replace Font… dialog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:47:12 -04:00
Brandon ThomasandClaude Opus 5.5 7e9b78c353 M5: Links panel — status vs. file on disk, page, effective PPI; relink, update, embed, go to
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:43:16 -04:00
Brandon ThomasandClaude Opus 5.5 9b8983ada2 M1: ruler guides (drag out/move/delete, Create Guides); fix task-bar deadlock while dragging
- engine: guide.add/move/delete/deleteAll/list, layout.createGuides (rows/columns with gutters,
  margins or page) (+ test)
- UI: drag a guide out of either ruler (page guide, or spread guide on the pasteboard), drag one
  with the selection tools to move it, drop it on a ruler to delete it; spread guides cross the
  pasteboard; Layout › Create Guides…, View › Grids & Guides › Delete All Guides on Spread
- fix: the Contextual Task Bar called is_pointer_over_egui inside ctx.input — a deadlock that
  froze the app while dragging with a selection
- ui_shot injects synthetic input (ui.click/ui.drag/ui.key now work offscreen)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:39:44 -04:00
Brandon ThomasandClaude Opus 5.5 252ae0df32 M6: anchored objects in IDML (inline / above line), verified in InDesign 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:25:20 -04:00
Brandon ThomasandClaude Opus 5.5 5a9fa2d16a M5: anchored objects — inline and above line
- doc: OBJECT_MARK with Story::objects (items normalized to the origin) kept in sync on edits,
  copy/paste slices and threading
- compose: inline objects are wide glyphs sitting on the baseline (Y offset; auto leading grows);
  above-line objects push their line down; placements per frame follow vertical justification
- render + PDF draw anchored items with their lines
- engine: anchored.insert/options/release/list; pasting copied items into text anchors them;
  Options/Release act on the object at the insertion point (+ test)
- Object › Anchored Object menu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:21:24 -04:00
Brandon ThomasandClaude Opus 5.5 781c57ac5a M2: formatted text clipboard, Paste without Formatting, Change Case, special-character menus
- doc: Story::extract / insert_story carry formats, footnotes, cross-references, index markers
  and tables through copy and paste
- engine: edit.copy/cut on text keep a formatted slice; edit.paste uses it while the system
  clipboard matches (else plain text, no smart quotes); edit.pasteWithoutFormatting (⇧⌘V);
  type.changeCase (upper/lower/title/sentence, run formats kept)
- UI: canvas copy/cut/paste go through the engine; Type › Insert Special Character (Symbols,
  Markers, Hyphens and Dashes, Quotation Marks, Other), Insert White Space, Insert Break
  Character, Change Case; nested submenus in the menu parser (+ test)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 22:57:27 -04:00
Brandon ThomasandClaude Opus 5.5 c2222959de M7: index — page references, Generate/Update Index, IDML topics
- doc: INDEX_MARK with Story::index_refs kept in sync (topics 1–4 levels, sort keys, current
  page / to end of story / next n paragraphs / suppressed / See / See also); index builder with
  section headings, nested or run-in entries, merged page ranges; Document::index for updates
- engine: index.addReference (topic from the selection), index.list, index.generate, index.update
  with Index Title / Section Head / Level 1–4 styles (+ tests)
- IDML: PageReference markers and the Index topic tree with See / See also cross-references,
  both ways (verified in InDesign 2026)
- Layout › Index menu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 22:45:55 -04:00
Brandon ThomasandClaude Opus 5.5 01b3603751 M7: cross-references and text anchors; menus expose engine features
- doc: ANCHOR_MARK / XREF_MARK with Story::anchors / xrefs kept in sync on edits, 11 formats
  (InDesign's building blocks + partial paragraph), paragraph anchors, typographic quotes
- compose: anchor pages via an XrefIndex (cached per document signature); cross-references are
  resolved at composition, so they never go stale; '??' for missing destinations
- PDF: cross-references become link annotations to the destination page
- IDML: export/import as HyperlinkTextDestination / CrossReferenceSource / Hyperlink /
  CrossReferenceFormat (+ XRef page variables); verified live in InDesign 2026
- engine: xref.insert/list/setFormat/defineFormat/formats, anchor.create/list (+ tests)
- UI: New Cross-Reference dialog (styles → paragraphs, format); menu pass adding TOC, sections,
  text variables, hyperlinks, footnotes, step and repeat, spelling, fitting/content submenus,
  effects, Data Merge, Preflight, EPUB; fixed-parameter menu variants; ui.menu.invoke opens
  generated dialogs; every-menu-entry-is-a-command test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 22:26:47 -04:00
Brandon ThomasandClaude Opus 5.5 3ad71d5a76 M7: footnotes — Insert Footnote, Document Footnote Options, column-bottom layout, PDF/IDML; generic command dialogs
- doc: FOOTNOTE_REF marker + Story::notes (kept in sync on insert/delete/thread), FootnoteOptions,
  NumberStyle::Symbols, footnote text addressed like cell text (CellAddr::footnote)
- compose: notes numbered (continuous / restart per page, spread, section), composed at column
  width, body text makes room, stacked at the column bottom with the rule above
- render + PDF draw footnote text; IDML export/import in InDesign's structure (verified in
  InDesign 2026), FootnoteOption preferences
- engine: footnote.insert/options/list/setText/delete/goToReference (+ tests)
- UI: caret/selection in footnote text, Footnote Options dialog, Type menu entries; menu items
  labelled '…' with parameters open a dialog generated from the command's params doc
- sample magazine carries a footnote

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:01:27 -04:00
Brandon Thomas 7bf8167638 readme logo 2026-10-01 14:51:35 -04:00
Brandon ThomasandClaude Opus 5.5 56cb9f5c65 M14: community links — Help menu (Discord, app page, GitHub, issues, website), About splash with ArtCraft mark, start-screen community card, app-bar Discord button, app.links/help.* commands, CLI 'links', MCP websiteUrl
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:19:13 -04:00
Brandon ThomasandClaude Opus 5.5 1b6ffb4afb ROADMAP: TOC, text variables, effects, parallel compose, merged tables + UI pass 2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:04:34 -04:00
Brandon Thomas 598de2cc1c Merge branch 'worktree-agent-abb433558e9b52d63'
# Conflicts:
#	crates/ui-egui/src/canvas.rs
2026-10-01 13:04:12 -04:00
Brandon Thomas 2f474bfb4d Merge branch 'worktree-agent-a97a3bd20b71c4f73'
# Conflicts:
#	crates/compose/src/lib.rs
#	crates/compose/src/shape.rs
#	crates/doc/src/lib.rs
2026-10-01 12:55:23 -04:00
Brandon Thomas b4c52c249b continued work 2026-10-01 12:51:28 -04:00
Brandon ThomasandClaude Opus 5.5 7a7d7b78a1 Merge main into M8 tables
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:47:48 -04:00
Brandon Thomas cf8e6d1f74 Merge branch 'main' into worktree-agent-abb433558e9b52d63 2026-10-01 12:46:43 -04:00
Brandon ThomasandClaude Opus 5.5 67ac9f1dfb UI: fidelity pass 2 (Properties sections, spinner fields, task bar, inverse text selection, Pages/Layers panels)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:46:43 -04:00