Repository navigation
Safelight redesign - #1
Merged
Merged
Conversation
…ntrols Rework the UI from floating "glass" cards over a void into a docked, native-feeling desktop layout: - Tokens: graphite surfaces separated by hairlines (no blur, no glow), a single safelight-amber accent reserved for edits, primary actions, ratings and focus; system font (Segoe UI Variable) instead of a web font; arrow cursor on controls; thin scrollbars; spring/ease-out motion tokens and a global reduced-motion rule. - Title bar: data-driven menus with check marks and shortcuts, outside click / Escape close, Windows-style hover switching, the Gallery | Develop switch centred, Windows caption buttons. - Command bar docked above the canvas (filename + actions + zoom) replaces the floating pill and filename chip; collapses into "⋯" by its own width. - Docked inspector (histogram + module) and tool strip with a sliding amber indicator replace the floating column and icon rail. - Filmstrip and status bar docked full width; the filmstrip now also shows after File > Import. - Controls: SliderRow (edited dot, fill from the default, label scrub and double-click reset), Segmented with a sliding indicator, neutral chips, flat module header, sentence-case section labels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- Gallery: contact-sheet cells (whole photo letterboxed in a 4:3 well, caption and rating underneath), smaller 240px tiles, neutral selection ring and check badge, staggered entrance; virtualization row height follows the new cell. - Dialogs: opaque popover surface that scales in from .97 on the spring, flat header, plain close button, tokenised form fields; fix the selected format/preset card and the active sidebar tab never showing their selected state (inline styles were overriding the state CSS). - Welcome screen: calm start sheet — mark, tagline, action list with shortcuts, cross-fading tips; no emoji or all-caps accent labels. - Toasts: popover surface, semantic icon colour only (no stripe), rise in above the status bar on the spring. - Popovers, context menu, info popover and export progress share the pop-in entrance; RAW Decode, Settings and Enhance match the inspector. - Checkboxes and radios take the accent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- Command bar: measure the filename label's natural width and re-measure when the label or actions resize, so secondary actions fold into "⋯" before the filename truncates (it previously squeezed to "1 of"). - The command bar's "i of N" now counts the same list the filmstrip shows. - Switching modules cross-fades the module body. - Histogram channels toned down; reduced motion stops infinite animations after one cycle instead of spinning at 1ms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
Two faults in the main-process decode chain, reproduced on the PEN-F fixture padded to full length: - libraw.js and libraw.wasm are git-ignored, so a source checkout had only public/libraw/worker.js. The wasm rung aborted inside its worker without answering and every RAW open waited out the 60s watchdog before falling back. scripts/sync-libraw-wasm.cjs now copies the runtime in (postinstall and before build), the resolver requires the complete runtime, and LibRaw errors or a 0x0 open fail immediately with a clear reason (62s -> 0.9s when the runtime is missing). - The embedded-JPEG last resort ignored the ORF container orientation (ORF previews carry none), so a portrait ORF opened upright from the progressive preview and turned sideways when the full decode swapped in. It now orients like the preview and upscales with fit inside, so the 4:3 preview is no longer stretched to the IFD0 sensor box. Also: open dialogs list every supported RAW extension (CR3, RAF, ...), and per-file ORF debug logging in FileSystemService is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- Settings now holds only working settings: RAW defaults for new photos (demosaic, highlights, camera match) on the existing defaults store, the welcome-screen toggle, a real Clear for the memory cache, the rendering path and version. The read-only checkboxes and unwired selects are gone. - Shadows & Highlights rebuilt on SliderRow/Segmented/ChipButton (was ~900 lines of hand-built sliders on the old gray scale). - Crash screen, Shortcuts list (keycaps on hairlines, no emoji), canvas loading scrim, File Explorer rows and Batch stats restyled; dialog Cancel buttons share one 30px class with a quiet danger variant. - Unpreviewable photos get a neutral format tile instead of a red "Error" block, in the filmstrip and the gallery. - 2D canvas fills use CANVAS_SURROUND (= --vt-canvas) so a zoomed-out photo no longer sits in a darker box on the CPU path; the dev zoom overlay is gone. - Radius scale and popover shadow tokens added to :root; legacy dark-* utilities mapped onto Safelight instead of compiling to nothing. - No ALL CAPS labels left (Batch stats, upscale badge). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
- New hero, gallery and module-panel screenshots taken from the app (same photo set as before, 2x); RAW Decode, EXIF, mask and before/after shots are unchanged. - README and User Guide describe the docked layout instead of the floating glass workspace; Unreleased changelog entry for the redesign and the ORF decode fixes. - Polish found while shooting: tone-curve hint moved off the curve and debug lines removed, crop readout in tabular figures, status-bar separator spacing, gallery footer omits "0 RAW · 0 B". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKGuP5pugDLEdjbRdfvFUV
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.
What does this PR do?
Related issue
Checklist
pnpm run typecheckpassespnpm run lintpasses (0 problems)pnpm run testpassesScreenshots (if UI-related)