initial commit

This commit is contained in:
rus07tam 2025-10-26 16:26:46 +00:00
commit 19c9b9537d
115 changed files with 4940 additions and 0 deletions

35
examples/tui.py Normal file
View file

@ -0,0 +1,35 @@
import sys
from snakia.core.tui import CanvasChar, RenderContext
from snakia.core.tui.render import ANSIRenderer
from snakia.core.tui.widgets import (BoxWidget, HorizontalSplitWidget,
TextWidget, VerticalSplitWidget)
class StdoutTarget:
def write(self, text: str) -> None:
sys.stdout.write(text)
def flush(self) -> None:
sys.stdout.flush()
def main() -> None:
text1 = TextWidget("Hello", CanvasChar(fg_color="red", bold=True))
text2 = TextWidget("World", CanvasChar(fg_color="blue", bold=True))
text3 = TextWidget("Snakia", CanvasChar(fg_color="green", bold=True))
box1 = BoxWidget(10, 3, CanvasChar("", fg_color="yellow"))
box2 = BoxWidget(8, 5, CanvasChar("", fg_color="magenta"))
horizontal_split = HorizontalSplitWidget([text1, text2, text3], "|")
vertical_split = VerticalSplitWidget([horizontal_split, box1, box2], "-")
renderer = ANSIRenderer(StdoutTarget())
with RenderContext(renderer) as ctx:
ctx.render(vertical_split.render())
if __name__ == "__main__":
main()