Skip to content

Commit 60f97bf

Browse files
committed
merge: v0.15.0 restores — 32-col inspector, │ rule, HC pane pair (lane/ctml-restore)
Slice 7c. AsideWidth request restores the wide inspector to 32 (pin test reframed to read the honoured request from the box map); GutterRule │ in the historic styles.separator colour; renderInspectorStack rides shellinspectorpair.ctml (HC — H's bottom border IS the divider), the JoinVertical hand-stack deleted. One friction proven two ways and reported: nested layouts share ONE renderer theme (no per-instance override) — the pair renders standalone with its own theme; filed for a future round if a real screen needs a unified call. Gates: vet+build clean, 420 tui tests, floor exact. Co-Authored-By: Virgil <virgil@lethean.io>
2 parents 3ce6ba6 + 59a3487 commit 60f97bf

8 files changed

Lines changed: 302 additions & 128 deletions

File tree

cli/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ require (
3333
charm.land/log/v2 v2.0.0 // indirect
3434
charm.land/wish/v2 v2.0.0 // indirect
3535
dappco.re/go/cgo v0.11.2 // indirect
36-
dappco.re/go/html v0.14.0 // direct: cli/tui renders .ctml (tabs.go)
36+
dappco.re/go/html v0.15.0 // direct: cli/tui renders .ctml (tabs.go)
3737
dappco.re/go/i18n v0.12.1 // indirect
3838
dappco.re/go/log v0.13.1 // indirect
3939
dappco.re/go/ratelimit v0.12.1 // indirect

cli/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ dappco.re/go/html v0.13.1 h1:ILgEjxaiof8eOqp44791Gtij+t5PfvT6u7E2K0Wbw2s=
3030
dappco.re/go/html v0.13.1/go.mod h1:vhB4+z5cz6WYRqG7c/sDAOxm7Esc8GHEVnOpoN48+r4=
3131
dappco.re/go/html v0.14.0 h1:vUDiFe4b5IXF2xFCFPSPwwlXwWW5Cf+OhDQq0gnt/iY=
3232
dappco.re/go/html v0.14.0/go.mod h1:vhB4+z5cz6WYRqG7c/sDAOxm7Esc8GHEVnOpoN48+r4=
33+
dappco.re/go/html v0.15.0 h1:XMFA7fKY07F3gskoF/9+NYo1WlLaNmoGEFmOofWvnRw=
34+
dappco.re/go/html v0.15.0/go.mod h1:vhB4+z5cz6WYRqG7c/sDAOxm7Esc8GHEVnOpoN48+r4=
3335
dappco.re/go/i18n v0.12.1 h1:Pm1DF9I0O8bckTr815OrnR+G+7EvbQhP2Vk4ItC0mB4=
3436
dappco.re/go/i18n v0.12.1/go.mod h1:AYx1QkPfW+qvzLCfJnuOlc4J+grwlgFzoHnoke4TAYg=
3537
dappco.re/go/inference v0.14.0 h1:3Lddj4W8T7/Mg8iTmvS+hCUkUqYYhRPYGe6i/ILF1+o=

cli/tui/README.md

Lines changed: 47 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -266,36 +266,58 @@ panel/overlay body, footer key hints, all inside one rounded border.
266266
content through byte-exact at the slot's full width, closing the gap the
267267
previous round left open (docs/ctml.md S:15.2/S:15.5). Wide layouts
268268
(`shellwide.ctml`, `<layout variant="HCRF">`) bind the main panel to C
269-
and the inspector to R, one `RenderTerm` call (`renderBandLayout`) in
269+
and the inspector to R, one `RenderTerm` call (`renderWideLayout`) in
270270
place of `lipgloss.JoinHorizontal` and a manual `` separator column.
271271
Every single-pane shape — Narrow either way, Overlay with the inspector
272272
closed — binds the one active pane to C (`shellregion.ctml`,
273273
`<layout variant="HCF">`), replacing a bare `fitPane` call. The ONE shape
274-
that still cannot join them is Overlay with the inspector open: two
275-
independently-sized panes stacked vertically with a rule between, which
276-
HLCRF's five-letter slot vocabulary has no pair for (H/F are whole-page
277-
top/bottom bands, not a reusable mid-page pair, and go-html's own
278-
automatic L/C/R vertical stacking triggers only below 80 columns —
279-
S:15.1 — above this layout kind's own floor). That one shape stays
280-
exactly the pre-.ctml host composition: `shell.ctml`'s H/F-only layout,
281-
split by `renderBandFrame`, with `renderInspectorStack` composing the
282-
region between the bands — the same HF+host-composition idiom a
274+
that still cannot join header+region+footer into a single call is
275+
Overlay with the inspector open: `shell.ctml`'s H/F-only layout, split by
276+
`renderBandFrame`, stays host-joined (`lipgloss.JoinVertical`) with the
277+
region rendered between the bands — the same HF+host-composition idiom a
283278
widget-carrying overlay uses for a live Bubbles widget between its own
284-
bands.
285-
- **The Wide inspector is now 28 columns, not 32.** go-html's non-FitSlots
286-
middle band gives R a fixed outer-width budget (the unexported
287-
`termAsideWidth`, S:15.1) whenever R is present at ≥80 columns — there is
288-
no `TermOptions`/`Layout` lever to request a different width, and a
289-
zero-chrome C does not collapse the C/R junction either: go-html always
290-
inserts its own single blank-space gutter before R, so the old visible
291-
`` rule is gone with it (the gutter is blank; there is no theme lever to
292-
paint a glyph into it). `regionAsideWidth` (`layout.go`) mirrors the
293-
fixed budget as a documented local constant — go-html exports no
294-
accessor for it (S:15.5) — and `TestRegionAsideWidth_MatchesGoHTML` pins
295-
it against a live `RenderTermBoxes` call so upstream drift fails loudly
296-
rather than silently reflowing the frame. The main panel gains the 4
297-
columns back (`measureFrame`'s Wide case); this is a real, visible width
298-
delta, tied entirely to that one doctrine clause.
279+
bands. What changed as of go-html v0.15.0 (docs/ctml.md S:15.7) is that
280+
the REGION itself no longer hand-stacks: two independently-sized panes
281+
stacked vertically with a rule between is a documented idiom — an `HC`
282+
layout, H the upper pane with its own bottom border as the divider, C the
283+
lower pane — not a missing construct, since only the *middle* band's
284+
L/C/R packing is width-gated (side by side ≥80 columns, stacked below);
285+
H/middle/F themselves stack vertically at any width. `renderInspectorStack`
286+
(`layout.go`) now renders `shellinspectorpair.ctml`'s `<layout
287+
variant="HC">` through its own `RenderTerm` call, replacing the old
288+
`lipgloss.JoinVertical(inspector, separator, main)` plus a manually
289+
`core.Repeat("─", …)` rule line. It stays a SEPARATE call from
290+
`shell.ctml`'s H/F band, rather than nesting fully into one page-wide
291+
call: `TermTheme` is one flat struct threaded through every nested
292+
`Layout` in a single render, so a unified call would force the page
293+
header's `H` (needing zero chrome, pre-fitted byte-exact like every
294+
sibling shell) and the pair's own `H` (needing its natural bordered
295+
chrome, since that border IS the rule) to share one `Header` style — a
296+
throwaway probe during this slice confirmed zeroing `Header` for the page
297+
header silently zeroed the pair's divider too. `shellinspectorpair.ctml`'s
298+
own header comment has the full account.
299+
- **The Wide inspector is 32 columns again, not 28.** go-html v0.15.0 adds
300+
`TermOptions.AsideWidth` (S:15.1): a width *request* that overrides the
301+
non-FitSlots middle band's fixed R budget (the unexported
302+
`termAsideWidth`, still 28 by default) per render, with C absorbing the
303+
difference. `renderWideLayout` (`layout.go`) is the one render path that
304+
sets it, requesting `wideInspectorWidth` (32) — restoring both the
305+
pre-.ctml value and name. A zero-chrome C still does not collapse the C/R
306+
junction: go-html always inserts its own single-column gutter before R,
307+
but that gutter is now paintable — `TermTheme.GutterRule` (S:15.6) sets
308+
the glyph rendered there, the full band height, in the theme's `Rule`
309+
style; `shellWideTheme` sets `GutterRule = "│"` (repointed at
310+
`styles.separator`'s own colour) so the historic visible rule returns.
311+
`wideInspectorWidth` documents the REQUEST rather than mirroring
312+
go-html's own unrequested default — go-html exports no accessor for that
313+
default (S:15.5) — and `TestWideInspectorWidth_MatchesRequest` pins the
314+
request against a live `RenderTermBoxes` call on the real
315+
`shellwide.ctml` render path (the box map is the render-time source of
316+
truth, S:15.5) so upstream regression in honouring `AsideWidth` fails
317+
loudly rather than silently reflowing the frame back to 28. The main
318+
panel gets its historic width back too (`measureFrame`'s Wide case); both
319+
the width and the rule are real, visible deltas, tied entirely to these
320+
two doctrine clauses.
299321
- **Mouse hit-testing needed no re-plumbing, this slice included.**
300322
`onMouse` resolves against its own independent `renderPanelBarBoxes`
301323
call, keyed off `frameInsetRows`/`frameInsetCols` and the tab strip's

0 commit comments

Comments
 (0)