Skip to Content
ConceptsThe calm relayout

The calm relayout

A layout that moves by itself must never move under the user’s hands. These rules live in the store and the canvas, so every app gets them.

The anchor holds still

The panel the user just worked in is the anchor: a record opened, a search, a filter, an action, a click into the panel, or a panel opened from the dock. In the next rounds its top-left cell holds still and the other cards are packed around it. Work from a suggestion or a command does not anchor; a command’s panel goes to the front as the main panel instead.

  • More work in the same panel on the same record keeps the same anchor.
  • The anchor lets go after 20 s without work (ANCHOR_IDLE_RELEASE_MS), so a later round may rebalance the canvas.
  • A button in one card can log work on another (a filter, an action). For 1 s after a press (ANCHOR_PRESS_WINDOW_MS), the pressed card is the anchor, because that is where the user’s eyes are.
  • While the anchor is live, the canvas keeps its rows and scrolls by any shift of the anchor card, so nothing above it pushes it down.

The pointer’s card waits

The card under the pointer keeps its cell for up to 3 s after a round first wants to move it (POINTER_MOVE_HOLD_MS), and stays on the canvas up to 5 s after a round wants to dock it (POINTER_LEAVE_HOLD_MS). The cap keeps a resting mouse from freezing the canvas.

Manual edits apply at once, and nothing slides in

A pin, unpin, dock, open, “Make bigger”, or “Make smaller” applies at once and changes only that card. The policy catches up at its normal pace. With the pointer on the canvas, the other cards wait until it leaves, a real action happens, or 10 s pass (MANUAL_EDIT_HOLD_MS), so the next click lands on the card the user aimed at. A docked card leaves an empty slot for the same time.

While keyboard focus moves through the canvas, automatic changes wait until it leaves, and focus stays on the element it was on when a change does land.

Changes are a few seconds apart

Automatic layout changes are at least 2.5 s apart (the minChangeIntervalMs setting). A round that comes sooner waits, and applies from whatever judgments are newest then. A round that changes nothing visible applies quietly: fresh reasons, no change line, no motion.

Commands win, and stay

A command applies at once and skips the waits: its panel becomes the main panel. Its promotion survives re-plans from the same answer for up to 45 s (COMMAND_HOLD_MS), or until a newer round arrives, so a pointer rest right after the command does not undo it. An unclear command keeps the layout: its stray words say nothing about the work.

Undo sticks

Undo puts the previous layout back and holds it for 15 s (UNDO_HOLD_MS). The undone change does not come back while the judgments stay about the same, for up to 5 minutes (UNDO_MEMORY_MS).

The staged relayout

Each round plays in stages, so the eye can follow it:

StageStartsLastsWhat happens
Grow0 ms250 msThe anchor takes its new size
Exit150 ms250 msLeaving cards fly into their dock item
Move250 ms350 msMoved cards glide to their new cells
Enter450 ms300 msNew cards arrive one at a time, 70 ms apart, from the anchor’s side

roundCues in @attuneui/core gives each card its part; AdaptiveCanvas plays it. With reduced motion every change is a 150 ms fade.

Settings

SettingMeaning
adaptiveOff: a fixed layout plus the user’s own changes. Events are still logged.
frozenOn: the model keeps judging, but nothing moves by itself. Manual edits still apply.
weightsThe priority blend.
minChangeIntervalMsThe least time between two automatic changes.
Last updated on