Skip to content

Drag feedback: floating ghost card + lifted palette entry - #2

Merged
SimplyJustJessie merged 3 commits into
mainfrom
claude/visual-redesign-dark-theme-e1o79q
Jul 18, 2026
Merged

Drag feedback: floating ghost card + lifted palette entry#2
SimplyJustJessie merged 3 commits into
mainfrom
claude/visual-redesign-dark-theme-e1o79q

Conversation

@SimplyJustJessie

Copy link
Copy Markdown
Owner

Follow-up to #1: grabbing a Source gave zero visual feedback — Avalonia's DragDrop renders no native drag image, so nothing appeared to move until you hovered a column.

What it looks like now

Mid-drag: the grabbed palette entry (Zen, left) dims and sinks, a ghost card floats under the pointer, and the drop column glows:

drag feedback

What changed

  • Floating drag ghost — a small card (accent border, waveform icon, the Source's title) follows the pointer for the whole drag, with a quick scale pop on lift-off. It lives in the TopLevel OverlayLayer and is repositioned from DragOver events, listened on the TopLevel with handledEventsToo since columns mark their own DragOver handled.
  • Continuous tracking — the board root sets DragDrop.AllowDrop, so DragOver keeps firing between columns and the ghost never freezes; drops that land outside a column are refused there with a no-drop cursor (instead of the misleading default copy cursor).
  • Lift feedback on the source — the grabbed palette entry dims to 45%, tints accent and scales to 0.97 while its ghost is in flight, restoring on release.
  • PlumbingDragSourceBehavior gains a DragLabel attached property (bound to the Source title in the palette) to feed the ghost; ghost teardown sits in a finally, so a cancelled or failed drop can never strand it on screen.
  • The --screenshot tool now stages the full mid-drag scene for the shot above.

Verification

  • dotnet build clean, all 65 unit tests pass
  • --smoke and --smoke-ui both PASS

🤖 Generated with Claude Code

https://claude.ai/code/session_01Jac4PWhnEzh7j5f5NaafJ1


Generated by Claude Code

claude added 3 commits July 18, 2026 10:37
Grabbing a Source previously gave zero visual feedback — Avalonia's
DragDrop renders no native drag image, so nothing appeared to move.

- A ghost card (accent border, waveform icon, Source title) now floats
  under the pointer for the whole drag, with a quick scale pop on
  lift-off. It lives in the TopLevel OverlayLayer and follows DragOver
  events, listened on the TopLevel with handledEventsToo since columns
  handle their own.
- The board root sets DragDrop.AllowDrop so DragOver keeps firing
  between columns and the ghost never freezes; drops outside a column
  are refused there with a no-drop cursor.
- The grabbed palette entry dims and sinks slightly (accent tint,
  scale 0.97) while its ghost is in flight, and restores on release.
- DragSourceBehavior gains a DragLabel attached property (bound to the
  Source title) to feed the ghost; ghost teardown is in a finally so a
  failed drop can't strand it.
- The --screenshot tool stages the full mid-drag look (dimmed entry,
  ghost over the highlighted column) for docs/screenshots/board-dragover.png.

Build, 65 tests, --smoke and --smoke-ui all pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jac4PWhnEzh7j5f5NaafJ1
GitHub Actions workflow (ubuntu-latest, .NET 10) running on pushes to
main and on every PR:

- dotnet restore / build (Release) / test (65 unit tests)
- the two window-free smoke checks (--smoke viewmodel flows,
  --smoke-ui headless render with binding-error detection)
- renders the board via --screenshot (headless Skia) and uploads the
  PNGs as a build artifact, so every PR carries an up-to-date visual
  of the UI it ships

Linux-only by design — AutoRoute targets PipeWire/WirePlumber.
Superseded runs on the same ref are cancelled. CI badge added to the
README.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jac4PWhnEzh7j5f5NaafJ1
- scripts/build-appimage.sh publishes a self-contained linux-x64 build
  into an AppDir (AppRun, desktop file, icon, /usr/bin/autoroute
  symlink) and packs it with appimagetool (downloaded on demand,
  FUSE-less via --appimage-extract-and-run). Self-contained means no
  .NET dependency at runtime; the glibc floor comes from Microsoft's
  runtime binaries, not the build machine.
- CI gains an "AppImage (linux-x64)" job after the main job: builds
  the image, boots it for --smoke and --smoke-ui, and uploads it as
  the AutoRoute-AppImage artifact on every PR.
- New release workflow: pushing a v* tag builds + smoke-tests the
  AppImage and attaches it to an auto-generated GitHub Release.
- packaging/: shared .desktop entry and a generated 256px icon
  (gradient rounded square + waveform, matching the in-app logo).
- packaging/aur/PKGBUILD: ready-to-publish template (framework-
  dependent build, pipewire/wireplumber/dotnet-runtime deps) for the
  planned AUR package; needs a LICENSE file and a tagged release
  before it can go up.
- README: install section now covers AppImage and the AUR plan.

Verified locally: the published AppDir passes --smoke and --smoke-ui;
the appimagetool step runs on CI (sandbox egress blocks the download
here).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jac4PWhnEzh7j5f5NaafJ1
@SimplyJustJessie
SimplyJustJessie merged commit 786c316 into main Jul 18, 2026
2 checks passed
SimplyJustJessie pushed a commit that referenced this pull request Aug 24, 2026
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.

2 participants