6f93c7d935
Move the techdemo page shell and remaining board/inspector/hero boundaries to hemplate-owned views instead of Rust raw HTML or placeholder replacement. Keep rendered HTML assertions DOM-aware with scraper. req: html_safety/002 req: view/001 req: test/005
68 lines
3.0 KiB
Plaintext
68 lines
3.0 KiB
Plaintext
<main data-slhx-root="techdemo" data-slhx-sse="/events">
|
|
<section class="hero-shell">
|
|
<div class="hero-copy">
|
|
<p class="eyebrow">slhx Control Plane</p>
|
|
<h1>A Linear-class work system without a frontend framework.</h1>
|
|
<p class="lede">Create, inspect, advance, and stream work through native HTML, generated typed resources, and compact EffectBatches. The UI feels app-grade; the model stays server-owned and boring.</p>
|
|
</div>
|
|
<div class="hero-panel" data-slhx-slot="hero_metrics">{+= self.hero =+}</div>
|
|
</section>
|
|
|
|
<nav class="topology" data-slhx-slot="nav">
|
|
<a href="/" data-slhx-nav="">Live system</a>
|
|
<a href="/architecture" data-slhx-nav="">Architecture</a>
|
|
</nav>
|
|
|
|
<section class="workspace">
|
|
<aside class="command-card">
|
|
<h2>Create an issue</h2>
|
|
<form id="launch-work" method="post" data-slhx-handle="launch_work" data-slhx-form="launch_work" data-slhx-disable-while-pending>
|
|
<input type="hidden" name="__h" value="539242093">
|
|
<label>Title <input name="title" required="required" value="Ship typed effects"></label>
|
|
<label>Lane
|
|
<select name="lane" required="required">
|
|
<option value="compiler">Compiler</option>
|
|
<option value="runtime">Runtime</option>
|
|
<option value="product">Product</option>
|
|
</select>
|
|
</label>
|
|
<label>Impact <input name="impact" type="number" min="1" max="9" value="7"></label>
|
|
<button class="primary-action" type="button" form="launch-work" data-slhx-handle="launch_work">Create issue</button>
|
|
</form>
|
|
<div class="quick-actions">
|
|
<button type="button" data-slhx-handle="simulate_push">Simulate server push</button>
|
|
<button type="button" data-slhx-handle="reset_demo">Reset demo</button>
|
|
</div>
|
|
<p data-slhx-slot="notice" class="notice">Every control posts a numeric handle id and receives typed effects.</p>
|
|
</aside>
|
|
|
|
<section class="board-card">
|
|
<div class="section-heading">
|
|
<span>Generated slots + keyed cards</span>
|
|
<strong>generated resources, no selectors</strong>
|
|
</div>
|
|
<div data-slhx-slot="board">{+= self.board =+}</div>
|
|
</section>
|
|
</section>
|
|
|
|
<section class="insight-grid">
|
|
<article class="glass-card">
|
|
<h2>Effect inspector</h2>
|
|
<div data-slhx-slot="inspector">{+= self.inspector =+}</div>
|
|
</article>
|
|
<article class="glass-card">
|
|
<h2>Activity stream</h2>
|
|
<div data-slhx-slot="activity">{+= self.activity =+}</div>
|
|
</article>
|
|
<article class="glass-card glow">
|
|
<h2>Server push</h2>
|
|
<div data-slhx-slot="live_feed">Waiting for SSE heartbeat…</div>
|
|
</article>
|
|
</section>
|
|
|
|
<button type="button" data-slhx-handle="advance_work" hidden="hidden">Advance</button>
|
|
<button type="button" data-slhx-handle="delete_work" hidden="hidden">Delete</button>
|
|
<button type="button" data-slhx-handle="spotlight_work" hidden="hidden">Spotlight</button>
|
|
<button type="button" data-slhx-handle="move_to_lane" hidden="hidden">Move to lane</button>
|
|
</main>
|