Skip to content

Add a dedicated clip header rail as the move handle #683

@ChuxiJ

Description

@ChuxiJ

User Story

As a user, I want the clip's text strip to be the drag handle, so that I can move clips from the header and use the body for content-level interactions.

Problem

Clip text is only an absolute label today, not a separate interactive rail. Moving, slipping, and content inspection all compete for the same surface.

Root Cause

src/components/timeline/ClipBlock.tsx infers move or resize from one shared hit area, so there is no dedicated header drag handle and no safe body-only interaction region.

Solution

Split clip rendering into a header rail plus waveform body. Make the rail own move interactions and expose grab / grabbing cursor feedback, while leaving the body available for content-focused gestures.

Verification

  • Add component coverage for the header rail cursor and ARIA affordance
  • Manually verify header drag moves the clip
  • Verify agent-compatible pointer automation can target the rail reliably
  • Run npx tsc --noEmit
  • Run npm run build

Notes

This issue covers the interaction-surface refactor and should preserve edge resize, fade, and warp handle behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions