[ui] Annotation fixes, shortcut modal redesign and locale updates#2026
Merged
Conversation
The pencil base widths were doubled, but the unit assertions still expected the old pixel values (the pre-commit hook runs eslint, not vitest, so the failures went unnoticed). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
PSBrush overrides BaseBrush.initialize without calling super, so fabric's round strokeLineCap/strokeLineJoin defaults were lost and pencil strokes rendered with flat ends. Set them on the brush at each creation site and on reloaded paths/PSStrokes (so older annotations stored as butt also render rounded), in the main and comparison render paths. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Leaving fullscreen can move the media without changing its size (e.g. back into the narrow task-info panel). The AnnotationCanvas ResizeObserver only fires on size changes, so the overlay stayed at its fullscreen rect and annotations drifted until a manual resize. Recompute the canvas bounds in the post-transition fallback, which is what that manual resize did. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AddAttachmentModal and AddPreviewModal duplicated the dashed upload-zone styling around the file-upload widget. Extract it into a FileUploadZone widget that wraps FileUpload, forwards reset/onDrop/filesChange, and makes the whole dashed area clickable. AddPreviewModal gains the same zone styling; the drag -and-drop overlay handling in both modals is unchanged. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Changing the task type in a synced review room sent the other screens back to the first element (and could bounce both screens in a loop). Three causes, fixed together: - The entities rebuild reset the player to the first entity. Preserve the current entity across the rebuild and re-select it when it survives. - The receiving screen left and rejoined the live room on a same-id playlist refresh, desyncing it. Only churn the room when the playlist id actually changes. - Room navigation synced by entity index, but the receiver re-fetches the playlist and can order shots differently than the sender (which mutates in place). Resolve the target entity by id, falling back to index. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The task-type modal only let you switch all entities to a chosen task type's latest revision. Add a second action that bumps each entity to the latest revision of the task type it is already showing, preserving a playlist that mixes task types. Reorganise the modal into a generic "Update selected versions" dialog with two side-by-side cards (change task type / update to latest). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The shortcut modal omitted most player shortcuts. Add a Player group (play/pause, frame and annotation navigation), the copy/paste and pan-image annotation shortcuts, and the move-entity shortcuts, and move the object viewer group last. Align the playlist draw shortcut to plain "d" so it matches the preview player and the modal. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Lay out each shortcut group as a Card in a two-column grid (object viewer spans full width), render keys as keycap-style kbd chips, and add a lucide icon next to each group title. Rename the footer button to Close. Card widget gains a soft elevation shadow in both themes; the shortcut modal tints its cards one step darker so they read against the white modal box (Settings/Profile keep the white default, as their cards sit on a grey page). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Fill the 132 keys present in en.js but missing from fr.json (playlist sharing, project templates, guest share view, comment-move, desktop notifications, player shortcuts, …). fr.json now matches en.js 1:1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
"configure the from scratch" -> "configure the production from scratch". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fill the 166 keys present in en.js but missing from each non-French
locale (playlist sharing, project templates, guest share view,
comment-move, desktop notifications, player shortcuts, 2FA, …).
da/de/es/fa/ja/ko/nl/pt/ru/zh/zh_tw now match en.js 1:1.
Translated with an LLM (per-language, preserving {placeholders} and
plural-segment counts) as we move off POEditor.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Hungarian was the most incomplete locale (44%). Fill the 1025 missing
keys via LLM translation (6 parallel section-batches, preserving
{placeholders} and plural-segment counts, informal "te" register),
drop 10 stale keys no longer in en.js, and normalise indentation to
2 spaces to match the other locales. hu.json now matches en.js 1:1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problems
Solutions