Commit Graph
4827 Commits
Author SHA1 Message Date
Davit MatchakhelidzeandClaude Sonnet 5.5 44b83aa6a3 i18n(ka): catalog follows the reviewed translations
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-14 20:55:53 +04:00
Davit MatchakhelidzeandClaude Opus 5.5 5d4ed2a663 text: Georgian document language; no initial capitals for Georgian
Georgian is a Properties text language (IDML "Georgian" maps to ka). Georgian has no initial capitals: Mtavruli is only for all-caps text, so Change Case title and sentence case and index section heads leave Mkhedruli as it is (doc::capitalizes); upper case still gives Mtavruli.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-14 20:55:04 +04:00
Davit MatchakhelidzeandClaude Opus 5.5 19bacaadd7 i18n: Georgian (ka) interface language
Adds i18n/ka.rs (1,734 entries: every key of the shared, Arabic, Brazilian Portuguese, Japanese, Italian and Ukrainian tables, plus labels only the code and command table use), registered as ქართული in LANGUAGES and the Interface Language menu. Count captions use the category-first form Ukrainian already uses (გვერდი: 5), since Georgian nouns stay singular after a numeral. Tests: every Georgian key resolves, placeholders and ellipses are preserved, no Mtavruli, every menu title, item and submenu is translated, and switching to ka renders. Docs: localization-parity.md and ROADMAP.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-14 20:55:04 +04:00
Brandon ThomasandClaude Opus 5.5 23ac4ce3f1 fix: integrate batched community PRs (#845's Find scope test uses the Page tool's double-click from #862)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:51:12 -04:00
Marco Arnulfo 20d30e2266 Images: indexed-colour TIFFs decode through their palette (fixes #927) 2026-10-14 18:46:57 +02:00
Brandon Thomas 4f193834bd Merge PR #870 (with #869) 2026-10-14 12:40:07 -04:00
Brandon Thomas 50a6b60072 Merge PR #868 2026-10-14 12:39:59 -04:00
Brandon Thomas c8a8a1868d Merge PR #867 2026-10-14 12:39:59 -04:00
Brandon Thomas b8d975b094 Merge PR #866 2026-10-14 12:39:59 -04:00
Brandon Thomas 23aeddb354 Merge PR #864 2026-10-14 12:39:58 -04:00
Brandon Thomas c1a1970168 Merge PR #862 2026-10-14 12:39:58 -04:00
Brandon Thomas a6e7e2a0c7 Merge PR #838 2026-10-14 12:39:58 -04:00
Brandon Thomas e8a3cda237 Merge PR #836 2026-10-14 12:39:58 -04:00
Brandon Thomas d67fb28456 Merge PR #840 2026-10-14 12:39:58 -04:00
Brandon Thomas 6ceb57d4f5 Merge PR #845 2026-10-14 12:39:58 -04:00
Brandon Thomas 24e86db864 Merge PR #855 2026-10-14 12:39:58 -04:00
tydude001andClaude Opus 5.5 a65a83b765 packaging: RPM requires library sonames, so openSUSE can install it
DesignCraft's RPM requires Fedora package names: `libxkbcommon`, `(vulkan-loader or libglvnd-egl)`.
openSUSE has no `libxkbcommon`, `vulkan-loader` or `libglvnd-egl` package, so zypper refuses it with
`nothing provides 'libxkbcommon'` (exit 4, which the ArtCraft Launcher shows as "error 4";
storytold/craft-launcher#341).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:36:19 -05:00
moppeeerandClaude Opus 5.5 cbba1fe7e1 Tools panel as InDesign's: Gradient Feather a tool of its own; two-column layout; View Options; Apply Color and Apply Gradient
Chris Nielsen's "The Adobe InDesign Toolbox" (InDesign 2020) walks the
Tools panel in one and two columns. Compared with it:

- Gradient Swatch and Gradient Feather are separate tools (one flyout
  here before).
- In two columns InDesign lays out Content Collector and Content Placer,
  Apply Color / Apply Gradient / Apply None and Normal / Preview (with
  Bleed, Slug, Presentation in its flyout) side by side
  (SPLIT_IN_TWO_COLUMNS). One column keeps one well with a flyout, which
  now names what is in front (Apply Color, Apply Gradient or Apply None).
- The utility button is View Options: Frame Edges, Rulers, Guides, Smart
  Guides, Baseline Grid and Hidden Characters, checked when shown, with
  their shortcuts (17:40). It was Text Frame Options (Object › Text Frame
  Options…, ⌘B, still opens it).
- Apply Color (,) applies the colour applied last ([Black] at first) and
  Apply Gradient (.) the gradient applied last, else the document's first,
  else white to black (InDesign's default), to the fill or stroke in front.
  The flyout had Apply Color as [Black] and no Apply Gradient.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:15:14 +02:00
aiongg 78340e6588 Canvas: tools show their own cursors (Direct Selection, Pen states)
Tool cursors are glyphs drawn in code (black ink, white halo): the filled
arrow for Selection, the hollow arrow for Direct Selection, the pen nib
with an add, delete, close or convert badge, and a curved double arrow
for rotating. Linux and Windows show them as OS cursor bitmaps,
rasterized per pixels-per-point and cached; macOS paints them at the
pointer, since it sizes cursor bitmaps in points; the web build keeps
the system cursors. Text, hand, zoom and resize cursors stay system
cursors.

The Pen tool reports what a click does: over the first anchor of the
path being drawn it closes the path, and between paths a click on a
selected path's anchor deletes it and a click on its outline adds one.
The Add, Delete and Convert Direction Point tools show the matching pen
badges.

The glyph geometry and the rasterizer are adapted from VectorCraft's
code-drawn tool cursors (same organisation, original work).

Fixes #438
2026-10-14 18:11:06 +02:00
aiongg 179a6c5f4e Tools panel: Selection is the filled arrow, Direct Selection the hollow one
Fixes #437
2026-10-14 17:59:20 +02:00
Claude 23105a6df9 Merge upstream main (0.8.0) into small-frame-wrap
Conflict: crates/compose/src/tests.rs, both sides added tests at the same place (upstream's #83 Jump Object tests, our tombstone tests); kept both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CgGsJkVe5GYG9qK6VFdECa
2026-10-14 15:50:20 +00:00
Sean HammondandClaude Opus 5.5 54305b11eb Drop caps: scale with the cap's point size, as InDesign does
A drop cap came out the same size whatever its point size: the fit
(drop + body cap height) / (the cap's own cap height) cancels the cap's
size, since its own cap height grows with it. InDesign fits the cap as if
it were set at the body text's size and scales that by the cap's size over
the body's, keeping its baseline: a larger cap rises above the first line,
a smaller one falls short of it. Measured against an InDesign capture
(Palatino, 14 pt body, 18 pt italic T, 2 lines): cap height 2.04x the line
gap there, 2.03x predicted.

The cap's box (selection highlight, caret) now reaches the top of a cap
that rises above its line; selected glyphs are drawn inverted, so the part
outside the box would vanish. A one-line cap still keeps its own size
when that is smaller.

Test: drop_cap_scales_with_its_point_size (a 15 pt cap over 10 pt text is
1.5x the fitted height on the same baseline, 7.5 pt is 0.75x, the body
lines don't move, the box covers the cap). Before the fix the 15 pt cap
was 30.7 pt, the same as at 10 pt; with it, 46.05 pt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CgGsJkVe5GYG9qK6VFdECa
2026-10-14 15:37:43 +00:00
Marco Arnulfo 8ce1292d0e Footnotes: Span Footnotes Across Columns sets notes across the frame (fixes #915) 2026-10-14 17:04:51 +02:00
midasmatterhorn e9bda1f2d9 idml: cap IDML package part size on import instead of reading unbounded 2026-10-14 18:01:41 +03:00
Marco Arnulfo 52eac14f2c PDF: a placed PDF 1.7 with /Version /1.7 in its catalog goes into PDF/X-4 exports (fixes #907) 2026-10-14 16:48:52 +02:00
ujo4evaandClaude Opus 5.5 a0de7a1e07 Linux: Arch package without pacman's permission and mtime warnings
nfpm (2.47, 2.48) writes Go's directory bit into the mode of each directory a `type: tree`
entry walks (0o20000000755), so installing the package warned "directory permissions differ"
on every shared directory under /usr/share. It also stamps the files and .MTREE a moment apart,
so `pacman -Qkk` reported most files as modified. The Arch build now lists usr/share file by
file (nfpm then gives the parent directories a plain 0755) and fixes the time with
SOURCE_DATE_EPOCH (the commit time unless set), which also makes the package reproducible.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 15:41:04 +01:00
KnottyDyes 0d77f39443 Docs: explain hyphenation defaults and image fitting modes to agents
Command descriptions left the new-text hyphenation default and image fitting outcomes implicit. State the default and each fitting mode's semantics, and add an MCP example that disables hyphenation. No behavior changes.
2026-10-14 08:39:00 -06:00
Marco Arnulfo b12e94c11d Package: a missing link stays missing, with no empty file in Links/ (fixes #908) 2026-10-14 16:37:55 +02:00
Marco Arnulfo 455442615b Color parsing: bare CMYK is always 0..100, so C 1 is a 1 % tint (fixes #910) 2026-10-14 16:29:10 +02:00
noah1400 44b24d32ba Render: wide effect blurs are drawn at a lower resolution (#904)
A drop shadow, inner shadow or outer glow with a large size needed
gigabytes for one render: the multithreaded pipeline's offscreen image
grew by three times the blur on every side, and vello pads its own
filter layer by as much again, on single-threaded contexts too. A blur
wider than 1,024 device pixels is now drawn offscreen at a lower
resolution, where it is that wide, and scaled back up. It looks the
same, and both buffers stay close to the window's size.
2026-10-14 16:18:13 +02:00
Govinda RoyandClaude Opus 5.5 c7b3ee4f45 Layers panel: a new selection opens its layer and scrolls its row into view
Selecting an object on the canvas left the Layers panel as it was: its
layer could be closed and its row out of view. A new selection now opens
the layer it is on and scrolls its row into view once (closing or scrolling
afterwards is left alone); selected rows are highlighted, and an object
selected inside a group shows as its group. Unnamed image frames are listed
by their file name, as InDesign lists placed images.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:11:35 +06:00
Brandon ThomasandClaude Opus 5.5 11a51d5b66 Release 0.8.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.8.0
2026-10-14 09:06:57 -04:00
ujo4evaandClaude Opus 5.5 6cacf4e8b7 Linux: build an Arch package (.pkg.tar.zst)
package.sh now also builds designcraft-<ver>-linux-<arch>.pkg.tar.zst with nfpm's archlinux packager,
from the same nfpm.yaml. It is named by the bundle id (ai.storyteller.designcraft), provides designcraft and
conflicts with designcraft, designcraft-bin and designcraft-git, so an AUR helper doesn't take it over and ArtCraft
Launcher can tell it from an AUR build. The README lists it with the other Linux downloads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:54:12 +01:00
moppeeerandClaude Opus 5.5 bf2cf8842b Direct Selection: pressing on a corner of an unselected object pulls just that corner
Chris Nielsen's "The Adobe InDesign Toolbox" (10:10): with the White
Arrow he clicks outside, then presses on a frame's corner and pulls it up,
turning the rectangle into a lopsided triangle. DesignCraft only looked for
anchors on objects already selected, so the press fell through to moving
the whole frame.

The Direct Selection tool now also looks at the anchors of the object
under the pointer: on one, it selects the object and drags that point, in
one undo step. Elsewhere on the object it still drags it whole; Shift-
click still toggles the selection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:53:40 +02:00
Govinda RoyandClaude Opus 5.5 edb268af12 Text: kerning takes a typed value, and the Character panel has it
The kerning control in Properties was a menu of Metrics, Optical and 0:
manual kerning, which the engine already supports in 1/1000 em, couldn't
be entered, and the Character panel had no kerning at all (#896).

- One kerning control: its label shows Metrics, Optical, 0 or the manual
  value; its menu keeps the three choices and adds a number field with a
  spinner for a manual value (-1000 to 10000).
- Properties and the Character panel (next to Tracking) both use it.

Fixes #896.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:22:44 +06:00
moppeeerandClaude Opus 5.5 d700932446 New Section test: start page 3 at 5, an odd number, so it holds with #889's facing-page sides
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:07:17 +02:00
moppeeerandClaude Opus 5.5 69240ab8c2 ui_shot: render every script line, so long scripts don't time out on the GPU
Replaying Chris Nielsen's "Numbering Page Sections" on a 50-page facing
document, a script that set seven sections without screenshots in
between ended in "render failed: PollError: The requested Wait timed out
before the submission was completed". Harness::step doesn't render, so
the texture changes of every frame (each edit redraws the Pages panel's
50 thumbnails) waited for the screenshot's render, which then uploaded
them all at once.

ui_shot now renders after each script line (the image is dropped), so
texture changes are applied as they come. The same script renders.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:42:45 +02:00
moppeeerandClaude Opus 5.5 f4aa93f17d Type menu in InDesign's order; Character ⌘T, Paragraph ⌥⌘T and Current Page Number ⌥⇧⌘N
Chris Nielsen's "Numbering Page Sections" (2:09) reaches Insert Special
Character › Markers › Current Page Number through InDesign's Type menu:
Font, Size, Character, Paragraph, Tabs, Glyphs, Story, the style panels,
Create Outlines, Find Font, Change Case, Type on a Path, Notes, Track
Changes, the footnote and endnote items, Hyperlinks & Cross-References,
Text Variables, Bulleted & Numbered Lists, the insert submenus, Fill with
Placeholder Text and Show Hidden Characters. DesignCraft's began with Find/
Replace Font and Create Outlines and held alignment, Bold/Italic and point
size steps InDesign keeps out of its menus.

- Size ▸ (6–72 pt), Character, Paragraph, Glyphs, Character Styles,
  Paragraph Styles (InDesign's shortcuts: ⌘T, ⌥⌘T, ⌥⇧F11, ⇧⌘F11, ⌘F11),
  then InDesign's order. Notes ▸ holds New Note and the Notes panel.
- Current Page Number carries ⌥⇧⌘N (app.insertCurrentPageNumber).
- Alignment, Bold/Italic/Underline/All Caps, point size steps and
  Paragraph Rules leave the menu; their shortcuts and panel buttons stay.
- DesignCraft's math and CJK items follow after Show Hidden Characters.
- Labels "Bulleted & Numbered Lists" and "Show Hidden Characters", with
  translations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:38:39 +02:00
moppeeerandClaude Opus 5.5 be0fbb75c0 Numbering & Section Options opens as New Section on a page without one, as InDesign's
Chris Nielsen's "Numbering Page Sections" (4:43): with page 3 selected,
the Pages panel menu's Numbering & Section Options opens InDesign's New
Section window: Start Section checked, Automatic Page Numbering chosen
and 1 offered in Start Page Numbering at, which stays editable. The window
here was titled Numbering & Section Options, Start Section was off and
the field showed the page's current number, greyed out.

- Opened on a page that doesn't start a section, the window is New
  Section: Start Section on and 1 offered; on a section's first page it
  is Numbering & Section Options, as before.
- Start Page Numbering at and Start Chapter Numbering at stay editable;
  typing a number chooses that option.
- "New Section" translated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:32:25 +02:00
moppeeerandClaude Opus 5.5 c20635aacf Pages panel: spread labels and section markers as InDesign's; it follows the page in view
Chris Nielsen's "Numbering Page Sections" reads the Pages panel all along:
InDesign labels each spread ("2–3", "2, 1" where a section starts inside
it, "8, A", "ii–iii"), puts a small triangle over each section's first
page, and the panel scrolls to the page selected ("the pages panel jumps
down there", 6:46). DesignCraft named each page under it ("2 1") and drew
its triangle over the spread in view.

- One label per spread (spread_label): a range with an en dash for pages
  numbered on in one section, the names apart when a section starts inside
  it. Positions under absolute numbering. A blue badge marks the spread in
  view; a click on the label goes to the spread.
- A triangle above every page that starts a section (page 1 included).
- The panel scrolls to the spread of the page in view when that page
  changes.
- Page thumbnails are named for screen readers ("Page 1").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:22:11 +02:00
moppeeerandClaude Opus 5.5 188c4f7007 Facing pages take their side from their section's page numbers
Chris Nielsen's "Numbering Page Sections" (7:03): starting a section at
page 1 on a left page (the spread 8–9 selected) turns it into a lone
right-hand page 1 in InDesign, and the pages after it shuffle. DesignCraft
kept the page on the left, so odd page numbers sat on left pages.

- Document::repaginate gives each facing page the side of its number in
  its section (odd: right, or left bound right to left). Document Setup's
  Start Page # is one case of it.
- layout.section repaginates when a section starts, changes or is removed;
  objects go with their pages, in one undo step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:03:58 +02:00
sanyamsingh001andCodex 84bcbe2f01 Merge tested main 0f4f382b0e into PR #456
Preserve the reviewed PR behavior and tested upstream base.

Co-Authored-By: Codex <codex@openai.com>
2026-10-14 19:55:34 +10:00
Ikki Nishihara adc03eedf0 Merge upstream main into fix/links-source-path-569
Resolve conflicts with the progress docs and the MCP reconnect test:
- ROADMAP.md: keep the upstream text-threads entry and add the Links source
  path entry (newest first, latest update date).
- crates/mcp/src/backend.rs: take upstream, which already carries the same
  nonblocking-socket fix, so this branch no longer changes the file.
2026-10-14 18:41:35 +09:00
Gert Pellin a430a44e42 Merge origin/main into fix/776-unknown-params
Conflicts:
- ROADMAP.md: kept both log entries, newest first.
- crates/engine/src/cmd/object.rs: object.textFrameOptions params take
  main's firstBaseline values and keep this branch's columnsKind key.
2026-10-14 11:35:53 +02:00
sanyamsingh001andCodex 44485e08da Merge tested main 0f4f382b0e into PR #845
Preserve the reviewed PR behavior and tested upstream base.

Co-Authored-By: Codex <codex@openai.com>
2026-10-14 19:33:57 +10:00
Andres TorresiandClaude Opus 5.5 53374aab24 Type tool: dead keys and input-method composition on the canvas
Typing into a text frame never turned on the OS input method, so macOS
dead keys didn't compose: ⌥E then I typed "ei" instead of "í" (same for
⌥N, ⌥U and Japanese/Chinese input). The canvas now asks for the input
method while the Type tool has a caret and handles its events.

The text being composed shows in the story as an interaction preview
(new `text.compose` command), so it takes the format the next typed
character gets, drawn on a yellow box. On commit it's dropped and the
result typed with `text.insert` (one undo step); any other edit, tool
change or drag drops it first and tells the input method to forget it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:31:32 +01:00
moppeeerandClaude Opus 5.5 38b770230a docs: object.fit leaves locked objects and objects on locked layers as they are
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:31:30 +02:00
Gert Pellin 592e6026f4 EPUB fonts: skip bitmap-only fonts, and write the face's numeric weight
A font whose fsType allows embedding bitmaps only (bit 9, 0x0200) was
packaged with its outlines; it is now refused like a restricted one.
char_css wrote font-weight: bold for any style containing "bold", so
Semibold showed as Bold and Light as Regular; it now writes the numeric
weight (100-900) and style from the face's style name. Same approach as
aiongg's integration branch (#259, 8f54d1cc), with his test.
2026-10-14 11:19:31 +02:00
Gert Pellin 6e60bbccbe EPUB: read the cover image through a capped reader (256 MiB)
coverImage was read with an uncapped std::fs::read, so a huge file or a
device like /dev/zero could exhaust memory. Read it through the data
merge's capped reader, which now also stops the read itself at the cap
(a device reports no length), as in aiongg's integration branch (#259,
6eae3620), with /dev/zero as a test.
2026-10-14 11:09:11 +02:00
sanyamsingh001andCodex 17e280335a Merge tested main 0f4f382b0e into PR #458
Preserve the reviewed PR behavior and tested upstream base.

Co-Authored-By: Codex <codex@openai.com>
2026-10-14 19:08:24 +10:00