Coverage for src / lexigram / admin / controllers / showcase.py: 0%
23 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-11 02:25 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-11 02:25 +0800
1"""Showcase controller for demonstrating stateful components."""
3from __future__ import annotations
5from typing import Any
7from lexigram.admin.ui.examples.stateful_components import ( # type: ignore[import-untyped]
8 CounterComponent,
9 FormWizard,
10)
11from lexigram.admin.ui.templates.page import ( # type: ignore[import-untyped]
12 PageRenderer,
13)
14from lexigram.contracts.web import get
15from lexigram.di.decorators import inject
18@inject
19class ShowcaseController:
20 """Controller for showcasing stateful components and features."""
22 def __init__(self, renderer: PageRenderer):
23 self.renderer = renderer
25 @get("/showcase/counter")
26 async def counter_example(self) -> Any:
27 """Display counter component example."""
28 counter = CounterComponent(initial_value=10)
30 return self.renderer.render_page(counter, title="Counter Component Example")
32 @get("/showcase/wizard")
33 async def wizard_example(self) -> Any:
34 """Display form wizard example."""
35 wizard = FormWizard()
37 return self.renderer.render_page(wizard, title="Form Wizard Example")
39 @get("/showcase")
40 async def index(self) -> Any:
41 """Showcase index with links to all examples."""
42 from lexigram.ui.core.base import el
44 content = el(
45 "div",
46 el(
47 "h1",
48 "Component Showcase",
49 class_="text-3xl font-bold text-foreground mb-8",
50 ),
51 el(
52 "div",
53 el(
54 "div",
55 el(
56 "h2",
57 "Stateful Components",
58 class_="text-xl font-semibold text-foreground mb-4",
59 ),
60 el(
61 "ul",
62 el(
63 "li",
64 el(
65 "a",
66 "Counter Component",
67 href="/showcase/counter",
68 class_="text-primary-600 dark:text-primary-400 hover:underline",
69 ),
70 " - Simple counter with lifecycle hooks",
71 class_="mb-2",
72 ),
73 el(
74 "li",
75 el(
76 "a",
77 "Form Wizard",
78 href="/showcase/wizard",
79 class_="text-primary-600 dark:text-primary-400 hover:underline",
80 ),
81 " - Multi-step form with state management",
82 class_="mb-2",
83 ),
84 class_="space-y-2 list-disc list-inside",
85 ),
86 class_="p-6 bg-card rounded-lg shadow-md border border-border",
87 ),
88 class_="max-w-4xl",
89 ),
90 class_="container mx-auto px-4 py-8",
91 )
93 return self.renderer.render_page(content, title="Component Showcase")