Skip to content

Raised surfaces, quieter toolbar, and the menus rebuilt, on main - #166

Merged
SunkenInTime merged 7 commits into
mainfrom
ui-polish-main-2
Sep 13, 2026
Merged

Raised surfaces, quieter toolbar, and the menus rebuilt, on main#166
SunkenInTime merged 7 commits into
mainfrom
ui-polish-main-2

Conversation

@SunkenInTime

Copy link
Copy Markdown
Owner

The rest of the cloud branch's UI pass (#163), brought to main on top of #164. Cloud-only pieces (the sync button, the outbox status card, the cloud-exit dialog) are left out; everything else is the same look.

Raised surfaces

Selected and primary states are no longer flat fills. InsetShadowDecoration (lib/widgets/inset_shadow_decoration.dart) paints inner shadows the way Chromium does, plus a gradient fill, drop shadows, and a border, and it tweens from a plain BoxDecoration. Settings.raised(color, radius) builds the lit surface from any base color: a fill lighter at the top, a 1px light inside the top edge, a 1px shade inside the bottom, a 1px shadow beneath, bare sides. Two lightness numbers set the lift everywhere.

Applied to: the library tab, checked sidebar tools, the thickness and agent-filter pills, the active page row and its transition sweep, the strategy card's hover ring, primary buttons through the Shad theme, the placement banner, and toasts. The page row is rebuilt as fixed layers so switching states no longer shifts its content by the resting border's width. Active items keep their siblings' weight; the surface marks them.

Toolbar and map card

Toolbar glyphs drop to the 200 Lucide weight and rest on zinc-300, coming up to foreground on hover. The map card's width is derived from its contents so both inner gaps are 4pt.

Menus

The strategy quick switcher is a proper menu now: popover grey, hairline border, 12px radius, the floating-menu shadow, flat ghost rows with a thumbnail. Its bar clips both segments so hover fills stop spilling past the border. The Save changes dialog drops its extra padding and uses a ghost Cancel. The folder dialog focuses its field and submits on Enter through one guarded path.

Also

Remaining Lucide sweep in the color picker, expansion tile, demo tag, and delete area; DESIGN.md gains the Icons section and the raised-surface rule; analyzer infos cleared.

Tests: full suite passes apart from update_checker_test and windows_desktop_update_controller_test, which fail on a clean main too.

🤖 Generated with Claude Code

SunkenInTime and others added 7 commits September 13, 2026 00:55
Flutter has no inner shadow, so InsetShadowDecoration paints them the way
Chromium does: clip to the box, fill the plane minus the offset-and-shrunk
box, blur the ring. It also takes a gradient fill, outer drop shadows, and a
border, and it tweens from a plain rounded BoxDecoration so animated
containers can fade a selection in.

Settings.raised(color, radius) builds the lit surface every selected or
primary state now shares: a fill lighter at the top, a 1px light inside the
top edge, a 1px shade inside the bottom, a 1px shadow beneath, bare sides.
Two lightness numbers set the lift for every base color. DESIGN.md records
the rule under Tonal First. Pixel tests cover the edges, the gradient, the
drop shadow, and the tween.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Toolbar glyphs drop from the 300 to the 200 Lucide weight and rest on
zinc-300 instead of full white, coming up to foreground on hover. The sync
popover pins its text to the start (the editor's centered alignment leaked
in), loses its bold title, and puts its actions in one right-aligned row.

The map card was 262pt wide with 260pt of contents, so the slack landed on
the right of the side toggle. Its width is derived from the tile, gap, and
toggle now, so both sides get the same 4pt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…, and delete area

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… system

Selected and primary states are raised surfaces now instead of flat violet
or zinc fills: the library tab, checked sidebar tools, the thickness and
agent-filter pills, the active page row and its transition sweep, the
strategy card's hover ring, primary buttons through the Shad theme, the
placement banner, and toasts. The page row is rebuilt as fixed layers so
switching states no longer shifts its content by the resting border's
width. Active items keep their siblings' weight; the surface marks them.

