Commit Graph

35 Commits

Author SHA1 Message Date
db8a97b365 Relayout open windows on terminal resize
NAWS mid-session updates now propagate to the window stack: Application
re-runs each open window's relayout on resize. Window#relayout re-centers
(clamped to the screen edge) by shifting all descendants; MasterDetail
recomputes its full geometry and re-renders the detail at the new width.
ButtonBar placement is extracted into ButtonBar.place for reuse.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:11:27 +02:00
4d38046c70 Add FakeOS: configurable character-mode OS simulator
BBS::FakeOS is a generic, teletype-style engine for simulating retro
operating systems: a scripted boot sequence (BIOS POST, memory test,
banners, typewriter output) followed by an interactive command shell.

Each simulated OS (MS-DOS, CP/M, AmigaDOS CLI, ...) is just a
FakeOS.define { ... } config — prompt, colors, boot block, command table
and an on_unknown fallback — so new OSes are added as configuration, not
code. on_unknown is the natural hook for a conversational/LLM-backed
shell. Exposed as a Flow step (`os <definition>`) alongside tui/app.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 20:04:59 +02:00
6b320318ca Render GFM tables and enable mouse-wheel scrolling
Markdown.to_lines now detects GFM tables (header + delimiter row) and
renders them as box-drawn, alignment-aware tables that shrink to fit the
pane width, instead of mangling the rows into a single paragraph.

ScrollView now handles mouse-wheel events, and Window routes wheel
events to the widget under the cursor, so a detail/content pane scrolls
even when keyboard focus is on an adjacent list.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 19:20:39 +02:00
4fa7ebc54d README.md update 2026-05-13 22:51:17 +02:00
6c5a1eabc2 README.md update 2026-05-13 22:41:47 +02:00
18e77c14b5 new window dsl 2026-05-13 22:23:37 +02:00
5bf754f38c new theme 2026-05-13 21:51:53 +02:00
2454521f19 new windows types 2026-05-13 20:35:46 +02:00
26f4d2a4ee text format 2026-05-13 18:59:44 +02:00
dbb88cc6f9 new themes 2026-05-13 18:48:44 +02:00
8ad80cbfa7 fixes 2026-05-13 18:39:46 +02:00
11c26a5b63 theme dsl 2026-05-13 18:34:25 +02:00
04eaebdc21 fix 2026-05-13 18:26:35 +02:00
40c9397e12 exit fix 2026-05-12 22:38:51 +02:00
4ffc6243c0 new framework fix 2026-05-12 22:36:33 +02:00
9ae939a213 ascii art 2026-05-12 22:30:56 +02:00
953498a62d new framework 2026-05-12 22:15:07 +02:00
be21826ecc list_view 2026-05-12 21:25:21 +02:00
da5acfd55e refact 2026-05-12 20:49:45 +02:00
3588245624 new message helper 2026-05-12 20:36:28 +02:00
da752535b6 modal 2026-05-12 20:32:10 +02:00
88ef31d8b6 tui helpers 2026-05-12 20:22:53 +02:00
5ced101328 frame buffer 2026-05-12 19:18:11 +02:00
4eca9513a8 Add nav DSL to TUI::Page; helpers accumulates across calls
Page#nav sets up up/down key handlers for four common patterns:
  nav :menu,   size:    – wrapping @menu_sel selection
  nav :cycle           – wrapping @item_sel over @items
  nav :list,   window: – @item_sel/@scroll with a visible window
  nav :scroll, content:, window: – @scroll over arbitrary content

size/window accept an integer or a lambda evaluated on the Context
at runtime, so terminal-size-dependent values work naturally.

TUI#helpers now accumulates into one module instead of replacing it,
so configure methods on page classes can each extend helpers without
clobbering previous calls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 22:17:31 +02:00
148fd88660 Add fill/screen_fill primitives and string style support
New drawing primitives:
  fill(x:, y:, w:, h:, bg:)   — fills a rectangle with background color
  screen_fill(bg:)             — fills the entire terminal

Box now accepts bg: which fills its interior with a background color.

All drawing methods (text, bar, list, box) now accept raw ANSI escape
strings as style/highlight values in addition to named symbols.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:52:59 +02:00
cac10176a2 Add page-based TUI DSL
Each screen is now a self-contained `page` block with its own `enter`,
`render`, and `key` handlers. Shared logic lives in a `helpers` block
mixed into the render context. A `chrome` block renders persistent UI
(header, sidebar, footer) before every frame.

New context primitives: `go(page)` for transitions, `reload` to re-run
the current page's `enter` block, `printable` key binding for text input.

`FlowRunner#run_tui` now passes the flow context to TUIRunner so username
and other session data are available without reaching into internals.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:30:06 +02:00
8a3e38aa25 Add NAWS terminal size negotiation and dynamic dimensions
- Negotiate NAWS (option 31) on connect to receive terminal cols/rows
- Expose term_cols/term_rows on Session (default 80×24)
- Add term_cols/term_rows helpers to TUIRunner::Context
- Make bar() default width dynamic via term_cols

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:05:44 +02:00
73c711336d TUI 2026-05-11 20:24:40 +02:00
15cd593b33 Update README: new primitives, fetch/pick, BBS::Color
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 10:41:39 +02:00
bd8aa51684 Add BBS::Color module with c() helper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 10:34:36 +02:00
c01159dc23 Add fetch, pick, body, output primitives
fetch: loading-indicator + ctx store for API calls
pick: numbered list with selection and sub-flow drill-down
body: word-wrapped article text (strip markdown, reflow)
output: raw string block for complex multi-line content

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 09:27:45 +02:00
272e75bd6f new primitives 2026-04-29 17:50:45 +02:00
d9232eabb4 upgrade for our main bbs server 2026-04-28 22:47:52 +02:00
ce005cdb1b Add README with full gem documentation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:35:00 +02:00
4690ade510 Initial commit: extracted from impostor-bbs gems/bbs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:18:57 +02:00