- "+N more" was for the whole session: it is for the selection it was
asked of, and another selection's long list is short again.
- A keyword two photos spell differently was offered twice under one
widget id, and a click on it gave nothing: it is offered once.
- The offers followed the box out of the panel when it scrolled away and
covered it near the bottom of the window: they are not drawn while the
box is out of sight, and go above it where there is no room below.
- The highlight was a line number, so a change of the library moved it to
another keyword, which Return then gave: it stays with its keyword.
- Esc after an offer was taken brought back keywords just added; Shift or
Alt with the arrow keys moved the highlight instead of the text cursor;
a refused add lost the typed text without a word.
- A name the library lacks was looked up in the library twice per change
of the text: once.
- A wrong value under keywordChips or foldedSections discarded the whole
settings file: it is read as the default.
- Groups follow the tree ("Places > Italy" right after "Places"); a heading cut
short says its whole name on hover; the number of chips measured for a
shortened list follows the box's width; the selection is asked for once
a frame.
- The nine new plain messages are translated in every language.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With several photos selected the box says how many its keywords are of.
A chip's x is a target as tall as the chip and 22 pt wide (it was 14 pt
square) that lights up on its own, and the chip is 4 pt narrower for it.
Taking a keyword off several photos, by the x or the chip's menu, says
which keyword left how many photos and that Edit > Undo puts it back; a
refused removal says why. Chips and their x show the keyboard focus, and
the Add keyword box says in its tooltip that commas separate keywords.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What matches the text being typed (after the last comma) is offered right
under the box instead of in the Suggestions block further down: Down / Up
move through the offers, Return or a click gives the highlighted one (with
the keywords typed before it) and leaves the cursor in the box. With none
highlighted, Return gives what was typed, as before.
A name the library doesn't have is announced as a new keyword, with the
keyword it would go inside, before Return creates it.
The offers have a cache of their own: they and the suggestions are both
asked for on every frame of typing, and each looks through the library's
keywords.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The titles of Keywords and of the Keyword List fold their sections shut
(kept in the UI state as foldedSections), so the list of every keyword is
reachable however many keywords the selection has.
Settings > Interface > Keywords of the selection > Grouped by parent
(off by default): keywords inside the same keyword share a line naming
it, their chips say only what is below it and sit side by side, a list
of more than ten lines stops after eight with "+N more", and the
suggestions say the keyword's own name.
A selection without keywords says "No keywords yet", as the other two
views of the box do.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Treat a zero-width feather transition as a hard edge so exact-radius pixels remain unchanged, including at zero opacity. Add actual image regressions for all spot modes, image corners and two clone output sizes.
Validation: both new regressions failed on the original implementation and pass here. Formatting, workspace Clippy, HEIF and a generated-photo app smoke test pass. The unfiltered workspace gate remains blocked by the existing all-masks overlay test tracked by #1599; later parity, layers, assets and WASM stages are pending. This is a source checkpoint, not a green release candidate.
Contributor: @eliets2