//! zcatui - Terminal User Interface library for Zig //! //! Inspired by ratatui (Rust), zcatui provides a simple and flexible way //! to create text-based user interfaces in the terminal. //! //! ## Quick Start //! //! ```zig //! const std = @import("std"); //! const zcatui = @import("zcatui"); //! //! pub fn main() !void { //! var term = try zcatui.Terminal.init(); //! defer term.deinit(); //! //! try term.draw(ui); //! } //! ``` //! //! ## Architecture //! //! zcatui uses immediate mode rendering with intermediate buffers: //! - Each frame, all widgets are rendered to a Buffer //! - Buffer is diffed against previous state //! - Only changes are sent to the terminal //! const std = @import("std"); // Core types pub const style = @import("style.zig"); pub const Color = style.Color; pub const Style = style.Style; pub const Modifier = style.Modifier; pub const buffer = @import("buffer.zig"); pub const Cell = buffer.Cell; pub const Buffer = buffer.Buffer; pub const Rect = buffer.Rect; pub const Symbol = buffer.Symbol; pub const Margin = buffer.Margin; pub const CellUpdate = buffer.CellUpdate; pub const DiffIterator = buffer.DiffIterator; pub const text = @import("text.zig"); pub const Span = text.Span; pub const Line = text.Line; pub const Text = text.Text; pub const StyledGrapheme = text.StyledGrapheme; pub const Alignment = text.Alignment; // Re-exports for convenience pub const terminal = @import("terminal.zig"); pub const Terminal = terminal.Terminal; // Layout pub const layout = @import("layout.zig"); pub const Layout = layout.Layout; pub const Constraint = layout.Constraint; pub const Direction = layout.Direction; // Symbols (line drawing, borders, blocks, braille, etc.) pub const symbols = @import("symbols/symbols.zig"); // Widgets pub const widgets = struct { pub const block_mod = @import("widgets/block.zig"); pub const Block = block_mod.Block; pub const Borders = block_mod.Borders; pub const BorderSet = block_mod.BorderSet; pub const paragraph_mod = @import("widgets/paragraph.zig"); pub const Paragraph = paragraph_mod.Paragraph; pub const list_mod = @import("widgets/list.zig"); pub const List = list_mod.List; pub const ListItem = list_mod.ListItem; pub const ListState = list_mod.ListState; pub const ListDirection = list_mod.ListDirection; pub const HighlightSpacing = list_mod.HighlightSpacing; pub const gauge_mod = @import("widgets/gauge.zig"); pub const Gauge = gauge_mod.Gauge; pub const LineGauge = gauge_mod.LineGauge; pub const tabs_mod = @import("widgets/tabs.zig"); pub const Tabs = tabs_mod.Tabs; pub const sparkline_mod = @import("widgets/sparkline.zig"); pub const Sparkline = sparkline_mod.Sparkline; pub const RenderDirection = sparkline_mod.RenderDirection; pub const scrollbar_mod = @import("widgets/scrollbar.zig"); pub const Scrollbar = scrollbar_mod.Scrollbar; pub const ScrollbarState = scrollbar_mod.ScrollbarState; pub const ScrollbarOrientation = scrollbar_mod.ScrollbarOrientation; pub const barchart_mod = @import("widgets/barchart.zig"); pub const BarChart = barchart_mod.BarChart; pub const Bar = barchart_mod.Bar; pub const BarGroup = barchart_mod.BarGroup; pub const table_mod = @import("widgets/table.zig"); pub const Table = table_mod.Table; pub const TableState = table_mod.TableState; pub const TableRow = table_mod.Row; pub const TableCell = table_mod.Cell; pub const canvas_mod = @import("widgets/canvas.zig"); pub const Canvas = canvas_mod.Canvas; pub const CanvasPainter = canvas_mod.Painter; pub const CanvasMarker = canvas_mod.Marker; pub const CanvasLine = canvas_mod.Line; pub const CanvasPoints = canvas_mod.Points; pub const CanvasRectangle = canvas_mod.Rectangle; pub const CanvasCircle = canvas_mod.Circle; pub const chart_mod = @import("widgets/chart.zig"); pub const Chart = chart_mod.Chart; pub const Axis = chart_mod.Axis; pub const Dataset = chart_mod.Dataset; pub const GraphType = chart_mod.GraphType; pub const LegendPosition = chart_mod.LegendPosition; pub const clear_mod = @import("widgets/clear.zig"); pub const Clear = clear_mod.Clear; pub const calendar_mod = @import("widgets/calendar.zig"); pub const Monthly = calendar_mod.Monthly; pub const Date = calendar_mod.Date; pub const CalendarEventStore = calendar_mod.CalendarEventStore; pub const input_mod = @import("widgets/input.zig"); pub const Input = input_mod.Input; pub const InputState = input_mod.InputState; pub const popup_mod = @import("widgets/popup.zig"); pub const Popup = popup_mod.Popup; pub const Modal = popup_mod.Modal; pub const ModalButton = popup_mod.ModalButton; pub const confirmDialog = popup_mod.confirmDialog; pub const alertDialog = popup_mod.alertDialog; pub const yesNoCancelDialog = popup_mod.yesNoCancelDialog; pub const menu_mod = @import("widgets/menu.zig"); pub const Menu = menu_mod.Menu; pub const MenuItem = menu_mod.MenuItem; pub const MenuItemType = menu_mod.MenuItemType; pub const MenuBar = menu_mod.MenuBar; pub const MenuBarItem = menu_mod.MenuBarItem; pub const ContextMenu = menu_mod.ContextMenu; pub const tooltip_mod = @import("widgets/tooltip.zig"); pub const Tooltip = tooltip_mod.Tooltip; pub const TooltipPosition = tooltip_mod.TooltipPosition; pub const TooltipManager = tooltip_mod.TooltipManager; pub const tree_mod = @import("widgets/tree.zig"); pub const Tree = tree_mod.Tree; pub const TreeItem = tree_mod.TreeItem; pub const TreeState = tree_mod.TreeState; pub const TreeSymbols = tree_mod.TreeSymbols; pub const filepicker_mod = @import("widgets/filepicker.zig"); pub const FilePicker = filepicker_mod.FilePicker; pub const FileEntry = filepicker_mod.FileEntry; pub const FileType = filepicker_mod.FileType; pub const FileIcons = filepicker_mod.FileIcons; pub const scroll_mod = @import("widgets/scroll.zig"); pub const ScrollView = scroll_mod.ScrollView; pub const ScrollState = scroll_mod.ScrollState; pub const VirtualList = scroll_mod.VirtualList; pub const InfiniteScroll = scroll_mod.InfiniteScroll; }; // Backend pub const backend = @import("backend/backend.zig"); // Events (crossterm-style) pub const event = @import("event.zig"); pub const Event = event.Event; pub const KeyEvent = event.KeyEvent; pub const KeyCode = event.KeyCode; pub const KeyModifiers = event.KeyModifiers; pub const KeyEventKind = event.KeyEventKind; pub const MouseEvent = event.MouseEvent; pub const MouseEventKind = event.MouseEventKind; pub const MouseButton = event.MouseButton; pub const ResizeEvent = event.ResizeEvent; pub const event_reader = @import("event/reader.zig"); pub const EventReader = event_reader.EventReader; pub const event_parse = @import("event/parse.zig"); // Cursor control pub const cursor = @import("cursor.zig"); pub const Cursor = cursor.Cursor; pub const CursorStyle = cursor.CursorStyle; // Animation system pub const animation = @import("animation.zig"); pub const Animation = animation.Animation; pub const AnimationGroup = animation.AnimationGroup; pub const Easing = animation.Easing; pub const Timer = animation.Timer; // Clipboard (OSC 52) pub const clipboard = @import("clipboard.zig"); pub const Clipboard = clipboard; pub const ClipboardSelection = clipboard.Selection; // Hyperlinks (OSC 8) pub const hyperlink = @import("hyperlink.zig"); pub const Hyperlink = hyperlink.Hyperlink; // Notifications (OSC 9/777) pub const notification = @import("notification.zig"); pub const Notification = notification.Notification; // Image display (Kitty/iTerm2) pub const image = @import("image.zig"); pub const Kitty = image.Kitty; pub const Iterm2 = image.Iterm2; pub const ImageOptions = image.ImageOptions; pub const ImageFormat = image.ImageFormat; // Lazy rendering and async utilities pub const lazy = @import("lazy.zig"); pub const RenderCache = lazy.RenderCache; pub const RenderTask = lazy.RenderTask; pub const Throttle = lazy.Throttle; pub const Debounce = lazy.Debounce; pub const DeferredRender = lazy.DeferredRender; // ============================================================================ // Tests // ============================================================================ test "zcatui module compiles" { // Basic compilation test _ = style; _ = buffer; } test { // Include all module tests _ = @import("event.zig"); _ = @import("event/reader.zig"); _ = @import("event/parse.zig"); _ = @import("cursor.zig"); }