# WRNexusJS documentation 0.5.13 Status: Private Developer Preview. This site documents 31 release-aligned packages. # WrNexus > WrNexus is an SSR-first, **Bun-native** full-stack web framework. UI is written in > `.wrn` files (its own component language — NOT React/JSX/Vue). Routing is file-based. > This document teaches an AI how to write correct WrNexus code. It is private and > post-dates model training data, so rely on THIS document, not prior web-framework > assumptions. ## Golden rules - **Pages, components, and layouts are `.wrn` files.** Do NOT write `.tsx`/`.jsx`/React for UI. Do NOT use `useState`, hooks, JSX, or a client bundler. - **Routing is file-based** under `app/`. The filename is the route. No router config. - **Interactivity** lives in `state` + `{expr}` + `@event` inside `.wrn`. Components render on the server and hydrate automatically — you never write client-side JS islands. - **Runtime is Bun only** (uses `Bun.serve`, `bun:sqlite`, `Bun.password`, …). Node is not supported. - To add files, prefer the CLI: `wrnexus generate page ` / `component ` / `api ` / `schema `. ## Project layout ``` app/ pages/ *.wrn → routes: index.wrn = "/", about.wrn = "/about", blog/[slug].wrn = "/blog/:slug" components/ *.wrn → reusable UI, mounted in a page/component via
layouts/ *.wrn → named layouts; a page opts in with layout = "name" api/ *.ts → HTTP handlers: export const GET/POST/PUT/PATCH/DELETE = async (ctx) => Response middleware/ *.ts → export default async (ctx, next) => next() realtime/ *.ts → export default defineRoom({ ... }) from "@wrnexus/core" (ws://host/realtime/) schemas/ *.ts → validation schemas (the `v` builder), used by forms + parseBody locales/ *.json → i18n messages per language db/ schema.ts, queries/*.sql, migrations/*.sql styles/ global.css → Tailwind (default) or plain CSS wrnexus.config.ts → app config (AppConfig from "@wrnexus/styles") public/ → static assets served at / ``` ## `.wrn` page ```wrn page Home { layout = "public" // optional: a component in app/layouts/.wrn ("none" to skip) state count = 0 // optional: seeds client-reactive state (omit for pure SSR) seo { title = "Home" description = "..." canonical = "/" } view {

Hello

Count is {count}, doubled is {count * 2}.

} style { h1 { color: var(--wire-color-text); } } } ``` ## `.wrn` component ```wrn component Counter { props { // props come from mount attributes; each is coerced to the start = 0 // TYPE of its default (so start="5" arrives as the number 5) label = "Count" } state count = start // state may reference props view { } } ``` Mount it from any page/component: `
`. Components render on the server with their props, then hydrate — no per-component JS. ## The `view { }` block (plain HTML + a few directives) - `{expr}` — interpolate a JS expression. Reactive if it references `state`: `{count}`, `{count * 2}`, `{user.name}`. - `@event="expr"` — bind a DOM event; the expression runs in the reactive scope: `@click="count++"`, `@input="name = event.target.value"`. - `
` — mount a component (attrs become string props, coerced). - `` / `` — component/layout slots; fill with `
`. - **Server loop (DB/list/table):** `{#each as [, ]} …rows… {:empty} …fallback… {/each}` — iterates SSR data on the server and renders markup per item. `{item.field}` interpolates (HTML-escaped, XSS-safe). `` is a JS expression, usually an `ssr` data binding (see "Data-driven tables" below). This is how you render a database table in `.wrn`. - **Server conditional:** `{#if } … {:else if } … {:else} … {/if}` — renders the first truthy branch on the server. `` can reference `ssr` data, or the `item`/`index` of an enclosing `{#each}`. Works at page level and inside loops (e.g. `{#if r.active}{:else}{/if}` per row). For client-side show/hide based on reactive `state`, use `data-show="expr"` instead. - i18n: `{t:home.title}` in text, `t:placeholder="form.name"` on attributes — resolved per request from `app/locales/`. - Theme: any element with `data-wire-theme-toggle` toggles light/dark; `data-wire-theme-set="dark"` sets it. - Void/self-closing tags are fine: `
`, ``. - Only `{` and `}` are special (interpolation). Don't use a bare `}` in view text. ## Data-driven tables / lists (server-rendered `.wrn`) Use an `ssr` data binding to fetch rows on the server, then `{#each}` to render them. This renders on the **server** (SSR-first) and is HTML-escaped by default. ```wrn page Admin { layout = "dashboard" // Fetch on the server. The api handler at /api/contacts returns { contacts: [...] }; // this block's `return contacts` exposes that array (via `$data`) as the binding `rows`. ssr { api rows GET /api/contacts { return contacts } } view { {#each rows as r, i} {:empty} {/each}
#{i} {r.name} {r.email}
No submissions yet.
} } ``` The matching API returns the array under a key the `ssr` block reads: ```ts // app/api/contacts.ts → GET /api/contacts import { getDb } from "@wrnexus/db"; export const GET = async () => { const contacts = await getDb().all("SELECT id, name, email FROM contacts ORDER BY id DESC"); return Response.json({ contacts }); // ssr block does `return contacts` }; ``` **Prefer this `.wrn` + `{#each}` approach for DB-backed tables and lists.** (`.ts`/`.tsx` pages returning an HTML string are also supported for fully-custom programmatic rendering, but a `.wrn` page with `ssr` data + `{#each}` is the idiomatic, SSR-first way.) ## API routes (`app/api/*.ts`) ```ts // app/api/users/list.ts → GET /api/users/list import { getDb } from "@wrnexus/db"; export const GET = async (ctx) => { return Response.json({ users: await ListUsers(getDb()) }); }; export const POST = async (ctx) => { const body = await ctx.req.json(); return Response.json({ ok: true, body }, { status: 201 }); }; ``` `ctx` (the `Context` from `@wrnexus/core`) has: `req: Request`, `url: URL`, `params: Record` (dynamic route params, e.g. `/users/[id]` → `ctx.params.id`), `lang: string`, `t(key, params?)` (i18n), `cookies` (get/set), `session` (get/set). Auth: `getUser(ctx)` after `sessionAuth`/`logIn`. When an SSO forward-auth verifier needs the URL that originally reached the gateway, use `@wrnexus/helpers` instead of constructing it from untrusted headers: ```ts import { redirectToLogin } from "@wrnexus/helpers"; return redirectToLogin(ctx, "/login", { allowedHosts: ["admin.localhost:3000", "reports.localhost:3000"], }); ``` The package also exports `getOriginalRequestUrl`, `getOriginalRequestOrigin`, `getOriginalRequestPath`, and `getOriginalRequestMethod`. Always pass `allowedHosts` when using forwarded gateway URLs; the helper rejects untrusted redirect destinations. ## Middleware & realtime ```ts // app/middleware/logger.ts export default async function logger(ctx, next) { console.log(ctx.req.method, ctx.url.pathname); return next(); // return a Response WITHOUT calling next() to short-circuit } ``` ```ts // app/realtime/chat.ts → ws://host/realtime/chat import { defineRoom } from "@wrnexus/core"; export default defineRoom({ onConnect(client) { client.send({ type: "system", text: "connected" }); }, onMessage(client, msg) { client.room.broadcast({ type: "message", data: msg }); }, }); ``` Client side: a page opts in with `data-room="chat"` (handled by the realtime runtime). ## Config (`wrnexus.config.ts`) ```ts import type { AppConfig } from "@wrnexus/styles"; const config: AppConfig = { seo: { title: "App", titleTemplate: "%s | App", description: "..." }, styles: { entry: "app/styles/global.css", process: async ({ entryPath, mode }) => /* Tailwind */ "" }, fonts: { sans: '"Inter", system-ui, sans-serif', google: [{ family: "Inter", weights: [400, 600] }] }, theme: { default: "dark", themes: { light: { "color-primary": "#2563eb" } } }, i18n: { default: "en", locales: ["en", "es"] }, db: { driver: "sqlite", url: "file:./dev.db" }, security: { cors: { enabled: true, origin: ["http://localhost:5173"] } }, // profiles: { production: { db: { driver: "postgres", url: process.env.DATABASE_URL } } }, }; export default config; ``` ## Database (`@wrnexus/db`) ```ts // app/db/schema.ts import { v, table } from "@wrnexus/db"; export const users = table("users", { id: v.id(), name: v.string(), email: v.string().unique(), createdAt: v.timestamp(), }); ``` - Queries: write `app/db/queries/*.sql` with `-- name: ListUsers :many` blocks; `wrnexus db generate` emits typed functions. - Access at runtime: `import { getDb } from "@wrnexus/db"; const rows = await ListUsers(getDb());` - Migrations in `app/db/migrations/`; run `wrnexus db migrate` (dev auto-migrates sqlite). ## Validation (`@wrnexus/validation`) ```ts // app/schemas/login.ts import { v } from "@wrnexus/validation"; export default v.object({ email: v.string().email(), password: v.string().min(8), }); ``` In an API route: `import s from "../schemas/login"; import { parseBody } from "@wrnexus/validation"; const r = await parseBody(s, ctx.req);` → `r.ok ? r.value : r.response`. In a form: `
` + `` (client + server validation wired automatically). ## AI / LLM (`@wrnexus/ai`) ```ts // app/api/ai.ts import { createAI } from "@wrnexus/ai"; const ai = createAI(); // reads ANTHROPIC_API_KEY; default model claude-opus-4-8 export const POST = async (ctx) => { const { prompt } = await ctx.req.json(); return ai.streamResponse(prompt); // or: return Response.json({ text: await ai.generate(prompt) }) }; ``` ## CLI ``` wrnexus dev . # dev server + HMR wrnexus build . # production build → dist/server.js bun dist/server.js # run the production server (or npm start) wrnexus create # scaffold a new app wrnexus update --latest # deps + syntax/config migrations + verification wrnexus generate page # scaffold a page (aliases: g p) wrnexus generate component | api | schema wrnexus db migrate | rollback | status | new [--from-models] | generate | seed wrnexus eject # copy a Wire UI component's .wrn into app/components to customize ``` ## When asked to "create a page/component/feature" 1. Create the `.wrn` file under `app/pages/` (or `app/components/`) with a `page`/`component` block — or run `wrnexus generate page `. 2. Put markup in `view { }`, interactive bits in `state` + `{expr}` + `@event`, reusable UI as components mounted via `data-component`. 3. For data, add an `app/api/*.ts` route and `getDb()`; for forms, add an `app/schemas/*.ts` and `data-schema`. 4. Style with Tailwind utility classes in the view, or theme tokens (`var(--wire-*)`), or `style { }`. 5. Never emit React/JSX, a manual router, or client-side island JS — the framework handles hydration. # Canonical documentation locations - Framework and package documentation: https://wrnexusjs.dev/ - Interactive UI component showcase and examples: https://component.wrnexusjs.dev/ - Comprehensive AI reference: https://wrnexusjs.dev/llms-full.txt # Installed package index ## @wrnexus/ai - @wrnexus/ai 0.5.13 - Documentation: https://wrnexusjs.dev/packages/ai - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/auth - @wrnexus/auth 0.5.13 - Documentation: https://wrnexusjs.dev/packages/auth - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/authz - @wrnexus/authz 0.5.13 - Documentation: https://wrnexusjs.dev/packages/authz - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/captcha - @wrnexus/captcha 0.5.13 - Documentation: https://wrnexusjs.dev/packages/captcha - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/cli - @wrnexus/cli 0.5.13 - Documentation: https://wrnexusjs.dev/packages/cli - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/compiler - @wrnexus/compiler 0.5.13 - Documentation: https://wrnexusjs.dev/packages/compiler - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/core - @wrnexus/core 0.5.13 - Documentation: https://wrnexusjs.dev/packages/core - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/csr - @wrnexus/csr 0.5.13 - Documentation: https://wrnexusjs.dev/packages/csr - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/db - @wrnexus/db 0.5.13 - Documentation: https://wrnexusjs.dev/packages/db - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/dev-server - @wrnexus/dev-server 0.5.13 - Documentation: https://wrnexusjs.dev/packages/dev-server - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/dev-toolbar - @wrnexus/dev-toolbar 0.5.13 - Documentation: https://wrnexusjs.dev/packages/dev-toolbar - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/encryption - @wrnexus/encryption 0.5.13 - Documentation: https://wrnexusjs.dev/packages/encryption - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/helpers - @wrnexus/helpers 0.5.13 - Documentation: https://wrnexusjs.dev/packages/helpers - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/i18n - @wrnexus/i18n 0.5.13 - Documentation: https://wrnexusjs.dev/packages/i18n - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/jwt - @wrnexus/jwt 0.5.13 - Documentation: https://wrnexusjs.dev/packages/jwt - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/mobile - @wrnexus/mobile 0.5.13 - Documentation: https://wrnexusjs.dev/packages/mobile - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/native - @wrnexus/native 0.5.13 - Documentation: https://wrnexusjs.dev/packages/native - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/oauth - @wrnexus/oauth 0.5.13 - Documentation: https://wrnexusjs.dev/packages/oauth - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/plugin - @wrnexus/plugin 0.5.13 - Documentation: https://wrnexusjs.dev/packages/plugin - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/pubsub - @wrnexus/pubsub 0.5.13 - Documentation: https://wrnexusjs.dev/packages/pubsub - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/queue - @wrnexus/queue 0.5.13 - Documentation: https://wrnexusjs.dev/packages/queue - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/reactive - @wrnexus/reactive 0.5.13 - Documentation: https://wrnexusjs.dev/packages/reactive - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/router - @wrnexus/router 0.5.13 - Documentation: https://wrnexusjs.dev/packages/router - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/ssr - @wrnexus/ssr 0.5.13 - Documentation: https://wrnexusjs.dev/packages/ssr - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/styles - @wrnexus/styles 0.5.13 - Documentation: https://wrnexusjs.dev/packages/styles - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/syntax - @wrnexus/syntax 0.5.13 - Documentation: https://wrnexusjs.dev/packages/syntax - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/test - @wrnexus/test 0.5.13 - Documentation: https://wrnexusjs.dev/packages/test - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/tracking - @wrnexus/tracking 0.5.13 - Documentation: https://wrnexusjs.dev/packages/tracking - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/ui - @wrnexus/ui 0.5.13 - Documentation: https://wrnexusjs.dev/packages/ui - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/uploader - @wrnexus/uploader 0.5.13 - Documentation: https://wrnexusjs.dev/packages/uploader - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt ## @wrnexus/validation - @wrnexus/validation 0.5.13 - Documentation: https://wrnexusjs.dev/packages/validation - README and complete exported TypeScript API: https://wrnexusjs.dev/llms-full.txt # UI component catalog The installed @wrnexus/ui 0.5.13 release contains 108 documented components. The contracts below include every mount name, purpose, prop type, required/default status, slot, and event. Interactive examples live only on the dedicated component showcase. ### Accordion Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="Accordion") Category: base Purpose: Theme-aware, responsive accordion component. Props: size: string = "default", color: string = "primary", variant: string = "default", class: string = "", id: string = "accordion", items: string = [], defaultOpen: string = [], multiple: boolean = false, alwaysOpen: boolean = false, disabled: boolean = false, indicator: string = "plus", indicatorPosition: string = "start", showIndicator: boolean = true, bordered: boolean = false, separated: boolean = false, flush: boolean = false, contentItalic: boolean = false Slots: none Events: change, open, close ### AdvancedDatePicker Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AdvancedDatePicker") Category: integrations Purpose: Theme-aware, responsive advanced date picker component. Props: size: string = "default", color: string = "primary", title: string = "Advanced Date Picker", description: string = "", items: string = [], variant: string = "default", class: string = "" Slots: default Events: input, change, open, close, clear ### AdvancedRangeSlider Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AdvancedRangeSlider") Category: integrations Purpose: Theme-aware, responsive advanced range slider component. Props: size: string = "default", color: string = "primary", title: string = "Advanced Range Slider", description: string = "", items: string = [], variant: string = "default", class: string = "" Slots: default Events: input, change, start, end ### AdvancedSelect Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AdvancedSelect") Category: advanced-forms Purpose: Theme-aware, responsive advanced select component. Props: size: string = "default", color: string = "primary", label: string = "Advanced Select", name: string = "", value: string = "", values: string = [], options: string = [], groups: string = [], placeholder: string = "Select an option", placeholderIcon: string = "", searchPlaceholder: string = "Search options…", multiple: boolean = false, searchable: boolean = true, defaultOpen: boolean = false, clearable: boolean = true, allowEmpty: boolean = true, tags: boolean = false, disabled: boolean = false, required: boolean = false, invalid: boolean = false, validationMessage: string = "", helpText: string = "", loading: boolean = false, loadingLabel: string = "Loading options…", emptyLabel: string = "No options found", selectedOptionsLabel: string = "Selected options", clearLabel: string = "Clear selection", createLabel: string = "Create", loadMoreLabel: string = "Load more", searchMode: string = "contains", searchFields: string = "label,description", minSearchLength: number = 0, searchResultLimit: number = 0, maxSelections: number = 0, showCounter: boolean = false, counterTemplate: string = "{selected} selected", optionTemplate: string = "default", selectedTemplate: string = "default", closeOnSelect: boolean = true, scrollToSelected: boolean = true, fixed: boolean = false, placement: string = "bottom", remote: boolean = false, remoteUrl: string = "", remoteQueryParam: string = "q", remoteDebounce: number = 250, remoteAutoLoad: boolean = true, infinite: boolean = false, hasMore: boolean = false, page: number = 1, class: string = "" Slots: none Events: search, select, change, clear, open, close, load, error ### Alert Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="Alert") Category: base Purpose: Theme-aware, responsive alert component. Props: size: string = "default", color: string = "info", variant: string = "soft", class: string = "", radius: string = "md", shadow: string = "sm", title: string = "Alert", description: string = "", items: string = [], actions: string = [], showIcon: boolean = false, icon: string = "", dismissible: boolean = false, dismissLabel: string = "Dismiss alert", role: string = "alert", live: string = "polite", linkLabel: string = "", linkHref: string = "", actionLabel: string = "", actionHref: string = "", compact: boolean = false Slots: none Events: dismiss, action ### AnnouncementBar Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AnnouncementBar") Category: blocks Purpose: Accessible public announcement, emergency, maintenance, or status bar. Props: badge: string = "", badgeIcon: string = "", message: string = "Announcement", description: string = "", icon: string = "icon-[lucide--megaphone]", actionLabel: string = "", actionHref: string = "", actionIcon: string = "", dismissible: boolean = false, dismissLabel: string = "Dismiss announcement", sticky: boolean = false, compact: boolean = false, size: string = "default", color: string = "primary", variant: string = "soft", role: string = "status", live: string = "polite", class: string = "" Slots: none Events: none ### AuthForm Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AuthForm") Category: forms Purpose: Reusable authentication form for sign-in, registration, recovery, reset, and MFA. Props: size: string = "default", color: string = "primary", mode: string = "sign-in", action: string = "/api/auth/login", method: string = "post", title: string = "Sign in", description: string = "", returnTo: string = "", schema: string = "", showRemember: boolean = true, showName: boolean = true, submitLabel: string = "Continue", class: string = "" Slots: default Events: submit, change, input, focus, blur ### AuthSplitLayout Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AuthSplitLayout") Category: layout Purpose: Responsive 50/50 authentication layout with content and form regions. Props: size: string = "default", color: string = "primary", eyebrow: string = "Secure identity", title: string = "Welcome back", description: string = "", brand: string = "Police Management System", features: string = [], class: string = "" Slots: aside-extra, form Events: none ### Avatar Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="Avatar") Category: base Purpose: Theme-aware, responsive avatar component. Props: src: string = "", alt: string = "", initials: string = "", size: string = "md", color: string = "primary", variant: string = "solid", shape: string = "circle", status: string = "", statusLabel: string = "", statusPosition: string = "bottom", badge: string = "", badgeIcon: string = "", badgeLabel: string = "", tooltip: string = "", name: string = "", description: string = "", loading: string = "lazy", class: string = "" Slots: none Events: load, error, click ### AvatarGroup Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="AvatarGroup") Category: base Purpose: Theme-aware, responsive avatar group component. Props: items: string = [], size: string = "md", color: string = "primary", variant: string = "solid", shape: string = "circle", layout: string = "stack", maxVisible: number = 4, columns: number = 3, borderColor: string = "", showTooltips: boolean = true, overflowLabel: string = "Show remaining members", class: string = "" Slots: none Events: overflow ### BackToTop Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="BackToTop") Category: navigation Purpose: Accessible scroll-to-top control with visibility threshold. Props: threshold: number = 500, label: string = "Back to top", ariaLabel: string = "Scroll back to top", icon: string = "icon-[lucide--arrow-up]", position: string = "right", offset: string = "md", behavior: string = "smooth", showProgress: boolean = false, size: string = "default", color: string = "primary", variant: string = "solid", class: string = "" Slots: none Events: none ### Badge Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="Badge") Category: base Purpose: Theme-aware, responsive badge component. Props: label: string = "Badge", size: string = "md", color: string = "primary", variant: string = "solid", shape: string = "pill", class: string = "", icon: string = "", iconPosition: string = "start", dot: boolean = false, dotOnly: boolean = false, dotLabel: string = "Status", animated: boolean = false, avatarSrc: string = "", avatarAlt: string = "", dismissible: boolean = false, dismissLabel: string = "Remove badge", truncate: boolean = false, maxWidth: string = "12rem", anchorLabel: string = "", anchorIcon: string = "", placement: string = "inline", anchorLabelText: string = "Badge anchor" Slots: none Events: dismiss ### Blockquote Showcase: https://component.wrnexusjs.dev/ Mount:
(legacy: data-component="Blockquote") Category: base Purpose: Theme-aware, responsive blockquote component. Props: quote: string = "I just wanted to say that I'm very happy with my purchase so far. The documentation is outstanding - clear and detailed.", citation: string = "", citationTitle: string = "", citationUrl: string = "", avatarSrc: string = "", avatarAlt: string = "", size: string = "md", color: string = "primary", align: string = "left", variant: string = "default", quoteMark: boolean = true, italic: boolean = true, class: string = "" Slots: default Events: none ### Breadcrumb Showcase: https://component.wrnexusjs.dev/ Mount: (legacy: data-component="Breadcrumb") Category: navigation Purpose: Theme-aware, responsive breadcrumb component. Props: size: string = "default", color: string = "primary", label: string = "Breadcrumb", items: string = [], active: string = "", orientation: string = "horizontal", class: string = "" Slots: default Events: navigate, click ### Button Showcase: https://component.wrnexusjs.dev/ Mount: