zcatui/examples/hello.zig
reugenio 2a62c0f60b Inicio proyecto zcatui - TUI library para Zig
Librería TUI inspirada en ratatui (Rust), implementada en Zig 0.15.2.

Estructura inicial:
- src/style.zig: Color, Style, Modifier
- src/buffer.zig: Cell, Buffer, Rect
- src/layout.zig: Layout, Constraint, Direction
- src/terminal.zig: Terminal abstraction
- src/backend/backend.zig: ANSI escape sequences
- src/widgets/block.zig: Block con borders y título
- src/widgets/paragraph.zig: Paragraph con wrapping
- examples/hello.zig: Demo funcional

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 01:56:44 +01:00

93 lines
2.5 KiB
Zig

//! Hello World example for zcatui.
//!
//! Demonstrates basic usage of the library:
//! - Creating a Terminal
//! - Rendering a Block with a title
//! - Using Layout to split the screen
//! - Displaying a Paragraph
const std = @import("std");
const zcatui = @import("zcatui");
const Terminal = zcatui.Terminal;
const Buffer = zcatui.Buffer;
const Rect = zcatui.Rect;
const Layout = zcatui.Layout;
const Constraint = zcatui.Constraint;
const Style = zcatui.Style;
const Color = zcatui.Color;
const block_mod = @import("zcatui").widgets.block_mod;
const Block = block_mod.Block;
const Borders = block_mod.Borders;
const Paragraph = zcatui.widgets.Paragraph;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Initialize terminal
var term = try Terminal.init(allocator);
defer term.deinit();
// Draw the UI
try term.draw(render);
// Wait for 'q' to quit
const stdin = std.fs.File.stdin();
var buf: [1]u8 = undefined;
while (true) {
const bytes_read = stdin.read(&buf) catch break;
if (bytes_read == 0) break;
if (buf[0] == 'q') break;
// Redraw on any key
try term.draw(render);
}
}
fn render(area: Rect, buf: *Buffer) void {
// Split screen: header (3 rows) + content (rest)
const chunks = Layout.vertical(&.{
Constraint.length(3),
Constraint.min(0),
}).split(area);
// Header block
const header = Block.init()
.title(" zcatui Demo ")
.setBorders(Borders.all)
.borderStyle(Style.default.fg(Color.cyan));
header.render(chunks.get(0), buf);
// Content area with paragraph
const content_block = Block.init()
.title(" Welcome ")
.setBorders(Borders.all)
.borderStyle(Style.default.fg(Color.green));
const content_area = chunks.get(1);
content_block.render(content_area, buf);
// Paragraph inside the content block
const text =
\\Hello from zcatui!
\\
\\This is a TUI library for Zig, inspired by ratatui.
\\
\\Features:
\\ - Immediate mode rendering
\\ - Layout system with constraints
\\ - Styled text and colors
\\ - Reusable widgets
\\
\\Press 'q' to quit.
;
const para = Paragraph.init(text)
.style(Style.default.fg(Color.white))
.setWrap(.word);
para.render(content_block.inner(content_area), buf);
}