1. IDE-style layout
+
+ Three panels with mixed units. Sidebar has bounds 240px default,
+ clamped to 160–400. Middle is a nested column with an
+ auto-fill editor (min 120px) and a 30% console.
+ Inspector starts at 20% with min 120px.
+ Debug logs are on for this one — exposed as window.ide.
+
2. Four panels, no constraints
+
+ Every child is auto (1fr); no min or max.
+ Panels can collapse all the way to 0 — useful for seeing the
+ unconstrained default behavior.
+
3. Vertical (column) layout
+
+ Top toolbar fixed at 56px, main area takes the rest,
+ bottom status bar fixed at 32px.
+
4. Deep nesting
++ Row → column → row, three levels deep. Each container manages its own grid; + dragging a divider only retracks its own container. +
+ +5. Custom resizer rendering
+
+ The resizer.render hook receives the divider element so the
+ consumer can style it freely. Here the divider is wider (16px),
+ dark, and shows a grip glyph.
+
6. Mixed units
+
+ 200px fixed + auto (fr) + 25% +
+ auto. Demonstrates that fixed-px tracks stay put on container
+ resize while auto tracks absorb the change.
+
7. Custom resizer via Vue slot
+
+ Uses the <SplitGridView> #resizer
+ scoped slot to render rich content inside each divider. Resizer
+ track is 28px wide (vs the 6–8px default),
+ and the slot receives before / after
+ references to the adjacent panel definitions — used here to label
+ each side. Drag still works because the slot content has
+ pointer-events: none; the wrapper's drag wiring
+ continues to own the actual resize gesture.
+
8. Dynamic add/remove (Vue wrapper)
+
+ Backed by <SplitGridView> from
+ @madronejs/splitpanel/vue. The toolbar calls
+ addChild / removeChild on the component ref;
+ the #leaf scoped slot renders each panel's content
+ (including its own close button). Vue's reactivity flows through
+ <Teleport> into the leaf elements that SplitGrid
+ manages.
+
9. Declarative tree (Vue components)
+
+ The entire layout is written as
+ <SplitPanel> / <SplitContainer>
+ tags in the template — no imperative addChild calls.
+ Adding / removing tabs is a plain
+ tabs.push(...) / filter(...);
+ v-if toggles the console and inspector. Each panel's
+ default slot is teleported into the SplitGrid-managed element, so
+ contents move with the panels. Most panels have no
+ panel-id — auto-generated from each component's uid.
+
10. Drag-drop reorder
+
+ Pointer-event-based drag-drop via configureDraggable.
+ Grab a tile by its ⠿ handle and drop on another tile —
+ the default onDrop calls swapData, so the
+ tile contents swap while the slots stay anchored. Reactive flags
+ panel.isDragging / panel.isDropTarget off
+ the slot scope drive the visual feedback. A ghost element (cloned
+ from the source) follows the cursor — anchor / custom renderer
+ configurable via ghostAnchor and ghostRender.
+