Packages
Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.
Current section
Files
Jump to
Current section
Files
examples/snippets/layout/advanced_layout_test.exs
# This example demonstrates advanced layout techniques using the `row` and `column` elements from Raxol.View.Elements.
defmodule Raxol.Docs.Guides.Examples.Layout.AdvancedLayoutTest do
use Raxol.Core.Runtime.Application
import Raxol.View.Elements
@impl true
def init(_opts) do
# No initial state needed for this static layout example
%{}
end
@impl true
def update(message, model) do
model
end
@impl true
def view(_model) do
view do
column(gap: 20, padding: 10, style: "border: 1px solid #ccc; width: 400px;") do
# Example 1: Centered Row
text(content: "Row with centered items:", style: "font-weight: bold;")
row(gap: 10, justify: :center, align: :center, style: "border: 1px dashed blue; padding: 5px;") do
button(content: "Btn 1")
button(content: "Button 2")
button(content: "B3")
end
# Example 2: Space Between
text(content: "Row with space-between items:", style: "font-weight: bold;")
row(gap: 10, justify: :space_between, style: "border: 1px dashed green; padding: 5px;") do
text(content: "Left Item")
text(content: "Right Item")
end
# Example 3: Nested Layout with Flex
text(content: "Nested Column/Row with Flex:", style: "font-weight: bold;")
row(gap: 15, align: :start, style: "border: 1px dashed red; padding: 5px;") do
# Fixed width column
column(gap: 5, style: "border: 1px solid orange; padding: 5px; width: 100px;") do
text(content: "Sidebar")
button(content: "Nav 1")
button(content: "Nav 2")
end
# Flexible column taking remaining space
column(gap: 10, flex: 1, style: "border: 1px solid purple; padding: 5px;") do
text(content: "Main Content Area", style: "font-weight: bold; text-align: center;")
row(gap: 5, justify: :space_around) do
text_input(placeholder: "Input 1")
text_input(placeholder: "Input 2")
end
panel(title: "Inner Panel") do
text(content: "Content inside a panel within the flexible column.")
end
end
end
# Example 4: Column Alignment
text(content: "Column with different alignments:", style: "font-weight: bold;")
row(gap: 10, style: "border: 1px dashed teal; padding: 5px; height: 100px; align-items: stretch;") do
column(align: :start, flex: 1, style: "border: 1px solid gray; padding: 3px;") do
text(content: "Align Start")
button(content: "S")
end
column(align: :center, flex: 1, style: "border: 1px solid gray; padding: 3px;") do
text(content: "Align Center")
button(content: "C")
end
column(align: :end, flex: 1, style: "border: 1px solid gray; padding: 3px;") do
text(content: "Align End")
button(content: "E")
end
end
end # End main column
end
end
# Function to run the example directly
def main do
Raxol.start_link(__MODULE__, [])
# For CI/test/demo: sleep for 2 seconds, then exit. Adjust as needed.
Process.sleep(2000)
end
end
# To run this example: mix run -e "Raxol.Docs.Guides.Examples.Layout.AdvancedLayoutTest.main()"
# (Assuming Raxol is a dependency or mix project is set up)