**Convention: RitzMain() entry point**
Every Ritz file now requires a `@component def RitzMain()` as the entry point.
This provides a consistent, predictable entry point for all applications.
**Universal Main.wasm output**
Build system now always outputs Main.wasm instead of ComponentName.wasm.
This means every example uses the exact same HTML boilerplate!
**Changes:**
**Codegen (llvm_codegen_signals.py):**
- Check for RitzMain component at generation time
- Error if RitzMain not found: "No RitzMain component found!"
- Always call `render_RitzMain()` from main() entry point
- Fix: Scope reactive text nodes to components (`@reactive_text_ComponentName_N_node`)
- Prevents global name collisions when multiple components have reactive text
**Build (build.py):**
- Output Main.wasm in same directory as source file
- Output Main.ll (LLVM IR) for inspection
- Convention over configuration!
**Loader (ritz-runtime.js):**
- Auto-detect component name from WASM filename
- `new RitzLoader().load('Main.wasm')` - no second parameter needed!
- Component name used only for status messages
**Template (examples/template.html):**
- Minimal boilerplate - literally 25 lines
- Just copy and change nothing!
- Loads Main.wasm - works for every example
**Styles (examples/runtime/styles.css):**
- Shared styles for all examples
- Clean, modern defaults
- App container, buttons, inputs, typography
**Example (HighFive):**
```python
@component
def HighFive():
# ... component logic
@component
def RitzMain():
"""Entry point - required!"""
yield HighFive()
```
**Result:**
✅ Every example: copy template.html, change nothing
✅ Every example: builds to Main.wasm
✅ Consistent entry point: RitzMain()
✅ No more component name boilerplate
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
33 lines
705 B
Python
33 lines
705 B
Python
"""
|
|
HighFive counter component - Demonstrates reactive signals and event handlers.
|
|
|
|
This component uses a signal to track state and an onclick handler to update it.
|
|
"""
|
|
|
|
from ritz.syntax import *
|
|
|
|
|
|
@component
|
|
def HighFive():
|
|
"""A counter that tracks high fives."""
|
|
high_fives = signal(0)
|
|
|
|
def increment():
|
|
high_fives += 1
|
|
|
|
with Div(class_="high-five-app"):
|
|
with P():
|
|
yield "Give me a high five! ✋"
|
|
|
|
with P(class_="count"):
|
|
yield f"High fives: {high_fives}"
|
|
|
|
with Button(onclick=increment):
|
|
yield "High Five!"
|
|
|
|
|
|
@component
|
|
def RitzMain():
|
|
"""Entry point - required for all Ritz applications."""
|
|
yield HighFive()
|