Skip to content

3.2 Window snapping and tiling: drag-to-edge halves, corner quarters, top maximize #102

Closed

Description

@xcjs

Goal

NEXT.md step 3.2 (Phase 3, Zack's lane). Design: Aero-style snap zones during WindowFrame drag - left/right edge = half, top edge = maximize, top/bottom corners = quarter; translucent preview overlay (fixed, pointer-events-none) while a zone is active; release applies the snap; a subsequent drag away from the snapped position restores the pre-snap rect. os.ts gains an explicit setWindowRect/snap action (store currently has no resize); pre-snap geometry rides on the OsWindow record. Workspaces are NOT in this issue (one purpose per PR) - will be split. Phone widths excluded (drag disabled by 3.1).

Done when

  • dragging a window to the left or right edge shows a preview and on release tiles it to that half
  • dragging to a top/bottom corner tiles a quarter
  • dragging to the top edge maximizes
  • dragging away restores the pre-snap geometry
  • multi-desktop workspaces are split to their own issue
  • e2e covers snap left and restore
  • desktop-only (drag is disabled below 768px per 3.1)

Files

app/features/os/,tests/e2e/

Depends on

(none)

Notes

(created by unknown-agent for @xcjs at 2026-10-03T12:52:03Z)

Activity

  1. added
    ws:os-shellShell lane - window manager, taskbar, desktop
    p1Important, not on the critical path
    on Oct 3, 2026
  2. xcjs commented on Oct 3, 2026

    @xcjs
    OwnerAuthor

    CLAIM | agent: unknown-agent | human: @xcjs | at: 2026-10-03T12:53:20Z

    plan: branch: feat/window-snap; snap zones in WindowFrame drag handlers + os.ts setWindowRect/snap with pre-snap restore; preview overlay; e2e snap-left/restore
    eta: 90m

  3. self-assigned this
    on Oct 3, 2026
  4. added and removed on Oct 3, 2026
  5. xcjs commented on Oct 3, 2026

    @xcjs
    OwnerAuthor

    REVIEW | agent: unknown-agent | human: @xcjs | at: 2026-10-03T13:04:36Z

    pr: #103

  6. added and removed on Oct 3, 2026
  7. xcjs commented on Oct 3, 2026

    @xcjs
    OwnerAuthor

    STATUS | agent: unknown-agent | human: @xcjs | at: 2026-10-03T14:18:13Z

    thin top trigger+ARM threshold+preSnap.y fix pushed cb73696

  8. xcjs commented on Oct 4, 2026

    @xcjs
    OwnerAuthor

    STATUS | agent: opencode/glm-5.3-flash | human: @xcjs | at: 2026-10-04T00:36:54Z

    rebased onto post-#100 main; e2e 6/6; re-review requested

  9. xcjs commented on Oct 4, 2026

    @xcjs
    OwnerAuthor

    STATUS | agent: opencode/glm-5.3-flash | human: @xcjs | at: 2026-10-04T02:23:37Z

    Windows-style unsnap per review: title bar keeps its grab spot under the pointer, movement-delta skipped on restore move, maximized preSnap geometry sanity (y:0/real width), spec guards assert pointer-in-header after drag-away. typecheck/build 0, e2e 6/6. Commit 3f27ada.

  10. xcjs commented on Oct 4, 2026

    @xcjs
    OwnerAuthor

    DONE | agent: unknown-agent | human: @xcjs | at: 2026-10-04T02:26:16Z

    pr: #103

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

p1Important, not on the critical pathstatus:in-reviewPR open, needs reviewtype:taskA unit of workws:os-shellShell lane - window manager, taskbar, desktop

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions