"""Component Showcase — demonstrates all 54 UI components.
Run:
cd examples/python/19-components-showcase
python -m praisonaiui app.py --style dashboard
"""
import praisonaiui as aiui
@aiui.page("all-components", title="All Components", icon="🧩", group="Showcase")
async def all_components():
return aiui.layout([
aiui.header("All 54 Components", level=1),
aiui.caption("A comprehensive showcase of every UI component available."),
aiui.separator(),
# ── Cards & Metrics ──
aiui.header("Cards & Metrics", level=2),
aiui.columns([
aiui.card("Total Users", value=1_234, footer="+12% this week"),
aiui.card("Revenue", value="$45,600", footer="+8% this month"),
aiui.card("Active Now", value=42),
]),
aiui.columns([
aiui.metric("Requests", value="12.3k", delta="+15%"),
aiui.metric("Errors", value=23, delta="+3", delta_color="inverse"),
aiui.metric("Latency", value="45ms", delta="-12ms"),
]),
aiui.stat_group([
{"label": "CPU", "value": "72%", "delta": "+5%"},
{"label": "Memory", "value": "4.2 GB", "delta": "-200MB"},
{"label": "Disk", "value": "120 GB", "delta": "stable"},
]),
aiui.key_value_list([
{"label": "Version", "value": "2.1.0"},
{"label": "Environment", "value": "Production"},
{"label": "Region", "value": "us-east-1"},
{"label": "Uptime", "value": "99.97%"},
], title="System Info"),
aiui.separator(),
# ── Text & Display ──
aiui.header("Text & Display", level=2),
aiui.text("A simple text block for paragraphs and descriptions."),
aiui.caption("This is a caption — small, muted text for annotations."),
aiui.markdown_text("**Bold**, *italic*, and `code` in markdown."),
aiui.code_block("def hello():\n print('Hello, world!')", language="python"),
aiui.json_view({"status": "ok", "items": [1, 2, 3], "nested": {"key": "value"}}),
aiui.html_embed('
Custom HTML embed — any trusted content works here.
'),
aiui.separator(),
# ── Feedback & Status ──
aiui.header("Feedback & Status", level=2),
aiui.columns([
aiui.alert("This is an info message.", variant="info", title="Info"),
aiui.alert("Operation completed.", variant="success", title="Success"),
]),
aiui.columns([
aiui.alert("Please check your input.", variant="warning", title="Warning"),
aiui.alert("Something went wrong.", variant="error", title="Error"),
]),
aiui.callout("This is a helpful tip for users.", variant="info", title="Tip"),
aiui.toast("Changes saved successfully!", variant="success"),
aiui.progress_bar("Upload Progress", value=73),
aiui.columns([
aiui.badge("New"),
aiui.badge("Beta", variant="secondary"),
aiui.badge("Deprecated", variant="destructive"),
aiui.badge("v2.0", variant="outline"),
]),
aiui.spinner("Loading data..."),
aiui.empty("No results found"),
aiui.columns([
aiui.skeleton(variant="text"),
aiui.skeleton(variant="card", height="80px"),
aiui.skeleton(variant="avatar"),
]),
aiui.separator(),
# ── Media & Navigation ──
aiui.header("Media & Navigation", level=2),
aiui.image_display(
"https://placehold.co/600x200/1a1a2e/6366f1?text=PraisonAI",
alt="Placeholder", caption="A sample image", width="100%",
),
aiui.gallery([
{"src": "https://placehold.co/200/1a1a2e/6366f1?text=1", "alt": "Item 1", "caption": "First"},
{"src": "https://placehold.co/200/1a1a2e/22c55e?text=2", "alt": "Item 2", "caption": "Second"},
{"src": "https://placehold.co/200/1a1a2e/ef4444?text=3", "alt": "Item 3", "caption": "Third"},
{"src": "https://placehold.co/200/1a1a2e/eab308?text=4", "alt": "Item 4", "caption": "Fourth"},
]),
aiui.audio_player("https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"),
aiui.video_player("https://www.w3schools.com/html/mov_bbb.mp4", poster="https://placehold.co/600x300/1a1a2e/6366f1?text=Video"),
aiui.avatar(name="Alice Smith", fallback="AS"),
aiui.link("Visit Documentation", href="https://docs.praison.ai", external=True),
aiui.file_download("Download Report", href="/api/report.csv", filename="report.csv"),
aiui.breadcrumb([
{"label": "Home", "href": "/"},
{"label": "Dashboard", "href": "/dashboard"},
{"label": "Analytics"},
]),
aiui.button_group([
{"label": "Save", "variant": "default"},
{"label": "Cancel", "variant": "outline"},
{"label": "Delete", "variant": "destructive"},
]),
aiui.pagination(total=250, page=3, per_page=10),
aiui.separator(),
# ── Layout ──
aiui.header("Layout Components", level=2),
aiui.divider("Section Break"),
aiui.container([
aiui.text("Content inside a container with a title."),
aiui.badge("Contained"),
], title="Named Container"),
aiui.expander("Click to expand", children=[
aiui.text("Hidden content revealed on expand."),
aiui.code_block("secret = 42", language="python"),
]),
aiui.dialog("Settings Dialog", children=[
aiui.text_input("API Key", placeholder="sk-..."),
aiui.switch_input("Debug Mode"),
], description="Configure your application settings."),
aiui.tooltip_wrap(aiui.badge("Hover me"), content="This is a tooltip!"),
aiui.popover(
aiui.badge("Click for details"),
children=[
aiui.text("Popover content with nested components."),
aiui.badge("Inside popover", variant="secondary"),
],
),
aiui.separator(),
# ── Data ──
aiui.header("Data Display", level=2),
aiui.table(
headers=["Agent", "Tasks", "Status", "Last Active"],
rows=[
["Researcher", 15, "Active", "2 min ago"],
["Writer", 8, "Idle", "1 hour ago"],
["Coder", 23, "Active", "Just now"],
],
),
aiui.chart("Monthly Revenue", data=[
{"month": "Jan", "value": 4000},
{"month": "Feb", "value": 5200},
{"month": "Mar", "value": 4800},
], chart_type="bar"),
])
@aiui.page("form-inputs", title="Form Inputs", icon="📝", group="Showcase")
async def form_inputs():
return aiui.layout([
aiui.header("Form Input Components", level=1),
aiui.caption("All 12 form input types — display-only, no server-side state."),
aiui.separator(),
aiui.columns([
aiui.text_input("Full Name", value="Alice Smith", placeholder="Enter your name"),
aiui.number_input("Age", value=28, min_val=0, max_val=150, step=1),
]),
aiui.columns([
aiui.select_input("Country", options=["USA", "UK", "Canada", "Australia"], value="USA"),
aiui.slider_input("Volume", value=65, min_val=0, max_val=100, step=5),
]),
aiui.columns([
aiui.checkbox_input("I agree to the terms", checked=True),
aiui.switch_input("Enable notifications", checked=False),
]),
aiui.radio_input("Preferred language", options=["Python", "JavaScript", "Go", "Rust"], value="Python"),
aiui.textarea_input(
"Bio",
value="I'm a developer who loves building AI tools.",
placeholder="Tell us about yourself...",
rows=4,
),
aiui.separator(),
aiui.header("New Input Types", level=2),
aiui.multiselect_input("Skills", options=["Python", "TypeScript", "Go", "Rust", "SQL"], value=["Python", "TypeScript"]),
aiui.columns([
aiui.date_input("Start Date", value="2026-03-16"),
aiui.time_input("Meeting Time", value="14:30"),
]),
aiui.color_picker_input("Theme Color", value="#6366f1"),
])
@aiui.page("layouts", title="Nested Layouts", icon="📐", group="Showcase")
async def nested_layouts():
return aiui.layout([
aiui.header("Nested Layout Showcase", level=1),
aiui.separator(),
aiui.tabs([
{
"label": "Overview",
"children": [
aiui.stat_group([
{"label": "Total Users", "value": "12.5k", "delta": "+8%"},
{"label": "Active Sessions", "value": 342, "delta": "+12%"},
{"label": "Avg Response", "value": "1.2s", "delta": "-0.3s"},
]),
aiui.key_value_list([
{"label": "Deployment", "value": "v2.1.0"},
{"label": "Last Deploy", "value": "2 hours ago"},
{"label": "Status", "value": "Healthy"},
], title="Quick Info"),
],
},
{
"label": "Details",
"children": [
aiui.breadcrumb([
{"label": "Dashboard", "href": "/"},
{"label": "System", "href": "/system"},
{"label": "Health"},
]),
aiui.container([
aiui.columns([
aiui.card("Agents Running", value=5),
aiui.card("Tasks Queued", value=23),
]),
aiui.table(
headers=["Metric", "Value", "Trend"],
rows=[
["CPU Usage", "45%", "↑"],
["Memory", "2.1 GB", "→"],
["Disk I/O", "120 MB/s", "↓"],
],
),
], title="System Health"),
aiui.pagination(total=150, page=1, per_page=10),
],
},
{
"label": "Settings",
"children": [
aiui.alert("Changes require restart.", variant="warning", title="Note"),
aiui.text_input("API Key", placeholder="sk-..."),
aiui.switch_input("Debug Mode"),
aiui.select_input("Log Level", options=["DEBUG", "INFO", "WARNING", "ERROR"], value="INFO"),
aiui.color_picker_input("Accent Color", value="#6366f1"),
aiui.dialog("Advanced Settings", children=[
aiui.number_input("Max Workers", value=4, min_val=1, max_val=32),
aiui.slider_input("Timeout (s)", value=30, min_val=5, max_val=300),
aiui.checkbox_input("Enable experimental features"),
], description="These settings require expertise."),
],
},
]),
aiui.separator(),
aiui.accordion([
{"title": "What is PraisonAI?", "content": "PraisonAI is a platform for building AI-powered applications with minimal code."},
{"title": "How do components work?", "content": "Components are plain Python dicts with a 'type' key. The frontend renders them automatically."},
{"title": "Can I nest components?", "content": "Yes! Use layout(), container(), tabs(), and accordion() to nest components arbitrarily."},
]),
])