Read out by screen readers after a column is moved without dragging.
ProtectedchannelsProtectedconfigsEvery stored column, including ones that can't currently be shown.
ProtectedcustomisedWhether the member has a layout of their own, rather than the default.
ProtectedheartbeatProtectedlastProtectedrecentProtectedsaveProtectedsplitThe top row's share of the height, or null for an even split.
ProtectedsplitProtectedstatesProtectedwasProtectedbindProtectedchannelsAsks every column for anything new: on reconnecting, returning to the tab, or polling.
Every column that can be shown, top row first: the order phones swipe through.
ProtectedcolumnProtectedcurrentProtectedendChannel objects outlive a dropped socket, so only a connected socket counts.
Moves a column delta places along its row, or along the single strip: the keyboard's drag and drop.
Reorders within the single strip that phones and short screens show: the column joins the row of the neighbour it lands after (or before, at the very start), so both rows survive for when there's room for them again.
Puts a column at index among the visible columns of row, as a drag and
drop leaves it. Hidden columns (an extension disabled, a permission
revoked) keep their place in the stored order and don't count.
The other columns shown beside one, in its row or along the single strip.
ProtectedonEvery event on the public and the member's channel, handed to each column. Realtime sends the member a payload built for them on their own channel, and public discussions' events on the public channel too, so the first copy is dispatched and a later personalised copy only refreshes the store.
ProtectedonOnly a type and id arrive: nothing to put in the store, just things to take out of columns.
ProtectedonA column's place among the columns shown beside it: in its row, or along the single strip.
ProtectedpruneThe columns in each row. The second row is empty until something is put there.
ProtectedsaveBatches rapid rearranging into one request.
The top row's share of the height; null to split evenly.
False while it's still being dragged.
False while the width is still being dragged: it's saved once, when the drag ends.
Picks up a layout saved from outside the deck (e.g. "Add to Deck" on a discussion), keeping the live state of columns that survived.
ProtectedtickWhile realtime is connected nothing polls: events drive every column. Events can only be missed while disconnected, so reconnecting catches up once. Without realtime, columns check on the admin's polling interval instead.
Protectedunbind
Held for the whole session, so leaving the deck to read a discussion and coming back finds every column, its scroll position and its pending count as they were.