Generic demo
A four-level fixture tree with grid columns, and one row that draws several bars —
entry-16 draws its three children as segments (ADR 0026: a bar is a child Entry). The
strip on the chart is the surface a consumer ships; everything under the torn rule drives the
demo. Drag a bar up or down, or drag a row in the grid, to move it to another place. Lock tree
turns both off. Lock a row (right-click → Lock): its bar and its grid row do not drag, and nothing
drops into it.
Harness bench
Demo-only controls. None of this is library UI.
Rows and columns
Row source, filtering and column visibility. entry-16 (“Auth”) draws three bars
on one row — its three child Entries, drawn as segments by childrenAsSegments.
Mutation
Every write goes through one transaction and one changeset. Double-click Name, Start or Budget in the grid to edit in place.
Activation (#434)
Click a bar or a grid row, or press Enter on one, to fire
entryActivate. The readout above names the entry and the cause. Press
Enter on a non-editable grid cell (Duration) to activate from there too — an
editable cell opens its editor instead.
Convenience chords (#262)
Mod+Z/Mod+Shift+Z undo/redo are convenience chords: the toolbar's
Undo/Redo buttons run the same command another way, so an app is free to turn the chord off
and keep the keystroke for itself.
Vetoes and capabilities
The Mobilization date line reads "can't move before this". It marks a hard boundary —
beforeEntryMove
refuses a drop before it. Hold drop proves the async veto path.
Plugins and renderers
Each control is a plugin over the public contract alone. Mod+K clears the
selection through a plugin-registered command.
Document
Round-trips the dataset through the public toJSON/fromJSON pair.