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

1"""Showcase controller for demonstrating stateful components.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

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 

16 

17 

18@inject 

19class ShowcaseController: 

20 """Controller for showcasing stateful components and features.""" 

21 

22 def __init__(self, renderer: PageRenderer): 

23 self.renderer = renderer 

24 

25 @get("/showcase/counter") 

26 async def counter_example(self) -> Any: 

27 """Display counter component example.""" 

28 counter = CounterComponent(initial_value=10) 

29 

30 return self.renderer.render_page(counter, title="Counter Component Example") 

31 

32 @get("/showcase/wizard") 

33 async def wizard_example(self) -> Any: 

34 """Display form wizard example.""" 

35 wizard = FormWizard() 

36 

37 return self.renderer.render_page(wizard, title="Form Wizard Example") 

38 

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 

43 

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 ) 

92 

93 return self.renderer.render_page(content, title="Component Showcase")