Widget grid UX: drag to move, Add-widget picker, create-via-chat - #24
Merged
Conversation
kateebonner
force-pushed
the
kate/widget-dnd-create
branch
2 times, most recently
from
July 15, 2026 05:51
906b9e6 to
1d05fc1
Compare
kateebonner
changed the base branch from
kate/nav-defaults-capsule
to
local/amicode
July 15, 2026 05:54
…eate-via-chat Reorder is now DRAG: each card's ⋯ menu gains one ⠿ Move entry that flips move mode — light scrim + dashed ring, no control pill, no name overlay (Kate: cards must look the same while dragging) — and the cards become draggable. solid-dnd sortables (the dep packages/app already uses 4×), move mode only: the scrims make the whole grid surface host-owned, so no sandboxed iframe can eat a pointermove. The rendered list must NOT reorder mid-drag — solid-dnd previews the shuffle purely with transforms, and a DOM reorder moves the active card's transform origin, detaching it from the pointer (bug found live) — so the array commit lands ONCE at drop via applyBucketOrder (each save is a POST that remounts every widget iframe). Buckets (hero/tile) stay separate sortable groups; cross-bucket drops are no-ops. Arrow keys on a focused card are the invisible keyboard path; move-up/move-down buttons are gone. + Add widget (replaces New widget…, per Kate) drills the ⋯ menu into a picker: restore hidden entries, pin registry widgets never added (same entry shape the chat's Pin-to-dashboard appends), or "Create new widget…" — which hands off to a fresh chat via startWithPrompt() with the composer prefilled (not auto-sent); amicode_author_widget takes it from there and the preview card's Pin closes the loop. The move-mode tray keeps restore + create; an empty board (everything hidden) shows a quiet Add widget… line so the flow is never dead-ended. Removed per Kate: the fork option (server route stays; no UI entry), Arrange dashboard…, the edit-mode control pill and name overlay, and the old Move up/Move down menu items. Dead code swept: posInRow, onFork prop + home's forkWidget, and the orphaned pill/name CSS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kateebonner
force-pushed
the
kate/widget-dnd-create
branch
from
July 15, 2026 05:56
1d05fc1 to
3d1d971
Compare
7 tasks
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
Stacked on #23 (merge that first). Rebuilds the dashboard customization flow around Kate's live design direction — the ⋯ menu is the only chrome; everything else is direct manipulation.
⠿ Move — drag replaces buttons
@thisbeyond/solid-dnd(already used 4× in the app) — move mode only, where the scrims make the whole grid surface host-owned so no sandboxed iframe can eat a pointermove.applyBucketOrder) — important anyway, since every save is a POST that remounts all widget iframes.+ Add widget — opens the tray
The tray is the one place every available widget collects (Kate's call): ⋯ → Add widget opens it directly. Hidden entries restore, never-pinned registry widgets pin (same entry shape the chat's "Pin to dashboard" appends — chat-authored widgets now surface here instead of being invisible until pinned from chat), and create new widget… hands off to a fresh chat via
startWithPrompt()with the composer prefilled (not auto-sent);amicode_author_widgettakes it from there and the preview card's Pin closes the loop. An all-hidden board shows a quiet "Add widget…" line so the flow is never dead-ended.Removed (Kate's calls)
Fork (UI entry only; server route stays) · Arrange dashboard… · the edit-mode control pill + name overlay · Move up/Move down · the interim in-menu add picker. Dead code swept:
posInRow,onFork/forkWidget, orphaned pill/name/picker CSS.Verification
bun turbo typecheck(app+ui) clean;bun testui 221 / app 388, 0 fail🤖 Generated with Claude Code