The strategy quick switcher becomes a proper menu: popover grey, hairline
border, 12px radius, the floating-menu shadow, flat ghost rows with a
thumbnail. Its bar clips both segments so hover fills stop spilling past
the border. The cloud-exit dialog lays its actions out in one wrapping
row with sentence-case labels. The cloud outbox banner stops pushing the
library grid down and floats in the corner as a status card instead.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The folder dialog on main had no shared submit path, so Enter and Done now
both go through one guarded _submit. Two imports the Lucide sweep had
already added on main are deduplicated, and the analyzer's mechanical infos
are cleared.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 45 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: c52fdafe-970e-4fa7-9f2b-e28bd4d64f30

📥 Commits

Reviewing files that changed from the base of the PR and between e14b94d and 97ca04c.

📒 Files selected for processing (23)
  • DESIGN.md
  • lib/const/settings.dart
  • lib/main.dart
  • lib/services/unsaved_strategy_guard.dart
  • lib/widgets/color_picker_button.dart
  • lib/widgets/custom_segmented_tabs.dart
  • lib/widgets/delete_area.dart
  • lib/widgets/dialogs/strategy/rename_strategy_dialog.dart
  • lib/widgets/editor_toolbar.dart
  • lib/widgets/folder_edit_dialog.dart
  • lib/widgets/inset_shadow_decoration.dart
  • lib/widgets/library_title_strip.dart
  • lib/widgets/line_up_placer.dart
  • lib/widgets/map_selector.dart
  • lib/widgets/map_tile.dart
  • lib/widgets/pages_bar.dart
  • lib/widgets/selectable_icon_button.dart
  • lib/widgets/strategy_quick_switcher.dart
  • lib/widgets/strategy_save_icon_button.dart
  • lib/widgets/strategy_tile/strategy_tile.dart
  • test/sunset_scale_migration_test.dart
  • test/unsaved_strategy_guard_test.dart
  • test/widgets/inset_shadow_decoration_test.dart

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 3/5

The exercised save, error-handling, and decoration-transition behaviors work as intended, but the page-row transition has not been measured in a functioning rendered interaction.

What we checked:

  • Duplicate folder submission: Enter and Done call the same _submit method, which returns when a submission is already active. The guard remains set while persistence is awaited, and Done is disabled for the same interval. T-Rex
  • Raised surface animation compatibility: Compatible rounded BoxDecorations are converted into InsetShadowDecoration before interpolation. Focused forward and reverse interpolation tests and the decoration rendering suite passed. T-Rex
  • Autosave failure exit guard: The exit guard catches autosave errors, reports the failure, and returns false before invoking navigation continuation. Focused provider and guard failure-path tests passed. T-Rex
  • The PR verified that Enter and Done reach the same guarded folder submission path and that the guard remains set through the awaited persistence operation. T-Rex
  • The code path for decorations was validated: BoxDecoration instances are converted before interpolation, and the decoration rendering tests passed. T-Rex
  • The pending autosave flush was shown to expose a save error to the exit guard, the guard reports the failure and does not invoke navigation continuation, and the related failure-path tests passed. T-Rex
  • The focused page transition test passed, but a base-versus-head comparison could not complete due to base compilation failure and a Flutter layout assertion in the head run, so no coordinate comparison was obtained. T-Rex

Summary

  • This update refreshes raised control surfaces, toolbar and quick-switcher presentation, map-selector sizing, and folder-dialog keyboard behavior. Focused Flutter checks confirmed that folder submissions reject repeats while a save is active, rounded decorations transition into the raised treatment, and a failed strategy autosave blocks navigation while reporting the failure.
  • T-Rex validation blocked A tool limitation prevented a rendered page-row position comparison: the base revision could not compile, and the head browser probe hit a Flutter RenderBox was not laid out assertion before the page-row interaction. The exact missing item is a working Flutter widget/browser rendering harness for this interaction. Configure VMs

Reviews (1) · Last reviewed commit: "Adapt the ported UI pass to main"

@SunkenInTime
SunkenInTime merged commit 5b48f50 into main Sep 13, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant