- Sync app, public, scripts, test and examples from the framework's component-showcase: redesigned component demos, marketing blocks under /blocks, template and preview galleries, distinct Timeline/Section variants, Chat Bubble receipts, a top-placement Drawer demo, and the playground code panel fix (objects in array props no longer blank out). - Standalone adaptations kept: the generator and tests read component-reference.json from the published @wrnexus/ui, and tests use the published @wrnexus/compiler and @wrnexus/syntax. - Dependencies: every @wrnexus/* package to its latest release (ui 0.8.88, styles 0.8.26, core 0.8.16, cli 0.8.72, ...), happy-dom for the playground tests, Tailwind 4.3; bun.lock and package-lock.json refreshed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
206 lines
21 KiB
Plaintext
206 lines
21 KiB
Plaintext
// Generated by scripts/generate-showcase.mjs. Do not edit directly.
|
||
page AlertDetail {
|
||
layout = "showcase"
|
||
state playground_size = ctx.url.searchParams.get("pg_size") ?? "default"
|
||
state playground_color = ctx.url.searchParams.get("pg_color") ?? "success"
|
||
state playground_variant = ctx.url.searchParams.get("pg_variant") ?? "soft"
|
||
state playground_class = ctx.url.searchParams.get("pg_class") ?? ""
|
||
state playground_radius = ctx.url.searchParams.get("pg_radius") ?? "md"
|
||
state playground_shadow = ctx.url.searchParams.get("pg_shadow") ?? "none"
|
||
state playground_title = ctx.url.searchParams.get("pg_title") ?? "Changes saved"
|
||
state playground_description = ctx.url.searchParams.get("pg_description") ?? "Your workspace settings are up to date."
|
||
state playground_items = JSON.parse(ctx.url.searchParams.get("pg_items") ?? "[]")
|
||
state playground_actions = JSON.parse(ctx.url.searchParams.get("pg_actions") ?? "[]")
|
||
state playground_showIcon = (ctx.url.searchParams.get("pg_showIcon") ?? "true") === "true"
|
||
state playground_icon = ctx.url.searchParams.get("pg_icon") ?? "icon-[lucide--circle-check]"
|
||
state playground_dismissible = (ctx.url.searchParams.get("pg_dismissible") ?? "true") === "true"
|
||
state playground_dismissLabel = ctx.url.searchParams.get("pg_dismissLabel") ?? "Dismiss alert"
|
||
state playground_role = ctx.url.searchParams.get("pg_role") ?? "alert"
|
||
state playground_live = ctx.url.searchParams.get("pg_live") ?? "polite"
|
||
state playground_linkLabel = ctx.url.searchParams.get("pg_linkLabel") ?? ""
|
||
state playground_linkHref = ctx.url.searchParams.get("pg_linkHref") ?? ""
|
||
state playground_actionLabel = ctx.url.searchParams.get("pg_actionLabel") ?? ""
|
||
state playground_actionHref = ctx.url.searchParams.get("pg_actionHref") ?? ""
|
||
state playground_compact = (ctx.url.searchParams.get("pg_compact") ?? "false") === "true"
|
||
seo {
|
||
title = "Alert"
|
||
description = "Theme-aware, responsive alert component."
|
||
}
|
||
view {
|
||
<nav class="docs-breadcrumbs" aria-label="Breadcrumb">
|
||
<a href="/">Components</a><span aria-hidden="true">/</span><a href="/base">Base</a><span aria-hidden="true">/</span><span>Alert</span>
|
||
</nav>
|
||
<header class="detail-hero">
|
||
<div class="detail-hero-copy">
|
||
<span class="showcase-eyebrow">Base component</span>
|
||
<h1>Alert</h1>
|
||
<p>Theme-aware, responsive alert component.</p>
|
||
<div class="detail-badges"><span>21 props</span><span>0 slots</span><span>2 outputs</span><span>Theme ready</span><span>Responsive</span></div>
|
||
</div>
|
||
<div class="detail-hero-icon"><span class="icon-[lucide--component] size-10" aria-hidden="true"></span></div>
|
||
</header>
|
||
<section id="playground" class="detail-section playground-section" data-playground data-playground-component="Alert" data-playground-public-tag="true" data-playground-has-slot="false" data-playground-events="dismiss,action">
|
||
<div class="detail-section-heading"><span>Interactive playground</span><h2>Configure Alert</h2><p>Change any prop and inspect the server-rendered component immediately.</p></div>
|
||
<div class="playground-workbench">
|
||
<div class="playground-preview">
|
||
<div class="demo-browser-chrome"><span></span><span></span><span></span><small>Live preview</small></div>
|
||
<div class="playground-preview-source" data-playground-preview><Alert size='{playground_size}' color='{playground_color}' variant='{playground_variant}' class='{playground_class}' radius='{playground_radius}' shadow='{playground_shadow}' title='{playground_title}' description='{playground_description}' items='{playground_items}' actions='{playground_actions}' showIcon='{playground_showIcon}' icon='{playground_icon}' dismissible='{playground_dismissible}' dismissLabel='{playground_dismissLabel}' role='{playground_role}' live='{playground_live}' linkLabel='{playground_linkLabel}' linkHref='{playground_linkHref}' actionLabel='{playground_actionLabel}' actionHref='{playground_actionHref}' compact='{playground_compact}' /></div>
|
||
<section class="playground-code" aria-label="Current component code">
|
||
<header><span><span class="icon-[lucide--code-2] size-4" aria-hidden="true"></span>Component code</span><button type="button" data-playground-copy><span class="icon-[lucide--copy] size-4" aria-hidden="true"></span>Copy</button></header>
|
||
<pre><code data-playground-code>page AlertExample <span>{</span>
|
||
state items = []
|
||
state actions = []
|
||
view <span>{</span>
|
||
<Alert
|
||
color="success"
|
||
shadow="none"
|
||
title="Changes saved"
|
||
description="Your workspace settings are up to date."
|
||
items="<span>{</span>items<span>}</span>"
|
||
actions="<span>{</span>actions<span>}</span>"
|
||
showIcon="true"
|
||
icon="icon-[lucide--circle-check]"
|
||
dismissible="true"
|
||
/>
|
||
<span>}</span>
|
||
<span>}</span></code></pre>
|
||
</section>
|
||
<div class="playground-status" data-playground-status aria-live="polite"></div>
|
||
<div class="playground-event-log" data-playground-event-log aria-live="polite"><strong>Event output</strong><span>Interact with the preview to inspect the typed <code>payload</code>.</span></div>
|
||
</div>
|
||
<form class="playground-controls" data-playground-form>
|
||
<header><div><span>Component props</span><strong>21 controls</strong></div><button type="reset"><span class="icon-[lucide--rotate-ccw] size-4" aria-hidden="true"></span>Reset</button></header>
|
||
<div class="playground-fields"><label class="playground-field" for="playground-alert-size"><span><strong>size</strong><small>string</small></span><select id="playground-alert-size" name="pg_size"><option value="default" selected>default</option><option value="xs">xs</option><option value="sm">sm</option><option value="md">md</option><option value="lg">lg</option><option value="xl">xl</option><option value="icon">icon</option><option value="icon-xs">icon-xs</option><option value="icon-sm">icon-sm</option><option value="icon-lg">icon-lg</option></select></label><label class="playground-field" for="playground-alert-color"><span><strong>color</strong><small>string</small></span><select id="playground-alert-color" name="pg_color"><option value="success" selected>success</option><option value="info">info</option><option value="primary">primary</option><option value="secondary">secondary</option><option value="warning">warning</option><option value="danger">danger</option></select></label><label class="playground-field" for="playground-alert-variant"><span><strong>variant</strong><small>string</small></span><input id="playground-alert-variant" name="pg_variant" type="text" value="soft" /></label><label class="playground-field" for="playground-alert-class"><span><strong>class</strong><small>string</small></span><input id="playground-alert-class" name="pg_class" type="text" value="" /></label><label class="playground-field" for="playground-alert-radius"><span><strong>radius</strong><small>string</small></span><input id="playground-alert-radius" name="pg_radius" type="text" value="md" /></label><label class="playground-field" for="playground-alert-shadow"><span><strong>shadow</strong><small>string</small></span><input id="playground-alert-shadow" name="pg_shadow" type="text" value="none" /></label><label class="playground-field" for="playground-alert-title"><span><strong>title</strong><small>string</small></span><input id="playground-alert-title" name="pg_title" type="text" value="Changes saved" /></label><label class="playground-field" for="playground-alert-description"><span><strong>description</strong><small>string</small></span><input id="playground-alert-description" name="pg_description" type="text" value="Your workspace settings are up to date." /></label><label class="playground-field" for="playground-alert-items"><span><strong>items</strong><small>unknown[]</small></span><textarea id="playground-alert-items" name="pg_items" rows="5" spellcheck="false" data-playground-json>[]</textarea><em data-playground-error></em></label><label class="playground-field" for="playground-alert-actions"><span><strong>actions</strong><small>unknown[]</small></span><textarea id="playground-alert-actions" name="pg_actions" rows="5" spellcheck="false" data-playground-json>[]</textarea><em data-playground-error></em></label><label class="playground-toggle" for="playground-alert-showIcon"><span><strong>show Icon</strong><small>boolean</small></span><input id="playground-alert-showIcon" name="pg_showIcon" type="checkbox" value="true" checked data-playground-boolean /><i aria-hidden="true"></i></label><label class="playground-field" for="playground-alert-icon"><span><strong>icon</strong><small>string</small></span><input id="playground-alert-icon" name="pg_icon" type="text" value="icon-[lucide--circle-check]" /></label><label class="playground-toggle" for="playground-alert-dismissible"><span><strong>dismissible</strong><small>boolean</small></span><input id="playground-alert-dismissible" name="pg_dismissible" type="checkbox" value="true" checked data-playground-boolean /><i aria-hidden="true"></i></label><label class="playground-field" for="playground-alert-dismissLabel"><span><strong>dismiss Label</strong><small>string</small></span><input id="playground-alert-dismissLabel" name="pg_dismissLabel" type="text" value="Dismiss alert" /></label><label class="playground-field" for="playground-alert-role"><span><strong>role</strong><small>string</small></span><input id="playground-alert-role" name="pg_role" type="text" value="alert" /></label><label class="playground-field" for="playground-alert-live"><span><strong>live</strong><small>string</small></span><input id="playground-alert-live" name="pg_live" type="text" value="polite" /></label><label class="playground-field" for="playground-alert-linkLabel"><span><strong>link Label</strong><small>string</small></span><input id="playground-alert-linkLabel" name="pg_linkLabel" type="text" value="" /></label><label class="playground-field" for="playground-alert-linkHref"><span><strong>link Href</strong><small>string</small></span><input id="playground-alert-linkHref" name="pg_linkHref" type="text" value="" /></label><label class="playground-field" for="playground-alert-actionLabel"><span><strong>action Label</strong><small>string</small></span><input id="playground-alert-actionLabel" name="pg_actionLabel" type="text" value="" /></label><label class="playground-field" for="playground-alert-actionHref"><span><strong>action Href</strong><small>string</small></span><input id="playground-alert-actionHref" name="pg_actionHref" type="text" value="" /></label><label class="playground-toggle" for="playground-alert-compact"><span><strong>compact</strong><small>boolean</small></span><input id="playground-alert-compact" name="pg_compact" type="checkbox" value="true" data-playground-boolean /><i aria-hidden="true"></i></label></div>
|
||
</form>
|
||
</div>
|
||
</section>
|
||
<div class="detail-layout">
|
||
<main class="detail-content">
|
||
<section class="detail-section"><div class="detail-section-heading"><span>Live examples</span><h2>Designed for real product surfaces</h2><p>Compare configurations and resize the browser to check responsive behavior.</p></div><div class="demo-list">
|
||
<article class="demo-case">
|
||
<header class="demo-case-header">
|
||
<div><span class="demo-case-eyebrow">Recommended</span><h2>Success message</h2><p>A concise confirmation that can be dismissed.</p></div>
|
||
<span class="demo-case-number">01</span>
|
||
</header>
|
||
<div class="demo-workbench">
|
||
<div id="alert-demo-1" class="demo-canvas demo-canvas--1">
|
||
<div class="demo-browser-chrome"><span></span><span></span><span></span><small>Live preview</small></div>
|
||
|
||
<div class="demo-render"><Alert size="default" color="success" variant="soft" class="" radius="md" shadow="none" title="Changes saved" description="Your workspace settings are up to date." items='[]' actions='[]' showIcon="true" icon="icon-[lucide--circle-check]" dismissible="true" dismissLabel="Dismiss alert" role="alert" live="polite" linkLabel="" linkHref="" actionLabel="" actionHref="" compact="false" /></div>
|
||
</div>
|
||
<section class="demo-code" aria-label="Success message usage">
|
||
<header><span><span class="icon-[lucide--code-2] size-4" aria-hidden="true"></span>Component usage</span><small>.wrn</small></header>
|
||
<pre><code>page AlertExample <span>{</span>
|
||
state items = []
|
||
state actions = []
|
||
view <span>{</span>
|
||
<Alert
|
||
color="success"
|
||
shadow="none"
|
||
title="Changes saved"
|
||
description="Your workspace settings are up to date."
|
||
items="<span>{</span>items<span>}</span>"
|
||
actions="<span>{</span>actions<span>}</span>"
|
||
showIcon="true"
|
||
icon="icon-[lucide--circle-check]"
|
||
dismissible="true"
|
||
/>
|
||
<span>}</span>
|
||
<span>}</span></code></pre>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
<article class="demo-case">
|
||
<header class="demo-case-header">
|
||
<div><span class="demo-case-eyebrow">Compact</span><h2>Informational notice</h2><p>One useful message without unnecessary actions.</p></div>
|
||
<span class="demo-case-number">02</span>
|
||
</header>
|
||
<div class="demo-workbench">
|
||
<div id="alert-demo-2" class="demo-canvas demo-canvas--2">
|
||
<div class="demo-browser-chrome"><span></span><span></span><span></span><small>Live preview</small></div>
|
||
|
||
<div class="demo-render"><Alert size="default" color="info" variant="soft" class="" radius="md" shadow="none" title="Scheduled maintenance" description="The dashboard will be unavailable Sunday, 02:00–02:30 UTC." items='[]' actions='[]' showIcon="true" icon="icon-[lucide--info]" dismissible="true" dismissLabel="Dismiss alert" role="alert" live="polite" linkLabel="" linkHref="" actionLabel="" actionHref="" compact="false" /></div>
|
||
</div>
|
||
<section class="demo-code" aria-label="Informational notice usage">
|
||
<header><span><span class="icon-[lucide--code-2] size-4" aria-hidden="true"></span>Component usage</span><small>.wrn</small></header>
|
||
<pre><code>page AlertExample <span>{</span>
|
||
state items = []
|
||
state actions = []
|
||
view <span>{</span>
|
||
<Alert
|
||
shadow="none"
|
||
title="Scheduled maintenance"
|
||
description="The dashboard will be unavailable Sunday, 02:00–02:30 UTC."
|
||
items="<span>{</span>items<span>}</span>"
|
||
actions="<span>{</span>actions<span>}</span>"
|
||
showIcon="true"
|
||
icon="icon-[lucide--info]"
|
||
dismissible="true"
|
||
/>
|
||
<span>}</span>
|
||
<span>}</span></code></pre>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
<article class="demo-case">
|
||
<header class="demo-case-header">
|
||
<div><span class="demo-case-eyebrow">Advanced</span><h2>Action required</h2><p>A warning with one relevant next step.</p></div>
|
||
<span class="demo-case-number">03</span>
|
||
</header>
|
||
<div class="demo-workbench">
|
||
<div id="alert-demo-3" class="demo-canvas demo-canvas--3">
|
||
<div class="demo-browser-chrome"><span></span><span></span><span></span><small>Live preview</small></div>
|
||
|
||
<div class="demo-render"><Alert size="default" color="warning" variant="soft" class="" radius="md" shadow="none" title="Payment needs attention" description="Update your payment method to keep your subscription active." items='[]' actions='[]' showIcon="true" icon="icon-[lucide--triangle-alert]" dismissible="true" dismissLabel="Dismiss alert" role="alert" live="polite" linkLabel="" linkHref="" actionLabel="Update payment" actionHref="#payment" compact="false" /></div>
|
||
</div>
|
||
<section class="demo-code" aria-label="Action required usage">
|
||
<header><span><span class="icon-[lucide--code-2] size-4" aria-hidden="true"></span>Component usage</span><small>.wrn</small></header>
|
||
<pre><code>page AlertExample <span>{</span>
|
||
state items = []
|
||
state actions = []
|
||
view <span>{</span>
|
||
<Alert
|
||
color="warning"
|
||
shadow="none"
|
||
title="Payment needs attention"
|
||
description="Update your payment method to keep your subscription active."
|
||
items="<span>{</span>items<span>}</span>"
|
||
actions="<span>{</span>actions<span>}</span>"
|
||
showIcon="true"
|
||
icon="icon-[lucide--triangle-alert]"
|
||
dismissible="true"
|
||
actionLabel="Update payment"
|
||
actionHref="#payment"
|
||
/>
|
||
<span>}</span>
|
||
<span>}</span></code></pre>
|
||
</section>
|
||
</div>
|
||
</article></div></section>
|
||
<section id="events" class="detail-section"><div class="detail-section-heading"><span>Component outputs</span><h2>Receive every typed component output</h2><p>Use declarative output handlers in <code>.wrn</code> files or register a direct output handler from JavaScript. The canonical API exposes <code>payload</code> and does not require <code>event.detail</code>.</p></div><div class="detail-events-grid"><div class="detail-events-list"><div><code>@dismiss</code><span>Fires after the announcement or feedback surface is dismissed.</span></div><div><code>@action</code><span>Fires when the component's primary or item action is activated.</span></div></div><div class="detail-event-examples"><section class="demo-code"><header><span><span class="icon-[lucide--braces] size-4" aria-hidden="true"></span>Declarative handlers</span><small>.wrn</small></header><pre><code><Alert
|
||
@dismiss='console.log(payload)'
|
||
@action='console.log(payload)'
|
||
/></code></pre></section><section class="demo-code"><header><span><span class="icon-[lucide--radio] size-4" aria-hidden="true"></span>Direct output handlers</span><small>.js</small></header><pre><code>import <span>{</span> registerOutputHandler <span>}</span> from "@wrnexus/csr/outputs"
|
||
|
||
const component = document.querySelector("[data-ui-component=\"Alert\"], [data-component=\"Alert\"]")
|
||
|
||
if (component) registerOutputHandler(component, "dismiss", (payload) => <span>{</span>
|
||
console.log("dismiss", payload)
|
||
<span>}</span>)
|
||
|
||
if (component) registerOutputHandler(component, "action", (payload) => <span>{</span>
|
||
console.log("action", payload)
|
||
<span>}</span>)</code></pre></section></div></div></section>
|
||
<section id="api" class="detail-section"><div class="detail-section-heading"><span>Component API</span><h2>Props and configuration</h2><p>All content and behavior shown above is supplied through these props and slots.</p></div><div class="docs-table-wrap"><table class="docs-table"><thead><tr><th>Prop</th><th>Type</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>size</code></td><td>string</td><td><code>"default"</code></td><td>No</td></tr><tr><td><code>color</code></td><td>string</td><td><code>"info"</code></td><td>No</td></tr><tr><td><code>variant</code></td><td>string</td><td><code>"soft"</code></td><td>No</td></tr><tr><td><code>class</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>radius</code></td><td>string</td><td><code>"md"</code></td><td>No</td></tr><tr><td><code>shadow</code></td><td>string</td><td><code>"sm"</code></td><td>No</td></tr><tr><td><code>title</code></td><td>string</td><td><code>"Alert"</code></td><td>No</td></tr><tr><td><code>description</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>items</code></td><td>unknown[]</td><td><code>[]</code></td><td>No</td></tr><tr><td><code>actions</code></td><td>unknown[]</td><td><code>[]</code></td><td>No</td></tr><tr><td><code>showIcon</code></td><td>boolean</td><td><code>false</code></td><td>No</td></tr><tr><td><code>icon</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>dismissible</code></td><td>boolean</td><td><code>false</code></td><td>No</td></tr><tr><td><code>dismissLabel</code></td><td>string</td><td><code>"Dismiss alert"</code></td><td>No</td></tr><tr><td><code>role</code></td><td>string</td><td><code>"alert"</code></td><td>No</td></tr><tr><td><code>live</code></td><td>string</td><td><code>"polite"</code></td><td>No</td></tr><tr><td><code>linkLabel</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>linkHref</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>actionLabel</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>actionHref</code></td><td>string</td><td><code>""</code></td><td>No</td></tr><tr><td><code>compact</code></td><td>boolean</td><td><code>false</code></td><td>No</td></tr></tbody></table></div></section>
|
||
</main>
|
||
<aside class="detail-aside">
|
||
<div class="detail-toc"><strong>On this page</strong><a href="#playground">Playground</a><a href="#alert-demo-1">Success message</a><a href="#alert-demo-2">Informational notice</a><a href="#alert-demo-3">Action required</a><a href="#events">Outputs</a><a href="#api">Props API</a></div>
|
||
</aside>
|
||
</div>
|
||
<nav class="detail-pagination">
|
||
<a href="/components/accordion"><small>Previous</small><strong>← Accordion</strong></a>
|
||
<a href="/components/avatar"><small>Next</small><strong>Avatar →</strong></a>
|
||
</nav>
|
||
}
|
||
}
|